[med-svn] r360 - in trunk/packages/seaview/trunk: . debian

charles-guest at alioth.debian.org charles-guest at alioth.debian.org
Sat Jul 21 02:32:37 UTC 2007


Author: charles-guest
Date: 2007-07-21 02:32:37 +0000 (Sat, 21 Jul 2007)
New Revision: 360

Added:
   trunk/packages/seaview/trunk/debian/examples/
Removed:
   trunk/packages/seaview/trunk/Makefile
   trunk/packages/seaview/trunk/README
   trunk/packages/seaview/trunk/align.cxx
   trunk/packages/seaview/trunk/chooser_plus.cxx
   trunk/packages/seaview/trunk/comlines.cxx
   trunk/packages/seaview/trunk/config.h
   trunk/packages/seaview/trunk/custom.cxx
   trunk/packages/seaview/trunk/examples/
   trunk/packages/seaview/trunk/load_seq.cxx
   trunk/packages/seaview/trunk/mac_pc_extras.cxx
   trunk/packages/seaview/trunk/matpt.h
   trunk/packages/seaview/trunk/nexus.cxx
   trunk/packages/seaview/trunk/pdf.cxx
   trunk/packages/seaview/trunk/postscript.cxx
   trunk/packages/seaview/trunk/protein.mase
   trunk/packages/seaview/trunk/regions.cxx
   trunk/packages/seaview/trunk/resource.cxx
   trunk/packages/seaview/trunk/seaview.cxx
   trunk/packages/seaview/trunk/seaview.h
   trunk/packages/seaview/trunk/seaview.help
   trunk/packages/seaview/trunk/seaview.xcf
   trunk/packages/seaview/trunk/seaview.xpm
   trunk/packages/seaview/trunk/seaview_align.sh
   trunk/packages/seaview/trunk/use_mase_files.cxx
   trunk/packages/seaview/trunk/xfmatpt.cxx
Modified:
   trunk/packages/seaview/trunk/debian/
   trunk/packages/seaview/trunk/debian/changelog
   trunk/packages/seaview/trunk/debian/rules
Log:
Swiched to MergeWithUpstream, to save space

Deleted: trunk/packages/seaview/trunk/Makefile
===================================================================
--- trunk/packages/seaview/trunk/Makefile	2007-07-20 10:28:45 UTC (rev 359)
+++ trunk/packages/seaview/trunk/Makefile	2007-07-21 02:32:37 UTC (rev 360)
@@ -1,49 +0,0 @@
-#this makefile has 2 targets
-#seaview    (default target) for standard unix/linux compilation
-#seaviewps  does not use the PDFLibLite library and outputs postscript 
-
-#customize these next 3 lines
-FLTK = ../fltk-1.1.6
-PDF = ../PDFlib-Lite-6.0.1/libs/pdflib
-X11 = /usr/X11R6
-
-#comment out and customize next line to set helpfile name at compile-time
-#HELP_NOT_IN_PATH = -DDEFAULT_HELPFILE=\"/bge/mgouy/seaview/seaview.help\"
-
-CXX = g++
-
-OPT = $(shell if [ '$(DEBUG)' = '' ]; then echo '-O2'; else echo '-O0'; fi)
-
-STDCFLAGS  = -Dunix  -c $(OPT) -I$(FLTK) -I$(X11)/include $(DEBUG) $(HELP_NOT_IN_PATH)
-
-CFLAGS = $(STDCFLAGS) -I$(PDF)
-PDFLIBS = -L$(PDF) -lpdf 
-
-
-#conditional macros 
-seaviewps : CFLAGS = $(STDCFLAGS) -DNO_PDF -DNO_CLUSTALW
-
-
-OBJECTS = custom.o use_mase_files.o regions.o load_seq.o align.o xfmatpt.o comlines.o chooser_plus.o resource.o nexus.o
-
-
-seaview : seaview.o $(OBJECTS) pdf.o
-	$(CXX) $(DEBUG)  seaview.o $(OBJECTS) pdf.o \
-			-L$(FLTK)/lib -lfltk \
-			$(PDFLIBS)   \
-             -L$(X11)/lib -lX11 \
-             -o seaview \
-             -lm        
-
-seaviewps : seaview.o $(OBJECTS) postscript.o
-	$(CXX) $(DEBUG)  seaview.o $(OBJECTS) postscript.o \
-			-L$(FLTK)/lib -lfltk \
-             -L$(X11)/lib -lX11 \
-             -o seaview \
-             -lm        
-
-
-.SUFFIXES:	.cxx .h .o
-
-.cxx.o :
-	$(CXX) $(CFLAGS) $<

Deleted: trunk/packages/seaview/trunk/README
===================================================================
--- trunk/packages/seaview/trunk/README	2007-07-20 10:28:45 UTC (rev 359)
+++ trunk/packages/seaview/trunk/README	2007-07-21 02:32:37 UTC (rev 360)
@@ -1,13 +0,0 @@
-Compilation instructions under unix/linux
-
-- the FLTK library is needed
-
-- optionally, the PDFLib Lite library is used: 
-	make 
-will use it but 
-	make seaviewps 
-will not to use it and will create a postscript-producing executable.
-
-- modify the Makefile to reflect locations of FLTK, PDFLib Lite include files and libraries.
-
-- optionally, comment out and customize the HELP_NOT_IN_PATH line in Makefile to set helpfile name at compile-time. If not done, file seaview.help is searched in all directories of the PATH.

Deleted: trunk/packages/seaview/trunk/align.cxx
===================================================================
--- trunk/packages/seaview/trunk/align.cxx	2007-07-20 10:28:45 UTC (rev 359)
+++ trunk/packages/seaview/trunk/align.cxx	2007-07-21 02:32:37 UTC (rev 360)
@@ -1,716 +0,0 @@
-#include "seaview.h"
-#include <stdlib.h>
-#include <ctype.h>
-#ifdef unix
-#include <unistd.h>
-#endif
-#ifndef WIN32
-#include <FL/x.H>
-#endif
-#if defined(__APPLE__) && TARGET_RT_MAC_MACHO
-#include <unistd.h>
-#include <sys/stat.h>
-#endif
-
-
-/* local prototypes */
-int save_part_as_pir(int debut, int fin, char **sequence, char **seqname, 
-	int *sel_seqs, int tot_seqs, char *fname, int *withU, int *empty_seq,
-	int *num_longest, int protein);
-int replace_align_part(SEA_VIEW *view, int debut, int fin, char *fname, int withU, int num_longest,
-	int has_phylip_format);
-void align_selected_parts(SEA_VIEW *view, int align_algorithm);
-int calc_gap_sites(char *old_seq, char *new_seq, int lold, int lnew, 
-	gap_site *gap_sites, int maxsites);
-int insert_gaps_new_align(char **seq, int site, int number, int numseqs, 
-	int lseqs);
-int reset_stars(SEA_VIEW *view, int debut, int lpart, char **seq, int lfrag);
-int confirm_refer_seq(int num_longest, SEA_VIEW *view);
-
-/* extern proto */
-extern int insert_gaps_at(SEA_VIEW *view, int seq, int site, int total);
-extern int insert_gap_all_comments(int numgaps, int pos,  SEA_VIEW *view);
-#ifdef WIN32
-extern "C" {
-int mysystem(const char *command);
-}
-#elif defined(__APPLE__)
-#if TARGET_RT_MAC_MACHO
-int my_system_macho(char *command, char *base_fname);
-extern "C" { char *MG_GetBundleResourcesDir(void); }
-#else
-void *my_run_program(char *prog, char *arguments, int flavor);
-void loop_till_program_ends(void *psn);
-extern "C" { char *get_prog_dir(void); }
-#endif
-#else
-void change_attr(Fl_Window *w);
-#endif
-
-
-/* extern variables */
-extern gap_site gap_sites[];
-
-int save_part_as_pir(int debut, int fin, char **sequence, char **seqname, 
-	int *sel_seqs, int tot_seqs, char *fname, int *withU, int *empty_seq,
-	int *num_longest, int protein)
-/* returns TRUE iff error */
-{
-FILE *out;
-int num, pos, l_line, retval, maxlen, seqlen, current;
-char line[90];
-
-out = fopen(fname,"w");
-if( out == NULL ) return TRUE;
-retval = TRUE;
-*withU = FALSE;
-maxlen = 0; current = 0;
-for(num = 0; num < tot_seqs; num++) {
-	if( ! sel_seqs[num] ) continue;
-	sprintf(line, "%d_%s", ++current, seqname[num]);
-	fprintf(out, ">%.10s\n", line);
-	if(ferror(out)) goto fin;
-	*empty_seq = TRUE;
-	l_line = 0;
-	seqlen = 0;
-	for ( pos = debut - 1 ; pos < fin; pos++) {
-		if( sequence[num][pos] == 0 ) break;
-		if( sequence[num][pos] == '-' ) continue;
-		if(l_line >= 70) {
-			line[l_line] = 0;
-			if(!*withU) *withU = (strchr(line, 'U') != NULL);
-			fprintf(out, "%s\n", line);
- 			if(ferror(out)) goto fin;
-			seqlen += l_line;
-			l_line = 0;
-			}
-		line[l_line++] = sequence[num][pos];
-		if(sequence[num][pos] == '*') line[l_line - 1] = 'X';
-		*empty_seq = FALSE;
-		}
-	line[l_line] = 0;
-	seqlen += l_line;
-	if(seqlen > maxlen) {
-		maxlen = seqlen; *num_longest = num;
-		}
-	if(!*withU) *withU = (strchr(line, 'U') != NULL);
-	fprintf(out, "%s\n", line);
-	if( *empty_seq ) strcpy(fname, seqname[num]);
-	if(ferror(out) || *empty_seq) goto fin;
-	}
-retval = FALSE;
-fin:
-if( fclose(out) != 0) return TRUE;
-return retval;		
-}
-
-
-void align_selected_parts(SEA_VIEW *view, int align_algorithm)
-{
-int debut, fin, status, withU, empty_seq, num_longest, l;
-char *p, *q;
-static char base_fname[100], commande[300];
-FILE *in;
-static char *prog_path;
-static char algo_name[2][20] = {"clustalw", "muscle"};
-
-/* check for presence of xterm + clustalw/muscle + seaview_align.sh */
-#ifdef WIN32
-	p = (char *)(align_algorithm == CLUSTALW ? "clustalw.exe" : "muscle.exe" ); 
-	status = check_path( p ); 
-#elif defined(__APPLE__) /* need clustalw in same directory as seaview */
-#if TARGET_RT_MAC_MACHO
-	p = MG_GetBundleResourcesDir();
-#else
-	p = get_prog_dir();
-#endif
-	if(p == NULL) status = 1;
-	else	{
-		strcpy(commande, p); 
-#if TARGET_RT_MAC_MACHO
-switch ( align_algorithm ) {
-	case CLUSTALW : strcat(commande, "/clustalw"); break;
-	default : strcat(commande, "/muscle");
-	}
-#else
-		strcat(commande, align_algorithm == CLUSTALW ? ":clustalw" : ":muscle");
-#endif
-		in = fopen(commande, "r");
-		status = (in == NULL);
-		fclose(in);
-		prog_path = (char *)malloc(strlen(commande) + 1);
-		strcpy(prog_path, commande);
-		}
-#else
-	status = check_path((char*)(align_algorithm == CLUSTALW ? "clustalw" : "muscle"));
-	if(status == 0) {
-		status = check_path("xterm");
-		}
-	if(status == 0) {
-		status = check_path("seaview_align.sh");
-		}
-#endif
-	if(status != 0) {
-		fl_message("Alignment operation is impossible because\n"
-#ifdef WIN32
-		  "program clustalw.exe/muscle.exe\n"
-#elif defined(__APPLE__)
-		  "program clustalw/muscle\n"
-#else
-		  "one of the programs xterm, clustalw, muscle, seaview_align.sh\n"
-#endif
-		  "is missing");
-		((Fl_Menu_ *)view->menu_edit)->mode(ALIGN_SEQS,
-			FL_MENU_INACTIVE);
-		return;
-		}
-if(view->active_region == NULL || view->active_region->list == NULL ||
-	view->active_region->list->next != NULL || view->tot_sel_seqs <= 1) {
-	fl_message("Need to have exactly one block of selected sites\n"
-		"and some selected sequences");
-	return;
-	}
-#if !( defined(WIN32) || defined(__APPLE__) )
-/* mettre fenetres en Backing Store State: WhenMapped */
-change_attr( view->DNA_obj->window() ); 
-change_attr( view->dnawin ); 
-#endif
-debut = view->active_region->list->debut;
-fin = view->active_region->list->fin;
-#if  defined(WIN32) || defined(__APPLE__) 
-tmpnam(base_fname); 
-#else
-strcpy(base_fname, "/tmp/seaview.XXXXXX");
-if(mktemp(base_fname) == NULL) return;
-#endif
-/* 
-convertir en minuscules car clustalw n'accepte pas les majuscules ds filenames
-*/
-p = base_fname - 1; while( *(++p) != 0) *p = tolower( *p);
-#ifdef WIN32 /* pas de . et pas plus de 8 car */
-p = base_fname; while( ( q = strchr(p, '\\')) != NULL ) p = q + 1;
-p[8] = 0;
-if( (q = strchr(p + 1,'.')) != NULL ) *q = 0;
-#endif
-sprintf(commande, "%s.pir", base_fname);
-/* allonger les seqs plus courtes que la region traitee */
-for(l = 0; l < view->tot_seqs; l++) {
-	if(!view->sel_seqs[l]) continue;
-	if(fin > view->each_length[l]) insert_gaps_at(view, l + 1, 
-			view->each_length[l] + 1, fin - view->each_length[l]);
-	}
-status = save_part_as_pir(debut, fin, view->sequence, view->seqname, 
-	view->sel_seqs, view->tot_seqs, commande, &withU, &empty_seq, 
-	&num_longest, view->protein);
-if(view->protein) withU = FALSE;
-if(empty_seq) {
-	fl_alert("Cannot process sequence(s)\n%s\n"
-		 "containing only gaps", commande);
-	}
-if( (!empty_seq) && status) {
-	fl_alert("Cannot write sequences to filename\n%s", commande);
-	return;
-	}
-if(!empty_seq) num_longest = confirm_refer_seq(num_longest, view);
-if(num_longest == -1 || empty_seq) {
-	sprintf(commande, "%s.pir", base_fname);
-	remove(commande);
-	return;
-	}
-my_watch_cursor(view->dnawin);
-
-/* pour memoire: clustalw retourne 1 ou -1 si erreur, autre chose = succes */
-#ifdef WIN32
-switch (align_algorithm) {
-	case CLUSTALW : 
-		sprintf(commande, 
-		"clustalw.exe /align /infile=%s.pir /outfile=%s.out /output=phylip /outorder=input ", 
-		base_fname, base_fname); break;
-	default:
-		sprintf(commande, 
-		"muscle.exe  -in %s.pir -out %s.out -stable ", 
-		base_fname, base_fname); break;
-	}
-#elif defined(__APPLE__)
-#if TARGET_RT_MAC_MACHO
-switch (align_algorithm) {
-	case CLUSTALW : 
-		sprintf(commande, 
-	"#!/bin/sh\n\"%s\" -align -infile=%s.pir -outfile=%s.out -output=phylip -outorder=input ", 
-		prog_path, base_fname, base_fname); break;
-	default : 
-		sprintf(commande, 
-	"#!/bin/sh\n\"%s\" -in %s.pir -out %s.out  -stable ", 
-		prog_path, base_fname, base_fname);
-	}
-#else
-sprintf(commande, 
-	"/align /infile=%s.pir /outfile=%s.out /output=phylip /outorder=input ", 
-	base_fname, base_fname);
-#endif
-#else
-sprintf(commande, "xterm -T \"%s alignment\" -n %s -sb -sl 2000 "
-	"-e seaview_align.sh %s ", algo_name[align_algorithm], algo_name[align_algorithm], 
-	algo_name[align_algorithm]);
-l = strlen(commande);
-switch (align_algorithm) {
-	case CLUSTALW : 
-		sprintf(commande + l, 
-		" %s -infile=%s.pir -outfile=%s.out -output=phylip -outorder=input ", 
-		base_fname, base_fname, base_fname); break;
-	default: 
-		sprintf(commande + l, 
-		" %s -in %s.pir -out %s.out -stable ", 
-		base_fname, base_fname, base_fname); break;
-	}
-#endif
-Fl_Menu_Button *menu_props = (Fl_Menu_Button *)view->bouton_props;
-props_menu_parts *props_parts = 
-		(props_menu_parts *)menu_props->user_data();
-status = menu_props->mode(props_parts->clustalopt + 2) & FL_MENU_VALUE;
-if(view->clustal_options != NULL && status ) 
-	sprintf(commande + strlen(commande), "%s", view->clustal_options);
-#ifdef WIN32
-status = mysystem(commande);
-#elif defined(__APPLE__)
-#if TARGET_RT_MAC_MACHO
-status = my_system_macho(commande, base_fname);
-#else
-void *psn = my_run_program(prog_path, commande, 'SvCw');
-if(psn != NULL) loop_till_program_ends(psn);
-status = 0;
-sprintf(commande, "%s.status", base_fname);
-in = fopen(commande, "r");
-if(in == NULL) status = 1;
-else fclose(in);
-#endif
-#else
-status = system(commande);
-if( status == 0 ) {
-	sprintf(commande, "%s.status", base_fname);
-	in = fopen(commande, "r");
-	if(in != NULL) {
-		fgets(commande, sizeof(commande), in);
-		if( strcmp(commande, "success\n") != 0) status = 1;
-		fclose(in);
-		}
-	else	status = 1;
-	}
-#endif
-sprintf(commande, "%s.out", base_fname);
-if( status == 0 ) {
-	in = fopen(commande, "r");
-	if(in != NULL) {
-		fseek(in, 0, SEEK_END);
-		status = (ftell(in) < 10);
-		fclose(in);
-		}
-	else	status = 1;
-	}
-if( status != 0 )
-	fl_message("Alignment operation ignored");
-else	{
-	status = replace_align_part(view, debut, fin, commande, withU, num_longest,
-		(align_algorithm == CLUSTALW ? TRUE : FALSE) );
-	if(status) fl_alert("Not enough memory\nor\n" 
-		"max sequence length reached");
-	}
-sprintf(commande, "%s.pir", base_fname);
-remove(commande);
-sprintf(commande, "%s.out", base_fname);
-remove(commande);
-if(align_algorithm == CLUSTALW) {
-	sprintf(commande, "%s.dnd", base_fname);
-	remove(commande);
-	}
-#ifndef WIN32
-sprintf(commande, "%s.status", base_fname);
-remove(commande);
-#endif
-}
-
-
-int calc_gap_sites(char *old_seq, char *new_seq, int lold, int lnew, 
-	gap_site *gap_sites, int maxsites)
-{
-char *fin_old, *fin_new;
-int tot_sites = 0, posalign = 0;
-fin_old = old_seq + lold - 1; fin_new = new_seq + lnew - 1;
-while( old_seq <= fin_old || new_seq <= fin_new ) {
-	if(old_seq <= fin_old && new_seq <= fin_new && 
-		( ( *old_seq != '-' && *new_seq != '-') ||
-		  ( *old_seq == '-' && *new_seq == '-') ) ){
-		old_seq++; new_seq++;
-		posalign++;
-		continue;
-		}
-	if(tot_sites >= maxsites) return -1;
-	gap_sites[tot_sites].l[1] = 0;
-	gap_sites[tot_sites].l[0] = 0;
-	if(old_seq <= fin_old && *old_seq == '-') {
-		gap_sites[tot_sites].pos = posalign;
-		do	{ old_seq++; ++(gap_sites[tot_sites].l[1]); }
-		while( *old_seq == '-' && old_seq < fin_old);
-		posalign += gap_sites[tot_sites].l[1];
-		}
-	else 	{
-		gap_sites[tot_sites].pos = posalign;
-		do	{ new_seq++; ++(gap_sites[tot_sites].l[0]); }
-		while( *new_seq == '-' && new_seq < fin_new);
-		posalign += gap_sites[tot_sites].l[0];
-		}
-	tot_sites++;
-	}
-return tot_sites;
-}
-
-
-int replace_align_part(SEA_VIEW *view, int debut, int fin, char *fname, 
-	int withU, int num_longest, int has_phylip_format)
-/* returns TRUE if error, FALSE if ok */
-{
-int num, lfrag, lpart, i, col, rang, retval, newlength, lfrag2;
-char **seq, **comments, **seqname, *pheader, *err_message;
-int (*calc_color_function)(int);
-int totgapsites, num1, site, l_copy, res;
-char *tmp;
-
-view->cursor_in_comment = FALSE;
-view->cursor_seq = view->first_seq;
-/* lecture de l'alignement multiple produit par clustalw */
-num = (has_phylip_format ?
-	read_phylip_align(fname, &seq, &seqname, &comments, &pheader, &err_message)
-	:
-	read_fasta_align(fname, &seq, &seqname, &comments, &pheader, &err_message)
-	);
-for(i = 0; i < num; i++) free(seqname[i]);
-if(num > 0) { free(seqname); free(comments); }
-if(num != view->tot_sel_seqs) { if(num > 0) free(seq); return TRUE; }
-
-retval = TRUE;
-if(withU) { 
-/* si seq avec U au depart, les remettre car ont ete changes en T par clustalw */
-	char *p, *q;
- 	for(num = 0; num < view->tot_sel_seqs; num++) {
- 		p = seq[num];
- 		while( (q = strchr(p, 'T')) != NULL) { *q = 'U'; p = q; }
-		}
-	}	
-lfrag = strlen(seq[0]); /* long alignement de clustalw */
-lpart = fin - debut + 1; /*long region traitee de l'ancien alignement multiple*/
-if( reset_stars(view, debut, lpart, seq, lfrag) ) return TRUE;
-/* num1 = rang dans align clustalw de num_longest dans align multiple */
-num1 = -1;
-for(i = 0; i < view->tot_seqs; i++) {
-	if( !view->sel_seqs[i]) continue;
-	num1++;
-	if( i == num_longest) break;
-	}
-/* calcul des pos et longs de gaps a inserer:
-gap_sites[x].pos = position a droite du gap a inserer (from 0)
-gap_sites[x].l[0] = longueur a inserer dans alignement multiple
-gap_sites[x].l[1] = longueur a inserer dans alignement produit par clustalw
-*/
-totgapsites = calc_gap_sites(view->sequence[num_longest] + debut - 1, seq[num1],
-	FL_min(lpart, view->each_length[num_longest] - debut + 1),
-	lfrag, gap_sites, MAX_GAP_SITES);
-if(totgapsites == -1) goto fin;
-/* calcul long region traitee apres ajout des gaps */
-for(site=0; site<totgapsites; site++) 
-	lpart += gap_sites[site].l[0];
-/* l'alignement multiple serait-il trop long en fin d'operation? */
-if( view->seq_length + lpart - (fin - debut + 1) > view->max_seq_length ) 
-	goto fin;
-/* calcul long alignement de clustalw apres ajout des gaps */
-lfrag2 = lfrag;
-for(site = 0; site < totgapsites; site++) 
-	lfrag2 += gap_sites[site].l[1];
-/* allongement memoire pour seqs de l'alignement de clustalw */
-for(num=0; num<view->tot_sel_seqs; num++) {
-	tmp = (char *)malloc(lfrag2+1);
-	if(tmp == NULL) goto fin;
-	memcpy(tmp, seq[num], lfrag+1);
-	free(seq[num]);
-	seq[num] = tmp;
-	}
-/* allongement des seqs de l'alignement de clustalw */
-for(site = 0; site < totgapsites; site++) {
-	if(gap_sites[site].l[1] == 0) continue;
-	lfrag = insert_gaps_new_align(seq, gap_sites[site].pos, 
-		gap_sites[site].l[1],
-		view->tot_sel_seqs, lfrag);
-	}
-if(view->numb_gc > 1) {
-	calc_color_function = ( view->protein ? 
-		get_color_for_aa : get_color_for_base );
-	}
-newlength = view->seq_length;
-/* allongement des seqs de l'alignement multiple */
-for(site = 0; site < totgapsites; site++) {
-	if(gap_sites[site].l[0] == 0) continue;
-	for(num = 0; num < view->tot_seqs; num++) {
-		insert_gaps_at(view, num + 1, 
-			debut + gap_sites[site].pos, gap_sites[site].l[0]);
-		}
-	newlength += gap_sites[site].l[0];
-	insert_region_part(view, debut + gap_sites[site].pos, 
-		gap_sites[site].l[0]);
-	if(view->tot_comment_lines > 0) insert_gap_all_comments(
-		gap_sites[site].l[0], debut + gap_sites[site].pos, view);
-	}
-
-/* copie des sequences de clustalw vers alignement multiple */
-rang = -1;
-for(num = 0; num < view->tot_seqs; num++) {
-	if(  ! view->sel_seqs[num] ) continue;
-	rang++;
-/* on met les nouvelles seqs */ 
-	l_copy = FL_min(lpart, lfrag);
-	memcpy( view->sequence[num] + debut - 1, seq[rang], l_copy);
-	if(debut + l_copy - 1 > view->each_length[num])
-		view->each_length[num] = debut + l_copy - 1;
-	newlength = FL_max(newlength, view->each_length[num]);
-	if(view->each_length[num] == debut + l_copy - 1) 
-		view->sequence[num][debut + l_copy - 1] = 0;
-	if(view->numb_gc == 1) continue;
-	for(i = 0; i < view->numb_gc; i++) {
-		memset( view->col_seq[num][i] + debut - 1, ' ', l_copy);
-		}
-	for(i = debut - 1; i < debut + l_copy - 1; i++) {
-		res = view->sequence[num][i];
-		col = calc_color_function( res );
-		view->col_seq[num][col][i] = 
-			(view->allow_lower ? res : toupper(res) );
-		}
-	if(view->each_length[num] == debut + l_copy - 1) {
-		for(col = 0; col < view->numb_gc; col++) 
-			view->col_seq[num][col][debut + l_copy - 1] = 0;
-		}
-	}
-/* mettre a jour horsli */
-update_current_seq_length(newlength, view);
-view->modif_but_not_saved = TRUE;
-retval = FALSE;
-
-fin:
-for(num = 0; num < view->tot_sel_seqs; num++) 
-	free(seq[num]);
-free(seq);
-return retval;
-}
-
-
-int insert_gaps_new_align(char **seq, int site, int number, int numseqs, 
-	int lseqs)
-{
-int num;
-char *pos;
-for(num=0; num < numseqs; num++) {
-	pos = seq[num] + site;
-	memmove(pos + number, pos, lseqs - site + 1);
-	memset(pos, '-', number);
-	}
-return lseqs + number;
-}
-
-
-int reset_stars(SEA_VIEW *view, int debut, int lpart, char **seq, int lfrag)
-{
-int oldseq, newseq;
-char *p, *q;
-
-newseq = -1;
-for(oldseq = 0; oldseq < view->tot_seqs; oldseq++) {
-	if(!view->sel_seqs[oldseq]) continue;
-	newseq++;
-	p = view->sequence[oldseq] + debut - 2;
-	q = seq[newseq] - 1;
-	while(TRUE) {
-		p++; q++;
-		while (*p == '-') p++;
-		while (*q == '-') q++;
-		if(*p == 0 || *q == 0) break;
-		if( *p == '*' && *q == 'X') *q = '*';
-		if( toupper(*p) != toupper(*q) ) return TRUE;
-		if( islower(*p) ) *q = *p;
-		}
-	}
-return FALSE;
-}
-
-
-int confirm_refer_seq(int num_longest, SEA_VIEW *view)
-{
-static Fl_Window *form;
-static int first = TRUE;
-static Fl_Browser *browser_noms;
-static Fl_Button *ok_button, *cancel_button;
-int lnum, i;
-if(first) {
-	first = FALSE;
-	form = new Fl_Window( 300, 400);
-	form->label("Reference Sequence");
-	form->box(FL_FLAT_BOX);
-	fl_font(FL_HELVETICA, FL_NORMAL_SIZE);
-	browser_noms = new Fl_Browser(5, 5 + fl_height(), form->w() - 10, 
-		form->h() - 35 - fl_height(), "Choose one seq.");
-	browser_noms->type(FL_HOLD_BROWSER);
-	browser_noms->textsize(FL_NORMAL_SIZE);
-	browser_noms->has_scrollbar(Fl_Browser_::VERTICAL);
-	browser_noms->align(FL_ALIGN_TOP);
-	browser_noms->color(FL_LIGHT1, browser_noms->selection_color());
-	ok_button = new Fl_Return_Button(5, form->h() - 25, 
-		browser_noms->w() / 2, 20, "OK");
-	cancel_button = new Fl_Button(ok_button->x() + ok_button->w(), 
-		ok_button->y(), ok_button->w(), ok_button->h(), "Cancel");
-	form->resizable(browser_noms);
-	form->end();
-	form->set_modal();
-	}
-browser_noms->clear();
-lnum = 0;
-for(i = 0; i < view->tot_seqs; i++) {
-	if(!view->sel_seqs[i]) continue;
-	lnum++;
-	browser_noms->add(view->seqname[i]);
-	if(i == num_longest) browser_noms->value(lnum);
-	}
-form->show();
-for (;;) {
-	Fl_Widget *o = Fl::readqueue();
-	if (!o) Fl::wait();
-	else if(o == cancel_button ) { num_longest = -1; break; }
-	else if(o == ok_button && browser_noms->value() != 0) break;
-	}
-form->hide();
-if(num_longest == -1) return -1;
-Fl::flush();
-
-lnum = browser_noms->value();
-for(i = 0; i < view->tot_seqs; i++) {
-		if(!view->sel_seqs[i]) continue;
-		if(strcmp(view->seqname[i], browser_noms->text(lnum)) == 0) {
-			num_longest = i;
-			break;
-			}
-		}
-return num_longest;
-}
-
-
-
-#if defined(__APPLE__)
-
-#if TARGET_RT_MAC_MACHO
-
-int my_system_macho(char *command, char *base_fname)
-{
-char comfile[300];
-FILE *out;
-FSRef myref, myterm, frontproc;
-LSLaunchFSRefSpec mylaunch;
-OSStatus status;
-ProcessSerialNumber newpsn;
-
-sprintf(comfile, "%s.command", base_fname);
-out = fopen(comfile, "w");
-fprintf(out, "%s\n", command);
-fclose(out);
-chmod(comfile, S_IRUSR|S_IXUSR);
-status = FSPathMakeRef((const UInt8 *)comfile, &myref, NULL);
-LSFindApplicationForInfo(kLSUnknownCreator, CFSTR("com.apple.terminal"), NULL, &myterm, NULL);
-mylaunch.appRef = &myterm; // FSRef to the Terminal application
-mylaunch.numDocs = 1;
-mylaunch.itemRefs = &myref;
-mylaunch.passThruParams = NULL;
-mylaunch.launchFlags =  kLSLaunchNewInstance ; // run a new Terminal instance
-mylaunch.asyncRefCon = NULL;
-status = LSOpenFromRefSpec(&mylaunch, &frontproc); // frontproc becomes FSRef to newly started Terminal
-if(status == noErr) {
-	GetFrontProcess(&newpsn); // the newly started Terminal
-    sleep(2);
-	fl_cursor(FL_CURSOR_DEFAULT, FL_BLACK, FL_BLACK);
-	status = ask_with_custom_yesno(
-		"Wait for alignment completion in Terminal window.",
-		"Alignment completed","Ignore or interrupt alignment") ? 0 : 1 ; 
-	// try to kill only a newly started Terminal and not something else
-	if( FSCompareFSRefs(&frontproc, &myterm) == noErr) KillProcess(&newpsn);
-	}
-unlink(comfile);
-return status != noErr;
-}
-
-#else
-
-void loop_till_program_ends(void *psn)
-{
-ProcessInfoRec pinfo;
-OSErr err;
-
-while(1) {
-    Fl::wait();
-    pinfo.processInfoLength = sizeof(ProcessInfoRec);
-    pinfo.processName = NULL;
-    pinfo.processAppSpec = NULL;
-    err = GetProcessInformation((ProcessSerialNumber *)psn, &pinfo);
-    if(err == procNotFound) break;
-  }
-}
-
-
-void *my_run_program(char *prog, char *arguments, int flavor)
-{
-LaunchParamBlockRec pbloc;
-FSSpec fspec;
-OSErr err;
-char pfname[256];
-ProcessSerialNumber *pinfo;
-ScrapRef scrapref;
-OSStatus etat;
-Size l;
-UInt32 count;
-
-if(arguments != NULL) { // put arguments in the scrap under the specified flavor
-	etat = ClearCurrentScrap();  // indispensable !
-	etat = GetCurrentScrap(&scrapref);
-	l = strlen(arguments);
-	etat = PutScrapFlavor(scrapref, flavor, kScrapFlavorMaskNone, l, arguments);
-	}
-strcpy(pfname + 1, prog );
-pfname[0] = strlen(pfname+1);
-err = FSMakeFSSpec(0, 0, (ConstStr255Param)pfname, &fspec);
-if(err != noErr) return NULL;
-
-pbloc.launchControlFlags = launchContinue | launchNoFileFlags ;
-pbloc.launchBlockID = extendedBlock;
-pbloc.launchEPBLength = extendedBlockLen;
-pbloc.launchAppParameters = NULL;
-pbloc.launchAppSpec = &fspec;
-err = LaunchApplication(&pbloc);
-pinfo = (ProcessSerialNumber *)malloc(sizeof(ProcessSerialNumber));
-*pinfo = pbloc.launchProcessSN;
-return ( err == noErr ? pinfo : NULL) ;
-}
-
-#endif
-
-#elif !defined(WIN32)
-
-void change_attr(Fl_Window *w)
-{
-XSetWindowAttributes attr;
-XWindowAttributes current;
-
-XGetWindowAttributes(fl_display, fl_xid(w), &current);
-if(current.backing_store != NotUseful) return;
-attr.backing_store = WhenMapped;
-XChangeWindowAttributes(fl_display, fl_xid(w), CWBackingStore, &attr);
-// il faut la redessiner pour que ca fasse effet
-w->redraw(); 
-Fl::flush();
-}
-
-#endif
-
-
-

Deleted: trunk/packages/seaview/trunk/chooser_plus.cxx
===================================================================
--- trunk/packages/seaview/trunk/chooser_plus.cxx	2007-07-20 10:28:45 UTC (rev 359)
+++ trunk/packages/seaview/trunk/chooser_plus.cxx	2007-07-21 02:32:37 UTC (rev 360)
@@ -1,421 +0,0 @@
-#include "seaview.h"
-#include <FL/Fl_File_Chooser.H>
-#include <FL/Fl_Choice.H>
-
-/* included functions */
-char* fl_file_chooser_save_as(const char* message, const char* pat, 
-	const char* fname, void *view);
-#ifdef __APPLE__
-char* fl_file_chooser_plus(const char* message, const char* pat, 
-	const char* fname, int use_only_button);
-int MG_GetOutputFName_Popup(char *fname, int maxl, char *dfault, void *data, int defaultformat);
-int MG_GetOutputFName_Plus(char *fname, int maxl, char *dfault, char *message, int);
-#elif defined(WIN32)
-char *MG_win32_file_chooser(const char* message,
-        const char* pattern,
-        const char* fname,
-        const char* defext, // default filename extension or NULL
-        bool save, int *pfilterindex);
-#endif
-
-
-
-// needed functions
-extern void set_save_format(SEA_VIEW *view, int val);
-#ifdef __APPLE__
-extern int set_res_value(const char *name, const char *value);
-extern "C" {  
-	void PtoC(const void *in, void *out);
-	void CtoP(const void *in, void *out);
-#if TARGET_RT_MAC_MACHO
-#	define mac_os_x()  1
-#else
-	int mac_os_x(void);
-#endif
-	}
-#endif
-
-extern int nbr_formats;
-extern char *f_format_names[];
-extern int printout_block, printout_fontsize;
-extern int printout_vary, printout_black;
-extern paperformat printout_pageformat;
-
-
-#ifdef __APPLE__
-
-static pascal void MyNavEventProc_popup (NavEventCallbackMessage callBackSelector,
-                                   NavCBRecPtr callBackParms,
-                                   NavCallBackUserData callBackUD)
-{
-SEA_VIEW *view;
-int num;
-OSErr err;
-NavMenuItemSpec tempitem, *p;
-
-view = (SEA_VIEW *)callBackUD;
-if(callBackSelector == kNavCBStart) { // fixer la valeur montrŽe du menu popup format: 
-	tempitem.version = kNavMenuItemSpecVersion; //procedure non documentee mais qui semble correcte
-	tempitem.menuCreator = 'extn';
-	tempitem.menuType = view->format_for_save;
-	*(tempitem.menuItemName) = '\0';	// needed on 10.3+
-	err = NavCustomControl(callBackParms->context, kNavCtlSelectCustomType, (void *)&tempitem );
-	}
-else if(callBackSelector == kNavCBPopupMenuSelect) { // action sur le menu format: 
-	p = (NavMenuItemSpec *)(callBackParms->eventData.eventDataParms.param);
-	num = p->menuType;
-	set_save_format(view, num);
-	}
-return;
-}
-
-
-int MG_GetOutputFName_Popup(char *fname, int maxl, char *dfault, void *data, int defaultformat)
-{
-    OSErr               anErr = noErr;
-	Boolean ok;
-    NavReplyRecord      reply;
-static NavDialogCreationOptions    dialogOptions;
-    OSType              fileTypeToSave = 'TEXT';
-    OSType              creatorType;
-static NavEventUPP  eventProc;
-    int  i, rsult = FALSE;
-  NavDialogRef        navDialog;
-static CFArrayRef formatitems=NULL; 
-  CFStringRef *typeitem;
-
-if(formatitems == NULL) { /* initialisation */
-    anErr = NavGetDefaultDialogCreationOptions (&dialogOptions);
-    if (anErr != noErr) return FALSE;    
-    dialogOptions.windowTitle = CFStringCreateWithCString(NULL, "seaview: Choose file and format", kCFStringEncodingMacRoman);
-    dialogOptions.optionFlags &= ~ kNavNoTypePopup;
-    dialogOptions.optionFlags &= ~ kNavAllowStationery;
-	typeitem = (CFStringRef *)malloc(sizeof(CFStringRef) * nbr_formats);
-    for(i = 0; i < nbr_formats; i++)     
-		typeitem[i] = CFStringCreateWithCString(NULL, f_format_names[i], kCFStringEncodingMacRoman);
-    formatitems = CFArrayCreate(NULL, (const void **)typeitem, nbr_formats, NULL);
-    dialogOptions.popupExtension = formatitems;
-    eventProc = NewNavEventUPP (MyNavEventProc_popup);
-    }
-  dialogOptions.saveFileName = CFStringCreateWithCString(NULL, dfault, kCFStringEncodingUTF8); 
-creatorType = kNavGenericSignature;
-  anErr = NavCreatePutFileDialog( &dialogOptions, fileTypeToSave, creatorType, eventProc, data, &navDialog );
-  CFRelease(dialogOptions.saveFileName);
-  if(anErr != noErr) return FALSE;
-  
-  anErr = NavDialogRun( navDialog );
-  if(anErr != noErr) return FALSE;
-  
-  anErr = NavDialogGetReply( navDialog, &reply );
-  if ( reply.validRecord && anErr == noErr ) {
-				FSRef fileRef;
-				CFURLRef directoryURL, fileURL;
-				
-				anErr = AEGetNthPtr( &reply.selection, 1, typeFSRef, NULL, NULL, &fileRef, sizeof( FSRef ), NULL );
-                if (anErr == noErr)
-                {
-						directoryURL = CFURLCreateFromFSRef( kCFAllocatorDefault, &fileRef );
-                        // append new filename to this path
-						fileURL = CFURLCreateCopyAppendingPathComponent( kCFAllocatorDefault, directoryURL, reply.saveFileName, false );
-						ok = CFURLGetFileSystemRepresentation(fileURL, true, (UInt8 *)fname, maxl);
-						CFRelease(fileURL); CFRelease(directoryURL);
-                        if(ok) rsult = TRUE;
-                }
-	}
-NavDisposeReply(&reply);
-if(!rsult) set_save_format((SEA_VIEW *)data, defaultformat);
-return rsult;
-}
-
-
-char* fl_file_chooser_save_as(const char* message, const char* pat, 
-	const char* fname, void *data)
-{
-	static char pathname[FL_PATH_MAX];
-	SEA_VIEW *view = (SEA_VIEW *)data;
-	if( MG_GetOutputFName_Popup(pathname, FL_PATH_MAX, extract_filename((char *)fname), data, 
-						view->format_for_save) ) return pathname;
-	else return NULL;
-}
-
-
-static pascal void MyNavEventProc_Plus (NavEventCallbackMessage callBackSelector,
-                                   NavCBRecPtr callBackParms,
-                                   NavCallBackUserData callBackUD)
-{
-OSErr err;
-static Handle gDitlList = NULL;
-static DialogItemIndex index;
-static DialogRef ref;
-static ControlRef var_control = NULL;
-Rect rect; Handle h; DialogItemType dtype; Str255 text; ControlRef control;
-char text2[256];
-
-if(callBackSelector == kNavCBCustomize) {
-	if(callBackParms->customRect.bottom == 0) 
-			callBackParms->customRect.bottom = callBackParms->customRect.top + 35;
-	if(callBackParms->customRect.right == 0) 
-			callBackParms->customRect.right = callBackParms->customRect.left + 425;
-	}
-else if(callBackSelector == kNavCBStart) {
-	gDitlList = GetResource ('DITL', 128);
-	if(gDitlList != NULL) err = NavCustomControl(callBackParms->context, 
-                            kNavCtlAddControlList, gDitlList);
-    err = NavCustomControl(callBackParms->context, kNavCtlGetFirstControlID, &index);
-    index++;
-    ref = GetDialogFromWindow(callBackParms->window);
-	sprintf(text2,"%2d", printout_block);
-	CtoP(text2, text);
-	GetDialogItem(ref, index + 1, &dtype, &h, &rect);
-	SetDialogItemText(h, text);
-	sprintf(text2,"%2d", printout_fontsize);
-	CtoP(text2, text);
-	GetDialogItem(ref, index + 3, &dtype, &h, &rect);
-	SetDialogItemText(h, text);
-	err = GetDialogItemAsControl(ref, index + 4, &control);
-	if(err == 0) SetControl32BitValue(control, printout_black);
-	
-	err = GetDialogItemAsControl(ref, index + 5, &control);
-	if(err == 0) SetControl32BitValue(control, printout_pageformat == 0);
-	err = GetDialogItemAsControl(ref, index + 6, &control);
-	if(err == 0) SetControl32BitValue(control, printout_pageformat == 1);
-
-	err = GetDialogItemAsControl(ref, index + 7, &var_control);
-	if(err == 0) SetControl32BitValue(var_control, printout_vary);
-	if(*(int *)callBackUD) ActivateControl(var_control);
-	else DeactivateControl(var_control);
-	}
-else if(callBackSelector == kNavCBTerminate) {
-	if(gDitlList != NULL) {
-		GetDialogItem(ref, index + 1, &dtype, &h, &rect);
-		GetDialogItemText(h, text);
-		PtoC(text, text2);
-		sscanf(text2,"%d", &printout_block);
-		GetDialogItem(ref, index + 3, &dtype, &h, &rect);
-		GetDialogItemText(h, text);
-		PtoC(text, text2);
-		sscanf(text2,"%d", &printout_fontsize);
-		set_res_value("printoutfontsize", text2);
-		ReleaseResource( gDitlList );
-		}
-	var_control = NULL;
-	}
-else if(callBackSelector == kNavCBEvent ) {
-	if(var_control != NULL && callBackParms->eventData.itemHit == index + 7) {
-		static int count = 0; /* MacOS 9: passe 2 fois a chaque click sur check box */
-		if( mac_os_x() || (++count) % 2 == 0 ) {
-			printout_vary = (printout_vary + 1) % 2;
-			SetControl32BitValue(var_control, printout_vary);
-			}
-		}
-	else if(callBackParms->eventData.itemHit == index + 4) {
-		static int count = 0; /* MacOS 9: passe 2 fois a chaque click sur check box */
-		if( mac_os_x() || (++count) % 2 == 0 ) {
-			printout_black = (printout_black + 1) % 2;
-			GetDialogItemAsControl(ref, index + 4, &control);
-			SetControl32BitValue(control, printout_black);
-			}
-		}
-	else if(callBackParms->eventData.itemHit == index + 5) {
-		if(printout_pageformat == LETTER) {
-				GetDialogItemAsControl(ref, index + 5, &control);
-				SetControl32BitValue(control, 1);
-				GetDialogItemAsControl(ref, index + 6, &control);
-				SetControl32BitValue(control, 0);
-				printout_pageformat = A4;
-				}
-		}
-	else if(callBackParms->eventData.itemHit == index + 6) {
-		if(printout_pageformat == A4) {
-				GetDialogItemAsControl(ref, index + 6, &control);
-				SetControl32BitValue(control, 1);
-				GetDialogItemAsControl(ref, index + 5, &control);
-				SetControl32BitValue(control, 0);
-				printout_pageformat = LETTER;
-				}
-		}
-	}
-return;
-}
-
-
-int MG_GetOutputFName_Plus(char *fname, int maxl, char *dfault, char *message, int use_only_button)
-{
-    OSErr               anErr = noErr;
-    NavReplyRecord      reply;
-    NavDialogRef        navDialog;
-    NavDialogCreationOptions    dialogOptions;
-    OSType              fileTypeToSave = 'TEXT';
-    OSType              creatorType;
-    NavEventUPP         eventProc = NewNavEventUPP (MyNavEventProc_Plus);
-	int    rsult = FALSE;
-	static int *p_use;
-    Boolean ok;
-
-    anErr = NavGetDefaultDialogCreationOptions (&dialogOptions);
-	if(anErr != noErr) return FALSE;
-    dialogOptions.windowTitle = CFStringCreateWithCString(NULL, message, kCFStringEncodingMacRoman);
-    dialogOptions.optionFlags |= kNavNoTypePopup;
-    dialogOptions.optionFlags &= ~ kNavAllowStationery;
-    dialogOptions.saveFileName = CFStringCreateWithCString(NULL, dfault, kCFStringEncodingUTF8); 
-
-	creatorType = kNavGenericSignature;
-	p_use = &use_only_button;
-  anErr = NavCreatePutFileDialog( &dialogOptions, fileTypeToSave, creatorType, eventProc, p_use, &navDialog );
-  CFRelease(dialogOptions.saveFileName);
-  if(anErr != noErr) return FALSE;
-  
-  anErr = NavDialogRun( navDialog );
-  if(anErr != noErr) return FALSE;
-  
-  anErr = NavDialogGetReply( navDialog, &reply );
-  
- if (anErr == noErr && reply.validRecord) {
-				FSRef fileRef;
-				CFURLRef directoryURL, fileURL;
-				
-				anErr = AEGetNthPtr( &reply.selection, 1, typeFSRef, NULL, NULL, &fileRef, sizeof( FSRef ), NULL );
-                if (anErr == noErr)
-                {
-						directoryURL = CFURLCreateFromFSRef( kCFAllocatorDefault, &fileRef );
-                        // append new filename to this path
-						fileURL = CFURLCreateCopyAppendingPathComponent( kCFAllocatorDefault, directoryURL, reply.saveFileName, false );
-						ok = CFURLGetFileSystemRepresentation(fileURL, true, (UInt8 *)fname, maxl);
-						CFRelease(fileURL); CFRelease(directoryURL);
-                        if(ok) rsult = TRUE;
-                }
-	}
-  DisposeNavEventUPP(eventProc);
-  NavDisposeReply( &reply );
-  NavDialogDispose( navDialog );
-return rsult;
-}
-
-
-char* fl_file_chooser_plus(const char* message, const char* pat, 
-	const char* fname, int use_only_button)
-{
-	static char pathname[FL_PATH_MAX];
-	if( MG_GetOutputFName_Plus(pathname, FL_PATH_MAX, (char *)fname, (char *)message, use_only_button) 
-		) return pathname;
-	else return NULL;
-}
-
-
-#elif defined(WIN32)
-
-extern char *f_format_names[];
-extern char *f_format_exts[];
-extern int nbr_formats;
-
-char* fl_file_chooser_save_as(const char* message, const char* pat, 
-	const char* fname, void *view)
-{
-int filterindex;
-char *outfname, *p, types_list[500];
-
-p = types_list;
-for(int f = 0; f < nbr_formats; f++) {
-	sprintf(p, "%s format (*.%s)%c*.%s%c", 
-		f_format_names[f], f_format_exts[f], 0, f_format_exts[f], 0);
-	p += strlen(p) + 1;
-	p += strlen(p) + 1;
-	}
-*p = 0;
-
-filterindex = ((SEA_VIEW *)view)->format_for_save + 1;
-outfname = MG_win32_file_chooser(message, 
-			types_list,
-			fname, 
-			memcmp(pat, "*.", 2) == 0 ? pat+2 : NULL,
-			TRUE, &filterindex);
-if(outfname != NULL) set_save_format((SEA_VIEW *)view, filterindex - 1);
-return outfname;
-}
-
-
-#else
-
-
-
-#define labelSize 10
-#define calc_width(nom) \
-	(fl_font(FL_HELVETICA, labelSize), (int)fl_width(nom) + 20)
-	
-
-void change_format(Fl_Widget *obj, void *data)
-{
-SEA_VIEW *view = (SEA_VIEW *)data;
-int reponse = ((Fl_Choice *)obj)->value();
-if(view->format_for_save != reponse) set_save_format(view, reponse);
-return;
-}
-
-
-char *					// O - Filename or NULL
-fl_file_chooser_save_as(const char *message,	// I - Message in titlebar
-                const char *pat,	// I - Filename pattern
-		const char *fname,	// I - Initial filename selection
-		void        *data) 
-{	
-  static char	retname[1024];		// Returned filename
-static Fl_File_Chooser *fc;
-SEA_VIEW *view = (SEA_VIEW *)data;
-static Fl_Choice *mychoice;
-
-  if (!fc) {
-      if (!fname || !*fname) fname = ".";
-
-      fc = new Fl_File_Chooser(fname, pat, Fl_File_Chooser::CREATE, message);
- 	  fc->preview(0);
- 	  fc->previewButton->hide();
- 	  static char c_label[] = "Format:";
- 	  int y = fc->previewButton->y();
-	  fc->previewButton->parent()->begin();
-	  mychoice = new Fl_Choice(10 + calc_width(c_label), y, 150, fc->previewButton->h());
- 	  fc->previewButton->parent()->end();
-	  for(int i=0; i < nbr_formats; i++) mychoice->add(f_format_names[i], 0, 0, 0, 0);
-      mychoice->label(c_label);
-      mychoice->callback(change_format, view);
-  } else {
-    fc->type(Fl_File_Chooser::CREATE);
-    fc->filter(pat);
-    fc->label(message);
-
-    if (!fname || !*fname) {
-      if (fc->filter() != pat && (!pat || !fc->filter() ||
-          strcmp(pat, fc->filter())) && fc->value()) {
-	// if pattern is different, remove name but leave old directory:
-	strcpy(retname, fc->value() );
-
-	char *p = strrchr(retname, '/');
-
-        if (p) {
-	  // If the filename is "/foo", then the directory will be "/", not
-	  // ""...
-	  if (p == retname)
-	    retname[1] = '\0';
-	  else
-	    *p = '\0';
-	}
-
-	// Set the directory...
-	fc->directory(retname);
-      }
-    }
-    else
-      fc->value(fname);
-  }
-
-  mychoice->value(view->format_for_save);
-  fc->show();
-
-  while (fc->shown())
-    Fl::wait();
-
-  if (fc->value()) return (char *)fc->value();
-  else return 0;
-}
-
-
-#endif

Deleted: trunk/packages/seaview/trunk/comlines.cxx
===================================================================
--- trunk/packages/seaview/trunk/comlines.cxx	2007-07-20 10:28:45 UTC (rev 359)
+++ trunk/packages/seaview/trunk/comlines.cxx	2007-07-21 02:32:37 UTC (rev 360)
@@ -1,331 +0,0 @@
-#include "seaview.h"
-#include <string.h>
-#include <stdlib.h>
-
-void draw_comment_lines(Fl_Widget *ob, SEA_VIEW *view);
-int parse_comment_lines_from_header(char *header, char ***plines, 
-	char ***pnames, int **plengths, int *pmax_seq_length);
-int insert_char_in_comment(int key, int num, SEA_VIEW *view);
-int insert_gap_all_comments(int numgaps, int pos,  SEA_VIEW *view);
-int delete_char_in_comment(SEA_VIEW *view, int count, int comnum, int depart, 
-	int protect);
-int delete_in_all_comments(int numdels, int pos,  SEA_VIEW *view);
-void update_menu_footers(SEA_VIEW *view);
-void footers_menu_callback(Fl_Widget *ob, long which);
-
-/* used prototypes */
-void set_and_show_new_cursor_site(SEA_VIEW *view, int new_pos, int center,
-	int force_redraw);
-int compute_size_params(SEA_VIEW *view, int force_recompute);
-
-
-void draw_comment_lines(Fl_Widget *ob, SEA_VIEW *view)
-{
-int offset, x, y, l_line, nline;
-int couleur, background;
-
-if( !view->show_comment_lines ) return;
-x = view->x_seq; 
-y = view->y_seq + (view->pos_first_comment_line - 1) * view->line_height;
-/* write lines */
-x = view->x_seq;
-offset= view->first_site - 1;
-for(nline = 0; 
-	nline < view->tot_comment_lines ; nline++, y += view->line_height ) {
-	if(view->mod_comment_line == 0 || view->mod_comment_line == nline+1 ) {
-		if(view->active_comment_line == nline + 1) {
-			couleur = FL_WHITE;
-			background = FL_BLACK;
-			}
-		else	{
-			couleur = FL_BLACK;
-			background = ob->selection_color();
-			}
-		fl_font(FL_COURIER_ITALIC, ob->labelsize() );
-		fl_color(background); 
-		fl_rectf( view->x_name, 
-			y - view->line_height + fl_descent(), 
-			(view->wid_names+1) * view->char_width, 
-			view->line_height);
-		fl_color(couleur); 
-		fl_draw(view->comment_name[nline], 
-			FL_min(view->wid_names, 
-			strlen(view->comment_name[nline]) ), 
-			view->x_name, y);
-		l_line = ( 
-		offset + view->tot_sites < view->comment_length[nline] ? 
-		view->tot_sites : view->comment_length[nline] - offset);
-		if(l_line <= 0) continue;
-		fl_font(ob->labelfont(), ob->labelsize() );
-		fl_color(ob->color()); 
-		fl_rectf(x, y - view->line_height + fl_descent(), 
-			(view->tot_sites + 1) * view->char_width, 
-			view->line_height);
-		fl_color(FL_BLACK); 
-		fl_draw(view->comment_line[nline] + offset,  l_line, x, y);
-		}
-	}
-}  
-
-
-int parse_comment_lines_from_header(char *header, char ***plines, 
-	char ***pnames, int **plengths, int *pmax_seq_length)
-{
-char *new_header, *fin_new_header, *old_header, *j, *p, *q;
-int l_header, num, total, max_seq_length;
-char **lines, **names;
-int *lengths;
-
-if(header == NULL) return 0;
-old_header = header;
-l_header = strlen(header);
-total = 0;
-while (*header!= 0) {
-	if(strncmp(header,";;|",3) == 0) {
-		total++;
-		do	header = strchr(header,'\n') + 1;
-		while(strncmp(header, ";;||", 4) != 0);	
-		}
-	header = strchr(header,'\n') + 1;
-	}
-if(total == 0) return 0;
-names = (char **)malloc(total * sizeof(char *));
-lines = (char **)malloc(total * sizeof(char *));
-lengths = (int *)malloc(total * sizeof(int));
-if( names == NULL || lines == NULL || lengths == NULL) out_of_memory();
-header = old_header;
-if( (new_header = (char *)malloc(l_header+1)) == NULL) out_of_memory();
-fin_new_header = new_header;
-*new_header = 0;
-num = -1;
-max_seq_length = *pmax_seq_length;
-while (*header!= 0) {
-	if(strncmp(header,";;|",3) == 0) {
-		num++;
-		p = header + 3; while(*p == ' ') p++;
-		q = strchr(p, '\n');
-		names[num] = (char *)malloc(q - p + 1);
-		if( names[num] == NULL ) out_of_memory();
-		memcpy( names[num], p, q - p );
-		names[num][q - p] = 0;
-		header = q + 1;
-		p = header;
-		do	p = strchr(p,'\n') + 1;
-		while(strncmp(p, ";;||", 4) != 0);
-		if(p - header > max_seq_length) max_seq_length = p - header;
-		lines[num] = (char *)malloc(p - header + 1);
-		if( lines[num] == NULL ) out_of_memory();
-		q = lines[num];
-		do	{
-			p = strchr(header,'\n') + 1;
-			memcpy(q, header + 2, p - header - 3);
-			q += p - header - 3;
-			header = p;
-			}
-		while(strncmp(p, ";;||", 4) != 0);
-		*q = 0;
-		lengths[num] = strlen(lines[num]);
-		}
-	else	{
-		j=(char *)memccpy(fin_new_header, header, '\n', l_header);
-		fin_new_header += (j - fin_new_header);
-		}
-	header = strchr(header,'\n') + 1;
-	}
-*fin_new_header = 0;
-strcpy(old_header, new_header);
-free(new_header);
-*pnames = names; *plines = lines; *plengths = lengths;
-*pmax_seq_length = max_seq_length;
-return num + 1;
-}
-
-
-int insert_char_in_comment(int key, int num, SEA_VIEW *view)
-{
-char *pos;
-int l;
-
-if(num + view->comment_length[view->active_comment_line - 1] >
-	view->max_seq_length)
-	num = view->max_seq_length - 
-		view->comment_length[view->active_comment_line - 1];
-pos = view->comment_line[view->active_comment_line - 1] + view->cursor_site - 1;
-l = view->comment_length[view->active_comment_line - 1] - view->cursor_site + 1;
-memmove(pos + num, pos, l + 1);
-memset(pos, key, num);
-view->mod_comment_line = view->cursor_seq;
-view->comment_length[view->active_comment_line - 1] += num;
-set_and_show_new_cursor_site(view, view->cursor_site + num, FALSE, TRUE);
-view->modif_but_not_saved = TRUE;
-return num;
-}
-
-
-int insert_gap_all_comments(int numgaps, int pos,  SEA_VIEW *view)
-{
-int num, l, total = 0;
-char *debut;
-for(num = 0; num < view->tot_comment_lines; num++) {
-	if(pos > view->comment_length[num] + 1) continue; /* beyond end */
-	total = numgaps;
-	if(total + view->comment_length[num] > view->max_seq_length) {
-		total = view->max_seq_length - view->comment_length[num];
-		fl_ringbell(0);
-		}
-	debut = view->comment_line[num] + pos - 1;
-	l = view->comment_length[num] - pos + 1;
-	memmove(debut + total, debut, l + 1);
-	memset(debut, '-', total);
-	view->comment_length[num] += total;
-	}
-return total;
-}
-
-
-int delete_char_in_comment(SEA_VIEW *view, int count, int comnum, int depart, 
-	int protect)
-{
-char *pos;
-int l, total;
-
-if(count >= depart) count = depart - 1;
-pos = view->comment_line[comnum - 1] + depart - 1;
-l = view->comment_length[comnum - 1] - depart + 1;
-if(protect) {
-	for(total = 1; total <= count ; total++)
-		if( *(pos - total) != '-' ) break;
-	count = total - 1;
-	if(count == 0) return 0;
-	}
-memmove(pos - count, pos, l + 1);
-view->mod_comment_line = comnum;
-view->comment_length[comnum - 1] -= count;
-set_and_show_new_cursor_site(view, depart - count, FALSE, TRUE);
-view->modif_but_not_saved = TRUE;
-return count;
-}
-
-
-int delete_in_all_comments(int numdels, int pos,  SEA_VIEW *view)
-{
-int num, l;
-char *debut;
-numdels = FL_min(numdels, pos);
-for(num = 0; num < view->tot_comment_lines; num++) {
-	if(pos > view->comment_length[num] + 1) continue; /* beyond end */
-	debut = view->comment_line[num] + pos - 1;
-	l = view->comment_length[num] - pos + 1;
-	memmove(debut - numdels, debut, l + 1);
-	view->comment_length[num] -= numdels;
-	}
-return numdels;
-}
-
-
-void update_menu_footers(SEA_VIEW *view)
-{
-Fl_Menu_ *menu = (Fl_Menu_ *)view->menu_footers;
-Fl_Menu_Item *items = (Fl_Menu_Item *)menu->menu();
-if(view->tot_comment_lines > 0) 
-	items[SHOW_HIDE_FOOTERS].activate();
-else	
-	items[SHOW_HIDE_FOOTERS].deactivate();
-if(view->show_comment_lines) 
-	menu->replace(SHOW_HIDE_FOOTERS,"Hide footers");
-else	
-	menu->replace(SHOW_HIDE_FOOTERS,"Show footers");
-if(view->show_comment_lines && view->active_comment_line > 0)
-	items[DELETE_FOOTER].activate();
-else
-	items[DELETE_FOOTER].deactivate();
-if(view->tot_seqs > 0 )
-	items[CREATE_FOOTER].activate();
-else
-	items[CREATE_FOOTER].deactivate();
-}
-
-
-void footers_menu_callback(Fl_Widget *ob, long which)
-{
-SEA_VIEW *view;
-int num, reponse = ((Fl_Menu_ *)ob)->value();
-view = (SEA_VIEW *) ob->user_data();
-if(reponse == SHOW_HIDE_FOOTERS && view->tot_comment_lines > 0) {
-	view->show_comment_lines = !view->show_comment_lines;
-	view->active_comment_line = 0;
-	view->cursor_in_comment = FALSE;
-	compute_size_params(view, TRUE);
-	view->DNA_obj->redraw();
-	}
-else if(reponse == CREATE_FOOTER) {
-	char **pline, **pname, *texte, *name;
-	const char *c_name;
-	int *plength;
-	c_name = fl_input("Name of new footer line?", "Comments" );
-	if(c_name == NULL || strlen(c_name) == 0) return;
-	num = view->tot_comment_lines;
-	pline = (char **)malloc((view->tot_comment_lines + 1) *sizeof(char *));
-	if(pline == NULL) return;
-	pname = (char **)malloc((view->tot_comment_lines + 1) *sizeof(char *));
-	if(pname == NULL) return;
-	plength = (int *)malloc((view->tot_comment_lines + 1) *sizeof(int ));
-	if(plength == NULL) return;
-	texte = (char *)malloc((view->max_seq_length + 1) *sizeof(char));
-	if(texte == NULL) return;
-	name = (char *)malloc(strlen(c_name) + 1);
-	if(name == NULL) return;
-	memset(texte, '-', view->seq_length);
-	texte[view->seq_length] = 0;
-	strcpy(name, c_name);
-	if(view->tot_comment_lines > 0) {
-		memcpy(pline, view->comment_line, 
-			view->tot_comment_lines * sizeof(char *));
-		free(view->comment_line);
-		}
-	pline[view->tot_comment_lines] = texte;
-	view->comment_line = pline;
-	if(view->tot_comment_lines > 0) {
-		memcpy(pname, view->comment_name, 
-			view->tot_comment_lines * sizeof(char *));
-		free(view->comment_name);
-		}
-	pname[view->tot_comment_lines] = name;
-	view->comment_name = pname;
-	if(view->tot_comment_lines > 0) {
-		memcpy(plength, view->comment_length, 
-			view->tot_comment_lines * sizeof(int));
-		free(view->comment_length);
-		}
-	plength[view->tot_comment_lines] = view->seq_length;
-	view->comment_length = plength;
-	++(view->tot_comment_lines);
-	view->show_comment_lines = TRUE;
-	view->active_comment_line = 0;
-	view->cursor_in_comment = FALSE;
-	view->modif_but_not_saved = TRUE;
-	compute_size_params(view, TRUE);
-	view->DNA_obj->redraw();
-	}
-else if(reponse == DELETE_FOOTER) {
-	if(view->tot_comment_lines == 0 || view->active_comment_line == 0)
-		return;
-	if(! ask_with_custom_yesno("Confirm deletion?", "Delete", "Cancel") ) return;
-	free(view->comment_line[view->active_comment_line - 1]);
-	free(view->comment_name[view->active_comment_line - 1]);
-	for(num = view->active_comment_line; num < view->tot_comment_lines;
-			num++) {
-		view->comment_line[num - 1] = view->comment_line[num];
-		view->comment_name[num - 1] = view->comment_name[num];
-		view->comment_length[num - 1] = view->comment_length[num];
-		}
-	(view->tot_comment_lines)--;
-	if(view->tot_comment_lines == 0) view->show_comment_lines = FALSE;
-	view->active_comment_line = 0;
-	view->cursor_in_comment = FALSE;
-	view->modif_but_not_saved = TRUE;
-	compute_size_params(view, TRUE);
-	view->DNA_obj->redraw();
-	}
-update_menu_footers(view);
-}

Deleted: trunk/packages/seaview/trunk/config.h
===================================================================
--- trunk/packages/seaview/trunk/config.h	2007-07-20 10:28:45 UTC (rev 359)
+++ trunk/packages/seaview/trunk/config.h	2007-07-21 02:32:37 UTC (rev 360)
@@ -1 +0,0 @@
-#define HAVE_DIRENT_H 1

Deleted: trunk/packages/seaview/trunk/custom.cxx
===================================================================
--- trunk/packages/seaview/trunk/custom.cxx	2007-07-20 10:28:45 UTC (rev 359)
+++ trunk/packages/seaview/trunk/custom.cxx	2007-07-21 02:32:37 UTC (rev 360)
@@ -1,479 +0,0 @@
-#include "seaview.h"
-#include <FL/Fl_Color_Chooser.H>
-#include <FL/Fl_Slider.H>
-#include <FL/Fl_Check_Button.H>
-
-
-void custom_callback(Fl_Widget *obj, void *data);
-void my_colorchooser(Fl_Widget *obj, void *data);
-void my_colorchooser_callback(Fl_Widget *obj, void *data);
-void slider_cb(Fl_Widget *obj, void *data);
-void ignore_cb(Fl_Widget *obj, void *data);
-void accept_cb(Fl_Widget *obj, void *data);
-void permanent_cb(Fl_Widget *obj, void *data);
-void reset_color_callback(Fl_Widget *obj, void *data);
-void accept_color_callback(Fl_Widget *obj, void *data);
-void reset_callback(Fl_Widget *obj, void *data);
-
-
-/* private global variables */
-static Fl_Button *A, *C, *G, *T;
-static Fl_Slider *bgrnd, *s_bgrnd;
-static Fl_Input *protgroups, *s_protgroups, *movekeys;
-static Fl_Button **protcol;
-static Fl_Check_Button *lowercase, *inverted;
-static Fl_Choice *pdfformat, *saveformat, *alignment_algo;
-
-
-/* extern variables & functions */
-extern int *def_protcolors, max_protcolors;
-extern char def_stdcolorgroups[];
-extern char *f_format_names[];
-extern int nbr_formats;
-extern paperformat printout_pageformat;
-extern void mod_multipl(SEA_VIEW *view, int newval);
-extern void set_aa_color_mode(color_choice choice);
-extern color_choice prep_aa_color_code(char *list_std, char *list_alt, 
-	int maxprotcolors, int *numb_stdprotcolors, int *numb_altprotcolors);
-extern int set_res_value(const char *name, const char *value);
-extern int save_resources(void);
-extern void minuscules(char *);
-
-
-void custom_callback(Fl_Widget *obj, void *data)
-{
-static Fl_Window *win = NULL;
-int x, y, w, h, c;
-SEA_VIEW *view = (SEA_VIEW *)data;
-Fl_Button *reset;
-
-if(win == NULL) {
-	win = new Fl_Window(310, 530, "Customization");
-	
-	x = 9; y = 20; w = 160; h = 20;
-	bgrnd = new Fl_Slider(x,y,w,h, "background grey");
-	bgrnd->type(FL_HOR_NICE_SLIDER);
-	bgrnd->bounds(32., 55.);
-	bgrnd->color2( FL_BLACK );
-	bgrnd->precision(0);
-	bgrnd->align(FL_ALIGN_TOP);
-	bgrnd->callback(slider_cb);
-	y += bgrnd->h() + 25;
-
-	s_bgrnd = new Fl_Slider(x,y,w,h, "sites background grey");
-	s_bgrnd->type(FL_HOR_NICE_SLIDER);
-	s_bgrnd->bounds(32., 55.);
-	s_bgrnd->color2( FL_BLACK );
-	s_bgrnd->precision(0);
-	s_bgrnd->align(FL_ALIGN_TOP);
-	s_bgrnd->callback(slider_cb);
-	
-	reset = new Fl_Button(bgrnd->x() + bgrnd->w() + 40, s_bgrnd->y() - 20, 50, 20, "reset");
-	reset->color(FL_LIGHT2);
-	reset->callback(reset_callback, bgrnd);
-	new Fl_Box(FL_DOWN_FRAME, 5, 3,
-		win->w() - 8, 90 , "");
-	
-	y += s_bgrnd->h() + 20;
-	w=40; h=w;
-	A = new Fl_Button(x, y, w, h, "A");
-	A->callback(my_colorchooser );
-	
-	x += A->w() + 10;
-	C = new Fl_Button(x, y, w, h, "C");
-	C->callback(my_colorchooser );
-
-	x += A->w() + 10;
-	G = new Fl_Button(x, y, w, h, "G");
-	G->callback(my_colorchooser );
-
-	x += A->w() + 10;
-	T = new Fl_Button(x, y, w, h, "T/U");
-	T->callback(my_colorchooser );
-	
-	x += A->w() + 30;
-	reset = new Fl_Button(x, y + 10, 50, 20, "reset");
-	reset->color(FL_LIGHT2);
-	reset->callback(reset_callback, A);
-	new Fl_Box(FL_DOWN_FRAME, 5, A->y() - 5,
-		win->w() - 8, A->h() + 10 , "");
-	
-	x = A->x();
-	y += A->h() + 35;
-	int topbox = y - 25;
-	protgroups = new Fl_Input(x,y,280, 20, "aa coloring scheme");
-	protgroups->align(FL_ALIGN_TOP);
-
-	y += protgroups->h() + 20;
-	s_protgroups = new Fl_Input(x,y,280, 20, "alternate aa coloring scheme");
-	s_protgroups->align(FL_ALIGN_TOP);
-	
-	y += s_protgroups->h() + 10;
-	new Fl_Box(x, y, win->w(), 20, "catalog of amino acid colors");
-	y += 20;
-	w = h = 25;
-	protcol = (Fl_Button **)malloc(max_protcolors * sizeof(Fl_Button *));
-	for(c=1; c < max_protcolors; c++) {
-		protcol[c] = new Fl_Button(x, y, w, h, "");
-		protcol[c]->callback(my_colorchooser);
-		x += w + 5;
-		}
-	y += h + 10;
-	reset = new Fl_Button(win->w() / 2 - 25, y, 50, 20, "reset");
-	reset->color(FL_LIGHT2);
-	reset->callback(reset_callback, protgroups);
-	new Fl_Box(FL_DOWN_FRAME, 5, topbox,
-		win->w() - 8, y + reset->h() + 5 - topbox, "");
-
-	x = A->x();
-	y += protcol[1]->h() + 30; 
-	movekeys = new Fl_Input(x,y, 50, 20, "left-right movement keys");
-	movekeys->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
-	reset = new Fl_Button(x + movekeys->w() + 5, y, 50, 20, "reset");
-	reset->color(FL_LIGHT2);
-	reset->callback(reset_callback, movekeys);
-
-	w = 130;
-	x = win->w() - w - 5;
-	pdfformat = new Fl_Choice(x,y,w,h, PDF_OR_PS" page format");
-	pdfformat->align(FL_ALIGN_TOP);
-	for(c=0; c < nbr_formats; c++) pdfformat->add("A4|LETTER");
-	pdfformat->selection_color(pdfformat->color());
-	
-	x = A->x();
-	y += movekeys->h() + 10; 
-	lowercase = new Fl_Check_Button(x,y,140,20, "display lowercase");
-
-	y += lowercase->h(); 
-	inverted = new Fl_Check_Button(x,y,140,20, "inverted");
-	
-	x = win->w() - w - 5;
-	y = movekeys->y() + movekeys->h() + 20;
-	saveformat = new Fl_Choice(x,y,w,h, "default save format");
-	saveformat->align(FL_ALIGN_TOP);
-	for(c=0; c < nbr_formats; c++) saveformat->add(f_format_names[c]);
-	saveformat->selection_color(saveformat->color());
-	
-	x = A->x();
-	y = inverted->y() + inverted->h() + 20; 
-	alignment_algo = new Fl_Choice(x,y,w,h, "alignment algorithm");
-	alignment_algo->align(FL_ALIGN_TOP);
-	alignment_algo->add("Clustalw");
-	alignment_algo->add("Muscle");
-#ifdef NO_CLUSTALW
-	alignment_algo->deactivate();
-#endif
-	
-	x = A->x();
-	y += alignment_algo->h() + 10;
-	h = 40;
-	w = 95;
-	Fl_Button *accept = new Fl_Button(x,y,w,h, "Apply");
-	accept->callback(accept_cb, view);
-	accept->color(FL_LIGHT2);
-	x += w + 5;
-	Fl_Button *permanent = new Fl_Button(x,y,w,h, "Set changes\npermanent");
-	permanent->callback(permanent_cb, view);
-	permanent->color(FL_LIGHT2);
-	w = 45;
-	y += 10;
-	Fl_Button *ignore = new Fl_Button(win->w() - w - 5,y,w,20, "Close");
-	ignore->color(FL_LIGHT2);
-	ignore->callback(ignore_cb);
-	win->end();
-	win->resizable(NULL);
-	}
-
-bgrnd->value( view->DNA_obj->color() );
-bgrnd->color( view->DNA_obj->color() );
-s_bgrnd->value( view->DNA_obj->color2() );
-s_bgrnd->color( view->DNA_obj->color2() );
-A->color(view->dnacolors[1], view->dnacolors[1]);
-C->color(view->dnacolors[2], view->dnacolors[2]);
-G->color(view->dnacolors[3], view->dnacolors[3]);
-T->color(view->dnacolors[4], view->dnacolors[4]);
-char *p, aagroups[30];
-p = aagroups;
-set_aa_color_mode(USING_STANDARD_COLORS);
-for(c=1; c < view->numb_stdprotcolors; c++) {
-	for(char aa='A'; aa<='Z';aa++) {
-		if(get_color_for_aa(aa) == c) *(p++) = aa;
-		}
-	if(c+1< view->numb_stdprotcolors) strcpy(p++, ",");
-	}
-*p = 0;
-protgroups->value(aagroups);
-if(view->numb_altprotcolors <= 1) s_protgroups->value("");
-else {
-	p = aagroups;
-	set_aa_color_mode(USING_ALT_COLORS);
-	for(c=1; c < view->numb_altprotcolors; c++) {
-		for(char aa='A'; aa<='Z';aa++) {
-			if(get_color_for_aa(aa) == c) *(p++) = aa;
-			}
-		if(c+1< view->numb_altprotcolors) strcpy(p++, ",");
-		}
-	*p = 0;
-	s_protgroups->value(aagroups);
-	}
-if(view->curr_colors == view->stdprotcolors) set_aa_color_mode(USING_STANDARD_COLORS);
-else set_aa_color_mode(USING_ALT_COLORS);
-
-for(c=1; c < max_protcolors; c++) {
-	protcol[c]->color(view->stdprotcolors[c], view->stdprotcolors[c]);
-	}
-movekeys->value( view->movekeys );
-lowercase->value(view->allow_lower);
-inverted->value(view->inverted_colors);
-pdfformat->value(printout_pageformat);
-saveformat->value(view->format_for_save);
-alignment_algo->value(view->alignment_algorithm);
-
-win->show();
-return;
-}
-
-
-void ignore_cb(Fl_Widget *obj, void *data)
-{
-obj->window()->hide();
-}
-
-
-void accept_cb(Fl_Widget *obj, void *data)
-{
-SEA_VIEW *view = (SEA_VIEW *)data;
-Fl_Menu_Button *menu_props = (Fl_Menu_Button *)view->bouton_props;
-props_menu_parts *props_parts = (props_menu_parts *)menu_props->user_data();
-char *p;
-Fl_Menu_Item *item;
-
-my_watch_cursor(view->dnawin);
-view->DNA_obj->color((int)(bgrnd->value() + 0.5));
-view->DNA_obj->color2((int)(s_bgrnd->value() + 0.5));
-view->DNA_obj->parent()->color( view->DNA_obj->color() );
-view->dnacolors[1] = A->color();
-view->dnacolors[2] = C->color();
-view->dnacolors[3] = G->color();
-view->dnacolors[4] = T->color();
-for(int c=1; c < max_protcolors; c++) view->stdprotcolors[c] = protcol[c]->color();
-
-p = strdup(protgroups->value());
-majuscules(p);
-protgroups->value(p);
-free(p);
-p = strdup(s_protgroups->value());
-majuscules(p);
-s_protgroups->value(p);
-free(p);
-prep_aa_color_code((char *)protgroups->value(), (char *)s_protgroups->value(), max_protcolors, 
-	&view->numb_stdprotcolors, &view->numb_altprotcolors);
-int etat = menu_props->mode(props_parts->colors + 2);
-if(view->numb_altprotcolors > 1) menu_props->mode(props_parts->colors + 2, etat & ~FL_MENU_INACTIVE);
-else menu_props->mode(props_parts->colors + 2, etat | FL_MENU_INACTIVE);
-if(view->protein) {
-	view->alt_colors = (color_choice)-1; /* to force redraw of sequences */
-	menu_props->value(props_parts->colors + 1);
-	item = (Fl_Menu_Item *)menu_props->menu() + props_parts->colors;
-	item->do_callback(menu_props);
-	(item+1)->setonly();
-	if(view->numb_altprotcolors > 1) view->alt_colors = USING_STANDARD_COLORS;
-	else view->alt_colors = NO_ALT_COLORS;
-	}
-
-if(strlen(movekeys->value()) != 4)  movekeys->value(view->movekeys);
-else {
-	strcpy(view->movekeys, movekeys->value() ); 
-	mod_multipl(view, view->multipl->argument() );
-	view->multipl->redraw();
-	}
-
-item = (Fl_Menu_Item *)menu_props->menu() + props_parts->allow_lower;
-view->allow_lower = ! lowercase->value(); /* because callback toggles it */
-item->do_callback(menu_props);
-if(view->allow_lower) item->set();
-else item->clear();
-
-item = (Fl_Menu_Item *)menu_props->menu() + props_parts->inverted;
-view->inverted_colors = ! inverted->value(); /* because callback toggles it */
-menu_props->value(props_parts->inverted);
-item->do_callback(menu_props);
-if(view->inverted_colors) item->set();
-else item->clear();
-
-printout_pageformat = (paperformat)pdfformat->value();
-
-view->format_for_save = (known_format)saveformat->value();
-item = (Fl_Menu_Item *)menu_props->menu() + props_parts->saveformat;
-(item+view->format_for_save)->setonly();
-
-view->alignment_algorithm = alignment_algo->value();
-item = (Fl_Menu_Item *)menu_props->menu() + props_parts->clustalopt;
-(item+view->alignment_algorithm)->setonly();
-
-if(!view->protein) view->DNA_obj->redraw();
-fl_reset_cursor(view->dnawin);
-}
-
-
-void permanent_cb(Fl_Widget *obj, void *data)
-{
-char txt[150];
-int v;
-uchar r, g, b;
-
-accept_cb(obj, data);
-
-v = (int)(bgrnd->value() + 0.5);
-sprintf(txt, "%d", v );
-set_res_value("background", txt );
-v = (int)(s_bgrnd->value() + 0.5);
-sprintf(txt, "%d", v );
-set_res_value("sites_background", txt );
-
-Fl::get_color( A->color(), r, g, b);
-sprintf(txt, "%d %d %d,", r, g, b);
-Fl::get_color( C->color(), r, g, b);
-sprintf(txt + strlen(txt), "%d %d %d,", r, g, b);
-Fl::get_color( G->color(), r, g, b);
-sprintf(txt + strlen(txt), "%d %d %d,", r, g, b);
-Fl::get_color( T->color(), r, g, b);
-sprintf(txt + strlen(txt), "%d %d %d", r, g, b);
-set_res_value("dnacolors", txt);
-
-set_res_value("stdcolorgroups", (char *)protgroups->value());
-set_res_value("altcolorgroups", (char *)s_protgroups->value());
-
-txt[0] = 0;
-for(int c=1; c < max_protcolors; c++) {
-	Fl::get_color( protcol[c]->color(), r, g, b);
-	sprintf(txt + strlen(txt), "%d %d %d,", r, g, b);
-	}
-txt[strlen(txt) - 1] = 0;
-set_res_value("protcolors", txt);
-
-set_res_value("movekeys", movekeys->value() );
-set_res_value("lowercase", lowercase->value() ? "true" : "false");
-set_res_value("inverted", inverted->value() ? "true" : "false");
-set_res_value("printoutpageformat", printout_pageformat == A4 ? "A4" : "LETTER" );
-
-strcpy(txt, f_format_names[saveformat->value()] );
-minuscules(txt);
-set_res_value("save", txt );
-
-v = alignment_algo->value();
-sprintf(txt, "%d", v );
-set_res_value("alignment", txt);
-
-save_resources();
-obj->window()->hide();
-}
-
-
-void reset_callback(Fl_Widget *obj, void *data)
-{
-if(data == A) {
-	A->color(FL_RED, FL_RED);
-	C->color(FL_GREEN, FL_GREEN);
-	G->color(FL_YELLOW, FL_YELLOW);
-	T->color(FL_BLUE, FL_BLUE);
-	}
-else if(data == bgrnd) {
-	int back_color, region_back_color;
-#ifdef WIN32
-	back_color = FL_DARK1; region_back_color = 43;
-#else
-	back_color = FL_GRAY; region_back_color = FL_DARK2;
-#endif
-	bgrnd->value( back_color );
-	bgrnd->color( back_color );
-	s_bgrnd->value( region_back_color );
-	s_bgrnd->color( region_back_color );
-	}
-else if(data == movekeys) {
-	movekeys->value(MOVEKEYS_DEFAULT);
-	}
-else if(data == protgroups) {
-	protgroups->value(def_stdcolorgroups);
-	s_protgroups->value("");
-	for(int c=1; c < max_protcolors; c++) {
-		protcol[c]->color(def_protcolors[c], def_protcolors[c]);
-		}
-	}
-obj->window()->redraw();
-}
-
-
-void my_colorchooser(Fl_Widget *obj, void *data)
-{
-static Fl_Window *win = NULL;
-static Fl_Color_Chooser *ch;
-uchar r, g, b;
-static Fl_Color initial;
-
-if(win == NULL) {
-	win = new Fl_Window(205, 125, "Color chooser");
-	ch = new Fl_Color_Chooser(1, 1, 200, 95);
-	ch->callback(my_colorchooser_callback);
-	Fl_Button *reset = new Fl_Button(5, 100, 40, 20, "reset");
-	reset->callback(reset_color_callback, ch);
-	Fl_Button *ok = new Fl_Button(160, 100, 40, 20, "OK");
-	ok->callback(accept_color_callback, ch);
-	win->end();
-	win->resizable(NULL);
-	win->set_modal();
-	win->callback(reset_color_callback, ch);
-}
-if(win->shown()) return;
-Fl::get_color( obj->color(), r, g, b);
-ch->rgb(r/255., g/255., b/255.);
-ch->user_data(obj);
-obj->user_data(&initial);
-initial = obj->color();
-win->show();
-return;
-}
-
-
-void my_colorchooser_callback(Fl_Widget *obj, void *data)
-{
-int r, g, b;
-Fl_Button *but = (Fl_Button *)data;
-Fl_Color_Chooser *ch = (Fl_Color_Chooser *)obj;
-r = (int)(ch->r() * 255 + 0.5);
-g = (int)(ch->g() * 255 + 0.5);
-b = (int)(ch->b() * 255 + 0.5);
-Fl_Color c = fl_rgb_color(r, g, b);
-but->color(c, c);
-but->redraw();
-}
-
-
-void reset_color_callback(Fl_Widget *obj, void *data)
-{
-Fl_Color_Chooser *ch = (Fl_Color_Chooser *)data;
-Fl_Widget *from = (Fl_Widget *)(ch->user_data());
-Fl_Color c = *(Fl_Color *)(from->user_data());
-uchar r, g, b;
-
-from->color(c, c);
-from->redraw();
-if(obj->window() == NULL) ((Fl_Window *)obj)->hide();
-else {
-	Fl::get_color( c, r, g, b);
-	ch->rgb(r/255., g/255., b/255.);
-	}
-}
-
-
-void accept_color_callback(Fl_Widget *obj, void *data)
-{
-obj->window()->hide();
-}
-
-
-void slider_cb(Fl_Widget *obj, void *data)
-{
-Fl_Valuator *v = (Fl_Valuator *)obj;
-v->color( (int)(v->value() + 0.5) );
-}


Property changes on: trunk/packages/seaview/trunk/debian
___________________________________________________________________
Name: mergeWithUpstream
   + 1

Modified: trunk/packages/seaview/trunk/debian/changelog
===================================================================
--- trunk/packages/seaview/trunk/debian/changelog	2007-07-20 10:28:45 UTC (rev 359)
+++ trunk/packages/seaview/trunk/debian/changelog	2007-07-21 02:32:37 UTC (rev 360)
@@ -1,3 +1,12 @@
+seaview (20070615-1) unstable; urgency=low
+
+  * New upstream release correcting problems with lowercase characters.
+  * Converted the SVN repository which hosts the Debian source package
+    to use the MergeWithUpstream option.
+  * Moved examples to debian/examples.
+
+ -- Charles Plessy <charles-debian-nospam at plessy.org>  Sat, 21 Jul 2007 11:29:19 +0900
+
 seaview (20070417-1) unstable; urgency=low
 
   * New upstream release adding processing of comments in FASTA format.

Copied: trunk/packages/seaview/trunk/debian/examples (from rev 355, trunk/packages/seaview/trunk/examples)

Modified: trunk/packages/seaview/trunk/debian/rules
===================================================================
--- trunk/packages/seaview/trunk/debian/rules	2007-07-20 10:28:45 UTC (rev 359)
+++ trunk/packages/seaview/trunk/debian/rules	2007-07-21 02:32:37 UTC (rev 360)
@@ -61,7 +61,7 @@
 	dh_testroot
 	dh_installchangelogs
 	dh_installdocs
-	dh_installexamples examples/* protein.mase
+	dh_installexamples debian/examples/* protein.mase
 	dh_installmenu
 	dh_desktop
 	dh_installman debian/seaview.1

Deleted: trunk/packages/seaview/trunk/load_seq.cxx
===================================================================
--- trunk/packages/seaview/trunk/load_seq.cxx	2007-07-20 10:28:45 UTC (rev 359)
+++ trunk/packages/seaview/trunk/load_seq.cxx	2007-07-21 02:32:37 UTC (rev 360)
@@ -1,781 +0,0 @@
-#include "seaview.h"
-#include <ctype.h>
-#include <FL/Fl_Multiline_Input.H>
-
-#define ISSEQCHAR(c) (isalpha(c) || c=='-' || c=='*' )
-
-typedef struct {
-	SEA_VIEW *view;
-	Fl_Input *seq_name_field;
-	Fl_Input *seq_field;
-	} view_name_struct;
-
-/* included prototypes */
-void clear_callback(Fl_Widget *ob, void *data);
-void refresh_callback(Fl_Widget *ob, void *data);
-void remove_gaps_callback(Fl_Widget *ob, void *data);
-void remove_numbers_callback(Fl_Widget *ob, void *data);
-void to_upcase_callback(Fl_Widget *ob, void *data);
-void load_seq_callback(Fl_Widget *ob, void *data);
-void cancel_seq_callback(Fl_Widget *ob, long val);
-void load_seq_dialog(SEA_VIEW *view);
-void add_seq_to_align(SEA_VIEW *view, char *newname, char *newseq, 
-	int lenseq);
-char complement_base(char old);
-void edit_comments_dialog(SEA_VIEW *view);
-void edit_sequence_dialog(SEA_VIEW *view);
-void close_editseqwin_callback(Fl_Widget *ob, void *data);
-int load_sequence_for_edit(struct editseq *editdata);
-char *renumber_seq(char *seq);
-void renumber_callback(Fl_Widget *ob, void *data);
-void edit_sequence_callback(Fl_Widget *ob, void *data);
-void update_comments_callback(Fl_Widget *ob, void *data);
-int load_comments(SEA_VIEW *view, Fl_Input *input, Fl_Widget *name);
-char *cre_consensus(SEA_VIEW *view, char *newname);
-Fl_Widget *cre_adjusted_button(int x, int y, int *w, int h, 
-	char *label);
-
-
-/* external prototypes */
-extern void allonge_seqs(char **seq, int totseqs, int maxlen, int *eachlength,
-	int tot_comment_lines, char **comment_line);
-	
-	
-void clear_callback(Fl_Widget *ob, void *data)
-{
-Fl_Input *seq_input, *seq_name_input;
-seq_name_input = ((view_name_struct *)data)->seq_name_field;
-seq_input = ((view_name_struct *)data)->seq_field;
-seq_input->value("");
-if(seq_name_input != NULL) seq_name_input->value("");
-}
-
-
-void refresh_callback(Fl_Widget *ob, void *data)
-{
-Fl_Input *seq_input;
-seq_input = ((view_name_struct *)data)->seq_field;
-seq_input->redraw();
-}
-
-
-void remove_gaps_callback(Fl_Widget *ob, void *data)
-{
-Fl_Input *seq_input;
-char *old_seq, *new_seq, *p, *q;
-size_t lseq;
-
-seq_input = (Fl_Input *)data;
-old_seq = (char *)seq_input->value();
-lseq = strlen(old_seq);
-new_seq = (char *)malloc(lseq+1);
-if(new_seq == NULL) return;
-p = old_seq; q = new_seq;
-while(*p != 0) {
-	if(*p != '-' ) *(q++) = *p;
-	p++;
-	}
-*q = 0;
-seq_input->value(new_seq);
-}
-
-
-void remove_numbers_callback(Fl_Widget *ob, void *data)
-{
-Fl_Input *seq_input;
-char *old_seq, *new_seq, *p, *q;
-size_t lseq;
-
-seq_input = (Fl_Input *)data;
-old_seq = (char *)seq_input->value();
-lseq = strlen(old_seq);
-new_seq = (char *)malloc(lseq+1);
-if(new_seq == NULL) return;
-p = old_seq; q = new_seq;
-while(*p != 0) {
-	if( ! isdigit(*p) ) *(q++) = *p;
-	p++;
-	}
-*q = 0;
-seq_input->value(new_seq);
-}
-
-
-void to_upcase_callback(Fl_Widget *ob, void *data)
-{
-Fl_Input *seq_input = (Fl_Input *)data;
-char *old_seq = (char *)seq_input->value();
-int lseq = strlen(old_seq);
-char *new_seq = (char *)malloc(lseq+1);
-if(new_seq == NULL) return;
-char *p = old_seq; 
-char *q = new_seq - 1;
-do *(++q) = toupper(*(p++)); while(*q != 0);
-seq_input->value(new_seq);
-}
-
-
-void load_seq_callback(Fl_Widget *ob, void *data)
-{
-Fl_Input *seq_name_input, *seq_input;
-SEA_VIEW *view;
-char *name, *newseq, *tmp, *p, *q;
-int lenseq;
-
-seq_name_input = ((view_name_struct *)data)->seq_name_field;
-view = ((view_name_struct *)data)->view;
-seq_input = ((view_name_struct *)data)->seq_field;
-name = (char *)seq_name_input->value();
-if(strlen(name) == 0) {
-	fl_alert(
-		"`Seq. name' field is empty\nPlease enter a sequence name");
-	return;
-	}
-tmp = (char *)seq_input->value();
-lenseq = (int)strlen(tmp);
-newseq = (char *)malloc(lenseq+1);
-if(newseq == NULL) {
-	fl_alert("Not enough memory");
-	return;
-	}
-ob->window()->hide();
-p = tmp; q = newseq; lenseq = 0;
-while(*p != 0) {
-	if(*p != ' ' && *p != '\n' && *p != '\t') {
-		if(view->allow_lower) *(q++) = (*p);
-		else *(q++) = toupper(*p); 
-		lenseq++;
-		}
-	p++;
-	}
-*q = 0;
-add_seq_to_align(view, name, newseq, lenseq);
-free(newseq);
-}
-
-
-void cancel_seq_callback(Fl_Widget *ob, long val)
-{
-ob->window()->hide();
-}
-
-
-Fl_Widget *cre_adjusted_button(int x, int y, int *w, int h, 
-	char *label)
-{
-Fl_Button *obj;
-const int lsize = FL_NORMAL_SIZE;
-fl_font(FL_HELVETICA, lsize);
-// *w = (int) ( fl_width(label) + 2 * fl_width("R") + 0.5 );
-*w = (int) ( fl_width(label) + 10 + 0.5 );
-obj = new Fl_Button(x, y, *w, h, label);
-obj->labelsize(lsize);
-obj->labelfont(FL_HELVETICA);
-return (Fl_Widget *)obj;
-}
-
-
-void load_seq_dialog(SEA_VIEW *view)
-{
-static Fl_Window *load_form;
-static int first = TRUE;
-static Fl_Input *seq_input, *seq_name_input;
-
-if(first) {
-	Fl_Widget *obj;
-	int fin, width;
-	static view_name_struct view_name;
-	first = FALSE;
-	load_form = new Fl_Window(490,530);
-	load_form->box(FL_FLAT_BOX);
-    	load_form->label("Sequence Loading");
-	
-	int curr_y = 5;
-	fin = 5;
-	Fl_Group *top = new Fl_Group(fin,curr_y,load_form->w() - 2 * fin, 25);
-	static char label[] = "Seq. name:";
-	fl_font(FL_HELVETICA, FL_NORMAL_SIZE);
-	width = (int)fl_width(label) + 4 * 2;
-	Fl_Box *name_box = new Fl_Box(FL_UP_BOX, 
-		fin, top->y(), width, top->h(), label);
-	name_box->labelsize(FL_NORMAL_SIZE);
-	name_box->box(FL_NO_BOX);
-	fin += width + 5;
-
-	seq_name_input = new Fl_Input(fin,top->y(),100,top->h(),"");
-	seq_name_input->type(FL_NORMAL_INPUT);
-	fin += seq_name_input->w() + 5;
-	
-	obj = cre_adjusted_button(fin,top->y(),&width,top->h(),
-		"Add to alignment");
-	obj->callback(load_seq_callback, &view_name);
-	fin += width + 5;
-	
-	obj = cre_adjusted_button(fin,top->y(),&width,top->h(),
-		"Cancel");
-	obj->callback(cancel_seq_callback, 0);
-	fin += width;
-	
-	top->resizable(NULL);
-	top->size(fin - top->x(), top->h());
-	top->end();
-	
-	curr_y += top->h() + 15;
-	seq_input = new 
-		Fl_Input(top->x(), curr_y, load_form->w() - 2 * top->x(), 450,
-#if defined(__APPLE__)
-	    ""
-#elif defined(WIN32) 
-	    "Type sequence or paste it with CRTL-V in panel below"
-#else
-	    "Type or paste sequence with middle mouse button in panel below"
-#endif
-	    );
-	seq_input->type(FL_MULTILINE_INPUT);
-	seq_input->align(FL_ALIGN_TOP);
-	seq_input->textfont(FL_COURIER);
-	seq_input->textsize(12);
-	fin = top->x();
-	curr_y += seq_input->h() + 5;
-	Fl_Group *bottom = new Fl_Group(fin, curr_y, top->w(), top->h() );
-	obj = cre_adjusted_button(fin, curr_y, &width, bottom->h(), "Refresh");
-	obj->callback(refresh_callback, &view_name);
-	fin += width + 5;
-	
-	obj = cre_adjusted_button(fin, curr_y, &width, bottom->h(), "Clear");
-	obj->callback(clear_callback, &view_name);
-	fin += width + 5;
-	
-	obj = cre_adjusted_button(fin, curr_y, &width, bottom->h(),
-		"Remove gaps");
-	obj->callback(remove_gaps_callback, seq_input);
-	fin += width + 5;
-	
-	obj = cre_adjusted_button(fin,curr_y,&width,bottom->h(),
-		"Remove numbers");
-	obj->callback(remove_numbers_callback, seq_input);
-	fin += width + 5;
-	
-	obj = cre_adjusted_button(fin, curr_y, &width, bottom->h(),
-		"to UPPER");
-	obj->callback(to_upcase_callback, seq_input);
-	fin += width;
-	
-	bottom->resizable(NULL);
-	bottom->size(fin - bottom->x(), bottom->h());
-	bottom->end();
-	
-	load_form->resizable(seq_input);
-	
-	view_name.view = view;
-	view_name.seq_name_field = seq_name_input;
-	view_name.seq_field = seq_input;
-	load_form->end();
-    load_form->position((Fl::w() - load_form->w())/2, 
-		(Fl::h() - load_form->h())/2);
-	}
-seq_name_input->value("");
-seq_input->value("");
-#if defined(__APPLE__)
-	seq_input->value("\n\n\n\n\n\nType sequence or paste it with cmd-V\n\n\n");
-	seq_input->position(seq_input->size(), 0);
-#endif	
-seq_input->take_focus();
-load_form->show();
-}
-
-
-void add_seq_to_align(SEA_VIEW *view, char *newname, char *newseq, 
-	int lenseq)
-{
-int num, *newsel, numset;
-char ***newcol;
-static char defname[]="newfile";
-char **new_s, **new_n, **new_c;
-
-num = view->tot_seqs + 1;
-new_s = (char **)realloc(view->sequence, num * sizeof(char *));
-if(new_s != NULL) view->sequence = new_s;
-new_c = (char **)realloc(view->comments, num * sizeof(char *));
-if(new_c != NULL) view->comments = new_c;
-new_n = (char **)realloc(view->seqname, num * sizeof(char *));
-if(new_n != NULL) view->seqname = new_n;
-
-if(new_s == NULL || new_n == NULL || new_c == NULL) goto nomem;
-if(lenseq > view->max_seq_length) {
-	lenseq = view->max_seq_length;
-	newseq[lenseq] = 0;
-	fl_alert("Warning: sequence was truncated to current max length %d", lenseq);
-	}
-if( (view->seqname[num-1] = (char *)malloc(strlen(newname)+1)) == NULL) 
-	goto nomem;
-strcpy(view->seqname[num-1], newname);
-if( (view->comments[num-1] = (char *)malloc(3)) == NULL) goto nomem;
-strcpy(view->comments[num-1], ";\n");
-if( (view->sequence[num-1] = (char *)malloc(view->max_seq_length + 1)) == NULL) 
-	goto nomem;
-memcpy(view->sequence[num-1], newseq, lenseq+1);
-if(view->tot_seqs == 0) {
-	newname = (char *) fl_input("Name of the new file?", "");
-	if(newname == NULL) newname = defname;
-	init_dna_scroller(view, 1, newname, FALSE, NULL);
-	view->modif_but_not_saved = TRUE;
-	{ char *q, *p = newname;
-	while ( (q = strchr(p, '/')) != NULL ) p = q + 1;
-	view->dnawin->label(p);
-	}
-	view->DNA_obj->redraw();
-	Fl_Menu_Item *items = 
-		(Fl_Menu_Item *)((Fl_Menu_ *)view->menu_file)->menu();
-	items[SAVE].activate();
-	items[SAVE_AS].activate();
-	return;
-	}
-if( (newsel = (int *)malloc(num*sizeof(int))) == NULL) goto nomem;
-memcpy(newsel, view->each_length, (num-1)*sizeof(int) );
-free(view->each_length);
-view->each_length = newsel;
-view->each_length[num-1] = lenseq;
-if(lenseq > view->seq_length) {
-	double x; int l;
-	view->seq_length = lenseq;
-	x = ( (double) view->tot_sites ) / ( view->seq_length + 3 ); 
-	if(x>1) x=1;
-	((Fl_Slider*)view->horsli)->slider_size(x);
-	l = view->seq_length - view->tot_sites+3;
-	if(l<1) l=1;
-	((Fl_Slider*)view->horsli)->bounds(1,l);
-	}
-if(view->numb_dnacolors > 1) {
-	if( (newcol = (char ***)malloc(num*sizeof(char **))) == NULL) 
-		goto nomem;
-	memcpy(newcol, view->col_seq, (num-1)*sizeof(char **) );
-	newcol[num-1] = * prepcolseqs(view->sequence+num-1, 1, 
-		view->max_seq_length,
-		view->each_length+num-1, 
-		( view->protein ? get_color_for_aa : get_color_for_base ), 
-		view->numb_gc, view->allow_lower);
-	if(newcol[num - 1] == NULL) out_of_memory();
-	free(view->col_seq);
-	view->col_seq = newcol;
-	}
-if( (newsel = (int *)malloc(num*sizeof(int))) == NULL) goto nomem;
-memcpy(newsel, view->sel_seqs, (num-1)*sizeof(int) );
-free(view->sel_seqs);
-view->sel_seqs = newsel;
-view->sel_seqs[num-1] = FALSE;
-for(numset = 0; numset < view->numb_species_sets; numset++) {
-	if( (newsel = (int *)malloc(num*sizeof(int))) == NULL) goto nomem;
-	memcpy(newsel, view->list_species_sets[numset], (num-1)*sizeof(int) );
-	free(view->list_species_sets[numset]);
-	view->list_species_sets[numset] = newsel;
-	view->list_species_sets[numset][num-1] = FALSE;
-	}
-view->tot_seqs = num;
-view->cursor_seq = num;
-view->cursor_site = 1;
-view->first_site = 1;
-view->modif_but_not_saved = TRUE;
-((Fl_Slider*)view->horsli)->value(1);
-set_tot_lines(view, view->tot_lines);
-view->first_seq = FL_max(num - view->tot_lines + 1, 1);
-((Fl_Slider*)view->vertsli)->value(view->first_seq);
-view->DNA_obj->redraw();
-view->vertsli->redraw();
-view->horsli->redraw();
-return;
-nomem:
-fl_alert("Not enough memory\nto create the new sequence %s",
-		newname);
-}
-
-
-char complement_base(char old)
-{
-static char bases[] = "ACGTURYMWSKVHDB";
-static char complement[] = "TGCAAYRKWSMBDHV";
-char *p;
-if( (p = strchr(bases, old)) != NULL )
-	return complement[ p - bases ];
-else
-	return old;
-}
-
-
-void edit_comments_dialog(SEA_VIEW *view)
-{
-static Fl_Window *comments_form;
-static int first = TRUE;
-static Fl_Input *comments_input;
-static Fl_Widget *comments_name;
-
-if(first) {
-	Fl_Widget *obj;
-	int fin, width;
-	static view_name_struct comments_data;
-	first = FALSE;
-	comments_form = new Fl_Window(490,530);
-	comments_form->label("Comments Editing");
-	comments_form->box(FL_FLAT_BOX);
-	
-	Fl_Group *top_group = new Fl_Group(5,5,comments_form->w() - 10, 25);
-	fin = 5;
-	obj = cre_adjusted_button(fin,5,&width,25, "Apply");
-	obj->callback(update_comments_callback, &comments_data);
-	fin += width + 5;
-	
-	obj = cre_adjusted_button(fin,5,&width,25,"Cancel");
-	obj->callback(cancel_seq_callback, 0);
-	fin += width + 5;
-	
-	obj = cre_adjusted_button(fin,5,&width,25,"Refresh");
-	obj->callback(refresh_callback, &comments_data);
-	fin += width + 5;
-
-	comments_name = new Fl_Box(FL_DOWN_BOX, fin, 5, 
-		top_group->x() +top_group->w() - fin, 25, "");
-	comments_name->align(FL_ALIGN_CENTER);
-	comments_name->labelfont(FL_COURIER);
-	comments_name->labelsize(FL_NORMAL_SIZE);
-
-	top_group->resizable(comments_name);
-	top_group->end();
-	
-	comments_input = new Fl_Input(5,35,top_group->w(),
-			comments_form->h() - 5 - 35, "");
-	comments_input->type(FL_MULTILINE_INPUT);
-	comments_input->textfont(FL_COURIER);
-	comments_input->textsize(12);
-	comments_data.view = view;
-	comments_data.seq_field = comments_input;
-	comments_form->resizable(comments_input);
-	comments_form->end();
-	comments_form->position( (Fl::w() - comments_form->w())/2, 
-    		(Fl::h() - comments_form->h())/2 );
-	}
-if(load_comments(view, comments_input, comments_name)) {
-	fl_alert("Not enough memory");
-	return;
-	}
-comments_input->take_focus();
-comments_form->show();
-}
-
-struct editseq {
-	Fl_Window *form;
-	Fl_Multiline_Input *input;
-	Fl_Widget *name;
-	Fl_Widget *apply;
-	Fl_Widget *renumber;
-	SEA_VIEW *view;
-	int seqnum;
-	};
-
-
-void edit_sequence_dialog(SEA_VIEW *view)
-{
-struct editseq *editdata;
-int fin, width, num;
-
-for(num = 0; num <view->tot_seqs; num++) { if(view->sel_seqs[num]) break; }
-if(num >= view->tot_seqs) return;
-editdata = (struct editseq *)malloc(sizeof(struct editseq));
-if(editdata == NULL) return;
-editdata->seqnum = num;
-editdata->view = view;
-editdata->form = new Fl_Window(770,530);
-editdata->form->label("Sequence Editing");
-editdata->form->box(FL_FLAT_BOX);
-editdata->form->callback(close_editseqwin_callback, editdata);
-
-Fl_Group *top_group = new Fl_Group(5,5,editdata->form->w() - 10, 25);
-fin = 5;
-editdata->apply = cre_adjusted_button(fin,5,&width,25, "Apply");
-editdata->apply->callback(edit_sequence_callback, 0);
-fin += width + 5;
-
-editdata->renumber = cre_adjusted_button(fin,5,&width,25,"Renumber");
-editdata->renumber->callback(renumber_callback, 0);
-fin += width + 5;
-
-Fl_Widget *obj = cre_adjusted_button(fin,5,&width,25,"Cancel");
-obj->callback(close_editseqwin_callback, editdata);
-fin += width + 5;
-
-editdata->name = new Fl_Box(FL_DOWN_BOX, fin, 5, 
-	top_group->x() +top_group->w() - fin, 25, "");
-editdata->name->align(FL_ALIGN_CENTER);
-editdata->name->labelfont(FL_COURIER);
-editdata->name->labelsize(FL_NORMAL_SIZE);
-
-top_group->resizable(editdata->name);
-top_group->end();
-
-editdata->input = new Fl_Multiline_Input(5,35,top_group->w(),
-		editdata->form->h() - 5 - 35, "");
-editdata->input->type(FL_MULTILINE_INPUT);
-editdata->input->textfont(FL_COURIER);
-editdata->input->textsize(12);
-editdata->form->resizable(editdata->input);
-editdata->form->end();
-editdata->form->position( (Fl::w() - editdata->form->w())/2, 
-		(Fl::h() - editdata->form->h())/2 );
-	
-if(load_sequence_for_edit(editdata)) {
-	fl_alert("Not enough memory");
-	return;
-	}
-editdata->form->show();
-editdata->input->take_focus();
-}
-
-
-void close_editseqwin_callback(Fl_Widget *ob, void *data)
-{
-free(data);
-Fl_Window *w = ob->window();
-delete (w == NULL ? ob : w);
-}
-
-
-int load_sequence_for_edit(struct editseq *editdata)
-{
-char *temp;
-
-editdata->name->label(editdata->view->seqname[editdata->seqnum]);
-editdata->name->redraw();
-
-temp = renumber_seq(editdata->view->sequence[editdata->seqnum]);
-if(temp == NULL) return TRUE;
-editdata->input->value(temp);
-free(temp);
-editdata->input->position(0);
-return FALSE;
-}
-
-
-char *renumber_seq(char *seq)
-{
-int l, nl, pos;
-char *p, *q, *temp;
-const int w = 100;
-
-p = seq - 1;
-l = 0;
-while(*(++p) != 0) {
-	if(ISSEQCHAR(*p)) l++;
-	}
-nl = l / w + 2;
-temp = (char *)malloc(l + 7 * nl + 100);
-if(temp == NULL) return NULL;
-p = seq - 1;
-q = temp;
-pos = 0;
-while(*(++p) != 0) {
-	if( ! ISSEQCHAR(*p)) continue;
-	*q++ = *p; pos++;
-	if(pos % w == 0) {
-		sprintf(q, "%6d\n", pos);
-		q += strlen(q);
-		}
-	}
-strcpy(q, "\n");
-return temp;
-}
-
-
-void renumber_callback(Fl_Widget *ob, void *data)
-{
-char *temp;
-struct editseq *editdata = (struct editseq *)ob->window()->user_data();
-
-temp = renumber_seq((char *)editdata->input->value());
-if(temp == NULL) return;
-editdata->input->value(temp);
-free(temp);
-}
-
-
-void edit_sequence_callback(Fl_Widget *ob, void *data)
-{
-struct editseq *editdata = (struct editseq *)ob->window()->user_data();
-char *p, *newseq, *q, *r, **newcolseq;
-SEA_VIEW *view;
-int num, l, col;
-
-view = editdata->view;
-num = editdata->seqnum;
-
-newseq = (char *)malloc(view->max_seq_length + 1);
-if(newseq == NULL) return;
-q = newseq;
-p = (char *)editdata->input->value() - 1;
-while(*(++p) !=  0) {
-	if( ! ISSEQCHAR(*p) ) continue;
-	if(q - newseq >= view->max_seq_length) {
-		fl_alert("Warning: sequence was truncated to current max sequence length %d", view->max_seq_length);
-		break;
-		}
-	*(q++) = *p;
-	}
-*q = 0;
-l = strlen(newseq);
-if(view->numb_gc > 1) {
-	newcolseq = * prepcolseqs(&newseq, 1, 
-		view->max_seq_length, &l, 
-		( view->protein ? get_color_for_aa : get_color_for_base ), 
-		view->numb_gc, view->allow_lower);
-	if(newcolseq == NULL) return;
-	for(col = 0; col < view->numb_gc; col++) free(view->col_seq[num][col]);
-	free(view->col_seq[num]);
-	view->col_seq[num] = newcolseq;
-	}
-free(view->sequence[num]);
-view->sequence[num] = newseq;
-view->each_length[num] = l;
-view->modif_but_not_saved = TRUE;
-if(l > view->seq_length) {
-	double x;
-	view->seq_length = l;
-	x = ( (double) view->tot_sites ) / ( view->seq_length + 3 ); 
-	if(x>1) x=1;
-	((Fl_Slider*)view->horsli)->slider_size(x);
-	l = view->seq_length - view->tot_sites+3;
-	if(l<1) l=1;
-	((Fl_Slider*)view->horsli)->bounds(1,l);
-	}
-else view->mod_seq = num;
-view->DNA_obj->redraw();
-ob->window()->do_callback();
-}
-
-
-void update_comments_callback(Fl_Widget *ob, void *data)
-{
-Fl_Input *comments_input;
-SEA_VIEW *view;
-int num, l, num_l;
-char *temp, *p, *q, *r;
-
-ob->window()->hide();
-view = ((view_name_struct *)data)->view;
-if(view->comments == NULL) {
-	view->comments = (char **)calloc(view->tot_seqs , sizeof(char *));
-	if(view->comments == NULL) return;
-	}
-comments_input = ((view_name_struct *)data)->seq_field;
-num = comments_input->argument();
-num_l = 0;
-p = (char *)comments_input->value(); l =strlen(p);
-q = p;
-while( (q = strchr(q, '\n')) != NULL) {
-	q++; num_l++;
-	}
-if(p[l - 1] != '\n') num_l++;
-temp = (char *)malloc(l + num_l + 1);
-if(temp == NULL) {
-	fl_alert("Not enough memory");
-	return;
-	}
-r = temp;
-do	{
-	q = strchr(p, '\n'); if(q == NULL) q = strchr(p, 0) - 1;
-	*(r++) = ';';
-	memcpy(r, p, q - p + 1); r += q - p + 1;
-	p = q + 1;
-	}
-while( *p != 0);
-if( *(r - 1) != '\n') *(r++) = '\n';
-*r = 0;
-if(view->comments[num] != NULL) free(view->comments[num]);
-view->comments[num] = temp;
-view->modif_but_not_saved = TRUE;
-}
-
-
-int load_comments(SEA_VIEW *view, Fl_Input *input, Fl_Widget *name)
-{
-int num;
-char *temp, *p, *q, *r;
-
-for(num = 0; num <view->tot_seqs; num++) 
-	if(view->sel_seqs[num]) break;
-input->argument( num);
-name->label(view->seqname[num]);
-name->redraw();
-if( view->comments == NULL || view->comments[num] == NULL) {
-	input->value("");
-	return FALSE;
-	}
-temp = (char *)malloc(strlen(view->comments[num]) + 1);
-if( temp == NULL) return TRUE;
-r = temp; p = view->comments[num];
-do	{
-	q = strchr(p, '\n');
-	memcpy(r, p + 1, q - p); r += q - p;
-	p = q + 1;
-	}
-while( *p != 0);
-*r = 0;
-input->value(temp);
-free(temp);
-input->position(0);
-return FALSE;
-}
-
-
-char *cre_consensus(SEA_VIEW *view, char *newname)
-{
-char *newseq, *p, *residues, unknown;
-int pos, num, total, kind, dernier, maxi, vu;
-static char dna_residues[]="ACGTU-";
-static const char prot_residues[] = "EDQNHRKILMVAPSGTFYWC-";
-static int freqs[30];
-
-newseq = (char *)malloc(view->seq_length + 1);
-if(newseq == NULL) return NULL;
-if(view->protein) {
-	residues = (char *)prot_residues;
-	unknown = 'X';
-	}
-else	{
-	residues = (char *)dna_residues;
-	unknown = 'N';
-	}
-dernier = strlen(residues) + 1;
-	
-for (pos = 0; pos < view->seq_length; pos++) {
-	vu = total = 0; memset(freqs, 0, dernier * sizeof(int));
-	for(num = 0; num < view->tot_seqs; num++) {
-		if( !view->sel_seqs[num] ) continue;
-		if(pos >= view->each_length[num]) continue;
-		vu++;
-		if(view->sequence[num][pos] == '-' && ! view->consensus_allowgaps) continue;
-		total++;
-		p = strchr(residues, toupper(view->sequence[num][pos]));
-		if(p == NULL) kind = 0;
-		else kind = p - residues + 1;
-		++(freqs[kind]);
-		}
-	if(vu == 0) break;
-	if(total == 0)
-		newseq[pos] = '-';
-	else	{
-		maxi = 0;
-		for(num = 0; num < dernier; num++) {
-			if(freqs[num] > maxi) {
-				maxi = freqs[num]; kind = num;
-				}
-			}
-		if(kind == 0)
-			newseq[pos] = unknown;
-		else if( maxi >= total * (view->consensus_threshold / 100.) )
-			newseq[pos] = residues[kind - 1];
-		else
-			newseq[pos] = unknown;
-		}
-	newseq[pos + 1] = 0;
-	}
-strcpy(newname, "Consensus");
-return newseq;
-}

Deleted: trunk/packages/seaview/trunk/mac_pc_extras.cxx
===================================================================
--- trunk/packages/seaview/trunk/mac_pc_extras.cxx	2007-07-20 10:28:45 UTC (rev 359)
+++ trunk/packages/seaview/trunk/mac_pc_extras.cxx	2007-07-21 02:32:37 UTC (rev 360)
@@ -1,617 +0,0 @@
-#ifdef __APPLE__
-
-#include "seaview.h"
-#include <string.h>
-#include <stdio.h>
-#include <FL/Fl_Sys_Menu_Bar.H>
-#include <FL/filename.H>
-#include <config.H>
-
-// included functions
-int MG_GetInputFName(char *fname, int maxl, char *title);
-char *mac_fname_to_roman(char *in);
-extern "C" {
-void *memccpy(void *s1, const void *s2, int c, size_t n);
-#if ! TARGET_RT_MAC_MACHO
-char *OSXpathtoOS9path(const char *newpath);
-char *get_prog_dir(void);
-#else
-char *MG_GetBundleResourcesDir(void);
-#endif
-void PtoC(const void *in, void *out);
-void CtoP(const void *in, void *out);
-void MGinit_apple_events(SEA_VIEW *);
-void add_apropos(char *progname, void *data);
-void show_apropos(Fl_Widget *, void *);
-Boolean AppleEventsInstalled ();
-OSErr  MyHandleODoc (const AppleEvent *theAppleEvent, AppleEvent* reply, long handlerRefCon);
-OSErr  MyHandlePDoc (const AppleEvent *theAppleEvent, AppleEvent *reply, long handlerRefCon);
-OSErr  MyHandleOApp (const AppleEvent *theAppleEvent, AppleEvent *reply, long handlerRefCon);
-OSErr myQuitAppleEventHandler( const AppleEvent *appleEvt, AppleEvent* reply, long refcon );
-OSErr MyGotRequiredParams (const AppleEvent *theAppleEvent);
-void MG_apple_inits(void);
-}
-
-static SEA_VIEW *view;
-extern void use_initial_file(SEA_VIEW *view, char *masename);
-extern char *get_next_help_line(void *in, char *line, int lline);
-
-#elif defined(WIN32)
-
-#include <stdarg.h>
-#include <Windows.h>
-#include <string.h>
-#include <direct.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-/* included functions */
-extern "C" {
-void my_bell(void);
-void *memccpy(void *s1, const void *s2, int c, size_t n);
-int mysystem(const char *command);
-char *get_prog_dir(void);
-void add_to_path(char *dir);
-}
-char *MG_win32_file_chooser(const char* message, // title of dialog window
-        const char* pattern, // optional "mase format\0*.mase\0MSF format\0*.msf\0"
-        const char* fname, // default file name
-        const char* defext, // default filename extension or NULL
-        bool save, // TRUE iff output file selection
-        int *pfilterindex); // (inout) pointer to index (from 1) in series of file types in pattern
-#endif
-
-
-
-void *memccpy(void *s1, const void *s2, int c, size_t n)
-{
-char *p, *q;
-p = (char *)s1; q = (char *)s2;
-while(n-- > 0) {
-	*p = *(q++);
-	if( *(p++) == c) return p;
-	}
-return 0;
-}
-
-
-#ifdef __APPLE__
-
-int MG_GetInputFName(char *fname, int maxl, char *title)
-{
-  OSStatus          err;
-  NavDialogCreationOptions  options;
-  NavDialogRef        navDialog;
-  NavReplyRecord        navReply;
-int         rsult = FALSE;
-FSRef fileRef;
-
-  err = NavGetDefaultDialogCreationOptions( &options );
-  if(err != noErr) return FALSE;
-  options.optionFlags &= !kNavAllowMultipleFiles;
-  options.windowTitle = CFStringCreateWithCString(NULL, title, kCFStringEncodingMacRoman);
-  err = NavCreateChooseFileDialog( &options, NULL, NULL, NULL, NULL, NULL, &navDialog );
-  if(err != noErr) return FALSE;
-
-  // choose the file
-  err = NavDialogRun( navDialog );
-  CFRelease(options.windowTitle);
-  if(err != noErr) return FALSE;
-  
-  err = NavDialogGetReply( navDialog, &navReply );
-  
-  // create url to chosen file
-  if (err == noErr && navReply.validRecord )
-  {    
-	err = AEGetNthPtr( &navReply.selection, 1, typeFSRef, NULL, NULL, &fileRef, sizeof( FSRef ), NULL );
-    if(err == noErr) {
-				err = FSRefMakePath(&fileRef, (UInt8 *)fname, maxl);
-				if (err == noErr) rsult = TRUE;
-                }
-  }  
-  NavDisposeReply( &navReply );
-  NavDialogDispose( navDialog );
-  return rsult;
-}
-
-
-char* MAC_file_chooser(const char* message, const char* pat, const char* fname)
-{
-	static char pathname[FL_PATH_MAX];
-	if( MG_GetInputFName(pathname, FL_PATH_MAX, (char *)message) ) return pathname;
-	else return NULL;
-}
-
-
-char *mac_fname_to_roman(char *in)
-/* passage codage pathname vers codage MacRoman qui semble nŽcessaire pour display Žcran 
-*/
-{
-static char out[250];
-CFStringRef mycfs;
-Boolean ok;
-/* j'ai cru comprendre que les pathnames sont codŽs en UTF8 */
-mycfs = CFStringCreateWithCString(NULL, in, kCFStringEncodingUTF8);
-/* et que MacRoman est utilisŽ pour display */
-ok = CFStringGetCString(mycfs, out, sizeof(out), kCFStringEncodingMacRoman);
-CFRelease(mycfs);
-return (ok ? out : in);
-}
-
-
-
-#if TARGET_RT_MAC_MACHO
-
-char *MG_GetBundleResourcesDir(void)
-{
-ProcessSerialNumber psn;
-FSRef fsref;
-static char fname[300];
-CFURLRef myurl;
-
-GetCurrentProcess(&psn);
-GetProcessBundleLocation(&psn, &fsref);
-FSRefMakePath(&fsref, (UInt8 *)fname, sizeof(fname)-1);
-strcat(fname, "/Contents/Resources"); 
-return fname;
-}
-
-#else
-
-static void MG_FSSpecToPathname (FSSpec *myFSS, char *fname, int maxl)
-{
-FSRef myFSRef, pFSRef;
-FSCatalogInfo myinfo;
-static int  anErr = noErr;
-char *p, *q;
-static char buffer[1000], name[256];
-FSSpec fsspec;
-
-p = buffer;
-anErr = FSpMakeFSRef(myFSS, &myFSRef);
-while(1) {
-	anErr = FSGetCatalogInfo(&myFSRef, kFSCatInfoParentDirID, &myinfo, NULL, &fsspec, &pFSRef);
-	PtoC(fsspec.name, name);
-	/* add the file or dir name to the end of buffer in reverse orientation */
-	q = name + strlen(name) - 1;
-	while(q >= name) { *p = *q; q--; p++; }
-	if(myinfo.parentDirID == fsRtParID) break; /* detect when top level is reached */
-	*p = ':'; p++;
-	myFSRef = pFSRef;
-	}
-*p = 0;
-/* invert buffer into fname */
-maxl--;
-if(maxl > strlen(buffer)) maxl = strlen(buffer);
-q = buffer + maxl - 1;
-p = fname;
-while(q >= buffer) { *p = *q; q--; p++; }
-fname[maxl] = 0;
-}
-
-
-char *get_prog_dir(void)
-/* returns the pathname of the directory containing the running program
-*/
-{
-FSSpec fspec;
-ProcessInfoRec info;
-ProcessSerialNumber psn;
-OSErr err;
-static char myname[300];
-char *p;
-
-info.processInfoLength = sizeof(ProcessInfoRec);
-info.processName = NULL;
-info.processAppSpec = &fspec;
-err = GetCurrentProcess(&psn);
-if(err != noErr) return NULL;
-err = GetProcessInformation(&psn, &info);
-if(err != noErr) return NULL;
-MG_FSSpecToPathname(&fspec, myname, sizeof(myname) );
-p = strrchr(myname, ':');
-if(p == NULL) return NULL;
-*p = 0;
-return myname;
-}
-
-
-char *OSXpathtoOS9path(const char *OSXpath /* syntax /disk/dir/fname */)
-{
-static char OS9path[1000];
-FSRef myref;
-FSSpec fsspec;
-
-FSPathMakeRef((const unsigned char *)OSXpath, &myref, NULL);
-FSGetCatalogInfo(&myref, 0, NULL, NULL, &fsspec, NULL);
-MG_FSSpecToPathname(&fsspec, OS9path, sizeof(OS9path));
-return OS9path; /* syntax disk:dir:fname */
-}
-#endif
-
-
-void PtoC(const void *in, void *out)
-{
-char *vin = (char *)in;
-char *vout = (char *)out;
-int l = *vin;
-
-if(l > 0) memcpy(vout, vin + 1, l);
-vout[l] = 0;
-}
-
-
-void CtoP(const void *in, void *out)
-{
-char *vout = (char *)out;
-int l;
-if(in == NULL) l = 0;
-else	{
-	l = strlen( (char *)in );
-	memcpy(vout + 1, in, l);
-	}
-vout[0] = l;
-}
-
-extern void fl_open_display(void);
-
-void MGinit_apple_events(SEA_VIEW *v)
-{
-	OSErr err;
-	AEEventHandlerUPP	gAEEventHandlerUPPODoc;
-	AEEventHandlerUPP	gAEEventHandlerUPPOApp;
-	AEEventHandlerUPP	gAEEventHandlerUPPPDoc;
-	AEEventHandlerUPP	gAEEventHandlerUPPQApp;
-    Boolean aEvents;
-	
-	fl_open_display();
-	aEvents = AppleEventsInstalled();
-	if (aEvents) {
-		gAEEventHandlerUPPODoc = NewAEEventHandlerUPP(MyHandleODoc);
-		gAEEventHandlerUPPOApp = NewAEEventHandlerUPP(MyHandleOApp);
-		gAEEventHandlerUPPPDoc = NewAEEventHandlerUPP(MyHandlePDoc);
-		gAEEventHandlerUPPQApp = NewAEEventHandlerUPP(myQuitAppleEventHandler);
-		err = AEInstallEventHandler (kCoreEventClass, kAEOpenDocuments, gAEEventHandlerUPPODoc,0, 0);
-		err = AEInstallEventHandler (kCoreEventClass, kAEOpenApplication, gAEEventHandlerUPPOApp,0, 0);
-		err = AEInstallEventHandler (kCoreEventClass, kAEPrintDocuments, gAEEventHandlerUPPPDoc,0, 0);
-		err = AEInstallEventHandler (kCoreEventClass, kAEQuitApplication, gAEEventHandlerUPPQApp,0, 0);
-	}
-view = v;
-}
-
-
-// repairs FLK bug with cmd-Q that freezes if window close is refused 
-OSErr myQuitAppleEventHandler( const AppleEvent *appleEvt, AppleEvent* reply, long refcon )
-{
-if(view) view->dnawin->do_callback();
-Fl::e_state = 0; //against bug where cmd-key modifier stays
-return noErr;
-}
-
-
-void add_apropos(char *progname, void *data)
-{  
-static Fl_Menu_Item item = {"", 0, show_apropos, 0, 0};
-OSStatus err;
-MenuRef mr;
-char title[256];
-Str255 ptitle;
-
-const unsigned char apple_glyph[2] = "\p\024";
-
-Fl_Sys_Menu_Bar *smb = new Fl_Sys_Menu_Bar(0,0,0,0);
-Fl_Menu_Item empty = {0, 0, NULL, 0, 0};
-smb->menu( &empty ); // indispensable pour initialiser fl_sys_menu_bar
-mr = NewMenu(1, apple_glyph);
-InsertMenu(mr, 0);
-sprintf(title, "About %s", progname);
-CtoP(title, ptitle);
-err = InsertMenuItemText(mr, ptitle, 0);
-err = SetMenuItemRefCon(mr, 1, (UInt32) (&item));
-item.user_data_ = data;
-}
-
-
-
-void show_apropos(Fl_Widget *w, void *data)
-{
-static Fl_Window *about = NULL;
-char line[100], *p;
-
-if(about == NULL) {
-	about = new Fl_Window(600, 400, "About seaview");
-	Fl_Browser *br = new Fl_Browser(1, 1, about->w() - 2, about->h() - 2);
-	about->end();
-	br->add("");
-#if TARGET_RT_MAC_MACHO
-	data = (void *)fopen((char *)data, "r");
-	if(data == NULL) return;
-#else
-	get_next_help_line(data, NULL, 0);
-#endif
-	get_next_help_line(data, line, sizeof(line));
-	if(strncmp(line, ">>>", 3) != 0) br->add(line);
-	while(TRUE) {
-		get_next_help_line(data, line, sizeof(line));
-		if(strncmp(line, ">>>", 3) == 0) break;
-		while( (p=strchr(line,'\r')) != NULL) *p = 0;
-		while( (p=strchr(line,'\n')) != NULL) *p = 0;
-		br->add(line);
-		}
-#if TARGET_RT_MAC_MACHO
-	fclose((FILE*)data);
-#else
-	get_next_help_line(data, NULL, 0);
-#endif
-	}
-about->show();
-}
-
-
-
-/***********************************************************************/
-Boolean AppleEventsInstalled ()
-{
-	OSErr err;
-	long  result;
-
-	err = Gestalt (gestaltAppleEventsAttr, &result);
-	return (!err && ((result >> gestaltAppleEventsPresent) & 0x0001));
-											// return TRUE if there is no
-											// error and the proper bit of
-											// result is set
-}
-
-/***********************************************************************/
-pascal OSErr  MyHandleODoc (const AppleEvent *theAppleEvent, AppleEvent* reply, long handlerRefCon)
-{
-	FSRef myFSRef;	
-	AEDescList	docList;
-	OSErr	err;
-	long	itemsInList;
-	Size	actualSize;
-	char masename[300];
-
-	err = AEGetParamDesc (theAppleEvent, keyDirectObject, typeAEList,
-			&docList);
-	if (err) return err;
-
-	err = MyGotRequiredParams (theAppleEvent);
-	if (err) return err;
-
-	err = AECountItems (&docList, &itemsInList);
-
-	err = AEGetNthPtr (&docList, 1, typeFSRef, NULL,
-		NULL,  &myFSRef, sizeof(FSRef), NULL);
-	if (err) return err;
-	
-	err = FSRefMakePath(&myFSRef, (UInt8 *)masename, sizeof(masename));
-	use_initial_file(view, masename);
-	err = AEDisposeDesc (&docList);
-	return noErr;
-}
-
-/***********************************************************************/
-pascal OSErr  MyHandlePDoc (const AppleEvent *theAppleEvent, AppleEvent *reply, long handlerRefCon)
-{
-	AEDescList	docList;
-	OSErr	err;
-	long	itemsInList;
-	
-	// get the direct parameter--a descriptor list--and put it into a docList
-	err = AEGetParamDesc (theAppleEvent, keyDirectObject, typeAEList,
-									&docList);
-	if (err)
-			return err;
-
-	// check for missing parameters
-	err = MyGotRequiredParams (theAppleEvent);
-	if (err)
-			return err;
-
-	// count the number of descriptor records in the list
-	err = AECountItems (&docList, &itemsInList);
-
-	// now get each descriptor record from the list, coerce the returned
-	// data to an FSSpec record, and open the associated file
-	
-	return noErr;
-
-}
-
-/***********************************************************************/
-pascal OSErr  MyHandleOApp (const AppleEvent *theAppleEvent, AppleEvent *reply, long handlerRefCon)
-{
-	// Ouverture de l'appli
-	return noErr;
-}
-
-/***********************************************************************/
-pascal OSErr  MyHandleQApp (const AppleEvent *theAppleEvent, AppleEvent *reply, long handlerRefCon)
-{
-	// Quitte l'appli
-//	quitAEReceived = 1;
-	ExitToShell();
-	return noErr;
-}
-
-/***********************************************************************/
-OSErr MyGotRequiredParams (const AppleEvent *theAppleEvent)
-{
-	DescType	returnedType;
-	Size	actualSize;
-	OSErr	err;
-
-	err = AEGetAttributePtr (theAppleEvent, keyMissedKeywordAttr,
-									typeWildCard, &returnedType, nil, 0,
-									&actualSize);
-	if (err == errAEDescNotFound)	// you got all the required parameters
-			return noErr;
-	else if (!err)				// you missed a required parameter
-			return errAEEventNotHandled;
-	else						// the call to AEGetAttributePtr failed
-			return err;
-}
-
-
-void MG_apple_inits(void)
-{
-#ifdef __APPLE_QD__
-Fl::set_font(FL_COURIER," Courier");
-Fl::set_font(FL_COURIER_BOLD,"BCourier");
-#else
-Fl::set_font(FL_COURIER,"Courier");
-Fl::set_font(FL_COURIER_BOLD,"Courier Bold");
-#endif
-}
-
-#endif
-
-
-
-#ifdef WIN32
-
-
-void add_to_path(char *dir)
-/* ajoute a la variable PATH la directory dir
-teste si deja dedans ou si vide */
-{
-char *buffer;
-int l;
-
-if(dir == NULL || strlen(dir) == 0) return;
-buffer = (char *)malloc(10000);
-l = GetEnvironmentVariable("PATH", buffer, 10000);
-if(l == 0) *buffer = 0;
-//fprintf(OUT,"l=%d PATH=%s\n",l,buffer);fflush(OUT);
-if(strstr(buffer, dir) != NULL) return;
-if(*buffer != 0) strcat(buffer, ";");
-strcat(buffer, dir);
-SetEnvironmentVariable("PATH", buffer);
-
-//GetEnvironmentVariable("PATH", buffer, sizeof(buffer));
-//fprintf(OUT,"PATH=%s\n",buffer);fflush(OUT);
-
-free(buffer);
-}
-
-
-int mysystem(const char *command)
-/*
-command contains "prog.exe args"
-prog is searched in dir where calling program was launched, current dir,
-windows system dir, windows dir, dirs in PATH.
-*/
-{
-static char buf[100];
-STARTUPINFO info;
-PROCESS_INFORMATION pi;
-int retval;
-GetStartupInfo(&info);
-//fprintf(OUT,"retour GetStartupInfo \n");fflush(OUT);
-retval = CreateProcess(NULL, (char *)command,0,0,0,0,0,_getcwd(buf,sizeof(buf)),&info,&pi);
-//fprintf(OUT,"retour CreateProcess bool retval=%d\n",retval);fflush(OUT);
-retval = WaitForSingleObject(pi.hProcess, INFINITE);
-//fprintf(OUT,"retour WaitForSingleObject retval=%d WAIT_FAILED=%d\n",retval,WAIT_FAILED);fflush(OUT);
-return (retval == WAIT_FAILED);
-}
-
-char *get_prog_dir(void)
-/* returns path of dir where calling program was launched */
-{
-static char dir[100];
-char *line, *p;
-int l;
-
-line = GetCommandLine();
-//fprintf(OUT,"retour GetCommandLine line=%s\n",line);fflush(OUT);
-/* extract 1st word of line or first group delimited by " " */
-if(*line == '"') { line++; p = strchr(line, '"'); }
-else
-	p = strchr(line, ' '); 
-if(p == NULL) p = line + strlen(line);
-l = p - line;
-while( l > 0 && line[l - 1] != '\\' ) l--;
-if(l <= 0) return NULL;
-memcpy(dir, line, l); dir[l] = 0;
-return dir;
-}
-
-
-void my_bell(void)
-{
-Beep(0,0);
-}
-
-char *MG_win32_file_chooser(const char* message, // title of dialog window
-        const char* pattern, // optional "mase format\0*.mase\0MSF format\0*.msf\0"
-        const char* fname, // default file name
-        const char* defext, // default filename extension or NULL
-        bool save, // TRUE iff output file selection
-        int *pfilterindex) // (inout) pointer to index (from 1) in series of file types in pattern
- {
-     static char filenamebuffer[MAX_PATH];
-     static OPENFILENAME wreq;
-     bool retval;
-     
-     memset(&wreq, 0, sizeof(wreq));
-     wreq.lStructSize = sizeof(OPENFILENAME); 
-     wreq.lpstrFilter = pattern;
-     if(pattern == NULL) wreq.nFilterIndex = 0;
-     else if(pfilterindex != NULL) wreq.nFilterIndex = *pfilterindex;
-     else wreq.nFilterIndex = 1;
-     if(defext != NULL) wreq.lpstrDefExt = defext;
-     wreq.lpstrFile = filenamebuffer;
-     wreq.nMaxFile = MAX_PATH;
-     wreq.lpstrTitle = message ? message : "Select the filename";
-     if(fname) {
-       memset(filenamebuffer, 0, MAX_PATH);
-       if((filenamebuffer[1] == ':') && (_getdrive() + 'A' - 1 == filenamebuffer[0]))
-   strncpy(filenamebuffer, fname + 2, MAX_PATH);
-       else
-   strncpy(filenamebuffer, fname, MAX_PATH);
-     }
-     wreq.Flags = OFN_NOCHANGEDIR | OFN_HIDEREADONLY;
-     retval = (save ? GetSaveFileName(&wreq) : GetOpenFileName(&wreq));
-     if(save && (pfilterindex != NULL) ) *pfilterindex = wreq.nFilterIndex;
-     return retval == 0 ? NULL : wreq.lpstrFile;
- }
- 
-
-/*
-char **split_args(char *all, int *pargc)
-{
-char *p, *q, **argv;
-int l, argc = 0;
-
-// compter les arguments
-p = all;
-while(*p != 0) {
-	argc++;
-	if(*p == '"') p = strchr(p+1, '"');
-	else p = strchr(p, ' ');
-	if(p == NULL) break;
-	p++;
-	while(*p == ' ') p++;
-	}
-argv = (char **)malloc(argc * sizeof(char *));
-*pargc = argc;
-// separer les arguments, enlever les "" encadrantes si presentes
-p = all; argc = 0;
-while(*p != 0) {
-	if(*p == '"') { p++; q = strchr(p, '"'); }
-	else q = strchr(p, ' ');
-	if(q == NULL) q = p + strlen(p);
-	l = q - p; 
-	argv[argc] = (char *)malloc(l + 1);
-	memcpy(argv[argc], p, l); argv[argc][l] = 0;
-	if(*q == 0) break;
-	p = q + 1;
-	while(*p == ' ') p++;
-	argc++;
-	}
-return argv;
-}
-*/
-
-#endif

Deleted: trunk/packages/seaview/trunk/matpt.h
===================================================================
--- trunk/packages/seaview/trunk/matpt.h	2007-07-20 10:28:45 UTC (rev 359)
+++ trunk/packages/seaview/trunk/matpt.h	2007-07-21 02:32:37 UTC (rev 360)
@@ -1,41 +0,0 @@
-#ifndef FD_matpt_h_
-#define FD_matpt_h_
-#include "seaview.h"
-
-typedef struct {
-	Fl_Window *form;
-	Fl_Widget *mat_panel, *ident_type_box, *win_size_type_box, 
-		*compute_butt, *x_slider, *y_slider, *region_box, 
-		*region_slider, *align_button, *choice_ref_seq,
-		*interrupt_butt;
-	int phys_width;
-	int view_x, view_y;
-	int view_size;
-	int longmax;
-	int seqlong1, seqlong2;
-	int maxseqlength;
-	char *seq1, *seq2;
-	char *seqname1, *seqname2;
-	char *plotname;
-	int margin;
-	int hitx, hity;
-	int region_size;
-	int fenetre, identites;
-	char regionboxtext[300];
-	char *title;
-	int totsegments;
-	int need_compute;
-	int modif_but_not_saved;
-	double factor, kx, ky;
-	int interrupted;
-	int rect_only;
-	gap_site *gap_sites;
-	int tot_gap_sites;
-	void *seaview_data;
-} FD_matpt;
-
-typedef struct {
-	int x, y, w, h;
-	} rectangle;
-
-#endif /* FD_matpt_h_ */

Deleted: trunk/packages/seaview/trunk/nexus.cxx
===================================================================
--- trunk/packages/seaview/trunk/nexus.cxx	2007-07-20 10:28:45 UTC (rev 359)
+++ trunk/packages/seaview/trunk/nexus.cxx	2007-07-21 02:32:37 UTC (rev 360)
@@ -1,1340 +0,0 @@
-#include "seaview.h"
-#include <ctype.h>
-#include <time.h>
-
-
-typedef struct _linked_strings {
-	void *data;
-	char *name;
-	struct _linked_strings *next;
-	} linked_strings;
-
-
-/* prototypes of local functions */
-int read_nexus_align(char *fname, char ***pseqs, char ***pseqnames, 
-	char ***pcomments, char **pheader, char **err_message, 
-	list_regions **charsets, int *pnum_species_sets,
-	int ***list_species_sets, char ***name_species_sets,
-	int *ptot_comment_lines, char ***comment_name, char ***comment_line,
-	int **comment_length, int *protein);
-int read_nexus_file(FILE *in, char ***pseqs, int *nchars, int *protein,
-	char ***taxnames, char ***notes, char **header,
-	int *pnum_species_sets, int ***list_species_sets, 
-	char ***name_species_sets,
-	list_regions **charsets,
-	int *tot_comment_lines, char ***comment_name, char ***comment_line);
-int save_nexus_file(const char *fname, int ntaxa, int protein,
-	char **seqs, char **taxnames, char **notes, char *header,
-	int num_species_sets, int **list_species_sets, 
-	char **name_species_sets,
-	list_regions *charsets,
-	int tot_comment_lines, char **comment_name, char **comment_line,
-	region *region_used, int *sel_seqs, int tot_sel_seqs, int *eachlength);
-int nextbracket(FILE *in);
-char *next_token(FILE *in);
-FILE *is_nexus_file(char *nom);
-char *majuscules(char *p);
-char *next_block_name(FILE *in);
-int process_block_taxa(FILE *in, char ***taxnames);
-int is_block_end(char *p);
-void skip_block(FILE *in);
-void skip_command(FILE *in);
-int process_taxa_dim(FILE *in);
-int process_chars_dim(FILE *in, int *pntaxa);
-int process_chars_format(FILE *in, int *protein, int *interleave,
-	int *matchchar, int *missing);
-char **process_taxa_taxlabels(FILE *in, int ntax);
-char **process_block_characters(FILE *in, int *pntaxa, char ***taxnames,
-	int *nchars, int *protein);
-char **process_chars_m_interleave(FILE *in, int nsites, int gap, int ntaxa,
-	char **taxnames, int define_taxlabels, int matchchar, int missing,
-	int protein);
-char **process_chars_matrix(FILE *in, int nsites, int gap, int ntaxa, 
-	char **taxnames, int define_taxlabels, int matchchar, int missing,
-	int protein);
-char **process_block_data(FILE *in, int *pntaxa, char ***ptaxnames, int
-	*nsites, int *protein);
-char **process_block_notes(FILE *in, int ntaxa, char **taxnames);
-int find_by_name_num(char *token, int nelt, char **elts);
-char *build_list(FILE *in, int nelt, char **elts);
-list_segments *build_list_pairs(FILE *in, int maxi);
-void process_notes_text(FILE *in, int ntaxa, char **taxnames, char **notes);
-char *process_sets_taxset(FILE *in, int ntaxa, char **taxnames, char
-	**setname);
-list_segments *process_sets_charset(FILE *in, char **setname, int max_chars);
-void process_block_sets(FILE *in, int ntaxa, char **taxnames, int nchars,
-	linked_strings **taxsets, list_regions **charsets);
-linked_strings *process_block_seaview(FILE *in, char **header);
-char *process_seaview_text(FILE *in, char **name);
-char **process_block_unaligned(FILE *in, int *ntaxa, char ***taxnames, int
-	*nchars, int *protein);
-int process_unal_dim(FILE *in);
-int process_unal_format(FILE *in);
-char **process_unal_matrix(FILE *in, int ntaxa, char **taxnames);
-char *out_with_apostrophe(char *p);
-int linked_to_series(linked_strings *linked, char ***names, char ***lines);
-void out_table_by_series(FILE *out, int *table, int dim);
-
-
-/* used functions */
-int output_next_res_from_region(char *seq, int lenseq, 
-	list_segments **segment, int *current, FILE *out, int total, 
-	int use_dots);
-
-
-
-int nextbracket(FILE *in)
-{
-int pos;
-pos = fgetc(in);
-while(pos != ']') {
-	if(pos == EOF) return EOF;
-	if(pos == '[') pos = nextbracket(in);
-	pos = fgetc(in);
-	}
-return pos;
-}
-
-
-#define PUNCTUATION "(){}/\\,;:=*\"+-<>"
-#define APOSTROPHE '\''
-
-char *next_token(FILE *in)
-{
-static char *big_token = NULL, *fin_token;
-int c, punct;
-char *p, *q;
-const int slice = 500;
-static int l_token;
-
-if(big_token == NULL) {
-	l_token = slice;
-	big_token = (char *)malloc(l_token);
-	if(big_token == NULL) return NULL;
-	fin_token = big_token + l_token;
-	}
-
-do	{
-	c = fgetc(in);
-	if(c == '[' ) {
-		c = nextbracket(in);
-		c = fgetc(in);;
-		}
-	if(c == EOF) return NULL;
-	}
-while(isspace(c));
-if(strchr(PUNCTUATION, c) != NULL) {
-	big_token[0] = c; big_token[1] = 0;
-	return big_token;
-	}
-
-p = big_token;
-if(c == APOSTROPHE) {
-	while (1)	{
-		c = fgetc(in);
-		if(c == EOF) break;
-		if(c == APOSTROPHE) {
-			punct = fgetc(in);
-			if(punct != APOSTROPHE) {
-				ungetc(punct, in);
-				break;
-				}
-			}
-		*p = c; p++;
-		if(p >= fin_token) {
-			l_token += slice;
-			q = (char *)realloc(big_token, l_token);
-			if(q == NULL) return NULL;
-			p = q + (p - big_token);
-			big_token = q;
-			fin_token = big_token + l_token;
-			}
-		}
-	*p = 0;
-	return big_token;
-	}
-do	{
-	if(c == '[' ) {
-		c = nextbracket(in);
-		}
-	else 	{ 
-		*p = c; p++; 
-		if(p >= fin_token) {
-			l_token += slice;
-			q = (char *)realloc(big_token, l_token);
-			if(q == NULL) return NULL;
-			p = q + (p - big_token);
-			big_token = q;
-			fin_token = big_token + l_token;
-			}
-		}
-	c = fgetc(in);
-	punct = FALSE;
-	if(c == EOF) break;
-	punct = (strchr(PUNCTUATION, c) != NULL);
-	}
-while( ! (isspace(c) || punct) );
-*p = 0;
-if(punct) ungetc(c, in);
-return big_token;
-}
-
-
-FILE *is_nexus_file(char *fname) /* return !0 iff seems a NEXUS file */
-{
-FILE *in;
-char *p;
-
-in = fopen(fname, "r");
-if(in == NULL) return NULL;
-p = majuscules(next_token(in));
-if(p == NULL || strcmp(p, "#NEXUS") != 0 ) { fclose(in); return NULL; }
-else return in;
-}
-
-
-char *next_block_name(FILE *in)
-{
-char *p;
-static char name[81];
-
-do	{
-	p = majuscules(next_token(in));
-	if(p == NULL) return NULL;
-	}
-while(strcmp(p, "BEGIN") != 0);
-p =  majuscules(next_token(in));
-if(p == NULL) return NULL;
-strcpy(name, p);
-next_token(in); /* skip the ; */
-return name;
-}
-
-
-int is_block_end(char *p)
-{
-majuscules(p);
-return p == NULL || strcmp(p, "END") == 0 || strcmp(p, "ENDBLOCK") == 0;
-}
-
-
-void skip_command(FILE *in)
-{
-char *p;
-
-do	p = next_token(in);
-while(p != NULL && *p != ';');
-}
-
-
-void skip_block(FILE *in)
-{
-char *p;
-
-do	p = next_token(in);
-while (!is_block_end(p));
-}
-
-
-int process_taxa_dim(FILE *in)
-{
-char *p;
-int ntax;
-
-p = majuscules(next_token(in));
-if(p == NULL) return 0;
-if(strcmp(p, "NTAX") == 0) {
-	next_token(in);
-	p = next_token(in);
-	if(p == NULL) return 0;
-	sscanf(p, "%d", &ntax);
-	}
-skip_command(in);
-return ntax;
-}
-
-
-int process_chars_dim(FILE *in, int *pntaxa)
-{
-char *p;
-int sites = 0;
-
-do	{
-	p = majuscules(next_token(in));
-	if(p == NULL) break;
-	if(strcmp(p, "NCHAR") == 0) {
-		next_token(in); /* skip = */
-		p = next_token(in);
-		if(p == NULL) break;
-		sscanf(p, "%d", &sites);
-		}
-	else if(strcmp(p, "NEWTAXA") == 0) ;
-	else if(strcmp(p, "NTAX") == 0) {
-		next_token(in); /* skip = */
-		p = next_token(in);
-		if(p == NULL) break;
-		sscanf(p, "%d", pntaxa);
-		}
-	}
-while(*p != ';');
-return sites;
-}
-
-
-int process_chars_format(FILE *in, int *protein, int *interleave,
-	int *matchchar, int *missing)
-{
-char *p;
-int gap;
-*interleave = FALSE;
-
-do	{
-	p = majuscules(next_token(in));
-	if(p == NULL) break;
-	if(strcmp(p, "DATATYPE") == 0) {
-		next_token(in); /* skip = */
-		p = majuscules(next_token(in));
-		if(p == NULL) break;
-		*protein = strcmp(p, "PROTEIN") == 0;
-		}
-	else if(strcmp(p, "GAP") == 0) {
-		next_token(in); /* skip = */
-		do gap = fgetc(in);
-		while(isspace(gap));
-		if(gap == EOF) break;
-		}
-	else if(strcmp(p, "MATCHCHAR") == 0) {
-		next_token(in); /* skip = */
-		p = next_token(in);
-		if(p == NULL) break;
-		*matchchar = *p;
-		}
-	else if(strcmp(p, "MISSING") == 0) {
-		next_token(in); /* skip = */
-		do *missing = fgetc(in);
-		while(isspace(*missing));
-		if(*missing == EOF) break;
-		}
-	else if(strcmp(p, "INTERLEAVE") == 0) {
-		*interleave = TRUE;
-		}
-	}
-while(*p != ';');
-return gap;
-}
-
-
-char **process_taxa_taxlabels(FILE *in, int ntax)
-{
-char *p, **names;
-int i;
-
-names = (char **)malloc(ntax * sizeof(char *));
-if(names == NULL) ntax  = 0;
-for(i = 0; i < ntax; i++) names[i] = NULL;
-for(i = 0; i < ntax; i++) {
-	p = next_token(in);
-	if(p == NULL) break;
-	if(*p == ';') break;
-	names[i] = (char *)malloc(strlen(p)+1);
-	if(names[i] == NULL) break;
-	strcpy(names[i], p);
-	}
-if(p != NULL && *p != ';') skip_command(in);
-return names;
-}
-
-
-int process_block_taxa(FILE *in, char ***taxnames)
-{
-char *p;
-int ntax = 0;
-
-while(TRUE) {
-	p = next_token(in);
-	if(is_block_end(p)) break;
-	if(strcmp(p, "DIMENSIONS") == 0) ntax = process_taxa_dim(in);
-	else if(strcmp(p, "TAXLABELS") == 0) 
-		*taxnames = process_taxa_taxlabels(in, ntax);
-	else skip_command(in);
-	}
-return ntax;
-}
-
-
-int find_by_name_num(char *token, int nelt, char **elts)
-{
-int num;
-
-for(num = 0; num < nelt; num++) {
-	if(strcmp(token, elts[num]) == 0) return num;
-	}
-if(num >= nelt) {num = -1; sscanf(token, "%d", &num); num--; }
-if(num < 0 || num >= nelt) num = -1;
-return num;
-}
-
-
-char *build_list(FILE *in, int nelt, char **elts)
-{
-char *p, *list;
-int num, previous = -1, need_range = FALSE, i;
-
-list = (char *)malloc(nelt + 1);
-if(list == NULL) { skip_command(in); return NULL; }
-memset(list, '0', nelt); list[nelt] = 0;
-while(TRUE) {
-	p = next_token(in);
-	if(p == NULL || *p == ';') break;
-	if(strcmp(p, "-") == 0) {
-		if(previous >= 0) need_range = TRUE;
-		continue;
-		}
-	if(strcmp(p, ".") == 0) num = nelt - 1;
-	else num = find_by_name_num(p, nelt, elts);
-	if(num == -1) continue;
-	list[num] = '1';
-	if(need_range) {
-		for(i = previous + 1; i < num; i++) list[i] = '1';
-		need_range = FALSE;
-		}
-	previous = num;
-	}
-return list;
-}
-
-
-list_segments *build_list_pairs(FILE *in, int maxi)
-{
-char *p;
-list_segments *list = NULL, *next, *elt;
-int num, previous = -1, need_range = FALSE, debut, fin;
-
-while(TRUE) {
-	p = next_token(in);
-	if(p == NULL || *p == ';') break;
-	if(strcmp(p, "-") == 0) {
-		if(previous >= 0) need_range = TRUE;
-		continue;
-		}
-	if(strcmp(p, ".") == 0) num = maxi;
-	else if(strcmp(p, "\\") == 0) { /* process syntax: from-to\step */
-		p = next_token(in);
-		if(p == NULL) return NULL;
-		num = -1; sscanf(p, "%d", &num); /* num has the step value */
-		if(num == -1 || list == NULL) { skip_command(in); return NULL; }
-		debut = next->debut; fin = next->fin;
-		next->fin = debut;
-		debut += num;
-		while(debut <= fin) {
-			elt = (list_segments *)malloc(sizeof(list_segments));
-			if(elt == NULL) { skip_command(in); return NULL; }
-			elt->debut = elt->fin = debut;
-			elt->next = NULL;
-			next->next = elt;
-			next = elt;
-			debut += num;
-			}
-		continue;
-		}
-	else {num = -1; sscanf(p, "%d", &num); }
-	if(num == -1) { skip_command(in); return NULL; }
-	if(need_range) {
-		next->fin = num;
-		need_range = FALSE;
-		}
-	else	{
-		elt = (list_segments *)malloc(sizeof(list_segments));
-		if(elt == NULL) { skip_command(in); return NULL; }
-		elt->debut = elt->fin = num;
-		elt->next = NULL;
-		if(list == NULL) list = elt;
-		else	next->next = elt;
-		next = elt;
-		}
-	previous = num;
-	}
-return list;
-}
-
-
-char **process_chars_m_interleave(FILE *in, int nsites, int gap, int ntaxa,
-	char **taxnames, int define_taxlabels, int matchchar, int missing,
-	int protein)
-{
-int num, c, newtaxa = 0;
-char *p, **seq;
-
-seq = (char **)malloc(ntaxa * sizeof(char *));
-if(seq == NULL) { skip_command(in); return NULL;}
-for(num = 0; num < ntaxa; num++) seq[num] = NULL;
-while(TRUE) {
-	p = next_token(in);
-	if(p == NULL || *p == ';') break;
-	if(define_taxlabels) {
-		if(newtaxa >= ntaxa) {
-			num = find_by_name_num(p, ntaxa, taxnames);
-			}
-		else	{
-			taxnames[newtaxa] = (char *)malloc(strlen(p) + 1);
-			if(taxnames[newtaxa] == NULL) num = -1;
-			else 	{
-				strcpy(taxnames[newtaxa], p);
-				num = newtaxa++;
-				}
-			}
-		}
-	else num = find_by_name_num(p, ntaxa, taxnames);
-	if(num == -1) { /* bad format */
-		skip_command(in); free(seq);
-		return NULL;
-		}
-	if(seq[num] == NULL) {
-		seq[num] = (char *)malloc(nsites + 1);
-		if(seq[num] == NULL) { 
-			skip_command(in); free(seq); return NULL;
-			}
-		seq[num][0] = 0;
-		}
-	p = seq[num]; p += strlen(p);
-	while(TRUE) {
-		c = fgetc(in);
-		if(c == ';' || c == '\n' || c == '\r' || c == EOF) break;
-		if(isspace(c)) continue;
-		if(c == gap) c = '-';
-		if(p - seq[num] < nsites) *(p++) = c;
-		}
-	*p = 0;
-	}
-if(matchchar != 0) {
-	for(num = 1; num < ntaxa; num++) {
-		p = seq[num] - 1;
-		while(*(++p) != 0) if(*p == matchchar) *p = seq[0][p - seq[num]];
-		}
-	}
-/*
-if(missing != 0) {
-	char miss_char = (protein ? 'X' : 'N');
-	for(num = 0; num < ntaxa; num++) {
-		p = seq[num] - 1;
-		while(*(++p) != 0) if(*p == missing) *p = miss_char;
-		}
-	}
-*/
-return seq;
-}
-
-
-char **process_chars_matrix(FILE *in, int nsites, int gap, int ntaxa, 
-	char **taxnames, int define_taxlabels, int matchchar, int missing,
-	int protein)
-{
-int num, c, newtaxa = 0, offset;
-char *p, **seq;
-
-seq = (char **)calloc(ntaxa , sizeof(char *));
-if(seq == NULL) { skip_command(in); return NULL;}
-for(num = 0; num < ntaxa; num++) seq[num] = NULL;
-while(TRUE) {
-	p = next_token(in);
-	if(p == NULL || *p == ';') break;
-	if(define_taxlabels) {
-		if(newtaxa >= ntaxa) num = -1;
-		else	{
-			taxnames[newtaxa] = (char *)malloc(strlen(p) + 1);
-			if(taxnames[newtaxa] == NULL) num = -1;
-			else	{
-				strcpy(taxnames[newtaxa], p);
-				num = newtaxa++;
-				}
-			}
-		}
-	else 	{
-		offset = 0;
-		do 	{/* handle repetitions of names */
-			num = find_by_name_num(p, ntaxa - offset, taxnames + offset);
-			if(num != -1) num += offset;			
-			offset = num + 1;
-			}
-		while(num != -1 && seq[num] != NULL);
-		}
-	if(num == -1) { /* bad format */
-		skip_command(in);
-		free(seq);
-		return NULL;
-		}
-	seq[num] = (char *)malloc(nsites + 1);
-	if(seq[num] == NULL)  { skip_command(in); free(seq); return NULL;}
-	p = seq[num];
-	do	{
-		c = fgetc(in);
-		if(c == ';' || c == EOF) break;
-		if(c == '[')  {
-			c = nextbracket(in);
-			if(c == EOF) break;
-			continue;
-			}
-		if(isspace(c)) continue;
-		if(c == gap) c = '-';
-		*(p++) = c;
-		}
-	while(p < seq[num] + nsites);
-	*p = 0;
-	if(c == ';' || c == EOF) break;
-	}
-for(num = 0; num < ntaxa; num++) {
-	if(seq[num] == NULL) { 
-		seq[num] = (char *)malloc(1);
-		if(seq[num] == NULL)  { free(seq); return NULL;}
-		seq[num][0] = 0;
-		}
-	}
-if(matchchar != 0) {
-	for(num = 1; num < ntaxa; num++) {
-		p = seq[num] - 1;
-		while(*(++p) != 0) if(*p == matchchar) *p = seq[0][p - seq[num]];
-		}
-	}
-/*
-if(missing != 0) {
-	char miss_char = (protein ? 'X' : 'N');
-	for(num = 0; num < ntaxa; num++) {
-		p = seq[num] - 1;
-		while(*(++p) != 0) if(*p == missing) *p = miss_char;
-		}
-	}
-*/
-return seq;
-}
-
-
-char **process_block_data(FILE *in, int *pntaxa, char ***ptaxnames, 
-		int *nsites, int *protein)
-{
-char **seqs, **taxnames, *p;
-int gap, interleave = FALSE, matchchar = 0, missing = 0;
-
-seqs = NULL; *nsites = 0; taxnames = NULL; *pntaxa = 0;
-while(TRUE) {
-	p = next_token(in);
-	if(is_block_end(p)) break;
-	if(strcmp(p, "DIMENSIONS") == 0) { 
-		*nsites = process_chars_dim(in, pntaxa);
-		if(*pntaxa > 0) taxnames = 
-			(char **)malloc(*pntaxa * sizeof(char *));
-		if(*pntaxa > 0 && taxnames == NULL) {
-			*pntaxa = 0; seqs = NULL;
-			skip_block(in);
-			break;
-			}
-		}
-	else if(strcmp(p, "FORMAT") == 0) 
-		gap = process_chars_format(in, protein, &interleave, &matchchar,
-			&missing);
-	else if(strcmp(p, "MATRIX") == 0) {
-		if(interleave)
-			seqs = process_chars_m_interleave(in, *nsites, gap,
-				*pntaxa, taxnames, TRUE, matchchar, missing, *protein);
-		else
-			seqs = process_chars_matrix(in, *nsites, gap,
-				*pntaxa, taxnames, TRUE, matchchar, missing, *protein);
-		}
-	else skip_command(in);
-	}
-*ptaxnames = taxnames;
-return seqs;
-}
-
-
-char **process_block_characters(FILE *in, int *pntaxa, char ***taxnames,
-int *nsites, int *protein)
-{
-char *p, **seqs;
-int interleave, gap, matchchar = 0, missing = 0;
-
-seqs = NULL; *nsites = 0;
-while(TRUE) {
-	p = next_token(in);
-	if(is_block_end(p)) break;
-	if(strcmp(p, "DIMENSIONS") == 0) 
-		*nsites = process_chars_dim(in, pntaxa);
-	else if(strcmp(p, "FORMAT") == 0) 
-		gap = process_chars_format(in, protein, &interleave, &matchchar,
-			&missing);
-	else if(strcmp(p, "TAXLABELS") == 0) 
-		*taxnames = process_taxa_taxlabels(in, *pntaxa);
-	else if(strcmp(p, "MATRIX") == 0) {
-		if(interleave)
-			seqs = process_chars_m_interleave(in, *nsites, gap,
-				*pntaxa, *taxnames, FALSE, matchchar, missing, *protein);
-		else
-			seqs = process_chars_matrix(in, *nsites, gap,
-				*pntaxa, *taxnames, FALSE, matchchar, missing, *protein);
-		}
-	else skip_command(in);
-	}
-return seqs;
-}
-
-
-char **process_block_notes(FILE *in, int ntaxa, char **taxnames)
-{
-char *p, **notes;
-int num;
-
-/* notes[0 - ntaxa[ comments des seqs indiv */
-notes = (char **)malloc(ntaxa * sizeof(char *));
-if(notes == NULL) {skip_block(in); return NULL; }
-for(num = 0; num < ntaxa; num++) notes[num] = NULL;
-while(TRUE) {
-	p = next_token(in);
-	if(is_block_end(p)) break;
-	if(strcmp(p, "TEXT") == 0) 
-		process_notes_text(in, ntaxa, taxnames, notes);
-	else skip_command(in);
-	}
-return notes;
-}
-
-
-char *process_sets_taxset(FILE *in, int ntaxa, char **taxnames, char **setname)
-{
-char *p, *set = NULL;
-
-p = next_token(in);
-if(p != NULL) *setname = (char *)malloc(strlen(p) + 1);
-if( p == NULL || *setname == NULL) { skip_command(in); return NULL; }
-strcpy(*setname, p);
-next_token(in); /* skip = */
-set = build_list(in, ntaxa, taxnames);
-return set;
-}
-
-
-list_segments *process_sets_charset(FILE *in, char **setname, int max_chars)
-{
-char *p;
-
-p = next_token(in);
-if(p != NULL) *setname = (char *)malloc(strlen(p) + 1);
-if( p == NULL || *setname == NULL) { skip_command(in); return NULL; }
-strcpy(*setname, p);
-next_token(in); /* skip = */
-return build_list_pairs(in, max_chars);
-}
-
-
-void process_block_sets(FILE *in, int ntaxa, char **taxnames, int max_chars,
-		linked_strings **taxsets, list_regions **charsets)
-{
-char *p, *set, *setname;
-list_segments *limits;
-linked_strings *chain_tax = *taxsets, *elt;
-list_regions *elt_reg, *chain_char = *charsets, *end_chain;
-region *maregion;
-
-end_chain = chain_char;
-if(end_chain != NULL) while(end_chain->next != NULL) end_chain =
-end_chain->next;
-while(TRUE) {
-	p = next_token(in);
-	if(is_block_end(p)) break;
-	if(strcmp(p, "TAXSET") == 0 && ( set = process_sets_taxset(in, 
-			ntaxa, taxnames, &setname)) != NULL ) {
-		elt = (linked_strings *)malloc(sizeof(linked_strings));
-		if(elt != NULL) {
-			elt->data = (void *)set;
-			elt->name = setname;
-			elt->next = chain_tax;
-			chain_tax = elt;
-			}
-		}
-	else if(strcmp(p, "CHARSET") == 0 && (limits = 
-		   process_sets_charset(in, &setname, max_chars)) != NULL) {
-		maregion = (region *)malloc(sizeof(region));
-		elt_reg = (list_regions *)malloc(sizeof(list_regions));
-		if(maregion != NULL && elt_reg != NULL) {
-			maregion->list = limits;
-			maregion->name = setname;
-			elt_reg->element = maregion;
-			elt_reg->next = NULL;
-			if(end_chain != NULL) end_chain->next = elt_reg;
-			else chain_char = elt_reg;
-			end_chain = elt_reg;
-			}
-		}
-	else skip_command(in);
-	}
-*taxsets = chain_tax;
-*charsets = chain_char;
-return;
-}
-
-
-void process_notes_text(FILE *in, int ntaxa, char **taxnames, char **notes)
-{
-char *p, *q;
-int num, count;
-
-num = -1;
-do	{
-	p = majuscules(next_token(in));
-	if(p == NULL) break;
-	if(strcmp(p, "TAXON") == 0) {
-		next_token(in); /* skip = */
-		p = next_token(in);
-		if(p == NULL) break;
-		num = find_by_name_num(p, ntaxa, taxnames);
-		if(num == -1) { skip_command(in); break; }
-		}
-	else if(strcmp(p, "TEXT") == 0) {
-		if(num == -1) { skip_command(in); break; }
-		next_token(in); /* skip = */
-		p = next_token(in);
-		if(p == NULL) break;
-		q = p; count = 0;
-		while( (q = strchr(q, '\n')) != NULL) { count++; q++; }
-		notes[num] = (char *)malloc(strlen(p) + 5 + count);
-		if(notes[num] != NULL) {
-			q = notes[num];
-			*q = ';'; q++;
-			while(*p != 0) {
-				*q = *p;
-				if(*p == '\n' && *(p+1) != 0) *(++q) = ';';
-				q++; p++;
-				}
-			*q = 0;
-			}
-		}
-	}
-while(*p != ';');
-}
-
-
-linked_strings *process_block_seaview(FILE *in, char **header)
-{
-char *p, *q, *name, *text;
-int count;
-
-linked_strings *chain = NULL, *elt;
-while(TRUE) {
-	p = next_token(in);
-	if(is_block_end(p)) break;
-	if(strcmp(p, "TEXT") == 0 ) {
-		text = process_seaview_text(in, &name);
-		if(text == NULL) continue;
-		if(name == NULL) {
-			/* text contains a header: add ;; at start of lines */
-			q = text; count = 0;
-			while( (q = strchr(q, '\n')) != NULL) { count++; q++; }
-			*header = (char *)malloc(strlen(text) + 5 + 2 * count);
-			if(*header != NULL) {
-				q = *header; p = text;
-				*q = ';'; q++; *q = ';'; q++;
-				while(*p != 0) {
-					*q = *p;
-					if(*p == '\n' && *(p+1) != 0) {
-						*(++q) = ';'; *(++q) = ';';
-						}
-					q++; p++;
-					}
-				*q = 0;
-				}
-			}
-		else	{ /* text contains a footer */
-			/* remove line breaks from footer */
-			p = text;
-			q = (char *)malloc(strlen(p) + 1);
-			elt = (linked_strings *)malloc(sizeof(linked_strings));
-			if(q != NULL && elt != NULL) {
-				elt->data = (void *)q;
-				do 	{
-					if(*p != '\n' && *p != '\r') *(q++)= *p;
-					}
-				while (*(p++) != 0);
-				elt->name = name;
-				elt->next = chain;
-				chain = elt;
-				}
-			}
-		free(text);
-		}
-	else skip_command(in);
-	}
-return chain;
-}
-
-
-char *process_seaview_text(FILE *in, char **name)
-{
-char *p, *text = NULL;
-
-*name = NULL;
-do	{
-	p = majuscules(next_token(in));
-	if(p == NULL) break;
-	if(strcmp(p, "FOOTER") == 0) {
-		next_token(in); /* skip = */
-		p = next_token(in);
-		if(p == NULL) break;
-		*name = (char *)malloc(strlen(p) + 1);
-		if(*name == NULL) { skip_command(in); return NULL; }
-		strcpy(*name, p);
-		}
-	else if(strcmp(p, "HEADER") == 0) {
-		*name = NULL;
-		}
-	else if(strcmp(p, "TEXT") == 0) {
-		next_token(in); /* skip = */
-		p = next_token(in);
-		if(p == NULL) break;
-		text = (char *)malloc(strlen(p) + 1);
-		if(text != NULL) strcpy(text, p);
-		}
-	}
-while(*p != ';');
-return text;
-}
-
-
-char **process_block_unaligned(FILE *in, int *ntaxa, char ***taxnames, int
-*nsites, int *protein)
-{
-char *p, **seqs = NULL;
-int i, l, max_l;
-
-*protein = FALSE;
-while(TRUE) {
-	p = next_token(in);
-	if(is_block_end(p)) break;
-	if(strcmp(p, "DIMENSIONS") == 0) *ntaxa = process_unal_dim(in);
-	else if(strcmp(p, "FORMAT") == 0) *protein = process_unal_format(in);
-	else if(strcmp(p, "TAXLABELS") == 0) 
-		*taxnames = process_taxa_taxlabels(in, *ntaxa);
-	else if(strcmp(p, "MATRIX") == 0) {
-		seqs = process_unal_matrix(in, *ntaxa, *taxnames);
-		}
-	else skip_command(in);
-	}
-l = max_l = 0;
-for(i = 0; seqs != NULL && i < *ntaxa; i++) {
-	if(seqs[i] != NULL) l = strlen(seqs[i]);
-	if(l > max_l) max_l = l;
-	}
-*nsites = max_l;
-return seqs;
-}
-
-
-int process_unal_dim(FILE *in)
-{
-char *p;
-int number = 0;
-
-p = majuscules(next_token(in));
-if(p == NULL || strcmp(p, "NEWTAXA") != 0) { skip_command(in); return 0; }
-p = majuscules(next_token(in));
-if(p == NULL || strcmp(p, "NTAX") != 0) { skip_command(in); return 0; }
-next_token(in); /* skip = */
-p = next_token(in);
-if(p != NULL) sscanf(p, "%d", &number);
-if(number <= 0) number = 0;
-if(p != NULL && *p != ';') skip_command(in);
-return number;
-}
-
-
-int process_unal_format(FILE *in)
-{
-char *p;
-int protein;
-
-p = majuscules(next_token(in));
-if(p == NULL || strcmp(p, "DATATYPE") != 0) { skip_command(in); return 0; }
-next_token(in); /* skip = */
-p = majuscules(next_token(in));
-if(p != NULL) protein = (strcmp(p, "PROTEIN") == 0);
-if(p != NULL && *p != ';') skip_command(in);
-return protein;
-}
-
-
-char **process_unal_matrix(FILE *in, int ntaxa, char **taxnames)
-{
-int num, c, lseq;
-char *p, **seq, *q;
-const int block = 5000;
-
-seq = (char **)malloc(ntaxa * sizeof(char *));
-if(seq == NULL) { skip_command(in); return NULL;}
-for(num = 0; num < ntaxa; num++) seq[num] = NULL;
-while(TRUE) {
-	p = next_token(in);
-	if(p == NULL) break;
-	num = find_by_name_num(p, ntaxa, taxnames);
-	if(num == -1) { /* bad format */
-		skip_command(in);
-		return seq;
-		}
-	lseq = 0;
-	p = seq[num];
-	while(TRUE) {
-		c = fgetc(in);
-		if(c == ';' || c == ',' || c == EOF) break;
-		if(isspace(c)) continue;
-		if(p >= seq[num] + lseq) {
-			lseq += block;
-			q = (char *)malloc(lseq + 1);
-			if(q == NULL)  { 
-				skip_command(in); free(seq); return NULL;
-				}
-			if(p > seq[num]) memcpy(q, seq[num], p - seq[num]);
-			p = q + (p - seq[num]);
-			if(seq[num] != NULL) free(seq[num]);
-			seq[num] = q;
-			}
-		*(p++) = c;
-		}
-	*p = 0;
-	if(c == ';' || c == EOF) break;
-	}
-return seq;
-}
-
-
-int read_nexus_align(char *fname, char ***pseqs, char ***pseqnames, 
-	char ***pcomments, char **pheader, char **err_message, 
-	list_regions **charsets, int *pnum_species_sets,
-	int ***list_species_sets, char ***name_species_sets,
-	int *ptot_comment_lines, char ***comment_name, char ***comment_line,
-	int **comment_length, int *protein)
-{
-FILE *in;
-int lseqs, i, tot;
-
-if( (in = is_nexus_file(fname) ) == NULL) {
-	*err_message = "not a NEXUS file";
-	return 0;
-	}
-tot = read_nexus_file(in, pseqs, &lseqs, protein, pseqnames, 
-	pcomments, pheader,
-	pnum_species_sets, list_species_sets, name_species_sets,
-	charsets, ptot_comment_lines, comment_name, comment_line);
-if(tot == 0) {
-	*err_message = "format error";
-	return 0;
-	}
-if(*ptot_comment_lines > 0) {
-	*comment_length = (int *)malloc(*ptot_comment_lines * sizeof(int));
-	if(*comment_length == NULL) *ptot_comment_lines = 0;
-	for(i = 0; i < *ptot_comment_lines; i++) 
-		(*comment_length)[i] = strlen((*comment_line)[i]);
-	}
-return tot;
-}
-
-
-
-int read_nexus_file(FILE *in, char ***pseqs, int *nchars, int *protein,
-	char ***taxnames, char ***notes, char **header,
-	int *pnum_species_sets, int ***list_species_sets, 
-	char ***name_species_sets,
-	list_regions **charsets,
-	int *tot_comment_lines, char ***comment_name, char ***comment_line)
-{
-char *p, **seqs = NULL;
-linked_strings *footers, *taxsets, *tmplist;
-int ntaxa, count, num;
-
-ntaxa = *nchars = *tot_comment_lines = *pnum_species_sets = 0; 
-*protein = FALSE;
-*taxnames = *notes = NULL; *header = NULL;
-taxsets = footers = NULL;
-*charsets = NULL;
-*name_species_sets = NULL; *list_species_sets = NULL;
-while(TRUE) {
-	p = next_block_name(in);
-	if(p == NULL) break;
-	if(strcmp(p, "TAXA") == 0) ntaxa = process_block_taxa(in, taxnames);
-	else if(strcmp(p, "CHARACTERS") == 0) 
-		seqs = process_block_characters(in, &ntaxa, taxnames, 
-			nchars, protein);
-	else if(strcmp(p, "UNALIGNED") == 0) 
-		seqs = process_block_unaligned(in,
-		&ntaxa, taxnames, nchars, protein);
-	else if(strcmp(p, "DATA") == 0) seqs = process_block_data(in, &ntaxa,
-		taxnames, nchars, protein);
-	else if(strcmp(p, "NOTES") == 0) *notes = process_block_notes(in,
-		ntaxa, *taxnames);
-	else if(strcmp(p, "SETS") == 0) process_block_sets(in, ntaxa,
-		*taxnames, *nchars, &taxsets, charsets);
-	else if(strcmp(p, "SEAVIEW") == 0) 
-		footers = process_block_seaview(in, header);
-	else skip_block(in);
-	}
-fclose(in);
-if(seqs == NULL) {
-	*pseqs = NULL;
-	if(*taxnames != NULL) 
-		for(num = 0; num < ntaxa; num++) 
-			if((*taxnames)[num] != NULL) free((*taxnames)[num]);
-	return 0;
-	}
-if(footers != NULL)
-	*tot_comment_lines = linked_to_series(footers, comment_name,
-		comment_line);
-
-count = 0; tmplist = taxsets;
-while(tmplist != NULL) {
-	tmplist = tmplist->next; count++;
-	}
-if(count > 0) {
-	*name_species_sets = (char **)malloc(count * sizeof(char *));
-	if(*name_species_sets == NULL) count = 0;
-	*list_species_sets = (int **)malloc(count * sizeof(int *));
-	if(*list_species_sets == NULL) count = 0;
-	else	{
-		for(num = 0; num < count; num++) {
-			(*list_species_sets)[num] = 
-					(int *)calloc(ntaxa, sizeof(int));
-			if((*list_species_sets)[num] == NULL) count = 0;
-			}
-		}
-	if(count == 0) taxsets = NULL;
-	}
-*pnum_species_sets = count;
-while(taxsets != NULL) {
-	count--;
-	(*name_species_sets)[count] = taxsets->name;
-	p = (char *)taxsets->data - 1;
-	while( (p = strchr(p + 1, '1')) != NULL) {
-		num = p - (char *)taxsets->data;
-		(*list_species_sets)[count][num] = TRUE;
-		}
-	free(taxsets->data);
-	tmplist = taxsets;
-	taxsets = taxsets->next;
-	free(tmplist);
-	}
-*pseqs = seqs;
-return ntaxa;
-}
-
-
-int linked_to_series(linked_strings *linked, char ***names, char ***lines)
-{
-int i, count = 0;
-linked_strings *elt, *old;
-
-elt = linked;
-while(elt != NULL) { count++; elt = elt->next; }
-*names = (char **)malloc(count *sizeof(char *));
-*lines = (char **)malloc(count *sizeof(char *));
-if(*names == NULL || *lines == NULL) return 0;
-elt = linked; i = count;
-while(elt != NULL) {
-	i--;
-	(*names)[i] =  elt->name;
-	(*lines)[i] = (char *)elt->data;
-	old = elt;
-	elt = elt->next;
-	free(old);
-	}
-return count;
-}
-
-
-char *out_with_apostrophe(char *p)
-{
-static char out[1000];
-char *q = out;
-
-if (p == NULL) return NULL;
-if(strchr(p, APOSTROPHE) == NULL) return p;
-while (TRUE) {
-	*(q++) = *p;
-	if(*p == 0) break;
-	if(*p == APOSTROPHE) *(q++) = APOSTROPHE;
-	p++;
-	}
-return out;
-}
-
-
-void out_table_by_series(FILE *out, int *table, int dim)
-{
-int num, pre = -1;
-
-for(num = 0; num < dim; num++) {
-	if(!table[num]) { pre = -1; continue; }
-	if(pre == - 1) {
-		fprintf(out, " %d", num + 1);
-		pre = num;
-		continue;
-		}
-	if(num < dim - 1 && table[num + 1]) continue;
-	fprintf(out, "-%d", num + 1);
-	pre = -1;
-	}
-}
-
-
-int save_nexus_file(const char *fname, int ntaxa, int protein,
-	char **seqs, char **taxnames, char **notes, char *header,
-	int num_species_sets, int **list_species_sets, 
-	char **name_species_sets,
-	list_regions *charsets,
-	int tot_comment_lines, char **comment_name, char **comment_line,
-	region *region_used, int *sel_seqs, int tot_sel_seqs, int *eachlength)
-{
-FILE *out;
-int i, j, lmax, num, vtotseqs, current, ecrit;
-char *p, date_ligne[50];
-list_segments *psegment, all_sequence;
-region maregion;
-time_t heure;
-
-out = fopen(fname, "w");
-if(out == NULL) return TRUE;
-
-if(region_used == NULL) { /* on veut tout sauver */
-	tot_sel_seqs = 0;
-	all_sequence.debut = 1;
-	all_sequence.fin = eachlength[0];
-	for(i = 1; i < ntaxa; i++)
-		if( all_sequence.fin < eachlength[i] )  
-			 all_sequence.fin = eachlength[i];
-	all_sequence.next = NULL;
-	maregion.list = &all_sequence;
-	region_used = &maregion;
-	}
-/* calcul longueur des regions */
-lmax = 0;
-psegment = region_used->list;
-while(psegment != NULL) {
-	lmax += psegment->fin - psegment->debut + 1;
-	psegment = psegment->next;
-	}
-vtotseqs = 0;
-for(i=0; i < ntaxa; i++) 
-	if(tot_sel_seqs == 0 || sel_seqs[i]) ++vtotseqs;
-
-
-time(&heure);
-strcpy(date_ligne, ctime(&heure));
-num = strlen(date_ligne) - 1; if(date_ligne[num] == '\n') date_ligne[num] = 0;
-fprintf(out,"#NEXUS\n[saved by seaview on %s]\n", date_ligne);
-fprintf(out, "BEGIN TAXA;\n  DIMENSIONS NTAX=%d;\n  TAXLABELS", vtotseqs);
-for(i = 0; i < ntaxa; i+=5) {
-	for(j = i; j < i + 5 && j < ntaxa; j++) {
-		if(tot_sel_seqs == 0 || sel_seqs[j]) fprintf(out, " '%s'", 
-			out_with_apostrophe(taxnames[j]));
-		}
-	fputc('\n', out);
-	}
-fprintf(out, "  ;\nEND;\nBEGIN CHARACTERS;\n  DIMENSIONS NCHAR=%d;\n", lmax);
-fprintf(out, "  FORMAT DATATYPE=%s\n  GAP=-\n  ;\nMATRIX\n",
-	(protein ? "PROTEIN" : "NUCLEOTIDE") );
-
-num = 0;
-for(i = 0; i < ntaxa; i++) {
-	if(tot_sel_seqs != 0 && ! sel_seqs[i]) continue;
-	fprintf(out, "[%d] '%s'\n", ++num, out_with_apostrophe(taxnames[i]));
-
-	current = 0; psegment = region_used->list;
-	all_sequence.fin = eachlength[i];
-	do	{
-		ecrit = output_next_res_from_region(seqs[i], eachlength[i], 
-			&psegment, &current, out, 60, FALSE);
-		if( ecrit > 0) putc('\n', out);
-		else if(ecrit == -1) break;
-		}
-	while(ecrit != 0);
-	if( (ecrit = lmax - eachlength[i]) > 0) {
-		for(j = 1; j <= ecrit; j++) { 
-			putc('-', out); if(j % 60 == 0) putc('\n', out); 
-			}
-		putc('\n', out);
-		}
-	if(ferror(out)) break;
-	}
-fprintf(out, ";\nEND;\n");
-
-if(notes != NULL) {
-	num = 0; current = 0;
-	for(i = 0; i < ntaxa; i++) {
-		if(tot_sel_seqs != 0 && ! sel_seqs[i]) continue;
-		++num;
-		if(notes[i] == NULL || strcmp(notes[i], ";") == 0 ||
-			strcmp(notes[i], ";\n") == 0) continue;
-		if(current == 0) { fputs("BEGIN NOTES;\n", out); current++; }
-		fprintf(out, "  TEXT TAXON=%d TEXT='", num);
-		p = notes[i] + 1;
-		while(*p != 0) {
-			fputc(*p, out);
-			if(*p == APOSTROPHE) fputc(APOSTROPHE, out);
-			if(*p == '\n' && *(p+1) != 0) p++;
-			p++;
-			}
-		fputs("';\n", out);
-		}
-	if(current != 0) fprintf(out, "END;\n");
-	}
-
-if(num_species_sets != 0 || charsets != NULL) {
-	fprintf(out, "BEGIN SETS;\n");
-	for(num = 0; num < num_species_sets; num++) {
-		fprintf(out, "  TAXSET '%s' =",
-out_with_apostrophe(name_species_sets[num]));
-		out_table_by_series(out, list_species_sets[num], ntaxa);
-		fputs(";\n", out);
-		}
-	while(charsets != NULL) {
-		list_segments *pair;
-		fprintf(out, "  CHARSET '%s' =",
-out_with_apostrophe(charsets->element->name));
-		pair = charsets->element->list;
-		while(pair != NULL) {
-			if(pair->debut != pair->fin)
-				fprintf(out, " %d-%d", pair->debut, pair->fin);
-			else fprintf(out, " %d", pair->debut);
-			pair = pair->next;
-			}
-		fputs(";\n", out);
-		charsets = charsets->next;
-		}
-	fprintf(out, "END;\n");
-	}
-
-if(header != NULL || tot_comment_lines != 0) {
-	fprintf(out, "BEGIN seaview;\n");
-	if(header != NULL) {
-		fputs("  TEXT HEADER TEXT='", out);
-		p = header + 2;
-		while(*p != 0) {
-			fputc(*p, out);
-			if(*p == APOSTROPHE) fputc(APOSTROPHE, out);
-			if(*p == '\n' && *(p+1) != 0) p += 2;
-			p++;
-			}
-		fputs("';\n", out);
-		}
-	for(i = 0; i < tot_comment_lines; i++) {
-		fprintf(out, "  TEXT FOOTER='%s' TEXT='",
-			out_with_apostrophe(comment_name[i]));
-		p = comment_line[i];
-		j = 0;
-		while(*p != 0) {
-			fputc(*p, out); j++;
-			if(*p == APOSTROPHE) fputc(APOSTROPHE, out);
-			if(j >= 50) { fputc('\n', out); j = 0; }
-			p++;
-			}
-		fputs("';\n", out);
-		}
-	fprintf(out, "END;\n");
-	}
-
-fclose(out);
-return FALSE;
-}

Deleted: trunk/packages/seaview/trunk/pdf.cxx
===================================================================
--- trunk/packages/seaview/trunk/pdf.cxx	2007-07-20 10:28:45 UTC (rev 359)
+++ trunk/packages/seaview/trunk/pdf.cxx	2007-07-21 02:32:37 UTC (rev 360)
@@ -1,317 +0,0 @@
-#include "pdflib.h"
-#include "seaview.h"
-#include <time.h>
-#include <ctype.h>
-#include <FL/Fl_Round_Button.H>
-#include <FL/Fl_Check_Button.H>
-
-extern int printout_block, printout_fontsize, printout_black, printout_vary;
-extern paperformat printout_pageformat;
-
-
-int pdf_printout(SEA_VIEW *view, const char *filename, 
-	int fontsize, int block_size, paperformat pageformat, int vary_only, int ref0, int blackonly);
-static void color_pdf_display(PDF *pdf, SEA_VIEW *view, int (*calc_color_function)( int ), char *oneline, 
-	int widnames, double x, double y, int fontsize, double char_width, double descender);
-static int calc_vary_lines(int *vary_pos, int widpos);
-static void out_vary_pos(int *vary_pos, int widnames, int widpos, int nl, PDF *pdf);
-
-
-int pdf_printout(SEA_VIEW *view, const char *filename, 
-	int fontsize, int block_size, paperformat pageformat, int vary_only, int ref0, int blackonly)
-{
-int num, i, j, k, current, max_seq_length, fin, curr_lines, widnames, 
-	res_per_line, nl, firstpage, lines_per_page;
-time_t heure;
-static char unnamed[] = "<unnamed>";
-static char num_line[200];
-int lettre, char_per_line;
-short *vary_need = NULL;
-int *vary_pos; /* rang ds alignement de la colonne imprimée */
-char oneline[500];
-int (*calc_color_function)(int);
-PDF *pdf;
-double	char_width, width, height, descender, margin = 25;
-char	*fontname, *encoding;
-int		font;
-
-    fontname	= "Courier";
-#ifdef __APPLE__
-    encoding	= "macroman";
-#else
-    encoding	= "iso8859-1";
-#endif
-if(view->tot_seqs == 0) return 0;
-if(view->protein) calc_color_function = get_color_for_aa;
-else  calc_color_function = get_color_for_base;
-if(pageformat == A4) { width = a4_width; height = a4_height; }
-else /* LETTER */ { width = letter_width; height = letter_height; }
-lines_per_page = (int)((height - 2*margin) / fontsize + 0.5);
-
-pdf = PDF_new();
-if(pdf == NULL) return TRUE;
-
-if( PDF_begin_document(pdf, filename, 0, "compatibility=1.3") == -1) {
-	PDF_delete(pdf);
-	return TRUE;
-	}
-
-PDF_TRY(pdf) {
-
-PDF_set_info(pdf, "Title", PREPARE_LABEL(view->masename) );
-PDF_set_info(pdf, "Creator", "seaview");
-font = PDF_load_font(pdf, fontname, 0, encoding, "");
-char_width = PDF_stringwidth(pdf, "X", font, (double)fontsize);
-char_per_line = (int)((width - 2*margin) / char_width + 0.5);
-descender = PDF_get_value(pdf, "descender", font) * fontsize;
-
-PDF_begin_page_ext(pdf, width, height, "");
-PDF_setfont(pdf, font, (double)fontsize);
-PDF_set_text_pos(pdf, margin, height - margin);
-firstpage = TRUE;
-
-if(ref0 < 0) vary_only = FALSE;
-time(&heure);
-sprintf(oneline,"Alignment: %s", view->masename == NULL ? unnamed : PREPARE_LABEL(view->masename) );
-PDF_continue_text(pdf, oneline);
-curr_lines = 1;
-if(vary_only) {
-	PDF_continue_text(pdf, "Displaying variable sites only.");
-	++curr_lines;
-	}
-sprintf(oneline,"Seaview [blocks=%d fontsize=%d %s] on %s",
-		block_size, fontsize, pageformat == A4 ? "A4" : "LETTER", ctime(&heure));
-PDF_continue_text(pdf, oneline);
-PDF_continue_text(pdf, "");
-curr_lines += 2;
-max_seq_length = 0; widnames = 0;
-for(i=0; i < view->tot_seqs; i++) {
-	if(view->each_length[i] > max_seq_length) max_seq_length = view->each_length[i];
-	if( ( fin=strlen(view->seqname[i]) ) > widnames) widnames = fin;
-	}
-widnames += 2;
-if(vary_only) {
-	vary_need = (short *)calloc(max_seq_length, sizeof(short));
-	if(vary_need == NULL) return TRUE;
-	vary_pos = (int *)calloc(char_per_line, sizeof(int));
-	if(vary_pos == NULL) return TRUE;
-	for(i = 0; i < max_seq_length; i++) {
-		for(num = 0; num < view->tot_seqs; num++) {
-			if( toupper(view->sequence[num][i]) != toupper(view->sequence[ref0][i]) ) { 
-				vary_need[i] = TRUE;
-				break;
-				}
-			}
-		}
-	}
-/* nombre max de blocks qui tiennent sur une ligne de cpl chars */
-fin = (char_per_line - widnames + 1) / (block_size + 1);
-if(fin < 1) { /* garde fou */
-	fin = 1; block_size = char_per_line - widnames;
-	}
-res_per_line = fin * block_size;
-current = 0; 
-while( current < max_seq_length ) {
-	nl = 1;
-	if(vary_only) { 
-		memset(vary_pos, 0, res_per_line * sizeof(int) );
-		i = -1; j = 0; k = 0;
-		while( j < res_per_line) {
-			if(current + i >= max_seq_length) break;
-			if( !vary_need[current + ++i] ) continue;
-			j++;
-			vary_pos[k++] = current + i + 1;
-			if( j % block_size == 0) k++;
-			}
-		nl = calc_vary_lines(vary_pos,  k);
-		}
-	if( (!firstpage) && curr_lines + view->tot_seqs + nl > lines_per_page) {
-		PDF_end_page_ext(pdf, "");
-		PDF_begin_page_ext(pdf, width, height, "");
-		PDF_setfont(pdf, font, (double)fontsize);
-		PDF_set_text_pos(pdf, margin, height - margin);
-		curr_lines = 0;
-		}
-	if(vary_only) {
-		out_vary_pos(vary_pos, widnames, k, nl, pdf);
-		curr_lines += nl;
-		}
-	else	{
-		sprintf(num_line, "%d", current + 1);
-		fin = strlen(num_line);
-		memmove(num_line + widnames - fin + 1, num_line, fin+1);
-		if(fin <= widnames) memset(num_line, ' ', widnames - fin + 1);
-		PDF_continue_text(pdf, num_line);
-		++curr_lines;
-		}
-	for(num=0; num < view->tot_seqs; num++) {
-		k = 0;
-		for(j = 0; j < widnames; j++) {
-			if(view->seqname[num][j] == 0) break;
-			oneline[k++] = view->seqname[num][j];
-			}
-		while( j < widnames) {
-			j++;
-			oneline[k++] = ' ';
-			}
-		if(vary_only) {
-			i = -1; j = 0;
-			while( j < res_per_line) {
-				if(current + i >= max_seq_length) break;
-				if( !vary_need[current + ++i] ) continue;
-				j++;
-				if(current + i < view->each_length[num]) {
-					if(num != ref0) lettre = ( toupper(view->sequence[num][current+i]) == 
-						toupper(view->sequence[ref0][current+i]) ? '.' : view->sequence[num][current+i] );
-					else lettre = view->sequence[ref0][current+i];
-					oneline[k++] = lettre;
-					}
-				if( j % block_size == 0) oneline[k++] = ' ';
-				}
-			if(num == view->tot_seqs - 1) current = current + i + 1;
-			}
-
-		else	{
-			fin = res_per_line;
-			if(current+fin > view->each_length[num]) 
-				fin = view->each_length[num] - current;
-			if(ref0 != -1 && num != ref0) {
-				/* ecriture par reference a seq ref0 */
-				for(i=0; i<fin; i++) {
-					lettre = ( toupper(view->sequence[num][current+i]) == 
-						toupper(view->sequence[ref0][current+i]) ? '.' : view->sequence[num][current+i] );
-					oneline[k++] = lettre;
-					if( i < fin-1 && (i+1)%block_size == 0) 
-						oneline[k++] = ' ';
-					}
-				}
-			else	{ /* ecriture normale de seq */
-				for(i=0; i<fin; i++) {
-					oneline[k++] = view->sequence[num][current+i];
-					if( i < fin-1 && (i+1)%block_size == 0) 
-						oneline[k++] = ' ';
-					}
-				}
-			}
-		oneline[k] = 0;
-		if(curr_lines >= lines_per_page) {
-			PDF_end_page_ext(pdf, "");
-			PDF_begin_page_ext(pdf, width, height, "");
-			PDF_setfont(pdf, font, (double)fontsize);
-			PDF_set_text_pos(pdf, margin, height - margin);
-			curr_lines = 0;
-			}
-		if(blackonly) {
-			PDF_show_xy(pdf, oneline, margin, height - margin - (curr_lines+1) * fontsize);
-			}
-		else 
-			color_pdf_display(pdf, view, calc_color_function, oneline, widnames, margin, 
-				height - margin - (curr_lines+1) * fontsize, fontsize, char_width, descender);
-		++curr_lines;
-		firstpage = FALSE;
-		}
-	if(curr_lines + 1 <= lines_per_page) {
-		PDF_continue_text(pdf, "");
-		++curr_lines;
-		}
-	if( ! vary_only ) current += res_per_line;
-	}
-PDF_end_page_ext(pdf, "");
-PDF_end_document(pdf, "");
-PDF_delete(pdf);
-} /* end of PDF_TRY */
-PDF_CATCH(pdf) {
-        fl_alert("Error while writing pdf file:\n"
-       	 "[%d] %s: %s\n",
-	  	  PDF_get_errnum(pdf), PDF_get_apiname(pdf), PDF_get_errmsg(pdf) );
-        PDF_delete(pdf);
-        return TRUE; 
-}
-return FALSE;
-}
-
-
-static void color_pdf_display(PDF *pdf, SEA_VIEW *view, int (*calc_color_function)( int ), char *oneline, 
-	int widnames, double x, double y, int fontsize, double char_width, double descender)
-{
-uchar red, green, blue;
-double r, g, b, xx;
-int c, l;
-char *p, **clines;
-
-clines = (char **)malloc(sizeof(char *) * view->numb_gc); if(clines==NULL) return;
-l = strlen(oneline);
-for(c = 1; c < view->numb_gc; c++) {
-	clines[c] = (char *)malloc(l + 1); if(clines[c] == NULL) return;
-	memset(clines[c], ' ', l); clines[c][l] = 0;
-	}
-for(p = oneline + widnames; *p != 0; p++) {
-	c = calc_color_function(*p);
-	if(c > 0) clines[c][p - oneline] = 'X';
-	}
-for(c = 1; c < view->numb_gc; c++) {
-	if(strchr(clines[c], 'X') == NULL) continue;
-	Fl::get_color((Fl_Color)view->curr_colors[c], red, green, blue);
-	r = red/255.; g = green/255.; b = blue/255.;
-	PDF_setcolor(pdf, "fillstroke", "rgb", r, g, b, 0);
-	for(xx = x + widnames*char_width, p = clines[c] + widnames; *p != 0; p++, xx += char_width) {
-		if(*p == ' ') continue;
-		PDF_rect(pdf, xx, y + descender, char_width, (double)fontsize);
-		}
-	PDF_fill_stroke(pdf);
-	}
-PDF_setcolor(pdf, "fillstroke", "rgb", 0, 0, 0, 0);
-PDF_show_xy(pdf, oneline, x, y);
-for(c = 1; c < view->numb_gc; c++) free(clines[c]);
-free(clines);
-}
-
-
-static int calc_vary_lines(int *vary_pos, int widpos)
-{
-int maxi = 0, num, nl;
-
-for(num = 0; num < widpos; num++) 
-	if(vary_pos[num] > maxi) maxi = vary_pos[num];
-if(maxi >= 100000)
-	 nl = 6;
-else if(maxi >= 10000)
-	 nl = 5;
-else if(maxi >= 1000)
-	 nl = 4;
-else if(maxi >= 100)
-	 nl = 3;
-else if(maxi >= 10)
-	 nl = 2;
-else 	
-	 nl = 1;
-return nl;
-}
-
-
-static void out_vary_pos(int *vary_pos, int widnames, int widpos, int nl, PDF *pdf)
-{
-int num, l, k, echelle, digit, val;
-static char chiffre[] = "0123456789";
-char oneline[300];
-
-echelle = 1; k = 0;
-for(l = 2; l <= nl; l++) echelle *= 10;
-for(l = nl; l > 0; l--) {
-	for(num = 0; num < widnames; num++) oneline[k++] = ' ';
-	for(num = 0; num < widpos; num++) {
-		val = vary_pos[num];
-		if(val < echelle)
-			oneline[k++] = ' ';
-		else	{
-			digit = (val / echelle) % 10 ;
-			oneline[k++] = *(chiffre + digit);
-			}
-		}
-	oneline[k] = 0;
-	PDF_continue_text(pdf, oneline);
-	k = 0;
-	echelle /= 10;
-	}
-}
-

Deleted: trunk/packages/seaview/trunk/postscript.cxx
===================================================================
--- trunk/packages/seaview/trunk/postscript.cxx	2007-07-20 10:28:45 UTC (rev 359)
+++ trunk/packages/seaview/trunk/postscript.cxx	2007-07-21 02:32:37 UTC (rev 360)
@@ -1,321 +0,0 @@
-#include "seaview.h"
-#include <time.h>
-#include <ctype.h>
-
-extern int printout_block, printout_fontsize, printout_black, printout_vary;
-extern paperformat printout_pageformat;
-
-
-int pdf_printout(SEA_VIEW *view, const char *filename, 
-	int fontsize, int block_size, paperformat pageformat, int vary_only, int ref0, int blackonly);
-static void color_ps_display(FILE *psout, SEA_VIEW *view, int (*calc_color_function)( int ), char *oneline, 
-	int widnames, int x, int y, int fontsize, int char_width, int descender);
-static int calc_vary_lines(int *vary_pos, int widpos);
-static void out_vary_pos(int *vary_pos, int widnames, int widpos, int nl, FILE *psout, 
-	int x, int y, int yoffset);
-
-
-int pdf_printout(SEA_VIEW *view, const char *filename, 
-	int fontsize, int block_size, paperformat pageformat, int vary_only, int ref0, int blackonly)
-{
-int num, i, j, k, current, max_seq_length, fin, curr_lines, widnames, 
-	res_per_line, nl, firstpage, lines_per_page;
-time_t heure;
-static char unnamed[] = "<unnamed>";
-static char num_line[200];
-int lettre, char_per_line;
-short *vary_need = NULL;
-int *vary_pos; /* rang ds alignement de la colonne imprimée */
-char oneline[500];
-int (*calc_color_function)(int);
-FILE *psout;
-int	char_width, width, height, descender, margin = 25;
-float postscript_ratio;
-char	*fontname;
-int		font, curpage, erreur = FALSE;
-const int a4_width = 595;
-const int a4_height = 842;
-const int letter_width = 612;
-const int letter_height = 792;
-
-    fontname	= "Courier-Bold";
-if(view->tot_seqs == 0) return 0;
-if(view->protein) calc_color_function = get_color_for_aa;
-else  calc_color_function = get_color_for_base;
-if(pageformat == A4) { width = a4_width; height = a4_height; }
-else /* LETTER */ { width = letter_width; height = letter_height; }
-lines_per_page = (height - 2*margin) / fontsize ;
-
-psout = fopen(filename, "w");
-if(psout == NULL) return TRUE;
-
-fprintf(psout,"%%!PS-Adobe-3.0\n"
-	"%%%%DocumentFonts: %s \n"
-	"%%%%Creator: seaview\n"
-	"%%%%Pages: (atend)\n"
-	"%%%%Title: %s\n"
-	"%%%%BeginFeature: *PageSize \n"
- 	"%s\n"
-	"%%%%EndFeature\n"
-	"%%%%EndComments\n", fontname,
-	 PREPARE_LABEL(view->masename), pageformat == A4 ? "a4" : "letter" );
-
-
-postscript_ratio = 0.60;
-char_width = (int)(fontsize * postscript_ratio + 0.5);
-char_per_line = (width - 2*margin) / char_width ;
-descender = - (int)(fontsize * 0.20 + 0.5); 
-
-fprintf(psout,"%%%%BeginProlog\n/uniqfont /%s findfont %d scalefont def\n%%%%EndProlog\n", 
-	fontname, fontsize);
-
-curpage = 1;
-fprintf(psout,"%%%%Page: ? 1\n");
-
-fprintf(psout,"uniqfont setfont\n");
-fprintf(psout,"%d %d moveto\n", margin, height - margin - fontsize);
-firstpage = TRUE;
-
-if(ref0 < 0) vary_only = FALSE;
-time(&heure);
-sprintf(oneline,"Alignment: %s", view->masename == NULL ? unnamed : PREPARE_LABEL(view->masename) );
-fprintf(psout,"(%s) show\n", oneline);
-curr_lines = 1;
-if(vary_only) {
-	fprintf(psout,"%d %d moveto\n", margin, height - margin - (++curr_lines) * fontsize);
-	fprintf(psout,"(Displaying variable sites only.) show\n");
-	}
-sprintf(oneline,"Seaview [blocks=%d fontsize=%d %s] on %s",
-		block_size, fontsize, pageformat == A4 ? "A4" : "LETTER", ctime(&heure));
-fprintf(psout,"%d %d moveto\n", margin, height - margin - (++curr_lines) * fontsize);
-fprintf(psout,"(%s) show\n", oneline);
-++curr_lines;
-max_seq_length = 0; widnames = 0;
-for(i=0; i < view->tot_seqs; i++) {
-	if(view->each_length[i] > max_seq_length) max_seq_length = view->each_length[i];
-	if( ( fin=strlen(view->seqname[i]) ) > widnames) widnames = fin;
-	}
-widnames += 2;
-if(vary_only) {
-	vary_need = (short *)calloc(max_seq_length, sizeof(short));
-	if(vary_need == NULL) return TRUE;
-	vary_pos = (int *)calloc(char_per_line, sizeof(int));
-	if(vary_pos == NULL) return TRUE;
-	for(i = 0; i < max_seq_length; i++) {
-		for(num = 0; num < view->tot_seqs; num++) {
-			if( toupper(view->sequence[num][i]) != toupper(view->sequence[ref0][i]) ) { 
-				vary_need[i] = TRUE;
-				break;
-				}
-			}
-		}
-	}
-/* nombre max de blocks qui tiennent sur une ligne de cpl chars */
-fin = (char_per_line - widnames + 1) / (block_size + 1);
-if(fin < 1) { /* garde fou */
-	fin = 1; block_size = char_per_line - widnames;
-	}
-res_per_line = fin * block_size;
-current = 0; 
-while( current < max_seq_length ) {
-	nl = 1;
-	if(vary_only) { 
-		memset(vary_pos, 0, res_per_line * sizeof(int) );
-		i = -1; j = 0; k = 0;
-		while( j < res_per_line) {
-			if(current + i >= max_seq_length) break;
-			if( !vary_need[current + ++i] ) continue;
-			j++;
-			vary_pos[k++] = current + i + 1;
-			if( j % block_size == 0) k++;
-			}
-		nl = calc_vary_lines(vary_pos,  k);
-		}
-	if( (!firstpage) && curr_lines + view->tot_seqs + nl > lines_per_page) {
-		fprintf(psout,"showpage\n");
-		fprintf(psout,"%%%%Page: ? %d\n", ++curpage);
-		fprintf(psout,"uniqfont setfont\n");
-		curr_lines = 0;
-		}
-	if(vary_only) {
-		out_vary_pos(vary_pos, widnames, k, nl, psout, margin, height - margin - (curr_lines+1) * fontsize, fontsize);
-		curr_lines += nl;
-		}
-	else	{
-		sprintf(num_line, "%d", current + 1);
-		fin = strlen(num_line);
-		memmove(num_line + widnames - fin + 1, num_line, fin+1);
-		if(fin <= widnames) memset(num_line, ' ', widnames - fin + 1);
-		fprintf(psout,"%d %d moveto\n", margin, height - margin - (curr_lines+1) * fontsize);
-		fprintf(psout,"(%s) show\n", num_line);
-		++curr_lines;
-		}
-	for(num=0; num < view->tot_seqs; num++) {
-		k = 0;
-		for(j = 0; j < widnames; j++) {
-			if(view->seqname[num][j] == 0) break;
-			oneline[k++] = view->seqname[num][j];
-			}
-		while( j < widnames) {
-			j++;
-			oneline[k++] = ' ';
-			}
-		if(vary_only) {
-			i = -1; j = 0;
-			while( j < res_per_line) {
-				if(current + i >= max_seq_length) break;
-				if( !vary_need[current + ++i] ) continue;
-				j++;
-				if(current + i < view->each_length[num]) {
-					if(num != ref0) lettre = ( toupper(view->sequence[num][current+i]) == 
-						toupper(view->sequence[ref0][current+i]) ? '.' : view->sequence[num][current+i] );
-					else lettre = view->sequence[ref0][current+i];
-					oneline[k++] = lettre;
-					}
-				if( j % block_size == 0) oneline[k++] = ' ';
-				}
-			if(num == view->tot_seqs - 1) current = current + i + 1;
-			}
-
-		else	{
-			fin = res_per_line;
-			if(current+fin > view->each_length[num]) 
-				fin = view->each_length[num] - current;
-			if(ref0 != -1 && num != ref0) {
-				/* ecriture par reference a seq ref0 */
-				for(i=0; i<fin; i++) {
-					lettre = ( toupper(view->sequence[num][current+i]) == 
-						toupper(view->sequence[ref0][current+i]) ? '.' : view->sequence[num][current+i] );
-					oneline[k++] = lettre;
-					if( i < fin-1 && (i+1)%block_size == 0) 
-						oneline[k++] = ' ';
-					}
-				}
-			else	{ /* ecriture normale de seq */
-				for(i=0; i<fin; i++) {
-					oneline[k++] = view->sequence[num][current+i];
-					if( i < fin-1 && (i+1)%block_size == 0) 
-						oneline[k++] = ' ';
-					}
-				}
-			}
-		oneline[k] = 0;
-		if(curr_lines >= lines_per_page) {
-			fprintf(psout,"showpage\n");
-			fprintf(psout,"%%%%Page: ? %d\n", ++curpage);
-			fprintf(psout,"uniqfont setfont\n");
-			curr_lines = 0;
-			}
-		if(blackonly) {
-			fprintf(psout,"%d %d moveto\n", margin, height - margin - (curr_lines+1) * fontsize);
-			fprintf(psout,"(%s) show\n", oneline);
-			}
-		else 
-			color_ps_display(psout, view, calc_color_function, oneline, widnames, margin, 
-				height - margin - (curr_lines+1) * fontsize, fontsize, char_width, descender);
-		++curr_lines;
-		firstpage = FALSE;
-		}
-	if(curr_lines + 1 <= lines_per_page) {
-		++curr_lines;
-		}
-	if( ! vary_only ) current += res_per_line;
-	}
-fprintf(psout,"showpage\n");
-fprintf(psout, "%%%%Trailer\n%%%%Pages: %d\n%%%%EOF\n", curpage);
-if(ferror(psout)) erreur = TRUE;
-if(fclose(psout) != 0) erreur = TRUE;
-return erreur;
-}
-
-
-static void color_ps_display(FILE *psout, SEA_VIEW *view, int (*calc_color_function)( int ), char *oneline, 
-	int widnames, int x, int y, int fontsize, int char_width, int descender)
-{
-uchar red, green, blue;
-double r, g, b;
-int xx;
-int c, l;
-char *p, **clines;
-
-clines = (char **)malloc(sizeof(char *) * view->numb_gc); if(clines==NULL) return;
-l = strlen(oneline);
-for(c = 1; c < view->numb_gc; c++) {
-	clines[c] = (char *)malloc(l + 1); if(clines[c] == NULL) return;
-	memset(clines[c], ' ', l); clines[c][l] = 0;
-	}
-for(p = oneline + widnames; *p != 0; p++) {
-	c = calc_color_function(*p);
-	if(c > 0) clines[c][p - oneline] = 'X';
-	}
-for(c = 1; c < view->numb_gc; c++) {
-	if(strchr(clines[c], 'X') == NULL) continue;
-	Fl::get_color((Fl_Color)view->curr_colors[c], red, green, blue);
-	r = red/255.; g = green/255.; b = blue/255.;
-	fprintf(psout,"%f %f %f setrgbcolor\n", r, g, b);
-	for(xx = x + widnames*char_width, p = clines[c] + widnames; *p != 0; p++, xx += char_width) {
-		if(*p == ' ') continue;
-		fprintf(psout, "%d %d %d %d rectfill\n", 
-			xx, y+descender, char_width, fontsize);	
-		}
-	}
-fprintf(psout,"0 setgray\n");
-fprintf(psout,"%d %d moveto\n", x, y);
-fprintf(psout,"(%s) show\n", oneline);
-for(c = 1; c < view->numb_gc; c++) free(clines[c]);
-free(clines);
-}
-
-
-static int calc_vary_lines(int *vary_pos, int widpos)
-{
-int maxi = 0, num, nl;
-
-for(num = 0; num < widpos; num++) 
-	if(vary_pos[num] > maxi) maxi = vary_pos[num];
-if(maxi >= 100000)
-	 nl = 6;
-else if(maxi >= 10000)
-	 nl = 5;
-else if(maxi >= 1000)
-	 nl = 4;
-else if(maxi >= 100)
-	 nl = 3;
-else if(maxi >= 10)
-	 nl = 2;
-else 	
-	 nl = 1;
-return nl;
-}
-
-
-static void out_vary_pos(int *vary_pos, int widnames, int widpos, int nl, FILE *psout, 
-	int x, int y, int yoffset)
-{
-int num, l, k, echelle, digit, val;
-static char chiffre[] = "0123456789";
-char oneline[300];
-
-echelle = 1; k = 0;
-for(l = 2; l <= nl; l++) echelle *= 10;
-for(l = nl; l > 0; l--) {
-	for(num = 0; num < widnames; num++) oneline[k++] = ' ';
-	for(num = 0; num < widpos; num++) {
-		val = vary_pos[num];
-		if(val < echelle)
-			oneline[k++] = ' ';
-		else	{
-			digit = (val / echelle) % 10 ;
-			oneline[k++] = *(chiffre + digit);
-			}
-		}
-	oneline[k] = 0;
-	fprintf(psout,"%d %d moveto\n", x, y); y -= yoffset;
-	fprintf(psout,"(%s) show\n", oneline);
-	k = 0;
-	echelle /= 10;
-	}
-}
-
-
-

Deleted: trunk/packages/seaview/trunk/protein.mase
===================================================================
--- trunk/packages/seaview/trunk/protein.mase	2007-07-20 10:28:45 UTC (rev 359)
+++ trunk/packages/seaview/trunk/protein.mase	2007-07-21 02:32:37 UTC (rev 360)
@@ -1,2483 +0,0 @@
-;; saved by seaview on Wed Sep 25 16:02:40 2002
-;; saved by seaview on Mon Feb  4 17:37:12 2002
-;; saved by seaview on Mon Nov 19 17:33:17 2001
-;; saved by seaview on Tue Jul  3 19:19:18 2001
-;; saved by seaview on Tue Jul  3 19:18:16 2001
-;; saved by seaview on Tue Jul  3 19:13:44 2001
-;; saved by seaview on Tue Jul  3 19:06:14 2001
-;; saved by seaview on Fri Nov 24 13:23:50 2000
-;; saved by seaview on Fri Nov 24 13:23:22 2000
-;; saved by seaview on Wed Oct 25 11:32:09 2000
-;; saved by seaview on Wed May 17 17:11:58 2000
-;; saved by seaview on Tue Oct 15 14:32:47 1996
-;; saved by seaview on Tue Oct 15 14:32:24 1996
-;; saved by seaview on Mon Oct 14 15:44:10 1996
-;; saved by seaview on Mon Oct 14 11:45:27 1996
-;; saved by seaview on Mon Oct 14 11:16:43 1996
-;; saved by seaview on Mon Oct 14 10:44:48 1996
-;; saved by seaview on Mon Oct 14 10:35:42 1996
-;; saved by seaview on Fri Sep 27 10:47:32 1996
-;;Mase format
-;;# of segments=1 all seqs
-;; 52,653
-;;# of segments=1 to-BiP
-;; 52,719
-;;# of segments=1 encephalitoz
-;; 220,442
-;;|Comments
-;;----aA&@#i--------------------------------------------------
-;;------------------------------------------------------------
-;;------------------------------------------------------------
-;;------------------------------------------------------------
-;;------------------------------------------------------------
-;;------------------------------------------------------------
-;;------------------------------------------------------------
-;;------------------------------------------------------------
-;;------------------------------------------------------------
-;;------------------------------------------------------------
-;;------------------------------------------------------------
-;;------------------------------------------------------------
-;;------------------------------------------------------------
-;;------------------------------------------------------------
-;;-
-;;||
-;;@ of species = 79 to-BiP
-;; 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
-;; 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
-;; 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
-;; 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
-;; 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 74, 75, 76,
-;; 77, 78, 79, 81
-;;@ of species = 72 true-hsp70
-;; 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
-;; 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
-;; 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
-;; 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
-;; 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72
-;;@ of species = 70 strict-true-hsp70
-;; 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
-;; 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31,
-;; 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
-;; 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
-;; 62, 63, 64, 65, 66, 67, 69, 70, 71, 72
-;XLHSP70.PE1             648 residues Frame 0 Code 0
-;DEFINITION  Xenopus gene for hsp 70 heat shock protein.
-;ACCESSION   X01102 M11915
-;     CDS             488..2431
-;                     /codon_start=1
-;                     /product="hsp 70 protein"
-;                     /db_xref="PID:g64796"
-;                     /db_xref="SWISS-PROT:P02827"
-Xenopus
-------------MATKGVAVGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVAMNPQNTVFDAKRLIGRKFNDPVVQCDLKHWPFQVVSDE-GKPKVK
-VEYK-----GEEKSFFPEEISSMVLTKMKETA-EAYLG--HPVTNAVITVPAYFNDSQRQ
-ATKDAGVLAGLNILRIINEPTAAAIAYGLDKGA----RGEQNVLIFDLGGGTFDVSILTI
-DDG--IFEVKATAGDTHLGGEDFDNRMVNHFVEEFKRKHK------------KDIGQNKR
-ALRRLRTACDRAKRTLSS-SSQASIEIDSLFEGIDFY----TAITRARFEELCSDLFRGT
-LEPVEKALRDA-------KLDKSQIHEIVLVGGSTRIPKVQKL-LQDFFNGRELNKSINP
-DEAV-AYGAAVQAAILMGDKSE----N-VQDLLLLDVAPLSLGLETAGGVMTVLIKRNTT
-IPTKQTQSF-TTYSDNQPGVLIQVFEGER-AMTKDNNLLGK----FELSGIPPAPRG-VP
-QIEVTFDIDANGIL-NVSAVEKS-SGKQNKITITNDKGRLSKE-DIEKMVQEAEKYKADD
-DAQRERVDAKNALESYAFNL--KSMVEDE-NVKGKISDEDKRTISEKCTQVISWLENNQ-
-LAEKEEYAFQQKDLEKVCQPIITKLYQGGVPGGVPGGMPGSSCGAQARQGGNSGPTIEEV
-D-----------------------------------------------------------
--------------------------------------------------------
-;HSP70B.PE1              644 residues Frame 0 Code 0
-;DEFINITION  Human heat-shock protein HSP70B' gene.
-;ACCESSION   X51757
-;     CDS             251..2182
-;                     /note="heat-shock protein HSP70B' (AA 1-643)"
-;                     /codon_start=1
-;                     /db_xref="PID:g35222"
-;                     /db_xref="SWISS-PROT:P17066"
-Homo-B'
------------mqaprelavgidlgttyscvgvfqqgrveilandqgnrttpsyvaft-D
--TERLVGDAAKSQAALNPHNTVFDAKRLIGRKFADTTVQSDMKHWPFRVVSEG-GKPKVP
-VSYR-----GEDKTFYPEEISSMVLSKMKETA-EAYLG--QPVKHAVITVPAYFNDSQRQ
-ATKDAGAIAGLNVLRIINEPTAAAIAYGLDRRG----AGERNVLIFDLGGGTFDVSVLSI
-DAG--VFEVKATAGDTHLGGEDFDNRLVNHFMEEFRRKHG------------KDLSGNKR
-ALGRLRTACERAKRTLSS-STQATLEIDSLFEGVDFY----TSITRARFEELCSDLFRST
-LEPVEKALRDA-------KLDKAQIHDVVLVGGSTRIPKVQKL-LQDFFNGKELNKSINP
-DEAV-AYGAAVQAAVLMGDKCE----K-VQDLLLLDVAPLSLGLETAGGVMTTLIQRNAT
-IPTKQTQTF-TTYSDNQPGVFIQVYEGER-AMTKDNNLLGR----FELSGIPPAPRG-VP
-QIEVTFDIDANGIL-SVTATDRS-TGKANKITITNDKGRLSKE-EVERMVHEAEQYKAED
-EAQRDRVAAKNSLEAHVFHV--KGSLQEE-SLRDKIPEEDRRKMQDKCREVLAWLEHNQ-
-LAEKEEYEHQKRELEQICRPIFSRLYGGPGVPGGSSCGTQARQGDPSTGPIIEEVD----
-------------------------------------------------------------
--------------------------------------------------------
-;HUMHSP70D.HSPA1L        641 residues Frame 0 Code 0
-;DEFINITION  Human heat shock protein (hsp 70) gene, complete cds.
-;ACCESSION   M11717 M15432
-;     CDS             489..2411
-;                     /gene="HSPA1L"
-;                     /note="70 kDa"
-;                     /codon_start=1
-;                     /db_xref="GDB:G00-120-058"
-;                     /product="heat shock protein"
-;                     /db_xref="PID:g386785"
-Homo-1L
--------------MAKAAAVGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVALNPQNTVFDAKRLIGRKFGDPVVQSDMKHWPFQVINDG-DKPKVQ
-VSYK-----GETKAFYPEEISSMVLTKMKEIA-EAYLG--YPVTNAVITVPAYFNDSQRQ
-ATKDAGVIAGLNVLRIINEPTAAAIAYGLDRTG----KGERNVLIFDLGGGTFDVSILTI
-DDG--IFEVKATAGDTHLGGEDFDNRLVNHFVEEFKRKHK------------KDISQNKR
-AVRRLRTACERAKRTLSS-STQASLEIDSLFEGIDFY----TSITRARFEELCSDLFRST
-LEPVEKALRDA-------KLDKAQIHDLVLVGGSTRIPKVQKL-LQDFFNGRDLNKSINP
-DEAV-GYGAAVQAAILMGDKSE----N-VQDLLLLDVAPLSLGLETAGGVMTALIKRNST
-IPTKQTQIF-TTYSDNQPGVLIQVYEGER-AMTKDNNLLGR----FELSGIPPAP-G-VP
-QIEVTFDIDANGIL-NVTATDKS-TGKANKITITNDKGRLSKE-EIERMVQEAEKYKAED
-EVQRERVSAKNALESYAFNM--KSAVEDE-GLKGKISEADKKKVLDKCQEVISWLDANT-
-LAEKDEFEHKRKELEQVCNPIISGLYQGAGGPGPGGFGAQGPKGGSGSGPTIEEVD----
-------------------------------------------------------------
--------------------------------------------------------
-;HUMMHHSP.HSP70-1        642 residues Frame 0 Code 0
-;DEFINITION  Human MHC class III HSP70-1 gene (HLA), complete cds.
-;ACCESSION   M59828 M34267
-;     CDS             490..2415
-;                     /gene="HSP70-1"
-;                     /codon_start=1
-;                     /product="heat shock-induced protein"
-;                     /db_xref="PID:g188488"
-Homo-1
--------------MAKAAAIGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVALNPQNTVFDAKRLIGRKFGDPVVQSDMKHWPFQVINDG-DKPKVQ
-VSYK-----GETKAFYPEEISSMVLTKMKEIA-EAYLG--YPVTNAVITVPAYFNDSQRQ
-ATKDAGVIAGLNVLRIINEPTAAAIAYGLDRTG----KGERNVLIFDLGGGTFDVSILTI
-DDG--IFEVKATAGDTHLGGEDFDNRLVNHFVEEFKRKHK------------KDISQNKR
-AVRRLRTACERAKRTLSS-STQASLEIDSLFEGIDFY----TSITRARFEELCSDLFRST
-LEPVEKALRDA-------KLDKAQIHDLVLVGGSTRIPKVQKL-LQDFFNGRDLNKSINP
-DEAV-AYGAAVQAAILMGDKSE----N-VQDLLLLDVAPLSLGLETAGGVMTALIKRNST
-IPTKQTQIF-TTYSDNQPGVLIQVYEGER-AMTKDNNLLGR----FELSGIPPAPRG-VP
-QIEVTFDIDANGIL-NVTATDKS-TGKANKITITNDKGRLSKE-EIERMVQEAEKYKAED
-EVQRERVSAKNALESYAFNM--KSAVEDE-GLKGKISEADKKKVLDKCQEVISWLDANT-
-LAEKDEFEHKRKELEQVCNPIISGLYQGAGGPGPGGFGAQGPKGGSGSGPTIEEVD----
-------------------------------------------------------------
--------------------------------------------------------
-;HUMMHHSP2.PE1           642 residues Frame 0 Code 0
-;DEFINITION  Human MHC class III HSP70-2 gene (HLA), complete cds.
-;ACCESSION   M59830 M34269
-;     CDS             486..2411
-;                     /gene="HSP70-2"
-;                     /codon_start=1
-;                     /product="heat shock-induced protein"
-;                     /db_xref="PID:g188490"
-Homo-2
--------------MAKAAAIGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVALNPQNTVFDAKRLIGRKFGDPVVQSDMKHWPFQVINDG-DKPKVQ
-VSYK-----GETKAFYPEEISSMVLTKMKEIA-EAYLG--YPVTNAVITVPAYFNDSQRQ
-ATKDAGVIAGLNVLRIINEPTAAAIAYGLDRTG----KGERNVLIFDLGGGTFDVSILTI
-DDG--IFEVKATAGDTHLGGEDFDNRLVNHFVEEFKRKHK------------KDISQNKR
-AVRRLRTACERAKRTLSS-STQASLEIDSLFEGIDFY----TSITRARFEELCSDLFRST
-LEPVEKALRDA-------KLDKAQIHDLVLVGGSTRIPKVQKL-LQDFFNGRDLNKSINP
-DEAV-AYGAAVQAAILMGDKSE----N-VQDLLLLDVAPLSLGLETAGGVMTALIKRNST
-IPTKQTQIF-TTYSDNQPGVLIQVYEGER-AMTKDNNLLGR----FELSGIPPAPRG-VP
-QIEVTFDIDANGIL-NVTATDKS-TGKANKITITNDKGRLSKE-EIERMVQEAEKYKAED
-EVQRERVSAKNALESYAFNM--KSAVEDE-GLKGKISEADKKKVLDKCQEVISWLDANT-
-LAEKDEFEHKRKELEQVCNPIISGLYQGAGGPGPGGFGAQGPKGGSGSGPTIEEVD----
-------------------------------------------------------------
--------------------------------------------------------
-;HUMMHHSPHO.PE1          642 residues Frame 0 Code 0
-;DEFINITION  Human MHC class III HSP70-HOM gene (HLA), complete cds.
-;ACCESSION   M59829 M34268
-;     CDS             960..2885
-;                     /gene="HSP70-HOM"
-;                     /codon_start=1
-;                     /product="heat shock-induced protein"
-;                     /db_xref="PID:g188492"
-Homo-HOM
------------MATAKGIAIGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVAMNPQNTVFDAKRLIGRKFNDPVVQADMKLWPFQVINEG-GKPKVL
-VSYK-----GENKAFYPEEISSMVLTKLKETA-EAFLG--HPVTNAVITVPAYFNDSQRQ
-ATKDAGVIAGLNVLRIINEPTAAAIAYGLDKGG----QGERHVLIFDLGGGTFDVSILTI
-DDG--IFEVKATAGDTHLGGEDFDNRLVSHFVEEFKRKHK------------KDISQNKR
-AVRRLRTACERAKRTLSS-STQANLEIDSLYEGIDFY----TSITRARFEELCADLFRGT
-LEPVEKALRDA-------KMDKAKIHDIVLVGGSTRIPKVQRL-LQDYFNGRDLNKSINP
-DEAV-AYGAAVQAAILMGDKSE----K-VQDLLLLDVAPLSLGLETVGGVMTALIKRNST
-IPPKQTQIF-TTYSDNQPGVLIQVYEGER-AMTKDNNLLGR----FDLTGIPPAPRG-VP
-QIEVTFDIDANGIL-NVTATDKS-TGKVNKITITNDKGRLSKE-EIERMVLDAEKYKAED
-EVQREKIAAKNALESYAFNM--KSVVSDE-GLKGKISESDKNKILDKCNELLSWLEVNQ-
-LAEKDEFDHKRKELEQMCNPIITKLYQGGCTGPACGTGYVPGRPATGPTIEEVD------
-------------------------------------------------------------
--------------------------------------------------------
-;MUSHP7A2.HSP70A1        642 residues Frame 0 Code 0
-;DEFINITION  Mouse heat shock inducible (hsp70A1) gene, complete cds.
-;ACCESSION   M76613
-;     CDS             1040..2965
-;                     /gene="hsp70A1"
-;                     /note="putative"
-;                     /citation=[2]
-;                     /codon_start=1
-;                     /function="heat shock induced protein"
-;                     /product="hsp70A1"
-;                     /db_xref="PID:g193983"
-Mus-A1
--------------MAKNTAIGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVALNPQNTVFDAKRLIGRKFGDAVVQSDMKHWPFQVVNDG-DKPKVQ
-VNYK-----GESRSFFPEEISSMVLTKMKEIA-EAYLG--HPVTNAVITVPAYFNDSQRQ
-ATKDAGVIAGLNVLRIINEPTAAAIAYGLDRTG----KGERNVLIFDLGGGTFDVSILTI
-DDG--IFEVKATAGDTHLGGEDFDNRLVSHFVEEFKRKHK------------KDISQNKR
-AVRRLRTACERAKRTLSS-STQASLEIDSLFEGIDFY----TSITRARFEELCSDLFRGT
-LEPVEKALRDA-------KMDKAQIHDLVLVGGSTAIPKVQKL-LQDFFNGRDLNKSINP
-DEAV-AYGAAVQAAILMGDKSE----N-VQDLLLLDVAPLSLGLETAGGVMTALIKRNST
-IPTKQTQTF-TTYSDNQPGVLIQVYEGER-AMTRDNNLLGR----FELSGIPPAPRG-VP
-QIEVTFDIDANGIL-NVTATDKS-TGKANKITITNDKGRLSKE-EIERMVQEAERYKAED
-EVQRDRVAAKNALESYAFNM--KSAVEDE-GLKGKLSEADKKKVLDKCQEVISWLDSNT-
-LADKEEFVHKREELERVCSPIISGLYQGAGAPGAGGFGAQAPKGASGSGPTIEEVD----
-------------------------------------------------------------
--------------------------------------------------------
-;CAHSP70.PE1             639 residues Frame 0 Code 0
-;DEFINITION  C.aethiops mRNA for heat shock protein 70.
-;ACCESSION   X70684
-;     CDS             181..2097
-;                     /codon_start=1
-;                     /product="heat shock protein 70"
-;                     /db_xref="PID:g22782"
-Cercopithecus
--------------MAKAAAIGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVALNPQNTVFDAKRLIGRKFGDPVVQSDMKHWPFQVINDG-DKPKVQ
-VSYK-----GETKAFYPEEISSMVLTKMKEIA-EADLG--YPVTNAVITVPAYFNDSQRQ
-ATKDAGVIAGLNVLRIINEPTR-TIAYALDRTG----KGERNVLIFDLGGGTFDVSILTI
-DDG--IFEVKATAGDTTWV-EDFDNRLVNHFVEEFKRKHK------------KDISQNKR
-AVRRLRTACERAKRTLSS-STQASLEIDSLFEGIDFY----TSITRARFEELCSDLFRST
-LEPVEKALRDA-------KLDKAQIHDLVLVGGSTRIPKVQKL-LQDFFNGRDLNKSINP
-DEAV-AYGAAVQAAILMGDKSE----N-VQDLLLLDVAPLSLGLETPGGVMTALIKRNST
-IPTKQTQIF-TTYSDNQPGVLIQVYEGER-AMTKDNNLLGR----FELSGIPPAP-G-VP
-QIEVTFEIDANGIL-NVTATDKS-TGKANKITITNDKGRLSKE-EIERMVQEAEKYKAED
-EVQRERVSAKNALESYALNM--KSAVEDE-GLKGKISEADKKKVLDKCQEVISWLDANT-
-LAEKDEFEHKRKELEQVCNPIISGLYQGGGGPGPGGFGAQGPKGGSGSGPTIEEVD----
-------------------------------------------------------------
--------------------------------------------------------
-;MUSHSC70T.HSC70T        642 residues Frame 0 Code 0
-;DEFINITION  Mouse heat shock protein 70 (Hsc70t) gene, complete cds.
-;ACCESSION   L27086
-;     CDS             1..1926
-;                     /gene="Hsc70t"
-;                     /codon_start=1
-;                     /product="heat shock protein 70"
-;                     /db_xref="PID:g457300"
-Mus-t
------------MAANKGMAIGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVAMNPQNTVFDAKRLIGRKFNDPVVQSDMKLWPFQVINEA-GKPKVM
-VSYK-----GEKKAFYPEEISSMVLTKMKETA-EAFLG--HNVTNAVITVPAYFNDSQRQ
-ATKDAGVIAGLNVLRIINEPTAAAIAYGLDKGS----HGERHVLIFDLGGGTFDVSILTI
-DDG--IFEVKATAGDTHLGGEDFDNRLVSHFVEEFKRKHK------------KDISQNKR
-AVRRLRTACERAKRTLSS-STQANLEIDSLYEGIDFY----TSITRARFEELCADLFRGT
-LEPVEKSLRDA-------KMDKAKIHDIVLVGGSTRIPKVQKL-LQDYFNGRDLNKSINP
-DEAV-AYGAAVQAAILMGDKSE----K-VQDLLLLDVAPLSLGLETAGGVMTVLIKRNST
-IPTKQTQIF-TTYSDNQPGVLIQVYEGER-AMTRDNNLLGR----FDLTGIPPAPRG-VP
-QIEVTFDIDANGIL-NVTAMDKS-TGKANKITITNDKGRLSKE-EIERMVQEAERYKAED
-EGQREKIAAKNALESYAFNM--KSAVGDE-GLKDKISESDKKKILDKCNEVLSWLEANQ-
-LAEKDEFDHKRKELENMCNPIITKLYQSGCTGPTCTPGYTPGRAATGPTIEEVD------
-------------------------------------------------------------
--------------------------------------------------------
-;MUSHSP7A2.PE1           643 residues Frame 0 Code 0
-;DEFINITION  Mouse heat shock protein 70.1 (hsp70.1) gene, complete cds.
-;ACCESSION   M35021
-;     CDS             806..2734
-;                     /note="hsp70.1"
-;                     /codon_start=1
-;                     /db_xref="PID:g387211"
-Mus-1
--------------MAKNTAIGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVALNPQNTVFDAKRLIGRKFGDAVVQSDMKHWPFQVVNDG-DKPKVQ
-VNYK-----GESRSFFPEEISSMVLTKMKEIA-EAYLG--HPVTNAVITVPAYFNDSQRQ
-ATKDAGVIAGLNVLRIINEPTAAAIAYGLDRTG----KGERNVLIFDLGGGTFDVSILTI
-DDG--IFEVKATAGDTHLGGEDFDNRLVSHFVEEFKRKHK------------KDISQNKR
-AVRRLRTACERAKRTLSS-STQASLEIDSLFEGIDFY----TSITRARFEELCSDLFRGT
-LEPVEKALRDA-------KMDKAQIHDLVLVGGSTRIPKVQKL-LQDFFNGRDLNKSINP
-DEAV-AYGAAVQAAILMGDKSE----N-VQDLLLLDVAPLSLGLETAGGVMTALIKRNST
-IPTKQTQTF-TTYSDNQPGVLIQVYEGER-AMTRDNNLLGR----FELSGIPPAPRG-VP
-QIEVTFDIDANGIL-NVTATDKS-TGKANKITITNDKGRLSKE-EIERMVQEAERYKAED
-EVQRDRVAAKNALESYAFNM--KSAVEDE-GLKGKLSEADKKKVLDKCQEVISWLDSNT-
-LADKEEFVHKREELERVCSPIISGLYQGAGAPGAGGFGAQAPPKGASGSGPTIEEVD---
-------------------------------------------------------------
--------------------------------------------------------
-;MUSHSPCA.PE1            647 residues Frame 0 Code 0
-;DEFINITION  Mouse heat shock protein 70 cognate mRNA, complete cds.
-;ACCESSION   M19141
-;     CDS             66..2006
-;                     /note="heat shock protein 70 cognate"
-;                     /codon_start=1
-;                     /db_xref="PID:g309319"
-Mus-mRNA
--------------MSKGPAVGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVAMNPTNTVFDAKRLIGRRFDDAVVQSDMKHWPFMVVNDA-GRPKVQ
-VEYK-----GETKSFYPEEVSSMVLTKMKEIA-EAYLG--KTVTNAVVTVPAYFNDSQRQ
-ATKDAGTIAGLNVLRIINEPTAAAIAYGLDKKV----GAERNVLIFDLGGGTFDVSILTI
-EDG--IFEVKSTAGDTHLGGEDFDNRMVNHFIAEFKRKHK------------KDISENKR
-AVRRLRTACERAKRTLSS-STQASIEIDSLYEGIDFY----TSITRARFEELNADLFRGT
-LDPVEKALRDA-------KLDKSQIHDIVLVGGSTRIPKIQKL-LQDFFNGKELNKSINP
-DEAV-AYGAAVQAAILSGDKSE----N-VQDLLLLDVTPLSLGIETAGGVMTVLIKRNTT
-IPTKQTQTL-TTYSDNQPGVLIQVYEGER-AMTKDNNLLGK----FELTGIPPAPRG-VP
-QIEVTFDIDANGIL-NVSAVDKS-TGKENKITITNDKGRLSKE-DIERMVQEAEKYKAED
-EKQRDKVSSKNSLESYAFNM--KATVEDE-KLQGKINDEDKQKILDKCNEIISWLDKNQ-
-TAEKEEFEHQQKELEKVCNPIITKLYQSAGGMPGGMPGGFPGGGAPPSGGASSGPTIEEV
-D-----------------------------------------------------------
--------------------------------------------------------
-;RNHSP70.HSP70.1         642 residues Frame 0 Code 0
-;DEFINITION  R.norvegicus hsp70 gene for heat shock protein 70.
-;ACCESSION   X74271
-;     CDS             2146..4071
-;                     /gene="hsp70.1"
-;                     /citation=[1]
-;                     /codon_start=1
-;                     /product="heat shock protein 70"
-;                     /db_xref="PID:g396270"
-Rattus.1
--------------MAKKTAIGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVALNPQNTVFDANGLIGRKFGDPVVQSDMKHWPFQVVNDG-DKPKVQ
-VNYK-----GENRSFYPEEISSMVLTKMKEIA-EAYLG--HPVTNAVITVPAYFNDSQRQ
-ATKDAGVIAGLNVLRIINEPTAAAIAYGLDRTG----KGERNVLIFDLGGGTFDVSILTI
-DDG--IFEVKATAGDTHLGGEDFDNRLVSHFVEEFKRKHK------------KDISQNKR
-AVRRLRTACERAKRTLSS-STQASLEIDSLFEGIDFY----TSITRARFEELCSDLFRGT
-LEPVEKALRDA-------KLDKAQIHDLVLVGGSTRIPKVQKL-LQDFFNGRDLNKSINP
-DEAV-AYGAAVQAAILMGDKSE----N-VQDLLLLDVAPLSLGLETAGAVMTALIKRNST
-IPTKQTQTF-TTYSDNQPGVLIQVYEGER-AMTRDNNLLGR----FELSGIPPAPRG-VP
-QIEVTFDIDANGIL-NVTATDKS-TGKANKITITNDKGRLSKE-EIERMVQEAERYKAED
-EVQRERVAAKNALESYAFNM--KSAVEDE-GLKGKISEADKKKVLDKCQEVISWLDSNT-
-LAEKEEFVHKREELERVCNPIISGLYQGAGAPGAGGFGAQAPKGGSGSGPTIEEVD----
-------------------------------------------------------------
--------------------------------------------------------
-;RNHSC73.PE1             647 residues Frame 0 Code 0
-;DEFINITION  Rat gene for hsc73 , the major hsp70-like protein.
-;ACCESSION   Y00054
-;     CDS             join(1039..1243,1507..1712,1829..1981,2062..2617,
-;                     2831..3033,3249..3447,3533..3765,4022..4207)
-;                     /codon_start=1
-;                     /product="hsc73"
-;                     /db_xref="PID:g56379"
-;                     /db_xref="SWISS-PROT:P08109"
-Rattus-hsc73
--------------MSKGPAVGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVAMNPTNTVFDAKRLIGRRFDDAVVQSDMKHWPFMVVNDA-GRPKVQ
-VEYK-----GETKSFYPEEVSSMVLTKMKEIA-EAYLG--KTVTNAVVTVPAYFNDSQRQ
-ATKDAGTIAGLNVLRIINEPTAAAIAYGLDKKV----GAERNVLIFDLGGGTFDVSILTI
-EDG--IFEVKSTAGDTHLGGEDFDNRMVNHFIAEFKRKHK------------KDISENKR
-AVRRLRTACERAKRTLSS-STQASIEIDSLYEGIDFY----TSITRARFEELNADLFRGT
-LDPVEKALRDA-------KLDKSQIHDIVLVGGSTRIPKIQKL-LQDFFNGKELNKSINP
-DEAV-AYGAAVQAAILSGDKSE----N-VQDLLLLDVTPLSLGIETAGGVMTVLIKRNTT
-IPTKQTQTF-TTYSDNQPGVLIQVYEGER-AMTKDNNLLGK----FELTGIPPAPRG-VP
-QIEVTFDIDANGIL-NVSAVDKS-TGKENKITITNDKGRLSKE-DIERMVQEAEKYKAED
-EKQRDKVSSKNSLESYAFNM--KATVEDE-KLQGKINDEDKQKILDKCNEIISWLDKNQ-
-TAEKEEFEHQQKELEKVCNPIITKLYQSAGGMPGGMPGGFPGGGAPPSGGASSGPTIEEV
-D-----------------------------------------------------------
--------------------------------------------------------
-;RNHSP701.HSP70-1        642 residues Frame 0 Code 0
-;DEFINITION  R.norvegicus Hsp70-1 gene.
-;ACCESSION   X77207
-;     CDS             126..2051
-;                     /gene="Hsp70-1"
-;                     /codon_start=1
-;                     /product="heat shock protein 70"
-;                     /db_xref="PID:g450930"
-;                     /db_xref="SWISS-PROT:Q07439"
-Rattus-1
--------------MAKKTAIGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVALNPQNTVFDAKRLIGRKFGDPVVQSDMKHWPFQVVNDG-DKPKVQ
-VNYK-----GENRSFYPEEISSMVLTKMKEIA-EAYLG--HPVTNAVITVPAYFNDSQRQ
-ATKDAGVIAGLNVLRIINEPTAAAIAYGLDRTG----KGERNVLIFDLGGGTFDVSILTI
-DDG--IFEVKATAGDTHLGGEDFDNRLVSHFVEEFKRKHK------------KDISQNKR
-AVRRLRTACERAKRTLSS-STQASLEIDSLFEGIDFY----TSITRARFEELCSDLFRGT
-LEPVEKALRDA-------KLDKAQIHDLVLVGGSTRIPKVQKL-LQDFFNGRDLNKSINP
-DEAV-AYGAAVQAAILMGDKSE----N-VQDLLLLDVAPLSLGLETAGGVMTALIKRNST
-IPTKQTQTF-TTYSDNQPGVLIQVYEGER-AMTRDNNLLGR----FELSGIPPAPRG-VP
-QIEVTFDIDANGIL-NVTATDKS-TGKANKITITNDKGRLSKE-EIERMVQEAERYKAED
-EVQRERVAAKNALESYAFNM--KSAVEDE-GLKGKISEADKKKVLDKCQEVISWLDSNT-
-LAEKEEFVHKREELERVCNPIISGLYQGAGAPGAGGFGAQAPKGGSGSGPTIEEVD----
-------------------------------------------------------------
--------------------------------------------------------
-;RNHSP703.HSP70-3        642 residues Frame 0 Code 0
-;DEFINITION  R.norvegicus Hsp70-3 gene.
-;ACCESSION   X77209
-;     CDS             272..2197
-;                     /gene="Hsp70-3"
-;                     /codon_start=1
-;                     /product="heat shock protein 70"
-;                     /db_xref="PID:g450934"
-Rattus-3
------------MAANKGMAIGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVAMNPQNTVFDAKRLIGRKFNDPVVQSDMKLWPFQVINEA-GKPKVL
-VSYK-----GEKKAFYPEEISSMVLTKMKETA-EAFLG--HSVTNAVITVPAYFNDSQRQ
-ATKDAGVIAGLNVLRIINEPTAAAIAYGLDKGS----HGERHVLIFDLGGGTFDVSILTI
-DDG--IFEVKATAGDTHLGGEDFDNRLVSHFVEEFKRKHK------------KDISQNKR
-AVRRLATACERAKRTLSS-STQANLEIDSLYEGIDFY----TSITRARFEELCADLFRGT
-LEPVEKSLRDA-------KMDKAKIHDIVLVGGSTRIPKVQKL-LQDYFNGRDLNKSINP
-DEAV-AYGAAVQAAILMGDKSE----K-VQDLLLLDVAPLSLGLETAGGVMTVLIKRNST
-IPTKQTQIF-TTYSDNQPGVLIQVYEGER-AMTRDNNLLGR----FDLTGIPPAPRG-VP
-QIEVTFDIDANGIL-NVTAMDKS-TGKANKITITNDKGRLSKE-EIERMVQEAERYKAED
-EGQREKIAAKNALESYAFNM--KSAVGDE-GLKDKISESDKKKILDKCSEVLSWLEANQ-
-LAEKEEFDHKRKELENMCNPIITKLYQSGCTGPTCAPGYTPGRARTGPTIEEVD------
-------------------------------------------------------------
--------------------------------------------------------
-;RATHSP70A.HSP70         642 residues Frame 0 Code 0
-;DEFINITION  Rattus norvegicus heat shock protein 70 (HSP70) mRNA, complete cds.
-;ACCESSION   L16764
-;     CDS             178..2103
-;                     /gene="HSP70"
-;                     /codon_start=1
-;                     /product="heat shock protein 70"
-;                     /db_xref="PID:g294568"
-Rattus-mRNA
--------------MAKKTAIGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVALNPQNTVFDAKRLIGRKFGDPVVQSDMKHWPFQVVNDG-DKPKVQ
-VNYK-----GENRSFYPEEISSMVLTKMKEIA-EAYLG--HPVTNAVITVPAYFNDSQRQ
-ATKDAGVIAGLNVLRIINEPTAAAIAYGLDRTG----KGERNVLIFDLGGGTFDVSILTI
-DDG--IFEVKATAGDTDLGGEDFDNRLVSHFVEEFKRKHK------------KDISQNKR
-AVRRLRTACERAKRTLSS-STQASLEIDSLFEGIDFY----TSITRARFEELCSDLFRGT
-LEPVEKALRDA-------KLDKAQIHDLVLVGGSTRIPKVQKL-LQDFFNGRDLNKSINP
-DEAV-AYGAAVQAAILMGDKSE----N-VQDLLLLDVAPLSLGLETAGGVMTALIKRNST
-IPTKQTQTF-TTYSDNQPGVLIQVYEGER-AMTRDNNLLGR----FELSGIPPAPRG-VP
-QIEVTFDIDANGIL-NVTATDKS-TGKANKITITNDKGRLSKE-EIERMVQEAERYKAED
-EVQRERVAAKNALESYAFNM--KSAVEDE-GLKGKISEADKKKVLDKCQEVISWLDSNT-
-LAEKEEFVHKREELERVCNPIISGLYQGAGAPGAGGFGAQAPKGGSGSGPTIEEVD----
-------------------------------------------------------------
--------------------------------------------------------
-;RNHS70P.HSP-70          642 residues Frame 0 Code 0
-;DEFINITION  R.norvegicus (Wistar) hsp70 gene for heat shock protein 70.
-;ACCESSION   X75357
-;     CDS             502..2427
-;                     /gene="hsp 70"
-;                     /codon_start=1
-;                     /product="heat shock protein 70"
-;                     /db_xref="PID:g407164"
-rattus
--------------MAKKTAIGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVALNPQNTVFDANGLIGRKFGDPVVQSDMKHWPFQVVNDG-DKPKVQ
-VNYK-----GKNRSFYPEEISSMVLTKMKEIA-EAYLG--HPVTNAVITVPAYFNDSQRQ
-ATKDAGVIAGLNVLRIINEPTAAAIAYGLDRTG----KGERNVLIFDLGGGRFDVSILTI
-DDG--IFEVKATAGDTHLGGEDFDNRLVSHFVEEFKRKHK------------KDISQNKR
-AVRPLADGVERAKRTLSS-STQASLEIDSLFEGIDFY----TSITRARFEELCSDLFRGT
-LEPVEKALRDA-------KLDKAQIHDLVLVGGSTRIPKVQKL-LQDFFNGRDLNKSINP
-DEAV-AYGAAVQAAILMGDKSE----N-VQDLLLLDVAPLSLGLETAGGVMTALIKRNST
-IPTKQTQTF-TTYSDNQPGVLIQVYEGER-AMTRDNNLLGR----FELSGIPPAPRG-VP
-QIEVTFDIDANGIL-NVTATDKS-TGKANKITITNDKGRLSKE-EIERMVQEAERYKAED
-EVQRERVAAKNALESYAFNM--KSAVEDE-GLKGKISEADKKKVLDKCQEVISWLDSNT-
-LAEKEEFVHKREELERVCNPIISGLYQGAGAPGAGGFGAQAPKGGSGSGPTIEEVD----
-------------------------------------------------------------
--------------------------------------------------------
-;SSHSP70.HSP70           644 residues Frame 0 Code 0
-;DEFINITION  S.scrofa mRNA for heat shock protein 70.
-;ACCESSION   X68213
-;     CDS             106..2037
-;                     /gene="Hsp70"
-;                     /codon_start=1
-;                     /product="heat shock protein 70"
-;                     /db_xref="PID:g1978"
-;                     /db_xref="SWISS-PROT:Q04967"
-Sus
------------MSAAREVAIGIDLGTTYSCVGVFQHGRVEILANDQGNRTTPSYVAFT-D
--TERLVGDAAKSQAALNPQNTVFDAKRLIGRKFADPTVQSDLKHWPFQVVSEG-GKPKVR
-VSYR-----GEDKAFYPEEISSMVLSKMKETA-EAYLG--QPVRHAVITVPAYFNDSQRQ
-ATKDAGAIAGLNVLRIINEPTAAAIAYGLDRRG----AGERNVLIFDLGGGTFDVSVLTI
-DAG--VFEVKATAGDTHLGGEDFDNRLVNHFMEEFRRKHR------------KDLSRNKR
-ALRRLRTACERAKRTLSS-STQATLEIDSLFEGVDFY----TSITRARFEELCSDLFRST
-LEPVEKALRDA-------KLDKAQIHDIVLVGGSTRIPKIQKL-LQDFFNGRELNKSINP
-DEAV-AYGAAVQAAVLMGDKCE----K-VQDLLLLDVAPLSLGLETAGGVMTTLIQRNAT
-IPTKQTQTF-TTYSDNQPGVLIQVYEGER-AMTRDNNLLGR----FELSGIPPAPRG-VP
-QIEVTFDIDANGIL-SVTATDRS-TGRANKITITNDKGRLSKE-EVERMVREADEYKVED
-EAQRDRVAAKNSLEAYVFHV--KGSLHEE-SLRDKIPEEDRCKVQDKCQEVLTWLEHNQ-
-LAEKEEYEHQKRELEQICRPIFSRLYGAPGIPGGSSCGAQARQGAPSTGPVIEEVD----
-------------------------------------------------------------
--------------------------------------------------------
-;BOVHSPIII.PE1           632 residues Frame 0 Code 0
-;DEFINITION  Bos taurus 70 kDa heat shock protein-3 (HSP70-3) gene, complete
-;            cds.
-;ACCESSION   L10428
-;     CDS             492..2387
-;                     /standard_name="HSP70-3"
-;                     /note="putative"
-;                     /citation=[1]
-;                     /codon_start=1
-;                     /product="70 kDa heat shock protein"
-;                     /db_xref="PID:g163161"
-Bos
-------------MSARGPAIGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFT-D
--TERLIGTAAKNQVAMNPTNTIFDAKRLIGRKFEDATVQSDMKHWPFRVVSEG-GKPKVQ
-VEYK-----GEIKTFFPEEISSMVLTKMKEIA-EAYLG--GKVQSAVITVPAYFNDSQRQ
-ATKDAGTITGLNVLRIINEPTAAAIAYGLDKKGC--AGGEKNVLIFDLGGGTFDVSILTI
-EDG--IFEVKSTAGDTHLGGEDFDNRMVSHWAEEFKRKHK------------KDI-----
-APARLRTACERAKRTLSS-STQASIEIDSLYEGVDFY----TSITRARFEELNADLFRVP
-LEPVEKALRDA-------KLDKGQIQEIVLVGGSTRIPKIQKL-LQDFFNGKELNKSINP
-DEAV-AYGAAVQAAILIGDKSE----N-VQDLLLLDVTPLSLGIETAGGVMTPLIKRNTT
-IPTKQTQTF-TTYSDNQSSVLVQVYEGER-AMTKDNNLLGK----FDLTGIPPAPRG-VP
-QIEVTFDIDANGIL-NVTAADKS-TGKENKITITNDKGCLSKD-DIDRMVQEAERYKSED
-EANRDRVAAKNAVESYTYNI--KQTVEDE-KLRGKISDQDKNKILDKCQEVINWLDRNQ-
-MAEKDEYEHKQKELERVCNPIISKLYQGGPGGGGGSGASGGPTIEEVD------------
-------------------------------------------------------------
--------------------------------------------------------
-;BTU02892.HSP70-2        642 residues Frame 0 Code 0
-;DEFINITION  Bos taurus Angus 70 kda heat shock protein-2 (HSP70-2) gene,
-;            complete cds.
-;ACCESSION   U02892
-;     CDS             427..2352
-;                     /gene="HSP70-2"
-;                     /codon_start=1
-;                     /product="70 kda heat shock protein-2"
-;                     /db_xref="PID:g414975"
-Bos-2
--------------MAKNTAIGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVALNPQNTVFDAKRLIGRKFGDPVVQSDMKHWPFRVINDG-DKPKVQ
-VSYK-----GETKAFYPEEISSMVLTKMKEIA-EAYLG--HPVTNAVITVPAYFNDSQRQ
-ATKDAGVIAGLNVLRIINEPTAAAIAYGLDRTG----KGERNVLIFDLGGGTFDVSILTI
-DDG--IFEVKATAGDTHLGGEDFDNRLVNHFVEEFKRKHK------------KDISQNKR
-AVRRLRTACERAKRTLSS-STQASLEIDSLFEGIDFY----TSITRARFEELCSDLFRST
-LEPVEKALRDA-------KLDKAQIHDLVLVGGSTRIPKVQKL-LQDFFNGRDLNKSINP
-DEAV-AYGAAVQAAILMGDKSE----N-VQDLLLLDVAPLSLGLETAGGVMTALIKRNST
-IPTKQTQIF-TTYSDNQPGVLIQVYEGER-AMTRDNNLLGR----FELSGIPPAPRG-VP
-QIEVTFDIDANGIL-NVTATDKS-TGKANKITITNDKGRLSKE-EIERMVQEAEKYKAED
-EVQRERVSAKNALESYAFNM--KSAVEDE-GLKGKISEADKKKVLDKCQEVISWLDANT-
-LAEKDEFEHKRKELEQVCNPIISRLYQGAGGPGAGGFGAQGPKGGSGSGPTIEEVD----
-------------------------------------------------------------
--------------------------------------------------------
-;BTU09861.HSP70          642 residues Frame 0 Code 0
-;DEFINITION  Bos taurus 70 kDA heat-shock protein (hsp70) mRNA, complete cds.
-;ACCESSION   U09861
-;     CDS             157..2082
-;                     /gene="hsp70"
-;                     /note="inducible Hsp70"
-;                     /codon_start=1
-;                     /product="70 kDa heat-shock protein"
-;                     /db_xref="PID:g497938"
-Bos-mRNA
--------------MAKNMAIGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVALNPQNTVFDAKRLIGRKFGDPVVQSDMKEWPFRVINDG-DKPKVQ
-VSYK-----GETKAFYPEEISSMVLTKMKEIA-EAYLG--HPVTNAVITVPAYFNDSQRQ
-ATKDAGVIAGLNVLRIINEPTAAAIAYGLDRTG----KGERNVLIFDLGGGTFDVSILTI
-DDG--IFEVKATAGDTHLGGEDFDNRLVNHFVEEFKRKHK------------KDISQNKR
-AVRRLRTACERAKRTLSS-STQASLEIDSLFEGIDFY----TSITRARFEELCSDLFRST
-LEPVEKALRDA-------KLDKAQIHDLVLVGGSTRIPKVQKL-LQDFFNGRDLNKSINP
-DEAV-AYGAAVQAAILMGDKSE----N-VQDLLLLDVAPLSLGLETAGGVMTALIKRNST
-IPTKQTQIF-TTYSDNQPGVLIQVYEGER-AMTRDNNLLGR----FELSGIPPAPRG-VP
-QIEVTFDIDANGIL-NVTATDKS-TGKANKITITNDKGRLSKE-EIERMVQEAEKYKAED
-EVQRERVSAKNALESYAFNM--KSAVEDE-GLKGKISEADKKKVLDKCQEVISWLDANT-
-LAEKDEFEHKRKELEQVCNPIISRLYQGAGGPGAGGFGAQGPKGGSGSGPTIEEVD----
-------------------------------------------------------------
--------------------------------------------------------
-;PWHSP70MR.HSP70         646 residues Frame 0 Code 0
-;DEFINITION  Pleurodeles waltl mRNA for HSP70.
-;ACCESSION   X71951
-;     CDS             86..2023
-;                     /gene="hsp70"
-;                     /codon_start=1
-;                     /product="heat shock protein HSP70"
-;                     /db_xref="PID:g431201"
-Pleurodeles
------------MSAPKGVAFGIDLGTTYSCVGVFQHGKVEIIANNQGNRTTPSYVAFT-D
--TERLIGAPAKNQVSLNPQNTVFDAKRLIGRKFNDTVVQADMKHWPFKVVS-DEWKPKVQ
-VEYK-----GDNKTFFPDEVSSMVLIKMKEIA-EAYLG--HLVSNAVITVPSYLTASQRQ
-ATKDAGVLAGLNVLSIVNEPTAAAIAYDLDKAG----RGELNVLIFDLGGGTFDVSILTI
-DDG--IFEVKATAGDTHLGGEDFDNRMVNHFHEPFKRKHK------------KDITKNKR
-AVRRLRTACERAKRTLSS-STQASIEIDSLFEGIDFY----TSITRARFEELCADLFRGP
-LEPVEKALRDA-------KLDKAQIHEIVLVGGSTRIPKIQKL-LQDFFNGRELNKSINP
-DEAV-AYGAAVQAAILMGDKSEN-----LQDLLLLDVAPLSLGLETAGGVMTVLIKRNST
-IPTKQTQIF-TTYSDNQPGVLIQVYEGER-AMTKDNSLLGK----FELSGIPPAPRG-VP
-QIEVTFDIDANGIL-NVSAVDKS-SGKQNKITITNDKGRLSKE-EIERMVQEAERYKADD
-EAQREKVSAKNTLESIAFNM--KSTVEGD-NLKDKISEDDRKKIVDKCNQTISWMENNQ-
-MAEKEEYEHQQKELEKVCNSIITKLYQGG--------------MPGGMPSGSSG------
----------A---QARQG--------SSSTGPTIEEVD----------------------
--------------------------------------------------------
-;OTU35064.HSP70          645 residues Frame 0 Code 0
-;DEFINITION  Oncorhynchus tschawytscha heat shock protein 70 (HSP70) mRNA,
-;            complete cds.
-;ACCESSION   U35064
-;     CDS             46..1980
-;                     /gene="HSP70"
-;                     /codon_start=1
-;                     /product="heat shock protein 70"
-;                     /db_xref="PID:g1006833"
-Oncorhynchus
------------MSSAKGPSIGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVAMNPNNTVFDAKRLIGRKFNDQVVQADMKHWPFKVVSDG-GKPKVQ
-VDYK-----GENKSFNPEEISSMVLVKMREIA-EAYLG--QKVSNAVITVPAYFNDSQRQ
-ATKDAGVIAGLNVLRIINEPTAAAIAYGMDKGM----SRERNVLIFDLGGGTFDVSILTI
-EDG--IFEVKATAGDTHLGGEDFDNRLVSHFVEEFKRKHK------------KDISQNKR
-ALRRLRTACERAKRTLSS-SSQASIEIDSLFEGIDFY----TSITRARFEEMCSDLFRGT
-LEPVEKALRDA-------KMDKAQIHDVVLVGGSTRIPKVQKL-LQDFFNGRELNKSINP
-DEAV-AYGAAIQAAILSGDKSE----N-VQDLLLLDVAPLSLGIETAGGVMTALIKRNTT
-IPSKQTQTF-TTYSDNQPGVMIQVYEGER-AMTKDNNLLGK----FELSGIPPAPRG-VP
-QIEVTFDIDANGIL-NVSAVDKS-TGKENKITITNDKGRLSKE-DIERMVQDADKYKAED
-DAQREKIAAKNSLESYAFNM--KSSVEDD-NMKGKISQEDKKKVVDRCDQTISWLENNQ-
-LGDKEEYEHQLKELEKVCQPIITKLYQQGGMPTGCCGDQARTSSGDSSQGPTIEEID---
-------------------------------------------------------------
--------------------------------------------------------
-;IPU22460.PE1            650 residues Frame 0 Code 0
-;DEFINITION  Ictalurus punctatus heat shock protein 70 (CF Hsp70) mRNA, complete
-;            cds.
-;ACCESSION   U22460
-;     CDS             36..1985
-;                     /gene="CF Hsp70"
-;                     /codon_start=1
-;                     /product="heat shock protein 70"
-;                     /db_xref="PID:g761725"
-Ictalurus
--------------MSKGPAVGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFT-D
--SERLIGDAAKNQVAMNPTNTIFDAKRLIGRRFEDSVVQADMKHWPFKVISDG-GRPRLE
-VEYK-----GEAKNFYPEEISSMVLVKMKEIA-EAYLG--KSINNAVITVPAYFNDSQRQ
-RTKDAGTISGLNVLRIINEPTAAAIAYGLDKKV----GSERNVLIFDLGGGTFDVSILTI
-EDG--IFDLKSTAGDTHLGGEDFDNRMVNHFIAEFKRKHK------------KDISDNKR
-AVRRLATACERAKRTLSS-STQASIEIDSLYEGVDFY----TSITRARFEELNADLFRGT
-LDPVEKALRDA-------KMDKAQVHDIVLVGGSTRIPKMEKL-LQDFFNGKELNKSINP
-DEAV-AYGAAVQAESSLGDKSE----N-VQDLVLLDVTPLSLGIETAGGVMTVLIKRNTT
-IPTKQTQTF-TTYSDNQPGVLIQVYEGER-AMTKDNNLLGK----FELTGIPPAPRG-VP
-QIEVTFDIDANGIM-NVSAVDKS-TGKENKITITNDKGRLSKE-DIERMVQEAEKYKAED
-DVQRDKVSAKNGLESYAFNM--KSTVEDE-KLKGKISDEDKHKILDKCNEVISWLDKNQ-
-TAEKDEYEHQQKDLEKVCNPIITKLYQSDGGMPGGMPDGMPGGFQELGAAPGGGSSGPTI
-EEVD--------------------------------------------------------
--------------------------------------------------------
-;BSU51901.HPS70.1        630 residues Frame 0 Code 0
-;DEFINITION  Botryllus schlosseri heat shock protein 70 (HSP70.1) gene, complete
-;            cds.
-;ACCESSION   U51901
-;     CDS             1507..3396
-;                     /gene="HPS70.1"
-;                     /note="heat-inducible"
-;                     /codon_start=1
-;                     /product="heat shock protein 70"
-;                     /db_xref="PID:g1518938"
-Botryllus.1
-----------------MPAIGIDLGTTYSCVGVYQHGKVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVAMNPTNTVFDAKRLIGRKFNDSTVQSDKKHWSFNVIADG-DKPKIE
-VEFK-----GEKKRFFAEEISSMVLTKMKETA-EAYLG--QGVTDAVITVPAYFNDSQRQ
-ATKDAAVIAGLNVLRIINEPTAAAIAYGLDKKT-----SERNILIFDLGGGTFDVSVLTI
-DSG--IFEVKATRGDTHLGGEDFDNRMVNHFVQEFRRKYK------------KDLTVNKR
-AVRRLRTACDRAKRTLPS-SPQARIEIDSLFEGIDFY----SSITRARFEELCSDLFRQT
-LDPVEQGLRDS-------KLDKGKIDEIVLVGGSTRIPKIQKL-LRDFFNGKDLNKLLNP
-DEAV-AYGAAVQAAILSGDQSE----Q-VKDVLLLDVAPLSLGIETAGGVMTTLIKRGTT
-IPAKQSQVF-TTYSDNQPAVXIQVYEGER-ALTKDNNLLGK----FDLTGLPPAPRG-VP
-QIEVAFNVDQNGIM-NVSASDKS-SGKSQNITISNDKGRLSKD-EIERMVQEASKYKEAD
-DRERERIQAKNSLESYIFNVI-KASVEDD-KVGGKLSAEDKKTILDKCSESLSWLDNNH-
-TAENEEYEYQQKELENVPTTILPKLHQGHSADPNGSNATGPTVEEVD-------------
-------------------------------------------------------------
--------------------------------------------------------
-;BSU51902.HSP70.2        629 residues Frame 0 Code 0
-;DEFINITION  Botryllus schlosseri heat shock protein 70 (HSP70.2) gene, complete
-;            cds.
-;ACCESSION   U51902
-;     CDS             1353..3239
-;                     /gene="HSP70.2"
-;                     /note="heat-inducible hsp70 gene"
-;                     /codon_start=1
-;                     /product="heat shock protein 70"
-;                     /db_xref="PID:g1518940"
-Botryllus.2
-----------------MPAIGIDLGTTYSCVGVYQHGKVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVAMNPTNTVFDAKRLIGRKFNDSTVKSDKKHWSFNVIADG-DKPKIE
-VEFK-----GEKKRFFPEEISSMLLTKMKETA-EAYLG--QGVTDAVISVPAYFNDSQRQ
-ATKDAAVIAGLNVLRIINEPTAAAIAYGLDKKT-----SERNILIFDLGGGTFDVSVLTI
-DSG--IFEVKATRGDTHLGGEDFDNRMVNHFVQEFKRKYK------------KDLTVNKR
-SLRRLRTACERAKRTLSS-STQASIEIDSLFEGIDFY----SSITRARFEELCSDLFRQT
-LDPVEQALRDS-------KLDKGKIDEIVLVGGSTRIPKIQKL-LRDFFNGKDLNKSINP
-DEAV-AYGAAVQAAILSGDQSE----Q-VKDVLLLDVAPLSLGIETAGGVMTTLIKRGTT
-IPAKQSQVF-TTYSDNQPAVTIQVYEGER-ALTKDNNLLGK----FDLTGLPPAPRG-VP
-QIEVAFNVDQNGIM-NVSASDKS-TGKSQNITITNDKGRLSKD-EIERMVQEAEKYKEAD
-DRERERIQAKNSLESYIFNV--KASVEDD-KVSGKLSAQDKQTILDKCNESLSWLDNNH-
-TAEKDEYEYQQKELENVTSPILTKLHQGQSADSNGGNATRPTVEEVD-------------
-------------------------------------------------------------
--------------------------------------------------------
-;PLHSP70A.PE1            640 residues Frame 0 Code 0
-;DEFINITION  P.lividus hsp70-IV gene for heat shock protein 70 kDa.
-;ACCESSION   X61379 S50315
-;     CDS             join(790..971,2490..4227)
-;                     /gene="hsp70-IV"
-;                     /standard_name="heat shock protein 70 kDa"
-;                     /codon_start=1
-;                     /product="heat shock protein protein"
-;                     /db_xref="PID:g312917"
-;                     /db_xref="SWISS-PROT:Q06248"
-Paracentrotus
--------------MESGPAIGIDLGTTYSCVGVFQNGKVEIIANDQGNRTTPSYVAFT-D
--SERLIGDAAKNQVAMNPTNTIFDAKRLIGRRFNDSSIQADMKHWPFRVINKD-GKPMLQ
-AEYM-----GETKTLSPEEVSSMVLTKMKETA-EAYLG--KKVTSAVITVPAYFNDAQRQ
-ATKDAGVIAGINVLRIINEPTRAALAYGLDKKL----TGEKHVLIFDLGGGTFDVSLLAI
-DDG--VFEVLTTAGDTHLGGEDFDNRLVNHTSLEFKRKYK------------KDMRTNPR
-AIRRLRTAAERAKRTLSS-SAQANIEVDSLFEGIDFY----TSISRARFEDLCSDLFRKC
-LEPVERAILDA-------KIDKKKIDTVVLVGGSTRIPKIQKL-LQEFLNGKELNKSINP
-DEAV-AYGAAVQAAILSGDKSD----E-IKDVLLVDVAPLSLGIETAGGVMSKIIERNTR
-VPTKASQTF-TTYSDNQPGVSIQVFEGER-AMTKDNNRLGQ----FELSGIPPAPRG-RP
-KIEVSFDIDANGIM-HVTAKDES-SGRSNKITITNDSDRLSKD-DIDRMINDAERFKAED
-DAQRERINAKNQLEGYAFNL--KSAVDDA-AAQSKLSPGDKETVTKAVNDVLQWLDSNS-
-LADKEEFTYKLEELQKTCSPIMAKMHAGTGGPRGGGPQGFPSGGAGGPTVEEVD------
-------------------------------------------------------------
--------------------------------------------------------
-;EGU26448.HSP70          666 residues Frame 0 Code 0
-;DEFINITION  Echinococcus granulosus heat shock 70 kDa protein mRNA, complete
-;            cds.
-;ACCESSION   U26448
-;     CDS             1..1998
-;                     /gene="hsp70"
-;                     /codon_start=1
-;                     /product="heat shock 70 kDa protein"
-;                     /db_xref="PID:g1305453"
-Echinococcus
-------------MMSKGPAVGIDLGTTFSCVGVFQHGKVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVAMNPTNTVFDAKRLIGRRFDDRAVQDDIKHWAFKVINAG-GKPKIE
-VEYR-----GETKCFSAEEISSMVLLKMKETA-EAYLG--KKVSDTVISVPAYFNDSQRQ
-ATKDAGTISGLNVLRIINEPTAAAIAYGLDKKV----ERERNVLIFDLGGGTFDVSILSI
-EDG--IFEVKSTAGDTHLGGEDFDSRLVNHFVEEFKRKHKG-----------KDLTTNKR
-AVRRLRTACERAKRTLSS-SAQANIEIDSLLEGIDFY----TSITRARFEELCSDLFRST
-LDPVEKALRDA-------KLDKGAVHEIVLVGGSTRIPKVQKL-LQDFFNGRELNKSINP
-DEAV-AYGAAVQAAILTGDKSE----A-VQDLLLLDVAPLSLGLETAGGVMTALIKRNTT
-IPTKQTQTF-TTYSDNQPGVLIQVYEGER-AMKRDNNLLGK----FELSGIPPGPRG-VP
-QIEVTFDIDANGIL-NVSAVDKS-TGKQNKITITRDKGRLSKE-EIERMVNDAEKFKQED
-EKQRDRVAAKNGLESYAFSM--KSTVEDE-KVKEKIGESDRRRIMEKCEETVKWLDGNQ-
-QAEKEEYEHRQKELESVCNPIIAKMYQEAGGVGGIPGGIPGGGMPGGTPGGGIPAGMAGG
-MSGDPSSGGRGPTIEEVD------------------------------------------
--------------------------------------------------------
-;BRPHSPAA.HSP70          645 residues Frame 0 Code 0
-;DEFINITION  B.malayi heat shock protein 70 (hsp70) gene, complete cds.
-;ACCESSION   M68933
-;     CDS             join(1161..1256,1649..1754,1908..2269,2348..2470,
-;                     2586..2737,2841..3099,3226..3447,3616..3963,4039..4225,
-;                     4341..4420)
-;                     /gene="hsp70"
-;                     /codon_start=1
-;                     /db_xref="PID:g156070"
-Brugia
---------------MSKNAIGIDLGTTYSCVGVFMHGKVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVAMNPHNTVFDANRLIGRKFDDGSVQSDMKHWPFKVVNAGGGKPKVQ
-VEYK-----GETKTFTPEEISSMVLVKMKETA-EAFLG--HAVKDAVITVPAYFNDSQRQ
-ATKDSGAIAGLNVLRIINEPTAAAIAYGLDKKG----HGERNVLIFDLGGGTFDVSILTI
-EDG--IFEVKSTAGDTHLG-EDFDNRMVNHFVAEFKRNDK------------KDLASNPR
-ALRRLRTACERAKRTLSS-SSQASIEIDSLFEGIDFY----TNITRARFEELCADLFRST
-MDPVEKALRDA-------KMDKAQVHDIVLVGGSTRIPKVQKL-LSDFFSGKELNKSINP
-DEAV-AYGAAVQAAILSGDKSE----A-VQDLLLLDVAPLSLGIETAGGVMTALIKRNTT
-IPTKTSETF-TTYSDNQPGVLIQVYEGER-ALTKDNNLLGK----FELSGIPPAPRG-VP
-QIEVTFDIDANGIL-NVSAQDKS-TGKQNKITITNDKGRLSKD-EIERMVQEAEKYKADD
-EAQKDRIAAKNALESYAFNM--KQTIEDE-KLKDKISEEDKKKIQEKCDETVRWLDGNQ-
-TAEKDEFEHRQKELESVCNPIITKLYQSAGGMPGGMPGGMPGGAPGAGSTGGGPTIEEVD
-------------------------------------------------------------
--------------------------------------------------------
-;MSQHSP70A.HSP70         641 residues Frame 0 Code 0
-;DEFINITION  Anopheles albimanus heat shock protein 70 (hsp70) gene (clone
-;            p70a), complete cds.
-;ACCESSION   M96662
-;     CDS             complement(146..2068)
-;                     /gene="hsp70"
-;                     /codon_start=1
-;                     /product="heat shock protein 70, hsp70A2"
-;                     /db_xref="PID:g159589"
-Anopheles-1
----------------MPSAIGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFS-D
--TERLIGDAAKNQVAMNPTNTVFDAKRLIGRKFDDPKIQADMKHWPFTVVNDC-GKPKIR
-VEFK-----GERKTFAPEEISSMVLTKMKETA-EAYLG--QSVKNAVITVPAYFNDSQRQ
-ATKDAGAIAGLNVMRIINEPTAAALAYGLDKNL----KGERNVLIFDLGGGTFDVSILTI
-DEGS-LFEVRATAGDTHLGGEDFDNRMVAHFVEEFKRKFK------------KDLSKNAR
-ALRRLRTACERAKRTLSS-STEATIEIDALMDGIDYY----TKISRARFEELCSDLFRST
-LQPVEKALSDA-------KMDKSSIHDIVLVGGSTRIPKVQSL-LQNFFAGKSLNLSINP
-DEAV-AYGAAVQAAILSGDKDD----K-IQDVLLVDVAPLSLGIETAGGVMTKLIERNSR
-IPCKQTKIF-STYADNQPGVSIQVFEGER-AMTKDNNLLGQ----FDLSGIPPAPRG-VP
-QIEVTFDLDANGIL-NVAAKDKS-SGKEKNITIKNDKGRLSQA-DIDRMVSEAEKYREED
-EKQREAIAARNQLEAYCFNL--KQSLDGE--GSSKLSEADRRTVQDRCDETLRWIDGNT-
-MAEKEEYEHQMQELSRVCSPIMTKLHQQAAGGPQPTSCGQQAGGFGGRTGPTVEEVD---
-------------------------------------------------------------
--------------------------------------------------------
-;MSQHSP70B.PE2           641 residues Frame 0 Code 0
-;DEFINITION  Anopheles albimanus heat shock protein 70 (hsp70) gene (clone
-;            p70b), complete cds.
-;ACCESSION   M96661
-;     CDS             2706..4628
-;                     /gene="hsp70"
-;                     /note="single base deletion between nucleotides 3418 and
-;                     3419 predicts premature termination in this clone.
-;                     Insertion of 'N' restores reading frame and is silent"
-;                     /codon_start=1
-;                     /product="heat shock protein 70, hsp70A2"
-;                     /db_xref="PID:g159593"
-Anopheles-b
----------------MPSAIGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFS-D
--TERLIGDAAKNQVAMNPTNTVFDAKRLIGRKFDDPKIQADMKHWPFTVVNDG-GKPKIR
-VEFK-----GERKTFAPEEISSMVLTKMKETA-EAYLG--QSVKNAVITVPAYFNDSQRQ
-ATKDAGAIAGLNVMRIINEPTAAALAYGLDKNL----KGERNVLIFDLGGGTFDVSILTI
-DEGS-LFEVRSTAGDTHLGGEDFDNRMVXHFVEEFKRKHK------------KDLSKNAR
-ALRRLRTACERAKRTLSS-STEATIEIDALMDGIDYY----TKISRARFEELCSDLFRST
-LQPVEKALSDA-------KMDKSSIHDIVLVGGSTRIPKVQSL-LQNFFAGKSLNLSINP
-DEAV-AYGAAVQAAILSGDKDD----K-IQDVLLVDVAPLSLGIETAGGVMTKLIERNSR
-IPCKQTQIF-STYADNQPGVSIQVFEGER-AMTKDNNLLGQ----FDLSGIPPAPRG-VP
-QIEVTFDLDANGIL-NVAAKEKS-TGKEKNITIKNDKGRLSQA-DIDRMVSEAEKFREED
-EKQRERISARNQLEAYCFNL--KQSLDGE--GASKLSDADRKTVQDRCEETLRWIDGNT-
-MADKEEFEHKMQELTKACSPIMTKLHQQAAGGPSPSSCAQQAGGFGGRTGPTVEEVD---
-------------------------------------------------------------
--------------------------------------------------------
-;DROHSC1A.HSC70-1        642 residues Frame 0 Code 0
-;DEFINITION  Drosophila melanogaster heat shock protein cognate 70 (Hsc1) mRNA,
-;            complete cds.
-;ACCESSION   L01501
-;     CDS             257..2182
-;                     /gene="Hsc70-1"
-;                     /note="Description: Heat shock protein cognate 1"
-;                     /codon_start=1
-;                     /product="heat shock protein cognate 70"
-;                     /db_xref="PID:g157656"
-Droso-mela-1
--------------MPKLPAVGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFT-E
--SERLIGDAAKNQVAMNPNNTIFDAKRLIGRRFDDATVQSDMKHWPFEVFAEN-GKPRIR
-VEYK-----GERKSFYPEEVSSMVLTKMRETA-EAYLG--GTVTDAVVTVPAYFNDSQRQ
-ATKDAGAIAGLNVLRIINEPTAAAIAYGLDKQG----TSERNVLIFDLGGGTFDVSVLTI
-EDG--IFEVKATAGDTHLGGEDFDNRLVNHFVQEFQRKHK------------KDLGQNKR
-ALRRLRTACERAKRTLSS-STQASIEIDSLFEGVDFY----TSVTRARFEELNGDLFRGT
-MEPVAKALRDA-------KMDKGQIHDIVLVGGSTRIPKVQRL-LQDFFNGKELNKSINP
-DEAV-AYGAAVQAAILHGDKSE----A-VQDLLLLDVTPLSLGIETAGGVMTTLIKRNTT
-IPTKQTQIF-TTYADNQPGVLIQVFEGER-AMTRDNNSLGK----FELSAIPPAPRG-VP
-QVEVTFDIDANGIL-NVTALEKS-TGKENRITITNDKGRLSKE-DIERMVNDAEAYRQAD
-EQQRDRINAKNQLESYCFQL--RSTLDDE-HLSSRFSPADRETIQQRSSETIAWLDANQ-
-LAERQEFEHKQQELERICSPIITRLYQGAGMAPPPTAGGSNPGATGGSGPTIEEVD----
-------------------------------------------------------------
--------------------------------------------------------
-;DROHSC4A                652 residues Frame 0 Code 0
-;DEFINITION  Drosophila melanogaster heat shock protein cognate 70 (Hsc4) gene,
-;            complete cds.
-;ACCESSION   L01500
-Droso-mela-4
--------------MSKAPAVGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVAMNPTQTIFDAKRLIGRKFDDAAVQSDMKHWPFEVVSAD-GKPKIE
-VTYK-----DEKKTFFPEEISSMVLTKMKETA-EAYLG--KTVTNAVITVPAYFNDSQRQ
-ATKDAGTIAGLNVLRIINEPTAAAIAYGLDKKA----VGERNVLIFDLGGGTFDVSILSI
-DDG--IFEVKSTAGDTHLGGEDFDNRLVTHFVQEFKRKHK------------KDLTTNKR
-ALRRLRTACERAKRTLSS-STQASIEIDSLFEGTDFY----TSITRARFEELNADLFRST
-MDPVEKALRDA-------KLDKSVIHDIVLVGGSTRIPKVQRL-LQDLFNGKELNKSINP
-DEAV-AYGAAVQAAILHGDKSQ----E-VQDLLLLDVTPLSLGIETAGGVMSVLIKRNTT
-IPTKQTQTF-TTYSDNQPGVLIQVYEGER-AMTKDNNLLGK----FELSGIPPAPRG-VP
-QIEVTFDIDANGIL-NVTALERS-TNKENKITITNDKGRLSKE-DIERMVNEAEKYRNED
-EKQKETIAAKNGLESYCFNM--KATLDED-NLKTKISDSDRTTILDKCNETIKWLDANQ-
-LADKEEYEHRQKELEGVCNPIITKLYQGAGFPPGGMPGGPGGMPGAAGAAGAAGAGGAGP
-TIEEVD------------------------------------------------------
--------------------------------------------------------
-;DROHSP7A2.HSP70A        644 residues Frame 0 Code 0
-;DEFINITION  D.melanogaster heat shock protein 70 genes, locus 87A7, seg. 2.
-;            (partial proximal gene, spacer region and complete distal gene).
-;ACCESSION   J01103
-;     CDS             1997..3928
-;                     /gene="Hsp70Ab"
-;                     /note="Description: Heat-shock-protein-70Ab;  heat shock
-;                     protein 70 (87A7 distal gene)"
-;                     /codon_start=1
-;                     /db_xref="FlyBase:FBgn0013276"
-;                     /db_xref="PID:g157713"
-Droso-mela-Ab
-----------------MPAIGIDLGTTYSCVGVYQHGKVEIIANDQGNRTTPSYVAFT-D
--SERLIGEPAKNQVAMNPRNTVFDAKRLIGRKYDDPKIAEDMKHWPFKVVSDG-GKPKIG
-VEYK-----GESKRFAPEEISSMVLTKMKETAAEAYLG--ESITDAVITVPAYFNDSQRQ
-ATKDAGHIAGLNVLRIINEPTAAALAYGLDKNL----KGERNVLIFDLGGGTFDVSILTI
-DEGS-LFEVRSTAGDTHLGGEDFDNRLVTHLADEFKRKYK------------KDLRSNPR
-ALRRLRTAAERAKRTLSS-STEATIEIDALFEGQDFY----TKVSRARFEELCADLFRNT
-LQPVEKALNDA-------KMDKGQIHDIVLVGGSTRIPKVQSL-LQDFFHGKNLNLSINP
-DEAV-AYGAAVQAAILSGDQSG----K-IQDVLLVDVAPLSLGIETAGGVMTKLIERNCR
-IPCKQTKTF-STYADNQPGVSIQVYEGER-AMTKDNNALGT----FDLSGIPPAPRG-VP
-QIEVTFDLDANGIL-NVSAKEMS-TGKAKNITIKNDKGRLSQA-EIDRMVNEAEKYADED
-EKRRQRVTSRNALESHVLNV--KQAVEQA--PAGKLDEADKNSDLDKCNDTIRWLDSNT-
-TAEKEEFDHKLEELTRHCSPIMTKMHQQGAGAGAGGPGANCGQQAGGFGGYSGRTVEEVD
-------------------------------------------------------------
--------------------------------------------------------
-;DROHSP7D1.HSP70B        642 residues Frame 0 Code 0
-;DEFINITION  D.melanogaster heat shock locus 87C1: distal hsp70 genes.
-;ACCESSION   J01104 J01105
-;     CDS             1755..3680
-;                     /gene="Hsp70Bb"
-;                     /note="Description: Heat-shock-protein-70Bb;  hsp70 distal
-;                     1 protein"
-;                     /codon_start=1
-;                     /db_xref="FlyBase:FBgn0013278"
-;                     /db_xref="PID:g157723"
-Droso-mela-Bb
-----------------MPAIGIDLGTTYSCVGVYQHGKVEINAYDQGNRTTPSYVAFT-D
--SERLNGEPAKNQVAMNPRNTVFDAKRLIGRKYDDPKIAEDMKHWPFKVVSDG-GKPKIG
-VEYK-----GESKRFAPEEISSMVLTKMKETA-EAYLG--ESITDAVITVPAYFNDSQRQ
-ATKDAGHIAGLNVLRIINEPTAAALAYGLDKNL----KGERNVLIFDLGGGTFDVSILTI
-DEGS-LFEVRSTAGDTHLGGEDFDNRLVTHLAEEFKRKYK------------KDLRSNPR
-ALRRLRTAAERAKRTLSS-STEATIEIDALFEGQDFY----TKVSRARFEELCANLFRNT
-LQPVEKALNDA-------KMDKGQIHDIVLVGGSTRIPKVQSL-LQEFFHGKNLNLSINP
-DEAV-AYGAAVQAAILSGDQSG----K-IQDVLLVDVAPLSLGIETAGGVMTKLIERNCR
-IPCKQTKTF-STYSDNQPGVSIQVYEGER-AMTKDNNALGT----FDLSGIPPAPRG-VP
-QIEVTFDLDANGIL-NVSAKEMS-TGKAKNITIKNDKGRLSQA-EIDRMVNEAEKYADED
-EKHRQRITSRNALESYVFNV--KQSVEQA--PAGKLDEADKNSVLDKCNETIRWLDSNT-
-TAEKEEFDHKMEELTRHCSPIMTKMHQQGAGAAGGPGANCGQQAGGFGGYSGPTVEEVD-
-------------------------------------------------------------
--------------------------------------------------------
-;DAHSOP70.HSP70          644 residues Frame 0 Code 0
-;DEFINITION  D.auraria mRNA for hsp70.
-;ACCESSION   X78403
-;     CDS             207..2138
-;                     /gene="hsp70"
-;                     /codon_start=1
-;                     /product="heat shock protein hsp70"
-;                     /db_xref="PID:e109454"
-;                     /db_xref="PID:g1165012"
-Drosophila-au
-----------------MPAIGIDLGTTYSCVGVYQHGKVEIIANDQGNRTTPSYVAFT-D
--SERLIGDPAKNQVAMNPRNTVFDAKRLIGRKYDDPKIAEDMKHWPFKVVSDG-GKPKIG
-VEFK-----GEAKRFAPEEISSMVLVKMRETA-EAYLG--ETVTDAVITVPAYFNDSQRQ
-ATKDAGRIAGLNVLRIINEPTAAALAYGLDKNL----QGERNVLIFDLGGGTFDVSILTI
-DEGS-LFEVRATAGDTHLGGEDFDNRLVTHLADEFKRKFR------------KDLRSNPR
-ALRRLRTAAERAKRTLSS-STEATIEIDALFEGHDFY----TKVSRARFEELCADLFRNT
-LQPVEKALTDA-------KMDKGQIHDIVLVGGSTRIPKVEAL-LQEYFHGKSLNLSINP
-DEAV-AYGAAVQAAILSGDQTG----K-IQDVLLVDVAPLSLGIETAGRVMTKLIERNCR
-IPCKQTKTF-STYSDNQPGVSIQVYEGER-AMTKDNNALGT----FDLSGIPPAPRG-VP
-QIEVTFDMDANGIL-NVSAKEMS-TGKAKNITIKNDKGRLSQA-EIDRMVNEAEKYADED
-EKHRQRIASRNALESYVFNV--KQAVEQA--GAGKLDEADKNSVLEKCNETISWLDSNT-
-TAEKEEFDHRLEELTRHCSPIMTKMHQQGAGAQAGGGPGANCGQQAGGFGGYSGPTVEEV
-D-----------------------------------------------------------
--------------------------------------------------------
-;HYDHSP701B.PE1          655 residues Frame 0 Code 0
-;DEFINITION  Hydra magnipapillata heat shock protein 70.1 (hsp70.1) gene,
-;            partial cds.
-;ACCESSION   M84019
-;     CDS             join(458..662,768..841,996..2681)
-;                     /gene="hsp70.1"
-;                     /codon_start=1
-;                     /product="heat shock protein 70.1"
-;                     /db_xref="PID:g159268"
-Hydra
--------------MSKAPAIGIDLGTTYSCVGVFQHGKVEIIANEQGNRTTPSYVAFT-D
--TERLIGDAAKNQVAMNPSNTVFDAKRLIGRKFNDPSVTSDRKHWPFNVIDDG-SRPKIQ
-VEFK-----GETKSFYPEEISSMVLLKMEEIA-DAYLG--KKVTDVVITVPAYFNDSQRQ
-ATKDAGVIAGLNVLRIINEPTAAAIAYGLDKKV----GTEKNVLIFDLGGGTFDVSILAI
-EDG--IFEIKSTAGDTHLGGEDFDNRLVNHFVDEFKRKHK------------KDISSNKR
-ALRRLRTACERAKRTLSA-STQASVEIDSLFDGIDFY----TSITRARFEELCIDLFRGT
-LGPVADAIRGAGKNSSGQNFSKSDIHEVVLVGGSTRIPKVQSL-LQEFFNGKELNKSINP
-DEAV-AYGAAVQAAILAGDKHE----A-VQDLLLLDVAPLSLGIETAGGVFTPLIKRNTT
-VPTKYSQVF-TTYSDNQPGVLIQVFEGER-SMTAHNNLLGK----FELSGIPLAPRG-VP
-QIEVTFDVDANGIL-NVSALDKS-TGKENKITITNDKGRLSKE-DIERMVQEAEKYKADD
-ELQRDKVQAKNSLESYCYNM--KQTVEDE-KVKGKISEEDKKTIIKKCNETVEWVDKNQ-
-TAEKDQYEHKQKELEKVCNPIITKLYQAGGGMPGGMPGGMPGGMPGSGSKASSGGPTIEE
-VD----------------------------------------------------------
--------------------------------------------------------
-;GCHSP70.HSP70           664 residues Frame 0 Code 0
-;DEFINITION  G.cydonium mRNA for heat shock protein 70.
-;ACCESSION   X94985
-;     CDS             19..2010
-;                     /gene="hsp70"
-;                     /codon_start=1
-;                     /product="heat shock protein 70"
-;                     /db_xref="PID:e218571"
-;                     /db_xref="PID:g1469234"
-Geodia
-------------MAKKAPAVGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFT-D
--SERLIGDAAKNQVAMNPTNTVFDAKRFIGRRSNDPVVSSDKKHWSFEVIDEA-GRPRVR
-VEYK-----GEKKSFFAEEISSMVLTKMKETA-EAYLG--KTITDAVVTVPAYFNDSQRQ
-ATKDAGIISGLNILRIINEPTAAAIAYGLDKKHD---SSEQNILIFDLGGGTFDVSILTI
-EEG--IFEVKSTAGDTHLGGEDFDNRMVNHFISEFKRKFK------------KDMSGNKR
-AVRRLRTACERAKRTLSS-ITEASIEIDSLFEGIDYY----TKITRARFEELCGDLFRGT
-LEPVEKALRDS-------KFDKGQIHEIVLVGGSTRIPRIQKL-LQDFFNGKTLNKSINP
-DEAV-AYGAAIQADILTGDTSE----E-VQDLLLLDVTPLSLGIETAGGVMTALIKRNST
-IPKKETETF-TTYSDNQPGVLIQVYEGER-AMTKDNNLLGK----FELTGIPPAPRE-VP
-QIQVTFDIDRNGIL-NVSAADKS-TGKENKITITNDKGRLSAE-EIDRMVREAEQYKAAD
-DAQRERVSAKNQLESYAFQM--KSTFEED-KVKEKVPEEDREKVISKCKEVIDWLDKNQ-
-SAEKEEFEHQQKELEGICTPIVTKLYQAGGAPGGGMPGGMPGGMPGGMPGGFPGGAGPTS
-GGSTGGGSGPTIEEVD--------------------------------------------
--------------------------------------------------------
-;YSCHSPSSA4.SSA4         643 residues Frame 0 Code 0
-;DEFINITION  Yeast (S.cerevisiae) 70 kDa heat shock protein (SSA4) gene,
-;            complete cds.
-;ACCESSION   J05637
-;     CDS             1284..3212
-;                     /gene="SSA4"
-;                     /codon_start=1
-;                     /product="70 kDa heat shock protein"
-;                     /db_xref="PID:g171728"
-Saccharo-SSA4
----------------MSKAVGIDLGTTYSCVAHFANDRVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQAAMNPHNTVFDAKRLIGRKFDDPEVTNDAKHYPFKVIDKG-GKPVVQ
-VEYK-----GETKTFTPEEISSMILTKMKETA-ENFLG--TEVKDAVVTVPAYFNDSQRQ
-ATKDAGTIAGLNVLRIINEPTAAAIAYGLDKKS----QKEHNVLIFDLGGGTFDVSLLSI
-DEG--VFEVKATAGDTHLGGEDFDSRLVNFLAEEFKRKNK------------KDLTTNQR
-SLRRLRTAAERAKRTLSS-SAQTSIEIDSLFEGIDFY----TSITRARFEELCADLFRST
-LEPVEKVLADS-------KLDKSQIDEIVLVGGSTRIPKVQKL-VSDFFNGKEPNRSINP
-DEAV-AYGAAVQAAILTGDQSS----T-TQDLLLLDVAPLSLGIETAGGIMTKLIPRNST
-IPTKKSEVF-STYADNQPGVLIQVFEGER-TRTKDNNLLGK----FELSGIPPAPRG-VP
-QIEVTFDIDANGIL-NVSAVEKG-TGKSNKITITNDKGRLSKE-DIDKMVAEAEKFKAED
-EQEAQRVQAKNQLESYAFTL--KNSVSEN-NFKEKVGEEDARKLEAAAQDAINWLDASQ-
-AASTEEYKERQKELEGVANPIMSKFYGAAGGAPGAGPVPGAGAGPTGAPDNGPTVEEVD-
-------------------------------------------------------------
--------------------------------------------------------
-;YSCSSA3B.SSA3           650 residues Frame 0 Code 0
-;DEFINITION  S.cerevisiae heat shock protein 70 (SSA3) gene (clone pSSA3H),
-;            complete cds.
-;ACCESSION   M97225
-;     CDS             1..1950
-;                     /gene="SSA3"
-;                     /codon_start=1
-;                     /db_xref="SGD:L0002071"
-;                     /product="heat shock protein 70, hsp70A2"
-;                     /db_xref="PID:g172718"
-Saccharo-SSA3
----------------MSRAVGIDLGTTYSCVAHFSNDRVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQAAINPHNTVFDAKRLIGRKFDDPEVTTDAKHFPFKVISRD-GKPVVQ
-VEYK-----GETKTFTPEEISSMVLSKMKETA-ENYLG--TTVNDAVVTVPAYFNDSQRQ
-ATKDAGTIAGMNVLRIINEPTAAAIAYGLDKKG----RAEHNVLIFDLGGGTFDVSLLSI
-DEG--VFEVKATAGDTHLGGEDFDNRLVNHLATEFKRKTK------------KDISNNQR
-SLRRLRTAAERAKRALSS-SSQTSIEIDSLFEGMDFY----TSLTRARFEELCADLFRST
-LEPVEKVLKDS-------KLDKSQIDEIVLVGGSTRIPKIQKL-VSDFFNGKEPNRSINP
-DEAV-AYGAAVQAAILTGDQST----K-TQDLLLLDVAPLSLGIETAGGIMTKLIPRNST
-IPTKKSETF-STYADNQPGVLIQVFEGER-TRTKDNNLLGK----FELSGIPPAPRG-VP
-QIDVTFDIDANGIL-NVSALEKG-TGKSNKITITNDKGRLSKD-DIDRMVSEAEKYRADD
-EREAERVQAKNQLESYAFTL--KNTINEA-SFKEKVGEDDAKRLETASQETIDWLDASQ-
-AASTDEYKDRQKELEGIANPIMTKFYGAGAGAGPGAGESGGFPGSMPNSGATGGGEDTGP
-TVEEVD------------------------------------------------------
--------------------------------------------------------
-;CAHSP70G.CAHSP70        657 residues Frame 0 Code 0
-;DEFINITION  C.albicans (ATCC 20955) cahsp70 mRNA for heat shock protein 70.
-;ACCESSION   Z30210
-;     CDS             105..2075
-;                     /gene="cahsp70"
-;                     /codon_start=1
-;                     /transl_table=12
-;                     /product="heat shock protein 70"
-;                     /db_xref="PID:g607055"
-;                     /db_xref="SWISS-PROT:P41797"
-Candida
----------------MSKAVGIDLGTTYSCVAHFANDRVEIIANDQGNRTTPSFVAFT-D
--TERLIGDAAKNQAAMNPANTVFDAKRLIGRKFDDPEVINDAKHFPFKVIDKA-GKPVIQ
-VEYK-----GETKTFSPEEISSMVLTKMKEIA-EGYLG--STVKDAVVTVPAYFNDSQRQ
-ATKDAGTIAGLNVLRIINEPTAAAIAYGLDKKG---SRGEHNVLIFDLGGGTFDVSLLAI
-DEG--IFEVKATAGDTHLGGEDFDNRLVNFFIQEFKRKNK------------KDISTNQR
-ALRRLRTACERAKRTLSS-SAQTSIEIDSLYEGIDFY----TSITRARFEELCADLFRST
-LDPVGKVLADA-------KIDKSQVEEIVLVGGSTRIPKIQKL-VSDFFNGKELNKSINP
-DEAV-AYGAAVQAAILTGDTSS----K-TQDILLLDVAPLSLGIETAGGIMTKLIPRNST
-IPTKKSETF-STYADNQPGVLIQVFEGER-AKTKDNNLLGK----FELSGIPPAPRG-VP
-QIEVTFDIDANGIL-NVSALEKG-TGKTQKITITNDKGRLSKE-EIDKMVSEAEKFKEED
-EKEAARVQAKNQLESYAYSL--KNTINDG-EMKDKIGADDKEKLTKAIDETISWLDASQ-
-AASTEEYEDKRKELESVANPIISGAYGAAGGAPGGAGGFPGAGGFPGGAPGAGGPGGATG
-GESSGPTVEEVD------------------------------------------------
--------------------------------------------------------
-;PAU49932.HSA2           644 residues Frame 0 Code 0
-;DEFINITION  Pichia angusta heat shock protein 70 homolog (HSA2) gene, complete
-;            cds.
-;ACCESSION   U49932
-;     CDS             296..2227
-;                     /gene="HSA2"
-;                     /note="similar to S. cerevisae SSA2, SwissProt Accession
-;                     Number P10592"
-;                     /codon_start=1
-;                     /product="heat shock protein 70 homolog"
-;                     /db_xref="PID:g1256759"
-Pichia
----------------MSKAVGIDGGTTYSCVAHFANDRVEIIANDQGNRTTPSFVAFT-D
--TERLSGDAAKNQAAMNPANTVFDAKRLIGRKFDDPEVQGDIKHFPFKVVDKS-GKPQIQ
-VEFK-----GETKVFTPEEISSMVLTKMKETA-ESFLG--TTVKDAVITVPAYFNDSQRQ
-ATKDAGLIAGLNVMRIINEPTAAAIAYGLDKKS----QGEQNVLIFDLGGGTFDVSLLSI
-EDG--IFEVKATAGDTHLGGEDFDNRLVNHFINEFKRKNK------------KDICGNQR
-ALRRLRTACERAKTTLSS-SAQTSLEIDSLYEGIDFY----TSITRARFEELCQDLFRST
-LDPVEKVLKDA-------KLDKSQVNEIVLVGGSTRIPKVQKL-VSDFFNGKEPNKSINP
-DEAV-AYGAAVQAAILTGDTSS----K-TQDLLLLDVAPLSLGIETAGGVMTKLIPRNTT
-IPTKKSEIF-STYSDNQPGVLIQVYEGER-ARTKDNNLLGK----FELSGIPPAPRG-VP
-QIEVTFDIDANGIL-NVSAVEKG-TGKSEKITITNDKGRLSQE-EIERMVSEAEKYKEED
-EKEAKRIAAKNGLESYAYSL--KQTTSEK-QFEEKVEASKREAFTKACDDTIAWLDENQ-
-TATAEEYDDKRKELEQAGNEVLKDLYAEGGVPGGAPGGFPGAGGAPSTEETQGPTVEEVD
-------------------------------------------------------------
--------------------------------------------------------
-;HPHSA1SP.HSA1           646 residues Frame 0 Code 0
-;DEFINITION  H.polymorpha (Wildtype) HSA1 gene for heat-shock protein.
-;ACCESSION   Z29379
-;     CDS             253..2190
-;                     /gene="HSA1"
-;                     /standard_name="hsp70"
-;                     /function="heat resistance"
-;                     /codon_start=1
-;                     /label=hsp1
-;                     /product="heat-shock protein"
-;                     /db_xref="PID:g443915"
-Pichia-poly
----------------MSKAVGIDLGTTYSCVAHFVNDRVEIIANDQGNRTTPSFVAFT-D
--TERLIGDAAKNQAAMNPANTVFDAKRLIGRKFDDPEVQNDIKHFPFKVVE-KGGKPHIQ
-VEFK-----GETKVFTPEEISSMVLTKMKETA-ESYMG--GKVTDAVITVPAYFNDSQRQ
-ATKDAGLIAGLNVLRIINEPTAAAIAYGLDKKEQ--GKGEQNILIFDLGGGTFDVSLLSI
-DEG--IFEVKATAGDTHLGGEDFDNRLVNHFANEFKRKYK------------KDLTTNQR
-ALRRLRTACERAKRTLSS-SAQTSVEIDSLYEGIDFY----TSITRARFEELCQDLFRST
-LDPVEKVMRDG-------KLDKSQVAEIVLVGGSTRIPKIQKL-VSDFFNGKEPNKSINP
-DEAV-AYGAAVQAAILTGDTSS----K-TQDLLLLDVAPLSLGIETAGGVMTKLIPRNTT
-IPTKKSEIF-STYSDNQPGVLIQVYEGER-AKTKDNNLLGK----FELSGIPPAPRG-VP
-QIEVTFDIDANGIL-NVSAVEKG-TGKSQKITITNDKGRLSKE-EIDRMVAEAEKYKEED
-EKEAARIAAKNGLESYAYSL--KQTASEK-QFEEKVDASKRESLNKAIEETISWLDNNQ-
-SATTDEYEDKRKELEGIANDALKDLYAAGGVPGGAAPGGFPGAGGAAPGADQGPSVEEVD
-------------------------------------------------------------
--------------------------------------------------------
-;NCU10443.HSP70          647 residues Frame 0 Code 0
-;DEFINITION  Neurospora crassa major stress-inducible 70 kDa heat shock protein
-;            (hsp70) gene, complete cds.
-;ACCESSION   U10443
-;     CDS             join(2310..2378,2445..3114,3217..3534,3610..3632,
-;                     3734..4594)
-;                     /gene="hsp70"
-;                     /codon_start=1
-;                     /product="70 kDa heat shock protein"
-;                     /db_xref="PID:g607818"
-Neurospora
----------------MAPAVGIDLGTTYSCVGVFREDRCEIIANDQGNRTTPSFVAFT-D
--TERLVGDAAKNQVAMNPANTVFDAKRLIGRKFSDPEVQADMKHFPFKVID-RGGKPVIQ
-VEFK-----GETKVFTPEEISAMILQKMKETA-EAYLG--GTVNNAVVTVPAYFNDSQRQ
-ATKDAGLIAGLNVLRIINEPTAAAIAYGLDKKVE--G--ERNVLIFDLGGGTFDVSLLTI
-EEG--IFEVKSTAGDTHLGGEDFDNRLVNHFVQEFKRKDK------------KDLSTNAR
-ALRRLRTACERAKRTLSS-SAQTSIEIDSLFEGIDFY----TSITRARFEELCQDLFRST
-LQPVDRVLTDA-------KIDKSQVHEIVLVGGSTRIPRIQKL-ISDYFDGKEPNKRINP
-DEAV-AYGAAVQAAILSGDTSS----KSTSEILLLDVAPLSLGIETAGGMMTKLIPRNTT
-IPTKKSEVF-STFSDNQPGVLIQVYEGER-QRTKDNNLLGK----FELTGIPPAPRG-VP
-QIEVTFDVDANGIM-NVSALEKG-TGKTNQITITNDKGRLSKE-EIERMLAEAEKFKEED
-EAEAKRVAAKNGLESYAYSL--RNTLSDS-KVDEKLDAADKEKLKSEIDKIVAWLDENQ-
-QATREEYEERQKELEAIANPIMMKFYGAGG-------------APGGMPGAAPG------
-----------GFPGGAPGS-------NDNEGPTVEEVD----------------------
--------------------------------------------------------
-;SPAC13G7.PE2            645 residues Frame 0 Code 0
-;DEFINITION  S.pombe chromosome I cosmid c13G7.
-;ACCESSION   Z69729
-;     CDS             complement(1675..3609)
-;                     /gene="SPAC13G7.02c"
-;                     /note="SPAC13G7.02c, heat shock protein HSP70 family, len:
-;                     644, similar to eg SW:HS71_YEAST P10591, SSA1, (80.3%
-;                     identity in 644 aa overlap), contains PS00297 Heat shock
-;                     hsp70 proteins family signature 1, PS00329 Heat shock
-;                     hsp70 proteins familysignature 2, PS01036 Heat shock hsp70
-;                     proteins family signature 3"
-;                     /codon_start=1
-;                     /product="unknown"
-;                     /db_xref="PID:e223693"
-;                     /db_xref="PID:g1204169"
-Schizosacc
----------------MSKSIGIDLGTTYSCVGHFSNNRVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVAMNPHNTIFDAKRLIGRRFNDPEVQSDMKHWPFKVIE-KDGKPLIQ
-VEFK-----GETKTFTPEEISSMVLLKMRESA-EAFLG--GKVTDAVVTVPAYFNDSQRQ
-ATKDAGLIAGLNVLRIINEPTAAAIAYGLDRSNQ--H--ETNVLIFDLGGGTFDVSLLTI
-EEG--IFEVKATAGDTHLGGEDFDSRLVNHFAQEFKRKNK------------KDITGNAR
-AVRRLRTACERAKRTLSS-SAQASIEIDSLYEGIDFY----TSITRARFEELCADLFRNT
-MEPVEKVLRDS-------KIDKSSVNEIVLVGGSTRIPRIQKL-VSDFFNGKEPCKSINP
-DEAV-AYGAAVQAAILVGDTSE----K-TQDLLLLDVAPLSLGIETAGGVMTPLIKRNTT
-IPTKKSEVF-STYADNQPGVLIQVFEGER-ARTKDCNLLGK----FELSGIPPAPRG-VP
-QIEVTFDVDANGIL-NVSALEKG-TGKTQKITITNDKGRLSKE-EIDRMVSEAEKYKAED
-EAETSRIQAKNHLESYAYSL--RNSLDDP-NLKDKVDASDKEAIDKAVKETIEWLDHNT-
-TAAKDEYEDKQKELEGVANPIMAKIYQAGGAPGGAPGGMPGGAPGGAPGGADNGPEVEEV
-D-----------------------------------------------------------
--------------------------------------------------------
-;CHHSP70.HSP70           644 residues Frame 0 Code 0
-;DEFINITION  C.herbarum mRNA for heat shock protein 70.
-;ACCESSION   X81860
-;     CDS             49..1980
-;                     /gene="hsp70"
-;                     /codon_start=1
-;                     /product="heat shock protein 70"
-;                     /db_xref="PID:g551228"
-;                     /db_xref="SWISS-PROT:P40918"
-Cladosporium
----------------MAPAIGIDLGTTYSCVGIYRDDRIEIIANDQGNRTTPSFVAFT-D
--TERLIGDSAKNQVAINPHNTVFDAKRLIGRKFQDAEVQADMKHFPFKVIE-KAGKPVTQ
-VEFK-----GETKDFTPEEISSMILTKMRETA-ESYLG--GTVNNAVITVPAYFNDSQRQ
-ATKDAGLIAGLNVLRIINEPTAAAIAYGLDKKQE--G--EKNVLIFDLGGGTFDVSFLTI
-EEG--IFEVKSTAGDTHLGGEDFDNRLVNHFSNEFKRKHK------------KDLSDNAR
-ALRRLRTACERAKRTLSS-SAQTSIEIDSLFEGIDFF----TSNTRARFEEVGQDLFRGN
-MEPGERTLRDD-------KIDKSSVHEIVLGGGSTRIPKVQKL-VSDFFNGKEPCKSINP
-DEAV-AYGAAVQAAILSGDTSS----KSTKEILLLDVAPLSLGIETAGGVMTALIKRNTT
-IPTKKSETF-STFSDNQPGVLIQVFEGER-ARTKDINLMGK----FELSGIRPAPRG-VP
-QIEVTFDLDANGIM-NVSALEKG-TGKTNKIVITNDKGRLSKE-EIERMLADAEKYKEED
-EAEAGRIQAKNGLESYAYSL--KNTVSDP-KVEEKLSAEDKETLTGAIDKTVAWIDENQ-
-TATKEEYEAEQKQLESVANPVMMKIYGAEGGAPGGMPGQGAGAPPPGAGDDGPTVEEVD-
-------------------------------------------------------------
--------------------------------------------------------
-;BSIAHSP70X.HSP70        650 residues Frame 0 Code 0
-;DEFINITION  Blastocladiella emersonii heat shock protein (hsp70) gene, complete
-;            cds.
-;ACCESSION   L22497
-;     CDS             join(775..811,977..2889)
-;                     /gene="hsp70"
-;                     /codon_start=1
-;                     /product="heat shock protein"
-;                     /db_xref="PID:g773670"
-Blastocladiella
-----------MTTKLDSPAVGIDLGTTYSCVGVWQNDRVEIIANDQGNRTTPSYVGFT-D
--SERLIGDAAKNQVAMNPHNTVFDAKRLIGRRFDDDVVQADMKHWSFTVVN-KNSKPLFQ
-VEFK-----GETKTFTPEEFSSMILTKMKETA-EAYLG--TKVNHAVVTVPAYFNDSQRQ
-ATKDAGAIAGLNVLRIINEPTAAAIAYGLDKKAE--AG-EKNVLIFDLGGGTFDVSLLTI
-EDG--IFEVKATAGDTHLGAEDFDNRLVNHFVQEFKRKHK------------KDLSGKAR
-P-RRLRTACERAKRTLSS-SAQTSIEIDSLFEGIDFY----TSITRARFEELCADLFRST
-LDPVEKVLRDA-------KMAKNEVHEIVLVGGSTRIPRIQKL-VSDFFNGKEPNKSINP
-DEAV-AYGAAVQAAILAGDQSE----K-VQDLLLLDVAPLSLGIETAGGVMTPLIKRNTT
-IPAKKSETF-STYADNQPGVLIQVYEGER-ARTKDNNLLGK----FELTGIPPAPPR-VP
-QIEVSFDVGADGIL-NVSAVDKS-TNRSNKITITNDKGRLSKE-EIERMVAEAEKYKKED
-EEAASRIQAKNGLESYAYNL--RNTLNDD-KVAGKMDAADKETLNKAIDETISWLDGNQ-
-EGAKDEYEHKQKELEGVANPIMTKLYSAAGGAPGGMPGGFDPSGAPPPAADTTGPTIEEV
-D-----------------------------------------------------------
--------------------------------------------------------
-;PHHSP70G.HSP70          652 residues Frame 0 Code 0
-;DEFINITION  Petunia hsp70 gene.
-;ACCESSION   X06932
-;     CDS             join(240..453,1076..2817)
-;                     /codon_start=1
-;                     /product="heat shock protein 70"
-;                     /db_xref="PID:g20557"
-;                     /db_xref="SWISS-PROT:P09189"
-Petunia
-----------MAGKGEGPAIGIDLGTTYSCVGVWQHDRVEIIANDQGNRTTPSYVGFT-D
--TERLIGDAAKNQVAMNPINTVFDAKRLIGRRFSDPSVQSDIKLWPFKVIPGPGDKPMIV
-VTYK-----GEEKQFAAEEISSMVLTKMKEIA-EAYLG--TTIKNAVVTVPAYFNDSQRQ
-ATKDAGVIAGLNVMRIINEPTAAAIAYGLDKKAS--SAGEKNVLIFDLGGGTFDVSLLTI
-EEG--IFEVKATAGDTHLGGEDFDNRMVNHFVQEFKRKNK------------KDISGNPR
-ALRRLRTACERAKRTLSS-TAQTTIEIDSLYEGIDFY----STITRARFEELNMDLFRKC
-MEPVEKCLRDA-------KMDKSSVHDVVLVGGSTRIPKVQQL-LQDFFNGKELCKSINP
-DEAV-AYGAAVQAAILSGEGNE----K-VQDLLLLDVTPLSLGLETAGGGMTVLIPRNTT
-IPTKKEQVF-STYSDNQPGVLIQVYEGER-ARTKDNNLLGK----FELSGIPPAPRG-VP
-QITVCFDIDANGIL-NVSAEDKT-TGQKNKITITNDKGRLSKE-EIERMVQEAEKYKSED
-EELKKKVEAKNALENYAYNM--RNTIKDD-KINSQLSAADKKRIEDAIDEAIKWLDNNQ-
-LAEADEFEDKMKELESICNPIIAKMYQGGAGGATMDEDGPSVGGSAGSQTGAGPKIEEVD
-------------------------------------------------------------
--------------------------------------------------------
-;ATHSC70.HSC70           652 residues Frame 0 Code 0
-;DEFINITION  A.thaliana hsc70 mRNA for heat shock cognate protein.
-;ACCESSION   X74604
-;     CDS             75..2030
-;                     /gene="hsc70"
-;                     /codon_start=1
-;                     /product="heat shock protein 70 cognate"
-;                     /db_xref="PID:g397482"
-;                     /db_xref="SWISS-PROT:P22953"
-Arabidopsis
-----------MSGKGEGPAIGIDLGTTYSCVGVWQHDRVEIIANDQGNRTTPSYVAFT-D
--SERLIGDAAKNQVAMNPVNTVFDAKRLIGRRFSDSSVQSDMKLWPFKIQAGPADKPMIY
-VEYK-----GEEKEFAAEEISSMVLIKMREIA-EAYLG--VTIKNAVVTVPAYFNDSQRQ
-ATKDAGVIAGLNVMRIINEPTAAAIAYGLDKKAT--TVGEKNVLIFDLGGGTFDVSLLTI
-EEG--IFEVKATAGDTHLGGEDFDNRMVNHFVQEFKRKSK------------KDITGNPR
-ALRRLRTSCERAKRTLSS-TAQTTIEIDSLYEGIDFY----STITRARFEELNMDLFRKC
-MEPVEKCLRDA-------KMDKSTVHDVVLVGGSTRIPKVQQL-LQDFFNGKELCKSINP
-DEAV-AYGAAVQGAILSGEGNE----K-VQDLLLLDVTPLSLGLETAGGVMTTLIPRNTT
-IPTKKEQVF-STYSDNQPGVLIQVYEGER-ARTKDNNLLGK----FELSGIPPAPRG-VP
-QITVCFDIDANGIL-NVSAEDKT-TGQKNKITITNDKGRLSKD-EIEKMVQEAEKYKSED
-EEHKKKVEAKNALENYAYNM--RNTIQDE-KIGEKLPAADKKKIEDSIEQAIQWLEGNQ-
-LAEADEFEDKMKELESICNPIIAKMYQGAGGEAGGPGASGMDDDAPPASGGAGPKIEEVD
-------------------------------------------------------------
--------------------------------------------------------
-;GMHSP70.HSP70           646 residues Frame 0 Code 0
-;DEFINITION  Glycine max hsp 70 gene.
-;ACCESSION   X62799
-;     CDS             771..2708
-;                     /gene="hsp70"
-;                     /codon_start=1
-;                     /product="Heat Shock 70kD protein"
-;                     /db_xref="PID:g18663"
-;                     /db_xref="SWISS-PROT:P26413"
-Glycine
------------MATKEGKAIGIDLGTTYSCVGVWQNDRVEIIPNDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVAMNPQNTVFDAKRLIGRRFSDSSVQNDMKLWPFKVGGSPCDKPMIV
-VNYK-----GEEKKFSAEEISSMVLVKMREVA-EAFLG--HAVKNAVVTVPAYFNDSQRQ
-ATKDAGAISGLNVLRIINEPTAAAIAYGLDKKAS--RKGEQNVLIFDLGGGTFDVSILTI
-EEG--IFEVKATAGDTHLGGEDFDNRMVNHFVSEFKRKNK------------KDISGNAR
-ALRRLRTACERAKRTLSS-TAQTTIEIDSLYEGIDFY----ATITRARFEEMNMDLFRKC
-MEPVEKCLRDA-------KIDKSQVHEVVLVGGSTRIPKVHQL-LQDFFNGKELCKSINP
-DEAV-AYGAAVQAAILSGQGDE----K-VQDLLLLDVTPLSLGLETAGGVMTVLIPRNTT
-IPTKKEQIF-STYSDNQPGVLIQVFEGER-ARTKDNNLLGK----FELTGIPPAPRG-VP
-QVNVCFDIDANGIL-NVSAEDKT-AGVKNKITITNDKGRLSKE-EIEKMVKDAERYKAED
-EEVKKKVEAKNSLENYAYNM--RNTIKDE-KIGGKLSPDEKQKIEKAVEDAIQWLEGNQ-
-MAEVDEFEDKQKELEGICNPIIAKMYQGAAGPGGDVPMGADMPAAGAGPKIEEVD-----
-------------------------------------------------------------
--------------------------------------------------------
-;DCHSP70.HSP70           656 residues Frame 0 Code 0
-;DEFINITION  Carrot hsp70 gene for heat shock protein 70.
-;ACCESSION   X60088
-;     CDS             284..2251
-;                     /evidence=experimental
-;                     /gene="hsp70"
-;                     /note="predicted M.W.=71.98kDa"
-;                     /codon_start=1
-;                     /product="heat shock protein 70"
-;                     /db_xref="PID:g18357"
-;                     /db_xref="SWISS-PROT:P26791"
-Daucus
------------MASKGGKAIGIDLGTTYSCVGVWQNDRVEIIANDQGNRTTPSYFAFT-D
--TSRLIGD-AKNQVAMNPSNTVFDAKRLIGRRFNHPSVQSDMKLWPLQVIPGPGEKPMIV
-VNYK-----GESKQFAAEEISSMVLIKMLEIA-EAFLG--HSVNDAVVTVPAYFNDSQRQ
-ATKDTGVIAGLNVMRIINEPNCAQIAYGLDKKSS--NPPEQNVLIFDLGGGTFDVSLLTI
-EEG--IYEVKAPKSDTHLGGEDFDNRLVNRFVTEFLTNNK------------KDIRWECE
-ALRRLRTACERAKRTLSSSTAQTTIEIDSLYEGVDFY----TTITRARFEELNMDLFKKC
-MDPVEKCLRDS-------KIDKAQVHEVVLVGGSTRIPKVQQL-LQDFFNGKELCKSINP
-DEAV-AYGAAVQAAILSGEGNE----R-SD-LLLLDVTPLSLGLETAGGVMTVLIPRNTT
-IPTKKEQIF-STYSDNQPGVLIQVYEGER-ARTRDNKLLGKLLGKFELTGIPPAPRG-VP
-QINVVFDIDANGIL-NVFAEDKT-AGVKNKITITNDNGRLSKD-EIEKLVKEAEKYKAED
-EEVKKKVEAKNALENYAYNM--RNTIKDD-KIPGKLDAGDKEKIETAVNEAIEWLEKNQ-
-LAEVDELEDKLKELEGLCNPIIARLYQGRGDVPIGGPGDMPGGGYGGSRGSSGAGPKIEE
-VD----------------------------------------------------------
--------------------------------------------------------
-;LEHSC170.HSC70          651 residues Frame 0 Code 0
-;DEFINITION  Lycopersicon esculentum hsc-1 mRNA for heat shock protein 70 kD.
-;ACCESSION   X54029
-;     CDS             38..1990
-;                     /gene="hsc70"
-;                     /codon_start=1
-;                     /product="heat shock protein cognate 70"
-;                     /db_xref="PID:g19256"
-;                     /db_xref="SWISS-PROT:P24629"
-Lycopersicon-1
-----------MAGKGEGPAIGIDLGTTYSCVGVWQHDRVEIIANDQGNRTTPSYVGFT-D
--TERLIGDAAKNQVALNPINTVFDAKRLIGRRFSDASVQEDMKLWPFKVIPGPGDKPMIV
-VTYK-----GEEKEFAAEEISSMVLTKMKEIA-EAFLG--STVKNAVVTVPAYFNDSQRQ
-ATKDAGVISGLNVMRIINEPTAAAIAYGLDKKAT--SAGEKNVLIFDLGGGTFDVSLLTI
-EEG--IFEVKATAGDTHLGGEDFDNRMVNHFVHEFKRKHK------------KDITGNPR
-ALRRLRTACERAKRTLSS-TAQTTIEIDSLYEGVDFY----STITRARFEELNMDLFRKC
-MEPVEKCLRDA-------KMDKSTVHDVVLVGGSTRIPKVQQVAMTNFFNGKELCKSINP
-DEAV-AYGAAVQAAILSGEGNE----K-VQDLLLLDVTPLSLGLETAGGVMTVLIPRNTT
-IPTKKEQVF-STYSDNQPGVLIQVFEGERRARTRDNNLLGK----FELSVIPPAPRV-VP
-QITVCFDIDANGIL-NVSAEDKT-TGQKNKITITNDKGRLSKE-EIEKMVQEAEKYKAED
-EELKKKVEAKNSLENYAYNM--RNTVKDE-KIGSKLSSDDKKKIEDAVDQAISWLESNQ-
-LAEVDEFEDKMKELEGICNPIIAKMYQGAGGDAGVPMDDDAPPSGGSSAGPKIEEVD---
-------------------------------------------------------------
--------------------------------------------------------
-;LEHSC270.HSC70          645 residues Frame 0 Code 0
-;DEFINITION  Lycopersicon esculentum hsc-2 mRNA for heat shock protein cognate
-;            70.
-;ACCESSION   X54030
-;     CDS             73..2007
-;                     /gene="hsc70"
-;                     /codon_start=1
-;                     /product="heat shock protein cognate 70"
-;                     /db_xref="PID:g19258"
-;                     /db_xref="SWISS-PROT:P27322"
-Lycopersicon-2
-----------MAGKGEGPAIGIDLGTTYSCVGVWQHDRVEIIANDQGNRTTPSYVGFT-D
--SERLIGDAAKNQVAMNPINTVFDAKRLIGRRFSDASVQSDMKLWPFKVIPGPGDKPMIV
-VNYK-----GEEKQFSAEEISSMVLIKMKEIA-EAFLG--TTVKNAVVTVPAYSNDSQRQ
-ATKDAGVISGLNVMRIINEPTAAAIAYGLDKKAT--SVGEKNVLIFDLGGGTFDVSLLTI
-EEG--IFEVKATAGDTHLGGEDFDNRMVNHFVQEFKRKNK------------KDITGNPR
-ALRRLRTACERAKRTLSS-TAQTTIEIDSLYEGIDFY----STITRARFEELNMDLFRKC
-MEPVEKCLRDA-------KMDKSTVHDVVLVGGSTRIPKVQQL-LQDFFNGKELCKSINP
-DEAV-AYGAAVQAAILSGEGNE----K-VQDLLLLDVTPLSLGLETAGGVMTVLIPRNTT
-IPTKKEQVF-STYSDNQPGVLIQVYEGER-TRTRDNNLLGK----FELSGIPPAPRG-VP
-QITVCFDIDANGTL-NVSAEDKT-TGQKNKITITNDKGRLSKE-EIEKMVQEAEKYKSED
-EEHKKKVEAKNALENYAYNM--RNTIKDE-KIASKLSADDRTKIEDAIEQAIQWLDGNQ-
-LAEAEEFEDKMKELESLCNPIIAKMYQGAGGDMDDEGPAPSGGGAGPKIEEVD-------
-------------------------------------------------------------
--------------------------------------------------------
-;LILLIM18.LIM18          650 residues Frame 0 Code 0
-;DEFINITION  Lily mRNA for HSP70, complete cds.
-;ACCESSION   D21824
-;     CDS             9..1958
-;                     /gene="LIM18"
-;                     /codon_start=1
-;                     /product="HSP70"
-;                     /db_xref="PID:g431144"
-Lilium
-----------MAGKDEVPAIGIDLGTTYSCVGVWQHDRVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVAMNPTNTVFDAKRLIGRHFSDPSVQADMKLWPFKVISGTRDKPMIV
-VQYK-----GEEKQFAVEEVSSMVLVKMREIA-VAYLG--RSINNAVVTVPAYFNDSQRQ
-ATKDAGAIAGLNVLRIINEPTAAAIAYGLDKKAT--SPSEKNVLIFDLGGGTFDVSLLTI
-EEG--IFEVKATAGDTHLGGEDFDNRMVNHFAQEFKRKHK------------KDISGNPR
-ALRRLRTACERAKRTLSS-TAQTTIEIDSLCDGIDFY----STITRARFEELNIDLFRKC
-MDPVEKCLTDA-------KMDKSSVHDVVLVGGSTRIPKVQQL-LQDFFNGKELCKSINP
-DEAV-AYGAAVQAAILSGERNE----K-VQDLLLLDVTPLSLGLETAGGVMTILIPRNTT
-IPTKKEQVF-STYTDNQSGVLIQVYEGER-TRSKDNNLLGK----FELLGISPAARG-VP
-QITVTFDIDANGIL-NVSAEDKT-TRQKNKITITNDKGRLSKE-EIEKMVKEAERYKSED
-EKHKKQVAAKNALETYIYNM--RNAVNDE-RITSKLPAEVKKKIDDAMEGAIQWLEANQ-
-LAEVDEFDDKRRELEGICKPVIEKLCQGIGVIADRMGMNEDGTASRTGGAGPKIEEVD--
-------------------------------------------------------------
--------------------------------------------------------
-;CREHSP70A.HSP70         650 residues Frame 0 Code 0
-;DEFINITION  C.veinhardtii 70kDa heat shock protein (hsp70) gene, complete cds.
-;ACCESSION   M76725
-;     CDS             join(849..898,969..1095,1171..1309,1383..1543,1748..1848,
-;                     2194..3263,3498..3799)
-;                     /gene="hsp70"
-;                     /codon_start=1
-;                     /product="70 kDa heat shock protein"
-;                     /db_xref="PID:g167421"
-Chlamydomonas
-------------MGKEAPAIGIDLGTTYSCVGLWQNDRVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVAMNPRHTVFDAKRLIGRKFSDPIVQSDIKLWPSQV-APAHDVPEIV
-VSYR-----TEEKVFKAEEISSMVLIKMKETA-QASLGADREVKKAVVTVPAYFNDSQRQ
-ATKDAGMIAGLEVLRIINEPTAAAISYGLDKKDS--GLGERNVLIFDLGGGTFDVSLLTI
-EEG--IFEVKATAGDTHLGGEDFDERLVNHFANEFQRKYK------------KDLKTSPR
-ALRRLRTACERAKRTLSS-AAQTTIELDSLFEGVDFA----TSITRARFEELCMDLFRKC
-MDPVEKCLHDA-------KMDKMTVHDVVLVGGSTRIPKVQQL-LQDFFNGKELNKSINP
-DEAV-AYGAAVQAAILTGEGGE----K-VQDLLLLDVTPLSLGLETAGGVMTVLIPRNTT
-IPTKKEQVF-STYSDNQPGVLIQVYEGER-ARTKDNNLLGK----FELTGIPPAPRG-VP
-QINVIFDIDANGIL-NVSAEDKT-TGNKNKITITNDKGRLSKD-EIERMVQEAEKYKADD
-EQLK-KVEAKNSLENYAYNM--RNTIRED-KVASQLSASDKESMEKALTAAMDWLEANQ-
-MAEVEEFEHHLKELEGLCNPIITRLYQGGAGAGGMPGGGAGAGAAPSGGSGAGPKIEEVD
-------------------------------------------------------------
--------------------------------------------------------
-;AKU02504.PE1            653 residues Frame 0 Code 0
-;DEFINITION  Achlya klebsiana heat shock protein 70 gene, complete cds.
-;ACCESSION   U02504
-;     CDS             1684..3642
-;                     /codon_start=1
-;                     /product="heat shock protein 70"
-;                     /db_xref="PID:g407302"
-Achlya
------------MSGVQGASVGIDLGTTYSCVGVWQNDRVEIIANDQGNRTTPSYVAFT-D
--SERLIGDAAKNQVAMNPANTVFDAKRLIGRKFNDPATQADIKHWPFKVTPGAGDKPQIT
-VEFK-----GETKTFQPEEISSMVLIKMKEVA-EAFIG--TAVNNAVITVPAYFNDSQRQ
-ATKDAGAIAGLNVLRIINEPTRAAIAYGLDKKG-----GERNVLIFDLGGGTFDVSLLTI
-EEG--IFEVKATAGDTHLGGEDFDNRLVDHFTAEFKRKHR------------KDMTQNQR
-ALRRLRTACERAKRTLSS-SAQAYIEIDSLFDGIDFN----STITRARFEDMCGDYFRKT
-MEPVEKVLRDS-------KLSKSQVHEVVLVGGSTRIPKVQQL-LSDFFNGKEPCKSINP
-DEAV-AFGATVQAAILSGNDSSE---K-LQDLLLLDVTPLSLGLETAGGVMTTLIQRNTT
-VPTKKSQTF-STYADNQPGVLIQVFEGER-SMTRDNNLLGK----FSLDGIPPMPRG-VP
-QIDVTFDIDANGIL-NVSAVEKS-TGKENKITITNDKGRLTKD-DIERMVQEAEKYKSED
-EANNVRIEAKNGLENYAYNL--RNTLNDE-KLQGKIDESDKKVIDDKVTDIINWLDHNQ-
-SAEKEEFEAKQKELEGIANPIMQKMYAAAGGAPGGMPGGMPDMGGAGAPPPASHAQGPKI
-EEVD--------------------------------------------------------
--------------------------------------------------------
-;BRMHSP70.PE1            677 residues Frame 0 Code 0
-;DEFINITION  B.lactucae heat shock protein 70 (hsp70) gene, complete cds.
-;ACCESSION   M27825
-;     CDS             591..2621
-;                     /note="heat shock protein 70"
-;                     /codon_start=1
-;                     /db_xref="PID:g167184"
-Bremia
-----------MAQSVSGYSVGIDLGTTYSCVGVWQNDRVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVAMNAHNTVFDAKPLIGRKFSDPIVQADIKHWPFKLTSG-WRQAQIV
-VQFK-----GESKTFQPEEISSMVLIKMREVA-EAFIG--KEVKNAVITVPAYFNDSQRQ
-ATKDAGAIAGLNVLRIINEPTAAAIAYGLDKKG-----GERNVLIFDLGGGTFDVSLLSI
-EEG--IFEVKSTARDTHLGGEDFDNRLVDHFTQEFKRKHR------------KDITENQR
-ALRRLRTACERAKRTLSS-SAQAYIEIDSLFDGIDFN----STITRARFEDMCGDYFRKT
-MEPVAPVLRDA-------KLSKSQVHEVVLVGGSTRIPKVQQL-LSDFFNGKEPNKSINP
-DEPV-AYGATVQAAILSGNDSSQ---K-LQDLLLLDVTPLSLGLETAGGVMTTLIARNTT
-VPTKKSQTF-STYADNQPGVLIQLFEGER-SMTRDNNLLGK----FNLDGIPPMPRG-VP
-QIDVTFDIDANGIF-NVSAVEKS-TGKENKITITNDRVVCRRH-DIDRMVSEAEKYKSED
-EANKIRIEAKNGLENYSYNL--RNTLNDE-KLKDQIPEDDKKAIEDKVTETINWLDANQ-
-SAEKEEYEGKQKELEGIANPILQKMYAAAGAAGGMPGGMPGMPGGMPGMPGGMPGMPGGM
-PGGMPGGMPGGWPPCWSSDQGPKIEEVD--------------------------------
--------------------------------------------------------
-;DDHSC70.PE1             641 residues Frame 0 Code 0
-;DEFINITION  D.discoideum (AX3) mRNA for heat shock cognate protein (hsc70).
-;ACCESSION   X75263
-;     CDS             56..1978
-;                     /codon_start=1
-;                     /product="heat shock protein (hsc70)"
-;                     /db_xref="PID:g433875"
-;                     /db_xref="SWISS-PROT:P36415"
-Dictyostelium
-----------------MSSIGIDLGTTYSCVGVWQNDRVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVAMNPTNTVFDAKRLIGRKFSDKEVQSDMKHWPFKVIPKDGDKPHIQ
-VEFK-----GETKVFSPEEISSMVLLKMKETA-EAYLG--KTINNAVITVPAYFNDSQRQ
-ATKDAGTISKLNVQRIINEPTAAAIRYGLEKKG----SGEKNILIFDLGGGTFDVSLLTI
-EDG--VFEVKATAGDTHLGGEDFDNRLVSHFVDEFKRKHK------------KDIMGNQR
-AVRRLRTACERAKRTLSS-SAQASIEIDSLFEGIDFY----TSITRARFEELCADLFRGC
-LDPVEKVLKDS-------KLDKKSIHEIVLVGGSTRIPKVQQL-LQEFFNGKELNKSINP
-DEAV-AYGAAVQAAILSNEGGAK-----VADLLLLDVAPLSMGLETAGGVMTTLIPRNTT
-IPCKKTQTF-STYSDNQPGVLIQVYEGER-AMTKDNNLLGK----FELSGIPPAPRG-VP
-QVEVTFDVDANGIL-NVSAEDKS-TGNKQKITITNDKGRLSKE-EIEKMVADAEKFKQQD
-EQQKDRVESKNKLENYAFTV--KNSIKDE-KVAAKISDSDKSTIESETESVLKWLESNQ-
-TAEKDEYEDKMKALEAVVNPIMSKLYQEGGMP-----------QGGGMPGGMSN------
----------D-SPKSSNN------------K--VDELD----------------------
--------------------------------------------------------
-;ENHHSP70A.HSP70         657 residues Frame 0 Code 0
-;DEFINITION  Entamoeba heat shock protein (Hsp70) mRNA, complete cds.
-;ACCESSION   M84652
-;     CDS             10..1980
-;                     /gene="Hsp70"
-;                     /codon_start=1
-;                     /product="heat shock protein 70, hsp70A2"
-;                     /db_xref="PID:g158956"
-Entamoeba
------------MSKYTGPAVGIDLGTTYSCVGIWQNDRVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQIAMNVKNTVFDAKRLIGRRFSDPAIQNDMKHWSFKVIDDGHDKPLIE
-VEYK-----GEVKKFTPEEISSMVLTKMKETA-ESFVG--KEVKNAVITCPAYFNDSQRQ
-ATKDAGTIAGMNVMRIINEPTAAAIAYGLDKKS----DREKNVLIFDLGGGTFDVSLLAI
-DDG--VFEVKASNGDTHLGGEDFDNRLVNHFIAEFKRKYK------------KDISGNAR
-AVRRLRTACERAKRTLSS-AATANIEVDQLFDGIDFY----TSITRARFEELNIDLFKST
-IGPVERVLQDA-------KLDKGSIDDVVLIGGSTRIPKVVQL-LQDFFNGKEPNKSINP
-DEAV-AYGAAVQAAILTGTGGKA-----TEDVLLLDVAPLTLGIETAGGVMTALIPRNST
-IPAKKSQVF-STYADNQPGVLIQVFEGEA-SMTNHCNLLGK----FELTGIPPAPRG-VP
-QIEVTFDIDANGIL-NVSAEDKT-TGKKNKITITNDKGRLSKE-QIDKMVAEAEKFKAED
-DKMKQRVEAKNKLENFCYSV--KNTLS-E-QFADKIAAEDKTTIENIVKETLDWIDNNQ-
-NASTEEYDNKMKEVEGKVQPIFTKLYQQAG-------------AAGGMPGGMPN------
----------G-FPGAGAAPQGNAQPKSSGKGPTIEEVD----------------------
--------------------------------------------------------
-;ONU37280.PE1            652 residues Frame 0 Code 6
-;DEFINITION  Oxytricha nova Hsp70 gene, complete cds.
-;ACCESSION   U37280
-;     CDS             431..2386
-;                     /note="heat-shock protein 70"
-;                     /codon_start=1
-;                     /transl_table=6
-;                     /product="Hsp70"
-;                     /db_xref="PID:g1051276"
-;Genetic code used: UAR=Q
-Oxytricha
---------------MSGPAIGIDLGTTYSCVGVWLNDKVEIIPNDQGNNTTPSYVAFT-E
--EERLIGDAAKNQVARNPKNTVFDAKRLIGRKFSDKQIQEDMKHWPFKVEQGPGDKPIII
-VEYK-----GENKKFQPEEISSMVLVKMKEIA-EAYLS--KTVKNAVITVPAYFNDSQRQ
-ATKDAGTISGLNVLRIINEPTAAAIAYGLDKKS----SQEKNVLIFDLGGGTFDVSLLTI
-EEG--IFEVKATNGHTHLGGEDFDNRLVDYCVAEFKKKTG------------INIDGNAR
-ALRRLRTQCEKAKRILSA-AHQAPIECETLAEGEDFN----TQISRAKFEELCMDLFRKC
-MPPVENVLKDA-------SLAKGQIHEVVLVGGSTRIPKVQQM-LSDFFNGKTLNRSINP
-DEAV-AYGAAVQAAILTGEGDSN-----VKDLLLLDVAPLSLGIETAGGVMTILIGRNTT
-IPTKKSQIF-TTYADNQPGVLIQVFEGER-SMTKDNHLLGK----FNLEGIPPAPRG-VP
-QIEVTFDIDANGIL-NVSAVDKG-TGKINKITITNDKGRLSKE-EIEKMVNDAEKFKGED
-EKMKKRIEAKNSFENYCFQM--KNTLNDE-KLKEKFTEDDKKVIEDASKEGLQWLEGNP-
-MAEPEEIEAKQKEVEAKYNPIMMRVYQAAGG------------MPGGMPGGMPG------
----------G-MPGGFPGGAGGAAP---GGG-DVNDLD----------------------
--------------------------------------------------------
-;TPU40190.HSP-70         648 residues Frame 0 Code 0
-;DEFINITION  Theileria parva 70 kDa heat shock protein (hsp 70) mRNA, complete
-;            cds.
-;ACCESSION   U40190
-;     CDS             194..2137
-;                     /gene="hsp 70"
-;                     /note="stress protein; chaperon"
-;                     /codon_start=1
-;                     /product="70 kDa heat shock protein"
-;                     /db_xref="PID:g1100900"
-Theileria
--------------MT-GPAIGIDLGTTYSCVAVYKDNNVEIIPNDQGNRTTPSYVAFT-D
--TERLIGDAAKNQEARNPENTIFDAKRLIGRKFDDRTVQEDMKHWPFKVTNGPNGKPNIE
-VTFQ-----GEKKTFHAEEISSMVLTKMKEIA-EAFLG--KSVKDVVITVPAYFNDSQRQ
-ATKDAGTIAGLNVMRIINEPTAAAIAYGLDKKG----GGEKNVLIFDLGGGTFDVSILTI
-EDG--IFEVKATAGDTHLGGEDFDNLLVEHCVRDFMRLNNG-----------KNISSNKR
-ALRRLRTHCERAKRVLSS-STQATIELDSLYEGIDYN----TTISRARFEELCNEKFRST
-LVPVEKALESS-------GLDKRSIHEVVLVGGSTRIPKIQTL-IKNFFNGKEPCRSINP
-DEAV-AYGAAVQAAILSGNQSEK-----IQELLLLDVAPLSLGLETAGGVMTVLIKRNTT
-IPTKKNQIF-TTNEDRQEGVLIQVFKGER-AMTKDNNLLGK----FHLTGIAPAPRG-VP
-QIEVTFDIDANGIL-NVTAMDKS-TGKSEHVTITNDKGRLSQE-EIDRMVEEAEKYKEED
-EKRRKCVESKHKLENYCYSM--KNTLSED-QVKQKLGADEVDNALNTITEALKWVETNQ-
-LAEHDEFEDKLKHVEGVCNPLVTKLYQSGGAPGA------GPDMGAGFPGGAPPP-----
---------------------------SSSSGPTVEEVD----------------------
--------------------------------------------------------
-;ACU46464.PE1            706 residues Frame 0 Code 0
-;DEFINITION  Ajellomyces capsulatus heat shock protein 70 gene, complete cds.
-;ACCESSION   U46464
-;     CDS             join(470..485,570..1300,1464..2515,2625..2943)
-;                     /codon_start=1
-;                     /product="heat shock protein 70"
-;                     /db_xref="PID:g1230567"
-Ajellomyces
----------------MAPAVGIDLGTTYSCVGIFRDDRIEIIANDQGNRTTPSFVAFT-D
--TERLIGDAAKNQVAMNPANTVFDAKRLIGRKFADPEVQADMKHFPFKITDKGGKP-VIQ
-VEFK-----GETKEFTPEEISSMVLTKMRETA-EAYLG--GTVNNAVVTVPAYFNDSQRQ
-ATKDAGLIAGLNVLRIINEPTAAAIAYGLDKKA----DGERNVLIFDLGGGTFDVSLLTI
-EEG--IFEVKSTAGDTHLGGEDFDNRLVNHFVSEFKRKFKK-----------ISPAERAR
-ALRRSPTACERAKRTLSS-AAQTSIEIDSLYEGIDFY----TSITRARFEELCQDLFRST
-MEPVERVLRDA-------KIDKSSVHEIVLVGGSTRIPRIQKL-VSDFFNGKEPNKSINP
-DEAV-AYGAAVQAAILSGDTSSK---S-TNEILLLDVAPLSLGIETAGGVMTPLIKRNTT
-IPTKKSETF-STFSDNQPGVLIQVFEGER-ARTKDNNLLGK----FELTGI-PRARG-VP
-QIEVTFDVDANGIM-NVSALEKG-TRKTNKIVITNDKGRLSKE-EIERMLAEAEKYKAED
-EAEASRIRPKNGLESYAYSL--RNSLRHS-KVDEKLEAGDKEKLKSEIDKTVQWLDENQ-
-TATKEEYESQQKELEAVANPIMMKFYAGGEGAPGGFPGAGGPGGFPGGPGAGHASGGGDD
-GPTVEEVDLKFPMLPLPWQLSVRKMHRPFFLFLLFLIFLIFLILFLFYFFLPVRFNESCF
-S------------------------------------------------------
-;CPU11761.HSP70          675 residues Frame 0 Code 0
-;DEFINITION  Cryptosporidium parvum KSU-1 heat shock 70 kDa protein (hsp70)
-;            gene, complete cds.
-;ACCESSION   U11761
-;     CDS             1272..3296
-;                     /gene="hsp70"
-;                     /note="cytoplasmic protein; aa 620-663 are 11 perfect
-;                     repeats of GGMP; aa 11-18 and 202-209 are conserved in all
-;                     eukaryotic 70kDa heat shock proteins;  C-terminal aa
-;                     671-674 are specific to eukaryotic, cytoplasmic 70 kDa
-;                     heat shock proteins"
-;                     /codon_start=1
-;                     /function="molecular chaperone protein, ATP binding
-;                     protein"
-;                     /product="heat shock 70 kDa protein"
-;                     /db_xref="PID:g607864"
-Cryptosporidium
------------MTSSEGPAIGIDLGTTYSCVGVWRNDTVDIVPNDQGNRTTPSYVAFT-E
--TERLIGDAAKNQVARNPENTVFDAKRLIGRKFDDQAVQSDMTHWPFKVVRGPKDKPIIS
-VNYL-----GEKKEFHAEEISAMALQKMKEIS-EAYLG--RQIKNAVVTVPAYFNDSQRQ
-ATKDAGAIAGLNVMRIINEPTAAAIAYGLDKKG----TGERNVLTFDLGGGTFDVSLLTI
-EDG--IFEVKATAGDTHLGGEDFDNRLVEFCVQDFKRKNRG-----------MDLTSNAR
-ALRRLRTQCERAKRTLSS-STQATIELDSLYEGIDYS----VAISRARFEELCADYFRAT
-LAPVEKVLKDA-------GMDKRSVHDVVLVGGSTRIPKVQAL-IQEFFNGKEPCKAINP
-DEAV-AYGAAVQAAILNGEQSSA-----VQDLLLLDVAPLSLGLETAGGVMTKLIERNTT
-IPAKKTQVF-TTYADNQSGVLIQVYEGER-AMTKDNHLLGK----FHLDGIPPAPRG-VP
-QIEVTFDIDANGIL-NVSAVDKS-TGKSSKITITNDKGRLSKVSDIERMVNDAEKYKGED
-EQNRLKIEAKNSLENYLYNM--RNTIQEP-KVKEKLSQSEIDEAEKKIKDALDWLEHNQ-
-TAEKDEFEHQQKEIETHMNPLMMKIYSAEGGMPGGMPGGMPGGMPGGMPGGMPGGMPGGM
-PGGMPGGMPGGMPGSNGPTVEEVD------------------------------------
--------------------------------------------------------
-;PFAHSP70B.HSP70         687 residues Frame 0 Code 0
-;DEFINITION  Plasmodium cynomolgi heat shock protein 70 (hsp70) gene, complete
-;            cds.
-;ACCESSION   M90978
-;     CDS             570..2630
-;                     /gene="hsp70"
-;                     /codon_start=1
-;                     /product="heat shock protein 70, hsp70A2"
-;                     /db_xref="PID:g160350"
-Plasmod-cyno
---MASGKASKPNLPESNIAIGIDLGTTYSCVGVWRNENVDIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVARNPENTVFDAKRLIGRKFTESSVQSDMKHWPFTVKSGVDEKPMIE
-VSYQ-----GEKKLFHPEEISSMVLQKMKENA-EAFLG--KSIKNAVITVPAYFNDSQRQ
-ATKDAGTIAGLNVMRIINEPTAAAIAYGLHKKG----KGEKNILIFDLGGGTFDVSLLTI
-EDG--IFEVKATAGDTHLGGEDFDNRLVNFCVEDFKRKNRG-----------KDLSKNSR
-ALRRLRTQCERAKRTLSS-STQATIEIDSLFEGIDYS----VTVSRARFEELCIDYFRDT
-LIPVEKVLKDA-------MMDKKSVHEVVLVGGSTRIPKIQTL-IKEFFNGKEACRSINP
-DEAV-AYGAAVQAAILSGDQSNA-----VQDLLLLDVCSLSLGLETAGGVMTKLIERNTT
-IPAKKSQIF-TTYADNQPGVLIQVYEGER-ALTKDNNLLGK----FHLDGIPPAPRK-VP
-QIEVTFDIDANGIL-NVTAVEKS-TGKQNHITITNDKGRLSPE-EIDRMVNDAEKYKAED
-EENKKRIEARNSLENYCYGV--KSSLEDQ-KIKEKLQPSEIETCMKSITTILEWLEKNQ-
-LASKEEYESKQKEAESVCAPIMSKIYQDVGGAAGGMPGGMPGGMPGGMPGGMPGGGM---
-------PGGMNFPGGMPGGGMPGGA-PAGSGPTVEEVD----------------------
--------------------------------------------------------
-;PFAHSP70H.HSP70         682 residues Frame 0 Code 0
-;DEFINITION  Plasmodium falciparum heat shock protein (HSP70) homologue mRNA,
-;            complete cds.
-;ACCESSION   M19753
-;     CDS             23..2068
-;                     /gene="HSP70"
-;                     /note="homologue"
-;                     /codon_start=1
-;                     /product="heat shock protein 70"
-;                     /db_xref="PID:g309690"
-Plasmod-falci
---MASAKGSKPNLPESNIAIGIDLGTTYSCVGVWRNENVDIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVARNPENTVFDAKRLIGRKFTESSVQSDMKHWPFTVKSGVDEKPMIE
-VTYQ-----GEKKLFHPEEISSMVLQKMKENA-EAFLG--KSIKNAVITVPAYFNDSQRQ
-ATKDAGTIAGLNVMRIINEPTAAAIAYGLHKKG----KGEKNILIFDLGGGTFDVSLLTI
-EDG--IFEVKATAGDTHLGGEDFDNRLVNFCVEDFKRKNRG-----------KDLSKNSR
-ALRRLRTQCERAKRTLSS-STQATIEIDSLFEGIDYS----VTVSRARFEELCIDYFRDT
-LIPVEKVLKDA-------MMDKKSVHEVVLVGGSTRIPKIQTL-IKEFFNGKEACRSINP
-DEAV-AYGAAVQAAILSGDQSNA-----VQDLLLLDVCSLSLGLETAGGVMTKLIERNTT
-IPAKKSQIF-TTYADNQPGVLIQVYEGER-ALTKDNNLLGK----FHLDGIPPAPRK-VP
-QIEVTFDIDANGIL-NVTAVEKS-TGKQNHITITNDKGRLSQD-EIDRMVNDAEKYKAED
-EENRKRIEARNSLENYCYGV--KSSLEDQ-KIKEKLQPAEIETCMKTITTILEWLEKNQ-
-LAGKDEYEAKQKEAESVCAPIMSKIYQDAAGAAGGMPGGMPGGMPGGMPSGMPG------
---------GMNFPGGMPGAGMPGNA-PAGSGPTVEEVD----------------------
--------------------------------------------------------
-;SCMHSP70X.HSP70         638 residues Frame 0 Code 0
-;DEFINITION  Schistosoma mansoni heat shock protein 70 (HSP70) gene, complete
-;            cds.
-;ACCESSION   L02415
-;     CDS             533..2446
-;                     /gene="HSP70"
-;                     /codon_start=1
-;                     /product="heat shock protein 70"
-;                     /db_xref="PID:g552242"
-Schistosoma
--------------MP-N-AIGIDLGTTYSCVGVFQHGKVEIIANDQGNRTTPSYVAFT-D
--SERLIGDGAKNQVAMNPTNTVFDAKRLIGRRFDDPSVQSDMKHWPFEVTQ-VGGKLKIC
-VEYK-----GEKKMFSAEEISSMVLTKMKEVA-ESYLG--RTVSDAVITVPAYFNDSQRQ
-ATKDAGAIAGLNVLRIINEPTAAAIAYGLDKKV----GGERNVLIFDLGGGTFDVSILTI
-EDG--IFEVKSTAGDTHLGGEDFDNRMVDHFVKEFQKKYN------------KDIRSNKR
-ALRRLRTACERAKRTLSS-SAQTNLEIDSLCDGTDFY----TVITRARFEELNADLFRGT
-LDPVEKALRDA-------KMDKSQIHDIVLVGGSTRIPKVQKL-LQDFFNGKELNKSINP
-DEAV-AYGAAVQAAILSGEKCEA-----VQDLLLLDVAPLSLGLETAGGVMTALIKRNTT
-IPTKQTQTF-TTYSDNQPGVLIQVFEGER-ALTKDNNLLGK----FELSGIPPAPRG-TP
-QIEVTFDIDANGIL-NVSAVDKG-TGKQNKITITNDKGRLSKE-EIERMVADADKYKAED
-EKQRDRVSAKNSLESYVYTM--KQQVEG--ELKEKIPESDRQVIISKCEDTISWLDVHQ-
-SAEKHEYESKREELEKVCAPIITKVYQA-----------------GGMPGGMHE------
----------A---SGAGG--------GSGKGPTIEEVD----------------------
--------------------------------------------------------
-;LEIHSP70C.HSP70         653 residues Frame 0 Code 0
-;DEFINITION  Leishmania amazonensis heat shock protein 70 (hsp70) mRNA, complete
-;            cds.
-;ACCESSION   L14604
-;     CDS             152..2110
-;                     /standard_name="hsp70"
-;                     /codon_start=1
-;                     /product="heat shock protein 70"
-;                     /db_xref="PID:g293057"
-Leishma-ama
--------------MTFDGAIGIDLGTTYSCVGVWQNDRVEIIANDQGNRTTPSYVAFT-D
--SERLIGDAAKNQVAMNPHNTVFDAKRLIGRKFNDLVVQSDMKHWPFKVTTKGDDKPVIS
-VQYR-----GEEKTFTPEKISSMVLLKMKETA-EAYLG--KQVKKAVVTVPAYFNDSQRQ
-ATKDAGTISGLEVLRIINEPTAAAIAYGLDKGD---DGKERNVLIFDLGGGTFDVTLLTI
-DGG--IFEVKATNGDTHLGGEDFDNRLVTFFTEEFKRKNKG-----------KNLASSHR
-SLRRLRTACERAKRTLSS-ATQATIEIDALFDNVDFQ----ATINRARFEELCGDLFRST
-IQPVERVLQDA-------KMDKRSVHDVVLVGGSTRIPKVQSL-VSDFFGGKELNKSINP
-DEAV-AYGAAVQAFILTGGKSKQ-----TEGLLLLDVTPLTLGIETAGGVMTALIKRNTT
-IPTKKSQIF-STYADNQPGVHIQVFEGER-AMTKDCHLLGT----FDLSGIPPAPRG-VP
-QIEVTFDLDANGIL-NVSAEEKG-TGKRNQITITNDKGRLSKD-EIERMVNDAMKYEADD
-KAQADRVEAKNGLENYAYSM--KNTLGDS-NVSGKLDDTDKSTLNKEIEAALEWLSSNQ-
-EATKEEYEHKQKELENVCNPIMTKMYQSMGGGA--------GGMAG-MPDMSSMSG----
--------------ARPAG--------GASSGPKVEEVD----------------------
--------------------------------------------------------
-;LMHSP704G               632 residues Frame 0 Code 0
-;DEFINITION  L.major hsp70.4 gene for heat shock protein 70-related protein.
-;ACCESSION   X69825
-Leishma-maj-4
--------------MSSTNAIAIDLGTTYSCVGVFKNEQVDIIANDQGNRTTPSYVAFT-E
--TERLNRRCAKNQVAMNPSNTVFDAKRMIGRKFDDPDLQSDMKHWPFKVIVKDG-KPVIS
-VEYQ-----NQTKTFFPEEISATVLQKMKETA-EAYLG--TTVKDAVITVPAYFNDSQRQ
-ATKDAGSIAGLNVLRIINEPTAAAIAYGMDRKG---DKGEKNVLIFDLGGGTFDVTLLTI
-ESG--VFEVKATAGDTHLGGEDFDNRLVDYSPLSSRCAAA------------RTAVATPA
-PRAGLRTACERVKRTLSS-STTANIEIDALYEGNDFF----SKITRARFEEMCRDQFEKC
-LEPVKKVLADA-------DMKPQDVDDVVLVGGSTRIPKIQQI-VSQFFGGKELNRSINP
-DEAV-AYGAAVQAHILAGGHSSK-----TDGLLLLDVTPLSLGVETSGGVMSVLIPRNST
-MPVQKTQTY-SNNADNQRNVVIKVYEGER-PLVSQCQCLGT----FTLTDIPPMPRG-KA
-RINVTFDVNTDGIL-IVSAVEES-GGRKEAITIQNDTGRLSKE-QIESMVREAEKFAEED
-RMNSERVEARNTLENYTFSM--RATLDDP-DVQNGITQGDRQQIQDAVNAASSWLEKNR-
-EATKEEYMEQTKLIEGIAHRFCRSSTKACHG------GPTKRWAEGRCPLR---------
-------------------------------------------------------------
--------------------------------------------------------
-;LDHSP70.PE1             654 residues Frame 0 Code 0
-;DEFINITION  Leishmania hsp70 gene for heat shock protein 70.
-;ACCESSION   X52314
-;     CDS             165..2126
-;                     /note="heat shock protein (AA 1 - 653)"
-;                     /codon_start=1
-;                     /db_xref="PID:g9496"
-;                     /db_xref="SWISS-PROT:P17804"
-Leishmania-dono
--------------MTFDGAIGIDLGTTYSCVGVWQNERVDIIANDQGNRTTPSYVAFT-D
--SERLIGDAAKNQVAMNPHNTVFDAKRLIGRKFNDSVVQSDMKHWPFKVTTKGDDKPMIA
-VQYR-----GEEKTFTPEEISSMVLLKMKETA-EAYLG--KQVKKAVVTVPAYFNDSQRQ
-ATKDAGTIAGLEVLRIINEPTR-AIAYGLDKGD---DGKERNVLIFDLGGGTFDVSLLTI
-DGG--IFEVKATNGDTHLGGEDFDNRLVTFFTEEFKRKNKG-----------KNLASSHR
-ALRGLRTACERAKRTLSS-ATQATIEIDALFENVDFQ----ATITRARFEELCGDLFRST
-IQPVERVLQDA-------KMDKRSVHDVVLVGGSTRIPKVQSL-VSDFFGGKELNKSINP
-DEAV-AYGAAVQAFILTGGKSKQ-----TEGLLLLDVTPLTLGIETAGGVMTALIKRNTT
-IPTKKSQIF-STYADNQPGVHIQVFEGER-AMTKDCHLLGT----FDLSGIPPAPRG-VP
-QIEVTFDLDANGIL-NVSAEEKG-TGKRNQITITNDKGRLSKD-EIERMVNDAMKYEADD
-RAQRDRVEAKNGLENYAYSM--KNTLGDS-NVSGKLDDSDKATLNKEIDVTLEWLSSNQ-
-EATKEEYEHKQKELESVCNPIMTKMYQSMGGAG--------GGMPGGMPDMSGMSGG---
-----AGPAG-----------------GASSGPKVEEVD----------------------
--------------------------------------------------------
-;TCHSP70.PE1             681 residues Frame 0 Code 0
-;DEFINITION  Trypanosoma cruzi hsp70 gene.
-;ACCESSION   X07083 X13690
-;     CDS             302..2344
-;                     /note="hsp70 protein"
-;                     /codon_start=1
-;                     /db_xref="PID:g10622"
-;                     /db_xref="SWISS-PROT:P05456"
-Trypanosoma
--------------MTYEGAIGIDLGTTYSCVGVWQNERVEIIANDQGNRTTPSYVAFT-D
--SERLIGDAAKNQVAMNPRNTVFDAKRLIGRKFSDPVVQSDMKHWPFKVITKGDDKPVIQ
-VQFR-----GETKTFNPEEVSSMVLSKMKEIA-ESYLG--KQVKKAVVTVPAYFNDSQRQ
-ATKDAGTIAGLEVLRIINEPTAAAIAYGLDKVE---DGKERNVLIFDLGGGTFDVTLLTI
-DGG--IFEVKATNGDTHLGGEDFDNRLVAHFTDEFKRKNKG-----------KDLSTNLR
-ALRRLRTACERAKRTLSS-AAQATIEIDALFDNVDFQ----ATITRARFEELCGELFRGT
-LQPVERVLQDA-------KMDKRAVHDVVLVGGSTRIPKVMQL-VSDFFRGKELKKSIQP
-DEAV-AYGAAVQAFILTGGKSKQ-----TEGLLLLDVTPLTLGIETAGGVMTSLIKRNTT
-IPTKKSQIF-STYADNQPGVHIQVFEGER-AMTKDCHLLGT----FELSGIPPPPRG-VP
-QIEVTFDLDANGIL-NVSAEEKG-TGKRNQIVLTNDKGRLSRA-EIERMVREAAKYEAED
-KDQVRQIDAKNGLENYAFSM--KNAVNDP-NVAGKIEEADKKTITSAVEEALEWLNNNQ-
-EASKEEYEHRQKELENLCTPIMTNMYQGMAGAGM------PGGMPGGMPGGMPGGMPGGM
-PGGMPGGMPGGMPGGMPGGMPGGANPSSSSGPEVEEVD----------------------
--------------------------------------------------------
-;TCHSPR70.HSP70          679 residues Frame 0 Code 0
-;DEFINITION  T.cruzi mRNA for HSP70.
-;ACCESSION   X67716
-;     CDS             76..2112
-;                     /gene="Hsp70"
-;                     /codon_start=1
-;                     /product="Heat shock protein 70"
-;                     /db_xref="PID:g10626"
-Trypano-mRNA
--------------MTYEGAIGIDLGTTYSCVGVWQNERVEIIANDQGNRTTPSYVAFT-D
--TERLIGDAAKNQVAMNPTNSPFDAKRLIGRKFSDPVVQSDMKHWPFKVITKGDDKPVIQ
-VQFR-----GETKTFNPEEVSSMVLSKMKEIA-ESYLG--KQVKKAVVTVPAYFNDSQRQ
-ATKDAGTIAGMEVLRIINEPTRAAIAYGLDKVE---DGKERNVLIFDLGGGTFDVTLLTI
-DGG--IFEVKATNGDTHLGGEDFDNRLVSHFTDEFKRKNKG-----------KDLTTSQR
-ALRRLRTACERAKRTLSS-AAQATIEIDALFDNVDFQ----ATITRARFEELCGDLFRGT
-LQPVERVLQDA-------KMDKRAVHDVVLVGGSTRIPKVMQL-VSDFFGGKELNKSINP
-DEAV-AYGAAVQAFILTGGKSKQ-----TEGLLLLDVTPLTLGIETAGGVMTSLIKRNTT
-IPTKKSQIF-STYADNQPGVHIQVFEGER-AMTKDCHLLGT----FDLSGIPPAPRG-VP
-QIEVTFDLDANGIL-NVSAEEKG-TGKRNQIVITNDKGRLSKA-DIERMVSEAAKYESQD
-KEQRERIDAKNGLENYAFSM--KNTVNEP-NVAGKIEEADKNTITSAVEEALQWLNNNQ-
-EASKEEYEHRQKELENLCTPIMTKMYQGMGAG---------GGMPGGMPGGMPGGMP---
-----GGANP-----------------SSSSGPKVEEVERGRIPEDVLMAASARERITRWF
-SPL----------------------------------------------------
-;GLU04874.PE1            665 residues Frame 0 Code 0
-;DEFINITION  Giardia lamblia Portland 1 cytoplasmic 70 kDa heat shock protein
-;            gene, complete cds.
-;ACCESSION   U04874
-;     CDS             168..2162
-;                     /note="molecular chaperone protein; ATP binding protein;
-;                     shares homology with heat shock protein HSP70, Swiss-Prot
-;                     Accession Number P11142"
-;                     /codon_start=1
-;                     /function="translocation of proteins across intracellular
-;                     membranes"
-;                     /product="cytoplasmic 70 kDa heat shock protein"
-;                     /db_xref="PID:g468014"
-Giardia-c
--------------MATAPAVGIDLGTTYSCVGVYQNEKVEIIANEQGAYTTPSYVAFT-D
--ADGLIGDSAKNQCALNPENTIFDAKRLIGRRFNDPEVQADLKHFRSRSSCGPTRTPQIQ
-VVYK-----GETKTFTPEEISSMVLTKMKDIA-SDYLG--NKVTEAIVTVPAYFSDAHGK
-ATQNAGTIAGLNVLRIINEPTAAAIAYGLDKST---SKKERNILIFDLGGGTFDVSLLTV
-DPSSGVFEVKATAGDTHLGGEDFDSRVVNYFIAEFKKKH-G-----------KDISGSNR
-AMRRLRTACEEAKRTLSS-SQQASIEIESLFEGIDFF----TNITRAKFEDLCIDLFRKC
-LDPVDRVLRDS-------KLGKNDVHDIVLVGGSTRIPKVQQM-LRDFFSGRELSKNVNP
-DEAV-AYGASVQAALLSSYKDQAGSGA-INDILLLDVTPLSLGIETSGTNMTTLIPRNTT
-VPVSRKETF-TTYADNQTTVTIRIFEGER-PLTKDNNLLGT----FDLGGIPPAPRG-TP
-KIEVTYDVSADGVL-TVTAKDLGGTGNSKQLSINQNANRLSQE-EIDRMVKDAERFAKED
-EKIREGQKARNELESLVFSV--KSTLGEG-KVQISDDDKKK--IETAVNECATWLENNK-
-VGDKEQFEAKKKELEAIVHPVMAAGMGAAGMPPGGFPGGMPPGGFPGGFPGGMPGGAAPG
-GAPAGPSVDDLD------------------------------------------------
--------------------------------------------------------
-;EMHSP70.HSP70           522 residues Frame 0 Code 0
-;DEFINITION  E.maxima hsp70 gene for heat-shock protein.
-;ACCESSION   Z46964
-;     CDS             <3..1568
-;                     /gene="hsp70"
-;                     /citation=[1]
-;                     /codon_start=1
-;                     /product="heat-shock protein"
-;                     /db_xref="PID:g603812"
-Eimeria-maxima
-------------------------------------------------------------
-------------------------------------------------------------
-----------------------------------QFIG--KEIKEAVITVPAYFNDSQRQ
-ATKDAGTIAGLNVLRIINEPTAAAIAYGLDKKG----QGEMNVLIFDMGGGTFDVSLLTI
-EDG--IFEVKATAGDTHLGGEDFDNRLVDFCIQDFKRKNRS-----------KDPSNNSR
-ALRRLRTQCERAKRTLSS-STQATIEIDSLYEGIDYS----VSLSRARFEELCMDYFRNS
-LIPVEKVLKDS-------NIDKRSVHEVVLVGGSTRIPKIQQL-IQEFFNGKEPCRSINP
-DEAV-AYGAAVQAAILKGVNSTQ-----VQDLLLLDVAPLSLGLETAGGVMTKLIERNTT
-IPTKKSQIF-TTYADNQPGVLIQVYEGER-AMTKDNNLLGK----FHLDGIPPAPRG-VP
-QIEVTFDIDANGIM-NVTATEKN-TGKSNQITITNDKGRLSQG-EIDRMVAEAEKYKAED
-EANKQRIEAKNNLENYCYSM--RSTLDEE-KVKDKISKEDKDTAAAAIQKTLDWLDKNQ-
-LAEKEEYESKLKEIEGVCTPIVTKMYQAAA--------GAAGGMPGAAAGMPGGMPDMS-
-----------------------GAAAAPGAGPTVEEVD----------------------
--------------------------------------------------------
-;SCSSB1G.PE1             614 residues Frame 0 Code 0
-;DEFINITION  Yeast SSB1 heat shock cognate gene.
-;ACCESSION   X13713
-;     CDS             210..2051
-;                     /note="heat shock protein 70 cognate (AA 1-613)"
-;                     /codon_start=1
-;                     /db_xref="PID:g4548"
-;                     /db_xref="SWISS-PROT:P11484"
-Saccharo-SSB1
-----------MAEGVFQGAIGIDLGTTYSCVATYESS-VEIIANEQGNRVTPSFVAFT-P
--EERLIGDAAKNQAALNPRNTVFDAKRLIGRRFDDESVQKDMKTWPFKVIDVD-GNPVIE
-VQYL-----EETKTFSPQEISAMVLTKMKEIA-EAKIG--KKVEKAVITVPAYFNDAQRQ
-ATKDAGAISGLNVLRIINEPTAAAIAYGLGAGK---SEKERHVLIFDLGGGTFDVSLLHI
-AGG--VYTVKSTSGNTHLGGQDFDTNLLEHFKAEFKKKTG------------LDISDDAR
-ALRRLRTAAERAKRTLSS-VTQTTVEVDSLFDGEDFE----SSLTRARFEDLNAALFKST
-LEPVEQVLKDA-------KISKSQIDEVVLVGGSTRIPKVQKL-LSDFFDGKQLEKSINP
-DEAV-AYGAAVQGAILTGQSTSD---E-TKDLLLLDVAPLSLGVGMQGDMFGIVVPRNTT
-VPTIKRRTF-TTCADNQTTVQFPVYQGER-VNCKENTLLGE----FDLKNIPMMPAG-EP
-VLEAIFEVDANGIL-KVTAVEKS-TGKSSNITISNAVGRLSSE-EIEKMVNQAEEFKAAD
-EAFAKKHEARQRLESYVASI--EQTVTDPVLSSKLKRGSKSKIEAALSDALAALQIEDPS
-ADELRKAEVGLKRVVTKAMSSR--------------------------------------
-------------------------------------------------------------
--------------------------------------------------------
-;CELHSP3.PE1             662 residues Frame 0 Code 0
-;DEFINITION  C. elegans BiP (hsp3) gene, complete cds.
-;ACCESSION   M26604
-;     CDS             join(442..628,675..1148,1387..2132,2237..2815)
-;                     /note="BiP, heat shock protein 3"
-;                     /codon_start=1
-;                     /db_xref="PID:g156346"
-Caenorhabditis-BiP
-IYCKEEEKTEKKETKYETIIGIDLGTTYSCVGVYKNGRVEIIANDQGNRITPSYVAFSGD
-QGDRLIGDAAKNQLTINPENTIFDAKRLIGRDYNDKTVQADIKHWPFKVIDKS-NKPSVE
-VKVG-----SDNKQFTPEEVSAMVLVKMKEIA-ESYLG--KEVKNAVVTVPAYFNDAQRQ
-ATKDAGTIAGLNVVRIINEPTAAAIAYGLDKKD-----GERNILVFDLGGGTFDVSMLTI
-DNG--VFEVLATNGDTHLGGEDFDQRVMEYFIKLYKKKSG------------KDLRKDKR
-AVQKLRREVEKAKRALST-QHQTKVEIESLFDGEDFS----ETLTRAKFEELNMDLFRAT
-LKPVQKVLEDS-------DLKKDDVHEIVLVGGSTRIPKVQQL-IKEFFNGKEPSRGINP
-DEAV-AYGAAVQGGVISGEED-------TGEIVLLDVNPLTMGIETVGGVMTKLIGRNTV
-IPTKKSQVF-STAADNQPTVTIQVFEGER-PMTKDNHQLGK----FDLTGLPPAPRG-VP
-QIEVTFEIDVNGIL-HVTAEDKG-TGNKNKITITNDQNRLSPE-DIEAMINDAEKFAEDD
-KKVKDKAEARNELESYAYNL--KNQIEDKEKLGGKLDEDDKKTIEEAVEEAISWLGSNA-
-EASAEELKEQKKDLESKVQPIVSKLYKDAGAGERRPQKRDLDDKDEL-------------
-------------------------------------------------------------
--------------------------------------------------------
-;ACBIP.PE1               668 residues Frame 0 Code 0
-;DEFINITION  A.californica mRNA for BiP/GRP78 homologue.
-;ACCESSION   Z15041
-;     CDS             132..2135
-;                     /codon_start=1
-;                     /product="BiP/GRP78"
-;                     /db_xref="PID:g5570"
-Aplysia-BiP
-ADGDEEDEGDKKKSEVGTVIGIDLGTTYSCVGVFKNGRVDIIANDQGNRITPSYVAFTAD
--GERLIGDAAKNQLTSNPENTIFDVKRLIGRTFDDKSVQHDIKFYPFKVTNAN-NKPHIQ
-AATG-----EGDRSFAPEEISAMVLSKMRDIA-EEYLG--KKITNAVVTVPAYFNDAQRQ
-ATKDAGTIAGLNVMRIINEPTAAAIAYGLDKK-----EGEKNILVFDLGGGTFDVSLLTI
-DNG--VFEVVSTNGDTHLGGEDFDQRVMEHFIKLYKKKKG------------KDIRKDNR
-AVQKLRREVEKAKRALSS-AHQVRLEIESFFDGEDFS----ESLTRAKFEELNMDLFRST
-MKPVKQVLEDA-------DLKTDDIDEIVLVGGSTRIPKVQQL-VKEYFNGKEPSRGINP
-DEAV-AYGAAVQAGVLSGEED-------TGDLVLLDVNPLTMGIETVGGVMTKLIPRNTV
-IPTKKSQIF-STAADNQPTVTIQVYEGER-SMTKDNHLLGK----FDLTGIPPAPRG-VP
-QIEVTFEIDVNGIL-KVTAEDKG-TGSKNQIVIQNDQNRLSPE-DIERMINDAEKYADED
-KKVKEKVDAKNELESYAYSL--KNQIGDKEKLGAKLSDEDKEKITEAVDEAIKWLESNA-
-EAESEAFNEKKTELEGIVQPIMTKLYEQSGGAPPPSGEEESEEAEKDEL-----------
-------------------------------------------------------------
--------------------------------------------------------
-;SPBIP.BIP               664 residues Frame 0 Code 0
-;DEFINITION  S.pombe bip gene.
-;ACCESSION   X64416 S94662
-;     CDS             441..2432
-;                     /gene="bip"
-;                     /codon_start=1
-;                     /product="BiP"
-;                     /db_xref="PID:g4917"
-;                     /db_xref="SWISS-PROT:P36604"
-Schizosacc-bip
-LPMAFASGDDNSTESYGTVIGIDLGTTYSCVAVMKNGRVEIIANDQGNRITPSYVAFT-E
--DERLVGEAAKNQAPSNPENTIFDIKRLIGRKFDEKTMAKDIKSFPFHIVNDK-NRPLVE
-VNVG-----GKKKKFTPEEISAMILSKMKQTA-EAYLG--KPVTHSVVTVPAYFNDAQRQ
-ATKDAGTIAGLNVIRIVNEPTAAAIAYGLDKT-----DTEKHIVVYDLGGGTFDVSLLSI
-DNG--VFEVLATSGDTHLGGEDFDNRVINYLARTYNRKNN------------VDVTKDLK
-AMGKLKREVEKANGTLSS-QKSVRIEIESFFNGQDFS----ETLSRAKFEEIKHGSLQED
-FEPVEQVLKDS-------NLKKSEIDDIVLVGGSTRIPKVQEL-LESFF-GKKASKGINP
-DEAV-AYGAAVQAGVLSGEEG-------SDNIVLLDVIPLTLGIETTGGVMTKLIGRNTP
-IPTRKSQIF-STAVDNQNTVLIQVYEGER-TLTKDNNLLGK----FDLRGIPPAPRG-VP
-QIEVTFEVDANGVL-TVSAVDKSGKGKPEKLVIKNDKGRLSEE-DIERMVKEAEEFAEED
-KILKERIEARNTLENYAYSL--KGQFDDDEQLGGKVDPEDKQAVLDAVEDVAEWLEIHGE
-DASKEEFEDQRQKLDAVVHPITQKLYSEGAGDADEEDDDYFDDEADEL------------
-------------------------------------------------------------
--------------------------------------------------------
-;
-;GLU04875.BIP            663 residues Frame 0 Code 0
-;DEFINITION  Giardia lamblia Portland 1 immunoglobulin heavy chain binding
-;            protein (Bip), glucose-related protein (GRP78) gene, complete cds.
-;ACCESSION   U04875
-;     CDS             514..2502
-;                     /gene="Bip"
-;                     /note="endoplasmic reticulum resident; ATP binding
-;                     protein; protein also called glucose-related protein; gene
-;                     also called GRP78; molecular chaperone protein; belongs to
-;                     heat shock family of proteins; shares homology with HSP70,
-;                     Swiss-Prot Accession Number P11142, Bip/GRP78, Swiss-Prot
-;                     Accession Number P22010, and Kar2p, Swiss-Prot Accession
-;                     Number P16474"
-;                     /codon_start=1
-;                     /function="translocation of proteins across intracellular
-;                     membranes"
-;                     /product="immunoglobulin heavy chain binding protein"
-;                     /db_xref="PID:g468016"
-Giardia-BIP
-----MLALVFAALALAETIIGIDLGTTYSCVAVSRAGQVEIIPNELGARVTPSYVAFTAD
--GERLVGDAAKNYAPISPENTIFDVKRLIGRKFDDPEVQKDMKLLPYKVINKD-GRPFVQ
-LSGTNLPKELQNKIMSPEEISAMVLTKMKTIA-EDYLG--EKITKAVVTVPAYFSDSQRS
-ATKDAGRIAGLDVVRIINEPTSSSIAYGLDKKTQETSGKAKNILVFDCGGGTHDVSILSV
-DSG--VFEVLATAGNTHLGGEDFDRRLLDHFIAIFKKKNNIDLSITNTGDKAKDMAV-KK
-AISRLRREIEAGKRQLST-ASSVQIVVDSLIDGIDFS----ELVTRAKFEELNIDLFKKS
-IKPVEQVLRDA-------KLKTTDIDEVVLVGGSTRIPKIRQL-LQDYFNGKALNKDINA
-DEAV-AWGAAVQASILSGAK--------DHDVLLIDVTPLTLGIETQGGIMTPLIERNSY
-IPVKKSKIF-STVQDQQTMVKIQVYEGER-SMVKDNNLLGN----FDLNDIPPAPRG-TP
-QIEVTFEIDSNGIL-TVSAVEKS-SGKEESITIKNDRGRLSED-EINRLVKEAEEFAEED
-KINRERAEARNAFEMIVSITTTQTTADKEGNIVDKISSDDLEKVKEAVKEAQDWLRDNT-
-DASKEEIEEEKSKFEKVVQPILGENFGRSASAGSSGPEYDYAEKDEL-------------
-------------------------------------------------------------
--------------------------------------------------------
-;SPIHSC70A.HSC70         669 residues Frame 0 Code 0
-;DEFINITION  Spinacia oleracea ER-lumenal protein (HSC70) mRNA, complete cds.
-;ACCESSION   L23551
-;     CDS             75..2081
-;                     /gene="HSC70"
-;                     /standard_name="BiP, GRP-78, HSP70"
-;                     /codon_start=1
-;                     /function="molecular chaperone"
-;                     /product="ER-lumenal protein"
-;                     /db_xref="PID:g388065"
-Spinacia-BiP
-GSLFAFVSAKDEAPKLGTVIGIDLGTTYSCVGVYKDGKVEIIANDQGNRITPSWVAFT-N
--DERLIGEAAKNQAAANPERTIFDVKRLIGRKFEDKEVQKDMKLVPYKIVNRD-GKPYIQ
-VKVQE----GETKVFSPEEISAMILTKMKETA-ETFLG--KKIKDAVVTVPAYFNDAQRQ
-ATKDAGVIAGLNVARIINEPTAAAIAYGLDKR-----GGEKNILVFDLGGGTFDVSVLTI
-DNG--VFEVLATNGDTHLGGEDFDQRLMEYFIKLIKKKHT------------KDISKDNR
-ALGKLRRECERAKRALSS-QHQVRVEIESLFDGVDFS----EPLTRARFEELNNDLFRKT
-MGPVKKAMDDA-------GLEKNQIDEIVLVGGSTRIPKVQQL-LKEFFNGKEPSKGVNP
-DEAV-AFGAAVQGSILSGEGGE----E-TKEILLLDVAPLTLGIETVGGVMTKLIPRNTV
-IPTKKSQVF-TTYQDQQTTVTIQVFEGER-SLTKDCRLLGK----FDLTGIAPAPRG-TP
-QIEVTFEVDANGIL-NVKAEDKA-SGKSEKITITNDKGRLSQE-EIERMVREAEEFAEED
-KKVKEKIDARNSLETYIYNM--KNQISDADKLADKLESDEKEKIEGAVKEALEWLDDNQ-
-SAEKEDYDEKLKEVEAVCNPIITAVYQRSGGPSGESGADSEDSEEGHDEL----------
-------------------------------------------------------------
--------------------------------------------------------
-;BLYHSPHAA.HSP70         609 residues Frame 0 Code 0
-;DEFINITION  Hordeum vulgare HSP70 mRNA, complete cds.
-;ACCESSION   L32165
-;     CDS             94..1920
-;                     /standard_name="HSP70"
-;                     /note="Heat-shock protein HSP70; The predicted amino acid
-;                     sequence is highly homologous (more than 80% identity) to
-;                     other plant heat-shock proteins (HSP70s) in the database;
-;                     however the C terminus is quite unique.; putative"
-;                     /codon_start=1
-;                     /function="Molecular chaperone"
-;                     /product="HSP70"
-;                     /db_xref="PID:g476003"
-Hordeum
-GSLFALCAAKEEAKKLGTVIGIDLGTTYSCVGVYKNGHVEIIANDQGNRITPSWVGFT-D
--GERLIGEAAKNQAAVNPERTVFDVKRLIGRKFEDKEVQRDMRLVPYKIVNKE-GKPYIQ
-VKIKD----GETKVFSPEEVSAMILGKMKETA-EAYLG--KKINDAVVTVPAYFNDAQRQ
-ATKDAGVIAGLNVARIINEPTAAAIAYGLDKR-----GGEKNILVFDLGGGTFDVSILTI
-DNG--VFEVLATNGDTHLGGEDFDHRIMDYFIKLIKKKHG------------KDISKDNR
-ALGKLRREAERAKRALSN-QHQVRVEIESLFDGTDFS----EPLTRARFEELNNDLFRKT
-MGPVKKAMDDA-------GLEKTQIHEIVLVGGSTRIPKVQQL-LRDYFDGKEPNKGVNP
-DEAV-AFGAAVQGSILSGEGGD----E-TKDILLLDVAPLTLGIETVGGVMTKLIPRNTV
-IPTKKSQVF-TTYQDQQTTVSIQVFEGER-SMTKDCRLLGK----FDLSGIPAAPRG-TP
-QIEVTFEVDANGIL-NVKAEDKG-TGKSEKITITNEKGRLSQE-EIDRMVKEAEEFAEED
-KKVKERIDARNQLETYVYNM--KNTVGDK-DKLADKLESEEKEKMEGSWPNNN-------
-------------------------------------------------------------
-------------------------------------------------------------
--------------------------------------------------------
-;TOMBIPGRBC.PE1          667 residues Frame 0 Code 0
-;DEFINITION  Tomato BiP (binding protein)/grp78 (glucose-regulated protein, 78
-;            kD) (BiP/grp78) mRNA, complete cds.
-;ACCESSION   L08830
-;     CDS             120..2120
-;                     /gene="BiP/grp78"
-;                     /note="an endoplasmic reticulum residing heat shock
-;                     protein 70 family member; precursor peptide"
-;                     /codon_start=1
-;                     /function="molecular chaperon (precursor)"
-;                     /product="glucose-regulated protein 78"
-;                     /db_xref="PID:g170384"
-Lycopersicon-BiP
-GCLSALSNAKEEATKLGTVIGIDLGTTYSCVGVYKNGHVEIIANDQGNRITPSWVAFT-D
--NERLIGEAAKNLAAVNPERTIFDVKRLIGRKFEDKEVQRDMKLVPYKIVSKD-GKPYIQ
-VKIKD----GEVKVFSPEEISAMILTKMKETA-EAFLG--KTIKDAVVTVPAYFNDAQRQ
-ATKDAGVIAGLNVARIINEPTAAAIAYGLDKK-----GGEKNILVFDLGGGTFDVSILTI
-DNG--VFEVLATNGDTHLGGEDFDQRIMEYFIKLIKKKHG------------KDISKDNR
-ALGKLRREAERAKRSLSS-QHQVRVEIESLFDGTDFS----EPLTRARFEELNNDLFRKT
-MGPVKKAMDDA-------GLQKNQIDEIVLVGGSTRIPKVQQL-LKDYFDGKEPSKGVNP
-DEAV-AYGAAVQGGILSGEGGD----E-TKDILLLDVAPLTLGIETVGGVMTKFIPRNTV
-IPTKKSQVF-TTYQDQQTTVSIQVFEGER-SLTKDCRNLGK----FDLTGIPPAPRG-TP
-QIEVTFEVDANGIL-NVKAEDKG-TGKAEKITITNDKGRLSQE-EIERMVREAEEFAEED
-KKVKEKIDARNALETYVYNM--KNQINDKDKLADKLESDEKEKIETATKEALEWLDDNQ-
-SAEKEDYDEKLKEVEAVCNPIITAVYQRSGGAPGGGASEEEDDSHDEL------------
-------------------------------------------------------------
--------------------------------------------------------
-;OSCHLPLXX.DNAK          615 residues Frame 0 Code 0
-;DEFINITION  O.sinensis chloroplast DNA, complete genome.
-;ACCESSION   Z67753
-;     CDS             30213..32057
-;                     /gene="dnaK"
-;                     /codon_start=1
-;                     /product="Hsp70-type chaperone"
-;                     /db_xref="PID:e211836"
-;                     /db_xref="PID:g1185167"
-Odontella-CP
----------------MGKVVGIDLGTTNSVVAAIEGGQPSVIVNAEGLRTTPSIVAYT-K
-KQELLVGQIAKRQAVINPENTFFSVKRFIGSK-ELE-ISADSKKLPYKVVKDQNGNIKIN
-CS-------SLNKEFSPEEISAQVLRKLINDA-TSYLG--QDVTQAVITVPAYFNDSQRQ
-ATMDAGKIAGVEVLRIINEPTAASLAYGLDKK------QNETILVFDLGGGTFDVSILEV
-GDG--IFEVLATAGDTNLGGDDFDKVLVRWLVKEFEDQEG------------IDLTQDIQ
-ALQRLTEAAEKAKMELST-VEKTTIHLPFITADKTGPKHIEKELTRKTFETLCQELIERC
-QIPVEKALTDA-------RLEKSDINEVVLVGGSTRIPAIQNL-VESLT-NKKPNQSVNP
-DEVV-AIGAAIQAGILAGE---------IKDVLLLDVTPLSLGVETLGGVMTKIIARNTT
-IPVKKSEMF-STAVENQTNVEIHVLQGER-ELVAGNKSLGN----FRLDGIPAAERG-VP
-QIEVTFDINVDGLL-SVKAKELE-TGIEQSVTIQ-GASNLDES-EVSDMLAEAEKYAALN
-KEKRQNIDLKNQAETLCFEA--EKELDLFKTSIPEEKQQNVQK---LIENIRQDTQTD--
---NFESLKLLVEELKMAMKDMVEAKPF----VDQTDTDPMSNLNDL--------------
-------------------------------------------------------------
--------------------------------------------------------
-;PPU38804.DNAK           621 residues Frame 0 Code 0
-;DEFINITION  Porphyra purpurea chloroplast genome, complete sequence.
-;ACCESSION   U38804
-;     CDS             106219..108081
-;                     /gene="dnaK"
-;                     /codon_start=1
-;                     /product="Hsp70-type chaperone"
-;                     /db_xref="PID:g1276781"
-Porphyra-CP
----------------MGKVVGIDLGTTNSVIAVMEGGKPTVIPNAEGFRTTASVVAYT-K
-SGDKLVGQIAR-QAVINPENTFYSVKRFIGRK-QNE-ISQEIRQTSYNVK-TSGSSIKIE
-CP-------ALNKDFAPEEISAQVLRKLVEDA-STYLG--ETVTQAVITVPAYFNDSQRQ
-ATKDAGKIAGLDVLRIINEPTAASLSYGLDKQ------NNETILVFDLGGGTFDVSILEV
-GDG--VFEVLSTSGDTHLGGDDFDQQIVEWLIKDFKQSEG------------IDLGKDRQ
-ALQRLTEASEKAKIELSN-LTQTEINLPFITATQDGPKHLEKTVTRAKFEELCSRLIDKC
-SIPVNNALKDA-------KLEASSIDEVVLVGGSTRIPAIQQM-VKRLI-GKDPNQSVNP
-DEVV-AIGAAVQAGVLAGE---------VKDILLLDVTPLSLGVETLGGVMTKIIPRNTT
-IPTKKSEVF-STAVDNQPNVEIQVLQGER-ELTKDNKSLGT----FRLDGIMPAPRG-VP
-QIEVTFDIDANGIL-SVKAKEKA-TGKEQSITIS-GASTLPKD-DVERMVKEAEENFDVD
-QKRRKNIDIRNQAESLCYQS--EKQVKEFEDKIDEELKNRITN---LISELRSNLEKE--
---ELDSIEANSEKLQNALMEIGKNATS-----AEKDTQNASNDDTVIDTDFSEAK-----
-------------------------------------------------------------
--------------------------------------------------------
-;PSTASP70.HSP70          630 residues Frame 0 Code 0
-;DEFINITION  P.lutherii hsp70 gene for 70 kd heat shock protein.
-;ACCESSION   X59555
-;     CDS             181..2070
-;                     /gene="hsp70"
-;                     /codon_start=1
-;                     /product="heat shock protein 70"
-;                     /db_xref="PID:g20905"
-;                     /db_xref="SWISS-PROT:P30722"
-Pavlova-CP
----------------MAKVVGIDLGTTNSVVAVMEGGKPTVITNSEGGTTTPSVVAYA-K
-NGDLLVGQIAKRQAVINSENTFYSVKRFIGRP-SKE-VSDELRQTPYKIE-DSEGKIRLK
-CP-------NLNKNFAAEEISAQVLRKLVNDA-NKYLG--EKVEKAVITVPAYFNDSQRQ
-ATKDAGKIAGLEVLRIINEPTAASLAYGLDKK------DNETILVFDLGGGTFDVSILEV
-GDG--VFEVLSTSGDTRLGGDDFDEKIVKWLLNEFEKEEK------------FSLKGDSQ
-ALQRLTEAAEKAKIELSS-LSQTEINLPFITANENGAKHIEKTLTGEKFESLCSDLFDRC
-RIPVENALKDA-------KLKPNQIDEVVLVGGSTRIPAVKKL-VKDIL-GKEPNETVNP
-DEVV-AIGAAIQAGVLSGE---------VKDILLLDVTPLSLGVETLGGVTTKIIPRNTT
-VPTKKSEIF-STAVDNQPNVEIHVLQGER-EFARDNKSLGT----FRLDGILPAPRG-IP
-QIEVTFDIDANGIL-SVTAQDKG-TSKQQSITIS-GASTLPKE-EVEKMVKEAEQNAAAD
-KEKGENIRVKNEADLYCYQA--EKQISELPEALVNENQSLIKESKETVEMLKENIKKE--
---DYDKIKENLKKLQEKLMEIGQKAYAKKEPLKDEDSNKAGSQDDFIDADFTESK-----
-------------------------------------------------------------
--------------------------------------------------------
-;CRYCPHCFC.CTP70         628 residues Frame 0 Code 0
-;DEFINITION  Cryptomonas phi heat shock 70 protein (ctp70) histone-like protein
-;            (hcfc) and acyl carrier protein (acpC) genes, complete cds.
-;ACCESSION   M76547
-;     CDS             199..2082
-;                     /gene="ctp70"
-;                     /codon_start=1
-;                     /product="heat shock protein"
-;                     /db_xref="PID:g455155"
-Cryptomonas-CP
----------------MGKVVGIDLGTTNSVVAVMEGGKPAVIQNAEGFRTTPSVVAYT-K
-TGDRLVGQIAKRQAVINPDNTFYSVKRFIGRR-SEE-VSEELKQVSYIVKTDSNGNIKLD
-CP-------SLKKEFASEEISAEVLRKLVDDA-SKYLG--ESVKQAVITVPAYFNDSQRQ
-ATKDAGRIAGLEVLRIINEPTAASLAYGLDKK------NNETILVFDLGGGTFDVSVLEV
-GDG--VFEVLSTSGDTHLGGDDFDDKIVQWLLKEFETEHS------------INLKSDRQ
-ALQRLTEASEKAKIELSN-LSQTEINLPFLTATETGPKHLERSITRAKFEELCSDLINRV
-KIPVENALKDA-------KLDSSKIDEVVLVGGSTRIPAIQEL-VKRIL-NKTPNQTVNP
-DEVV-AIGAAVQAGVLAGE---------VKDILLLDVTPLSLGVETLGGVTTRIIPRNTT
-IPTKKSEVF-STAVDNQPNVEIHVLQGER-EFAKDNKSLGT----FRLDGILPAPRG-VP
-QIEVTFDIDANGIL-SVTAKDKG-TGKEQSITIT-GASTLPSD-EVERMVNEAQNSAKED
-KEKRDKIDLKNQSDSLCYQS--EKQLKEL-EGKIDDTNKNKISSMI-----SELRNAIN-
-NENYDEMRDLNSKLQTALMDLGKSVYEKTSKEQTSTSSPTNSNDSVIDADFSETK-----
-------------------------------------------------------------
--------------------------------------------------------
-;CSHSP70.HSP70           708 residues Frame 0 Code 0
-;DEFINITION  C.sativus mRNA for heat shock protein 70 (hsp70).
-;ACCESSION   X73961
-;     CDS             101..2224
-;                     /gene="hsp70"
-;                     /codon_start=1
-;                     /product="heat shock protein 70"
-;                     /db_xref="PID:e81202"
-;                     /db_xref="PID:g1143427"
-Cucumis
-NTSRRNSSVRPLRIVNEKVVGIDLGTTNSAVAAMEGGKPTIVTNAEGQRTTPSVVAYT-K
-NGDRLVGQIAKRQAVVNPENTFFSVKRFIGRK-MSE-VDEESKQVSYRVERDENGNVKLE
-CP-------AIGKQFAAEEISAQVLRKLVDDA-SKFLN--DKVTKAVVTVPAYFNDSQRT
-ATKDAGRIAGLEVLRIINEPTAASLAYGFEKK------SNETILVFDLGGGTFDVSVLEV
-GDG--VFEVLSTSGDTHLGGDDFDKRIVDWLAANFKRDEG------------IDLLKDKQ
-ALQRLTETAEKAKMELSS-LTQANISLPFITATADGPKHIETTITRAKFEELCSDLLDRL
-KTPVENSLRDA-------KLSFKDIDEVILVGGSTRIPAVQEL-VKKMT-GKEPNVTVNP
-DEVV-ALGAAVQAGVLAGD---------VSDIVLLDVSPLSLGLETLGGVMTKIIPRNTT
-LPTSKSEVF-STAADGQTSVEINVLQGER-EFVRDNKSLGS----FRLDGIPPAPRG-VP
-QIEVKFDIDANGIL-SVTAIDKG-SGKKQDITIT-GASTLPSD-EVERMVSEADKFAKED
-KEKRDAIDTKNQADSVVYQT--EKQLKEL-GDKVPGPVKEKVESKL-----GELKEAIS-
-GGSTEAIKEAMAALNQEVMQLGQSLYNQPGAGAAPGPGASSESGPSESTGKGPEGDVIDA
-DFSDSK------------------------------------------------------
--------------------------------------------------------
-;PSST70.PSST70           707 residues Frame 0 Code 0
-;DEFINITION  P.sativum Psst70 gene for heat-shock protein.
-;ACCESSION   X69213
-;     CDS             join(775..1326,1456..1708,1790..1869,1979..2121,
-;                     2228..2326,2459..2648,2831..3229,3331..3735)
-;                     /gene="Psst70"
-;                     /codon_start=1
-;                     /product="Psst70 (stress 70 protein)"
-;                     /db_xref="PID:g871515"
-;                     /db_xref="SWISS-PROT:Q02028"
-Pisum
-LSSKTFKKGFTLRVVSEKVVGIDLGTTNSAVAAMEGGKPTIITNAEGQRTTPSVVAYT-K
-NGDRLVGQIAKRQAVVNPENTFFSVKRFIGRK-MSE-VDEESKQVSYRVIRDDNGNVKLD
-CP-------AIGKSFAAEEISAQVLRKLVDDA-SKFLN--DKVTKAVVTVPAYFNDSQRT
-ATKDAGRIAGLEVLRIINEPTAASLAYGFERK------NNETILVFDLGGGTFDVSVLEV
-GDG--VFEVLSTSGDTHLGGDDFDKRVVDWLAGDFKRDEG------------IDLLKDKQ
-ALQRLTETAEKAKMELSS-LSQTNISLPFITATADGPKHIETTLTRAKFEELCSDLLDRL
-RTPVENSLRDA-------KLSIKDIDEVILVGGSTRIPAVQEL-VKKLI-GKDPNVTVNP
-DEVV-ALGAAVQAGVLAGD---------VSDIVLLDVSPLSLGLETLGGVMTKIIPRNTT
-LPTSKSEVF-STAADGQTSVEINVLQGER-EFVRDNKSLGS----FRLDGIPPAPRG-VP
-QIEVKFDIDANGIL-SVAAIDKG-TGKKQDITIT-GASTLPGD-EVERMVSEAERFSKED
-KEKREAIDTKNQADSVVYQT--EKQLKEL-GEKVPAPVKEKVEAKL-----GELKEAIT-
-GGSTQTIKDALAALNQEVMQLGQSLYNQPGAAGQAGPTPPGSESGPSESSGKEGPEGDVI
-DADFTDSK----------------------------------------------------
--------------------------------------------------------
-;CRHSP70B.HSP70B         680 residues Frame 0 Code 0
-;DEFINITION  C.reinhardtii hsp70b gene.
-;ACCESSION   X96502
-;     CDS             join(1222..1347,1442..1588,1988..2101,2423..2551,
-;                     2892..3254,3478..4638)
-;                     /gene="hsp70b"
-;                     /codon_start=1
-;                     /product="heat shock protein 70B"
-;                     /db_xref="PID:e228634"
-;                     /db_xref="PID:g1225970"
-Chlamydomonas-B
-GRAGVSRRALAVSVRAEKVVGIDLGTTNSAVAAMEGGKPTIITNAEGGRTTPSVVAFT-K
-TGDRLVGQIAKRQAVVNPENTFFSVKRFIGRR-MSE-VGSESTQVPYRVI-EDGGNVKIK
-CP-------NAGKDFAPEEISAQVLRKLTEDA-AKFLN--DKVEKAVITVPAYFNDSQRQ
-ATKDAGKIAGLEVLRIINEPTAASLAYGFDKK------ANETILVFDLGGGTFDVSVLEV
-GDG--VFEVLSTSGDTHLGGDDFDKRIVDFLADDFKKSEG------------IDLRKDRQ
-ALQRLTEAAEKAKIELSG-MAQTSINLPFITATADGPKHIDTQLTRAKFEEMCNDLLERC
-KVPVQQALRDA-------KLSISDIQEVILVGGSTRIPAVQEI-VRKLSGGKDPNVTVNP
-DEVV-ALGAAVQAGVLAGE---------VSDIVLLDVTPLSLGLETLGGVMTKLIPRNTT
-LPTSKSEVF-STAADGQTSVEINVLQGER-EFARDNKSLGT----FRLDGIPPAPRG-VP
-QIEVKFDIDANGIL-SVTATDKG-TSKKQDIRIT-GASTLDKG-DVERMVKEAEKFAGED
-KKRRESVETKNQAETMVYQT--EKQLKEF-EGKVPADIKAKVEAKL-----GELKAALP-
-ADDAEATKAAMNALQQEVMAMGQAMYSQAGAAPGGAPGAEPGAGAGAGGAPGGKKDDDVI
-DAEFTDKK----------------------------------------------------
--------------------------------------------------------
-;ETHSP70.HSP70           678 residues Frame 0 Code 0
-;DEFINITION  E.tenella hsp70 gene encoding organellar heat shock protein.
-;ACCESSION   Z46965
-;     CDS             80..2113
-;                     /standard_name="hsp70"
-;                     /note="Isolated by screening with antibodies raised to
-;                     rhoptry organelles. Resembles hsp70 molecules from
-;                     mitochondria and chloroplasts and is a putative organellar
-;                     hsp70."
-;                     /codon_start=1
-;                     /product="organellar heat shock protein"
-;                     /db_xref="PID:g603814"
-Eimeria-tenella
-GTLSSLAGRRGFSGVRGDVVGIDLGTTNSCVAVMEGSQPKVLENSEGMRTTPSVVAFT-K
-DGQRLVGVVAKRQAITNPENTFFSTKRLIGRSFDEEAIAKERKILPYKVIRADNGDAWVE
-GW---------GKKYSPSQIGAFVLMKMKETA-ESYLG--RDVNQAVITVPAYFNDSQRQ
-ATKDAGKIAGLDVLRIINEPTAAALAYGMEKE------DGRTIAVYDLGGGTFDVSILEI
-LGG--VFEVKATNGNTSLGGEDFDQKVLQFLVNEFKKKEG------------IDLSKDRL
-ALQRLREAAETAKIELSS-KLSTEINLPFITADQSGPKHLQVSLSRAHLEELVGALLQQS
-IEPCEKCIRDA-------GVQKADLSDVILVGGMTRMPKVAEV-VKNIF-HKEPSKGVNP
-DEAV-AAGAAIQAGVLKGE---------IKDLLLLDVCPLSLGIETLGGVFTRLINRNTT
-IPTKKSQIF-STAADNQTQVGIKVYQGER-EMASANKLLGQ----FDLVGIPPAPRG-VP
-QIEVTFDVDANGIM-NISAVDKS-TAKRQQITIQ-SSGGLSEA-QIKQMVEDAERFKDED
-QRQKDLVAAKNEAETLVYSV--EKQISDLKDKISAEDKTDLESRIQELRSALVEGELE--
-TIRSRVKALQELSWKVSQQAYSQSNNTSADGDSSSTSSGDSSSKP---------------
-------------------------------------------------------------
--------------------------------------------------------
-;LMHSPL701               635 residues Frame 0 Code 0
-;DEFINITION  L.major hsp70.1 gene for heat-shock protein 70-related protein.
-;ACCESSION   X64137
-Leishma-1
-AASAACLARHESQKVQGDVIGVDLGTTYSCVATMDGDKARVLENSEGFRTTPSVVAFK-G
--SEKLVGLAAKRQAITNPQSTFYAVKRLIGRRFEDEHIQKDIKNVPYKIVRAGNGDAWVQ
-DG--------NGKQYSPSQIGAFVLEKMKETA-ENFLG--HKVSNAVVTCPAYFNDAQRQ
-ATKDAGTIAGLNVIRVVNEPTAAALAYGMDKT------KDSLIAVYDLGGGTFDISVLEI
-AGG--VFEVKATNGDTHLGGEDFDLALSDYILEEFRKTSG------------IDLSKERM
-ALQRVREAAEKAKCELSS-AMETEVNLPFITANADGAQHIQMRISRSKFEGITQRLIERS
-IAPCKQCMKDA-------GVELKEINDVVLVGGMTRI-RSGGG-GEEVL-PEGPVRGVNP
-DEAV-ALGAATLGGVLRGK---------ASDLILVDVTPLSLGTSVVGDVFVPIIPKNTT
-IPCMRSHIF-TTVDDGQTAIKFKVFIPPA-PRGVPQVEVT-----FDIDANQGEREI-AS
-ENQIRGEFDLSGGICHVTAKDKA-TGKTQNITIT-ANGGLSKE-QIEQMIRDSEQHAEAD
-RVKRELVEVRNNAETQLTTA--ERQLGEWKYVSDAEKENVKTLV-AELRKAMENPNVAKD
-DLAAATDKLQKAVMECGRTEYQQAAAANSGQC----------------------------
-------------------------------------------------------------
--------------------------------------------------------
-;TRBMTP70.MTP70          657 residues Frame 0 Code 0
-;DEFINITION  Trypanosoma cruzi mitochondrial HSP70 (MTP70) gene, complete CDS.
-;ACCESSION   M73627
-;     CDS             504..2474
-;                     /gene="MTP70"
-;                     /codon_start=1
-;                     /product="mitochondrial HSP70"
-;                     /db_xref="PID:g162158"
-Trypanosoma-mt
-SLAAASLARWQSSKVTGDVIGIDLGTTYSCVAVMEGDKPRVLENTEGFRATPSVVAFK-G
-Q-EKLVGLAAKRQAVTNPQSTFFAVKRLIGRRFEDSNIQHDIKNVPYKIGRSSNGDAWVQ
-DA--------NGKQYSPSQVGAFVLEKMKETA-ENFLG--RKVSNAVVTCPAYFNGPQRQ
-ATKDAGTIAGLNVIRVVNGPTAAALAYGLDKT------KDSMIAVYDLGGGTFDISVLEI
-AGG--VFEVKATNGDTHLGGEDFDLCLSDYILTEFKKSTG------------IDLSNERM
-ALQRIREAAEKAKCELST-TMETEVNLPFITANQDGAQHVQMTVSRSKFESLAEKLVQRS
-LGPCKQCIKDA-------AVDLKEISEVVLVGGMTRMPKVIEA-VKQFF-GRDPFRGVNP
-DEAV-ALGGATLGGVLRRD---------VKGLVLLDVTPLSLGVETLGGVFTRMIPKNTT
-IPTKKSQTFFSTAAFNQTQVGIKVFQGER-EMAADNQMMGQ----FDLVGIPPAPRG-VP
-QIEVTFDIEPNGIC-HVTAKDKA-TGKTQNITIT-ASGGLSKE-QIERMIRDSESHAESD
-RLKRELVEVRNNAETQANTA--ERQLTEWKYVSDAEKENVRTLL-RACRKSMENPNVTKD
-ELSAATDKLQKAVMECGRTEYQQAAAGNSSSSSGNTDSSQGEQQQQGDQQKQ--------
-------------------------------------------------------------
--------------------------------------------------------
-;
-;YSCSSC1A.SSC1           655 residues Frame 0 Code 0
-;DEFINITION  Saccharomyces cerevisiae nuclear-encoded mitochondrial heat shock
-;            protein (Ssc1) gene, complete cds.
-;ACCESSION   M27229
-;     CDS             361..2325
-;                     /gene="Ssc1"
-;                     /codon_start=1
-;                     /product="heat shock protein"
-;                     /db_xref="PID:g717089"
-Yeast-mt
-SSSFRIATRLQSTKVQGSVIGIDLGTTNSAVAIMEGKVPKIIENAEGSRTTPSVVAFT-K
-EGERLVGIPAKRQAVVNPENTLFATKRLIGRRFEDAEVQRDIKQVPYKIVKHSNGDAWVE
-AR---------GQTYSPAQIGGFVLNKMKETA-EAYLG--KPVKNAVVTVPAYFNDSQRQ
-ATKDAGQIVGLNVLRVVNEPTAAALAYGLEKS------DSKVVAVFDLGGGTFDISILDI
-DNG--VFEVKSTNGDTHLGGEDFDIYLLREIVSRFKTETG------------IDLENDRM
-AIQRIREAAEKAKIELSS-TVSTEINLPFITADASGPKHINMKFSRAQFETLTAPLVKRT
-VDPVKKALKDA-------GLSTSDISEVLLVGGMSRMPKVVET-VKSLF-GKDPSKAVNP
-DEAV-AIGAAVQGAVLSGE---------VTDVLLLDVTPLSLGIETLGGVFTRLIPRNTT
-IPTKKSQIF-STAAAGQTSVEIRVFQGER-ELVRDNKLIGN----FTLAGIPPAPKG-VP
-QIEVTFDIDADGII-NVSARDKA-TNKDSSITVA-GSSGLSEN-EIEQMVNDAEKFKSQD
-EARKQAIETANKADQLANDT--ENSLKEFEGKVDKAEAQKVRDQITSLKELVARVQGGEE
--VNAEELKTKTEELQTSSMKLFEQLYKNDSNNNNNNNGNNAESGETKQ------------
-------------------------------------------------------------
--------------------------------------------------------
-;YSPHSP70.HSP70          642 residues Frame 0 Code 0
-;DEFINITION  S.pombe mitochondrial heat shock protein (HSP70) mRNA, complete
-;            cds.
-;ACCESSION   M60208 M32806
-;     CDS             251..2176
-;                     /gene="HSP70"
-;                     /codon_start=1
-;                     /product="mitochondrial heat shock protein"
-;                     /db_xref="PID:g173408"
-Schizosacc-mt
-MTARWNSNASGNEKVKGPVIGIDLGTTTSCLAIMEGQTPKVIANAEGTRTTPSVVAFT-K
-DGERLVGVSAKRQAVINPENTFFATKRLIGRRFKEPEVQRDIKEVPYKIVEHSNGDAWLE
-AR---------GKTYSPSQIGGFILSKMRETA-STYLG--KDVKNAVVTVPAYFNDSQRQ
-ATKAAGAIAGLNVLRVVNEPTAAALAYGLDKK------NDAIVAVFDLGGGTFDISILEL
-NNG--VFEVRSTNGDTHLGGEDFDVALVRHIVETFKKNEG------------LDLSKDRL
-AVQRIREAAEKAKCELSS-LSKTDISLPFITADATGPKHINMEISRAQFEKLVDPLVRRT
-IDPCKRALKDA-------NLQTSEINEVILVGGMTRMPRVVET-VKSIF-KREPAKSVNP
-DEAV-AIGAAIQGGVLSGH---------VKDLVLLDVTPLSLGIETLGGVFTRLINRNTT
-IPTRKSQVF-STAADGQTAVEIRVFQGER-ELVRDNKLIGN----FQLTGIAPAPKG-QP
-QIEVSFDVDADGII-NVSARDKA-TNKDSSITVA-GSSGLTDS-EIEAMVADAEKYRASD
-MARKEAIENGNRAESVCTDI--ESNLDIHKDKLDQQAVEDLRSKITDLRETVAKVNAGDE
-GITSEDMKKKIDEIQQLSLKVFESVYKNQ-NQGNESSGDNSAPEG--DKK----------
-------------------------------------------------------------
--------------------------------------------------------
-;DROHSC5A.HSC70-5        688 residues Frame 0 Code 0
-;DEFINITION  Drosophila melanogaster heat shock protein cognate 71 (Hsc5) mRNA,
-;            complete cds.
-;ACCESSION   L01502
-;     CDS             245..2308
-;                     /gene="Hsc70-5"
-;                     /note="Description: Heat shock protein cognate 5"
-;                     /codon_start=1
-;                     /product="heat shock protein cognate 71"
-;                     /db_xref="PID:g157667"
-Drosophila-Hsc70-5
-SNGISSQLRYKSGEVKGAVIGIDLGTTNSCLAVMEGKQAKVIENAEGARTTPSHVAFT-K
-DGERLVGMPAKRQAVTNSANTFYATKRLIGRRFDDPEVKKDITNLSYKVVKASNGDAWVS
-ST--------DGKVYSPSQIGAFILMKMKETA-EAYLN--TPVKNAVVTVPAYFNDSQRQ
-ATKDAGQIAGLNVLRVINEPTAAALAYGMDKT------EDKIIAVYDLGGGTFDISILEI
-QKG--VFEVKSTNGDTLLGGEDFDNHIVNFLVVEFKKDSG------------IDIRKDNI
-AMQRLKEAAEKAKCELSS-SQQTDINLPYLTMDAAGPQHMNLKLTRSKLESLVGDLIKRT
-IQPCQKALSDA-------EVSKSEIGEVLLVGGMTRMPKVQST-VQELF-GRQPSRSVNP
-DEAV-AVGAAVQGGVLAGD---------VTDVLLLDVTPLSLGIETLGGVFTRLISRNTT
-IPTKKSQVF-STASDGQTQVEIKVHQGER-EMANDNKLLGS----FTLVGIPPAPRG-VP
-QIEVVFDIDANGIV-HVSAKDKG-TGKEQQIVIQ-SSGGLSKD-EIENMIKKAEEYATAD
-KQKRELIEIVNQGESIVHDT--ETKMEEFKSQLPAEECEKLKKEIADLRTLLANKET---
--ADLEEVRKATSSLQQSSLKLFELAYKKMSAERETNAGAGSSDSSSSSDTSASQEGREEL
-N-----------------------------------------------------------
--------------------------------------------------------
-;S75280.PE1              680 residues Frame 0 Code 0
-;DEFINITION  pre-mtHSP70=70 kda heat shock protein precursor [rats, hepatoma
-;            cells H4, mRNA Partial, 2090 nt].
-;ACCESSION   S75280
-;     CDS             51..2090
-;                     /note="70 kda heat shock protein precursor;  Method:
-;                     conceptual translation with partial peptide sequencing.
-;                     This sequence comes from Fig. 2.  "
-;                     /codon_start=1
-;                     /product="pre-mtHSP70"
-;                     /db_xref="PID:g896232"
-Rattus-mt
-VFRFVSRRDYASEAIKGAVVGIDLGTTNSCVAVMEGKQAKVLENSEGARTTPSVVAFT-P
-DGERLVGMPAKRQAVTNPNNTFYATKRLIGRRYDDPEVQKDTKNVPFKIVRASNGDAWVE
-AH---------GKLYSPSQIGAFVLMKMKETA-ENYLG--HTAKNAVITVPAYFNDSQRQ
-ATKDAGQISGLNVLRVINEPTAAALAYGLDKS------EDKVIAVYDLGGGTFDISILEI
-QKG--VFEVKSTNGDTFLGGEDFDQALLRHIVKEFKRETG------------VDLTKDNM
-ALQRVREAAEKAKCELSS-SVQTDINLPYLTMDASGPKHLNMKLTRAQFEGIVTDLIKRT
-IAPCQKAMQDR-------EVSKSDIGEVILVGGMTRMPKVQQT-VQDLF-GRAPSKAVNP
-DEAV-AIGAAIQGGVLAGD---------VTDVLLLDVTPLSLGIETLGGVFTKLINRNTT
-IPTKKSQVF-STAADGQTQVEIKVCQGER-EMAGDNKLLGQ----FTLIGIPPAPRG-VP
-QIEVTFDIDANGIV-HVSAKDKG-TGREQQIVIQ-SSGGLSKD-DIENMVKNAEKYAEED
-RRKKERVEAVNMAEGIVHDT--ETKMEEFKDQLPADECNKLKEEISKMRELLARKDS--E
---TGENIRQAASSLQQASLKLFEMAYKKM-ASEREGSGSSSTGEQKEDQKEEKQ------
-------------------------------------------------------------
--------------------------------------------------------
-;PSPHSP1.PHSP1           676 residues Frame 0 Code 0
-;DEFINITION  P.sativum PHSP1 mRNA for HSP70.
-;ACCESSION   X54739
-;     CDS             27..2054
-;                     /gene="PHSP1"
-;                     /codon_start=1
-;                     /product="HSP70"
-;                     /db_xref="PID:g20835"
-;                     /db_xref="SWISS-PROT:P37900"
-Pisum-mt
-HKLASLTRPFSSRPAGNDVIGIDLGTTNSCVSVMEGKNPKVIENSEGARTTPSVVAFN-Q
-KSELLVGTPAKRQAVTNPTNTLFGTKRLIGRRFDDAQTQKEMKMVPYKIVRAPNGDAWVE
-AN---------GQQYSPSQIGAFVLTKIKETA-EAYLG--KTISKAVVTVPAYFNDAQRQ
-ATKDAGRIAGLDVQRIINEPTAAALSYGMNNK-------EGLIAVFDLGGGTFDVSILEI
-SNG--VFEVKATNGDTFLGGEDFDNALLDFLVSEFKRTES------------IDLAKDKL
-ALQRLREAAEKAKIELSS-TSQTEINLPFISADASGAKHLNITLTRSKFEALVNNLIERT
-KAPCKSCLKDA-------NISIKDVDEVLLVGGMTRVPKVQQV-VSEIF-GKSPSKGVNP
-DEAV-AMGAALQGGILRGD---------VKELLLLDVTPLSLGIETLGGIFTRLISRNTT
-IPTKKSQVF-STAADNQTQVGIKVLQGER-EMAADNKSLGE----FDLVGIPPAPRG-LP
-QIEVTFDIDANGIV-TVSAKDKS-TGKEQQITIR-SSGGLSDD-EIDKMVKEAELHAQRD
-QERKALIDIRNSADTSIYSI--EKSLAEYREKIPAEVAKEIEDAVSDLRTAMAGENA---
-----DDIKAKLDAANKAVSKIGQHMSGG--SSGGPSEGG-SQGGEQAPEAEYEEVKK---
-------------------------------------------------------------
--------------------------------------------------------
-;S59747.PE1              683 residues Frame 0 Code 0
-;DEFINITION  HSP68=68 kda heat-stress DnaK homolog [Solanum tuberosum=potatoes,
-;            mRNA, 2418 nt].
-;ACCESSION   S59747
-;     CDS             99..2147
-;                     /note="mismatch(525[T->I]);  68 kda heat-stress DnaK
-;                     homolog;  This sequence comes from Fig. 5.  Author-given
-;                     protein sequence is in conflict with the conceptual
-;                     translation. "
-;                     /codon_start=1
-;                     /product="HSP68"
-;                     /db_xref="PID:g300264"
-Solanum-mt
-AKWAGLARPFSSKPAGNEIIGIDLGTTNSCVAVMEGKNPKVIENSEGARTTPSVVAFN-Q
-KGELLVGTPAKRQAVTNPTNTLSGTKRLIGRRFDDPQTQKEMKMVPYKIVRGSNGDAWVE
-AN---------GQQYSPTQIGAFILTKMKETA-EAYLG--KSINKAVITVPAYFNDAQRQ
-AIKDAGAIAGLDVQRIINEPTAAALSYGMNSK-------EGLVAVFDLGGGTFDVSILEI
-SNG--VFEVKATNGDTFLGGEDFDNALLEFLVSEFKRTEG------------IDLSKDKL
-ALQRLREAAEKAKIELSS-TSQTDINLPFITADASGAKHLNITLTRSKFETLVNHLIERT
-RNPCKNCLKDA-------GVSLKDVDEVLLVGGMTRVPKVQEI-VSEIF-GKSPSKGVNP
-DEAV-AMGAALQGGILRGD---------VKELLLLDVTPLARGIETLGGIFTRLINRNTT
-IPTKKSQVF-STAADNQTQVGIKVLQGER-EMASDNKLLGE----FDLVGIPPAPKGYCP
-QIEVIFDIDANGMV-TVSAKDKA-TSKEQQITIR-SSGGLSED-EIDKMVREAEMHAQRI
-KNARHLLISGIVQSTTIYSI--EKSLSEYKEKVPKEVVTEIETAISDLRAAMGTENI---
-----DDIKAKLDAANKAVSKIGEHMAGG--SSGGASGGGGAQGGDQPPEAEYEEVKK---
-------------------------------------------------------------
--------------------------------------------------------
-;TVU70308.PE1            610 residues Frame 0 Code 0
-;DEFINITION  Trichomonas vaginalis mitochondrial-type HSP70 mRNA, complete cds.
-;ACCESSION   U70308
-;     CDS             10..1839
-;                     /function="molecular chaperone"
-;                     /codon_start=1
-;                     /product="mitochondrial-type HSP70"
-;                     /db_xref="PID:g1597734"
-Trichomonas-mt
----------------MTPIIGIDLGTTNSCVSVVEGGTPKVIQNAEGVRTTPSIVAFT-N
-TGERLVGEQAKRQAITNSKSTFFATKRLIGCSFDDEMTKKCREMVPYQIVKAKSGDAWVK
-DE--------KGNEYSPSQIGAFVLMKMKETA-EAYLG--TSVKDAVITVPAYFNDSQRQ
-ATKDAGKIAGLNVMRTLNEPTAAALAYGTERK------QGQTVAVFDLGGGTFDFSILEI
-SKD-GVFEVKATNGDTFLGGEDFDAALMKYVIQDFQAKNQ------------IDLAKDPL
-ALQRIREAVEKAKCELSS-MMTTEINLPYITVTGAGPKHLQMPITRATFEKITQHLIART
-INPCKNCLKDA-------GLTPQQINEVILVGGMTRMPKVIDS-VKEFF-GKDPFRGVNP
-DEVV-AIGASIQGSVMRGD---------HKDIVLLDVTPLSLGIETMGGVFSRLIPRNTV
-VPTKKSQEF-TTAADGQTHVNIRVFQGER-DLVEGNKLLGE----FTLVGIPPAPRG-VP
-KIEVTFDIDANSIV-HVSAKDKQ-TNKEQQMTIQ-QHGGLSQD-EIAKMIQDAEKHAAED
-KKKREILEKKYAMKQYINEI--EKTISENEKKLPADLLKRIRDSVKDLKDAIAGNDE---
-----KKIEEKYDALKAASMEIYNAISDNNTNKNKK-------------------------
-------------------------------------------------------------
--------------------------------------------------------
-;
-D_Trichomonas-mt
----------------MTPIIGIDLGTTNSCVSVVEGGTPKVIQNAEGVRTTPSIVAFT-N
-TGERLVGEQAKRQAITNSKSTFFATKRLIGCSFDDEMTKKCREMVPYQIVKAKSGDAWVK
-DE--------KGNEYSPSQIGAFVLMKMKETA-EAYLG--TSVKDAVITVPAYFNDSQRQ
-ATKDAGKIAGLNVMRTLNEPTAAALAYGTERK------QGQTVAVFDLGGGTFDFSILEI
-SKD-GVFEVKATNGDTFLGGEDFDAALMKYVIQDFQAKNQ------------IDLAKDPL
-ALQRIREAVEKAKCELSS-MMTTEINLPYITVTGAGPKHLQMPITRATFEKITQHLIART
-INPCKNCLKDA-------GLTPQQINEVILVGGMTRMPKVIDS-VKEFF-GKDPFRGVNP
-DEVV-AIGASIQGSVMRGD---------HKDIVLLDVTPLSLGIETMGGVFSRLIPRNTV
-VPTKKSQEF-TTAADGQTHVNIRVFQGER-DLVEGNKLLGE----FTLVGIPPAPRG-VP
-KIEVTFDIDANSIV-HVSAKDKQ-TNKEQQMTIQ-QHGGLSQD-EIAKMIQDAEKHAAED
-KKKREILEKKYAMKQYINEI--EKTISENEKKLPADLLKRIRDSVKDLKDAIAGNDE---
-----KKIEEKYDALKAASMEIYNAISDNNTNKNKK-------------------------
-------------------------------------------------------------
--------------------------------------------------------
-;
-D_D_Trichomonas-mt
----------------MTPIIGIDLGTTNSCVSVVEGGTPKVIQNAEGVRTTPSIVAFT-N
-TGERLVGEQAKRQAITNSKSTFFATKRLIGCSFDDEMTKKCREMVPYQIVKAKSGDAWVK
-DE--------KGNEYSPSQIGAFVLMKMKETA-EAYLG--TSVKDAVITVPAYFNDSQRQ
-ATKDAGKIAGLNVMRTLNEPTAAALAYGTERK------QGQTVAVFDLGGGTFDFSILEI
-SKD-GVFEVKATNGDTFLGGEDFDAALMKYVIQDFQAKNQ------------IDLAKDPL
-ALQRIREAVEKAKCELSS-MMTTEINLPYITVTGAGPKHLQMPITRATFEKITQHLIART
-INPCKNCLKDA-------GLTPQQINEVILVGGMTRMPKVIDS-VKEFF-GKDPFRGVNP
-DEVV-AIGASIQGSVMRGD---------HKDIVLLDVTPLSLGIETMGGVFSRLIPRNTV
-VPTKKSQEF-TTAADGQTHVNIRVFQGER-DLVEGNKLLGE----FTLVGIPPAPRG-VP
-KIEVTFDIDANSIV-HVSAKDKQ-TNKEQQMTIQ-QHGGLSQD-EIAKMIQDAEKHAAED
-KKKREILEKKYAMKQYINEI--EKTISENEKKLPADLLKRIRDSVKDLKDAIAGNDE---
-----KKIEEKYDALKAASMEIYNAISDNNTNKNKK-------------------------
-------------------------------------------------------------
--------------------------------------------------------
-;
-D_D_D_Trichomonas-mt
----------------MTPIIGIDLGTTNSCVSVVEGGTPKVIQNAEGVRTTPSIVAFT-N
-TGERLVGEQAKRQAITNSKSTFFATKRLIGCSFDDEMTKKCREMVPYQIVKAKSGDAWVK
-DE--------KGNEYSPSQIGAFVLMKMKETA-EAYLG--TSVKDAVITVPAYFNDSQRQ
-ATKDAGKIAGLNVMRTLNEPTAAALAYGTERK------QGQTVAVFDLGGGTFDFSILEI
-SKD-GVFEVKATNGDTFLGGEDFDAALMKYVIQDFQAKNQ------------IDLAKDPL
-ALQRIREAVEKAKCELSS-MMTTEINLPYITVTGAGPKHLQMPITRATFEKITQHLIART
-INPCKNCLKDA-------GLTPQQINEVILVGGMTRMPKVIDS-VKEFF-GKDPFRGVNP
-DEVV-AIGASIQGSVMRGD---------HKDIVLLDVTPLSLGIETMGGVFSRLIPRNTV
-VPTKKSQEF-TTAADGQTHVNIRVFQGER-DLVEGNKLLGE----FTLVGIPPAPRG-VP
-KIEVTFDIDANSIV-HVSAKDKQ-TNKEQQMTIQ-QHGGLSQD-EIAKMIQDAEKHAAED
-KKKREILEKKYAMKQYINEI--EKTISENEKKLPADLLKRIRDSVKDLKDAIAGNDE---
-----KKIEEKYDALKAASMEIYNAISDNNTNKNKK-------------------------
-------------------------------------------------------------
--------------------------------------------------------

Deleted: trunk/packages/seaview/trunk/regions.cxx
===================================================================
--- trunk/packages/seaview/trunk/regions.cxx	2007-07-20 10:28:45 UTC (rev 359)
+++ trunk/packages/seaview/trunk/regions.cxx	2007-07-21 02:32:37 UTC (rev 360)
@@ -1,1043 +0,0 @@
-#include "seaview.h"
-
-
-/* prototypes of included functions */
-region *duplicate_region(region *source, const char *name);
-void free_region(region *reg);
-region *copy_region(region *from, region *to);
-int create_empty_region(SEA_VIEW *view, const char *name);
-void save_active_region(SEA_VIEW *view, int ask_confirm);
-void hide_region_line(SEA_VIEW *view);
-int rename_current_region(SEA_VIEW *view, const char *name);
-void delete_region(SEA_VIEW *view, int rang);
-void activate_region_line(SEA_VIEW *view, int rang);
-void ajout_segment(region *maregion, int debut, int fin);
-int suppr_segment(region *maregion, int site, char *line);
-list_segments *get_segment(region *maregion, int site);
-void draw_region_line(Fl_Widget *ob, SEA_VIEW *view);
-void regions_menu_callback(Fl_Widget *ob, void *extra);
-int begin_change_segment(SEA_VIEW *view, int new_site);
-int continue_change_segment(SEA_VIEW *view, int new_site);
-void end_change_segment(SEA_VIEW *view);
-int extend_segment_at_left(SEA_VIEW *view, int new_site);
-static void delete_in_region_line(SEA_VIEW *view, int numsite, int total);
-void delete_region_part(SEA_VIEW *view, int numsite, int total);
-static void insert_in_active_region(SEA_VIEW *view, int numsite, int total);
-void insert_region_part(SEA_VIEW *view, int numsite, int total);
-list_regions *parse_regions_from_header(char *header);
-void draw_region_background(SEA_VIEW *view, int f_seq0, int l_seq0);
-char *create_species_set(SEA_VIEW *view, char *set_name);
-void species_menu_callback(Fl_Widget *ob, void *extra);
-void get_menu_taille_valeur(Fl_Widget *menu, int *taille, int *valeur);
-void init_menu_taille_valeur(Fl_Widget *menu, int taille, int valeur, 
-	int offset);
-void update_menu_taille_valeur(Fl_Widget *menu, int taille, int valeur, 
-	int offset);
-int parse_species_sets_from_header(char *header, int **list_species_sets,
-	char **name_species_sets, int totseqs);
-
-
-extern void adjust_menu_edit_modes(SEA_VIEW *view);
-int compute_size_params(SEA_VIEW *view, int force_recompute);
-
-
-region *duplicate_region(region *source, const char *name)
-{
-region *destin;
-list_segments *pseg, *dest_seg, *prev;
-
-destin = (region *)calloc(1, sizeof(region));
-if(destin == NULL) return NULL;
-if(name != NULL) {
-	size_t l;
-	l = strlen(name);
-	destin->name = (char *)calloc(l+1, 1);
-	if(destin->name == NULL) return NULL;
-	memcpy(destin->name, name, l+1);
-	}
-if(source == NULL) return destin;
-pseg = source->list;
-if(pseg == NULL) return destin;
-destin->list = (list_segments *)calloc(1, sizeof(list_segments));
-if(destin->list == NULL) return NULL;
-*(destin->list) = *pseg;
-destin->list->next = NULL;
-pseg = pseg->next;
-prev = destin->list;
-while(pseg != NULL) {
-	dest_seg = (list_segments *)calloc(1, sizeof(list_segments));
-	if(dest_seg == NULL) return NULL;
-	*dest_seg = *pseg;
-	dest_seg->next = NULL;
-	prev->next = dest_seg;
-	prev = dest_seg;
-	pseg = pseg->next;
-	}
-return destin;
-}
-
-
-void free_region(region *reg)
-{
-list_segments *pseg, *suiv;
-if(reg == NULL) return;
-pseg = reg->list;
-while(pseg != NULL) {
-	suiv = pseg->next;
-	free(pseg);
-	pseg = suiv;
-	}
-if(reg->name != NULL) free(reg->name);
-free(reg);
-}
-
-
-region *copy_region(region *from, region *to)
-{
-region *retval;
-char *name;
-name = to->name;
-to->name = NULL;
-free_region(to);
-retval = duplicate_region(from, NULL);
-if(retval ==  NULL) out_of_memory();
-retval->name = name;
-return retval;
-}
-
-
-int create_empty_region(SEA_VIEW *view, const char *name)
-{
-list_regions *old, *new_list;
-region *maregion;
-/* le nom existe-t-il deja? */
-old = view->regions;
-while(old != NULL) {
-	if(strcmp(name, old->element->name) == 0) return FALSE;
-	old = old->next;
-	}
-maregion = (region *)calloc(1,sizeof(region));
-if(maregion ==  NULL) out_of_memory();
-maregion->name=(char *)malloc(strlen(name)+1);
-if(maregion->name ==  NULL) out_of_memory();
-strcpy(maregion->name,name);
-new_list = (list_regions *)calloc(1, sizeof(list_regions));
-if(new_list ==  NULL) out_of_memory();
-new_list->element = maregion;
-/* placer nouvelle region en fin de liste des regions connues */
-if(view->regions == NULL)
-	view->regions = new_list;
-else	{
-	old = view->regions;
-	while(old->next != NULL) old = old->next;
-	old->next = new_list;
-	}
-view->active_region = duplicate_region(maregion, name);
-if(view->active_region == NULL) return TRUE; /*mess no mem serait mieux */
-Fl_Menu_Item *items = (Fl_Menu_Item *) ((Fl_Menu_ *)view->menu_file)->menu();
-items[SAVE_REGIONS].activate();
-view->region_length = view->seq_length;
-memset(view->region_line, '-', view->region_length);
-view->region_line[view->region_length] = 0;
-compute_size_params(view, TRUE);
-return TRUE;
-}
-
-
-int rename_current_region(SEA_VIEW *view, const char *name)
-{
-list_regions *old, *new_list;
-region *maregion;
-size_t l;
-char *p;
-
-/* le nom existe-t-il deja? */
-old = view->regions;
-while(old != NULL) {
-	if(strcmp(name, old->element->name) == 0) return FALSE;
-	old = old->next;
-	}
-l = strlen(name);
-p = (char *)calloc(l+1, 1);
-if(p == NULL) return TRUE; /*mess no mem serait mieux */;
-memcpy(p, name, l+1);
-free(view->active_region->name);
-view->active_region->name = p;
-maregion = duplicate_region(view->active_region, name);
-if(maregion == NULL) return TRUE; /*mess no mem serait mieux */
-new_list = (list_regions *)calloc(1, sizeof(list_regions));
-if(new_list ==  NULL) out_of_memory();
-new_list->element = maregion;
-/* placer nouvelle region en fin de liste des regions connues */
-if(view->regions == NULL)
-	view->regions = new_list;
-else	{
-	old = view->regions;
-	while(old->next != NULL) old = old->next;
-	old->next = new_list;
-	}
-Fl_Menu_Item *items = (Fl_Menu_Item *) ((Fl_Menu_ *)view->menu_file)->menu();
-items[SAVE_REGIONS].activate();
-return TRUE;
-}
-
-
-void save_active_region(SEA_VIEW *view, int ask_confirm)
-{ /* save changes in current region */
-list_regions *list;
-list_segments *act_seg, *mem_seg;
-int tmp, taille;
-
-if(view->menu_regions == NULL) return;
-get_menu_taille_valeur(view->menu_regions, &taille, &tmp);
-if(tmp == 0) return;
-list = view->regions;
-if(tmp > 1) while( --tmp) list= list->next;
-/* compare active and region in list */
-act_seg = list->element->list;
-mem_seg = view->active_region->list;
-while ( (act_seg != NULL && mem_seg != NULL) || 
-		(act_seg == NULL && mem_seg == NULL) ) {
-	if( act_seg == NULL && mem_seg == NULL ) 
-		return;
-	if(act_seg->debut != mem_seg->debut || act_seg->fin != mem_seg->fin)
-		break;
-	act_seg = act_seg->next;
-	mem_seg = mem_seg->next;
-	}
-if(ask_confirm) {
-	char question[200];
-	sprintf(question, 
-		"Do you want to save changes\nin current sites selection?\n%s",
-		list->element->name);
-	tmp = ask_with_custom_yesno(question, "Save", "Cancel");
-	}
-else	tmp = TRUE;
-if(tmp) list->element = copy_region(view->active_region, list->element);
-}
-
-
-void hide_region_line(SEA_VIEW *view)
-{
-free_region(view->active_region);
-view->active_region = NULL;
-Fl_Menu_Item *items = (Fl_Menu_Item *) ((Fl_Menu_ *)view->menu_file)->menu();
-items[SAVE_REGIONS].deactivate();
-compute_size_params(view, TRUE);
-}
-
-
-void delete_region(SEA_VIEW *view, int rang)
-{
-list_regions *list, *previous;
-region *maregion;
-list_segments *segment, *next;
-
-list = view->regions;
-if(rang == 1) 
-	view->regions = list->next;
-else	{
-	while( --rang) {
-		previous = list;
-		list= list->next;
-		}
-	previous->next = list->next;
-	}
-maregion = list->element;
-segment = maregion->list;
-while(segment != NULL) {
-	next = segment->next;
-	free(segment);
-	segment = next;
-	}
-free(maregion->name);
-free(maregion);
-free(list);
-hide_region_line(view);
-}
-
-
-void activate_region_line(SEA_VIEW *view, int rang)
-{
-list_regions *list;
-list_segments *segment;
-list = view->regions;
-while ( --rang ) 
-	list = list->next;
-if(view->active_region == NULL) {
-	Fl_Menu_Item *items = 
-		(Fl_Menu_Item *) ((Fl_Menu_ *)view->menu_file)->menu();
-	items[SAVE_REGIONS].activate();
-	}
-view->active_region = duplicate_region(list->element, list->element->name);
-view->region_length = view->seq_length;
-memset(view->region_line, '-', view->region_length);
-view->region_line[view->region_length] = 0;
-segment = view->active_region->list;
-while(segment != NULL) {
-	memset(view->region_line + segment->debut - 1, 'X', 
-		segment->fin - segment->debut + 1);
-	segment = segment->next;
-	}
-}
-
-
-void ajout_segment(region *maregion, int debut, int fin)
-/* toutes inferferences entre nouveau segment et anciens sont acceptees
-*/
-{
-list_segments *psegment, *next, *prev;
-prev = NULL; psegment = maregion->list;
-while(psegment != NULL) { /* recherche premier segment apres le nouveau */
-	if(debut <= psegment->fin + 1) break;
-	prev = psegment;
-	psegment = psegment->next;
-	}
-if(psegment == NULL || fin < psegment->debut - 1) { /* nouveau sans interference*/
-	next = (list_segments *)calloc(1, sizeof(list_segments));
-	if(next ==  NULL) out_of_memory();
-	next->debut = debut; next->fin = fin; next->next = psegment;
-	if(prev != NULL) prev->next = next;
-	else 	maregion->list = next;
-	return;
-	}
-/* nouveau segment interfere avec un(des) autre(s) */
-psegment->debut = FL_min(debut, psegment->debut);
-psegment->fin = FL_max(fin, psegment->fin);
-while(psegment->next != NULL && psegment->fin >= psegment->next->debut - 1) {
-	psegment->fin = FL_max(psegment->fin, psegment->next->fin);
-	next = psegment->next->next;
-	free(psegment->next);
-	psegment->next = next;
-	}
-return;
-}
-
-
-int suppr_segment(region *maregion, int site, char *line)
-/* suppression du segment entier exact contenant le site site
-et la ligne-regions ligne est mise a jour avec des - (sauf si line==NULL)
-valeur rendue TRUE si pas de segment supprime, FALSE si ok.
-*/
-{
-list_segments *psegment, *prev, *next;
-int debut, fin;
-
-psegment = maregion->list; prev = NULL;
-while(psegment != NULL && psegment->fin < site) {
-	prev = psegment;
-	psegment = psegment->next;
-	}
-if(psegment == NULL || psegment->debut > site) return TRUE;
-next = psegment->next; debut = psegment->debut; fin = psegment->fin;
-free(psegment);
-if(prev != NULL) prev->next = next;
-else	maregion->list = next;
-if(line != NULL) memset(line+debut-1, '-', fin-debut+1);
-return FALSE;
-}
-
-
-list_segments *get_segment(region *maregion, int site)
-/* rend le segment contenant site ou NULL si site n'est pas dans un segment */
-{
-list_segments *psegment;
-psegment = maregion->list;
-while(psegment != NULL && psegment->fin < site) {
-	psegment = psegment->next;
-	}
-if(psegment == NULL || psegment->debut > site) return NULL;
-return psegment;
-}
-
-
-void draw_region_line(Fl_Widget *ob, SEA_VIEW *view)
-{
-int offset, x, y, l_line;
-
-x = view->x_seq; 
-y = view->y_seq + FL_min(view->tot_lines, view->tot_seqs) * view->line_height;
-fl_font(ob->labelfont(),ob->labelsize());
-/* clear the background of the region line */
-fl_color(ob->color());
-fl_rectf(x - view->char_width, y - view->line_height + fl_descent(), 
-	(view->tot_sites + 2) * view->char_width, view->line_height);
-/* write region line */
-offset= view->first_site - 1;
-l_line = ( offset + view->tot_sites < view->region_length ? 
-view->tot_sites : view->region_length - offset);
-if(l_line <= 0) return;
-fl_color(view->region_color);
-fl_draw(view->region_line + offset, l_line, x, y);
-}  
-
-
-void regions_menu_callback(Fl_Widget *ob, void *extra)
-{
-SEA_VIEW *view;
-const char *reg_name;
-int taille, valeur, reponse = ((Fl_Menu_ *)ob)->value() + 1;
-Fl_Menu_Item *items = (Fl_Menu_Item *) ((Fl_Menu_ *)ob)->menu();
-
-if(reponse <= 0 ) return;
-view = (SEA_VIEW *) ((user_data_plus *)extra)->p;
-get_menu_taille_valeur(ob, &taille, &valeur);
-if(reponse == 1) { /* create new region */
-	reg_name = fl_input("New region name?", "all seqs");
-	if(reg_name == NULL) return;
-	if( !create_empty_region(view, reg_name) ) {
-		fl_alert("This name is already used: %s",reg_name);
-		return;
-		}
-	view->DNA_obj->redraw();
-	items[0].deactivate();
-	items[1].activate();
-	items[2].activate();
-	items[3].activate();
-	items[4].activate();
-	((Fl_Menu_ *)ob)->add(reg_name, 0, NULL, NULL, FL_MENU_RADIO);
-	taille++;
-	update_menu_taille_valeur(ob, taille, taille, 5);
-	}
-else if(reponse == 2) { /* save changes in current region */
-	save_active_region(view, FALSE);
-	}
-else if(reponse == 3) { /* rename current region */
-	reg_name = fl_input("New region name?", "all seqs");
-	if(reg_name == NULL) return;
-	if( !rename_current_region(view, reg_name) ) {
-		fl_alert("This name is already used: %s",reg_name);
-		return;
-		}
-	view->DNA_obj->redraw();
-	((Fl_Menu_ *)ob)->add(reg_name, 0, NULL, NULL, FL_MENU_RADIO);
-	taille++;
-	update_menu_taille_valeur(ob, taille, taille, 5);
-	}
-else if(reponse == 4) { /* hide current region */
-	hide_region_line(view);
-	view->DNA_obj->redraw();
-	items[0].activate();
-	items[1].deactivate();
-	items[2].deactivate();
-	items[3].deactivate();
-	items[4].deactivate();
-	update_menu_taille_valeur(ob, taille, 0, 5);
-	}
-else if(reponse == 5) { /* delete current region */
-	list_regions *list;
-	char question[200];
-	int tmp;
-	tmp = valeur;
-	list = view->regions;
-	if(tmp > 1) while( --tmp) list= list->next;
-	sprintf(question, "Confirm deletion of region:\n%s", 
-		list->element->name);
-	if( ask_with_custom_yesno(question, "Delete", "Cancel") ) {
-		delete_region(view, valeur);
-		view->DNA_obj->redraw();
-		items[0].activate();
-		items[1].deactivate();
-		items[2].deactivate();
-		items[3].deactivate();
-		items[4].deactivate();
-		((Fl_Menu_ *)ob)->remove(valeur + 5 - 1);
-		init_menu_taille_valeur(ob, taille - 1, 0, 5);
-		}	
-	}
-else	{ /* choix d'une region courante */
-	valeur = reponse - 5;
-	activate_region_line(view, valeur);
-	compute_size_params(view, TRUE);
-	view->DNA_obj->redraw();
-	update_menu_taille_valeur(ob, taille, valeur, 5);
-	items[0].deactivate();
-	items[1].activate();
-	items[2].activate();
-	items[3].activate();
-	items[4].activate();
-	}
-}
-
-
-static int new_debut, new_fin, prev_site;
-static list_segments *modified_segment;
-
-int begin_change_segment(SEA_VIEW *view, int new_site)
-/*
-returns TRUE si click sur extremite d'un segment ou entre 2 segments, FALSE sinon et enleve le site clique de la region
-*/
-{
-int tmp;
-modified_segment = get_segment(view->active_region, new_site);
-if ( modified_segment != NULL && new_site != modified_segment->debut &&
-	new_site != modified_segment->fin) {
-	/* enlever un site au milieu d'un segment */
-	tmp = modified_segment->fin;
-	modified_segment->fin = new_site - 1;
-	ajout_segment(view->active_region, new_site+1, tmp);
-	view->region_line[new_site - 1] ='-';
-	return FALSE;
-	}
-if(modified_segment != NULL) {
-	new_debut = modified_segment->debut;
-	new_fin = modified_segment->fin;
-	}
-else	{
-	new_debut = new_fin = new_site;
-	view->region_line[new_site - 1] ='X';
-	}
-prev_site = new_site;
-return TRUE;
-}
-
-int continue_change_segment(SEA_VIEW *view, int new_site)
-{
-int min;
-char *pos, new_char;
-list_segments *current_segment;
-
-if(new_site == prev_site) return FALSE;
-current_segment = get_segment(view->active_region, new_site);
-if( current_segment != NULL && current_segment != modified_segment)return FALSE;
-pos = view->region_line + new_site - 1;
-if( *pos == '-' ) new_char = 'X';
-else	new_char = '-';
-min = FL_min(prev_site, new_site);
-memset( view->region_line + min - 1, new_char, abs(prev_site - new_site) + 1 );
-view->region_line[new_site - 1] = 'X';
-if(new_char == 'X') {
-	new_debut = FL_min(new_debut, new_site);
-	new_fin = FL_max(new_fin, new_site);
-	}
-else	{
-	if(new_site > prev_site) 
-		new_debut = new_site;
-	else
-		new_fin = new_site;
-	}
-prev_site = new_site;
-return TRUE;
-}
-
-
-void end_change_segment(SEA_VIEW *view)
-{
-if(modified_segment == NULL ) /* nouveau segment */
-	ajout_segment(view->active_region, new_debut, new_fin);
-else 	{
-	if (new_fin > modified_segment->fin)
-	/* segment rallonge par sa fin */
-		ajout_segment(view->active_region, modified_segment->debut, 
- 			new_fin);
-	else if( new_fin < modified_segment->fin ) 
-		/*segment raccourci par sa fin */
-		modified_segment->fin = new_fin;
-	if (new_debut < modified_segment->debut)
-		/* segment rallonge par son debut */
-		ajout_segment(view->active_region, new_debut, 
- 			modified_segment->fin);
-	else if( new_debut > modified_segment->debut ) 
-		/* segment raccourci par son debut */
-		modified_segment->debut = new_debut;
-	}
-}
-
-
-int extend_segment_at_left(SEA_VIEW *view, int new_site)
-{
-list_segments *segment;
-
-segment = view->active_region->list;
-if(segment == NULL || segment->debut > new_site) return TRUE;
-if(get_segment(view->active_region, new_site) != NULL) return TRUE;
-while(segment->next != NULL) {
-	if(segment->next->debut > new_site) break;
-	segment = segment->next;
-	}
-memset(view->region_line + segment->fin, 'X', new_site - segment->fin);
-ajout_segment(view->active_region, segment->fin, new_site);
-return FALSE;
-}
-
-
-static void delete_in_region_line(SEA_VIEW *view, int numsite, int total)
-/* delete total sites in pos numsite of view->region_line */
-{
-char *site;
-int l;
-l = view->region_length;
-site = view->region_line + numsite - 1;
-memmove(site - total, site, l - numsite + 2);
-view->region_length -= total;
-}
-
-
-void delete_region_part(SEA_VIEW *view, int numsite, int total)
-{
-int debut, fin;
-list_segments *segment, *previous;
-list_regions *next_region;
-list_regions active;
-
-if(total >= numsite) total = numsite - 1;
-if(total == 0) return;
-if(view->active_region != NULL) delete_in_region_line(view, numsite, total);
-/* pour toutes les regions en commencant par active_region */
-if(view->active_region != NULL) {
-	active.element = view->active_region;
-	active.next = view->regions;
-	next_region = &active;
-	}
-else
-	next_region = view->regions;
-while(next_region != NULL) {
-	segment = next_region->element->list;
-	while(segment != NULL) {
-		debut = segment->debut; fin = segment->fin;
-		if(debut >= numsite) debut -= total;
-		else if(debut >= numsite - total) debut = numsite - total;
-		if(fin >= numsite - total) {
-			fin -= total;
-			if(fin < debut) {
-				debut = segment->debut;
-				segment = segment->next;
-				suppr_segment(next_region->element, debut, 
-						NULL);
-				}
-			else	{
-				segment->debut = debut;
-				segment->fin = fin;
-				segment = segment->next;
-				}
-			}
-		else
-			segment = segment->next;
-		}
-/* il peut etre necessaire de fusionner 2 segments consecutifs */
-	segment = next_region->element->list;
-	previous = NULL;
-	while(segment != NULL) {
-		if(previous != NULL && segment->debut == previous->fin + 1) {
-			fin = segment->fin;
-			suppr_segment(next_region->element, segment->debut, 
-					NULL);
-			ajout_segment(next_region->element, previous->debut, 
-					fin);
-			segment = previous;
-			}
-		previous = segment;
-		segment = segment->next;
-		}
-	next_region = next_region->next;
-	}
-}
-
-
-static void insert_in_active_region(SEA_VIEW *view, int numsite, int total)
-/* 
-insert total sites in pos numsite of view->region_line and of ->active_region 
-*/
-{
-char *site, new_char;
-list_segments *segment;
-
-site = view->region_line + numsite - 1;
-memmove(site + total, site, view->region_length - numsite + 2);
-view->region_length += total;
-segment = view->active_region->list;
-new_char = '-';
-while(segment != NULL) {
-	if(segment->debut <= numsite && segment->fin >= numsite) {
-		new_char = 'X';
-		}
-	if(segment->debut > numsite) segment->debut += total;
-	if(segment->fin >= numsite) segment->fin += total;
-	segment = segment->next;
-	}
-memset(site, new_char, total);
-}
-
-
-void insert_region_part(SEA_VIEW *view, int numsite, int total)
-/* insert total sites in pos numsite of all known regions */
-{
-list_segments *segment;
-list_regions *next_region;
-
-if(total + view->region_length > view->max_seq_length)
-	total = view->max_seq_length - view->region_length;
-if(total == 0) return;
-if(view->active_region != NULL) insert_in_active_region(view, numsite, total);
-next_region = view->regions;
-while(next_region != NULL) {
-	segment = next_region->element->list;
-	while(segment != NULL) {
-		if(segment->debut > numsite) segment->debut += total;
-		if(segment->fin >= numsite) segment->fin += total;
-		segment = segment->next;
-		}
-	next_region = next_region->next;
-	}
-}
-
-
-list_regions *parse_regions_from_header(char *header)
-/* parse the region information from header lines
-and remove it from them
-*/
-{
-char *p, reg_name[200], aux[200], separ[5], *i, *j, *new_header, 
-	*fin_new_header, *old_header;
-int nreg, tot_reg, l, *endpoints, l_header;
-region *maregion;
-list_segments *segment;
-list_regions *rlist, *deb_rlist = NULL, *cur_list;
-if(header == NULL) return NULL;
-old_header = header;
-l_header=strlen(header);
-if( (new_header = (char *)malloc(l_header+1)) == NULL) out_of_memory();
-fin_new_header = new_header;
-*new_header = 0;
-while (*header!= 0) {
-	if(strncmp(header,";;#",3) == 0) {
-		p=strchr(header,'=') + 1;
-		while(*p == ' ') p++;
-		sscanf(p,"%d",&tot_reg);
-		endpoints = (int *)malloc(2*tot_reg*sizeof(int));
-		if(endpoints==NULL) out_of_memory();
-		while(*p != ' ' && *p != '\n') p++;
-		while(*p == ' ') p++;
-		if( *p == '\n') { /* no region name in file */
-			strcpy(reg_name, "regions");
-			header = p;
-			}
-		else	{
-			header = strchr(p,'\n');
-			memcpy(reg_name, p, header - p);
-			l = header - p;
-			reg_name[l] = 0; 
-			while(reg_name[--l]==' ') reg_name[l] = 0;
-			}
-		header++;
-		nreg=0;
-		while(nreg <= 2*tot_reg-1) {
-			j = (char *)memccpy(aux, header, '\n', sizeof(aux));
-			if(j == NULL) goto next_line;  
-			*(j - 1) = 0;
-			strcpy(separ,";, "); j=aux;
-			while( (i=strtok(j,separ)) != NULL) {
-				sscanf(i,"%d",&l);
-				if( nreg > 0 &&  
-					l <= *(endpoints+nreg-1) - nreg%2 ) {
-					fprintf(stderr,
-			"Region endpoints are not in increasing order: %d\n",l);
-					goto next_line;
-					}
-				*(endpoints + nreg++) = l;
-				j = NULL;
-				}
-			header = strchr(header,'\n') + 1;
-			}
-		maregion = (region *)calloc(1,sizeof(region));
-		if(maregion ==  NULL) out_of_memory();
-		l=strlen(reg_name);
-		maregion->name = (char *)malloc(l+1);
-		if(maregion->name ==  NULL) out_of_memory();
-		strcpy(maregion->name, reg_name);
-		for(nreg = 2*tot_reg -1; nreg >= 0; nreg -= 2) {
-			segment = (list_segments *)
-				malloc(sizeof(list_segments));
-			if(segment ==  NULL) out_of_memory();
-			segment->fin = endpoints[nreg];
-			segment->debut = endpoints[nreg - 1];
-			segment->next = maregion->list;
-			maregion->list = segment;
-			}
-		free(endpoints);
-		rlist = (list_regions *)malloc(sizeof(list_regions));
-		if(rlist ==  NULL) out_of_memory();
-		rlist->element = maregion;
-		rlist->next = NULL;
-		if(deb_rlist == NULL)
-			deb_rlist = rlist;
-		else	{
-			cur_list =  deb_rlist;
-			while(cur_list->next != NULL)
-				cur_list = cur_list->next;
-			cur_list->next = rlist;
-			}
-		continue;
-		}
-	else	{
-		j=(char *)memccpy(fin_new_header, header, '\n', l_header);
-		fin_new_header += (j - fin_new_header);
-		}
-next_line:
-	header = strchr(header,'\n') + 1;
-	}
-*fin_new_header = 0;
-strcpy(old_header, new_header);
-free(new_header);
-return deb_rlist;
-}
-
-
-void draw_region_background(SEA_VIEW *view, int f_seq0, int l_seq0)
-{
-list_segments *segment;
-int nb_sites, debut, der_site, h, x, y, w, seqnum, y0;
-Fl_Widget *ob = view->DNA_obj;
-
-if(view->active_region == NULL || view->numb_gc == 1) return;
-segment = view->active_region->list;
-if(segment == NULL) return;
-der_site = view->first_site + view->tot_sites - 1;
-if(view->mod_seq == 0) { /* toutes les seqs */
-	h = FL_min(view->tot_lines, view->tot_seqs - view->first_seq + 1) *
-		view->line_height;
-	y0 = view->y_seq - view->line_height + fl_descent();
-	f_seq0 = l_seq0 = 0;
-	}
-else if(view->mod_seq == -1) { /* les seqs selectionnees seulement */
-	h = view->line_height;
-	y0 = view->y_seq - view->line_height + fl_descent() +
-		(f_seq0 + 1 - view->first_seq) * view->line_height;
-	}
-else	{ /* la seq mod_seq seulement */
-	h = view->line_height;
-	y0 = view->y_seq - view->line_height + fl_descent() +
-		(view->mod_seq - view->first_seq) * view->line_height;
-	f_seq0 = l_seq0 = 0;
-	}
-fl_color(ob->selection_color());
-do	{
-	if(segment->debut > der_site) break;
-	if(segment->fin < view->first_site) continue;
-	debut = FL_max(segment->debut, view->first_site);
-	nb_sites = FL_min(segment->fin, der_site) - debut + 1;
-	x = view->x_seq + (debut - view->first_site) * view->char_width;
-	y = y0;
-	w = nb_sites * view->char_width;
-	for(seqnum = f_seq0; seqnum <= l_seq0; seqnum++) {
-		if(view->mod_seq != -1 || view->sel_seqs[seqnum])
-			fl_rectf( x, y, w, h);
-		y += view->line_height;
-		}
-	}
-while( (segment = segment->next) != NULL );
-}
-
-
-char *create_species_set(SEA_VIEW *view, char *set_name)
-{
-int newnumb, i;
-if(view->numb_species_sets >= MAX_SPECIES_SETS)
-	return "Cannot create more sets";
-/* le nom existe-t-il deja? */
-for(i=0; i< view->numb_species_sets; i++) {
-	if(strcmp(set_name, view->name_species_sets[i]) == 0) 
-		return "Name already used";
-	}
-newnumb = view->numb_species_sets + 1;
-view->list_species_sets[newnumb-1] = (int *)calloc(view->tot_seqs, sizeof(int));
-if(view->list_species_sets[newnumb-1] == NULL)
-	return "Not enough memory";
-view->name_species_sets[newnumb-1] = 
-	(char *)calloc(strlen(set_name)+1, sizeof(char));
-if(view->name_species_sets[newnumb-1] == NULL)
-	return "Not enough memory";
-memcpy(view->list_species_sets[newnumb-1], view->sel_seqs, 
-	view->tot_seqs * sizeof(int) );
-strcpy(view->name_species_sets[newnumb-1], set_name);
-view->numb_species_sets = newnumb;
-return NULL;
-}
-
-
-void species_menu_callback(Fl_Widget *ob, void *extra)
-{
-SEA_VIEW *view;
-char *set_name, *message;
-int i, rang, numset, taille, reponse = ((Fl_Menu_ *)ob)->value() + 1;
-
-if(reponse <= 0 ) return;
-view = (SEA_VIEW *) ((user_data_plus *)extra)->p;
-get_menu_taille_valeur(ob, &taille, &rang);
-if(reponse == 1) { /* create new set of species */
-	if(view->tot_sel_seqs == 0) return;
-	set_name = (char *)fl_input("New species set name?", "good seqs");
-	if(set_name == NULL) return;
-	if( (message = create_species_set(view, set_name) ) != NULL ) {
-		fl_alert("%s\n%s", message, set_name);
-		return;
-		}
-	((Fl_Menu_ *)ob)->add(set_name, 0, NULL, NULL, FL_MENU_RADIO);
-	taille++;
-	update_menu_taille_valeur(ob, taille, taille, 2);
-	Fl_Menu_Item *items = (Fl_Menu_Item *) ((Fl_Menu_ *)ob)->menu();
-	items[0].deactivate();
-	items[1].activate();
-	}
-else if( reponse == 2) { /* effacer un set */
-	Fl_Menu_Item *items = (Fl_Menu_Item *) ((Fl_Menu_ *)ob)->menu();
-	items[1].deactivate();
-	if(rang == 0) return; /* par securite */
-	numset = rang - 1;
-	((Fl_Menu_ *)view->menu_species)->remove(numset + 3 - 1);
-	init_menu_taille_valeur(view->menu_species, taille - 1, 0, 2);
-	free(view->list_species_sets[numset]);
-	free(view->name_species_sets[numset]);
-	memcpy(view->list_species_sets + numset,
-		view->list_species_sets + numset + 1,
-		(view->numb_species_sets - numset - 1)*sizeof(int *) );
-	memcpy(view->name_species_sets + numset,
-		view->name_species_sets + numset + 1,
-		(view->numb_species_sets - numset - 1)*sizeof(char *) );
-	(view->numb_species_sets)--;
-	view->tot_sel_seqs = 0;
-	memset(view->sel_seqs, 0, view->tot_seqs * sizeof(int));
-	view->DNA_obj->redraw();
-	}
-else	{ /* choix d'un set courant */
-	int minvis, maxvis, visible = FALSE, premier = 0;
-	rang = reponse - 2;
-	memcpy(view->sel_seqs, view->list_species_sets[rang-1], 
-		view->tot_seqs * sizeof(int) );
-	view->tot_sel_seqs = 0;
-	minvis = view->first_seq; maxvis = minvis + view->tot_lines - 1;
-	for(i=0; i< view->tot_seqs; i++) 
-		if(view->sel_seqs[i]) {
-			++(view->tot_sel_seqs);
-			if(!visible) visible = (i+1 >= minvis && i+1 <= maxvis);
-			if(premier == 0) premier = i + 1;
-			}
-	if(premier != 0 && !visible ) {
-		int maxi;
-  		maxi = (int)((Fl_Slider *)view->vertsli)->maximum();
-		if(premier > maxi) premier = maxi;
-		view->first_seq = premier;
-		((Fl_Slider *)view->vertsli)->value(premier);
-		}
-	view->DNA_obj->redraw();
-	update_menu_taille_valeur(ob, taille, rang, 2);
-	Fl_Menu_Item *items = (Fl_Menu_Item *) ((Fl_Menu_ *)ob)->menu();
-	items[1].activate();
-	adjust_menu_edit_modes(view);
-	}
-}
-
-
-void get_menu_taille_valeur(Fl_Widget *menu, int *taille, int *valeur)
-{
-user_data_plus *extra = (user_data_plus *)menu->user_data();
-int u_ldata = extra->value;
-*taille = u_ldata / 100;
-*valeur = u_ldata % 100;
-}
-
-
-void init_menu_taille_valeur(Fl_Widget *obj, int taille, int valeur, 
-	int offset)
-{
-int i;
-Fl_Menu_ *menu = (Fl_Menu_ *)obj;
-
-for(i = 1; i <= taille; i++) menu->mode(offset + i - 1, FL_MENU_RADIO);
-if(valeur != 0) menu->mode(offset + valeur - 1, FL_MENU_RADIO | FL_MENU_VALUE);
-int u_ldata = 100 * taille + valeur;
-user_data_plus *extra = (user_data_plus *)menu->user_data();
-extra->value = u_ldata;
-}
-
-
-void update_menu_taille_valeur(Fl_Widget *obj, int taille, int valeur, 
-	int offset)
-{
-int old_taille, old_valeur;
-Fl_Menu_ *menu = (Fl_Menu_ *)obj;
-
-get_menu_taille_valeur(menu, &old_taille, &old_valeur);
-if(valeur != old_valeur) {
-	if(old_valeur != 0) 
-		menu->mode(offset + old_valeur - 1, FL_MENU_RADIO);
-	if(valeur != 0) 
-		menu->mode(offset + valeur - 1, FL_MENU_RADIO | FL_MENU_VALUE);
-	}
-int u_ldata = 100 * taille + valeur;
-user_data_plus *extra = (user_data_plus *)menu->user_data();
-extra->value = u_ldata;
-}
-
-
-int parse_species_sets_from_header(char *header, int **list_species_sets,
-	char **name_species_sets, int totseqs)
-/* parse the species sets information from header lines
-and remove it from them
-*/
-{
-char *p, set_name[200], aux[200], separ[5], *i, *j, *new_header, 
-	*fin_new_header, *old_header;
-int numset, tot_spec, l, l_header, num;
-if(header == NULL) return 0;
-old_header = header;
-l_header=strlen(header);
-if( (new_header = (char *)malloc(l_header+1)) == NULL) out_of_memory();
-fin_new_header = new_header;
-*new_header = 0;
-numset = -1;
-while (*header!= 0) {
-	if(strncmp(header,";;@",3) == 0) {
-		numset++;
-		p=strchr(header,'=') + 1;
-		while(*p == ' ') p++;
-		sscanf(p,"%d",&tot_spec);
-		list_species_sets[numset] = (int *)calloc(totseqs, sizeof(int));
-		if(list_species_sets[numset]==NULL) out_of_memory();
-		while(*p != ' ' && *p != '\n') p++;
-		while(*p == ' ') p++;
-		if( *p == '\n') { /* no set name in file */
-			strcpy(set_name, "species set");
-			header = p;
-			}
-		else	{
-			header = strchr(p,'\n');
-			memcpy(set_name, p, header - p);
-			l = header - p;
-			set_name[l] = 0; 
-			while(set_name[--l]==' ') set_name[l] = 0;
-			}
-		l = (int) strlen(set_name);
-		name_species_sets[numset] = (char *)malloc(l+1);
-		if(name_species_sets[numset] == NULL) out_of_memory();
-		memcpy(name_species_sets[numset], set_name, l+1);
-		header++;
-		num = 0;
-		while(num < tot_spec) {
-			j = (char *)memccpy(aux, header, '\n', sizeof(aux));
-			if(j == NULL) goto next_line;  
-			*(j - 1) = 0;
-			strcpy(separ,";, "); j=aux;
-			while( (i=strtok(j,separ)) != NULL) {
-				sscanf(i,"%d",&l);
-				if( l>= 1 && l <= totseqs)
-					list_species_sets[numset][l-1] = 1;
-				num++;
-				j = NULL;
-				}
-			header = strchr(header,'\n') + 1;
-			}
-		continue;
-		}
-	else	{
-		j=(char *)memccpy(fin_new_header, header, '\n', l_header);
-		fin_new_header += (j - fin_new_header);
-		}
-next_line:
-	header = strchr(header,'\n') + 1;
-	}
-*fin_new_header = 0;
-strcpy(old_header, new_header);
-free(new_header);
-return numset + 1;
-}

Deleted: trunk/packages/seaview/trunk/resource.cxx
===================================================================
--- trunk/packages/seaview/trunk/resource.cxx	2007-07-20 10:28:45 UTC (rev 359)
+++ trunk/packages/seaview/trunk/resource.cxx	2007-07-21 02:32:37 UTC (rev 360)
@@ -1,287 +0,0 @@
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-
-// included functions
-void *load_resources(char *progname);
-char *get_res_value(char *name, char *def_value, void *v_db);
-int int_res_value(char *name, int def_value, void *v_db);
-int bool_res_value(char *name, int def_value, void *v_db);
-int set_res_value(const char *name, const char *value);
-int save_resources(void);
-
-
-#if defined(__APPLE__)
-
-#if TARGET_RT_MAC_MACHO
-/* for Mac OS X */
-char *get_res_value(char *name, char *def_value, void *unused)
-{
-OSStatus err;
-CFStringRef cfname;
-CFPropertyListRef cfvalue;
-static char value[100];
-
-cfname = CFStringCreateWithCString(kCFAllocatorDefault, name, kCFStringEncodingASCII);
-cfvalue = CFPreferencesCopyAppValue(cfname, kCFPreferencesCurrentApplication);
-if(cfvalue == NULL) return def_value;
-CFStringGetCString( (CFStringRef)cfvalue, value, sizeof(value), kCFStringEncodingASCII);
-CFRelease(cfname); CFRelease(cfvalue);
-return value;
-}
-
-
-int set_res_value(const char *name, const char *value)
-{
-char *p;
-CFStringRef cfname, cfvalue;
-
-cfname = CFStringCreateWithCString(kCFAllocatorDefault, name, kCFStringEncodingASCII);
-cfvalue = CFStringCreateWithCString(kCFAllocatorDefault, value, kCFStringEncodingASCII);
-CFPreferencesSetAppValue(cfname, cfvalue, kCFPreferencesCurrentApplication);
-CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication);
-CFRelease(cfname); CFRelease(cfvalue);
-return 0;
-}
-
-#else
-/* for Classic MaCOS */
-extern "C" {
-extern void PtoC(const void *in, void *out);
-extern void CtoP(const void *in, void *out);
-}
-
-static char *load1res(char *resname)
-{
-	char **h, *p, pname[256]; 
-	int l;
-
-	CtoP(resname, pname);
-	h = GetNamedResource('TEXT', (ConstStr255Param)pname );
-	if(h == NULL) return NULL;
-	else	{
-		l = GetHandleSize(h);
-		p = (char *)malloc(l + 1);
-		}
-	if(p != NULL) {
-		HLock(h);
-		memcpy(p, *h, l);
-		HUnlock(h);
-		p[l] = 0;
-		if(p[--l] == '\r') p[l] = 0;
-		}
-	ReleaseResource(h);
-	return p;
-}
-	
-char *get_res_value(char *name, char *def_value, void *v_db)
-{
-char *p;
-
-p = load1res(name);
-if(p != NULL) return p;
-else return def_value;
-}
-
-
-int set_res_value(const char *name, const char *value)
-/* returns 0 iff no error */
-{
-Str255 pname;
-Handle h;
-short id;
-OSErr err;
-int l;
-
-CtoP(name, pname);
-l = strlen(value);
-h = GetNamedResource('TEXT', pname);
-if(h == NULL) { // resource not yet exists
-	if(ResError() != resNotFound) return 1;
-	id = Unique1ID('TEXT');
-	h = NewHandle(l);
-	if(h == NULL) return 1;
-	HLock(h);
-	memcpy(*h, value, l);
-	HUnlock(h);
-	AddResource(h, 'TEXT', id, pname);
-	if( ResError() != noErr) return 1;
-	}
-else {// resource already exists
-	if(l == GetHandleSize(h)) {
-		HLock(h);
-		err = memcmp(*h, value, l);
-		HUnlock(h);
-		if(err == 0) return 0; // same value already, stop here
-		}
-	SetHandleSize(h, l);
-	if( MemError() != noErr) return 1;
-	HLock(h);
-	memcpy(*h, value, l);
-	HUnlock(h);
-	ChangedResource(h);
-	if( ResError() != noErr) return 1;
-	}
-ReleaseResource(h);
-err = ResError();
-return err != noErr ;
-}
-
-#endif
-
-int save_resources(void)
-{ // nothing to do, taken care of by the system
-}
-
-void *load_resources(char *progname)
-{ // nothing to do, taken care of by the system
-return NULL;	
-}
-
-
-#else /* for X11 and win32 */
-
-typedef struct _item {
-	struct _item *before;
-	char *name;
-	char *value;
-	struct _item *next;
-	} item;
-
-static item *firstitem = NULL;
-
-extern "C" { 
-	char *get_prog_dir(void); 
-	}
-
-char *res_filename(void)
-{
-static char fname[FILENAME_MAX];
-char *p;
-
-#ifdef WIN32
-p = get_prog_dir();
-if(p == NULL) return NULL;
-strcpy(fname, p);
-strcat(fname, "\\seaview.ini");
-#else
-p = getenv("HOME");
-if(p == NULL) return NULL;
-strcpy(fname, p);
-strcat(fname, "/.seaviewrc");
-#endif
-return fname;
-}
-
-
-void *load_resources(char *progname)
-{
-FILE *in;
-char *fname, *p, line[500];
-item *elt, *last = NULL;
-
-fname = res_filename();
-if(fname == NULL) return NULL;
-in = fopen(fname, "r");
-if(in == NULL) return NULL;
-while((p = fgets(line, sizeof(line), in)) != NULL) {
-	p = strchr(line, '\n'); if(p != NULL) *p = 0;
-	p = strchr(line, '=');
-	if(p == NULL) continue;
-	*(p++) = 0; while(isspace(*p))  p++;
-	if(*p == 0) continue;
-	elt = (item *)malloc(sizeof(item));
-	if(elt == NULL) break;
-	elt->name = strdup(line);
-	elt->value = strdup(p);
-	if(elt->name == NULL || elt->value == NULL) break;
-	if(last != NULL) last->next = elt;
-	else firstitem = elt;
-	elt->before = last;
-	last = elt;
-	elt->next = NULL;
-	}
-fclose(in);
-return firstitem;
-}
-
-
-char *get_res_value(char *name, char *def_value, void *v_db)
-{
-if(v_db == NULL) return def_value;
-item *elt = (item *)v_db;
-
-while(elt != NULL) {
-	if(strcmp(name, elt->name) == 0) return elt->value;
-	elt = elt->next;
-	}
-return def_value;
-}
-
-
-int set_res_value(const char *name, const char *value)
-{
-item *elt, *last = NULL;
-
-elt = firstitem;
-while(elt != NULL) {
-	if(strcmp(elt->name, name) == 0) {
-		free(elt->value);
-		elt->value = strdup(value);
-		return 0;
-		}
-	last = elt;
-	elt = elt->next;
-	}
-elt = (item *)malloc(sizeof(item));
-if(elt == NULL) return 1;
-elt->name = strdup(name);
-elt->value = strdup(value);
-if(elt->name == NULL || elt->value == NULL) return 1;
-if(last != NULL) last->next = elt;
-else firstitem = elt;
-elt->before = last;
-elt->next = NULL;
-return 0;
-}
-
-
-int save_resources(void)
-{ 
-char *fname;
-item *elt;
-FILE *out;
-
-fname = res_filename();
-if(fname == NULL) return 1;
-out = fopen(fname, "w");
-if(out == NULL) return 1;
-elt = firstitem;
-while(elt != NULL) {
-	fprintf(out, "%s=%s\n", elt->name, elt->value);
-	elt = elt->next;
-	}
-fclose(out);
-return 0;
-}
-
-#endif
-
-
-int int_res_value(char *name, int def_value, void *v_db)
-{
-int val = def_value;
-char *p = get_res_value(name, NULL, v_db);
-if( p != NULL ) sscanf(p, "%d", &val);
-return val;
-}
-
-
-int bool_res_value(char *name, int def_value, void *v_db)
-{
-char *p = get_res_value(name, NULL, v_db);
-if( p == NULL ) return def_value;
-return (*p == 'T' || *p == 't');
-}
-

Deleted: trunk/packages/seaview/trunk/seaview.cxx
===================================================================
--- trunk/packages/seaview/trunk/seaview.cxx	2007-07-20 10:28:45 UTC (rev 359)
+++ trunk/packages/seaview/trunk/seaview.cxx	2007-07-21 02:32:37 UTC (rev 360)
@@ -1,4575 +0,0 @@
-//
-// Copyright 1996-2005 by Manolo Gouy.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This program 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
-// General Public License for more details.
-//
-// A copy of the GNU General Public License is available
-// from http://www.gnu.org/licenses/gpl.txt or by mail from the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-// USA.
-//
-// Please report all bugs and problems to "mgouy at biomserv.univ-lyon1.fr".
-//
-
-
-#include "seaview.h"
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include "FL/Fl_Double_Window.H"
-#include "FL/Fl_Pack.H"
-#include "FL/Fl_Hold_Browser.H"
-#include <FL/Fl_Round_Button.H>
-#include <FL/Fl_Check_Button.H>
-
-
-// myFL_CTRL is the modifier for menu shortcuts (Meta on Apple and Ctrl otherwise)
-#if defined(__APPLE__) 
-#if	(FL_MAJOR_VERSION*10000 + FL_MINOR_VERSION*100 + FL_PATCH_VERSION) >= 10106
-#define myFL_CTRL FL_META
-#else //on old fltk versions, Ctrl and Meta keyw are exchanged
-#undef FL_CTRL
-#define FL_CTRL 0x00400000
-#define myFL_CTRL 0x00040000
-#endif
-#else
-#define myFL_CTRL FL_CTRL
-#endif
-
-
-
-/* allongement maximal prevu pour les seqs suite a edition */
-#define MAX_SEQ_ALLONG 5000
-#define MINI_MAX_LENGTH  10000 /* pour depart avec fichier vide */
-
-/* 
-Purpose
-resource	argument	type		default			exemple
-
-Default file format for saving operations
-save		-save		{mase, phylip,	mase			phylip
-			    clustal, msf, fasta, nexus}
-
-Control of printout options
-printoutblock	N/A		integer		10			3
-printoutcpl	N/A		integer		80			90
-	[this is the paper width, not the # of residues desired on each line]
-printoutlpp	N/A		integer		66			90
-Name of help file
-helpfile	N/A		string		"seaview.help"
-
-Standard coloring of protein sequences (<= 10 colors + white for gaps)
-(colors are red, green, yellow, blue, cyan, magenta, salmon, purple, aquamarine,
-and dark-gray)
-stdcolorgroups	N/A		string		EDQNHRKBZ,ILMV,APSGT,FY,WC
-						      BZDE,ACWY,FGHIK,LMNPQRSTV
-Alternate coloring of protein sequences
-altcolorgroups	N/A		string		\0	AC,DEFGHIK,LMNPQRS,WY,TV
-
-Faster but less smooth writing
-fast		-fast		no-value	False
-
-Residues colored on background
-inverted	-inverted	no-value	False
-
-N/A		filename
-*/	
-
-Fl_Group *create_dna_scroller(SEA_VIEW *view, int x, int y, int w, int h, 
-	int dbl_buff);
-SEA_VIEW *create_the_form(int double_buffer, int inverted,
-		known_format default_format, int numb_dnacolors,
-		int *dnacolors, 
-		int numb_stdprotcolors, int *stdprotcolors,
-		int numb_altprotcolors, int *altprotcolors,
-		color_choice curr_color_choice, char *progname, char *movekeys,
-		char *win_size, int allow_lower, char *help_file,
-		int back_color, int region_back_color, int defaultfontsize,
-		int alignment_algo);
-int prep_custom_colors(int *colors, char *customcolors, 
-	int max_colors);
-color_choice prep_aa_color_code(char *list_std, char *list_alt, 
-	int maxprotcolors, int *numb_stdprotcolors, int *numb_altprotcolors);
-void deplacer_grp_seqs(SEA_VIEW *view, int target);
-void del_gap_only_sites(SEA_VIEW *view);
-void reference_toggle(SEA_VIEW *view, int on);
-void handle_mouse(SEA_VIEW *view, int mx, int my, 
-	int *p_selecting_seqs, int *p_sel_seq_move, int *p_modifying_segment);
-void handle_keyboard(SEA_VIEW *view, unsigned int key, int istext);
-void handle_push(SEA_VIEW *view, int mx, int my, int key, 
-	int *p_modifying_segment, int *p_selecting_seqs, int *p_sel_seq_move);
-int delete_gaps_before(SEA_VIEW *view, int numseq, int numsite, int total);
-void set_save_format(SEA_VIEW *view, int val);
-void use_initial_file(SEA_VIEW *view, char *masename);
-int ask_with_custom_yesno(const char *text, const char *yes, const char *no);
-void pdfps_options_dialog(SEA_VIEW *view);
-
-/* external functions */
-void draw_comment_lines(Fl_Widget *ob, SEA_VIEW *view);
-void get_menu_taille_valeur(Fl_Widget *menu, int *taille, int *valeur);
-void init_menu_taille_valeur(Fl_Widget *menu, int taille, int valeur, 
-	int offset);
-void update_menu_taille_valeur(Fl_Widget *menu, int taille, int valeur, 
-	int offset);
-char* fl_file_chooser_plus(const char* message, const char* pat, 
-	const char* fname, int use_only_button);
-char* fl_file_chooser_save_as(const char* message, const char* pat, 
-	const char* fname, void *view);
-void *load_resources(char *progname);
-int save_resources(void);
-char *get_res_value(char *name, char *def_value, void *v_db);
-int int_res_value(char *name, int def_value, void *v_db);
-int bool_res_value(char *name, int def_value, void *v_db);
-void minuscules(char *);
-known_format what_format(const char *filename);
-void custom_callback(Fl_Widget *obj, void *data);
-void adjust_menu_edit_modes(SEA_VIEW *view);
-extern void mainwin_close_callback(Fl_Widget *form, void *data);
-#ifdef __APPLE__
-extern char* MAC_file_chooser(const char* message, const char* pat, const char* fname);
-int set_res_value(const char *name, const char *value);
-extern "C" { 
-	void MGinit_apple_events(SEA_VIEW *view);
-	void add_apropos(char *progname, void *data);
-#if !TARGET_RT_MAC_MACHO
-	char *OSXpathtoOS9path(const char *OSXpath);
-#else
-	char *MG_GetBundleResourcesDir(void);
-#endif
-	void MG_apple_inits(void);
-	}
-#elif defined(WIN32)
-extern char *MG_win32_file_chooser(const char* message,
-        const char* pattern,
-        const char* fname,
-        const char* defext,
-        bool save, int *pfilterindex);
-#endif
-extern int pdf_printout(SEA_VIEW *view, const char *filename, 
-	int fontsize, int block_size, paperformat pageformat, int vary_only, int ref0, 
-	int blackonly);
-extern char* fl_file_chooser(const char* message, const char* pat, const char* fname, int);
-
-/* variables globales */
-/* pour controle parametres option printout */
-paperformat printout_pageformat;
-int printout_block, printout_fontsize, printout_black = FALSE;
-int printout_vary = FALSE;
-char *f_format_names[] = {"Mase", "Phylip", "Clustal", "MSF", "Fasta", "NEXUS"};
-char *f_format_exts[] = {"mase", "phy", "aln", "msf", "fst", "nxs"};
-int nbr_formats = sizeof(f_format_names)/sizeof(char *);
-int emul_3_buttons;
-//char def_stdcolorgroups[] = "EDQNHRKBZ,ILMV,APSGT,FY,WC";
-char def_stdcolorgroups[] = "KR,AFILMVW,NQST,HY,C,DE,P,G";
-//int def_protcolors[] =
-//	{ FL_WHITE, FL_RED, FL_GREEN, FL_YELLOW, FL_BLUE, FL_CYAN,
-//	FL_MAGENTA, 9/*salmon*/, 13/*purple*/, 14/*aquamarine*/, 8/*darkgray*/};
-int *def_protcolors;
-int def_protcolors_rgb[] = 
-	{255,255,255, /* white */
-	230,51,25,   25,128,230,   25,204,25,   25,179,179,   230,128,128,
-	204,77,204,   204,204,0,   230,153,77,
-	128,128,128,    100,100,100 };
-int max_protcolors = sizeof(def_protcolors_rgb) / sizeof(int) / 3;
-
-#ifdef WIN32
-#define LINE_HEIGHT_FACTOR  0.85
-#else
-#define LINE_HEIGHT_FACTOR  1.
-#endif
-
-
-int main(int argc, char *argv[])
-{
-char *masename, *progname, *p;
-known_format defaultformat;
-char **possible_formats; 
-static int dnacolors[] =
-	{ FL_WHITE, FL_RED, FL_GREEN, FL_YELLOW, FL_BLUE };
-int numb_dnacolors = sizeof(dnacolors) / sizeof(int);
-int numb_stdprotcolors, numb_altprotcolors, i, back_color, region_back_color;
-color_choice curr_color_choice;
-
-static int quick_and_dirty, inverted, allow_lower, alignment_algo; 
-static char stdcolorgroups[50], altcolorgroups[50];
-static char customdnacolors[200];
-static char customprotcolors[300];
-static char save_format[10];
-static char movekeys[5], win_size[12];
-static char *help_file;
-void *resources;
-int defaultfontsize = 
-#ifdef WIN32
-			12;
-#else
-			14;
-#endif
-
-progname = (char *)"seaview";
-resources = load_resources(progname);
-
-possible_formats = (char **)malloc(nbr_formats * sizeof(char *));
-for(i= 0; i < nbr_formats; i++) {
-	possible_formats[i] = (char  *)malloc( strlen(f_format_names[i]) + 1 );
-	strcpy(possible_formats[i], f_format_names[i]);
-	minuscules(possible_formats[i]);
-	}
-
-/* access to resources */
-quick_and_dirty = bool_res_value("fast", 
-#if defined(__APPLE__) && TARGET_RT_MAC_MACHO
-	TRUE, //double buffer is done by the system, useless to add one more layer
-#else
-	FALSE,
-#endif
-	resources);
-inverted = bool_res_value("inverted", TRUE, resources);
-strcpy(save_format, get_res_value("save", possible_formats[NEXUS_FORMAT], resources) );
-strcpy(stdcolorgroups, 
-	get_res_value("stdcolorgroups", def_stdcolorgroups, resources) );
-strcpy(altcolorgroups, get_res_value("altcolorgroups", "", resources) );
-printout_block = int_res_value("printoutblock", 10, resources);
-printout_fontsize = int_res_value("printoutfontsize", 10, resources);
-if(strcmp( get_res_value("printoutpageformat", "A4", resources) , "A4") == 0)
-	printout_pageformat = A4;
-else printout_pageformat = LETTER;
-allow_lower = bool_res_value("lowercase", 0, resources);
-alignment_algo = int_res_value("alignment", DEFAULT_ALIGN_ALGO, resources);
-#if defined(__APPLE__)
-MG_apple_inits();
-#if TARGET_RT_MAC_MACHO
-p = MG_GetBundleResourcesDir();
-help_file = (char *)malloc(strlen(p) + 20);
-strcpy(help_file, p );
-strcat(help_file, "/seaview.help");
-#else
-help_file = get_res_value("helpfile", 	NULL, 	resources );
-#endif
-#elif defined(DEFAULT_HELPFILE)   /* to ease FreeBSD port */
-help_file = get_res_value("helpfile", 	DEFAULT_HELPFILE, 	resources );
-#else
-help_file = get_res_value("helpfile", 	"seaview.help", 	resources );
-#endif
-strcpy(customdnacolors, get_res_value("dnacolors", "", resources) );
-strcpy(customprotcolors, get_res_value("protcolors", "", resources) );
-strcpy(movekeys, get_res_value("movekeys", MOVEKEYS_DEFAULT, resources) );
-strcpy(win_size, get_res_value("window", 
-#if defined(WIN32) || defined(__APPLE__)
-	"700x500", 
-#else
-	"1000x700", 
-#endif
-	resources) );
-#if defined(WIN32) || defined(__APPLE__)
-	emul_3_buttons = TRUE;
-#else
-	emul_3_buttons = bool_res_value("emulate_3_b", FALSE, resources);
-#endif
-#ifdef WIN32
-back_color = FL_DARK1; region_back_color = 43;
-#else
-back_color = FL_GRAY; region_back_color = FL_DARK2;
-#endif
-back_color = int_res_value("background", back_color, resources);
-region_back_color = int_res_value("sites_background", region_back_color, 
-	resources);
-
-/* process custom color settings */
-prep_custom_colors(dnacolors, customdnacolors, numb_dnacolors);
-int *protcolors = (int *)malloc(sizeof(def_protcolors_rgb) / 3);
-def_protcolors = (int *)malloc(sizeof(def_protcolors_rgb) / 3);
-for(i=0; i<max_protcolors; i++) def_protcolors[i] = 
-	fl_rgb_color(def_protcolors_rgb[3*i], def_protcolors_rgb[3*i+1], def_protcolors_rgb[3*i+2]);
-
-memcpy(protcolors, def_protcolors, sizeof(def_protcolors_rgb) / 3 );
-int cur_protcolors = prep_custom_colors(protcolors, customprotcolors, 
-	max_protcolors);
-/* process resource-read stdcolorgroups and altcolorgroups */
-curr_color_choice = prep_aa_color_code(stdcolorgroups, altcolorgroups, 
-		cur_protcolors, &numb_stdprotcolors, &numb_altprotcolors);
-
-/* argument processing */
-masename = NULL;
-i = 1;
-while(i < argc) {
-	if(argv[i][0] != '-') masename = argv[i];
-	if(strcmp(argv[i], "-fast") == 0) quick_and_dirty = TRUE;
-	if(strcmp(argv[i], "-inverted") == 0) inverted = TRUE;
-	if(strcmp(argv[i], "-save") == 0) {
-		if(++i < argc) strcpy(save_format, argv[i]);
-		}
-	if(strcmp(argv[i], "-fontsize") == 0) {
-		if(++i < argc) sscanf(argv[i], "%d", &defaultfontsize);
-		}
-	i++;
-	}
-for( i=0; i < nbr_formats; i++) 
-	if(strcmp(save_format, possible_formats[i]) == 0) break;
-if( i >= nbr_formats ) 
-	defaultformat = (known_format)MASE_FORMAT;
-else
-	defaultformat = (known_format)i;
-
-fl_message_font(FL_HELVETICA_BOLD, FL_NORMAL_SIZE );
-
-SEA_VIEW *view = create_the_form(!quick_and_dirty, inverted,
-	defaultformat, numb_dnacolors, dnacolors, 
-	numb_stdprotcolors, protcolors,
-	numb_altprotcolors, protcolors, curr_color_choice, 
-	progname, movekeys, win_size, allow_lower, help_file,
-	back_color, region_back_color, defaultfontsize, alignment_algo);
-#ifdef __APPLE__ 
-MGinit_apple_events(view);
-add_apropos(progname, help_file);
-#endif
-if(masename != NULL) use_initial_file(view, masename);
-view->dnawin->show();
-view->DNA_obj->take_focus();
-fl_reset_cursor(view->dnawin);
-Fl::run(); 
-/*
-while( Fl::wait() ) { // reparation du bug focus perdu
-	if(Fl::focus() == NULL) {
-		view->DNA_obj->take_focus();
-		}
-	} */
-return 0;
-}
-
-
-void use_initial_file(SEA_VIEW *view, char *masename)
-{
-known_format defaultformat;
-
-defaultformat = what_format(masename);
-if(defaultformat >= 0) {
-		set_save_format(view, defaultformat);
-		load_alignment_file(view, masename, NULL, defaultformat);
-		}
-else
-		fl_alert("File %s\nis not of a format readable by seaview", masename);
-}
-
-
-#ifdef _AIX
-/* sur IBM RISC __filbuf est en fait _filbuf utilise a l'interieur de xforms */
-int __filbuf(FILE *fich)
-{
-return _filbuf(fich);
-}
-#endif
-
-
-class DNA_obj : public Fl_Widget {
-    FL_EXPORT void draw(void);
-    FL_EXPORT int handle(int);
-public:
-    FL_EXPORT DNA_obj(int x,int y,int w,int h, void *view) :
-		Fl_Widget(x,y,w,h,NULL) {
-	this->user_data(view);
-	}
-};
-
-
-char *majuscules(char *p)
-{
-char *q = p;
-if(p == NULL) return NULL;
-while(*q != 0) { *q = toupper(*q); q++; }
-return p;
-}
-
-
-void out_of_memory(void)
-{
-fl_alert("Error: Not enough memory!");
-exit(1);
-}
-
-
-void minuscules(char *p)
-{
-if(p == NULL) return;
-while(*p) {
-	*p = tolower(*p);
-	p++;
-	}
-return;
-}
-
-
-char *extract_filename(char *fname)
-{
-static char *p, *q;
-q = (char *)fname;
-if(q == NULL) return "";
-do	{ 
-#ifdef __VMS
-	p = strchr(q,']'); 
-	if(p == NULL) p = strchr(q,':'); 
-#elif defined(WIN32)
-	p = strchr(q,'\\'); 
-#elif defined(__APPLE__) && !TARGET_RT_MAC_MACHO
-	p = strchr(q,':'); 
-#else
-	p = strchr(q,'/'); 
-#endif
-	if(p != NULL) q = p+1; 
-	}
-while 	(p != NULL);
-return q;
-}
-
-
-void allonge_seqs(char **seq, int totseqs, int maxlen, int *eachlength,
-	int tot_comment_lines, char **comment_line)
-{
-int num, l;
-char *newseq;
-
-for(num = 0; num < totseqs; num++) {
-	l = eachlength[num];
-	newseq = (char *)malloc(maxlen+1);
-	if(newseq==NULL) out_of_memory();
-	memcpy(newseq,seq[num],l+1);
-	free(seq[num]); 
-	seq[num] = newseq;
-	}
-for(num = 0; num < tot_comment_lines; num++) {
-	l = strlen(comment_line[num]);
-	newseq = (char *)malloc(maxlen+1);
-	if(newseq == NULL) out_of_memory();
-	memcpy(newseq, comment_line[num], l+1);
-	free(comment_line[num]); 
-	comment_line[num] = newseq;
-	}
-}
-
-
-/* memoire pour contenir coloriage standard */
-static int color_for_aa_gaps;
-static char std_aminoacids[30];
-static int std_aa_color[30];
-/* memoire pour contenir coloriage alternatif */
-static char alt_aminoacids[30] = "";
-static int alt_aa_color[30];
-/* pointeurs vers coloriage courant */
-static char *current_aminoacids;
-static int *current_aa_color;
-
-
-int decode_color_scheme(char *vlist,  char *aminoacids, int *aa_color,
-	int maxprotcolors)
-{
-int nbr_colors = 1, current = 0, i;
-char *p, *list;
-list = strdup(vlist);
-if(list == NULL) return 1;
-aminoacids[0] = 0;
-p=strtok(list,",");
-while( p!= NULL && nbr_colors < maxprotcolors) {
-	strcat(aminoacids,p);
-	for(i=0; i < (int) strlen(p); i++)
-		aa_color[current++] = nbr_colors;
-	nbr_colors++;
-	p=strtok(NULL,",");
-	}
-free(list);
-return nbr_colors;
-}
-
-
-int prep_custom_colors(int *colors, char *customcolors, 
-	int max_colors)
-{
-char *nom;
-int rank = 0, r, g, b;
-Fl_Color col;
-
-if(*customcolors == 0) return max_colors;
-nom = strtok(customcolors, ",");
-while(nom != NULL && rank < max_colors - 1) {
-	r = g = b = -1;
-	sscanf(nom, "%d%d%d", &r, &g, &b);
-	if( r>=0 && g>=0 && b>=0 ) 
-		col = fl_rgb_color(r, g, b);
-	else col = FL_BLACK;
-	colors[++rank] = (int)col;
-	nom = strtok(NULL, ",");
-	}
-return rank + 1;
-}
-
-
-color_choice prep_aa_color_code(char *list_std, char *list_alt, 
-	int maxprotcolors, int *numb_stdprotcolors, int *numb_altprotcolors)
-{
-/* couleur pour gaps = 1ere couleur connue (comptee a partir de 0) */
-color_for_aa_gaps = 0;
-current_aminoacids = std_aminoacids;
-current_aa_color = std_aa_color;
-/* decodage du coloriage standard des proteines */
-*numb_stdprotcolors = 
-	decode_color_scheme(list_std, std_aminoacids, std_aa_color,
-		maxprotcolors);
-*numb_altprotcolors = 0;
-if(*list_alt == 0) return NO_ALT_COLORS;
-/* decodage du coloriage alternatif des proteines */
-*numb_altprotcolors = 
-	decode_color_scheme(list_alt, alt_aminoacids, alt_aa_color,
-		maxprotcolors);
-return USING_STANDARD_COLORS;
-}
-
-
-void set_aa_color_mode(color_choice choice)
-{
-if(choice == USING_ALT_COLORS) {
-	current_aminoacids = alt_aminoacids;
-	current_aa_color = alt_aa_color;
-	}
-else	{
-	current_aminoacids = std_aminoacids;
-	current_aa_color = std_aa_color;
-	}
-}
-
-
-int get_color_for_aa( int key )
-/* returns the color # used to display character key in protein */
-{
-char *pos;
-pos = strchr(current_aminoacids, toupper(key) ); 
-return ( pos == NULL ? 
-	color_for_aa_gaps : current_aa_color[pos - current_aminoacids] );
-}
-
-
-int get_color_for_base( int key )
-/* returns the color # used to display character key in DNA */
-{
-static char bases[]="ACGTU";
-static int base_color[] = {1,2,3,4,4};
-char *pos;
-pos=strchr(bases, toupper(key) ); 
-return ( pos == NULL ? 0 : base_color[pos - bases] );
-}
-
-
-char ***prepcolseqs(char **seq, int totseqs, int maxlen, int *eachlength,
-	int (*calc_color_function)( int ), int numb_gc, int allow_lower)
-{
-int num, l, col, i, res;
-char ***colseq;
-if(totseqs == 0 || numb_gc == 1) return NULL;
-colseq=(char ***)malloc(totseqs*sizeof(char **));
-if(colseq == NULL) return NULL;
-for(num=0; num<totseqs; num++) {
-	colseq[num] = (char **)malloc(numb_gc * sizeof(char *));
-	if(colseq[num] == NULL) return NULL;
-	l = eachlength[num];
-	for(col=0; col < numb_gc; col++) {
-		colseq[num][col]=(char *)malloc(maxlen+1);
-		if(colseq[num][col] == NULL) return NULL;
-		memset(colseq[num][col], ' ', l);
-		colseq[num][col][l]=0;
-		}
-	for(i=0; i<l; i++) {
-		res = seq[num][i]; 
-		col = calc_color_function( res );
-		colseq[num][col][i] = ( allow_lower ? res : toupper(res) );
-		}
-	}
-return colseq;
-}
-
-
-char ***prepcolseqs_by_difference(char **seq, int totseqs, int ref_seq0,
-	int maxlen, int *eachlength,
-	int (*calc_color_function)( int ), int numb_gc, int allow_lower)
-{
-int num, l, col, i, res;
-char ***colseq;
-if(totseqs == 0) return NULL;
-colseq = (char ***)malloc(totseqs*sizeof(char **));
-if(colseq == NULL) return NULL;
-for(num=0; num<totseqs; num++) { /* allocation memoire */
-	colseq[num] = (char **)malloc(numb_gc * sizeof(char *));
-	if(colseq[num] == NULL) return NULL;
-	l = eachlength[num];
-	for(col=0; col < numb_gc; col++) {
-		colseq[num][col]=(char *)malloc(maxlen+1);
-		if(colseq[num][col] == NULL) return NULL;
-		memset(colseq[num][col], ' ', l);
-		colseq[num][col][l]=0;
-		}
-	}
-for(i=0; i<eachlength[ref_seq0]; i++) { /* coloration seq de reference */
-	res = seq[ref_seq0][i];
-	col = calc_color_function( res );
-	colseq[ref_seq0][col][i] = ( allow_lower ? res : toupper(res) );
-	}
-for(num=0; num<totseqs; num++) { /* coloration des autres sequences */
-	if(num == ref_seq0) continue;
-	l = eachlength[num];
-	for(i=0; i<l; i++) {
-		res = seq[num][i];
-		if(toupper(res) != toupper(seq[ref_seq0][i])) {
-			col = calc_color_function( res );
-			colseq[num][col][i] =(allow_lower ? res : toupper(res));
-			}
-		else	{
-			colseq[num][0][i] = '.';
-			}
-		}
-	}
-return colseq;
-}
-
-
-void draw_cursor(Fl_Widget *ob, int on_off, int site, int seq, 
-	int cursor_in_comment)
-{
-SEA_VIEW *view = (SEA_VIEW *)ob->user_data() ;
-int x, y, cursor_x, cursor_y, c, max_curs_coord;
-char *debut, *fin;
-int background, foreground;
-static char lettre[]="A";
-static char cursor_coord[100];
-Fl_Menu_Button *menu_props = (Fl_Menu_Button *)view->bouton_props;
-props_menu_parts *props_parts = (props_menu_parts *)menu_props->user_data();
-int byreference = ((Fl_Menu_Item *)menu_props->menu() + props_parts->reference)->value();
-		
-if( (!cursor_in_comment) && (seq == 0 || site > view->each_length[seq-1] + 1) ) 
-	return;
-cursor_x = site - view->first_site;
-if(cursor_in_comment) {
-	if(view->tot_comment_lines == 0 || !view->show_comment_lines) return;
-	if(cursor_x < 0 || cursor_x >= view->tot_sites ) return;
-	if(seq <= 0 || seq > view->tot_comment_lines ) return;
-	y = view->y_seq + (seq + view->pos_first_comment_line - 2) * 	
-		view->line_height;
-	x = view->x_seq + cursor_x * view->char_width;
-	lettre[0] = view->comment_line[seq-1][site-1];
-	}
-else	{
-	if(view->tot_seqs == 0) return;
-	cursor_y = seq - view->first_seq;
-	if(cursor_x < 0 || cursor_x >= view->tot_sites ) return;
-	if(cursor_y < 0 || cursor_y >= view->tot_lines ) return;
-	y = view->y_seq + cursor_y * view->line_height;
-	x = view->x_seq + cursor_x * view->char_width;
-	lettre[0] = view->sequence[seq-1][site-1];
-	if(!view->allow_lower) lettre[0] = toupper(lettre[0]);
-	if(byreference && view->inverted_colors && (!on_off) && seq >= 2) {
-		if(toupper(lettre[0]) == toupper(view->sequence[0][site-1])) lettre[0] = '.';
-		}
-	}
-if(view->numb_gc == 1) { /* cas noir et blanc */
-	if(on_off) {
-		foreground = FL_WHITE;
-		background = FL_BLACK;
-		}
-	else	{
-		foreground = FL_BLACK;
-		background = FL_WHITE;
-		}
-	}
-else if( (!cursor_in_comment) && view->inverted_colors) { 
-	/* cas inverted colors */
-	if(site <= view->each_length[seq - 1]) {
-		for(c=0; c<view->numb_gc; c++)
-			if(view->col_seq[seq-1][c][site-1] != ' ') break;
-		if(c == 0) background = ob->color();
-		else background = view->curr_colors[c];
-		}
-	else
-		background = ob->color();
-	if(on_off) {
-		foreground = background;
-		background = FL_BLACK;
-		}
-	else	{
-		if(view->active_region == NULL || 
-				view->region_line[site - 1] == 'X')
-			foreground = FL_BLACK;
-		else
-			foreground = ob->selection_color();
-		}
-	}
-else if(cursor_in_comment) { /* dans les lignes comment sur ecran couleur */
-	if(on_off) {
-		foreground = FL_WHITE; background = FL_BLACK;
-		}
-	else	{
-		foreground = FL_BLACK; background = ob->color();
-		}
-	}
-else	{ /* cas colored letters */
-	if( site <= view->each_length[seq - 1]) {
-		for(c=0; c<view->numb_gc; c++)
-			if(view->col_seq[seq-1][c][site-1] != ' ') break;
-		lettre[0] = view->col_seq[seq-1][c][site-1];
-		foreground = view->curr_colors[c];
-		}
-	else	{
-		lettre[0] = ' ';
-		foreground = FL_BLACK;
-		}
-	if(on_off) {
-		background = FL_BLACK;
-		}
-	else	{
-		if( (!cursor_in_comment) && view->active_region != NULL && 
-				view->region_line[site - 1] == 'X')
-			background = ob->selection_color();
-		else
-			background = ob->color();
-		}
-	}
-fl_font(ob->labelfont(), ob->labelsize());
-fl_color(background);
-fl_rectf( x, y - view->line_height + fl_descent(), 
-	view->char_width, view->line_height);
-fl_color(foreground); 
-fl_draw(lettre, 1, x, y);
-if(on_off) {
-/* ecriture des coordonnees du curseur */
-	max_curs_coord = view->tot_sites - 12;
-	cursor_coord[max_curs_coord] = 0;
-	x = view->x_seq + 6 * view->char_width;
-	y = view->y_seq - view->line_height;
-	fl_font(FL_COURIER, ob->labelsize());
-	fl_color(ob->color());
-	fl_rectf( x, y - view->line_height, 
-		(max_curs_coord ) * view->char_width, 
-		view->line_height + fl_descent());
-	if(!cursor_in_comment) {
-		debut = view->sequence[seq-1] - 1; fin = debut + site; c = 0;
-		if(*fin == 0) fin--;
-		while(++debut <= fin) if( *debut != '-' ) c++;	
-		sprintf(cursor_coord, "Seq:%d Pos:%d|%d [%s]", seq, 
-			site, c, view->seqname[seq - 1]);
-		}
-	else
-		sprintf(cursor_coord, "Pos:%d", site);
-	fl_color(view->namecolor); 
-	fl_draw(cursor_coord, x, y);
-	}
-}
-
-
-void draw_seq_names(Fl_Widget *ob, SEA_VIEW *view)
-{
-int x, y, num, debut, fin;
-int couleur;
-static char trunc_name[20];
-
-x = view->x_name; y = view->y_name;
-fl_font(FL_COURIER, ob->labelsize() );
-if(view->draw_names == -1) { /* ecrire tous les noms */
-	fl_color(ob->color());
-	fl_rectf( ob->x(), ob->y(),  /* fond pour les noms */
-		view->x_seq - ob->x(),
-		ob->h());
-	debut = view->first_seq - 1; 
-	fin = view->first_seq - 2 + view->tot_lines;
-	if(fin >= view->tot_seqs) fin = view->tot_seqs - 1;
-/* write region name */
-	if(view->active_region != NULL) {
-		fl_color(view->region_color); 
-		fl_font(ob->labelfont(), ob->labelsize());
-		fl_draw(view->active_region->name, 
-		   FL_min(view->wid_names, strlen(view->active_region->name)), 
-			view->x_name,
-			view->y_name + FL_min(view->tot_lines, view->tot_seqs) *
-			view->line_height );
-		fl_font(FL_COURIER, ob->labelsize() );
-		}
-	}
-else if(view->draw_names == -2) { /* ecrire tous les noms mais rien qu'eux */
-	debut = view->first_seq - 1; 
-	fin = view->first_seq - 2 + view->tot_lines;
-	if(fin >= view->tot_seqs) fin = view->tot_seqs - 1;
-	fl_color(ob->color());
-	fl_rectf( ob->x(),   /* fond pour les noms */
-		y - view->line_height + fl_descent(), 
-		view->x_seq - ob->x(),
-		(fin - debut + 1) * view->line_height);
-	}
-else	{ /* ecrire un seul nom */
-	debut = fin = view->draw_names - 1;
-	y += view->line_height * (view->draw_names - view->first_seq);
-	if( !view->sel_seqs[view->draw_names - 1] ) {
-		fl_color(ob->color());
-		fl_rectf( x, y - view->line_height + fl_descent(), 
-			(view->wid_names+1) * view->char_width, 
-			view->line_height);
-		}
-	}
-if(view->tot_seqs > 0) { /* nbre de seqs selectionnees */
-	fl_color(ob->color());
-	fl_rectf( x, view->y_name - 2 * view->line_height, 
-		(view->wid_names+1) * view->char_width, view->line_height);
-	sprintf(trunc_name, "sel=%d", view->tot_sel_seqs);
-	fl_color(view->namecolor); 
-	fl_draw(trunc_name, x, view->y_name - view->line_height );
-	}
-/* le(s) nom(s) a ecrire */
-for(num = debut; num <= fin; num++) {
-	if(view->sel_seqs[num]) {
-		fl_color(FL_BLACK);
-		fl_rectf( x, y - view->line_height + fl_descent(), 
-			(view->wid_names+1) * view->char_width, 
-			view->line_height);
-		couleur = FL_WHITE;
-		}
-	else
-		couleur = view->namecolor;
-	fl_color(couleur); 
-	fl_draw(view->seqname[num], 
-		FL_min(view->wid_names, strlen(view->seqname[num])), x, y );
-	y += view->line_height;
-	}
-}
-
-
-void draw_header(Fl_Widget *ob, SEA_VIEW *view)
-{
-int l_line, c;
-static char site_line[300];
-
-if(view->mod_seq) return;
-if(view->tot_seqs == 0) return;
-if(view->active_region != NULL) draw_region_line(ob, view);
-/* write site numbers */
-l_line = view->tot_sites;
-if(l_line < 5) return;
-memset(site_line,' ',l_line);
-sprintf(site_line,"%d",view->first_site); c=strlen(site_line); site_line[c]=' ';
-sprintf(site_line + l_line - 5,"%5d",view->first_site + l_line - 1);
-fl_color(ob->color());
-fl_rectf( view->x_seq, 
-	view->y_seq - 2 * view->line_height + fl_descent(),
-	view->tot_sites * view->char_width, view->line_height);
-fl_color(view->namecolor); fl_font(FL_COURIER, ob->labelsize() );
-fl_draw(site_line, view->x_seq, view->y_seq - view->line_height);
-}  
-
-
-void draw_dna_seqs(Fl_Widget *ob, SEA_VIEW *view)
-{
-int nline, c, offset, x, y, l_line, y_back, need_back;
-char *pos;
-int debut, fin, use_region;
-list_segments *segment, *first_segment;
-
-if(view->mod_seq == 0) { /* draw all lines */
-	debut = view->first_seq - 1;
-	fin = FL_min(view->first_seq + view->tot_lines - 1, view->tot_seqs) - 1;
-	}
-else if(view->mod_seq == -1) { /* draw only selected lines */
-	debut = view->first_seq - 1;
-	fin = FL_min(view->first_seq + view->tot_lines - 1, view->tot_seqs) - 1;
-	while(fin >= debut && !view->sel_seqs[fin]) fin--;
-	if(debut > fin) return;
-	while(!view->sel_seqs[debut]) debut++;
-	}
-else	{ /* draw just line # view->mod_seq */
-	debut = fin = view->mod_seq - 1;
-	if(debut < view->first_seq - 1) fin = debut - 1;
-	}
-// prepare for drawing region background
-use_region = (view->active_region != NULL && view->numb_gc > 1 &&
-		(first_segment = view->active_region->list) != NULL);
-if(use_region) {
-	do	{
-		if(first_segment->debut > 
-			view->first_site + view->tot_sites - 1) {
-				use_region = FALSE;
-				break;
-			}
-		if(first_segment->fin >= view->first_site) break;
-		first_segment = first_segment->next;
-		}
-	while(first_segment != NULL);
-	if(first_segment == NULL) use_region = FALSE;
-	}
-need_back = TRUE;
-if(use_region) {
-	if(first_segment->debut <= view->first_site &&
-		first_segment->fin >= view->first_site + view->tot_sites - 1)
-		need_back = FALSE;
-	}
-
-/* write sequences */
-fl_font( ob->labelfont(), ob->labelsize() );
-x = view->x_seq;
-y = view->y_seq + (debut - (view->first_seq - 1)) * view->line_height;
-y_back = y - view->line_height + fl_descent();
-offset = view->first_site - 1;
-for(nline = debut; nline <= fin; nline++) {
-	if( view->mod_seq != -1 || view->sel_seqs[nline] ) {
-		if(need_back) { /* write seq background */
-			fl_color(ob->color());
-			fl_rectf( x, y_back, 
-				view->tot_sites * view->char_width, 
-				view->line_height);
-			}
-		if(use_region) { /* write regions background */
-			int deb_block, fin_block;
-			fl_color(ob->selection_color());
-			segment = first_segment;
-			do	{
-				deb_block = FL_max(
-					segment->debut, view->first_site);
-				fin_block = FL_min(segment->fin, 
-					view->first_site + view->tot_sites - 1);
-				fl_rectf(x+(deb_block - view->first_site)*
-						view->char_width, 
-					y_back, 
-					(fin_block - deb_block + 1) *
-						view->char_width, 
-					view->line_height);
-				segment = segment->next;
-				}
-			while(segment != NULL && segment->debut <= 
-				view->first_site + view->tot_sites - 1);
-			}
-		if(view->each_length[nline] > offset) {
-			l_line = FL_min( view->tot_sites, 
-					view->each_length[nline] - offset );
-			for(c=0; c < view->numb_gc; c++) { /* write DNA seqs */
-				if(view->numb_gc > 1) 
-					pos = view->col_seq[nline][c];
-				else
-					pos = view->sequence[nline];
-				fl_color(view->curr_colors[c]);
-				fl_draw(pos + offset, l_line, x, y );
-				}
-			}
-		}
-	y += view->line_height;
-	y_back += view->line_height;
-	}
-draw_header(ob, view);
-}  
-
-
-void draw_dna_seqs_inverted(Fl_Widget *ob, SEA_VIEW *view)
-{
-int nline, c, offset, x, y, l_line, xx, yy, firstline, lastline, use_region,
-	debut, fin, der_site;
-char *lastpos, *pos;
-list_segments *segment, *first_segment;
-int save_col0;
-static char up_line[1000]; char *p, *q, *r; int i;
-Fl_Menu_Button *menu_props = (Fl_Menu_Button *)view->bouton_props;
-props_menu_parts *props_parts = (props_menu_parts *)menu_props->user_data();
-int byreference = ((Fl_Menu_Item *)menu_props->menu() + props_parts->reference)->value();
-
-if(view->tot_seqs == 0) {
-	return;
-	}
-fl_font(ob->labelfont(), ob->labelsize() );
-save_col0 = view->curr_colors[0];
-view->curr_colors[0] = ob->color();
-/* write sequences */
-x = view->x_seq;
-offset= view->first_site - 1;
-if(view->mod_seq <= 0) {
-	firstline = view->first_seq-1;
-	lastline = FL_min(view->first_seq + view->tot_lines -1, view->tot_seqs);
-	}
-else	{
-	firstline = view->mod_seq - 1;
-	lastline = firstline + 1;
-	if(firstline < view->first_seq - 1) lastline = firstline - 1;
-	}
-use_region = (view->active_region != NULL &&
-		(first_segment = view->active_region->list) != NULL);
-if(use_region) {
-	do	{
-		if(first_segment->fin >= view->first_site) break;
-		first_segment = first_segment->next;
-		}
-	while(first_segment != NULL);
-	}
-y = view->y_seq + (firstline - view->first_seq + 1) * view->line_height; 
-yy = y - view->line_height + fl_descent();
-for(nline=firstline; nline < lastline; /* ecriture des fonds de couleur */
-		nline++, y += view->line_height, yy += view->line_height ) {
-	l_line = ( offset + view->tot_sites < view->each_length[nline] ? 
-		view->tot_sites : view->each_length[nline] - offset);
-	l_line = FL_max(l_line, 0); /* nbre de caract a ecrire */
-	if(l_line > 0) {
-		for(c = 0; c < view->numb_gc; c++) { 
-			xx = x; 
-			pos = view->col_seq[nline][c] + offset;
-			lastpos = pos + l_line;
-			fl_color(view->curr_colors[c]);
-			while(pos < lastpos) {
-				if( *(pos++) != ' ' ) {
-					fl_rectf( xx, yy, 
-						view->char_width, 
-						view->line_height);
-					}
-				xx += view->char_width;
-				}
-			}
-		}
-	if(l_line < view->tot_sites) { /* au dela de la fin de la seq */
-		fl_color(ob->color());
-	 	fl_rectf( x + l_line * view->char_width, yy,
-			view->char_width * (view->tot_sites - l_line), 
-			view->line_height);
-		}
-	if(l_line == 0) continue;
-	
-/*ecriture des seqs: regions en noir et autres en col2 */
-	fl_color( use_region ? ob->selection_color() : FL_BLACK );
-	p = view->sequence[nline] + offset; 
-	memcpy(up_line, p, l_line); up_line[l_line] = 0;
-	p = up_line;
-	if(!view->allow_lower) majuscules(up_line);
-	if(byreference && nline != 0) {
-		q = p + l_line; i = 0;
-		r= view->sequence[0] + offset; 
-		while( p < q) {
-			up_line[i++] = (toupper(*p) == toupper(*r) ? '.' : *p);
-			p++; r++;
-			}
-		p = up_line;
-		}
-	fl_draw(p, l_line, x, y);
-	if(use_region) { /* re-ecrire les regions en noir */
-		der_site = view->first_site + l_line - 1;
-		segment = first_segment;
-		fl_color( FL_BLACK );
-		while( segment  != NULL ) {
-			if(segment->debut > der_site) break;
-			debut = FL_max(segment->debut, view->first_site);
-			fin = FL_min(segment->fin, der_site);
-			p = up_line + debut - offset - 1;
-			fl_draw(p,
-				fin - debut + 1, 
-				x + (debut - offset - 1)*view->char_width, y);
-			segment = segment->next;
-			}
-		}
-	}
-view->curr_colors[0] = save_col0;
-draw_header(ob, view);
-}
-
-
-void set_tot_lines(SEA_VIEW *view, int new_val)
-{
-int l;
-double x;
-view->tot_lines = new_val;
-l = view->tot_seqs - view->tot_lines + 1;
-if(l<1) l=1;
-if(view->first_seq > l) {
-	view->first_seq = l;
-	}
-if(view->tot_seqs > 0) {
-	x = view->tot_lines / ( (double) view->tot_seqs ); 
-	if(x>1) x=1;
-	}
-else	x = 1;
-view->vertsli->slider_size(x);
-view->vertsli->bounds(1, l);
-view->vertsli->Fl_Slider::value(view->first_seq);
-}
-
-
-int compute_size_params(SEA_VIEW *view, int force_recompute)
-{
-static int old_w = 0;
-static int old_h = 0;
-Fl_Widget *ob = view->DNA_obj;
-double x;
-int l, tot_lines, possible_lines;
-
-if( !force_recompute && ob->w() == old_w && ob->h() == old_h) return FALSE;
-old_w = ob->w(); old_h = ob->h();
-view->x_name = view->char_width/2 + ob->x();
-view->y_name =  2 * view->line_height + ob->y();
-view->x_seq = (view->wid_names +2) * view->char_width + ob->x();
-view->y_seq = view->y_name;
-view->tot_sites = ( ob->w() - view->x_seq + ob->x() ) / view->char_width;
-possible_lines = ( ob->h() - 4 ) / view->line_height  - 1;
-tot_lines = possible_lines;
-if(view->active_region != NULL) tot_lines--;
-if(view->show_comment_lines) {
-	tot_lines -= view->tot_comment_lines;
-	view->pos_first_comment_line = 
-		FL_min(tot_lines, view->tot_seqs) + 1;
-	if(view->active_region != NULL) ++(view->pos_first_comment_line);
-	}
-/* init sliders bounds and size */
-if(view->tot_seqs > 0) {
-	x = ( (double) view->tot_sites ) / ( view->seq_length + 3 ); 
-	if(x>1) x=1;
-	}
-else	x = 1;
-view->horsli->slider_size(x);
-l = view->seq_length - view->tot_sites+3;
-if(l<1) l=1;
-view->horsli->bounds(1,l);
-if(view->first_site > l) {
-	view->first_site = l;
-	}
-view->horsli->Fl_Slider::value(view->first_site);
-set_tot_lines(view, tot_lines);
-if(view->tot_seqs + 
-	(view->show_comment_lines ? view->tot_comment_lines : 0) + 
-	(view->active_region != NULL ? 1 : 0) < possible_lines) {
-/* forcer effacement de tout l'alignement pour ne pas garder 
-de mauvaises lignes regions ou footers en bas */
-	ob->parent()->redraw();
-	}
-return TRUE;
-}
-
-
-void init_dna_scroller(SEA_VIEW *view, int totseqs, const char *masename, 
-	int protein, char *header)
-{
-int i, l;
-list_regions *mylregion;
-Fl_Menu_Button *menu_props = (Fl_Menu_Button *)view->bouton_props;
-props_menu_parts *props_parts = 
-		(props_menu_parts *)menu_props->user_data();
-Fl_Menu_Item *item;
-
-view->header = header;
-view->tot_seqs = totseqs;
-view->seq_length = 0;
-view->protein = protein;
-view->allow_seq_edit = FALSE;
-item = (Fl_Menu_Item *)menu_props->menu() + props_parts->edit;
-item->activate(); item->clear();
-item = (Fl_Menu_Item *)menu_props->menu() + props_parts->keys;
-item->clear(); (item + 1)->clear(); (item + 2)->clear(); 
-item = (Fl_Menu_Item *)menu_props->menu() + props_parts->keys - 1;
-if(protein) item->deactivate();
-else item->activate();
-item = (Fl_Menu_Item *)menu_props->menu() + props_parts->reference;
-item->clear();
-item->deactivate();
-view->hjkl = FALSE;
-view->modif_but_not_saved = FALSE;
-if(masename != NULL) {
-	view->masename = (char *)malloc(strlen(masename)+1);
-	if(view->masename == NULL) out_of_memory();
-	strcpy(view->masename, masename);
-	}
-else	view->masename = NULL;
-if(totseqs > 0) {
-	view->each_length = (int *)malloc(totseqs * sizeof(int));
-	if(view->each_length == NULL) out_of_memory();
-	}
-for(i = 0; i < totseqs; i++) {
-	l = strlen(view->sequence[i]);
-	view->each_length[i] = l;
-	if(l > view->seq_length) view->seq_length = l;
-	}
-for(i = 0; i < view->tot_comment_lines; i++) {
-	l = strlen(view->comment_line[i]);
-	if(l > view->seq_length) view->seq_length = l;
-	}
-view->max_seq_length = FL_max(view->max_seq_length, 
-	view->seq_length + MAX_SEQ_ALLONG);
-view->wid_names = 0;
-for(i=0; i<totseqs; i++) {
-	l=strlen(view->seqname[i]);
-	while(l > 0 && view->seqname[i][l-1] == ' ') l--; 
-	view->seqname[i][l] = 0;
-	if(l > view->wid_names) view->wid_names = l;
-	}
-if(totseqs > 0 && view->wid_names < 10) view->wid_names = 10;
-if(view->wid_names > 20) view->wid_names = 20;
-allonge_seqs(view->sequence, totseqs, view->max_seq_length, 
-	view->each_length, view->tot_comment_lines, view->comment_line);
-if(view->numb_dnacolors > 1 && view->bouton_props != NULL) { 
-	/* DNA/prot modes useful only with colors */
-	item = (Fl_Menu_Item *)menu_props->menu() + props_parts->colors;
-	if(view->alt_colors != NO_ALT_COLORS) (item+2)->activate();
-	if(protein) {
-		if(view->alt_colors == USING_ALT_COLORS) {
-			(item+2)->setonly();
-			set_aa_color_mode(USING_ALT_COLORS);
-			view->numb_gc = view->numb_altprotcolors;
-			view->curr_colors = view->altprotcolors;
-			}
-		else	{
-			(item+1)->setonly();
-			set_aa_color_mode(USING_STANDARD_COLORS);
-			view->numb_gc = view->numb_stdprotcolors;
-			view->curr_colors = view->stdprotcolors;
-			}
-		}
-	else	{
-		item->setonly();
-		view->numb_gc = view->numb_dnacolors;
-		view->curr_colors = view->dnacolors;
-		}
-	}
-if(view->numb_gc > 1) {
-	view->col_seq = prepcolseqs(view->sequence, totseqs, 
-		view->max_seq_length, view->each_length, 
-		( view->protein ? get_color_for_aa : get_color_for_base ), 
-		view->numb_gc, view->allow_lower);
-	if(view->col_seq == NULL) out_of_memory();
-	view->alt_col_seq = NULL;
-	}
-view->first_seq = view->first_site = 1;
-fl_font(view->DNA_obj->labelfont(), view->DNA_obj->labelsize());
-view->line_height = (int)( LINE_HEIGHT_FACTOR * fl_height() );
-view->char_width = (int)fl_width('W');
-view->draw_names = -1;
-view->mod_cursor = FALSE;
-view->mod_seq = 0;
-view->multipl->argument(0);
-if(view->tot_seqs == 0)
-	view->cursor_seq = view->cursor_site = 0;
-else
-	view->cursor_seq = view->cursor_site = 1;
-view->old_cursor_seq = view->cursor_seq;
-view->old_cursor_site = view->cursor_site;
-view->cursor_in_comment = view->old_cursor_in_comment = FALSE;
-view->tot_sel_seqs = 0;
-if(view->menu_edit != NULL) {
-	Fl_Menu_ *obj = (Fl_Menu_ *)(view->menu_edit);
-	Fl_Menu_Item *items = (Fl_Menu_Item *)obj->menu();
-	items[RENAME_SEQ].deactivate();
-	items[EDIT_COMMENTS].deactivate();
-	items[EDIT_SEQ].deactivate();
-	items[DUPLICATE_SEQ].deactivate();
-	items[DELETE_SEQ].deactivate();
-	items[COMPLEMENT_SEQ].deactivate();
-	items[REVERSE_SEQ].deactivate();
-	items[EXCHANGE_UT].deactivate();
-	items[ALIGN_SEQS].deactivate();
-	items[DOT_PLOT].deactivate();
-	items[CONSENSUS_SEQ].deactivate();
-	items[DELETE_GAP_ONLY_SITES].activate();
-	}
-if(view->tot_seqs > 0) {
-	view->sel_seqs = (int *)calloc(view->tot_seqs, sizeof(int));
-	if(view->sel_seqs == NULL) out_of_memory();
-	}
-/* initialiser les regions et leur menu avec pas de region active */
-view->mod_region_line = FALSE;
-if(view->tot_seqs > 0) {
-	view->region_line = (char *)malloc(view->max_seq_length + 1);
-	if(view->region_line == NULL) out_of_memory();
-	}
-view->region_length = 0;
-view->active_region = NULL;
-Fl_Menu_ *menu_regions = (Fl_Menu_ *)view->menu_regions;
-if(menu_regions != NULL) {
-	menu_regions->clear();
-	if(view->tot_seqs > 0) {
-		menu_regions->add("Create set", 0, NULL, NULL, 0);
-		menu_regions->add("Save set", 0, NULL, NULL, FL_MENU_INACTIVE);
-		menu_regions->add("Rename set", 0, NULL, NULL,FL_MENU_INACTIVE);
-		menu_regions->add("Hide set", 0, NULL, NULL, FL_MENU_INACTIVE);
-		menu_regions->add("Delete set", 0, NULL, NULL, 
-			FL_MENU_INACTIVE | FL_MENU_DIVIDER);
-		}
-	mylregion = view->regions;
-	i = 0;
-	while(mylregion != NULL) {
-		i++;
-		menu_regions->add(mylregion->element->name, 0, NULL, NULL, FL_MENU_RADIO);
-		mylregion = mylregion->next;
-		}
-	init_menu_taille_valeur(menu_regions, i, 0, 5);
-	}
-Fl_Menu_ *menu_species = (Fl_Menu_ *)view->menu_species;
-if(menu_species != NULL) {
-	menu_species->clear();
-	if(view->tot_seqs > 0) {
-		menu_species->add("Create group", 0, NULL, NULL, FL_MENU_INACTIVE);
-		menu_species->add("Delete group", 0, NULL, NULL, FL_MENU_INACTIVE | FL_MENU_DIVIDER);
-		}
-	for(i=0; i < view->numb_species_sets; i++) {
-		menu_species->add(view->name_species_sets[i], 0, NULL, NULL, FL_MENU_RADIO);
-		}
-	init_menu_taille_valeur(menu_species, view->numb_species_sets, 0, 2);
-	}
-view->show_comment_lines = (view->tot_comment_lines > 0);
-view->active_comment_line = 0;
-update_menu_footers(view);
-compute_size_params(view, TRUE);
-view->DNA_obj->take_focus();
-}
-
-
-void mod_multipl(SEA_VIEW *view, int newval)
-{
-Fl_Widget *obj = view->multipl;
-static char label[16];
-int old = obj->argument();
-
-if(newval == 0) sprintf(label, "%s-+_", view->movekeys);
-else	sprintf(label, "mult=%d", newval);
-obj->argument(newval);
-obj->label(label);
-if(newval != old) obj->redraw();
-}
-
-
-void rename_sequence(SEA_VIEW *view)
-{
-char *new_name;
-const char *rep;
-int num;
-if(view->tot_sel_seqs != 1) return; /* only by security, should not happen */
-num = 0;
-while( ! view->sel_seqs[num] ) num++;
-rep = fl_input("Rename:",view->seqname[num]);
-if(rep == NULL) return;
-new_name = (char *)malloc(strlen(rep)+1);
-if(new_name == NULL) return;
-free(view->seqname[num]);
-strcpy(new_name, rep);
-view->seqname[num] = new_name;
-if(num+1 >= view->first_seq && num+1 <= view->first_seq+view->tot_lines-1) {
-	view->draw_names = num + 1;
-	view->DNA_obj->damage(1);
-	}
-view->modif_but_not_saved = TRUE;
-}
-
-
-void del_gap_only_sites(SEA_VIEW *view)
-{
-int position, numseq, allgaps, inrun, debut, count;
-
-view->seq_length = 0;
-for(numseq = 0; numseq < view->tot_seqs; numseq++) 
-	if(view->each_length[numseq] > view->seq_length)
-		view->seq_length = view->each_length[numseq];
-inrun = FALSE;
-position = -1;
-while( ++position <= view->seq_length) {
-	for(numseq = 0; numseq < view->tot_seqs; numseq++) 
-		if(position < view->each_length[numseq] &&
-			view->sequence[numseq][position] != '-') break;
-	allgaps = (numseq >= view->tot_seqs);
-	if(position >= view->seq_length) allgaps = FALSE;
-	if(inrun == allgaps) continue;
-	if(allgaps && !inrun) {
-		inrun = TRUE;
-		debut = position;
-		}
-	else	{
-		inrun = FALSE;
-		count = position - debut;
-		for(numseq = 1; numseq <= view->tot_seqs; numseq++)
-			delete_gaps_before(view, numseq, debut + count + 1, 
-				count);
-		view->seq_length -= count;
-		if(view->cursor_site > position) view->cursor_site -= count;
-		if(view->regions != NULL) delete_region_part(view, 
-			debut + count + 1, count);
-		if(view->tot_comment_lines > 0)	delete_in_all_comments(count, 
-			debut + count + 1, view);
-		position -= count;
-		}
-	}
-view->seq_length = 0;
-for(numseq = 0; numseq < view->tot_seqs; numseq++) 
-	if(view->each_length[numseq] > view->seq_length)
-		view->seq_length = view->each_length[numseq];	
-}
-
-
-int delete_selected_seqs(SEA_VIEW *view)
-{
-void **temp_data;
-int new_tot_seqs, i, j, c, *temp_int, numset;
-new_tot_seqs = view->tot_seqs - view->tot_sel_seqs;
-if(new_tot_seqs > 0) {
-	temp_data = (void **)malloc(new_tot_seqs * sizeof(void *));
-	if(temp_data == NULL) return TRUE;
-	temp_int = (int *)malloc(new_tot_seqs * sizeof(int));
-	if(temp_int == NULL) return TRUE;
-	}
-
-for(i = 0, j = 0; i<  view->tot_seqs; i++) /* process sequences */
-	if( ! view->sel_seqs[i] ) temp_data[j++] = (void *) view->sequence[i];
-	else free(view->sequence[i]);
-memcpy(view->sequence , temp_data, new_tot_seqs * sizeof(char *) );
-
-if(view->comments != NULL) {
-	for(i = 0, j = 0; i<  view->tot_seqs; i++) /* process comments */
-		if( ! view->sel_seqs[i] ) temp_data[j++] = 
-						(void *) view->comments[i];
-		else free(view->comments[i]);
-	memcpy(view->comments , temp_data, new_tot_seqs * sizeof(char *) );
-	}
-
-for(i = 0, j = 0; i<  view->tot_seqs; i++) /* process seq names */
-	if( ! view->sel_seqs[i] ) temp_data[j++] = (void *) view->seqname[i];
-	else free(view->seqname[i]);
-memcpy(view->seqname , temp_data, new_tot_seqs * sizeof(char *) );
-
-for(i = 0, j = 0; i<  view->tot_seqs; i++) /* process seq lengths */
-	if( ! view->sel_seqs[i] ) temp_int[j++]= view->each_length[i];
-memcpy(view->each_length , temp_int, new_tot_seqs * sizeof(int) );
-
-if(view->numb_gc > 1) { /* process color-coded sequences */
-	for(i = 0, j = 0; i<  view->tot_seqs; i++)
-		if( ! view->sel_seqs[i] ) temp_data[j++] = 
-						(void *) view->col_seq[i];
-		else 	{
-			for(c=0; c<view->numb_gc; c++)
-				free(view->col_seq[i][c]);
-			free(view->col_seq[i]);
-			}
-	memcpy(view->col_seq , temp_data, new_tot_seqs * sizeof(char **) );
-   	}
-for(numset = 0; numset < view->numb_species_sets; numset++) {
-/* process species sets */
-	for(i = 0, j = 0; i < view->tot_seqs; i++) { 
-		if( ! view->sel_seqs[i] ) 
-			temp_int[j++]= view->list_species_sets[numset][i];
-		}
-	memcpy(view->list_species_sets[numset], temp_int, 
-		new_tot_seqs * sizeof(int) );
-	}
-
-if(! view->cursor_in_comment) view->cursor_seq = 1;
-memset(view->sel_seqs, 0, new_tot_seqs * sizeof(int));
-view->tot_seqs = new_tot_seqs;
-select_deselect_seq(view, 0);
-if(view->menu_species != NULL) {
-	numset = 0;
-	while(numset < view->numb_species_sets) { /* check for empty sets */
-		for(i = 0, j = 0; i < view->tot_seqs; i++) 
-			if( view->list_species_sets[numset][i] ) j++;
-		if( j == 0 ) { /* set became empty => remove it */
-			int taille, valeur;
-			free(view->list_species_sets[numset]);
-			free(view->name_species_sets[numset]);
-			memcpy(view->list_species_sets + numset,
-			view->list_species_sets + numset + 1,
-			(view->numb_species_sets - numset - 1)*sizeof(int *) );
-			memcpy(view->name_species_sets + numset,
-			view->name_species_sets + numset + 1,
-			(view->numb_species_sets - numset - 1)*sizeof(char *) );
-			((Fl_Menu_Button*)view->menu_species)->remove(numset + 3 - 1);
-			(view->numb_species_sets)--;
-			get_menu_taille_valeur(view->menu_species, &taille,
-				&valeur);
-			init_menu_taille_valeur(view->menu_species, taille - 1,
-				0, 2);
-			}
-		else	numset++;
-		}
-	}
-view->modif_but_not_saved = TRUE;
-return FALSE;
-}
-
-
-void vh_sliders_callback(Fl_Widget *ob, void *data)
-{
-int old, new_val, page;
-int which = ((user_data_plus *)data)->value;
-SEA_VIEW *view = (SEA_VIEW *)((user_data_plus *)data)->p;
-Fl_Scrollbar *sli = (Fl_Scrollbar *)ob;
-
-new_val = sli->value();
-if (which == 0) { /* vertical */
-      	old = view->first_seq;
-	if( Fl::event_is_click() ) {
-		page = view->tot_lines - 2;
-		if(page < 1) page = 1;
-		if(new_val > old + sli->linesize() ) new_val = old + page;
-		else if(new_val < old - sli->linesize() ) new_val = old - page;
-		new_val = (int) sli->clamp(new_val);
-		((Fl_Valuator *)sli)->value(new_val);
-		}
-      	view->first_seq = new_val;
-	if(old != new_val) view->DNA_obj->redraw();
-	}
-else	{ /* horizontal */
-      	old = view->first_site;
-	if( Fl::event_is_click() ) {
-		page = view->tot_sites - 20;
-		if(page < 10) page = 10;
-		if(new_val > old + sli->linesize() ) new_val = old + page;
-		else if(new_val < old - sli->linesize() ) new_val = old - page;
-		new_val = (int)sli->clamp(new_val);
-		((Fl_Valuator *)sli)->value(new_val);
-		}
-      	view->first_site = new_val;
-	view->draw_names = 0;
-	if(old != new_val) view->DNA_obj->damage(1);
-	}
-view->DNA_obj->take_focus();
-}
-
-
-void lrdu_button_callback(Fl_Widget *ob, void *data)
-{
-Fl_Slider *sli;
-int *pval, newval;
-int mini, maxi;
-
-int which = ((user_data_plus *)data)->value;
-SEA_VIEW *view = (SEA_VIEW *)((user_data_plus *)data)->p;
-if(which <= 3) { /* mouvement horizontal */
-	sli = view->horsli;
-	pval = &view->first_site;
-	}
-else	{ /* mouvement vertical */
-	sli = view->vertsli;
-	pval = &view->first_seq;
-	}
-mini = (int)(sli->minimum());
-maxi = (int)(sli->maximum());
-
-if(which == 1 || which == 5) newval = mini;
-else if(which == 3 || which == 7) newval = maxi;
-
-if(newval < mini) newval = mini;
-if(newval > maxi) newval = maxi;
-if(newval != *pval) {
-	*pval = newval;
-	sli->value(*pval);
-	if(which <= 3)  view->draw_names = 0;
-	view->DNA_obj->damage(view->draw_names ? FL_DAMAGE_ALL : 1);
-	}
-view->DNA_obj->take_focus();
-}
-
-
-void font_callback(Fl_Widget *ob, void *data)
-{
-int taille;
-SEA_VIEW *view = ((props_menu_parts *)data)->view;
-sscanf( ((Fl_Menu_Button *)ob)->text(), "%d", &taille);
-if(view->DNA_obj->labelsize() == taille ) return;
-my_watch_cursor(view->dnawin);
-view->DNA_obj->labelsize(taille);
-fl_font( view->DNA_obj->labelfont(), view->DNA_obj->labelsize() );
-view->line_height = (int)( LINE_HEIGHT_FACTOR * fl_height() );
-view->char_width = (int)fl_width('W');
-compute_size_params(view, TRUE);
-view->DNA_obj->parent()->redraw();
-fl_reset_cursor(view->dnawin);
-view->DNA_obj->take_focus();
-}
-
-
-void save_as_callback(Fl_Widget *ob, void *data)
-{
-SEA_VIEW *view = ((props_menu_parts *)data)->view;
-int debut = ((props_menu_parts *)data)->saveformat;
-int reponse =  ((Fl_Menu_Button *)ob)->value();
-int previous_format = view->format_for_save + debut;
-if(previous_format == reponse) return;
-set_save_format(view, reponse - debut);
-view->DNA_obj->take_focus();
-}
-
-
-void set_save_format(SEA_VIEW *view, int val)
-{
-Fl_Menu_Button *menu_props = (Fl_Menu_Button *)view->bouton_props;
-props_menu_parts *props_parts = 
-		(props_menu_parts *)menu_props->user_data();
-Fl_Menu_Item *saveas_popup = 
-	(Fl_Menu_Item *)menu_props->menu() + props_parts->saveformat;
-
-if(val >= nbr_formats) return;
-if( view->format_for_save == (known_format)val) return;
-saveas_popup[val].setonly();
-view->format_for_save = (known_format)val;
-Fl_Menu_Item *items = (Fl_Menu_Item *) ((Fl_Menu_ *)view->menu_file)->menu();
-items[SAVE].deactivate();
-if(view->masename != NULL) {
-	free(view->masename);
-	view->masename = NULL;
-	}
-}
-
-
-void colors_callback(Fl_Widget *ob, void *data)
-{
-Fl_Menu_Button *menu_props = (Fl_Menu_Button *)ob;
-props_menu_parts *parts = (props_menu_parts *)data;
-SEA_VIEW *view = parts->view;
-int reponse =  menu_props->value();
-Fl_Menu_Item *item;
-
-/* processing inverted colors */
-if(reponse == parts->inverted) {
-	int style;
-	my_watch_cursor(view->dnawin);
-	view->inverted_colors = !view->inverted_colors;
-	if(view->inverted_colors) {
-		style = FL_COURIER;
-		}
-	else	{
-		style = FL_COURIER_BOLD;
-		}
-	view->DNA_obj->labelfont(style);
-	view->DNA_obj->redraw();
-	fl_reset_cursor(view->dnawin);
-	item = (Fl_Menu_Item *)menu_props->menu() + parts->reference;
-	if( (!view->inverted_colors) && view->tot_sel_seqs == 1) item->activate();
-	else item->deactivate();
-	return;
-	}
-
-/* changing DNA / protein / Alternate protein mode */
-enum {DNARNA, Protein, Alt };
-int debut = parts->colors;
-reponse -= debut;
-if(reponse == DNARNA && !view->protein) return;
-if(reponse == Protein && view->protein && 
-	( view->alt_colors == USING_STANDARD_COLORS ||
-	view->alt_colors == NO_ALT_COLORS) ) return;
-if(reponse == Alt && view->alt_colors == USING_ALT_COLORS) return;
-view->protein = (reponse >= Protein);
-my_watch_cursor(view->dnawin);
-if(view->numb_gc > 1) { /* free col_seq */
-	int num, col;
-	for(num = 0; num < view->tot_seqs; num++) {
-		for(col = 0; col < view->numb_gc; col++) 
-			free(view->col_seq[num][col]);
-		free(view->col_seq[num]);
-		}
-	}
-item = (Fl_Menu_Item *)menu_props->menu() + parts->keys - 1;
-if(reponse == DNARNA) {
-	view->numb_gc = view->numb_dnacolors;
-	view->curr_colors = view->dnacolors;
-	item->activate();
-	adjust_menu_edit_modes(view);
-	}
-else if(reponse == Protein) {
-	set_aa_color_mode(USING_STANDARD_COLORS);
-	view->numb_gc = view->numb_stdprotcolors;
-	view->curr_colors = view->stdprotcolors;
-	item->deactivate();
-	adjust_menu_edit_modes(view);
-	}
-else if(reponse == Alt) {
-	set_aa_color_mode(USING_ALT_COLORS);
-	view->numb_gc = view->numb_altprotcolors;
-	view->curr_colors = view->altprotcolors;
-	item->deactivate();
-	}
-view->col_seq = prepcolseqs(view->sequence, view->tot_seqs, 
-	view->max_seq_length, view->each_length, 
-	(view->protein ? get_color_for_aa : get_color_for_base),
-	view->numb_gc, view->allow_lower);
-if(view->col_seq == NULL) out_of_memory();
-if(view->alt_colors != NO_ALT_COLORS) {
-	if(reponse >= Protein)  view->alt_colors = 
-		(color_choice)reponse;
-	}
-view->DNA_obj->redraw();
-fl_reset_cursor(view->dnawin);
-}
-
-
-void allow_edit_callback(Fl_Widget *ob, void *data)
-{
-props_menu_parts *parts = (props_menu_parts *)data;
-SEA_VIEW *view = parts->view;
-Fl_Menu_Button *menu_props = (Fl_Menu_Button *)ob;
-Fl_Menu_Item *item = (Fl_Menu_Item *)menu_props->menu() + parts->edit;
-
-view->allow_seq_edit = !view->allow_seq_edit;
-if(view->allow_seq_edit) 
-	item->set();
-else
-	item->clear();
-}
-
-
-void consensus_allowgaps_callback(Fl_Widget *ob, void *data)
-{
-int *poption = (int *)data;
-Fl_Menu_Item *item = (Fl_Menu_Item *)( ((Fl_Menu_ *)ob)->mvalue() );
-*poption = !(*poption);
-}
-
-
-void slow_fast_callback(Fl_Widget *ob, void *data)
-{
-props_menu_parts *parts = (props_menu_parts *)data;
-SEA_VIEW *view = parts->view;
-Fl_Menu_Button *menu_props = (Fl_Menu_Button *)ob;
-Fl_Menu_Item *item = (Fl_Menu_Item *)menu_props->menu() + parts->slow_fast;
-view->double_buffer = !view->double_buffer;
-if(!view->double_buffer) 
-	item->set();
-else
-	item->clear();
-#ifdef __APPLE__
-set_res_value("fast", view->double_buffer ? "false" : "true");
-#endif
-Fl_Window *win = (Fl_Window *)view->DNA_obj->parent();
-Fl_Group *win_parent = (Fl_Group *)win->parent();
-int x,y,w,h;
-x = win->x(); y = win->y(); w = win->w(); h = win->h();
-int size = view->DNA_obj->labelsize();
-int font = view->DNA_obj->labelfont();
-Fl_Color col = view->DNA_obj->color();
-Fl_Color sel_col = view->DNA_obj->selection_color();
-win->hide();
-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 );
-else 	win = new Fl_Window(x,y,w,h);
-win->box(FL_DOWN_BOX);
-win->resizable(win);
-view->DNA_obj = (Fl_Widget*)new DNA_obj(3, 3, w - 6, h - 6, view);
-view->DNA_obj->labelfont(font);
-view->DNA_obj->labelsize(size);
-view->DNA_obj->color(col, sel_col);
-win->color(col);
-win->end();
-win->show();
-view->DNA_obj->take_focus();
-}
-
-
-void allow_lower_callback(Fl_Widget *ob, void *data)
-{
-Fl_Menu_Button *menu_props = (Fl_Menu_Button *)ob;
-props_menu_parts *parts = (props_menu_parts *)data;
-SEA_VIEW *view = parts->view;
-int num, col, pos; char c;
-int (*calc_color_function)(int);
-Fl_Menu_Item *item = (Fl_Menu_Item *)menu_props->menu() + parts->allow_lower;
-
-view->allow_lower = !view->allow_lower;
-if(view->allow_lower) 
-	item->set();
-else
-	item->clear();
-my_watch_cursor(view->dnawin);
-calc_color_function = view->protein ? get_color_for_aa : get_color_for_base;
-if(view->allow_lower) {
-	for(num = 0; num < view->tot_seqs; num++) {
-		for(pos = 0; pos < view->each_length[num]; pos++) {
-			c = view->sequence[num][pos];
-			if(islower(c)) {
-				col = calc_color_function(c);
-			   	view->col_seq[num][col][pos] = c;
-				}
-			}
-		}
-	}
-else	{
-	for(num = 0; num < view->tot_seqs; num++) {
-		for(pos = 0; pos < view->each_length[num]; pos++) {
-			c = view->sequence[num][pos];
-			if(islower(c)) {
-				col = calc_color_function(c);
-				view->col_seq[num][col][pos] = toupper(c);
-				}
-			}
-		}
-	}
-view->DNA_obj->parent()->redraw();
-fl_reset_cursor(view->dnawin);
-}
-
-
-void toggle_reference_callback(Fl_Widget *ob, void *data)
-{
-int on, etat;
-props_menu_parts *parts = (props_menu_parts *)data;
-SEA_VIEW *view = parts->view;
-Fl_Menu_Button *menu_props = (Fl_Menu_Button *)ob;
-Fl_Menu_Item *item = (Fl_Menu_Item *)menu_props->menu() + parts->edit;
-on = (menu_props->menu() + parts->reference)->value();
-reference_toggle(view, on);
-if(on) 	{
-	item->deactivate();
-	}
-else	{
-	item->activate();
-	if(view->allow_seq_edit) item->set();
-	else item->clear();
-	}
-}
-
-
-void dnakeys_callback(Fl_Widget *ob, void *data)
-{
-props_menu_parts *parts = (props_menu_parts *)data;
-SEA_VIEW *view = parts->view;
-Fl_Menu_Button *menu_props = (Fl_Menu_Button *)ob;
-int reponse =  menu_props->value() - parts->keys;
-if( ! view->hjkl ) { /* activer un choix */
-	view->hjkl = reponse + 1;
-	}
-else if(view->hjkl == reponse + 1) { /* desactiver choix courant */
-	((Fl_Menu_Item *)menu_props->mvalue())->clear();
-	view->hjkl = 0;
-	}
-else	{ /* changer de choix */
-	view->hjkl = reponse + 1;
-	}
-}
-
-
-void clustal_opt_callback(Fl_Widget *ob, void *data)
-{
-props_menu_parts *parts = (props_menu_parts *)data;
-SEA_VIEW *view = parts->view;
-Fl_Menu_Button *menu_props = (Fl_Menu_Button *)ob;
-int reponse =  menu_props->value();
-if(reponse == parts->clustalopt || reponse == parts->clustalopt + 1) { 
-	view->alignment_algorithm = reponse - parts->clustalopt;  
-	}
-else if(reponse == parts->clustalopt + 3)	{ // edit options
-	const char *rep;
-	int l; 
-	rep = fl_input("Alignment options "
-#if defined(WIN32) || (defined(__APPLE__) && ! TARGET_RT_MAC_MACHO)
-		"(ex: /gapopen=5 /quicktree)", 
-#else
-		"(Clustal ex: -gapopen=5 -quicktree\n"
-		"Muscle ex: -maxiters 5 -diags)", 
-#endif
-		(view->clustal_options == NULL ? "": view->clustal_options) );
-	if(rep == NULL) return;
-	if(view->clustal_options != NULL) free(view->clustal_options);
-	l = strlen(rep);
-	while(l > 0 && rep[l-1] == ' ') l--;
-	if(l == 0) {
-		view->clustal_options = NULL; 
-		return;
-		}
-	view->clustal_options = (char *)malloc(l+1);
-	memcpy(view->clustal_options, rep, l);
-	view->clustal_options[l] = 0;
-	menu_props->replace(parts->clustalopt + 2, view->clustal_options);
-	menu_props->mode(parts->clustalopt + 2, FL_MENU_TOGGLE | FL_MENU_VALUE | FL_MENU_DIVIDER);
-	}
-}
-
-
-void consensus_opt_callback(Fl_Widget *ob, void *data)
-{
-props_menu_parts *parts = (props_menu_parts *)data;
-SEA_VIEW *view = parts->view;
-Fl_Menu_Button *menu_props = (Fl_Menu_Button *)ob;
-int reponse =  menu_props->value();
-if(reponse != parts->consensusopt + 2) return; // securite
-const char *rep;
-char tmp[100];
-int value;
-sprintf(tmp, "%d %%", view->consensus_threshold);
-rep = fl_input("Set consensus threshold value in %%", tmp );
-if(rep == NULL) return;
-value = -1;
-sscanf(rep, "%d", &value);
-if(value <= 0 || value > 100) return;
-view->consensus_threshold = value;
-sprintf(tmp, "%d %%", view->consensus_threshold);
-menu_props->replace(parts->consensusopt, tmp);
-}
-
-
-void create_props_menu(Fl_Menu_Button *obj, SEA_VIEW *view, 
-	int curr_color_choice, int inverted, int black_and_white, 
-	int def_fontsize)
-{
-int defaut, mode;
-props_menu_parts *parts =(props_menu_parts *)calloc(1,sizeof(props_menu_parts));
-obj->user_data(parts);
-
-parts->view = view;
-// Ne pas utiliser d'initialisation directe (obj->menu) car edition impossible
-
-/* partie Fontsize */
-obj->add("Fontsize", 0, 0, 0, FL_SUBMENU);
-#define NBER_FONTSIZES 10
-parts->fontsize = 
-	obj->add("Fontsize/8", 0, font_callback, parts, FL_MENU_RADIO);
-obj->add("Fontsize/10", 0, font_callback, parts, FL_MENU_RADIO);
-obj->add("Fontsize/12", 0, font_callback, parts, FL_MENU_RADIO );
-obj->add("Fontsize/14", 0, font_callback, parts, FL_MENU_RADIO );
-obj->add("Fontsize/16", 0, font_callback, parts, FL_MENU_RADIO );
-obj->add("Fontsize/18", 0, font_callback, parts, FL_MENU_RADIO );
-obj->add("Fontsize/24", 0, font_callback, parts, FL_MENU_RADIO );
-obj->add("Fontsize/28", 0, font_callback, parts, FL_MENU_RADIO );
-obj->add("Fontsize/32", 0, font_callback, parts, FL_MENU_RADIO );
-obj->add("Fontsize/36", 0, font_callback, parts, FL_MENU_RADIO );
-
-for(defaut = parts->fontsize; defaut < parts->fontsize + NBER_FONTSIZES; defaut++) {
-	int taille;
-	sscanf( obj->text(defaut), "%d", &taille);
-	if(taille >= def_fontsize) break;
-	}
-if(defaut >= parts->fontsize + NBER_FONTSIZES) defaut = parts->fontsize + 3;
-((Fl_Menu_Item *)obj->menu() + defaut)->set();
-
-/* partie Save Format */
-obj->add("Save Format", 0, 0, 0, FL_SUBMENU);
-parts->saveformat = obj->add("Save Format/Save as Mase", 0, save_as_callback, 
-	parts, FL_MENU_RADIO);
-obj->add("Save Format/Save as Phylip",0, save_as_callback, parts,FL_MENU_RADIO);
-obj->add("Save Format/Save as Clustal",0,save_as_callback, parts,FL_MENU_RADIO);
-obj->add("Save Format/Save as MSF", 0, save_as_callback, parts, FL_MENU_RADIO );
-obj->add("Save Format/Save as Fasta", 0, save_as_callback, parts,FL_MENU_RADIO);
-obj->add("Save Format/Save as NEXUS", 0, save_as_callback, parts,FL_MENU_RADIO);
-defaut = parts->saveformat + view->format_for_save;
-((Fl_Menu_Item *)obj->menu() + defaut)->set();
-
-/* partie Colors */
-int submenu = obj->add("Colors", 0, 0, 0, FL_SUBMENU);
-parts->colors = obj->add("Colors/DNA-RNA colors", 0, colors_callback, parts, 
-	FL_MENU_RADIO);
-obj->add("Colors/Protein colors",0, colors_callback, parts, FL_MENU_RADIO);
-int alt = obj->add("Colors/Alt. colors",0,colors_callback, parts, 
-	FL_MENU_RADIO | FL_MENU_DIVIDER );
-parts->inverted = obj->add("Colors/Inverted colors", 0, colors_callback, parts, FL_MENU_TOGGLE );
-if(black_and_white) {
-	((Fl_Menu_Item *)obj->menu() + submenu)->deactivate();
-	}
-else	{
-	defaut = parts->colors; if(view->protein) defaut++;
-	((Fl_Menu_Item *)obj->menu() + defaut)->set();
-	if(curr_color_choice == NO_ALT_COLORS) 
-		((Fl_Menu_Item *)obj->menu() + alt)->deactivate();
-	if(inverted) ((Fl_Menu_Item *)obj->menu() + parts->inverted)->set();
-	}
-
-/* partie Edit */
-parts->edit = obj->add("Allow seq. edition", 0, allow_edit_callback, 
-	parts, FL_MENU_TOGGLE);
-
-/* partie by reference */
-parts->reference = obj->add("by Reference", 0, toggle_reference_callback, 
-	parts, FL_MENU_TOGGLE);
-if(black_and_white) 
-	((Fl_Menu_Item *)obj->menu() + parts->reference)->deactivate();
-else	{
-// bug: FL_ALT ne marche pas, c'est Meta qu'il faut taper a la place
-	obj->shortcut(parts->reference, myFL_CTRL | 'r');
-	}
-
-/* partie keys */
-obj->add("DNA keys", 0, 0, 0, FL_SUBMENU);
-parts->keys = obj->add("DNA keys/hjkl<space> => GATCN", 0, dnakeys_callback, 
-	parts, FL_MENU_RADIO);
-obj->add("DNA keys/hjkl<space> => TCGAN", 0, dnakeys_callback, 
-	parts, FL_MENU_RADIO);
-obj->add("DNA keys/hjkl<space> => ACGTN", 0, dnakeys_callback, 
-	parts, FL_MENU_RADIO);
-
-/* partie alignment options */
-obj->add("Alignment options", 0, 0, 0, FL_SUBMENU);
-parts->clustalopt = obj->add("Alignment options/Clustalw", 0, clustal_opt_callback, 
-	parts, FL_MENU_RADIO);
-obj->add("Alignment options/Muscle", 0, clustal_opt_callback, 
-	parts, FL_MENU_RADIO | FL_MENU_DIVIDER);
-((Fl_Menu_Item *)obj->menu() + parts->clustalopt + view->alignment_algorithm)->set();
-#ifdef NO_CLUSTALW
-((Fl_Menu_Item *)obj->menu() + parts->clustalopt + CLUSTALW)->deactivate();
-#endif
-obj->add("Alignment options/<none>", 0, clustal_opt_callback, 
-	parts, FL_MENU_DIVIDER | FL_MENU_INACTIVE);
-obj->add("Alignment options/Edit options", 0, clustal_opt_callback, 
-	parts, 0);
-
-/* partie consensus options */
-obj->add("Consensus options", 0, 0, 0, FL_SUBMENU);
-char tmp[50];
-sprintf(tmp, "Consensus options/%d %%", view->consensus_threshold);
-parts->consensusopt = obj->add(tmp, 0, NULL, parts, FL_MENU_DIVIDER);
-obj->add("Consensus options/allow gaps", 0, consensus_allowgaps_callback, &(view->consensus_allowgaps), FL_MENU_TOGGLE);
-obj->add("Consensus options/Edit threshold", 0, consensus_opt_callback, parts, 0);
-
-/* partie Fast/Slow */
-parts->slow_fast = obj->add("Fast-Rough", 0, slow_fast_callback, parts,
-	view->double_buffer ? FL_MENU_TOGGLE : FL_MENU_TOGGLE | FL_MENU_VALUE );
-
-/* partie allow lower case */
-parts->allow_lower = obj->add("Allow lowercase", 0, allow_lower_callback, parts,
-	view->allow_lower ? FL_MENU_TOGGLE | FL_MENU_VALUE : FL_MENU_TOGGLE );
-if(black_and_white) 
-	((Fl_Menu_Item *)obj->menu() + parts->allow_lower)->deactivate();
-
-/* partie customize */
-parts->custom = obj->add("Customize", 0, custom_callback, view, 0);
-}
-
-
-void edit_menu_callback(Fl_Widget *ob, long which)
-{
-SEA_VIEW *view;
-int reponse = ((Fl_Menu_Button*)ob)->value();
-view = (SEA_VIEW *) ob->user_data();
-if(reponse == RENAME_SEQ) { /* rename the selected sequence */
-	rename_sequence(view);
-	}
-else if(reponse == EDIT_COMMENTS) {
-	edit_comments_dialog(view);
-	}
-else if(reponse == EDIT_SEQ) {
-	edit_sequence_dialog(view);
-	}
-else if(reponse == DELETE_SEQ) { /* delete selected sequences from alignment */
-	char temp[100];
-	sprintf(temp,"Confirm request of deletion of %d sequence(s)",
-		view->tot_sel_seqs);
-	if( ask_with_custom_yesno(temp, "Delete", "Cancel") ) { 
-		if( delete_selected_seqs(view) )
-			fl_alert("Not enough memory for this operation");
-		else	{
-			compute_size_params(view, TRUE);
-			update_menu_footers(view);
-			view->DNA_obj->redraw();
-			view->vertsli->redraw();
-			}
-		}
-	}
-else if(reponse == CREATE_SEQ) { /* create a new sequence */
-	char *newname;
-	newname = (char *) fl_input("Name of the new sequence?", "");
-	if(newname == NULL || strlen(newname) == 0) return;
-	add_seq_to_align(view, newname, "-", 1);
-	}
-else if(reponse == LOAD_SEQ) { /* load a new sequence */
-	load_seq_dialog(view);
-	}
-else if(reponse == DUPLICATE_SEQ || reponse == COMPLEMENT_SEQ ||
-		 reponse == REVERSE_SEQ) { 
-	int num, lenseq, old_first_seq;
-	char *newseq, *p, *q, newname[100];
-	if(view->tot_sel_seqs != 1 ) return; /* par securite */
-	if(reponse != DUPLICATE_SEQ && view->protein) return; /* par securite */
-	for(num = 0; num < view->tot_seqs; num++)
-		if(view->sel_seqs[num]) break;
-	lenseq = view->each_length[num];
-	newseq = (char *)malloc(lenseq + 1);
-	if(newseq == NULL) {
-		fl_alert("Not enough memory\nto create a new sequence");
-		Fl_Menu_Item *items = (Fl_Menu_Item *) ((Fl_Menu_ *)ob)->menu();
-		items[reponse-1].deactivate();
-		return;
-		}
-	if(reponse == DUPLICATE_SEQ) {
-		strcpy(newseq, view->sequence[num]);
-		}
-	else	{
-		p = view->sequence[num]; q = newseq + lenseq - 1;
-		while( *p != 0) {
-			if(reponse == COMPLEMENT_SEQ) *q = complement_base(*p);
-			else *q = *p;
-			p++; q--;
-			}
- 		newseq[lenseq] = 0;
-		}
-	if(reponse == COMPLEMENT_SEQ) strcpy(newname,"C_");
-	else if(reponse == REVERSE_SEQ) strcpy(newname,"R_");
-	else	strcpy(newname,"D_");
-	strcat(newname,view->seqname[num]);
-	old_first_seq = view->first_seq;
-	add_seq_to_align(view, newname , newseq, lenseq);
-	free(newseq);	 
-/* placer la nouvelle seq apres celle de depart */
-	view->sel_seqs[num] = FALSE;
-	view->sel_seqs[view->tot_seqs - 1] = TRUE;
-	deplacer_grp_seqs( view, FL_min(num + 2, view->tot_seqs) );
-/* montrer les 2 seqs concernees */
-	if(old_first_seq > num + 1) view->first_seq = 
-		FL_min(num + 1, view->tot_seqs - view->tot_lines + 1);
-	else if(old_first_seq + view->tot_lines - 1 < num + 2) 
-		view->first_seq = FL_min(num + 2, 
-			view->tot_seqs - view->tot_lines + 1);
-	else
-		view->first_seq = old_first_seq;
-	view->vertsli->Fl_Slider::value(view->first_seq);
-	}
-else if(reponse == EXCHANGE_UT) { /* exchange Us and Ts */
-	int num, col; char *p, *q;
-	if(view->tot_sel_seqs == 0 || view->protein) return; /* par securite */
-	my_watch_cursor(view->dnawin);
-	col = get_color_for_base('T');
-	for(num = 0; num < view->tot_seqs; num++) {
-		if( ! view->sel_seqs[num] ) continue;
-		p = view->sequence[num] - 1;
-		q = view->col_seq[num][col] - 1;
-		while( *(++p) != 0 ) {
-			++q;
-			if( *p == 'U' ) {
-			   	*p = *q = 'T'; 
-			   	}
-			else if( *p == 'T' ) {
-			   	*p = *q = 'U'; 
-			   	}
-			else if( *p == 't' ) {
-			   	*p = 'u';
-				*q = (view->allow_lower ? 'u' : 'U'); 
-				}
-			else if( *p == 'u' ) {
-			   	*p = 't';
-				*q = (view->allow_lower ? 't' : 'T'); 
-			   	}
-			}
-		}
-	view->modif_but_not_saved = TRUE;
-	view->draw_names = 0;
-	view->DNA_obj->damage(1);
-	fl_reset_cursor(view->dnawin);
-	}
-else if(reponse == ALIGN_SEQS) { /* align selected sites */
-	align_selected_parts(view, view->alignment_algorithm);
-	view->DNA_obj->redraw();
-	view->horsli->redraw();
-	fl_reset_cursor(view->dnawin);
-	}
-else if(reponse == DOT_PLOT) { /* dot plot */
-	int num1, num2;
-	extern void show_dot_plot(char *seq1, char *seq2, char *seqname1, 
-		char *seqname2, int l1, int l2, int maxseqlength, 
-		void *seaview_data);
-
-	if(view->tot_sel_seqs != 2) return;
-	for(num1 = 0; num1 < view->tot_seqs; num1++)
-		if(view->sel_seqs[num1]) break;
-	for(num2 = num1 + 1; num2 < view->tot_seqs; num2++)
-		if(view->sel_seqs[num2]) break;
-	show_dot_plot(view->sequence[num1], view->sequence[num2],
-		view->seqname[num1], view->seqname[num2],
-		view->each_length[num1], view->each_length[num2],
-		view->max_seq_length, (void *)view);
-	}
-else if (reponse == CONSENSUS_SEQ) {
-	char *newseq, newname[100];
-	int old_total, *tmp, new_pos, i, old_first_seq;
-
-	if(view->tot_sel_seqs <= 1 ) return; /* par securite */
-	newseq = cre_consensus(view, newname);
-	if(newseq == NULL) {
-		fl_alert("Not enough memory\nto create a new sequence");
-		Fl_Menu_Item *items = (Fl_Menu_Item *) ((Fl_Menu_ *)ob)->menu();
-		items[reponse-1].deactivate();
-		return;
-		}
-	old_first_seq = view->first_seq;
-	old_total = view->tot_seqs;
-	add_seq_to_align(view, newname , newseq, strlen(newseq));
-	free(newseq);	
-	for(i=0; i < view->tot_seqs; i++)
-		if(view->sel_seqs[i]) new_pos = i;
-	new_pos += 2;
-	if(view->tot_seqs == old_total || new_pos == view->tot_seqs) {
-		return; 
-		}
-/* placer la nouvelle seq apres la derniere des selectionnees */
-	tmp = (int *)calloc(view->tot_seqs, sizeof(int));
-	if(tmp == NULL) {
-		return; 
-		}
-	memcpy(tmp, view->sel_seqs, view->tot_seqs * sizeof(int) );
-	memset(view->sel_seqs, 0, view->tot_seqs * sizeof(int) );
-	view->sel_seqs[view->tot_seqs - 1] = TRUE;
-	old_total = view->tot_sel_seqs;
-	view->tot_sel_seqs = 1;
-	deplacer_grp_seqs( view, new_pos );
-	memcpy(view->sel_seqs, tmp, view->tot_seqs * sizeof(int) );
-	view->tot_sel_seqs = old_total;
-	free(tmp);
-/* montrer la seq concernee */
-	if(old_first_seq > new_pos ) view->first_seq = 
-		FL_min(new_pos - 2,  1);
-	else if(old_first_seq + view->tot_lines - 1 < new_pos) 
-		view->first_seq = FL_min(new_pos - 2, 
-			view->tot_seqs - view->tot_lines + 1);
-	else
-		view->first_seq = old_first_seq;
-	view->vertsli->Fl_Slider::value(view->first_seq);
-	}
-else if(reponse == DELETE_GAP_ONLY_SITES) {
-	if( !ask_with_custom_yesno("Confirm remove all gap_containing sites?", "Remove", "Cancel") )  
-		return;
-	my_watch_cursor(view->dnawin);
-	del_gap_only_sites(view);
-	compute_size_params(view, TRUE);
-	view->DNA_obj->redraw();
-	view->horsli->redraw();
-	fl_reset_cursor(view->dnawin);
-	}
-}
-
-
-void set_and_show_new_cursor_site(SEA_VIEW *view, int new_pos, int center,
-	int force_redraw)
-{
-int old_pos;
-old_pos = view->cursor_site;
-if(new_pos != old_pos)
-	view->cursor_site = new_pos;
-if(new_pos >= view->first_site && new_pos < view->first_site +
-	view->tot_sites - 1) {
-	if( !force_redraw && 
-		( (view->cursor_in_comment && view->mod_comment_line == 0) ||
-		(!view->cursor_in_comment && view->mod_seq == 0) ) )
-		view->mod_cursor = TRUE; 
-	}
-else	{
-	if(center) 
-		view->first_site = 
-			view->cursor_site - view->tot_sites/2;
-	else	{
-		if(new_pos >= old_pos) 
-			view->first_site = view->cursor_site + 10 - 
-				view->tot_sites;
-		else
-			view->first_site = view->cursor_site - 10;
-		}
-	if(view->first_site + view->tot_sites - 1 >
-		view->seq_length + 1 )
-		view->first_site = view->seq_length - view->tot_sites + 2;
-	if(view->first_site <=0 ) 
-		view->first_site = 1;
-	view->horsli->Fl_Slider::value(view->first_site);
-	view->mod_seq = 0;
-	view->mod_comment_line = 0;
-	}
-view->draw_names = 0;
-view->DNA_obj->damage(1);
-}
-
-
-void set_and_show_new_cursor_seq(SEA_VIEW *view, int new_pos)
-{
-if(view->cursor_in_comment) {
-	if(view->comment_length[new_pos - 1] + 1 < view->cursor_site) {
-		fl_ringbell(0); 
-		return;
-		}
-	if(new_pos == view->cursor_seq) return;
-	view->cursor_seq = new_pos;
-	view->mod_cursor = TRUE;
-	view->draw_names = 0;
-	view->DNA_obj->damage(1);
-	return;
-	}
-if(view->each_length[new_pos - 1] + 1 < view->cursor_site) {
-	fl_ringbell(0); return;
-	}
-if(new_pos != view->cursor_seq || new_pos < view->first_seq ||
-	view->cursor_site != view->old_cursor_site ||
-	new_pos >= view->first_seq + view->tot_lines) {
-	view->cursor_seq = new_pos;
-	if(new_pos >= view->first_seq && new_pos < view->first_seq +
-		view->tot_lines) {
-		view->mod_cursor = TRUE;
-		view->draw_names = 0;
-		view->DNA_obj->damage(1);
-		}
-	else	{
-		view->first_seq = view->cursor_seq - view->tot_lines/2;
-		if(view->first_seq + view->tot_lines >= 
-			view->tot_seqs )
-			view->first_seq = view->tot_seqs - view->tot_lines + 1;
-		if(view->first_seq <=0 ) 
-			view->first_seq = 1;
-		view->vertsli->Fl_Slider::value(view->first_seq);
-		view->draw_names = -1;
-		view->DNA_obj->redraw();
-		}
-	}
-}
-
-
-void goto_callback(Fl_Widget *ob, void *data)
-{
-Fl_Input *input;
-SEA_VIEW *view;
-int l, maxi, num, new_pos = -1, numerique = TRUE;
-char *p, *q, target[50];
-static char *upname;
-static int l_upname = 0;
-
-user_data_plus *data_plus = (user_data_plus *)data;
-int which = data_plus->value;
-if(which == 0) { /* appele par bouton goto */
-	input = (Fl_Input *)data_plus->p;
-	data_plus = (user_data_plus *)input->user_data();
-	}
-else	input = (Fl_Input*)ob;
-view = (SEA_VIEW *)data_plus->p;
-if(view->tot_seqs == 0) return;
-p = (char *)input->value();
-q = p - 1; while(*(++q) != 0) {
-	if(!isdigit(*q)) numerique = FALSE;
-	}
-if(numerique) { /* aller a une position de l'alignement */
-	sscanf(p,"%d",&new_pos);
-	if(view->cursor_in_comment)
-		maxi = view->comment_length[view->cursor_seq - 1];
-	else
-		maxi = view->each_length[view->cursor_seq - 1];
-	if( new_pos <= 0 || new_pos > maxi ) {
-		input->value("");
-		fl_ringbell(0);
-		}
-	else	{
-		set_and_show_new_cursor_site(view, new_pos, TRUE, FALSE);
-		}
-	}
-else	{ /* recherche d'une seq par son nom */
-	l = strlen(p);
-	if(l > sizeof(target) - 1) l = sizeof(target) - 1;
-	strncpy(target, p, l); target[l] = 0; majuscules(target);
-	if(view->wid_names > l_upname) {
-		if(l_upname > 0) free(upname);
-		upname = (char *)malloc(view->wid_names + 1);
-		l_upname = view->wid_names;
-		}
-	for(num = 0; num < view->tot_seqs; num++) {
-		strncpy(upname, view->seqname[num], l_upname);
-		upname[l_upname] = 0; majuscules(upname);
-		if(strstr(upname, target) != NULL) break;
-		}
-	if(num >= view->tot_seqs) {
-		fl_ringbell(0);
-		return;
-		}
-	if(view->cursor_site < view->first_site || 
-		view->cursor_site >= view->first_site + view->tot_sites)
-		view->cursor_site = view->first_site;
-	set_and_show_new_cursor_seq(view, num + 1);
-	}
-view->DNA_obj->take_focus();
-}
-
-
-char *search_with_gaps(char *target, char *debut)
-{
-char *cherche, *trouve = debut - 1;
-do	{
-	debut = trouve + 1;
-	trouve = NULL;
-	cherche = target;
-	do	{
-		while( *debut == '-' ) debut++;
-		if(trouve == NULL) trouve = debut;
-		if ( toupper(*debut) != *cherche ) break;
-		cherche++; debut++;
-		}
-	while( *cherche != 0 );
-	}
-while( *trouve != 0  && *cherche != 0);
-return ( *cherche == 0 ? trouve : (char*)NULL );
-}
-
-
-void search_callback(Fl_Widget *ob, void *data)
-{
-SEA_VIEW *view;
-char target[50], *pos, *debut;
-int new_pos;
-int l = -1;
-
-user_data_plus *data_plus = (user_data_plus *)data;
-int which = data_plus->value;
-if(which == 1) { /* appele par champ input */
-	pos = (char *)((Fl_Input*)ob)->value() - 1;
-	}
-else	{ /* appele par bouton search */
-	Fl_Input *champ = (Fl_Input *)data_plus->p;
-	pos = (char *)champ->value() - 1;
-	data_plus = (user_data_plus *) champ->user_data();
-	}
-view = (SEA_VIEW *)data_plus->p;
-if(view->tot_seqs == 0) return;
-while( *++pos && l+1 < sizeof(target) ) 
-	target[++l] = toupper(*pos);
-target[++l] = 0;
-if( l == 0 ) return;
-if(view->cursor_in_comment)
-	debut = view->comment_line[view->cursor_seq - 1] + view->cursor_site;
-else
-	debut = view->sequence[view->cursor_seq - 1] + view->cursor_site;
-pos = search_with_gaps(target, debut);
-if(pos == NULL) fl_ringbell(0);
-else	{
-	if(view->cursor_in_comment)
-		new_pos = pos - view->comment_line[view->cursor_seq - 1] + 1;
-	else
-		new_pos = pos - view->sequence[view->cursor_seq - 1] + 1;
-	set_and_show_new_cursor_site(view, new_pos, TRUE, FALSE);
-	}
-view->DNA_obj->take_focus();
-}
-
-
-void free_alignment(SEA_VIEW *view)
-{
-int num, c;
-if(view->header!=NULL) { free(view->header); view->header = NULL; }
-for(num = 0; num < view->tot_seqs; num++) {
-	free(view->sequence[num]);
-	free(view->seqname[num]);
-	if(view->comments != NULL && view->comments[num] != NULL) {
-		free(view->comments[num]);
-		view->comments[num] = NULL;
-		}
-	if(view->numb_gc > 1) {
-		for(c = 0; c < view->numb_gc; c++) free(view->col_seq[num][c]);
-		free(view->col_seq[num]);
-		}
-	}
-if( view->tot_seqs > 0 ) {
-	free(view->sequence);
-	free(view->seqname);
-	if(view->comments != NULL) free(view->comments);
-	}
-if( view->numb_gc > 1 && view->tot_seqs > 0 ) free(view->col_seq);
-if(view->masename != NULL) {
-	free(view->masename);
-	view->masename = NULL;
-	}
-if( view->tot_seqs >= 1 ) {
-	free(view->each_length);
-	free(view->sel_seqs);
-	free(view->region_line);
-	}
-while (view->regions != NULL)
-	delete_region(view, 1);
-for(num = 0; num < view->numb_species_sets; num++) {
-	free(view->list_species_sets[num]);
-	free(view->name_species_sets[num]);
-	}
-view->numb_species_sets = 0;
-view->tot_seqs = 0;
-view->tot_sel_seqs = 0;
-view->cursor_seq = 0;
-free_region(view->active_region);
-view->active_region = NULL;
-if(view->menu_file != NULL) {
-	Fl_Menu_Item *items = 
-		(Fl_Menu_Item *) ((Fl_Menu_ *)view->menu_file)->menu();
-	items[SAVE].deactivate();
-	items[SAVE_AS].deactivate();
-	items[SAVE_REGIONS].deactivate();
-	}
-if(view->tot_comment_lines > 0) {
-	for(num = 0; num < view->tot_comment_lines; num++) {
-		free(view->comment_name[num]);
-		free(view->comment_line[num]);
-		}
-	free(view->comment_name);
-	free(view->comment_line);
-	free(view->comment_length);
-	view->tot_comment_lines = 0;
-	view->show_comment_lines = FALSE;
-	}
-}
-
-
-void load_alignment_file(SEA_VIEW *view, char *filename, char *message, 
-	known_format file_format)
-{
-char *err_message, *p;
-int protein;
-
-if(view->tot_seqs > 0 && view->modif_but_not_saved) {
-	if( ! ask_with_custom_yesno("Alignment was modified but not saved\n"
-		"Do you want to  read a new alignment?", "Read", "Cancel") ) return; 
-	}
-if(filename == NULL) {
-#ifdef WIN32
-	char wpattern[100];
-	p = wpattern;
-	if(file_format != -1) {
-		sprintf(wpattern, "%s format (*.%s)%c*.%s%c", 
-			f_format_names[file_format], f_format_exts[file_format], 0, 
-			f_format_exts[file_format], 0);
-		p = wpattern + strlen(wpattern) + 1;
-		p = p + strlen(p) + 1;
-		}
-	sprintf(p, "any%c*%c", 0, 0);
-	filename = MG_win32_file_chooser(message, wpattern, "", 
-		file_format == -1 ? NULL : f_format_exts[file_format], 
-		FALSE, NULL);
-#else
-#ifdef __APPLE__
-	filename = (char *)MAC_file_chooser(message,NULL,"");
-#else
-	char pattern[20];
-	if(file_format != -1) sprintf(pattern, "*.%s", f_format_exts[file_format]); 
-	else strcpy(pattern, "[^.]*");
-	filename = (char *)fl_file_chooser(message,pattern,"",0);
-#endif
-#endif
-	if(filename==NULL) return;
-	}
-if(file_format == -1) {
-	file_format = what_format(filename);
-	if(file_format < 0) {
-			fl_alert("File %s\nis not of a format readable by seaview", filename);
-			return;
-			}
-	}
-my_watch_cursor(view->dnawin);
-if(view->alt_col_seq != NULL) {
-	reference_toggle(view, FALSE);
-	}
-free_alignment(view);
-if(file_format == MASE_FORMAT) {
-	view->tot_seqs = read_mase_seqs_header(filename, &view->sequence,
-		&view->seqname, &view->comments, &view->header,
-		&err_message);
-/* interpreter les regions du header du fichier mase */
-	view->regions = parse_regions_from_header(view->header);
-/* interpreter les species sets du fichier mase */
-	view->numb_species_sets = parse_species_sets_from_header(view->header,
-	view->list_species_sets, view->name_species_sets, view->tot_seqs);
-/* interpreter les comment lines du header */
-view->tot_comment_lines = parse_comment_lines_from_header(view->header,
-	&(view->comment_line), &(view->comment_name), 
-	&(view->comment_length) , &(view->max_seq_length));
-	}
-else if(file_format == FASTA_FORMAT)
-	view->tot_seqs = read_fasta_align(filename, &view->sequence,
-		&view->seqname, &view->comments, &view->header, &err_message);
-else if(file_format == PHYLIP_FORMAT)
-	view->tot_seqs = read_phylip_align(filename, &view->sequence,
-		&view->seqname, &view->comments, &view->header, &err_message);
-else if(file_format == CLUSTAL_FORMAT)
-	view->tot_seqs = read_clustal_align(filename, &view->sequence,
-		&view->seqname, &view->comments, &view->header, &err_message);
-else if(file_format == MSF_FORMAT)
-	view->tot_seqs = read_msf_align(filename, &view->sequence,
-		&view->seqname, &view->comments, &view->header, &err_message);
-else if(file_format == NEXUS_FORMAT) {
-	int **list_sp = NULL; char **name_sp = NULL; int i;
-	view->tot_seqs = read_nexus_align(filename, &view->sequence,
-		&view->seqname, &view->comments, &view->header,
-		&err_message, &view->regions, &view->numb_species_sets,
-		&list_sp, &name_sp, &view->tot_comment_lines, 
-		&view->comment_name, &view->comment_line, 
-		&view->comment_length, &protein);
-	for(i= 0; i < view->numb_species_sets; i++) {
-		view->list_species_sets[i] = list_sp[i];
-		view->name_species_sets[i] = name_sp[i];
-		}
-	if(list_sp != NULL) free(list_sp); 
-	if(name_sp != NULL) free(name_sp);
-	}
-if(view->tot_seqs == 0) {
-	fl_reset_cursor(view->dnawin);
-	fl_alert("Error while reading file %s\n%s", filename,
-		err_message);
-	view->DNA_obj->parent()->redraw();
-	return;
-	}
-if(file_format != NEXUS_FORMAT) protein = is_a_protein_seq(view->sequence[0]);
-p = extract_filename(filename);
-view->dnawin->label(PREPARE_LABEL(p));
-if(view->menu_file != NULL) {
-	Fl_Menu_Item *items = 
-		(Fl_Menu_Item *) ((Fl_Menu_ *)view->menu_file)->menu();
-	if(file_format == view->format_for_save) {
-		items[SAVE].activate();
-		items[SAVE_AS].activate();
-		}
-	else	{
-		items[SAVE_AS].activate();
-		if(view->masename != NULL) {
-			free(view->masename);
-			view->masename = filename = NULL;
-			}
-		}
-	}
-init_dna_scroller(view, view->tot_seqs, filename, protein, view->header);
-view->DNA_obj->parent()->redraw();
-fl_reset_cursor(view->dnawin);
-view->DNA_obj->take_focus();
-return;
-}
-
-
-int ask_with_custom_yesno(const char *text, const char *yes, const char *no)
-{
-return fl_choice(text, no, yes, NULL);
-}
-
-
-void mainwin_close_callback(Fl_Widget *form, void *data)
-{
-SEA_VIEW *view = (SEA_VIEW *)data;
-if(view->modif_but_not_saved) {
-	if(! ask_with_custom_yesno("Alignment was modified but not saved\n"
-		"Do you want to quit anyway?", "Quit", "Cancel") ) return;
-	}
-#ifdef __APPLE__
-char value[50];
-sprintf(value, "%dx%d", view->dnawin->w(),  view->dnawin->h() );
-set_res_value("window", value);
-save_resources();
-#endif
-exit(0);
-}
-
-
-void file_menu_callback(Fl_Widget *ob, long which)
-{
-SEA_VIEW *view;
-char pattern[20];
-static char fsel_message[] = "seaview: choose file and format";
-char *filename;
-int reponse = ((Fl_Menu_Button*)ob)->value();
-
-view = (SEA_VIEW *) ob->user_data();
-sprintf(pattern, "*.%s", f_format_exts[view->format_for_save]);
-if(reponse == QUIT) { /* quit */
-	mainwin_close_callback(view->dnawin, view);
-	}
-else if(reponse == OPEN_ANY) { 
-#ifdef __APPLE__
-	Fl::e_state = 0; // contre bug fltk/MacOS qui laisse e_state plein apres cmd-O
-#endif
-	load_alignment_file(view, NULL, 
-		"Choose an alignment file",  (known_format)-1);
-	}
-else if(reponse == OPEN_MASE) { 
-	load_alignment_file(view, NULL, 
-		"Choose a .mase file",  MASE_FORMAT);
-	}
-else if(reponse == OPEN_PHYLIP )	{  
-	load_alignment_file(view, NULL,
-		"Choose a Phylip file" ,  PHYLIP_FORMAT );
-	}
-else if(reponse == OPEN_CLUSTAL )	{  
-	load_alignment_file(view, NULL,
-		"Choose a Clustal file" ,  CLUSTAL_FORMAT );
-	}
-else if(reponse == OPEN_MSF )	{  
-	load_alignment_file(view, NULL,
-		"Choose an MSF file",  MSF_FORMAT );
-	}
-else if(reponse == OPEN_FASTA )	{  
-	load_alignment_file(view, NULL,
-		"Choose a Fasta file",  FASTA_FORMAT );
-	}
-else if(reponse == OPEN_NEXUS )	{  
-	load_alignment_file(view, NULL,
-		"Choose a NEXUS file",  NEXUS_FORMAT );
-	}
-else if(reponse == SAVE || reponse == SAVE_AS) 	{ 
-	char *err;
-	if(reponse == SAVE_AS) { /* Save as */
-		FILE *in;
-		filename = fl_file_chooser_save_as(fsel_message,
-			pattern, 
-			view->masename, view);
-		if(filename==NULL) return;
-#ifndef __APPLE__
-		in = fopen(filename,"r");
-		if(in != NULL) {
-			char tmp[200];
-			fclose(in);
-			sprintf(tmp, "This file already exists\n%s\n"
-				"Do you want to overwrite it?", filename);
-			if( ! ask_with_custom_yesno(tmp, "Overwrite", "Cancel") ) 
-				return;
-			}
-#endif
-		}
-	else {
-		filename = view->masename;
-		}
-	my_watch_cursor(view->dnawin);
-	save_active_region(view, TRUE);
-	err = save_alignment_or_region(filename, view->sequence, view->comments,
-		view->header, view->seqname, view->tot_seqs, view->each_length,
-		view->regions, NULL, view->format_for_save,
-		view->numb_species_sets, view->list_species_sets,
-		view->name_species_sets, NULL, 0, view->protein,
-		view->tot_comment_lines, view->comment_name, 
-		view->comment_line);
-	fl_reset_cursor(view->dnawin);
-	if(err != NULL) fl_alert(err);
-	else 	{
-		if(reponse == SAVE_AS) {
-			if(view->masename != NULL) free(view->masename);
-			view->masename=(char *)malloc(strlen(filename)+1);
-			if(view->masename == NULL) out_of_memory();
-			strcpy(view->masename,filename);
-			view->dnawin->label(PREPARE_LABEL(extract_filename(filename)));
-			Fl_Menu_Item *items = 
-				(Fl_Menu_Item *) ((Fl_Menu_ *)ob)->menu();
-			items[SAVE].activate();
-			}
-		view->modif_but_not_saved = FALSE;
-		}
-	}
-else if(reponse == SAVE_REGIONS) {  /* save current regions choice */
-	char *err;
-	static char regions_only_filename[200];
-	static int first = TRUE;
-	if(first) {
-	 	strcpy(regions_only_filename, "regions");
-		if( strchr(pattern,'.') != NULL)
-			strcat(regions_only_filename, 
-				pattern+1);
-		first = FALSE;
-		}
-	if(view->active_region == NULL) return;
-	filename = fl_file_chooser_save_as(fsel_message,
-			pattern, regions_only_filename, view);
-	if(filename==NULL) return;
-	my_watch_cursor(view->dnawin);
-	err = save_alignment_or_region(filename, view->sequence, view->comments,
-		view->header, view->seqname, view->tot_seqs, view->each_length,
-		NULL, view->active_region, view->format_for_save,
-		0, NULL, NULL, view->sel_seqs, view->tot_sel_seqs, 
-		view->protein, 0, NULL, NULL);
-	fl_reset_cursor(view->dnawin);
-	if(err != NULL) fl_alert(err);
-	else strcpy(regions_only_filename, extract_filename(filename));
-	}
-else if(reponse == PRINTOUT && view->tot_seqs > 0) {
-	int anerr;
-	FILE *in;
-	char suggested[200], *p;
-	
-	strcpy(suggested, extract_filename(view->masename) );
-	p = strrchr(suggested, '.');
-	if(p != NULL) *p = 0;
-#ifdef NO_PDF
-	strcat(suggested, ".ps");
-#else
-	strcat(suggested, ".pdf");
-#endif
-if( view->alt_col_seq != NULL ) {
-		for(anerr = 0; anerr < view->tot_seqs; anerr++)
-			if(view->sel_seqs[anerr]) break;
-		}
-	else	anerr = -1;
-#ifdef WIN32
-	filename = MG_win32_file_chooser("Enter a pdf file name", "pdf format\0*.pdf\0", suggested, "pdf",
-		TRUE, NULL);
-#elif defined(__APPLE__)
-	filename = (char *) fl_file_chooser_plus(
-		"Enter a pdf file name", "*.pdf", suggested, 
-		(anerr >= 0 ? TRUE : FALSE) );
-#elif defined(NO_PDF)
-	filename = fl_file_chooser("Enter a ps file name", "*.ps", suggested, 0);
-#else
-	filename = fl_file_chooser("Enter a pdf file name", "*.pdf", suggested, 0);
-#endif
-	if(filename==NULL) return;
-#ifndef __APPLE__
-	in = fopen(filename,"r");
-	if(in != NULL) {
-		char tmp[200];
-		fclose(in);
-		sprintf(tmp, "This file already exists\n%s\n"
-				"Do you want to overwrite it?", filename);
-		if( ! ask_with_custom_yesno(tmp, "Overwrite", "Cancel") ) 
-			return;
-		}
-#endif
-	my_watch_cursor(view->dnawin);
-	anerr = pdf_printout(view, filename, printout_fontsize,
-		printout_block, printout_pageformat, printout_vary, anerr, printout_black);
-	fl_reset_cursor(view->dnawin);
-	if( anerr ) fl_alert("Error while writing to file %s",
-		filename);
-	}
-#if !defined( __APPLE__)
-else if(reponse == PDFOPTIONS ) {
-	pdfps_options_dialog(view);
-	}
-#endif
-}
-
-
-
-#if !defined( __APPLE__)
-
-static void printout_callback(Fl_Widget *obj, void *data)
-{
-const char *p;
-
-p = ((Fl_Input *)obj)->value();
-sscanf(p, "%d", (int *)data);
-}
-
-
-static void ok_callback(Fl_Widget *obj)
-{
-if(obj->window() == NULL) obj->hide();
-else obj->window()->hide();
-}
-
-
-static void paper_callback(Fl_Widget *obj)
-{
-printout_pageformat = (paperformat)((Fl_Choice *)obj)->value();
-}
-
-static void variable_callback(Fl_Widget *obj)
-{
-printout_vary = ! printout_vary;
-}
-
-
-static void radio_callback(Fl_Widget *obj)
-{
-Fl_Group *group;
-Fl_Round_Button **fils;
-
-if( ! ((Fl_Round_Button *)obj)->value() ) {
-	((Fl_Round_Button *)obj)->value(1);
-	return;
-	}
-printout_black = !printout_black;
-group = obj->parent();
-fils = (Fl_Round_Button **)((Fl_Group *)group)->array();
-fils[0]->value(!printout_black);
-fils[1]->value(printout_black);
-}
-
-void pdfps_options_dialog(SEA_VIEW *view)
-{
-static Fl_Window *pdf_form = NULL;
-static Fl_Input *sizeinput, *blockinput;
-static Fl_Choice *paper;
-static Fl_Round_Button *colorb, *blackb;
-static Fl_Check_Button *variable;
-Fl_Button *ok;
-Fl_Group *radiog;
-int x, y, w, h;
-char txt[20];
-
-if(pdf_form == NULL) {
-fl_font(FL_HELVETICA, FL_NORMAL_SIZE);
-
-pdf_form = new Fl_Window(400,80);
-pdf_form->box(FL_FLAT_BOX);
-pdf_form->label("Set "PDF_OR_PS" output options");
-
-x = 5 + (int)fl_width("block size:"); y = 5; w = 50; h = 25;
-sizeinput = new Fl_Input(x, y, w, h, "font size:");
-sizeinput->callback(printout_callback, &printout_fontsize);
-blockinput = new Fl_Input(x, y + sizeinput->h() + 5 , w, h, "block size:");
-blockinput->callback(printout_callback, &printout_block);
-paper = new Fl_Choice(x + sizeinput->w() + (int)fl_width("paper size:") + 15, y, 
-	(int)fl_width("LETTER") + 30, h, "paper size:");
-paper->add("A4|LETTER");
-paper->callback(paper_callback);
-
-x = paper->x() + paper->w() + 5;
-radiog = new Fl_Group(x, y, (int)fl_width("color") + 25, 2 * h + 3);
-radiog->box(FL_DOWN_FRAME);
-colorb = new Fl_Round_Button(x, y, radiog->w(), h, "color");
-blackb = new Fl_Round_Button(x, y + colorb->h() + 5, radiog->w(), h, "B&&W");
-blackb->value(printout_black);
-colorb->callback(radio_callback);
-blackb->callback(radio_callback);
-radiog->end();
-
-x = blockinput->x() + blockinput->w() + 5;
-variable = new Fl_Check_Button(x, blockinput->y(), (int)fl_width("Variable sites only") + 25, h, "Variable sites only");
-variable->box(FL_DOWN_FRAME);
-variable->callback(variable_callback);
-
-ok = new Fl_Button(radiog->x() + radiog->w() + 5, variable->y(), 25, h, "OK");
-ok->callback(ok_callback);
-
-pdf_form->end();
-pdf_form->resizable(NULL);
-pdf_form->position((Fl::w() - pdf_form->w())/2, (Fl::h() - pdf_form->h())/2);
-pdf_form->set_modal();
-}
-
-sprintf(txt, "%d", printout_fontsize);
-sizeinput->value(txt);
-sprintf(txt, "%d", printout_block);
-blockinput->value(txt);
-paper->value(printout_pageformat);
-colorb->value(!printout_black);
-blackb->value(printout_black);
-variable->value(printout_vary);
-if(view->alt_col_seq != NULL && view->tot_sel_seqs == 1) variable->show();
-else variable->hide();
-pdf_form->show();
-}
-#endif
-
-#if defined(__APPLE__) && ! TARGET_RT_MAC_MACHO
-
-char *read_next_help_line(char *line, int lline, void *v_in)
-{
-static char *pos;
-char *in, *l = line;
-
-in = (char *)v_in;
-if(line == NULL) {
-	pos = in;
-	return NULL;
-	}
-in = pos - 1;
-do	*(line++) = *(++in); while(*in != 0 && *in != '\n' && *in != '\r');
-if(*in == 0) return NULL;
-pos = ++in;
-*line = 0;
-return l;
-}
-
-#else
-
-#define  read_next_help_line(a,b,c) fgets(a,b,(FILE *)c)
-
-#endif
-
-
-char *get_next_help_line(void *in, char *line, int lline)
-{
-#ifdef WIN32
-static const char match[] = "WIN32";
-#elif defined(__APPLE__)
-static const char match[] = "__APPLE__";
-#else
-static const char match[] = "unix";
-#endif
-static int accept = TRUE;
-static int found = FALSE;
-if( read_next_help_line(line, lline, in) == NULL) { accept = TRUE; return NULL; }
-while(*line != '#') {
-	if(accept) return line;
-	if( read_next_help_line(line, lline, in) == NULL) { accept = TRUE; return NULL; }
-	}
-if(strncmp(line, "#ifdef", 6) == 0 || strncmp(line, "#if ", 4) == 0) {
-	accept =  ( strstr(line, match) != NULL ) ;
-	found = accept;
-	}
-else if(strncmp(line, "#elif", 5) == 0) {
-	if(found) accept = FALSE;
-	else if( strstr(line, match) != NULL ) {
-		accept = TRUE; found = TRUE;
-		}
-	}
-else if(strncmp(line, "#else", 5) == 0) {
-	if(found) accept = FALSE;
-	else {
-		accept = TRUE; found = TRUE;
-		}
-	}
-else if(strncmp(line, "#endif", 6) == 0) {
-	accept = TRUE;
-	}
-else
-	accept = TRUE;  // should not occur
-return get_next_help_line(in, line, lline);
-}
-
-
-typedef struct {
-	Fl_Widget *br_item, *box;
-	void *in;
-	} browser_struct;
-
-void browser_titres_callback(Fl_Widget *ob, void *data)
-{
-int reponse;
-static char line[200];
-const char *p;
-browser_struct *br_data;
-int w;
-int charwidth, newwidth, maxl;
-Fl_Browser *browser_item;
-
-reponse = ((Fl_Browser*)ob)->value();
-if(reponse == 0) return;
-br_data = (browser_struct *)data;
-p = ((Fl_Browser*)ob)->text(reponse);
-#if defined(__APPLE__) && !TARGET_RT_MAC_MACHO
-get_next_help_line(br_data->in, NULL, 0);
-#else
-rewind((FILE *)br_data->in);
-#endif
-br_data->box->hide();
-browser_item = (Fl_Browser *)br_data->br_item;
-browser_item->clear();
-while( get_next_help_line( br_data->in, line, sizeof(line)) != NULL) {
-	if(strncmp(line, ">>>", 3) != 0) continue;
-	line[ strlen(line) - 1 ] = 0;
-	if(strcmp(line+3, p) != 0) continue;
-	maxl = 0;
-	while( get_next_help_line(br_data->in, line, sizeof(line)) != NULL && 
-			strncmp(line, ">>>", 3) != 0 ) {
-		line[ strlen(line) - 1 ] = 0;
-		if(*line == 0) strcpy(line," ");
-		browser_item->add(line);
-		maxl = FL_max(maxl, (int)strlen(line));
-		}
-	/* agrandir fenetre si pas assez large */
-	w = browser_item->w();
-	fl_font( browser_item->textfont(), browser_item->textsize() );
-	charwidth = (int)fl_width('W');
-	maxl++;
-	if( w < maxl * charwidth) {
-		newwidth = ob->window()->w() + (maxl * charwidth - w);
-		ob->window()->size(newwidth, ob->window()->h() );
-		}
-	br_data->box->label(p);
-	break;
-	}
-br_data->box->show();
-}
-
-
-void browser_ok_callback(Fl_Widget *ob, long which)
-{
-ob->window()->hide();
-}
-
-
-void free_colseqs_by_difference(char ***alt_col_seq, int total, int numb_gc)
-{
-int num, c;
-
-if(alt_col_seq == NULL) return;
-for(num = 0; num < total; num++) {
-	for(c = 0; c < numb_gc; c++) free(alt_col_seq[num][c]);
-	free(alt_col_seq[num]);
-	}
-if( total > 0 ) free(alt_col_seq);
-}
-
-
-void reference_toggle(SEA_VIEW *view, int on)
-{
-char ***tmp;
-static int old_pos;
-
-if(view->numb_gc == 1) return;
-Fl_Menu_Button *menu_props = (Fl_Menu_Button *)view->bouton_props;
-props_menu_parts *props_parts = (props_menu_parts *)menu_props->user_data();
-if(on) { /* tenter de passer en mode par reference */
-	if( view->tot_sel_seqs != 1 || view->numb_gc == 1) {
-		((Fl_Menu_Item *)menu_props->menu() + props_parts->reference)->clear();
-		return;
-		}
-	my_watch_cursor(view->dnawin);
-	for(old_pos = 0; old_pos < view->tot_seqs; old_pos++)
-		if(view->sel_seqs[old_pos]) break;
-	deplacer_grp_seqs(view, 1);
-	view->modif_but_not_saved = FALSE;
-	view->first_seq = 1;
-	view->vertsli->Fl_Slider::value(1);
-	view->alt_col_seq = prepcolseqs_by_difference(view->sequence, 
-		view->tot_seqs, 0, 
-		view->max_seq_length,
-		view->each_length, 
-		( view->protein ? get_color_for_aa : get_color_for_base ), 
-		view->numb_gc, view->allow_lower);
-	fl_reset_cursor(view->dnawin);
-	if(view->alt_col_seq == NULL) {
-		view->DNA_obj->redraw();
-		((Fl_Menu_Item *)menu_props->menu() + props_parts->reference)->clear();
-		return;
-		}
-	tmp = view->alt_col_seq;
-	view->alt_col_seq = view->col_seq;
-	view->col_seq = tmp;		
-	view->DNA_obj->redraw();
-	((Fl_Menu_Item *)menu_props->menu() + props_parts->colors - 1)->deactivate();
-	((Fl_Menu_Item *)menu_props->menu() + props_parts->reference)->set();
-	view->menu_edit->labelcolor(FL_INACTIVE_COLOR);
-	view->menu_edit->deactivate();
-	view->menu_species->labelcolor(FL_INACTIVE_COLOR);
-	view->menu_species->deactivate();
-	}
-else	{ /* retour mode normal */
-	my_watch_cursor(view->dnawin);
-	tmp = view->alt_col_seq;
-	view->alt_col_seq = view->col_seq;
-	view->col_seq = tmp;		
-	free_colseqs_by_difference(view->alt_col_seq, view->tot_seqs, 
-		view->numb_gc);
-	view->alt_col_seq = NULL;
-	deplacer_grp_seqs(view, old_pos + 1);
-	view->modif_but_not_saved = FALSE;
-	view->DNA_obj->redraw();
-	((Fl_Menu_Item *)menu_props->menu() + props_parts->colors - 1)->activate();
-	((Fl_Menu_Item *)menu_props->menu() + props_parts->reference)->clear();
-	view->menu_edit->labelcolor(FL_BLACK);
-	view->menu_edit->activate();
-	view->menu_species->labelcolor(FL_BLACK);
-	view->menu_species->activate();
-	fl_reset_cursor(view->dnawin);
-	}
-}
-
-
-void help_callback(Fl_Widget *ob, void *data)
-{
-static browser_struct browser_data;
-static int first = TRUE;
-static Fl_Window *help_form;
-
-if(first) {
-	char line[85];
-	Fl_Browser *browser_titres, *browser_item;
-	Fl_Button *ok_button;
-	Fl_Widget *br_item_label;
-	int titres_width, fin_titres;
-#if defined(__APPLE__) 
-#if ! TARGET_RT_MAC_MACHO
-	get_next_help_line(data, NULL, 0);
-#else
-	data = (void *)fopen( (char *)data, "r" );
-#endif
-#else
-	data = (void *)open_path( (char *)data );
-#endif
-	if(data == NULL) {
-		fl_alert(
-#ifdef __APPLE__
-	"No help information in program resources"
-#else
-	"Help file %s\nnot found in PATH directories nor in current directory", (char *)data
-#endif
-			);
-		return;
-		}
-	first = FALSE;
-	help_form = new Fl_Window( 705, 350);
-	help_form->label("Help");
-	help_form->box(FL_FLAT_BOX);
-	fl_font(FL_HELVETICA, 12);
-	titres_width = (int)fl_width("XXXXXX"); /* mieux ensuite */
-	browser_titres = new Fl_Hold_Browser(5, 20, titres_width, 
-		help_form->h() - 50, "Choose help item");
-	browser_titres->textsize(12);
-	browser_titres->has_scrollbar(Fl_Browser_::VERTICAL);
-	browser_titres->callback(browser_titres_callback, &browser_data);
-	browser_titres->align(FL_ALIGN_TOP);
-	browser_titres->color(FL_LIGHT1, browser_titres->selection_color());
-	while( get_next_help_line(data, line, sizeof(line)) != NULL) {
-		if(strncmp(line, ">>>", 3) != 0) continue;
-		line[ strlen(line) - 1 ] = 0;
-		browser_titres->add(line+3);
-		titres_width = FL_max(titres_width, 
-			(int)fl_width(line + 3) + (int)fl_width("XX") );
-		}
-	((Fl_Widget*)browser_titres)->size(titres_width, browser_titres->h() );
-	ok_button = new Fl_Button(5,help_form->h() - 25, titres_width,20,"OK");
-	ok_button->callback(browser_ok_callback, 0);
-	fin_titres = titres_width + 10;
-	browser_item = new Fl_Browser(fin_titres, 20, 
-		700 - fin_titres, help_form->h() - 25, "");
-	browser_item->has_scrollbar(Fl_Browser_::VERTICAL);
-	browser_item->align(FL_ALIGN_TOP);
-	browser_item->color(FL_LIGHT1, browser_item->selection_color());
-	browser_item->textsize(12);
-	browser_item->textfont(FL_COURIER);
-	br_item_label = new Fl_Box(FL_NO_BOX, fin_titres, 0, 
-		700 - fin_titres, 20, "Help Info");
-	br_item_label->align(FL_ALIGN_CENTER);
-	browser_data.box = br_item_label;
-	browser_data.br_item = browser_item;
-	browser_data.in = data;
-	help_form->add_resizable(
-		*new Fl_Box(browser_item->x(), browser_item->y(),
-		browser_item->w(), browser_titres->h() ) );
-	help_form->end();
-	}
-help_form->show();
-}
-
-
-int insert_gaps_at(SEA_VIEW *view, int seq, int site, int total)
-{
-char *pos, **psequence;
-int l, c, gapcolor, *plength;
-if(view->cursor_in_comment) {
-	psequence = view->comment_line;
-	plength = view->comment_length;
-	}
-else	{
-	psequence = view->sequence;
-	plength = view->each_length;
-	gapcolor = ( view->protein ? 
-		get_color_for_aa('-') : get_color_for_base('-') );
-	}
-l = plength[seq-1];
-if(site > l + 1) return total;
-if( l + total > view->max_seq_length) total = view->max_seq_length - l;
-pos = psequence[seq-1] + site - 1;
-memmove(pos+total, pos, l - site + 2);
-memset(pos, '-', total);
-if( (!view->cursor_in_comment) && view->numb_gc > 1) {
-	for (c=0; c<view->numb_gc; c++) {
-	   pos= &view->col_seq[seq-1][c][site-1];
-	   memmove(pos+total, pos, l - site + 2);
-	   memset(pos,' ',total);
-	   }
-	memset(view->col_seq[seq-1][gapcolor] + site - 1, '-', total);
-	}
-plength[seq-1] += total;
-view->modif_but_not_saved = TRUE;
-return total;
-}
-
-
-int delete_gaps_before(SEA_VIEW *view, int numseq, int numsite, int total)
-{
-char *site, *finseq, **psequence;
-int c, count = -1, l, retval, *plength;
-
-psequence = view->sequence;
-plength = view->each_length;
-site = psequence[numseq-1] + numsite - 1;
-finseq = psequence[numseq-1] + plength[numseq-1] - 1;
-do	{ site--; count++; }
-while ( count < total && site >= psequence[numseq-1] && 
-	( view->allow_seq_edit || *site == '-' || site > finseq) );
-if(count == 0) return 0;
-/* ne rien faire si on efface au dela de la fin de la seq */
-if(numsite - count > plength[numseq-1]) return count;
-l = plength[numseq-1];
-retval = count;
-if(numsite > l) { /* effacer depuis au dela fin jusqu'a interieur seq */
-	count -= (numsite - l - 1);
-	numsite = l + 1;
-	}
-site = psequence[numseq-1] + numsite - 1;
-memmove(site-count, site, l - numsite + 2);
-if( view->numb_gc > 1) {
-	for (c=0; c < view->numb_gc; c++) {
-		site= view->col_seq[numseq-1][c] + numsite - 1;
-		memmove(site-count,site, l - numsite + 2);
-		}
-	}
-plength[numseq-1] -= count;
-view->modif_but_not_saved = TRUE;
-return retval;
-}
-
-
-void adjust_menu_edit_modes(SEA_VIEW *view)
-{
-if(view->menu_edit != NULL) {
-	Fl_Menu_Item *items = (Fl_Menu_Item *) ((Fl_Menu_ *)view->menu_edit)->menu();
-	if(view->tot_sel_seqs != 0) {
-		items[DELETE_SEQ].activate();
-		items[CONSENSUS_SEQ].activate();
-		if(view->protein) items[EXCHANGE_UT].deactivate();
-		else items[EXCHANGE_UT].activate();
-		}
-	else	{
-		items[DELETE_SEQ].deactivate();
-		items[EXCHANGE_UT].deactivate();
-		}
-Fl_Menu_Button *menu_props = (Fl_Menu_Button *)view->bouton_props;
-props_menu_parts *props_parts = (props_menu_parts *)menu_props->user_data();
-	Fl_Menu_Item *byref = (Fl_Menu_Item *)menu_props->menu() + props_parts->reference;
-	if(view->tot_sel_seqs == 1) {
-		byref->activate();
-		items[RENAME_SEQ].activate();
-		items[DUPLICATE_SEQ].activate();
-		items[EDIT_COMMENTS].activate();
-		items[EDIT_SEQ].activate();
-		if(view->protein) {
-			items[COMPLEMENT_SEQ].deactivate();
-			items[REVERSE_SEQ].deactivate();
-			}
-		else {
-			items[COMPLEMENT_SEQ].activate();
-			items[REVERSE_SEQ].activate();
-			}
-		}
-	else	{
-		byref->deactivate();
-		items[RENAME_SEQ].deactivate();
-		items[DUPLICATE_SEQ].deactivate();
-		items[EDIT_COMMENTS].deactivate();
-		items[EDIT_SEQ].deactivate();
-		items[COMPLEMENT_SEQ].deactivate();
-		items[REVERSE_SEQ].deactivate();
-		}
-	if(view->tot_sel_seqs == 2) 
-		items[DOT_PLOT].activate();
-	else
-		items[DOT_PLOT].deactivate();
-	if(view->tot_sel_seqs >= 2) {
-		items[ALIGN_SEQS].activate();
-		items[CONSENSUS_SEQ].activate();
-		}
-	else	{
-		items[ALIGN_SEQS].deactivate();
-		items[CONSENSUS_SEQ].deactivate();
-		}
-	}
-}
-
-
-void select_deselect_seq(SEA_VIEW *view, int new_seq)
-{
-/* new_seq = # seq a select/deselect; si 0: tout deselectionner; 
-   si -1: tout selectionner 
-   si -2: ne pas changer la selection mais ajuster l'interface selon son etat
-*/
-if(new_seq > 0) { /* traiter une sequence */
-	view->sel_seqs[new_seq-1] = !view->sel_seqs[new_seq-1];
-	if(view->sel_seqs[new_seq-1])
-		++view->tot_sel_seqs;
-	else
-		--view->tot_sel_seqs;
-	}
-else if(new_seq == 0)	{ /* tout deselectionner */
-	view->tot_sel_seqs = 0;
-	memset(view->sel_seqs, 0, view->tot_seqs * sizeof(int));
-	}
-else if(new_seq == -1)	{ /* tout selectionner */
-	int i;
-	view->tot_sel_seqs = view->tot_seqs;
-	for(i=0; i < view->tot_seqs; i++) view->sel_seqs[i] = TRUE;
-	}
-adjust_menu_edit_modes(view);
-if(view->menu_species != NULL) {
-	int taille, valeur;
-	Fl_Menu_Item *items =
-		(Fl_Menu_Item *)((Fl_Menu_*)view->menu_species)->menu();
-	if(view->tot_sel_seqs == 0)
-		items[0].deactivate();
-	else
-		items[0].activate();
-	items[1].deactivate();
-	get_menu_taille_valeur(view->menu_species, &taille, &valeur);
-	if(valeur != 0) 
-		update_menu_taille_valeur(view->menu_species, taille, 0, 2);
-	}
-}
-
-
-void deplacer_grp_seqs(SEA_VIEW *view, int target)
-{
-/* deplacer toutes les seqs selectionnees pour positionner la premiere
-d'entre elles en position target */
-int *new_rank, *old_rank, old, new_val, numset;
-char **aux;
--- target;
-new_rank = (int *)malloc(view->tot_seqs * sizeof(int));
-old_rank = (int *)malloc(view->tot_seqs * sizeof(int));
-aux = (char **)malloc( view->tot_seqs * sizeof(char *) );
-if(new_rank == NULL || old_rank == NULL || aux == NULL) out_of_memory();
-/* compute old_rank[new_val] = old */
-new_val = -1;
-/* place first all non selected seqs */
-for(old = 0; old < view->tot_seqs; old++) {
-	if(!view->sel_seqs[old]) old_rank[++new_val] = old;
-	}
-/* allocate room for selected seqs */
-if(target + view->tot_sel_seqs > view->tot_seqs)
-	target = view->tot_seqs - view->tot_sel_seqs;
-old = view->tot_seqs - view->tot_sel_seqs - target;
-if(old != 0)
-	memmove(old_rank + target + view->tot_sel_seqs, old_rank + target,
-		old * sizeof(int));
-/* insert selected seqs */
-for(old = 0; old < view->tot_seqs; old++)
-	if(view->sel_seqs[old]) old_rank[target++] = old;
-/* compute new_rank[old] = new_val */
-for(new_val = 0; new_val < view->tot_seqs; new_val++)
-	new_rank[old_rank[new_val]] = new_val;
-/* displace all sequence order-dependent ingredients */
-/* deplacer la position du curseur */
-if(!view->cursor_in_comment) {
-	view->cursor_seq = new_rank[view->cursor_seq - 1] + 1;
-	view->old_cursor_seq = view->cursor_seq;
-	}
-/* deplacer les seqs */
-for(old = 0; old < view->tot_seqs; old++)
-	aux[new_rank[old]] = view->sequence[old];
-memcpy(view->sequence, aux, view->tot_seqs * sizeof(char *) );
-/* deplacer les noms */
-for(old = 0; old < view->tot_seqs; old++)
-	aux[new_rank[old]] = view->seqname[old];
-memcpy(view->seqname, aux, view->tot_seqs * sizeof(char *) );
-if(view->comments != NULL) {
-	/* deplacer les commentaires */
-	for(old = 0; old < view->tot_seqs; old++)
-		aux[new_rank[old]] = view->comments[old];
-	memcpy(view->comments, aux, view->tot_seqs * sizeof(char *) );
-	}
-/* deplacer les seqs en couleurs */
-if(view->numb_gc > 1) {
-	for(old = 0; old < view->tot_seqs; old++)
-		aux[new_rank[old]] = (char *) view->col_seq[old];
-	memcpy(view->col_seq, aux, view->tot_seqs * sizeof(char *) );
-	}
-/* deplacer les sequences selectionnees */
-for(old = 0; old < view->tot_seqs; old++)
-	old_rank[new_rank[old]] = view->sel_seqs[old];
-memcpy(view->sel_seqs, old_rank, view->tot_seqs * sizeof(int) );
-/* deplacer les longueurs de sequences */
-for(old = 0; old < view->tot_seqs; old++)
-	old_rank[new_rank[old]] = view->each_length[old];
-memcpy(view->each_length, old_rank, view->tot_seqs * sizeof(int) );
-/* process species sets */
-for(numset = 0; numset < view->numb_species_sets; numset++) {
-	for(old = 0; old < view->tot_seqs; old++)
-		old_rank[new_rank[old]] = view->list_species_sets[numset][old];
-	memcpy(view->list_species_sets[numset], old_rank, 
-		view->tot_seqs * sizeof(int) );
-	}
-free(aux); free(old_rank); free(new_rank);
-view->modif_but_not_saved = TRUE;
-}
-
-
-void update_current_seq_length(int newlength, SEA_VIEW *view)
-{
-double x; int l;
-if(newlength > view->seq_length) {
-	view->seq_length = 
-		( newlength+20 < view->max_seq_length ? 
-		newlength+20 : view->max_seq_length );
-	l = view->seq_length - view->tot_sites+3;
-	if(l<1) l=1;
-	view->horsli->bounds(1,l);
-	x = ( (double) view->tot_sites ) / 
-		( view->seq_length + 3 ) ;
-	if(x>1) x=1;
-	view->horsli->slider_size(x);
-	}
-}
-
-
-int insert_char_in_seq( int key, int total, SEA_VIEW *view)
-/* to insert the typed key in the sequence at cursor location if it is visible
-returns # of inserted chars if ok, 0 if error (= cursor not visible or 
-max seq size is reached) 
-*/
-{
-char *pos;
-int l, c, *plength;
-if(view->cursor_in_comment) {
-	if( view->cursor_seq < 1 ||
-	   view->cursor_seq >= view->tot_comment_lines ||
-	   view->cursor_site < view->first_site ||
-	   view->cursor_site >= view->first_site + view->tot_sites ) return 0;
-	l = view->comment_length[view->cursor_seq - 1];
-	}
-else	{
-	if( view->cursor_seq < view->first_seq ||
-	   view->cursor_seq >=view->first_seq+view->tot_lines ||
-	   view->cursor_site < view->first_site ||
-	   view->cursor_site >= view->first_site + view->tot_sites ) return 0;
-	l = view->each_length[view->cursor_seq-1];
-	}
-if(view->cursor_site > l + 1) return 0;
-if( l + total > view->max_seq_length) total = view->max_seq_length - l;
-if(total <= 0) return 0;
-if(view->cursor_in_comment) 
-	pos = view->comment_line[view->cursor_seq - 1] + view->cursor_site - 1;
-else
-	pos = view->sequence[view->cursor_seq - 1] + view->cursor_site - 1;
-memmove(pos+total, pos, l - view->cursor_site + 2);
-memset(pos, view->cursor_in_comment || view->allow_lower ? key : toupper(key) ,
-	 total);
-if( (!view->cursor_in_comment) && view->numb_gc > 1) {
-	for (c=0; c<view->numb_gc; c++) {
-	   pos= &view->col_seq[view->cursor_seq-1][c][view->cursor_site-1];
-	   memmove(pos+total, pos, l - view->cursor_site + 2);
-	   memset(pos, ' ' ,total);
-	   }
-	c = (view->protein ? 
-		get_color_for_aa(key) : get_color_for_base(key) );
-	memset(view->col_seq[view->cursor_seq-1][c] + view->cursor_site - 1, 
-		view->allow_lower ? key : toupper(key), total);
-	}
-if(view->cursor_in_comment) 
-	plength = &(view->comment_length[view->cursor_seq-1]);
-else
-	plength = &(view->each_length[view->cursor_seq-1]);
-(*plength) += total;
-update_current_seq_length(*plength, view);
-view->modif_but_not_saved = TRUE;
-return total;
-}
-
-
-/*  The routine that does drawing */
-void DNA_obj::draw(void)
-{
-SEA_VIEW *view = (SEA_VIEW *)this->user_data();
-
-/* returns TRUE if window size was changed by user */
-if( compute_size_params( view, FALSE) ) {
-	view->horsli->redraw();
-	view->vertsli->redraw();
-	}
-if( ( this->damage() & FL_DAMAGE_ALL ) != 0 ) {
-// appel autre que uniquement par damage partiel
-	view->draw_names = -1;
-	view->mod_cursor = view->mod_region_line = view->mod_comment_line = 
-		FALSE; 
-	view->mod_seq = 0;
-	}
-if(view->draw_names) { /* soit tous (<= -1) soit un seul ( >= 1) */
-	draw_seq_names(view->DNA_obj, view);
-	if(view->draw_names > 0 || view->draw_names == -2){
-		/* si > 0 ou -2, ne pas ecrire les seqs*/
-		view->draw_names = -1;
-		return;
-		}
-	}
-if(view->mod_cursor) {
-	/* effacer old_cursor en ecrivant dessus */
-	draw_cursor(view->DNA_obj, FALSE, view->old_cursor_site, 
-		view->old_cursor_seq, view->old_cursor_in_comment);
-	view->mod_cursor = FALSE;
-	}
-else if(view->mod_region_line) {
-	draw_region_line(view->DNA_obj, view);
-	view->mod_region_line = FALSE;
-	}
-else if(view->mod_comment_line) {
-	draw_comment_lines(view->DNA_obj, view);
-	view->mod_comment_line = FALSE;
-	}
-else	{
-#ifdef __APPLE__
-	if(view->tot_seqs == 0) {
-#define DRAG_MESS "alignment file drag zone"
-		fl_color(FL_WHITE);
-		fl_font(FL_TIMES_BOLD_ITALIC, 28 );
-		fl_draw(DRAG_MESS, this->x()+this->w()/2-fl_width(DRAG_MESS)/2, this->y()+this->h()/2);
-		}
-#endif
-	if(view->inverted_colors)
-		    draw_dna_seqs_inverted(view->DNA_obj, view);
-	else
-		    draw_dna_seqs(view->DNA_obj, view);
-	draw_comment_lines(view->DNA_obj, view);
-	}
-view->mod_seq = 0;
-view->draw_names = -1;
-draw_cursor(view->DNA_obj, TRUE , view->cursor_site, view->cursor_seq, 
-	view->cursor_in_comment);
-view->old_cursor_seq = view->cursor_seq;
-view->old_cursor_site = view->cursor_site;
-view->old_cursor_in_comment = view->cursor_in_comment;
-}
-
-
-int my_event_button(void)
-{
-int key;
-
-key = Fl::event_button();  /* key: 1=gauche, 2=centre, 3=droit souris */
-if(emul_3_buttons) {
-	if(Fl::event_state(FL_CTRL)) key = 2;// bouton du milieu par Ctrl-Click
-	else if(Fl::event_state(FL_SHIFT)) key = 3;// bouton  droit par Shift-Click
-	}
-return key;
-}
-
-
-
-int DNA_obj::handle(int event) 
-{
-SEA_VIEW *view;
-/* numero courant de la derniere seq selectionnee pendant selection de seqs
-par glissement de la souris 
-*/
-static int selecting_seqs = 0, sel_seq_move = 0;
-static int modifying_segment = 0;
-int mx = Fl::event_x();
-int my = Fl::event_y();
-
-view = (SEA_VIEW *) ( this->user_data() );
-if(view == NULL) return 1;
-    switch (event)
-    {
-#if defined(__APPLE__) || defined(WIN32)
-// D&D doesn't seem to work under X11, and OK with Win98 but incomplete with WinXP
-    case FL_DND_ENTER:
-   	 	return 1;
-    case FL_DND_DRAG:
-   	 	return 1; 
-    case FL_DND_RELEASE:
- 		{ Fl_Widget *o = this; while(o->parent()->parent() != NULL) o = o->parent();   
-   	 	Fl::focus(o); } //fltk bug: focus must be to direct child of Fl_Window for D&D 
-   	 	return 1;
-    case FL_PASTE:
-   	 	use_initial_file(view, 
-#if defined(__APPLE__) && !TARGET_RT_MAC_MACHO
-   		 OSXpathtoOS9path( Fl::event_text() )
-#else
-   		 (char *)Fl::event_text() 
-#endif
-    );
-   		Fl::focus(this);
-   		return 1;
-#endif
-    case FL_FOCUS: 
-    case FL_UNFOCUS: 
-		return 1;
-    case FL_PUSH: 
-	int key;
-	key = my_event_button();
-	if( Fl::event_clicks() ) { /* double click */
-		int new_seq;
-		Fl::event_clicks(0);
-		new_seq = (my + view->line_height/2 - 
-			view->y_seq)/view->line_height + view->first_seq;
-		if( new_seq < view->first_seq || new_seq > view->tot_seqs ||
-			new_seq >= view->first_seq + view->tot_lines ) break;
-		if(mx < view->x_name || mx >= view->x_seq - view->char_width ||
-			key != 1) break;
-		/* double click sur nom de seq: selection de toutes les seqs */
-		if(view->alt_col_seq != NULL) break;
-		if(view->multipl->argument() > 0) mod_multipl(view,0);
-		select_deselect_seq(view, -1);
-		selecting_seqs = 0;
-		view->draw_names = -2;
-// ceci signifie redraw partiel commande' par draw_names, mod_cursor, ...
-		this->damage(1);
-		}
-	else	{ /* simple click */
-		Fl::focus(this);
-		handle_push(view, mx, my, key, &modifying_segment, 
-			&selecting_seqs, &sel_seq_move);
-		}
-	break;
-     case FL_DRAG: /* mouvement avec souris enfoncee */
-	handle_mouse(view, mx, my, &selecting_seqs, &sel_seq_move, 
-		&modifying_segment);
-	break;
-     case FL_RELEASE:
-//     case FL_LEAVE:
-	if(selecting_seqs) {
-		if(sel_seq_move) {
-			select_deselect_seq(view, sel_seq_move);
-			view->draw_names = sel_seq_move;
-			this->damage(1);
-			}
-		else			
-			select_deselect_seq(view, -2);
-		selecting_seqs = 0;
-		}
-	else if(modifying_segment) {
-		end_change_segment(view);
-		view->draw_names = 0;
-		this->damage(1);
-		modifying_segment = 0;
-		}
-	break;
-     case FL_KEYBOARD:
-	if( Fl::event_state(myFL_CTRL) ) { /* vrai si touche ctrl */
-		return 0; /* ne pas traiter ici car shortcut d'autres widgets */
-		}
-  	if(Fl::event_length() > 0) { /* du vrai texte */
-		handle_keyboard(view, Fl::event_text()[0], TRUE );
-		}
-	else	{ /* une touche genre fleche ou fonction */
-		handle_keyboard(view, Fl::event_key(), FALSE );
-		}
-	break;
-#ifdef __APPLE__
-	 case FL_HIDE:
-	 Fl::e_state = 0; //bug qui conserve cmd modifier apres cmd-H
-	 return 0;
-#endif
-    default :
-	return 0;
-    }
-    return 1;
-}
-
-
-void handle_mouse(SEA_VIEW *view, int mx, int my, 
-	int *p_selecting_seqs, int *p_sel_seq_move, int *p_modifying_segment)
-{ /* mouvement avec souris enfoncee */
-int debut, fin, step, num, new_seq, new_site;
-
-if(*p_selecting_seqs != 0) {
-	new_seq = (my + view->line_height/2 - 
-		view->y_seq)/view->line_height + view->first_seq;
-	if(new_seq == *p_selecting_seqs) return;
-	if( new_seq < view->first_seq || new_seq > view->tot_seqs ||
-		new_seq >= view->first_seq + view->tot_lines ) return;
-	if(!view->sel_seqs[new_seq - 1]) 
-		{ debut= new_seq; fin = *p_selecting_seqs; }
-	else
-		{ debut= *p_selecting_seqs; fin = new_seq; }
-	if(debut < fin) step = 1;
-	else	step = -1;
-	*p_selecting_seqs = new_seq;
-	for(num = debut; num != fin; num += step) {
-		new_seq = debut + fin - step - num - 1;
-		if(view->sel_seqs[new_seq]) {
-			view->sel_seqs[new_seq] = FALSE;
-			--(view->tot_sel_seqs);
-			}
-		else	{
-			view->sel_seqs[new_seq] = TRUE;
-			++(view->tot_sel_seqs);
-			}
-		if(*p_sel_seq_move == new_seq + 1) *p_sel_seq_move = 0;
-		}
-	if(*p_sel_seq_move) {
-		if( view->sel_seqs[*p_sel_seq_move - 1] ) {
-			view->sel_seqs[*p_sel_seq_move - 1] = FALSE;
-			--(view->tot_sel_seqs);
-			}
-		else	{
-			view->sel_seqs[*p_sel_seq_move - 1] = TRUE;
-			++(view->tot_sel_seqs);
-			}
-		*p_sel_seq_move = 0;
-		}
-	view->draw_names = -2;
-	view->DNA_obj->damage(1);
-	}
-else if(*p_modifying_segment != 0) {
-	new_site = (mx - view->x_seq )/view->char_width + 
-		view->first_site;
-	if(new_site == *p_modifying_segment) return;
-	if( new_site < view->first_site || 
-		new_site > view->first_site + view->tot_sites ||
-		new_site > view->region_length ) return;
-	if( continue_change_segment(view, new_site) ) {
-		*p_modifying_segment = new_site;
-		view->draw_names = 0;
-		view->mod_region_line = TRUE;
-		view->DNA_obj->damage(1);
-		}
-	}
-}
-
-
-void handle_push(SEA_VIEW *view, int mx, int my, int key, 
-	int *p_modifying_segment, int *p_selecting_seqs, int *p_sel_seq_move)
-/* key: 1=bouton gauche, 2=centre, 3=droit de la souris */
-{
-int new_site, new_seq, new_line;
-
-if(view->multipl->argument() > 0) mod_multipl(view,0);
-new_seq = (my + view->line_height/2 - view->y_seq)/view->line_height + 
-	view->first_seq;
-new_line = new_seq - view->first_seq + 1;
-new_site = (mx - view->x_seq )/view->char_width + 
-	view->first_site;
-if(view->active_region != NULL && 
-  new_seq == view->first_seq + FL_min(view->tot_lines,view->tot_seqs) &&
-	new_site >= view->first_site && 
-	new_site < view->first_site + view->tot_sites && 
-	new_site <= view->region_length ) {
-/* work with segments: extend, or create, or delete */
-	if(key == 2) { /* middle button:extend left neighbor segment */
-		new_seq = extend_segment_at_left(view, new_site);
-		if(new_seq) fl_ringbell(0);
-		else	{
-			view->draw_names = 0;
-			}
-		}
-	else if(key == 3) { /* right button=>delete segment */
-		new_seq = suppr_segment(view->active_region, new_site,
-			view->region_line);
-		if(new_seq) fl_ringbell(0);
-		else	{
-			view->draw_names = 0;
-			}
-		}
-	else	{ /* left button=>extend or create segment */
-		new_seq = begin_change_segment(view, new_site);
-		if(new_seq) {
-			view->mod_region_line = TRUE;
-			*p_modifying_segment = new_site;
-			}
-		view->draw_names = 0;
-		}
-	if(view->draw_names == 0) {
-		view->DNA_obj->damage(1);
-		}
-	return;
-	}
-if( view->show_comment_lines && new_line >= view->pos_first_comment_line &&
-	new_line < view->pos_first_comment_line + view->tot_comment_lines ) {
-/* dans les comment lines */
-	int num, old;
-	if(key != 1) return;
-	num = new_line - view->pos_first_comment_line + 1;
-	if(mx >= view->x_name && mx < view->x_seq - view->char_width) {
-	/* click sur nom de comment line: selection/deselection */
-		old = view->active_comment_line;
-		if(old == num)
-			view->active_comment_line = 0;
-		else
-			view->active_comment_line = num;
-		if(old == num || old == 0)
-			view->mod_comment_line = num;
-		else	{
-			view->mod_comment_line = 0;
-			view->mod_seq = 1; // astuce
-			}
-		view->draw_names = 0;
-		update_menu_footers(view);
-		view->DNA_obj->damage(1);
-		}
-	else if( new_site >= view->first_site && 
-		new_site < view->first_site + view->tot_sites &&
-		new_site <= view->comment_length[num - 1] + 1 ) {
-		/* click sur comment: positionnement du curseur */
-		view->cursor_site = new_site;
-		view->cursor_seq = num;
-		view->draw_names = 0;
-		view->mod_cursor = TRUE;
-		view->cursor_in_comment = TRUE;
-		view->DNA_obj->damage(1);
-		}
-	return;
-	}
-	
-if( new_seq < view->first_seq || new_seq > view->tot_seqs ||
-	new_seq >= view->first_seq + view->tot_lines ) return;
-if(mx >= view->x_name && mx < view->x_seq - view->char_width) {
-/* click sur nom de seq: selection/deselection */
-	if(view->alt_col_seq != NULL) return;
-	if(key == 1) {
-		*p_selecting_seqs = new_seq;
-		*p_sel_seq_move = new_seq;
-		return;
-		}
-	else if(key == 3) {
-		select_deselect_seq(view, 0);
-		view->draw_names = -2;
-		view->DNA_obj->damage(1);
-		return;
-		}
-	else	{ /* milieu: depl des seqs selectionnees */
-		if(view->tot_sel_seqs == 0 || 
-			view->sel_seqs[new_seq - 1]) 
-			{ fl_ringbell(0); return; }
-		deplacer_grp_seqs(view, new_seq);
-		view->DNA_obj->redraw();
-		}
-	return;
-	}
-if(key != 1)  return;
-/* click sur seq: positionnement du curseur */
-if( new_site >= view->first_site && 
-	new_site < view->first_site + view->tot_sites &&
-	new_site <= view->each_length[new_seq-1] + 1 ) {
-	view->cursor_site = new_site;
-	view->cursor_seq = new_seq;
-	view->cursor_in_comment = FALSE;
-	view->draw_names = 0;
-	view->mod_cursor = TRUE;
-	view->DNA_obj->damage(1);
-	}
-return;
-}
-
-
-void handle_keyboard(SEA_VIEW *view, unsigned int key, int istext)
-{
-int new_pos, multipl, num;
-
-multipl = view->multipl->argument();
-if(multipl == 0) multipl = 1;
-if(key == FL_Right) { /* right arrow */		
-	new_pos = view->cursor_site + multipl;
-    if(view->cursor_in_comment) {
-	if(new_pos > view->comment_length[view->cursor_seq-1]+1)
-	   new_pos = view->comment_length[view->cursor_seq-1]+1;
-	}
-    else {
-	if(new_pos > view->each_length[view->cursor_seq-1] + 1) 
-	   new_pos = view->each_length[view->cursor_seq-1] + 1;
-	}
-    set_and_show_new_cursor_site(view, new_pos,FALSE,FALSE);
-    }
-else if(key == FL_Left) { /* left arrow */		
-	new_pos = FL_max(1, view->cursor_site - multipl);
-	set_and_show_new_cursor_site(view, new_pos,FALSE,FALSE);
-	}
-else if(key == FL_Up) { /* up arrow */
-	new_pos = FL_max(1, view->cursor_seq - multipl);
-	set_and_show_new_cursor_seq(view, new_pos);
-	}
-else if(key == FL_Down){ /* down arrow */
-	new_pos = view->cursor_seq + multipl;
-	if(view->cursor_in_comment) {
-		if(new_pos > view->tot_comment_lines) 
-			new_pos = view->tot_comment_lines;
-		}
-	else	{
-		if(new_pos > view->tot_seqs) 
-			new_pos = view->tot_seqs;
-		}
-	set_and_show_new_cursor_seq(view, new_pos);
-	}
-else if(view->cursor_in_comment && 
-	view->active_comment_line == view->cursor_seq) {
-	unsigned char c_key = (unsigned)key;
-	if(view->alt_col_seq != NULL) return;
-	if( key == 0x7f || key == 0x8 || key == FL_Delete || key == FL_BackSpace ) /* del or BS */
-		delete_char_in_comment(view, 1, 
-			view->active_comment_line, 
-			view->cursor_site, FALSE);
-	else if( istext && ( ( c_key >= 32 && c_key <= 126 ) || 
-		( c_key >= 160 && c_key <= 255 )  ) ) 
-		insert_char_in_comment(c_key, 1, view);
-	else
-		return;
-	}
-else if(strchr(view->movekeys, key) != NULL) { 
-					/* ][>< touches depl droite/gauche */
-	int oldpos;
-	int upper_step=50, bracket_step=5 ;
-	int max_w;
-	max_w = (int)(view->horsli->maximum());
-	oldpos = (int)( view->horsli->value() );
-	new_pos = oldpos;
-	upper_step *= multipl;
-	bracket_step *= multipl;
-	if(key == view->movekeys[2] /* > */ ) {
-		new_pos=oldpos+upper_step;
-		if(new_pos>max_w) new_pos=max_w;
-		}
-	else if(key == view->movekeys[3] /* < */ ) {
-		new_pos=oldpos-upper_step;
-		if(new_pos<1) new_pos=1;
-		}
-	else if(key == view->movekeys[0] /* ] */ ) {
-		new_pos=oldpos+bracket_step;
-		if(new_pos>max_w) new_pos=max_w;
-		}
-	else if(key == view->movekeys[1] /* [ */ ) {
-		new_pos=oldpos-bracket_step;
-		if(new_pos<1) new_pos=1;
-		}
-	if(new_pos!=oldpos) {
-		view->horsli->Fl_Slider::value(new_pos);
-		view->draw_names = 0;
-		view->first_site = new_pos;
-		view->DNA_obj->damage(1);
-		}
-	}
-else if(key == 0x7f || key == 0x8 || key == FL_Delete || key == FL_BackSpace ) { /* delete or backspace */
-	int count, count_each, debut, fin, test;
-	    if(view->multipl->argument() > 0)
-		mod_multipl(view,0);
-	if(view->cursor_in_comment)
-		test = view->cursor_seq < 1 ||
-	   		view->cursor_seq > view->tot_comment_lines;
-	else
-		test = view->cursor_seq < view->first_seq ||
-	   		view->cursor_seq >= view->first_seq+view->tot_lines;
-	if( test ||
-	   view->cursor_site < view->first_site ||
-	   view->cursor_site >=view->first_site+view->tot_sites)
-		{ fl_ringbell(0); return; }
-	if(view->cursor_in_comment) {
-		if( delete_char_in_comment(view, multipl, 
-			view->cursor_seq, view->cursor_site,
-			TRUE) != multipl) fl_ringbell(0);
-		return;
-		}
-	if(view->alt_col_seq != NULL) return;
-	if(view->tot_sel_seqs > 1 &&
-		view->sel_seqs[view->cursor_seq - 1])
-		{ debut = 1; fin = view->tot_seqs; test = TRUE;}
-	else
-		{ debut = fin = view->cursor_seq; test = FALSE;}
-	for(num = debut; num<=fin; num++) 
-		{
-		if(test && !view->sel_seqs[num-1]) continue;
-		count_each = delete_gaps_before(view,
-			num, 
-			view->cursor_site, multipl);
-		if(count_each < multipl) fl_ringbell(0);
-		if(num == view->cursor_seq) count = count_each;
-		}
-	/* si ttes seqs selectionnees, traiter aussi regions et comments */
-	if(count_each == multipl && 
-		(!view->cursor_in_comment) &&
-		view->tot_sel_seqs == view->tot_seqs ) {
-		if(view->regions != NULL)
-			delete_region_part(view, 
-				view->cursor_site,multipl);
-		if(view->tot_comment_lines > 0)
-			delete_in_all_comments(multipl,
-				view->cursor_site, view);
-		}
-	new_pos = view->cursor_site - count;
-	if(new_pos <= 0) new_pos = 1;
-	if(view->cursor_in_comment) {
-		view->mod_comment_line = view->cursor_seq;
-		}
-	else	{
-		if(view->tot_sel_seqs > 1 && 
-			view->tot_sel_seqs != view->tot_seqs &&
-			view->sel_seqs[view->cursor_seq - 1])
-			view->mod_seq = -1;
-		else if(view->tot_sel_seqs <= 1 || 
-			!view->sel_seqs[view->cursor_seq - 1])
-			view->mod_seq = view->cursor_seq;
-		}
-	set_and_show_new_cursor_site(view, new_pos, 
-		FALSE,TRUE);
-	}
-else if(key == '_' ) { /* del gap in all but current seq(s) */
-	int count_each;
-	    if(view->multipl->argument() > 0)
-		mod_multipl(view,0);
-	if(view->cursor_in_comment) return;
-	if( view->cursor_seq < view->first_seq ||
-	   	view->cursor_seq >=view->first_seq+view->tot_lines ||
-	  	view->cursor_site < view->first_site ||
-	   	view->cursor_site >= 
-	   	view->first_site + view->tot_sites ||
-	   	view->tot_sel_seqs == view->tot_seqs )
-		 { fl_ringbell(0); return; }
-	if(view->alt_col_seq != NULL) return;
-	for( num = 1; num <= view->tot_seqs; num++) {
-		if(num == view->cursor_seq || 
-			(view->sel_seqs[view->cursor_seq-1] &&
-			view->sel_seqs[num-1] ) ) continue;
-		count_each = delete_gaps_before(view, 
-		    	num, view->cursor_site, multipl);
-		if(count_each < multipl) {
-			fl_ringbell(0);
-			return;
-			}
-		}
-	if(count_each == multipl && view->regions != NULL)
-		delete_region_part(view, view->cursor_site, multipl);
-	if(count_each == multipl && view->tot_comment_lines > 0)
-		delete_in_all_comments(multipl, view->cursor_site, view);
-	new_pos = view->cursor_site - multipl;
-	if(new_pos <= 0) new_pos = 1;
-	set_and_show_new_cursor_site(view, new_pos, FALSE, TRUE);
-	}
-else if( key == '-' || (key == ' ' && !view->hjkl)
-			  /* gap key = - or space */
-	|| key == '+' ) { /* insert gap in other seqs key */
-	int newlength = 0, count = 0, count_each, debut, fin, test;
-	    if(view->multipl->argument() > 0)
-		mod_multipl(view,0);
-	if(view->cursor_in_comment && key == '+') return;
-	if(view->cursor_in_comment)
-		test = FALSE;
-	else
-		test = view->cursor_seq < view->first_seq ||
-	   		view->cursor_seq >=view->first_seq+view->tot_lines;
-	if( test || view->cursor_site < view->first_site ||
-	   	view->cursor_site >= 
-		view->first_site + view->tot_sites )
-		 { fl_ringbell(0); return; }
-	if(view->alt_col_seq != NULL) return;
-	if(key != '+') { /* gap key */
-	    if(view->tot_sel_seqs > 1 && 
-		(!view->cursor_in_comment) &&
-		view->sel_seqs[view->cursor_seq - 1])
-		{ debut = 1; fin = view->tot_seqs; test = TRUE;}
-	    else
-		{ debut = fin = view->cursor_seq; test = FALSE;}
-	    for(num = debut; num<=fin; num++) 
-		{
-		if(test && !view->sel_seqs[num-1]) continue;
-		count_each = insert_gaps_at(view, num, 
-			view->cursor_site, multipl);
-		if(count_each < multipl) fl_ringbell(0);
-		if(num == view->cursor_seq) count = count_each;
-		if(view->cursor_in_comment) {
-		   if(newlength < view->comment_length[num-1])
-			newlength = view->comment_length[num-1];
-		     }
-		else {
-		   if(newlength < view->each_length[num-1])
-			   newlength = view->each_length[num-1];
-		     }
-		}
-/* si ttes seqs selectionnees, traiter aussi regions et comments */
-	    if(count_each == multipl && 
-		(!view->cursor_in_comment) &&
-		view->tot_sel_seqs == view->tot_seqs) {
-		if(view->regions != NULL)
-			insert_region_part(view, view->cursor_site, multipl);
-		if(view->tot_comment_lines > 0)
-			insert_gap_all_comments(multipl,view->cursor_site, 
-				view);
-		}
-	    }
-	else	{ /* + ==> gap in other sequences */
-		if(view->tot_sel_seqs == view->tot_seqs) {
-			fl_ringbell(0); return;
-			}
-		for( num = 1; num <= view->tot_seqs; num++) {
-			if(num == view->cursor_seq || 
-			     (view->sel_seqs[view->cursor_seq-1] &&
-			      view->sel_seqs[num-1] ) ) continue;
-			count_each = insert_gaps_at(view, 
-			    num, view->cursor_site, multipl);
-			if(count_each < multipl) {
-				fl_ringbell(0); return;
-				}
-			if(newlength < view->each_length[num-1])
-			   	newlength = view->each_length[num-1];
-			}
-		count = multipl;
-		if(count_each == multipl && 
-			view->regions != NULL)
-			insert_region_part(view, view->cursor_site, multipl);
-		if(count_each == multipl && 
-			view->tot_comment_lines > 0) {
-			insert_gap_all_comments(multipl,view->cursor_site, 
-				view);
-			   }
-		}
-	new_pos = view->cursor_site + count;
-	if(view->cursor_in_comment) {
-	 	if(new_pos> view->comment_length[view->cursor_seq-1]+1)
-	    		new_pos= view->comment_length[view->cursor_seq-1]+1;
-	 	}
-	else 	{
-	 	if(new_pos > view->each_length[view->cursor_seq-1] + 1)
-	   		 new_pos = view->each_length[view->cursor_seq-1] + 1;
-	 	}
-	if(view->cursor_in_comment)
-		view->mod_comment_line = view->cursor_seq;
-	else if(key != '+' ) {
-		if(view->tot_sel_seqs > 1 && 
-			view->tot_sel_seqs != view->tot_seqs &&
-			view->sel_seqs[view->cursor_seq - 1])
-			view->mod_seq = -1;
-		else if(view->tot_sel_seqs <= 1 ||
-			!view->sel_seqs[view->cursor_seq - 1] )
-			view->mod_seq = view->cursor_seq;
-		}
-	update_current_seq_length(newlength, view);
-	set_and_show_new_cursor_site(view, new_pos, FALSE,TRUE);
-	}
-else if( key >= '0' && key <= '9' ) { /* multiplicateur */
-	multipl = view->multipl->argument() * 10;
-	multipl += (key - '0');
-	mod_multipl(view, multipl);
-	return;
-	}
-else if( view->allow_seq_edit && (view->alt_col_seq == NULL) &&
-	(!view->cursor_in_comment) &&
-	( (key>='a' && key<='z') || (key>='A' && key<='Z') || key == ' ' ) ) {
-	if(view->hjkl) {
-		static char typedkey[]= "hjklHJKL ";
-		static char dnaequivs[3][10]={
-			"gatcGATCN", "tcgaTCAGN", "acgtACGTN"};
-		char *p;
-		p = strchr(typedkey, key);
-		if(p != NULL) 
-			key = *( dnaequivs[view->hjkl - 1] + (p - typedkey) );
-		}
-	if(key == ' ') num = 0;
-	else	num = insert_char_in_seq(key, multipl, view);
-	if( num == 0 ) fl_ringbell(0);
-	else 	{
-		view->mod_seq = view->cursor_seq;
-		set_and_show_new_cursor_site(view, 
-			view->cursor_site + num, FALSE, TRUE);
-		}
-	}
-else	return;
-if(view->multipl->argument() > 0) mod_multipl(view, 0);
-}
-
-
-Fl_Group *create_dna_scroller(SEA_VIEW *view, int x, int y, int w, int h, 
-	int double_buffer)
-{
-  Fl_Group *dna_group;
-  Fl_Widget *obj;
-  int wmultipl, x_pos;
-  user_data_plus *data;
-dna_group = new Fl_Group(x,y,w,h);
-int scroll_w = 15;
-#ifdef __APPLE__
-#define DELTA_G  13 // laisser place pour poignŽe de dimensionnement de fenetre
-#else
-#define DELTA_G  0
-#endif
-/* screen move haut */
-view->up_screen_move = obj = 
-(Fl_Widget*)new Fl_Repeat_Button(x+3, y,scroll_w,scroll_w,"@8>>");
-obj->labeltype(FL_SYMBOL_LABEL);
-data = new user_data_plus;
-data->p = view;
-data->value = 5;
-obj->callback(lrdu_button_callback, data);
-/* ascenc. vertical */
-view->vertsli =  new Fl_Scrollbar(x+3, y + scroll_w + 2, scroll_w, 
-		h - 3*scroll_w - 12, "");
-view->vertsli->box(FL_DOWN_BOX);
-data = new user_data_plus;
-data->p = view;
-data->value = 0;
-((Fl_Scrollbar *)view->vertsli)->linesize(1);
-view->vertsli->callback(vh_sliders_callback, data);
-  view->vertsli->bounds(1,1);
-  view->vertsli->slider_size(1);
-  view->vertsli->Fl_Slider::value(1);
-  view->vertsli->step(1);
-view->vertsli->when(FL_WHEN_CHANGED);
-/* screen move bas */
-view->down_screen_move = obj = 
-(Fl_Widget*)new Fl_Repeat_Button(x+3,
-	y + h - 2 * scroll_w - 8, scroll_w, scroll_w, "@2>>");
-obj->labeltype(FL_SYMBOL_LABEL);
-data = new user_data_plus;
-data->p = view;
-data->value = 7;
-obj->callback(lrdu_button_callback, data);
-
-int y_scroll = y + h - scroll_w - 3;
-/* valeur du multiplicateur */
-fl_font(FL_HELVETICA, FL_NORMAL_SIZE);
-  wmultipl = (int)fl_width("mult=9999");
-  x_pos = 5;
-  view->multipl = obj = (Fl_Widget*)new Fl_Box(FL_FLAT_BOX,
-	x+x_pos, y_scroll - 2, wmultipl, FL_NORMAL_SIZE + 4, "");
-  x_pos += wmultipl + 5;
-  obj->labelfont(FL_HELVETICA);
-  obj->labelsize(FL_NORMAL_SIZE);
-  obj->align(FL_ALIGN_CENTER);
-
-
-/* screen move gauche */
-  view->left_screen_move = obj = 
-(Fl_Widget*)new Fl_Repeat_Button(x+x_pos,y_scroll,scroll_w,scroll_w,"@<<");
-obj->labeltype(FL_SYMBOL_LABEL);
-  x_pos += scroll_w + 2;
-data = new user_data_plus;
-data->p = view;
-data->value = 1;
-obj->callback(lrdu_button_callback, data);
-/* ascens. horizontal */ 
-view->horsli =  
-new Fl_Scrollbar(x + x_pos, y_scroll, w - x_pos - scroll_w - 2 - DELTA_G, scroll_w,"");
-view->horsli->type(FL_HORIZONTAL);
-view->horsli->box(FL_DOWN_BOX);
-((Fl_Scrollbar *)view->horsli)->linesize(1);
-data = new user_data_plus;
-data->p = view;
-data->value = 1;
-view->horsli->callback(vh_sliders_callback, data);
-view->horsli->bounds(1,1);
-view->horsli->slider_size(1);
-view->horsli->Fl_Slider::value(1);
-view->horsli->step(1);
-view->horsli->when(FL_WHEN_CHANGED);
-/* screen move a droite */
-  view->right_screen_move = obj = 
-(Fl_Widget*)new Fl_Repeat_Button(x+w - scroll_w - DELTA_G, y_scroll, scroll_w, scroll_w,"@>>");
-obj->labeltype(FL_SYMBOL_LABEL);
-data = new user_data_plus;
-data->p = view;
-data->value = 3;
-obj->callback(lrdu_button_callback, data);
-
-/* noms + sequences */
-Fl_Window *viewer;
-if(double_buffer)
-	  viewer = (Fl_Window *)new Fl_Double_Window(
-					x+25-3, y, w - 25 - 1 + 6, h - 30 + 6);
-else
-	  viewer = new Fl_Window(x+25, y+3, w - 25 - 1, h - 30);
-viewer->box(FL_DOWN_BOX);
-viewer->resizable(viewer);
-view->double_buffer = double_buffer;
-view->DNA_obj = (Fl_Widget*)new DNA_obj(3, 3, w - 25 - 1, h - 30, view);
-view->DNA_obj->labelfont(FL_COURIER_BOLD);
-viewer->end();
-
-dna_group->end();
-dna_group->add_resizable(
-	*new Fl_Box(x + x_pos, y + scroll_w + 2, w - x_pos - scroll_w - 2 - DELTA_G, 
-		h - 3*scroll_w - 12) );
-view->menu_regions = view->menu_file = view->menu_edit = 
-		view->bouton_props = view->menu_species = NULL;
-return dna_group;
-}
-
-
-SEA_VIEW *create_the_form(int double_buffer, int inverted,
-		known_format default_format, int numb_dnacolors,
-		int *dnacolors, 
-		int numb_stdprotcolors, int *stdprotcolors,
-		int numb_altprotcolors, int *altprotcolors,
-		color_choice curr_color_choice, char *progname, char *movekeys,
-		char *win_size, int allow_lower, char *help_file,
-		int back_color, int region_back_color, int defaultfontsize,
-		int alignment_algo)
-{
-Fl_Group *dna_group;
-Fl_Window *my_form;
-Fl_Widget *obj, *bouton_search, *champ_search, *bouton_goto, *champ_goto,
-	*bouton_props, *menu_regions, *menu_edit, *menu_species,
-	*menu_footers, *bouton_help;
-Fl_Menu_Button *menu_file;
-int black_and_white;
-SEA_VIEW *view;
-user_data_plus *data;
-int labelSize = 12;
-int borderWidth = 2;
-int w_w = 700, w_h = 500;
-
-sscanf(win_size, "%dx%d", &w_w, &w_h);
-my_form = new Fl_Window(w_w, w_h);
-my_form->color(FL_LIGHT1);
-my_form->label(progname);
-my_form->box(FL_FLAT_BOX);
-int extra_menu_width = 2*(labelSize - 3);//largeur symbole menu
-#define calc_width(nom) \
-	(fl_font(FL_HELVETICA, labelSize), (int)fl_width(nom) + 4 * borderWidth)
-#define add_menu(nom) \
-	new Fl_Menu_Button(0,0,calc_width(nom)+extra_menu_width,25,nom)
-#define add_button(nom) \
-	new Fl_Button(0,0,calc_width(nom),25,nom)
-
-Fl_Pack *menus = new Fl_Pack(5,5,10,25); /* groupe fixe des menus */
-menus->type(FL_HORIZONTAL);
-menus->spacing(2);
-
-/* menu File */
-menu_file = add_menu("File");
-((Fl_Menu_Button*)menu_file)->add(
-	"Open|Open Mase|Open Phylip|Open Clustal|Open MSF|Open Fasta|Open NEXUS|"
-	"Save|Save as...|Save current sites|Prepare "PDF_OR_PS"|"
-#if ! defined( __APPLE__) 
-	PDF_OR_PS" options...|"
-#endif
-	"Quit");
-menu_file->labelsize(labelSize);
-menu_file->mode(OPEN_ANY, FL_MENU_DIVIDER);
-menu_file->shortcut(OPEN_ANY, myFL_CTRL | 'o');
-menu_file->mode(OPEN_NEXUS, FL_MENU_DIVIDER);
-menu_file->mode(SAVE, FL_MENU_INACTIVE);
-menu_file->shortcut(SAVE, myFL_CTRL | 's');
-menu_file->mode(SAVE_AS, FL_MENU_INACTIVE);
-menu_file->mode(SAVE_REGIONS, FL_MENU_DIVIDER | FL_MENU_INACTIVE);
-#if defined( __APPLE__) 
-menu_file->mode(PRINTOUT, FL_MENU_DIVIDER);
-#else
-menu_file->mode(PDFOPTIONS, FL_MENU_DIVIDER);
-#endif
-menu_file->shortcut(QUIT, myFL_CTRL | 'q');
-menu_file->callback(file_menu_callback, 0);
-menu_file->align((Fl_Align) (FL_ALIGN_INSIDE | FL_ALIGN_LEFT) );
-menu_file->box(FL_UP_BOX);
-
-/* menu Props */
-bouton_props = obj = add_menu("Props");
-obj->labelsize(labelSize);
-obj->align((Fl_Align) (FL_ALIGN_INSIDE | FL_ALIGN_LEFT) );
-
-/* menu regions */
-menu_regions = obj = add_menu("Sites");
-data = new user_data_plus;
-obj->labelsize(labelSize);
-obj->callback(regions_menu_callback, data);
-obj->align((Fl_Align) (FL_ALIGN_INSIDE | FL_ALIGN_LEFT) );
-obj->box(FL_UP_BOX);
-
-/* menu species */
-menu_species = obj = add_menu("Species");
-data = new user_data_plus;
-obj->labelsize(labelSize);
-obj->callback(species_menu_callback, data);
-obj->align((Fl_Align) (FL_ALIGN_INSIDE | FL_ALIGN_LEFT) );
-obj->box(FL_UP_BOX);
-
-/* menu footers */
-menu_footers = obj = add_menu("Footers");
-((Fl_Menu_Button*)obj)->add("Show footers|Create footer|Delete footer");
-((Fl_Menu_ *)obj)->mode(SHOW_HIDE_FOOTERS, FL_MENU_INACTIVE);
-obj->labelsize(labelSize);
-obj->callback(footers_menu_callback, 0);
-obj->align((Fl_Align) (FL_ALIGN_INSIDE | FL_ALIGN_LEFT) );
-obj->box(FL_UP_BOX);
-
-/* bouton search + champ Search */
-bouton_search = obj = add_button("Search:");
-obj->labelsize(labelSize);
-data = new user_data_plus;
-data->value = 0;
-obj->callback(search_callback, data);
-champ_search = obj = (Fl_Widget*)new Fl_Input(0,0, 80, 25, "");
-((Fl_Input*)obj)->type(FL_NORMAL_INPUT);
-((Fl_Input*)obj)->when(FL_WHEN_ENTER_KEY);
-data = new user_data_plus;
-data->value = 1;
-champ_search->callback(search_callback, data);
-data = (user_data_plus *)bouton_search->user_data();
-data->p = champ_search;
-
-/*  bouton + champ Goto */
-bouton_goto = obj = add_button("Goto:");
-obj->labelsize(labelSize);
-data = new user_data_plus;
-data->value = 0;
-obj->callback(goto_callback, data);
-champ_goto = obj = (Fl_Widget*)new Fl_Input(0, 0, 80, 25, "");
-((Fl_Input*)obj)->type(FL_NORMAL_INPUT);
-data = new user_data_plus;
-data->value = 1;
-champ_goto->callback(goto_callback, data);
-data = (user_data_plus *)bouton_goto->user_data();
-data->p = champ_goto;
-((Fl_Input*)obj)->when(FL_WHEN_ENTER_KEY);
-
-/* menu Edit */
-menu_edit = obj = add_menu("Edit");
-((Fl_Menu_Button*)obj)->add( 
-   "Rename sequence|Edit comments|Edit sequence|Delete sequence(s)|Create sequence|"
-   "Load sequence|Duplicate sequence|"
-   "Complement sequence|Reverse sequence|Exchange Us and Ts|Align sites|"
-   "Dot plot|Consensus sequence|Del. gap-only sites");
-obj->labelsize(labelSize);
-obj->callback(edit_menu_callback, 0);
-obj->align((Fl_Align) (FL_ALIGN_INSIDE | FL_ALIGN_LEFT) );
-obj->box(FL_UP_BOX);
-
-/* bouton help */
-bouton_help = add_button("Help");
-bouton_help->labelsize(labelSize);
-bouton_help->callback(help_callback, help_file);
-
-#undef add_menu
-#undef add_button
-#undef calc_width
-
-menus->end();
-menus->resizable(NULL);
-
-view = (SEA_VIEW *)calloc(1, sizeof(SEA_VIEW));
-if(view == NULL) out_of_memory();
-
-/* tout le groupe scroller */
-dna_group = create_dna_scroller(view,
-	0, 35, my_form->w() - 5, my_form->h() - 35, double_buffer);
-my_form->resizable( dna_group );
-my_form->end();
-my_form->callback(mainwin_close_callback, view);
-my_form->position((Fl::w() - my_form->w())/2, (Fl::h() - my_form->h())/2);
-
-/* initialisation independantes des sequences */
-view->movekeys = movekeys;
-view->menu_regions = menu_regions;
-view->menu_species = menu_species;
-view->menu_file = menu_file;
-view->menu_edit = menu_edit;
-view->menu_footers = menu_footers;
-view->bouton_props = bouton_props;
-menu_file->user_data( view );
-data = (user_data_plus *)menu_regions->user_data();
-data->p = view;
-data = (user_data_plus *)menu_species->user_data();
-data->p = view;
-menu_edit->user_data( view );
-menu_footers->user_data( view );
-data = (user_data_plus *)champ_search->user_data();
-data->p = view;
-data = (user_data_plus *)champ_goto->user_data();
-data->p = view;
-view->format_for_save = default_format; /* default format for saving */
-view->tot_seqs = 0;
-view->first_seq = 1; view->tot_sites = 1;
-view->numb_gc = 1;
-view->line_height = 1;
-view->char_width = 1;
-view->draw_names = -1;
-view->mod_seq = 0;
-view->mod_comment_line = 0;
-view->consensus_threshold = 60;
-view->consensus_allowgaps = FALSE;
-view->alignment_algorithm = alignment_algo;
-view->dnawin = my_form;
-view->max_seq_length = MINI_MAX_LENGTH;
-mod_multipl(view, 0);
-
-#ifdef WIN32
-black_and_white = FALSE;
-#elif defined(__APPLE__)
-black_and_white = FALSE;
-#else
-black_and_white = (fl_xpixel(FL_BLACK) == fl_xpixel(FL_RED));
-#endif
-if ( ! black_and_white) { 
-	/* couleurs du fond pour seqs */
-  	view->DNA_obj->color(back_color, region_back_color); 
-	view->region_color = FL_WHITE;
-	view->inverted_colors = inverted;
-	if(inverted) {
-		view->DNA_obj->labelfont( FL_COURIER);
-		}
-	view->allow_lower = allow_lower;
-	}
-else	{ /* the Black and White case */
-	numb_dnacolors = numb_stdprotcolors = numb_altprotcolors = 1;
-	dnacolors[0] = FL_BLACK;
-	/* couleur du fond pour seqs */
-  	view->DNA_obj->color(FL_WHITE, FL_WHITE); 
-	view->region_color = FL_BLACK;
-	view->numb_gc = 1;
-	view->curr_colors = dnacolors;
-	view->inverted_colors = FALSE;
-	view->allow_lower = TRUE;
-	}
-view->DNA_obj->parent()->color( view->DNA_obj->color() );
-/* taille par defaut des lettres des sequences */
-view->DNA_obj->labelsize(defaultfontsize);
-/* creation du menu Props et de ses sous-menus */
-create_props_menu((Fl_Menu_Button *)bouton_props, view,
-	curr_color_choice, inverted, black_and_white, 
-	view->DNA_obj->labelsize());
-view->dnacolors = dnacolors;
-view->numb_dnacolors = numb_dnacolors;
-view->stdprotcolors = stdprotcolors;
-view->numb_stdprotcolors = numb_stdprotcolors;
-view->altprotcolors = altprotcolors;
-view->numb_altprotcolors = numb_altprotcolors;
-view->namecolor = FL_BLACK;
-view->alt_colors = curr_color_choice;
-view->clustal_options = NULL;
-view->show_comment_lines = FALSE;
-view->tot_comment_lines = 0;
-return view;
-}
-
-
-

Deleted: trunk/packages/seaview/trunk/seaview.h
===================================================================
--- trunk/packages/seaview/trunk/seaview.h	2007-07-20 10:28:45 UTC (rev 359)
+++ trunk/packages/seaview/trunk/seaview.h	2007-07-21 02:32:37 UTC (rev 360)
@@ -1,304 +0,0 @@
-#ifndef SEAVIEW_H
-#define SEAVIEW_H
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-#include "FL/Fl.H"
-#include "FL/Fl_Window.H"
-#include "FL/Fl_Menu_Item.H"
-#include "FL/Fl_Menu_Button.H"
-#include "FL/Fl_Browser.H"
-#include "FL/Fl_Input.H"
-#include "FL/Fl_Box.H"
-#include "FL/Fl_Return_Button.H"
-#include "FL/Fl_Repeat_Button.H"
-#include "FL/Fl_Choice.H"
-#include "FL/fl_draw.H"
-#include "FL/fl_ask.H"
-#ifndef FALSE
-#define FALSE 0
-#define TRUE (!FALSE)
-#endif
-
-#ifdef NO_PDF
-#define PDF_OR_PS "ps"
-#else
-#define PDF_OR_PS "pdf"
-#endif
-
-#define fgets(a,b,c) my_fgets(a,b,c)
-extern "C" { char *my_fgets(char *s, int n, FILE *f); }
-
-#ifdef WIN32
-extern "C" { void my_bell(void); }
-#define fl_ringbell(a) my_bell()
-#elif defined __APPLE__
-#define fl_ringbell(a) SysBeep(a)
-#else
-#include "FL/x.H"
-#define fl_ringbell(a) XBell(fl_display, a)
-#endif
-#define FL_max(a,b)      ( (a) > (b) ? (a):(b) )
-#define FL_min(a,b)      ( (a) < (b) ? (a):(b) )
-#ifdef __APPLE__
-#define PREPARE_LABEL(p) mac_fname_to_roman(p)
-#else
-#define PREPARE_LABEL(p) p
-#endif
-/* proto manque parfois */
-extern "C" { void *memccpy(void *s1, const void *s2, int c, size_t n); }
-typedef struct _user_data_plus {
-	void *p;
-	int value;
-	} user_data_plus;
-extern void fl_reset_cursor(Fl_Window *win);
-
-
-#define MAXLENCOM 50000 /* long max des commentaires sous mase */
-#define MAX_SPECIES_SETS 50 /* nbre max de species sets */
-#define PHYNAME 10
-#define CLU_WID_NAME 16
-#define MSF_WID_NAME 15
-#define CLU_BLOCK_LEN 5000 /* block pour allocation mem format Clustal */
-#define MAX_GAP_SITES 1000
-#define MOVEKEYS_DEFAULT "][><"
-
-typedef struct _list_segments { /* one segment + pointer to its successor */
-	int debut, fin;
-	struct _list_segments *next;
-	} list_segments;
-	
-typedef struct { /* one region = name + pointer to list of segments */
-	char *name;
-	list_segments *list;
-	} region;
-
-typedef struct _list_regions { /* region list = pointer to region + 
-				pointer to successor in list */
-	region *element;
-	struct _list_regions *next;
-	} list_regions;
-
-typedef struct {
-	int pos;
-	int l[2];
-	} gap_site;
-	
-typedef enum {MASE_FORMAT, PHYLIP_FORMAT, CLUSTAL_FORMAT, MSF_FORMAT, 
-	FASTA_FORMAT, NEXUS_FORMAT } 
-	known_format;
-
-typedef enum {OPEN_ANY, OPEN_MASE, OPEN_PHYLIP, OPEN_CLUSTAL, OPEN_MSF, OPEN_FASTA,
-	OPEN_NEXUS, SAVE, SAVE_AS, SAVE_REGIONS, PRINTOUT, 
-#ifndef __APPLE__
-	PDFOPTIONS,
-#endif
-	QUIT} file_menu_choice;
-
-typedef enum {NO_ALT_COLORS, USING_STANDARD_COLORS, USING_ALT_COLORS}
-	color_choice;
-
-typedef enum {RENAME_SEQ, EDIT_COMMENTS, EDIT_SEQ, DELETE_SEQ, CREATE_SEQ, LOAD_SEQ, 
-	DUPLICATE_SEQ,
-	COMPLEMENT_SEQ, REVERSE_SEQ, EXCHANGE_UT, ALIGN_SEQS, DOT_PLOT,
-	CONSENSUS_SEQ, DELETE_GAP_ONLY_SITES}
-	edit_choice;
-
-typedef enum {SHOW_HIDE_FOOTERS, CREATE_FOOTER, DELETE_FOOTER }
-	footers_menu_choice;
-	
-typedef enum {A4, LETTER} paperformat;
-
-enum { CLUSTALW, MUSCLE };
-#ifdef NO_CLUSTALW
-#define DEFAULT_ALIGN_ALGO MUSCLE
-#else
-#define DEFAULT_ALIGN_ALGO CLUSTALW
-#endif
-
-typedef struct {
-	Fl_Widget *DNA_obj; /* free object for names + seqs */
-	Fl_Scrollbar *horsli; /* horizontal scrollbar */
-	Fl_Scrollbar *vertsli; /* vertical scrollbar */
-	Fl_Widget *right_screen_move, *left_screen_move, *up_screen_move, 
-			*down_screen_move; /* 4 big jump arrows */
-	Fl_Widget *multipl; /* box displaying the multiplier value */
-	Fl_Widget *menu_regions; /* menu of region operations */
-	Fl_Widget *menu_file; /* menu of file operations */
-	Fl_Widget *menu_edit; /* menu of edit operations */
-	Fl_Widget *bouton_props; /* menu of properties */
-	Fl_Widget *menu_species; /* menu of species */
-	Fl_Widget *menu_footers; /* menu of footers */
-	Fl_Widget *bouton_reference; /* bouton_reference */
-	char **sequence; /* array of sequences */
-	char **comments; /* array of sequence comments */
-	char *header; /* header of mase file */
-	char ***col_seq; /* array of sequences split by color */
-	char ***alt_col_seq; /* alternate array of sequences split by color */
-	char **seqname; /* array of sequence names */
-	char *masename; /* mase file name */
-	int protein; /* TRUE iff protein data */
-	known_format format_for_save; /* what file format used when saving */
-	int wid_names; /* width of largest sequence name */
-	int first_seq, first_site; /* first seq and site currently displayed */
-	int tot_seqs; /* total number of sequences in memory */
-	int seq_length; /* current length of longest sequence */
-	int max_seq_length; /*max length allowed for longest sequence to grow */
-	int *each_length; /* array of each individual sequence length */
-	int tot_sites, tot_lines; /* sites and lines fitting in DNA_obj */
-	int x_name, y_name, x_seq, y_seq; /* top left to start writing 
-						names and sequences */
-	int draw_names; /*controle ecriture noms 0: pas ecrits; 
-			-1: tous ecrits puis aussi les seqs;
-			-2: tous ecrits mais pas les seqs;
-			>=1: 1 seul ecrit et pas de seq ni de curseur ecrit*/
-	int mod_seq; /* -1: seqs selectionnees; 
-			0: normal; 
-			>= 1: 1 seul seq ecrite */
-	int mod_cursor; /* FALSE: cursor ancien ignore; TRUE: ancien efface */
-	int char_width, line_height; /* taille en pixels des caracteres */
-	int cursor_seq, cursor_site; /* position courante du curseur */
-	int old_cursor_seq, old_cursor_site; /* position precedente du curseur*/
-	int tot_sel_seqs; /* nbre courant de seqs selectionnees */
-	int *sel_seqs; /* tableau des seqs selectionnees: T/F pour chacune */
-	int *curr_colors; /*tableau des couleurs pour chaque elt col_seq*/
-	int inverted_colors; /* TRUE iff use black letters on colored square */
-	int namecolor; /* couleur utilisee pour les noms */
-	int numb_gc; /* 1 en N&B, >1 en couleurs */
-	int *dnacolors; /* tableau des couleurs pour DNA/RNA */
-	int numb_dnacolors; /* nbre de couleurs pour DNA/RNA */
-	int *stdprotcolors; /*tableau des couleurs standard pour prots*/
-	int numb_stdprotcolors; /* nbre de couleurs standard pour prots */
-	int *altprotcolors;/*tableau des couleurs alternatives pour prots*/
-	int numb_altprotcolors; /*nbre de couleurs alternatives pour prots*/
-	color_choice alt_colors; /* current aa color use */
-	list_regions *regions; /* list of known regions */
-	region *active_region; /* active region (NULL when none) */
-	char *region_line; /* region line (of length region_length) */
-	int region_color; /* color used to display region line */
-	int region_length; /* length of region_line (==seq_length) */
-	int mod_region_line; /* TRUE region line changed=>redraw only it */
-	int numb_species_sets; /* number of known species sets */
-	int *list_species_sets[MAX_SPECIES_SETS];/*list of known species sets*/
-	char *name_species_sets[MAX_SPECIES_SETS];/*names of species sets*/
-	int allow_seq_edit; /* when TRUE can type sequence data in */
-	int hjkl; /* when TRUE, keys hjklHJKL produce TCGA */
-	int modif_but_not_saved;
-	Fl_Window *dnawin; /* window of DNA_obj */
-	int reducefonts; /* TRUE when need smaller fonts (e.g. 100dpi) */
-	int double_buffer; /* true iff DNA_obj is double buffered */
-	int alignment_algorithm;
-	char *clustal_options; /* options for clustalw if != NULL */
-	int consensus_threshold; /* min threshold (%) for residue in consensus*/
-	int consensus_allowgaps; /* TRUE iff gaps count as residue for consensus*/
-	int tot_comment_lines; /* number of comment lines */
-	char **comment_line; /* array of comment lines */
-	char **comment_name; /* array of comment names */
-	int *comment_length; /* array of comment lengths */
-	int show_comment_lines; /* TRUE when displayed */
-	int pos_first_comment_line; /* rank on screen of this line */
-	int mod_comment_line; /* 0: normal, >=1 celle-ci ecrite */
-	int active_comment_line; /* 0: none, >=1 target of keyboard */
-	int cursor_in_comment; /* TRUE when cursor is in comments not in seqs */
-	int old_cursor_in_comment; /*previous place of cursor seq vs. comments*/
-	char *movekeys; /* default ][><  keys to move seq right or left */
-	int allow_lower; /* TRUE iff lowercase displayed in seqs */
-	} SEA_VIEW;
-	
-
-typedef struct _props_menu_parts {
-	int fontsize, saveformat, colors, inverted, edit, reference, keys,
-		clustalopt, consensusopt, slow_fast, allow_lower, custom;
-	SEA_VIEW *view;
-	} props_menu_parts;
-
-
-extern void out_of_memory(void);
-extern char *majuscules(char *s);
-extern void init_dna_scroller(SEA_VIEW *view, int totseqs, 
-	const char *masename, int protein, char *header);
-extern char *extract_filename( char *fname);
-extern void draw_region_line(Fl_Widget *ob, SEA_VIEW *view);
-extern void props_button_callback(Fl_Widget *ob, long mainpop);
-extern void regions_menu_callback(Fl_Widget *ob, void *extra);
-extern void species_menu_callback(Fl_Widget *ob, void *extra);
-extern void footers_menu_callback(Fl_Widget *ob, long which);
-extern int suppr_segment(region *maregion, int site, char *line);
-extern int begin_change_segment(SEA_VIEW *view, int new_site);
-extern int continue_change_segment(SEA_VIEW *view, int new_site);
-extern void end_change_segment(SEA_VIEW *view);
-extern int extend_segment_at_left(SEA_VIEW *view, int new_site);
-extern void delete_region_part(SEA_VIEW *view, int numsite, int total);
-extern void insert_region_part(SEA_VIEW *view, int numsite, int total);
-extern void delete_region(SEA_VIEW *view, int rang);
-extern list_regions *parse_regions_from_header(char *header);
-extern int parse_species_sets_from_header(char *header, int **list_species_sets,
-	char **name_species_sets, int totseqs);
-extern void set_tot_lines(SEA_VIEW *view, int new_val);
-extern int read_mase_seqs_header(const char *, char ***pseq,char ***pseqname,
-		char ***pcomments, char **pheader, char **err_message);
-extern int read_fasta_align(const char *fname, char ***pseq, char ***pseqname, 
-		char ***pcomments, char **pheader,  char **err_message);
-extern int read_phylip_align(const char *fname, char ***pseq, char ***pseqname, 
-		char ***pcomments, char **pheader, char **);
-extern int read_clustal_align(const char *fname, char ***pseq, char ***pseqname, 
-		char ***pcomments, char **pheader, char **err_message);
-extern int read_msf_align(const char *fname, char ***pseq, char ***pseqname, 
-		char ***pcomments, char **pheader, char **err_message);
-extern int read_nexus_align(char *fname, char ***pseqs, char ***pseqnames, 
-	char ***pcomments, char **pheader, char **err_message, 
-	list_regions **charsets, int *pnum_species_sets,
-	int ***list_species_sets, char ***name_species_sets,
-	int *ptot_comment_lines, char ***comment_name, char ***comment_line,
-	int **comment_length, int *protein);
-extern char *save_alignment_or_region(const char *fname, char **seq, 
-	char **comments,
-	char *header, char **seqname, int totseqs, int *eachlength,
-	list_regions *regions, region *region_used, known_format format,
-	int numb_species_sets, int **list_species_sets, 
-	char **name_species_sets, int *sel_seqs, int tot_sel_seqs, int protein,
-	int tot_comment_lines, char **comment_name, char **comment_line);
-extern void load_alignment_file(SEA_VIEW *view, char *filename, 
-	char *message, known_format file_format);
-extern int is_a_protein_seq(char *seq);
-extern int prepare_printout(const char *filename, char **seq, int totseqs,  
-	char **seqname,
-	int *eachlength, int char_per_line,
-	int block_size, int lines_per_page, int printout_vary,
-	char *align_name, int ref0);
-extern FILE *open_path(char *fname);
-extern int check_path(char *fname);
-extern void draw_region_background(SEA_VIEW *view, int f_seq0, int l_seq0);
-extern void load_seq_dialog(SEA_VIEW *view);
-extern void edit_comments_dialog(SEA_VIEW *view);
-extern void edit_sequence_dialog(SEA_VIEW *view);
-extern void add_seq_to_align(SEA_VIEW *view, char *newname, char *newseq, 
-	int lenseq);
-extern int get_color_for_base( int key );
-extern int get_color_for_aa( int key );
-extern char ***prepcolseqs(char **seq, int totseqs, int maxlen, int *eachlength,
-	int (*calc_color_function)( int ), int numb_gc, int allow_lower);
-extern char complement_base(char old);
-extern void select_deselect_seq(SEA_VIEW *view, int new_seq);
-extern void save_active_region(SEA_VIEW *view, int ask_confirm);
-extern void align_selected_parts(SEA_VIEW *view, int align_algorithm);
-extern void free_region(region *reg);
-extern void my_watch_cursor(Fl_Window *win);
-extern void update_current_seq_length(int newlength, SEA_VIEW *view);
-extern char *cre_consensus(SEA_VIEW *view, char *newname);
-extern int parse_comment_lines_from_header(char *header, char ***plines, 
-	char ***pnames, int **plengths, int *pmax_seq_length);
-extern int insert_char_in_comment(int key, int num, SEA_VIEW *view);
-extern int delete_char_in_comment(SEA_VIEW *view, int count, int comnum, 
-	int depart, int protect);
-extern void update_menu_footers(SEA_VIEW *view);
-extern int insert_gap_all_comments(int numgaps, int pos,  SEA_VIEW *view);
-extern int delete_in_all_comments(int numdels, int pos,  SEA_VIEW *view);
-extern char* fl_file_chooser(const char* message, const char* pat, const char* fname);
-extern int ask_with_custom_yesno(const char *text, const char *yes, const char *no);
-#ifdef __APPLE__
-extern char *mac_fname_to_roman(char *in); 
-#endif
-
-#endif

Deleted: trunk/packages/seaview/trunk/seaview.help
===================================================================
--- trunk/packages/seaview/trunk/seaview.help	2007-07-20 10:28:45 UTC (rev 359)
+++ trunk/packages/seaview/trunk/seaview.help	2007-07-21 02:32:37 UTC (rev 360)
@@ -1,457 +0,0 @@
->>>About seaview
-Program seaview was published in:
-Galtier, N., Gouy, M. & Gautier, C. (1996) SEAVIEW and PHYLO_WIN: two graphic 
-tools for sequence alignment and molecular phylogeny. Comput. Appl. Biosci., 
-12:543-548.
-
-Binaries and full source code available from
-http://pbil.univ-lyon1.fr/software/seaview.html
-
-(C) 1996-2005 Manolo Gouy
-Laboratoire de Biometrie et Biologie Evolutive
-CNRS / Universite Lyon I
-Licensed under the GNU General Public Licence
-(http://www.gnu.org/licenses/gpl.txt)
-
-Seaview uses the FLTK project (http://www.fltk.org) for its user interface.
-
-Seaview uses the PDFlib Lite library (http://www.pdflib.com) for pdf output
-under the "Open Source Developer Exemption" of the PDFlib Lite License Agreement.
-
->>>Alignment panel
-Mouse Use:
-
-o Click on a site to position cursor (current cursor position -- sequence
-  number, positions in alignment and in sequence -- appears at panel top center)
-o Click or drag mouse on several sequence names to group them (names will appear
-  in black background). Alignment operations (gap insertions/deletions) will 
-  operate on all grouped sequences simultaneously.
-o Double-click on any name to group all sequences.
-#if WIN32 || __APPLE__
-o Ctrl-Click somewhere in sequence names to move grouped sequences to another 
-  place in alignment.
-o Shift-Click to deactivate the current grouping; names return in normal print.
-#else
-o Click with middle mouse button somewhere in sequence names to move grouped 
-  sequences to another place in alignment.
-o Click with right mouse button to deactivate the current grouping; all names
-  return in normal print.
-#endif
-
-Active keys:
-
-o The 4 keyboard arrows move the cursor
-o > < move the view by 50 sites to right and left (other keys can be used)
-o ] [ move the view by 5 sites to right and left (other keys can be used)
-  see "Miscellaneous options" for how to use other keys for same purpose
-o - <space> insert a gap in the cursor sequence and members of its group if any
-o <delete> or <backspace> delete a gap at left of cursor
-o + inserts a gap in all sequences but that under the cursor and members of its
-    group if any
-o _ ("underscore") deletes a gap in all sequences but that under the cursor 
-    and members of its group if any
-o 1234567890 (digit keys) allow to compose a number (appearing under
-  mult=number at bottom left of panel) used as a multiplier to an operation
-  to follow (e.g., keys 4, 5, and - in sequence will insert 45 gaps)
-o ctrl/cmd+S (according to platform) saves the alignment in the current 
-  filename using the current file saving format displayed by menu "Props". 
-  If format of the last loaded file does not match the current saving format, 
-  this key is not active.
-
-Mouse use on the site line (when there is one, white line at bottom):
-
-#if WIN32 || __APPLE__
-o  Click mouse to select/unselect a site.
-o  Drag with the mouse button an extremity of a block of sites to extend or 
-   reduce it.
-o  Ctrl-Click to extend the block of sites at left.
-o  Shift-Click on a block of sites to delete it.
-#else
-o  Click with the left mouse button to select/unselect a site.
-o  Drag with the left mouse button an extremity of a block of sites to extend 
-   or reduce it.
-o  Click with the middle mouse button to extend the block of sites at left.
-o  Click with the right mouse button on a block of sites to delete it.
-#endif
->>>File menu
-Open Mase, Open Phylip, Open Clustal, Open MSF, Open Fasta, Open NEXUS
-               to load an alignment in one of these formats
-               Mase and Nexus formats have the useful feature of allowing extra 
-               data beyond sequences and names (comments, accession numbers are
-               really useful!). They can also store site sets [see
-               item `Sites menu'].
-
-Save           when active, saves the alignment in the current file (which
-               name appears as window title). The shortcut for this operation
-               is given.
-
-Save as...     allows to save the alignment under a filename to be chosen
-               in the file selector appearing next [Pressing button Rescan
-               therein may be necessary to have all files appear].
-
-Save current sites
-               only active when a site line is displayed; allows to save
-               in a file only those sites of the sequences where an X is in the
-               site line. If some sequences are selected, only these are saved.
-
-#if __APPLE__
-Prepare pdf    Writes the alignment as a pdf file, with optional choices:
-#else
-Prepare pdf    Writes the alignment as a pdf file. See options below.
-pdf options... allows to set several options for "Prepare pdf" menu item
-#endif
-        fontsize       sets the fontsize (font is Courier)
-        block size     alignment lines may be divided in blocks (e.g. of size 10
-                       for DNA/RNA sequences or 3 for protein coding sequences)
-                       separated by one space to ease alignment reading.
-        paper size:    two paper formats can be used A4 or LETTER
-        color/B&W      choose between colored alignment or one with all black letters.
-        variable sites only    Available only in reference mode, allows to output
-                       only variable sites of the alignment and their positions.
-
-Quit           guess what?
->>>Props menu
-Fontsize >   Tiny, Small, ..., Huge
-             Sets the font size used to display sequences.
-
-Save format> Save as Mase, as Phylip, as Clustal, as MSF, as Fasta, as NEXUS
-             Sets the file format used to save alignments
-             [`Miscellaneous options' topic explains how to set default format]
-
-Colors  >    DNA/RNA colors
-             Forces sequences to be colored as DNA/RNA in case they were
-             erroneously recognized as protein data.
-        >    Protein colors
-             Forces sequences to be colored as proteins in case they were
-             erroneously recognized as DNA/RNA data.
-        >    Alt. colors
-             Uses alternate coloring rules defined for protein sequences
-             [`Coloring schemes' topic below explains how to define them].
-        >    Inverted colors
-             Display residues as black letters on colored background instead
-             of as colored letters on grey background.
-
-Allow seq. edition
-             When ON, residues can be deleted/inserted.
-             when OFF (normally), only gaps can be deleted/inserted.
-
-by Reference To display the alignment by reference to a particular sequence:
-             residues identical to that of the ref. seq. are displayed as dots.
-             Possible only when one sequence, the reference, is selected.
-             Alignment edition is impossible while in the reference mode.
-             When used, File:Prepare pdf produces an output by reference.
-             Combination ctrl/cmd+R is a shortcut for calling/exiting this mode.
-
-DNA keys     Allows to use keys "hjkl" to enter DNA sequences
-             "Allow seq. edition" should be ON for this item to be usable.
-             Choose in the submenu what bases will be mapped to these keys 
-        >    hjkl => GATC, hjkl => TCGA, hjkl => ACGT
-             Also, the space bar will be mapped to base N.
-
-Alignment options
-             Allows to choose the desired alignment program and to specify 
-             options sent to this alignment program in order to use, e.g., 
-             specific alignment parameter values.
-             Go to submenu "Edit options" and type desired options in the
-             dialog window that appears. 
-#ifdef WIN32
-             An example is to type /gapopen=5 
-#else
-             An example is to type -gapopen=5 
-#endif
-             When an option has been typed it is active unless you switch it off
-             by calling again "Alignment options" and sliding to the check box.
-             Thus a set of options can be memorized and turned on and off.
-
-Consensus option
-             Allows to set the percent of identical residues needed to define
-             a residue when building a consensus sequence. Sites where this
-             fraction is not reached are filled with N or X.
-
-Fast-Rough   Allows to switch between smooth-slow or rough-fast display.
-
-Allow lowercase
-             If set, lowercase residues will be apparent. If not set, lowercase
-             residues in sequence files display as uppercase.
-
-Customize    To change, possibly permanently, various display settings. See 
-             "Miscellaneous options" and "Sequence coloring" help items.
-             Apply: applies changes in current program session.
-             Set changes permanent: applies changes in current and future
-             program sessions.
-             Close: ignores changes.
-
->>>Sites menu
-Site sets allow to specify parts of a multiple alignment to be retained for
-further analyses (typically, those parts of the alignment taken as 
-reliably aligned). Retained sites are depicted as series of Xs on a special 
-line at bottom of the alignment panel. On color screens, they are also 
-displayed by a dark background. Mouse clicks and drags on this line allow to
-construct/alter the set.
-
-Several sets of sites can be created and stored with the alignment if the Mase
-or NEXUS formats of alignment files are used. Each set has a name chosen by the 
-user. One set of sites at most can be displayed at any time through this menu.
-
-Item "Save current sites" of menu "File" allows to save in an alignment
-file only those sites of the alignment pertaining to the currently displayed
-set. The resulting file may then be processed by, e.g., tree building
-programs.
-
-Create set      creates a line at bottom of alignment to hold the location
-                of alignment sites.
-
-Save set        stores changes done to the current set of sites
-
-Rename set      stores the current set of sites under a new name
-
-Hide set        hides (but remembers except unsaved changes) the current set of 
-                sites
-
-Delete set      removes the currently displayed set of sites from list of known
-                sets
-
-<name>          shows a sites line of name <name> constructed from data stored 
-                in the alignment, or previously created
->>>Species menu
-Species sets can be created and stored with the alignment if the Mase or NEXUS
-formats of alignment files are used.
-
-To select one or several species, click or drag on their names; they will
-appear in black background.
-
-To memorize the current set of selected species, choose "Create set" from
-this menu. The program will ask for a name for this set.
-
-Delete set	deletes (just from memory) the current set of species.
-
-<name>		Displays with black background the set of species memorized
-		under that name.
->>>Footers menu
-Comment lines can be created and displayed at bottom of the screen. These
-lines can contain any text and the program will maintain the vertical
-alignment between this text and sequences. This text can be saved using the
-mase or NEXUS file formats only.
-
-To edit this text, click on the line name, position the cursor, and type text.
-Click again on the line name to stop editing this text.
-
-Show / Hide footers       To show / hide all footer lines
-
-Create footer             To create a new footer line
-
-Delete footer             To delete the currently selected footer line
-
-
->>>Search button & box
-Type a string in box at right and strike <return> key or push button to
-position the cursor in the next occurence of this string from its current
-place.
-
-Push button to position the cursor at next occurence of the current
-search string.
-
-Sequence gaps are ignored by the search procedure.
->>>Goto button & box
-
-           Moves the cursor to desired position or sequence
-
-Position:
-Type a number in box at right and hit <return> key or push button to
-position the cursor at that position of the alignment.
-
-Sequence:
-Type a (fragment of) sequence name in box at right and hit <return> key or 
-push button to position the cursor in that sequence. Case is not significant.
->>>Edit menu
-Rename sequence          To rename the currently selected (= name in black 
-                         background) sequence.
-
-Edit comments            To see or change comments of the currently selected
-                         sequence (Comments can only be saved in mase/NEXUS).
-						 
-Edit sequence            To edit the selected sequence, typically by pasting
-                         external data, or by opening two edit sequence 
-                         windows and transferring sequence data between them.
-
-Delete sequence(s)       Deletes all selected sequences from the alignment.
-
-Create sequence          Allows to create a new-empty sequence in the alignment;
-                         set "Allow seq. edition" from "Props" menu ON 
-                         to be able to type the sequence in.
-
-Load sequence            Allows to load a new sequence in the alignment.
-                         The sequence can be typed in or pasted from a
-                         selection made in another window.
-
-Duplicate sequence       Allows to duplicate the currently selected sequence
-                         with prefix D_ in its name.
-
-Complement sequence      Creates a new sequence equal to the complementary 
-                         strand of the currently selected sequence with prefix 
-                         C_ in its name.
-
-Reverse sequence         Creates a new sequence by reading 3' -> 5' the 
-                         currently selected sequence and named with prefix R_
-
-Exchange Us and Ts       Exchange bases Us and Ts in all currently selected 
-                         sequences.
-
-Align sites              Runs the selected alignment program on the block of 
-                         selected sites and the set of selected sequences.
-                         A window will ask for choosing the reference sequence:
-                         gaps present before alignment in the chosen 
-                         sequence will be preserved in the new alignment.
-#ifdef WIN32
-                         Chosen alignment program will be searched in the directory
-                         of the seaview program, the current directory and
-                         in directories of your PATH variable.
-#else
-                         Your PATH should contain the directories of
-                         programs clustalw/muscle, xterm and seaview_align.sh.
-#endif
-
-Dot plot                 Performs a "dot plot" analysis of the two selected 
-                         sequences. See "Dot plot" item of the help data.
-
-Consensus sequence       Computes the consensus of all currently selected
-                         sequences. At any site, the consensus residue is the
-                         most frequent one if its frequency is above a threshold
-                         value. This threshold (60 % by default) can be changed
-                         through item "Consensus threshold" of menu "Props".
-                         Below threshold, N or X is used.
->>>Dot plot
-              Performs a "dot plot" analysis of two sequences
-
-Enter desired values for the window size and # of matches/window, and click
-on button "Compute", the dot plot will appear.
-
-Click in the dot plot, the corresponding sequence regions appear in
-the alignment panel above the dot plot. Use "Magnify" to take a close look.
-Click on arrows at left to move the hit point by one residue in either of
-six directions.
-Move the slider below the alignment panel to control the number of displayed
-residues.
-
-Fit to window, Reduce, Magnify: perform zoom in and out operations
-Write Postcript: saves the dot plot in a file called from the alignment name
-                 with extension .ps
-Close: closes the dot plot window
-
-                   To perform a dot plot-guided alignment
-                   --------------------------------------
-Click on a diagonal representing two sequence parts to be aligned, then click
-on button "align".
-Repeat this for each sequence parts you want to be aligned to each other.
-To transfer into the multiple alignment the result of these operations, click on
-button "Record alignment".
-Most often, one of the two compared sequences is already aligned to other
-sequences of the multiple alignment, while the other one is not. Choose which
-of the two sequences is already aligned by clicking on the arrow next to
-"Ref. sequence".
->>>Mase file format
-Mase files follow the following format:
-
-Zero or more header lines each beginning with ;;
-Next, for each sequence in the alignment:
-One or more comment lines each beginning with ;
-Sequence name alone on a line (may be long and may contain spaces)
-Sequence data in free form, possibly with numbers and spaces ignored while 
-reading the file. Dashes denote gaps.
-
-Header lines may contain any text and also contain descriptions of site sets and
-of species groups when such data have been defined.
-
-Site sets are written as in this example:
-;;# of segments=10  mychoice
-;; 14,74 221,256 416,449 990,1148 1363,1384 1474,1483 1556,1668 2034,2062
-;; 2114,2139 2756,2859
-where "mychoice" is the name of the set of sites and where the series of pairs
-of numbers lists the endpoints of successive block of sites.
-
-Species groups are written as in this example:
-;;@ of species = 4 distant outgroup
-;; 2, 3, 4, 5
-where "distant outgroup" is the name of the species group and where the series
-of numbers lists the ranks of sequences members of the species group.
-#if WIN32 || unix
->>>Program arguments 
-Program is run by command
-seaview [options] [filename]
-
-where options may be
--save <format_name>
-         [format_name, either  mase, clustal, phylip, msf, nexus or fasta sets 
-          the initial file format for saving operations and for opening the file
-          given on command line; default is mase]
--fast
-         [sequences will be displayed faster but less smoothly]
--inverted
-         [residues will appear as black letters on a colored background]
--fontsize n
-         [sets to integer n the initial fontsize of the alignment panel]
-
-and filename 
-is an optional alignment file to be loaded. The expected format for this file
-is that of the default format for saving operations.
-
-Use `Props:Customize' menu item to further customize the program.
-#endif
-
->>>Sequence coloring
-The "Props:Customize" menu item allows to control colors.
-
-                 SETTING DNA/RNA SEQUENCE COLORING
-A,C,G,T/U buttons are colored using current color of the corresponding nucleotide.
-Click on a button to open a color chooser and select the desired color 
-    (OK will accept the new choice; reset will use the starting shade).
-"reset" will use default colors.
-"Apply" or "Set changes permanent" will apply new shades to current alignment.
-
-
-                 SETTING PROTEIN SEQUENCE COLORING
-aa coloring scheme: by default, amino acids are split in 8 families each displayed 
-in a different color. These families can be customized, up to a maximum of 10.
-Also, an alternative coloring scheme can be defined, and seaview will
-allow to switch between the first and the alternative coloring schemes.
-
-catalog of amino acid colors: colors used for each amino acid family. 
-Click on any to control the desired shade, as explained above.
-White is used for gaps and for unlisted residues.
-
-Example: with the default coloring scheme, groups of amino acids KR and AFILMVW 
-are displayed with the first and second catalog colors, respectively.
-
-Click "reset" to use default amino acid families and color catalog.
-"Apply" or "Set changes permanent" to apply new shades to current alignment.
-
->>>Miscellaneous options
-
-                       MISCELLANEOUS OPTIONS
-
-The "Props:Customize" menu item allows to set these options.
-                      
-[sites] background grey: move the slider to change the grey shade of the alignment
-panel background; the "sites" shade applies to selected sites only; "reset" gives
-default values to both shades.
-
-left-right movement keys: define 4 keys that move cursor right and left 
-by 5 or 50 residues; reset uses default keys.
-
-pdf page format: sets the page format used by the "File:Prepare pdf" menu item.
-
-display lowercase: select so that lowercase characters present in sequence data
-are not displayed as uppercase.
-
-inverted: select to display sequences as black letters on colored background.
-
-default save format: sets the default format of the "File:save as" menu item.
-
->>>Customization
-#ifdef __APPLE__
-Custom settings are stored in the user's Library/Preferences folder.
-#elif __WIN32__
-Custom settings are stored in file seaview.ini in the same directory as seaview program.
-#else
-Custom settings are stored in file .seaviewrc in the user's home directory.
-#endif

Deleted: trunk/packages/seaview/trunk/seaview.xcf
===================================================================
(Binary files differ)

Deleted: trunk/packages/seaview/trunk/seaview.xpm
===================================================================
--- trunk/packages/seaview/trunk/seaview.xpm	2007-07-20 10:28:45 UTC (rev 359)
+++ trunk/packages/seaview/trunk/seaview.xpm	2007-07-21 02:32:37 UTC (rev 360)
@@ -1,131 +0,0 @@
-/* XPM */
-static char * seaview_xpm[] = {
-"32 32 95 2",
-"  	c None",
-". 	c #19CC19",
-"+ 	c #CC4DCC",
-"@ 	c #129812",
-"# 	c #063806",
-"$ 	c #010D01",
-"% 	c #000300",
-"& 	c #031803",
-"* 	c #094C09",
-"= 	c #139C13",
-"- 	c #000000",
-"; 	c #118B11",
-"> 	c #000100",
-", 	c #042204",
-"' 	c #073D07",
-") 	c #14AB14",
-"! 	c #18C818",
-"~ 	c #16BB16",
-"{ 	c #108710",
-"] 	c #063206",
-"^ 	c #000400",
-"/ 	c #17BD17",
-"( 	c #031903",
-"_ 	c #0C680C",
-": 	c #17BC17",
-"< 	c #0F7E0F",
-"[ 	c #031C03",
-"} 	c #084408",
-"| 	c #0F800F",
-"1 	c #010901",
-"2 	c #042404",
-"3 	c #16B916",
-"4 	c #18C918",
-"5 	c #14AA14",
-"6 	c #0F7A0F",
-"7 	c #084808",
-"8 	c #15B015",
-"9 	c #010E01",
-"0 	c #052B05",
-"a 	c #0E770E",
-"b 	c #15AC15",
-"c 	c #18C618",
-"d 	c #18C718",
-"e 	c #14A414",
-"f 	c #042304",
-"g 	c #000200",
-"h 	c #118C11",
-"i 	c #0B5A0B",
-"j 	c #000700",
-"k 	c #021502",
-"l 	c #084308",
-"m 	c #139D13",
-"n 	c #1980E6",
-"o 	c #FFFFFF",
-"p 	c #187CDF",
-"q 	c #010911",
-"r 	c #105293",
-"s 	c #105294",
-"t 	c #051E36",
-"u 	c #051E37",
-"v 	c #146AC0",
-"w 	c #051C33",
-"x 	c #051A2E",
-"y 	c #146BC1",
-"z 	c #0A3763",
-"A 	c #0F4D8B",
-"B 	c #0F4F8E",
-"C 	c #0A3764",
-"D 	c #187BDD",
-"E 	c #01080E",
-"F 	c #000509",
-"G 	c #1779DA",
-"H 	c #01080F",
-"I 	c #0F4F8F",
-"J 	c #092F54",
-"K 	c #0B3865",
-"L 	c #0F5090",
-"M 	c #051B31",
-"N 	c #125FAC",
-"O 	c #156CC3",
-"P 	c #051C32",
-"Q 	c #1468BB",
-"R 	c #1468BC",
-"S 	c #0A345E",
-"T 	c #0A355F",
-"U 	c #1779DB",
-"V 	c #01070C",
-"W 	c #000101",
-"X 	c #1671CB",
-"Y 	c #177ADC",
-"Z 	c #0F4D8A",
-"` 	c #072440",
-" .	c #062340",
-"..	c #05192E",
-"+.	c #105599",
-". . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + ",
-". . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + ",
-". . . . . @ # $ % & * = . . . . + + + + - - - - - - - - + + + + ",
-". . . . ; > - - - - - - . . . . + + + + - - - - - - - - + + + + ",
-". . . . , - ' ) ! ~ { ] . . . . + + + + - - + + + + + + + + + + ",
-". . . . ^ - / . . . . . . . . . + + + + - - + + + + + + + + + + ",
-". . . . ( - _ : . . . . . . . . + + + + - - + + + + + + + + + + ",
-". . . . < - - - [ } | ! . . . . + + + + - - - - - - - - + + + + ",
-". . . . . @ ' 1 - - - 2 3 . . . + + + + - - - - - - - - + + + + ",
-". . . . . . . 4 5 6 [ - 7 . . . + + + + - - + + + + + + + + + + ",
-". . . . . . . . . . 8 - 9 . . . + + + + - - + + + + + + + + + + ",
-". . . . . . . . . . : - ^ . . . + + + + - - + + + + + + + + + + ",
-". . . . 0 a b c d e # - f . . . + + + + - - + + + + + + + + + + ",
-". . . . - - - - - - - g h . . . + + + + - - - - - - - - + + + + ",
-". . . . e i 2 j ^ k l m . . . . + + + + - - - - - - - - + + + + ",
-". . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + ",
-"n n n n n n n n n n n n n n n n o o o o o o o o o o o o o o o o ",
-"n n n n n n n n n n n n n n n n o o o o o o o o o o o o o o o o ",
-"n n n n n n p q q p n n n n n n o o o o o o o o o o o o o o o o ",
-"n n n n n n r - - s n n n n n n o o o o o o o o o o o o o o o o ",
-"n n n n n n t - - u n n n n n n o o o o o o o o o o o o o o o o ",
-"n n n n n v - w x - y n n n n n o o o o o o o o o o o o o o o o ",
-"n n n n n z - A B - C n n n n n o o o o o o o o o o o o o o o o ",
-"n n n n D E F G D H H D n n n n o o o o o o - - - - - o o o o o ",
-"n n n n I - J n n K - L n n n n o o o o o o - - - - - o o o o o ",
-"n n n n M - N n n O - P n n n n o o o o o o o o o o o o o o o o ",
-"n n n Q - - - - - - - - R n n n o o o o o o o o o o o o o o o o ",
-"n n n S - - - - - - - - T n n n o o o o o o o o o o o o o o o o ",
-"n n U V W X n n n n X W V Y n n o o o o o o o o o o o o o o o o ",
-"n n Z - ` n n n n n n  .- A n n o o o o o o o o o o o o o o o o ",
-"n n ..- +.n n n n n n +.- ..n n o o o o o o o o o o o o o o o o ",
-"n n n n n n n n n n n n n n n n o o o o o o o o o o o o o o o o "};
-
Deleted: trunk/packages/seaview/trunk/seaview_align.sh
===================================================================
--- trunk/packages/seaview/trunk/seaview_align.sh	2007-07-20 10:28:45 UTC (rev 359)
+++ trunk/packages/seaview/trunk/seaview_align.sh	2007-07-21 02:32:37 UTC (rev 360)
@@ -1,27 +0,0 @@
-#!/bin/sh
-algo=$1
-if [ $algo = "clustalw" ]; then
-	regargs=4
-else
-	regargs=5
-fi
-shift 1
-arg1=$1
-shift 1
-args=$*
-if [ $# -gt $regargs ]; then
-	shift $regargs
-	echo used $algo options: $*
-fi
-$algo $args
-echo ' '
-echo ' '
-echo ' '
-echo 'Program' $algo 'terminated.'
-echo -n 'Load new alignment? [(y)/n] '
-read rep
-if [ "$rep" = "n" ]; then
-        echo aborted > $arg1.status
-else
-        echo success > $arg1.status
-fi

Deleted: trunk/packages/seaview/trunk/use_mase_files.cxx
===================================================================
--- trunk/packages/seaview/trunk/use_mase_files.cxx	2007-07-20 10:28:45 UTC (rev 359)
+++ trunk/packages/seaview/trunk/use_mase_files.cxx	2007-07-21 02:32:37 UTC (rev 360)
@@ -1,1628 +0,0 @@
-#include "seaview.h"
-#include <ctype.h>
-#include <time.h>
-
-/* included functions */
-int read_mase_seqs_header(const char *masefname, char ***pseq, char ***pseqname, 
-		char ***pcomments, char **pheader, char **err_message);
-int one_more_seq_found(int count1, char ***pseq, char ***pseqname, char ***pcomments);
-int read_fasta_align(const char *fname, char ***pseq, char ***pseqname, 
-		char ***pcomments, char **pheader, char **err_message);
-int read_phylip_align(const char *fname, char ***pseq, char ***pseqname, 
-		char ***pcomments, char **pheader, char **err_message);
-int read_clustal_align(const char *fname, char ***pseq, char ***pseqname, 
-		char ***pcomments, char **pheader, char **err_message);
-int read_msf_align(const char *fname, char ***pseq, char ***pseqname, 
-		char ***pcomments, char **pheader, char **err_message);
-int is_a_protein_seq(char *seq);
-int save_fasta_file(const char *fname, char **seq, char **comments,
-	char **seqname, int totseqs, int *eachlength, region *region_used,
-	int *sel_seqs, int tot_sel_seqs);
-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 output_next_res_from_region(char *seq, int lenseq, 
-	list_segments **segment, int *current, FILE *out, int total, 
-	int use_dots);
-void save_regions(list_regions *regions, FILE *out);
-int save_mase_file(const char *fname, char **seq, char **comments,
-	char *header, char **seqname, int totseqs, int *eachlength,
-	list_regions *regions, region *region_used, int numb_species_sets,
-	int **list_species_sets, char **name_species_sets,
-	int *sel_seqs, int tot_sel_seqs, int tot_comment_lines, 
-	char **comment_name, char **comment_line);
-int save_clustal_file(const char *fname, char **seq,
-	char **seqname, int totseqs, int *eachlength, region *region_used,
-	int *sel_seqs, int tot_sel_seqs);
-int calc_gcg_check(list_segments *psegment, char *seq);
-int save_msf_file(const char *fname, char **seq,
-	char **seqname, int totseqs, int *eachlength, region *region_used,
-	int protein, int *sel_seqs, int tot_sel_seqs);
-char *save_alignment_or_region(const char *fname, char **seq, char **comments,
-	char *header, char **seqname, int totseqs, int *eachlength,
-	list_regions *regions, region *region_used, known_format format,
-	int numb_species_sets, int **list_species_sets, 
-	char **name_species_sets, int *sel_seqs, int tot_sel_seqs, int protein,
-	int tot_comment_lines, char **comment_name, char **comment_line);
-int prepare_printout(const char *filename, char **seq, int totseqs,  
-	char **seqname,
-	int *eachlength, int char_per_line,
-	int block_size, int lines_per_page, int vary_only,
-	char *align_name, int ref0);
-int calc_vary_lines(int *vary_pos, int widpos);
-void out_vary_pos(int *vary_pos, int widnames, int widpos, int nl, FILE *out);
-FILE *open_path(char *fname);
-int check_path(char *fname);
-static void save_species_sets(int numb_species_sets, int **list_species_sets, 
-	char **name_species_sets, int totseqs, FILE *out);
-void save_comment_lines(int tot_comment_lines, char **names, char **lines, 
-	FILE *out);
-known_format what_format(const char *filename);
-extern "C" {
-	char *my_fgets(char *s, int n, FILE *f);
-	}
-
-
-
-/* external */
-int save_nexus_file(const char *fname, int ntaxa, int protein,
-	char **seqs, char **taxnames, char **notes, char *header,
-	int num_species_sets, int **list_species_sets, 
-	char **name_species_sets,
-	list_regions *charsets,
-	int tot_comment_lines, char **comment_name, char **comment_line,
-	region *region_used, int *sel_seqs, int tot_sel_seqs, int *eachlength);
-
-
-
-
-int read_mase_seqs_header(const char *masefname, char ***pseq, char ***pseqname, 
-		char ***pcomments, char **pheader, char **err_message)
-{
-#define MAXLENSEQ 10000 /* unite d'allocation de memoire */
-#define lline  2000
-FILE *masef;
-char line[lline], *i, *base, *header = NULL, *provseq = NULL, *p;
-int  l, lenseqs, lpre, lseq, l2, totseqs = -1, want_header, curr_max_header;
-static char ret_message[200];
-char **seq, **seqname, **comments;
-
-*ret_message = 0;
-*err_message = ret_message;
-if( (masef=fopen(masefname,"r")) == NULL) {
-	sprintf(ret_message,"File not found:%s",masefname);
-	return 0;
-	}
-want_header = (pheader != NULL);
-
-if(fgets(line, lline, masef)==NULL)goto fini;
-if(strchr(line, '\n') == NULL) {
-	strcpy(ret_message,"Not a mase file!");
-	goto fini;
-	}
-if(strncmp(line,";;",2)==0) {
-	if(want_header) {
-		if( (header=(char *)malloc(MAXLENCOM+1)) ==
-							 NULL)goto nomem;
-		curr_max_header = MAXLENCOM;
-		strcpy(header,line);
-		lpre=strlen(line);
-		}
-	do	{
-		if( fgets(line,lline,masef)==NULL ) goto fini;
-		if(strncmp(line,";;",2)!=0) break;
-		if(header != NULL) {
-			lseq=strlen(line);
-			if(lpre+lseq > curr_max_header) {
-				curr_max_header += MAXLENCOM;
-				if( (p=(char *)malloc(curr_max_header+1)) 
-					== NULL ) goto nomem;
-				memcpy(p, header, lpre);
-				free(header);
-				header = p;
-				}
-			memcpy(header+lpre,line, lseq);
-			lpre += lseq;
-			}
-		}
-	while (1);
-	if( want_header ) {
-		header[lpre] = 0;
-		header=(char *)realloc(header,lpre+1);
-		}
-	}
-if(*line != ';' ) {
-	strcpy(ret_message,"Not a mase file!");
-	goto fini;
-	}
-
-lenseqs=MAXLENSEQ;
-if( (provseq=(char *)malloc(lenseqs+1)) ==NULL)goto nomem;
-
-i=line;
-while(i!=NULL){
-	totseqs = one_more_seq_found(totseqs, &seq, &seqname, &comments);
-	if(totseqs == -1) goto nomem;
-	if(comments!=NULL) {
-		if( (comments[totseqs]=(char *)malloc(MAXLENCOM+1)) ==
-							 NULL)goto nomem;
-		strcpy(comments[totseqs],line);
-		lpre=strlen(line); l=MAXLENCOM;
-		while(*fgets(line,lline,masef)==';') {
-			lseq=strlen(line);
-			if(lpre+lseq <= l) {
-				strcpy(comments[totseqs]+lpre,line);
-				lpre += lseq;
-				}
-			else l=lpre-1;
-			}
-		if(lpre<MAXLENCOM)
-		   comments[totseqs]=(char *)realloc(comments[totseqs],lpre+1);
-		}
-	else	while(*fgets(line,lline,masef)==';');
-	l = strlen(line);
-	while((line[l-1] == ' ' || line[l-1] == '\n') && l>0 ) l--; line[l] = 0;
-	if( (seqname[totseqs]=(char *)malloc(l+1)) == NULL)goto nomem;
-	strcpy(seqname[totseqs],line);
-	lseq = 0; /* what is already put in provseq */
-	while( (i=fgets(line,lline,masef))!= NULL && *i != ';' ) {
-	    	l2 = strlen(line);
-		if( line[l2 - 1] == '\n' ) l2--;
-	   	while(l2>0 && line[l2-1]==' ')l2--;
-		if(lseq + l2 > lenseqs) {
-			char *temp;
-			lenseqs += MAXLENSEQ;
-			temp = (char *)malloc(lenseqs+1);
-			if(temp == NULL) goto nomem;
-			memcpy(temp, provseq, lseq);
-			free(provseq);
-			provseq = temp;
-			}
-	   	memcpy(provseq+lseq, line, l2);
-		lseq += l2;
-		}
-	provseq[lseq]='\0';
-	seq[totseqs] = (char *)malloc(lseq+1);
-	if(seq[totseqs] == NULL) goto nomem;
-/* ignore space or non printable characters */
-	base=provseq - 1; p = seq[totseqs] - 1;
-	while ( *(++base) != 0) {
-		if(isprint(*base) && ! isspace(*base) ) {
-//			*(++p) = toupper(*base);
-			*(++p) = *base;
-			}
-		}
-	*(++p) = 0;
-	}
-seq = (char **)realloc(seq, (totseqs + 1)*sizeof(char *));
-seqname = (char **)realloc(seqname, (totseqs + 1)*sizeof(char *));
-comments = (char **)realloc(comments, (totseqs + 1)*sizeof(char *));
-*pseq = seq; *pseqname = seqname; *pcomments = comments;
-fini:
-fclose(masef);
-if(want_header) *pheader = header;
-if(provseq != NULL) free(provseq);
-return totseqs+1;
-nomem:
-sprintf(ret_message,"Error: Not enough memory!");
-totseqs = -1;
-goto fini;
-}
-
-
-int one_more_seq_found(int count1, char ***pseq, char ***pseqname, char ***pcomments)
-{
-static int max_count;
-char **seq, **seqname, **comments;
-
-if(count1 == -1) max_count = 0;
-
-if(count1 + 1 < max_count) return count1 + 1;
-
-count1++;
-if(max_count == 0) {
-	max_count = 100;
-	seq = (char **)malloc(max_count * sizeof(char *));
-	if(seq == NULL) return -1;
-	seqname = (char **)malloc(max_count * sizeof(char *));
-	if(seqname == NULL) return -1;
-	comments = (char **)malloc(max_count * sizeof(char *));
-	if(comments == NULL) return -1;
-	}
-else {
-	seq = *pseq; seqname = *pseqname; comments = *pcomments;
-	max_count = 3 * max_count;
-	seq = (char **)realloc(seq, max_count * sizeof(char *));
-	if(seq == NULL) return -1;
-	seqname = (char **)realloc(seqname, max_count * sizeof(char *));
-	if(seqname == NULL) return -1;
-	comments = (char **)realloc(comments, max_count * sizeof(char *));
-	if(comments == NULL) return -1;
-	}
-
-*pseq = seq; *pseqname = seqname; *pcomments = comments;
-return count1;
-}
-
-int read_fasta_align(const char *fname, char ***pseq, char ***pseqname, 
-		char ***pcomments, char **pheader, char **err_message)
-{
-FILE *in;
-int totseqs, lseq, l2, l, lenseqs;
-char line[300], *p, *i, *provseq = NULL, c, *q;
-static char ret_message[200];
-char **seq, **seqname, **comments;
-
-*ret_message = 0;
-*err_message = ret_message;
-if( (in=fopen(fname,"r")) == NULL) {
-	sprintf(ret_message,"File not found:%s", fname);
-	return 0;
-	}
-
-/* calcul du nombre de sequences dans le fichier */
-totseqs = 0;
-while(fgets(line, sizeof(line), in) != NULL) {
-	if(*line == '>') totseqs++;
-	}
-rewind(in);
-seq = (char **)malloc(totseqs * sizeof(char *));
-if(seq == NULL) goto nomem;
-comments = (char **)malloc(totseqs * sizeof(char *));
-if(comments == NULL) goto nomem;
-seqname = (char **)malloc(totseqs * sizeof(char *));
-if(seqname == NULL) goto nomem;
-*pseq = seq; *pcomments = comments; *pseqname = seqname;
-
-lenseqs = MAXLENSEQ;
-totseqs = -1;
-i = fgets(line, sizeof(line), in);
-if(line[0] != '>') {
-	strcpy(ret_message,"File not in Fasta format!");
-	totseqs = -1; goto fini;
-	}
-while( i != NULL ){
-	/* finish reading very long title line */
-	c = line[strlen(line) - 1];
-	while(c != '\n' && c != '\r' && c != EOF) c = getc(in);
-	q = line + strlen(line) - 1;
-	while(q > line + 1 && (*q == '\n' || *q == '\r')) *(q--) = 0;
-	totseqs++;
-	p = line + 1; while(*p != ' ' && *p != '\n') p++;
-	l = p - line - 1;
-	if( (seqname[totseqs] = (char *)malloc(l+1)) == NULL)goto nomem;
-	memcpy(seqname[totseqs], line + 1, l); seqname[totseqs][l] = 0;
-	/* use rest of title line, if any, as comment */
-	while(*p == ' ') p++;
-	l = q - p + 1;
-	if( l > 0) {
-		comments[totseqs] = (char *)malloc(l + 3);
-		if(comments[totseqs] != NULL) {
-			strcpy(comments[totseqs], ";");
-			strcpy(comments[totseqs] + 1, p);
-			strcpy(comments[totseqs] + l + 1, "\n");
-			}
-		}
-	else comments[totseqs] = NULL;
-	seq[totseqs] = (char *)malloc(lenseqs+1);
-	if(seq[totseqs] == NULL) goto nomem;
-	lseq = 0;
-	while( (i=fgets(line, sizeof(line), in))!= NULL && *i != '>' ) {
-		l2 = strlen(line);
-		if( line[l2 - 1] == '\n' ) l2--;
-	   	while(l2>0 && line[l2-1]==' ')l2--;
-		if(lseq + l2 > lenseqs) {
-			char *temp;
-			lenseqs += MAXLENSEQ;
-			temp = (char *)malloc(lenseqs+1);
-			if(temp == NULL) goto nomem;
-			memcpy(temp, seq[totseqs], lseq);
-			free(seq[totseqs]);
-			seq[totseqs] = temp;
-			}
-	   	memcpy(seq[totseqs]+lseq, line, l2);
-		lseq += l2;
-		}
-	seq[totseqs][lseq]='\0';
-/* convert all to upper case 
-	p = seq[totseqs] - 1; while( *(++p) != 0 ) *p = toupper(*p); */
-	}
-fini:
-fclose(in);
-if(provseq != NULL) free(provseq);
-*pheader = NULL;
-return totseqs+1;
-nomem:
-sprintf(ret_message,"Error: Not enough memory!");
-totseqs = -1;
-goto fini;
-}
-
-
-int read_phylip_align(const char *fname, char ***pseq, char ***pseqname, 
-		char ***pcomments, char **pheader, char **err_message)
-{
-FILE *in;
-char *p, *q, line[PHYNAME + 200];
-char **seq, **comments, **seqname;
-int totseqs, lenseqs, i, l;
-static char ret_message[200];
-*ret_message = 0;
-*err_message = ret_message;
-in=fopen(fname,"r");
-if(in==NULL) {
-	sprintf(ret_message,"File not found:%s",fname);
-	return 0;
-	}
-fgets(line,sizeof(line),in);
-if( sscanf(line, "%d%d", &totseqs, &lenseqs) != 2) {
-		sprintf(ret_message,"Not a PHYLIP file");
-		totseqs = 0;
-		goto fini;
-		}
-seq = (char **)malloc(totseqs * sizeof(char *));
-if(seq == NULL) goto nomem;
-seqname = (char **)malloc(totseqs * sizeof(char *));
-if(seqname == NULL) goto nomem;
-comments = (char **)malloc(totseqs * sizeof(char *));
-if(comments == NULL) goto nomem;
-for(i=0; i<totseqs; i++) {
-	if( (seq[i] = (char *)malloc(lenseqs+1) ) == NULL ) goto nomem;
-	if( (seqname[i] = (char *)malloc(PHYNAME+1) ) == NULL ) goto nomem;
-	comments[i] = NULL;
-	}
-for(i=0; i<totseqs; i++) {
-	fgets(line,sizeof(line),in);
-	memcpy(seqname[i],line,PHYNAME); seqname[i][PHYNAME] = 0;
-	p = line+PHYNAME; q = seq[i];
-	while(*p != '\n') {
-		if(*p != ' ') *(q++) = *p;
-		p++;
-		}
-	}
-l = q - seq[totseqs - 1];
-while( l < lenseqs) {
-	fgets(line,sizeof(line),in);
-	for(i=0; i<totseqs; i++) {
-		fgets(line,sizeof(line),in);
-		p = line; q = seq[i] + l;
-		while(*p != '\n') {
-			if(*p != ' ') *(q++) = *p;
-			p++;
-			}
-		}
-	l = q - seq[totseqs - 1];
-	}
-for(i=0; i<totseqs; i++) seq[i][l] = 0;
-fini:
-*pheader = NULL;
-fclose(in);
-*pseq = seq; *pseqname = seqname; *pcomments = comments;
-return totseqs;
-nomem:
-sprintf(ret_message,"Error: Not enough memory!");
-totseqs = 0;
-goto fini;
-}
-
-
-int read_clustal_align(const char *fname, char ***pseq, char ***pseqname, 
-		char ***pcomments, char **pheader, char **err_message)
-{
-FILE *in;
-char line[200], *p;
-int i, l, curr_spec, first=TRUE, curr_len, next_len, tot_spec, curr_max_len,
-	carac, wid_name;
-static char ret_message[200];
-char **seq, **comments, **seqname = NULL;
-
-*ret_message = 0;
-*err_message = ret_message;
-in=fopen(fname,"r");
-if(in==NULL) {
-	sprintf(ret_message,"File not found:%s",fname);
-	return 0;
-	}
-fgets(line,sizeof(line),in);
-if(strncmp(line,"CLUSTAL",7) != 0) { /* skip 1st line with CLUSTAL in it */
-	strcpy(ret_message,"File not in CLUSTAL format!");
-	tot_spec = -1; goto fini;
-	}
-/* skip next empty lines */
-do	{
-	carac = getc(in);
-	if(carac == ' ') {
-		fgets(line,sizeof(line),in);
-		carac = getc(in);
-		}
-	}
-while(carac == '\n' || carac == '\r');
-ungetc(carac, in); /* back to start of 1st non-empty line */
-tot_spec = curr_spec = -1; curr_len = next_len = 0;
-while( fgets(line, sizeof(line), in) != NULL ) {
-	if(*line == '\n' || *line == ' ') {
-		curr_spec = -1;
-		curr_len = next_len;
-		first = FALSE;
-		continue;
-		}
-	else if(tot_spec >= 0 && curr_spec == -1 &&
-		strncmp(line, seqname[0], strlen(seqname[0]) ) != 0) {
-		break;
-		}
-	else {
-		if(first) {
-			curr_spec = one_more_seq_found(curr_spec, &seq, &seqname, &comments);
-			if(curr_spec == -1) goto nomem;
-			}
-		else	curr_spec++;
-		}
-	if(first && curr_spec == 0) {
-/* calcul long partie nom: enlever tout ce qui n'est pas espace en fin */
-		p = line + strlen(line) - 2; 
-		while(*p == ' ' || isdigit(*p) ) p--; 
-		while (*p != ' ') p--;
-		wid_name = p - line + 1;
-		}
-	if(first) {
-		seqname[curr_spec] = (char *)malloc(wid_name+1);
-		if(seqname[curr_spec]==NULL) {
-			goto nomem;
-			}
-		memcpy(seqname[curr_spec], line, wid_name);
-		p = seqname[curr_spec] + wid_name - 1;
-		while(*p==' ') p--; *(p+1)=0;
-		if(curr_spec > tot_spec) tot_spec = curr_spec;
-		seq[curr_spec] = (char *)malloc(CLU_BLOCK_LEN+1);
-		curr_max_len = CLU_BLOCK_LEN;
-		if(seq[curr_spec]==NULL) {
-			goto nomem;
-			}
-		comments[curr_spec] = NULL;
-		}
-	if(curr_spec == 0) {
-		l = strlen(line) - 1;
-		p = line + l - 1; 
-		while(*p == ' ' || isdigit(*p) ) { p--; l--; }
-		l -= wid_name;
-		if(curr_len + l > curr_max_len) {
-			curr_max_len += CLU_BLOCK_LEN;
-			for(i=0; i<=tot_spec; i++) {
-				p = (char *)malloc(curr_max_len+1);
-				if(p == NULL) goto nomem;
-				memcpy(p, seq[i], curr_len);
-				free(seq[i]);
-				seq[i] = p;
-				}
-			
-			}
-		next_len = curr_len + l;
-		}
-	memcpy(seq[curr_spec]+curr_len, line + wid_name, l);
-	}
-for(i=0; i<=tot_spec; i++) seq[i][next_len] = 0;
-seq = (char **)realloc(seq, (tot_spec + 1)*sizeof(char *));
-seqname = (char **)realloc(seqname, (tot_spec + 1)*sizeof(char *));
-comments = (char **)realloc(comments, (tot_spec + 1)*sizeof(char *));
-*pseq = seq; *pseqname = seqname; *pcomments = comments;
-fini:
-*pheader = NULL;
-fclose(in);
-return tot_spec + 1;
-nomem:
-sprintf(ret_message,"Error: Not enough memory!");
-tot_spec = -1;
-goto fini;
-}
-
-
-int read_msf_align(const char *fname, char ***pseq, char ***pseqname, 
-		char ***pcomments, char **pheader, char **err_message)
-{
-FILE *in;
-char line[100], *p, *q;
-int l, curr_spec, maxwidname=0, curr_len, tot_spec, wid_1_line, wid_block;
-static char ret_message[200];
-char **seq, **seqname, **comments;
-
-*ret_message = 0;
-*err_message = ret_message;
-in=fopen(fname,"r");
-if(in==NULL) {
-	sprintf(ret_message,"File not found:%s",fname);
-	return 0;
-	}
-
-/* compter le nbre de seqs dans le fichier */
-tot_spec = 0;
-while(fgets(line, sizeof(line), in) != NULL) {
-	if(strncmp(line, "//", 2) == 0) break;
-	if(strstr(line, "Name: ") != NULL) tot_spec++;
-	}
-rewind(in);
-seq = (char **)malloc(tot_spec * sizeof(char *));
-if(seq == NULL) goto nomem;
-comments = (char **)malloc(tot_spec * sizeof(char *));
-if(comments == NULL) goto nomem;
-seqname = (char **)malloc(tot_spec * sizeof(char *));
-if(seqname == NULL) goto nomem;
-*pseq = seq; *pcomments = comments; *pseqname = seqname;
-
-p = NULL;
-while( fgets(line,sizeof(line),in) != NULL) {
-	if( (p = strstr(line, "MSF: ")) != NULL) break;
-	}
-if(p == NULL || tot_spec == 0) {
-	strcpy(ret_message,"File not in MSF format!");
-	tot_spec = -1; goto fini;
-	}
-tot_spec = -1;
-do	{
-	fgets(line,sizeof(line),in);
-	if( (p = strstr(line, "Name:") ) == NULL) continue;
-	tot_spec++;
-	q = strstr(p, " Len: "); 
-	sscanf(q + 5, "%d", &l);
-	seq[tot_spec] = (char *)malloc(l + 1);
-	if(seq[tot_spec]==NULL) goto nomem;
-	p += 5; while(*p == ' ') p++;
-	q = p; while(*q != ' ') q++;
-	l = q - p;
-	seqname[tot_spec] = (char *)malloc(l + 1);
-	if(seqname[tot_spec]==NULL) goto nomem;
-	memcpy(seqname[tot_spec], p, l); seqname[tot_spec][l] = 0;
-	if(l > maxwidname) maxwidname = l;
-	comments[tot_spec] = NULL;
-	}
-while(strncmp(line, "//", 2) != 0);
-curr_spec = 0; curr_len = 0; wid_block = 0;
-while( fgets(line, sizeof(line), in) != NULL ) {
-	p = line; while(*p == ' ') p++;
-	l = strlen(seqname[curr_spec]);
-	if(strncmp(p, seqname[curr_spec], l) != 0) continue;
-	p += l; while(*p == ' ') p++; p--;
-	q = seq[curr_spec] + curr_len;
-	while( *(++p) != '\n') {
-		if( *p == ' ') continue;
-		if(*p == '.') *p = '-';
-		*(q++) = *p;
-		}
-	*q = 0;
-	wid_1_line = q - (seq[curr_spec] + curr_len);
-	wid_block = (wid_1_line > wid_block ? wid_1_line : wid_block);
-	if(curr_spec == tot_spec) {
-		curr_len += wid_block;
-		curr_spec = 0;
-		wid_block = 0;
-		}
-	else	curr_spec++;
-	}
-fini:
-*pheader = NULL;
-fclose(in);
-return tot_spec + 1;
-nomem:
-sprintf(ret_message,"Error: Not enough memory!");
-tot_spec = -1;
-goto fini;
-}
-
-
-int is_a_protein_seq(char *seq)
-/* returns TRUE if seq looks like a protein sequence (less than 80% ACGTU) */
-{
-static char dna[]="ACGTU";
-int total=0, length=0;
-while(*seq != 0) {
-	if(*seq != '-' && toupper(*seq) != 'N') { 
-		if( strchr(dna, toupper(*seq)) != NULL ) total++;
-		length++; 
-		}
-	seq++;
-	}
-return ( (float)(total) / length ) <= 0.8 ;
-}
-
-
-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)
-/* sauver des sequences ou des regions au format phylip
-region_used pointe vers la region a sauver
-si region_used == NULL, toutes les sequences sont sauvees
-rend 0 si ok, 
-	1 si erreur d'ecriture dans le fichier
-	2 si tentative de depasser la longueur d'une sequence
-*/
-{
-const int widphylin = 60;
-FILE *out;
-int lenseqs, i, j, retval = 1, current, save_current, err, vtotseqs, lu;
-list_segments *psegment, all_sequence, *curr_segment;
-region maregion;
-
-if(totseqs == 0) return 0;
-if( (out = fopen(fname,"w")) == NULL) return 1;
-if(region_used == NULL) { /* on veut tout sauver */
-	tot_sel_seqs = 0;
-	all_sequence.debut = 1;
-	all_sequence.fin = eachlength[0];
-	for(i = 1; i < totseqs; i++) /* calcul long max des seqs */
-		if( eachlength[i] > all_sequence.fin )  
-			 all_sequence.fin = eachlength[i];
-	all_sequence.next = NULL;
-	maregion.list = &all_sequence;
-	region_used = &maregion;
-	}
-/* calcul longueur des regions */
-lenseqs = 0;
-psegment = region_used->list;
-while(psegment != NULL) {
-	lenseqs += psegment->fin - psegment->debut + 1;
-	psegment = psegment->next;
-	}
-vtotseqs = 0;
-for(i=0; i < totseqs; i++) 
-	if(tot_sel_seqs == 0 || sel_seqs[i]) ++vtotseqs;
-fprintf(out,"%d   %d\n", vtotseqs, lenseqs);
-for(i=0; i < totseqs; i++) {
-	if(tot_sel_seqs != 0 && ! sel_seqs[i]) continue;
-	psegment = region_used->list; current = 0;
-	for(j = 0; j < PHYNAME; j++) {
-		if(seqname[i][j] == 0) break;
-		putc(seqname[i][j],out);
-		}
-	while(j < PHYNAME) { putc( ' ', out ); j++; }
-	lu = 0;
-	while(lu < widphylin && psegment != NULL) {
-		putc( ' ', out );
-		err = output_next_res_from_region(seq[i], eachlength[i], &psegment, 
-			&current, out, 10, FALSE);
-		lu += err;
-		}
-	putc('\n', out);
-	if(ferror(out)) goto fin;
-	}
-while( psegment != NULL ) {
-	putc('\n',out);
-	curr_segment = psegment; save_current = current;
-	for(i=0; i < totseqs; i++) {
-		if(tot_sel_seqs != 0 && ! sel_seqs[i]) continue;
-		psegment = curr_segment; current = save_current;
-		for(j = 0; j < PHYNAME; j++) putc( ' ', out );
-		lu = 0;
-		while(lu < widphylin && psegment != NULL) {
-			putc( ' ', out );
-			err = output_next_res_from_region(seq[i], eachlength[i], 
-				&psegment, &current, out, 10, FALSE);
-			lu += err;
-			}
-		putc('\n', out);
-		if(ferror(out)) goto fin;
-		}
-	}
-retval = 0;
-fin:
-fclose(out);
-return retval;
-}
-
-
-int output_next_res_from_region(char *seq, int lenseq, 
-	list_segments **segment, int *current, FILE *out, int total, 
-	int use_dots)
-/* ecrire dans le fichier out les total residus a partir de la position courante
-dans une liste de regions. lenseq est la longueur de la sequence seq.
-La position courante est determinee par le segment courant (*segment, qui peut
-etre modifie par la fonction) et par la position (from 0) dans celui-ci (*current
-qui est modifie par la fonction pour etre pret pour l'appel suivant).
-Si le segment demande va au dela de la fin de la seq, des - sont ecrits.
-Rend le nombre de residus effectivement ecrits, qui est tjrs celui demande.
-Doit etre appelle la premiere fois avec *current = 0
-*/
-{
-int debut, fin, vfin, ecrit = 0, nombre;
-char *p;
-static char line[500];
-if( *segment == NULL) 
-	return 0;
-do	{
-	debut = (*segment)->debut; fin = (*segment)->fin; 
-	vfin = fin; if(fin > lenseq) vfin = lenseq;
-	nombre = total;
-	if( nombre - 1 + *current + debut > vfin)
-		nombre = vfin + 1 - *current - debut;
-	if(nombre > 0) {
-		memcpy(line, seq + *current + debut - 1, nombre); 
-		line[nombre] = 0;
-		if(use_dots) {
-			p = line;
-			while( (p = strchr(p, '-')) != NULL) *p = '.';
-			}
-		fwrite(line, 1, nombre, out);
-		ecrit += nombre; total -= nombre; (*current) += nombre;
-		}
-	if( fin > lenseq && total > 0 ) {
-		nombre = total;
-		if( nombre - 1 + *current + debut > fin)
-			nombre = fin + 1 - *current - debut;
-		ecrit += nombre; (*current) += nombre; total -= nombre;
-		while(nombre-- > 0) putc('-', out); 
-		}
-	if( *current + debut > fin) {
-		*segment = (*segment)->next;
-		if(*segment == NULL) break;
-		*current = 0;
-		}
-	}
-while(total > 0);
-return ecrit;
-}
-
-
-void save_regions(list_regions *regions, FILE *out)
-{
-int total, l_line;
-list_segments *segment;
-char line[80];
-do	{
-	total = 0;
-	segment = regions->element->list;
-	while(segment != NULL) {
-		total++;
-		segment = segment->next;
-		}
-	if(total == 0) continue;
-	fprintf(out,";;# of segments=%d %s\n",total,regions->element->name);
-	strcpy(line, ";;"); l_line=2;
-	segment = regions->element->list;
-	while(segment != NULL) {
-		if(l_line + 12 >= sizeof(line)-1) {
-			fputs(line,out); putc('\n',out);
-			strcpy(line,";;"); l_line=2;
-			}
-		sprintf(line+l_line," %d,%d", segment->debut, segment->fin);
-		l_line += strlen(line+l_line);
-		segment= segment->next;
-		}
-	fputs(line,out); putc('\n',out);
-	}
-while(	regions = regions->next, regions != NULL );
-}
-
-
-int save_mase_file(const char *fname, char **seq, char **comments,
-	char *header, char **seqname, int totseqs, int *eachlength,
-	list_regions *regions, region *region_used, int numb_species_sets,
-	int **list_species_sets, char **name_species_sets,
-	int *sel_seqs, int tot_sel_seqs, int tot_comment_lines, 
-	char **comment_name, char **comment_line)
-/* sauver un alignement au format mase
-regions: l'ensemble des regions a ecrire (si on sauve tout l'alignement)
-	NULL si on ne sauve que des regions
-region_used: pointeur vers la region a sauver 
-	     et on ne sauve que les seqs selectionnees s'il y en a, 
-	ou NULL pour sauver tout l'alignement
-rend 0 si OK, 
-	1 si erreur ecriture du fichier
-	2 si depassement de longueur d'une sequence (avec region seulement)
-*/
-{
-FILE *out;
-int num, retval = 1, current, ecrit, maxlength;
-time_t heure;
-list_segments *psegment, all_sequence;
-region maregion;
-
-if(totseqs == 0) return 0;
-out=fopen(fname,"w");
-if(out == NULL) return 1;
-
-maxlength = 0;
-
-time(&heure);
-fprintf(out,";; saved by seaview on %s",ctime(&heure));
-if(region_used == NULL) { /* on veut tout sauver */
-	all_sequence.debut = 1;
-	all_sequence.next = NULL;
-	maregion.list = &all_sequence;
-	maregion.name = NULL;
-	region_used = &maregion;
-	tot_sel_seqs = 0;
-	maxlength = eachlength[0];
-	for(num=1; num<totseqs; num++) {
-		if(maxlength < eachlength[num]) maxlength = eachlength[num];
-		}
-	}
-else
-	fprintf(out,";; region choice only: %s\n",region_used->name);
-if(ferror(out)) goto fin;
-if(header != NULL && *header != 0) {
-	fputs(header,out);
-	if(ferror(out)) goto fin;
-	}
-if(regions != NULL) {
-	save_regions(regions, out);
-	if(ferror(out)) goto fin;
-	}
-if(tot_comment_lines > 0) {
-	save_comment_lines(tot_comment_lines, comment_name, comment_line, out);
-	if(ferror(out)) goto fin;
-	}
-if(numb_species_sets != 0) { /* sauver les species sets */
-	save_species_sets(numb_species_sets, list_species_sets, 
-		name_species_sets, totseqs, out);
-	if(ferror(out)) goto fin;
-	}
-for(num=0; num<totseqs; num++) {
-	if( tot_sel_seqs != 0 && ! sel_seqs[num] ) continue;
-	current = 0; psegment = region_used->list;
-	all_sequence.fin = eachlength[num];
-	if(comments != NULL && comments[num] != NULL)
-		fputs(comments[num], out);
-	else fputs(";no comment\n", out);
-	if(ferror(out)) goto fin;
-	fprintf(out,"%s\n",seqname[num]);
-	if(ferror(out)) goto fin;
-	do	{
-		ecrit = output_next_res_from_region(seq[num], eachlength[num], 
-			&psegment, &current, out, 60, FALSE);
- 		if(ferror(out)) goto fin;
-		if( ecrit > 0) putc('\n', out);
-		else if(ecrit == -1) {retval = 2; goto fin; }
-		}
-	while(ecrit != 0);
-	if( (ecrit = maxlength - eachlength[num]) > 0) {
-		int n;
-		for(n = 1; n <= ecrit; n++) { 
-			putc('-', out); if(n % 60 == 0) putc('\n', out); 
-			}
-		putc('\n', out);
-		}
-	if(ferror(out)) goto fin;
-	}
-retval = 0;
-fin:
-if( fclose(out) != 0 ) retval = 1;
-return retval;
-}
-
-
-int save_fasta_file(const char *fname, char **seq, char **comments,
-	char **seqname, int totseqs, int *eachlength, region *region_used,
-	int *sel_seqs, int tot_sel_seqs)
-/* sauver des sequences ou des regions au format fasta
-region_used pointe vers la liste des regions a sauver
-si region_used == NULL, toutes les sequences sont sauvees
-rend 0 si ok, 1 si erreur d'ecriture dans le fichier
-	2 si tentative de depasser la longueur d'une sequence
-*/
-{
-FILE *out;
-int num, retval = 1, current, ecrit;
-list_segments *psegment, all_sequence;
-region maregion;
-char *p;
-
-if(totseqs == 0) return 0;
-if( (out = fopen(fname,"w")) == NULL) return 1;
-if(region_used == NULL) { /* on veut tout sauver */
-	tot_sel_seqs = 0;
-	all_sequence.debut = 1;
-	all_sequence.fin = eachlength[0];
-	for(num = 1; num < totseqs; num++)
-		if( eachlength[num] < all_sequence.fin )  
-			 all_sequence.fin = eachlength[num];
-	all_sequence.next = NULL;
-	maregion.list = &all_sequence;
-	region_used = &maregion;
-	}
-for(num=0; num<totseqs; num++) {
-	if( tot_sel_seqs != 0 && ! sel_seqs[num] ) continue;
-	current = 0; psegment = region_used->list;
-	all_sequence.fin = eachlength[num];
-	fprintf(out,">%s", seqname[num]);
-	if(comments[num] != NULL) {
-		putc(' ', out); 
-		p = comments[num] + 1;
-		while(*p != '\n' && *p != 0) putc(*(p++), out);
-		}
-	putc('\n', out);
-	if(ferror(out)) goto fin;
-	do	{
-		ecrit = output_next_res_from_region(seq[num], eachlength[num], 
-			&psegment, &current, out, 60, FALSE);
-		if( ecrit > 0) putc('\n', out);
-		else if(ecrit == -1) {retval = 2; goto fin; }
-		}
-	while(ecrit != 0);
-	if(ferror(out)) goto fin;
-	}
-retval = 0;
-fin:
-if( fclose(out) != 0 ) return 1;
-return retval;
-}
-
-
-
-int save_clustal_file(const char *fname, char **seq,
-	char **seqname, int totseqs, int *eachlength, region *region_used,
-	int *sel_seqs, int tot_sel_seqs)
-/* sauver des sequences ou des regions au format clustal
-region_used pointe vers la liste des regions a sauver
-si region_used == NULL, toutes les sequences sont sauvees
-rend 0 si ok, 1 si erreur d'ecriture dans le fichier
-	2 si tentative de depasser la longueur d'une sequence
-*/
-{
-const int widcluslin = 60;
-FILE *out;
-int i, j, retval = 1, current, save_current, err, l, lmax;
-list_segments *psegment, all_sequence, *curr_segment;
-region maregion;
-
-if(totseqs == 0) return 0;
-if( (out = fopen(fname,"w")) == NULL) return 1;
-if(region_used == NULL) { /* on veut tout sauver */
-	tot_sel_seqs = 0;
-	all_sequence.debut = 1;
-	all_sequence.fin = eachlength[0];
-	for(i = 1; i < totseqs; i++)
-		if( eachlength[i] > all_sequence.fin )  
-			 all_sequence.fin = eachlength[i];
-	all_sequence.next = NULL;
-	maregion.list = &all_sequence;
-	region_used = &maregion;
-	}
-lmax = 0;
-for(i=0; i < totseqs; i++) {
-	if( tot_sel_seqs != 0 && ! sel_seqs[i] ) continue;
-	l = strlen(seqname[i]);
-	if(l > lmax) lmax = l;
-	}
-lmax += 2;
-
-fprintf(out,"CLUSTAL W (1.7) multiple sequence alignment\n\n\n");
-current = 0; psegment = region_used->list;
-while( psegment != NULL ) {
-	curr_segment = psegment; save_current = current;
-	for(i=0; i < totseqs; i++) {
-		if( tot_sel_seqs != 0 && ! sel_seqs[i] ) continue;
-		psegment = curr_segment; current = save_current;
-/* remplacer espaces internes par _ */
-		for(j = 0; j < lmax; j++) {
-			if(seqname[i][j] == 0) break;
-			putc( (seqname[i][j] == ' ' ? '_' : seqname[i][j] ), 
-				out);
-			}
-		while( j < lmax) {
-			putc(' ', out); j++;
-			}
-		err= output_next_res_from_region(seq[i], eachlength[i], 
-			&psegment, &current, out, widcluslin, FALSE);
-		putc('\n', out);
-		if(err == -1) {retval = 2; goto fin; }
-		if(ferror(out)) goto fin;
-		}
-	fprintf(out, "\n\n");
-	}
-retval = 0;
-fin:
-if( fclose(out) != 0 ) return 1;
-return retval;
-}
-
-
-int calc_gcg_check(list_segments *psegment, char *seq)
-{
-int  i, debut, fin, residue, pos = 0;
-long check = 0;
-while(psegment != NULL) {
-	debut = psegment->debut; fin = psegment->fin;
-        for( i=debut; i<= fin; i++) {
-		residue = toupper(seq[i - 1]);
-		if(residue == '-') residue = '.';
-                check += (( (pos++) % 57)+1) * residue;
-		}
-	psegment = psegment->next;
-	}
-return (check % 10000);
-}
-
-
-int save_msf_file(const char *fname, char **seq,
-	char **seqname, int totseqs, int *eachlength, region *region_used,
-	int protein, int *sel_seqs, int tot_sel_seqs)
-/* sauver des sequences ou des regions au format MSF
-region_used pointe vers la liste des regions a sauver
-si region_used == NULL, toutes les sequences sont sauvees
-rend 0 si ok, 1 si erreur d'ecriture dans le fichier
-	2 si tentative de depasser la longueur d'une sequence
-*/
-{
-FILE *out;
-int i, j, k, retval = 1, current, save_current, err, lenseqs, gen_check,
-	*check_val, curr_len, toprint, save_complete, fromseq, new_current;
-list_segments *psegment, all_sequence, *curr_segment, *new_segment;
-region maregion;
-
-if(totseqs == 0) return 0;
-if( (out = fopen(fname,"w")) == NULL) return 1;
-save_complete = (region_used == NULL);
-if(save_complete) { /* on veut tout sauver */
-	tot_sel_seqs = 0;
-	all_sequence.debut = 1;
-	all_sequence.fin = 0;
-	for(i = 0; i < totseqs; i++) {
-		if( eachlength[i] > all_sequence.fin )  
-			 all_sequence.fin = eachlength[i];
-		}
-	lenseqs = all_sequence.fin;
-	all_sequence.next = NULL;
-	maregion.list = &all_sequence;
-	region_used = &maregion;
-	}
-else	{
-	/* calcul longueur des regions */
-	lenseqs = 0;
-	psegment = region_used->list;
-	while(psegment != NULL) {
-		lenseqs += psegment->fin - psegment->debut + 1;
-		psegment = psegment->next;
-		}
-	}
-for(i = 0, k = 0; i < totseqs; i++) /* nbre de seqs editees */
-	if( tot_sel_seqs == 0 || sel_seqs[i] ) k++;
-check_val = (int *)malloc( k * sizeof(int) );
-if(check_val == NULL) {
-	fclose(out);
-	return 1; /* pas tres precis */
-	}
-gen_check = 0;
-for(i = 0, j = 0; i < totseqs; i++) {
-	if( tot_sel_seqs != 0 && ! sel_seqs[i] ) continue;
-	check_val[j] = calc_gcg_check(region_used->list, seq[i]);
-	gen_check += check_val[j++];
-	}
-gen_check = gen_check % 10000;
-fprintf(out,"PileUp\n\n\n\n   MSF: %d  Type: %c    Check:%6d   .. \n\n",
-	lenseqs, (protein ? 'P' : 'N'), gen_check);
-for(i = 0 , j = 0; i < totseqs; i++) {
-	if( tot_sel_seqs != 0 && ! sel_seqs[i] ) continue;
-	fprintf(out, " Name: %-15.15s   Len:%5d  Check:%6d  Weight:  1.00\n",
-		seqname[i], lenseqs, check_val[j++]);
-	}
-fprintf(out,"\n//\n\n\n");
-new_current = 0; new_segment = region_used->list; curr_len = 0;
-while( new_segment != NULL && curr_len < lenseqs) {
-	curr_segment = new_segment; save_current = new_current;
-	fprintf(out, "\n");
-	for(i=0; i < totseqs; i++) {
-		if( tot_sel_seqs != 0 && ! sel_seqs[i] ) continue;
-		psegment = curr_segment; current = save_current;
-		for(j = 0; j < MSF_WID_NAME; j++) {
-			if(seqname[i][j] == 0) break;
-			putc(seqname[i][j],out);
-			}
-		while( j < MSF_WID_NAME + 1) {
-			putc(' ', out); j++;
-			}
-		for(k = curr_len; k < curr_len + 50 && k < lenseqs; k += 10) {
-			toprint = 10;
-			if(k + toprint > lenseqs) toprint = lenseqs - k;
-			fromseq = toprint;
-			if(save_complete && k + fromseq > eachlength[i])
-					fromseq = eachlength[i] - k;
-			if(fromseq < 0) fromseq = 0;
-			if(fromseq > 0) {
-				err= output_next_res_from_region(
-					seq[i], eachlength[i], &psegment, 
-					&current, out, fromseq, TRUE);
- 				if(ferror(out)) goto fin;
-				if(err == -1) {retval = 2; goto fin; }
-				}
-			while(fromseq < toprint) {
-				putc('.', out); fromseq++;
-				}
-			putc(' ', out);
-			}
-		putc('\n', out);
-		if( (!save_complete) || eachlength[i] == lenseqs) {
-			new_current = current;
-			new_segment = psegment;
-			}
-		if(ferror(out)) goto fin;
-		}
-	curr_len += 50;
-	fprintf(out, "\n");
-	}
-retval = 0;
-fin:
-if( fclose(out) != 0 ) retval = 1;
-free(check_val);
-return retval;
-}
-
-
-char *save_alignment_or_region(const char *fname, char **seq, char **comments,
-	char *header, char **seqname, int totseqs, int *eachlength,
-	list_regions *regions, region *region_used, known_format format,
-	int numb_species_sets, int **list_species_sets, 
-	char **name_species_sets, int *sel_seqs, int tot_sel_seqs, int protein,
-	int tot_comment_lines, char **comment_name, char **comment_line)
-/* sauver des sequences ou des regions au format de fichier format
-region_used pointe vers la liste des regions a sauver
-si region_used == NULL, toutes les sequences entieres sont sauvees
-rend NULL si ok
-	un message d'erreur sinon.
-*/
-{
-int err;
-static char err_message[200];
-
-if(format == MASE_FORMAT) 
-	err = save_mase_file(fname, seq, comments,
-		header, seqname, totseqs, eachlength,
-		regions, region_used, numb_species_sets, list_species_sets,
-		name_species_sets, sel_seqs, tot_sel_seqs,
-		tot_comment_lines, comment_name, comment_line);
-else if(format == NEXUS_FORMAT) 
-	err = save_nexus_file(fname, totseqs, protein,
-		seq, seqname, comments, header,
-		numb_species_sets, list_species_sets, name_species_sets,
-		regions, tot_comment_lines, comment_name, comment_line,
-		region_used, sel_seqs, tot_sel_seqs, eachlength);
-else if(format == PHYLIP_FORMAT) 
-	err = save_phylip_file(fname, seq,
-		seqname, totseqs, eachlength, region_used, 
-		sel_seqs, tot_sel_seqs);
-else if(format == CLUSTAL_FORMAT) 
-	err = save_clustal_file(fname, seq,
-		seqname, totseqs, eachlength, region_used, 
-		sel_seqs, tot_sel_seqs);
-else if(format == MSF_FORMAT) 
-	err = save_msf_file(fname, seq,
-		seqname, totseqs, eachlength, region_used, protein,
-		sel_seqs, tot_sel_seqs);
-else if(format == FASTA_FORMAT) 
-	err = save_fasta_file(fname, seq, comments,
-		seqname, totseqs, eachlength, region_used,
-		sel_seqs, tot_sel_seqs);
-if(err == 0)
-	return NULL;
-else if(err == 1) 
-	sprintf(err_message,"Error while writing to file %s",fname);
-else if(err == 2) 
-	strcpy(err_message,
-		"Error: region goes beyond the end of one sequence");
-return err_message;
-}
-
-
-int prepare_printout(const char *filename, char **seq, int totseqs,  
-	char **seqname,
-	int *eachlength, int char_per_line,
-	int block_size, int lines_per_page, int vary_only,
-	char *align_name, int ref0)
-{
-FILE *out;
-int num, i, j, k, current, max_seq_length, fin, curr_lines, widnames, 
-	res_per_line, nl;
-int retval = TRUE;
-time_t heure;
-static char unnamed[] = "<unnamed>";
-static char num_line[200];
-int lettre;
-short *vary_need = NULL;
-int *vary_pos; /* rang ds alignement de la colonne imprimée */
-
-if(totseqs == 0) return 0;
-if( ( out=fopen(filename, "w") ) == NULL) {
-	return TRUE;
-	}
-if(ref0 < 0) vary_only = FALSE;
-time(&heure);
-if(align_name == NULL) align_name = unnamed;
-fprintf(out,"Alignment:  %s\n", align_name);
-curr_lines = 1;
-if(vary_only) {
-	fprintf(out, "Displaying variable sites only.\n");
-	++curr_lines;
-	}
-fprintf(out,"Printed by seaview [blocks=%d cpl=%d lpp=%d] on %s\n",
-		block_size, char_per_line, lines_per_page, ctime(&heure));
-curr_lines += 2;
-max_seq_length = 0; widnames = 0;
-for(i=0; i<totseqs; i++) {
-	if(eachlength[i] > max_seq_length) max_seq_length = eachlength[i];
-	if( ( fin=strlen(seqname[i]) ) > widnames) widnames = fin;
-	}
-widnames += 2;
-if(vary_only) {
-	vary_need = (short *)calloc(max_seq_length, sizeof(short));
-	if(vary_need == NULL) return TRUE;
-	vary_pos = (int *)calloc(char_per_line, sizeof(int));
-	if(vary_pos == NULL) return TRUE;
-	for(i = 0; i < max_seq_length; i++) {
-		for(num = 0; num < totseqs; num++) {
-			if( toupper(seq[num][i]) != toupper(seq[ref0][i]) ) { 
-				vary_need[i] = TRUE;
-				break;
-				}
-			}
-		}
-	}
-/* nombre max de blocks qui tiennent sur une ligne de cpl chars */
-fin = (char_per_line - widnames + 1) / (block_size + 1);
-if(fin < 1) { /* garde fou */
-	fin = 1; block_size = char_per_line - widnames;
-	}
-res_per_line = fin * block_size;
-current = 0; 
-if( totseqs + 1 > lines_per_page) lines_per_page = 1000000;
-while( current < max_seq_length ) {
-	nl = 1;
-	if(vary_only) { 
-		memset(vary_pos, 0, res_per_line * sizeof(int) );
-		i = -1; j = 0; k = 0;
-		while( j < res_per_line) {
-			if(current + i >= max_seq_length) break;
-			if( !vary_need[current + ++i] ) continue;
-			j++;
-			vary_pos[k++] = current + i + 1;
-			if( j % block_size == 0) k++;
-			}
-		nl = calc_vary_lines(vary_pos,  k);
-		}
-	if(curr_lines + totseqs + nl > lines_per_page) {
-		for(i = 0; i < lines_per_page - curr_lines; i++)
-			putc('\n', out);
-		curr_lines = 0;
-		}
-	if(vary_only) {
-		out_vary_pos(vary_pos, widnames, k, nl, out);
-		curr_lines += nl;
-		}
-	else	{
-		sprintf(num_line, "%d", current + 1);
-		fin = strlen(num_line);
-		memmove(num_line + widnames - fin + 1, num_line, fin+1);
-		if(fin <= widnames) memset(num_line, ' ', widnames - fin + 1);
-		fputs(num_line, out); putc('\n', out); ++curr_lines;
-		}
-	for(num=0; num < totseqs; num++) {
-		for(j = 0; j < widnames; j++) {
-			if(seqname[num][j] == 0) break;
-			putc(seqname[num][j],out);
-			}
-		while( j < widnames) {
-			putc(' ', out); j++;
-			}
-		if(vary_only) {
-			i = -1; j = 0;
-			while( j < res_per_line) {
-				if(current + i >= max_seq_length) break;
-				if( !vary_need[current + ++i] ) continue;
-				j++;
-				if(current + i < eachlength[num]) {
-					if(num != ref0) lettre = 
-( toupper(seq[num][current+i]) == toupper(seq[ref0][current+i]) ? '.' : seq[num][current+i] );
-					else lettre = seq[ref0][current+i];
-					putc(lettre, out);
-					}
-				if( j % block_size == 0) putc(' ', out);
-				}
-			if(num == totseqs - 1) current = current + i + 1;
-			}
-
-		else	{
-			fin = res_per_line;
-			if(current+fin > eachlength[num]) 
-				fin = eachlength[num] - current;
-			if(ref0 != -1 && num != ref0) {
-				/* ecriture par reference a seq ref0 */
-				for(i=0; i<fin; i++) {
-					lettre = 
-( toupper(seq[num][current+i]) == toupper(seq[ref0][current+i]) ? '.' : seq[num][current+i] );
-					putc(lettre, out);
-					if( i < fin-1 && (i+1)%block_size == 0) 
-						putc(' ', out);
-					}
-				}
-			else	{ /* ecriture normale de seq */
-				for(i=0; i<fin; i++) {
-					putc(seq[num][current+i], out);
-					if( i < fin-1 && (i+1)%block_size == 0) 
-						putc(' ', out);
-					}
-				}
-			}
-		putc('\n', out); ++curr_lines;
-		if(ferror(out)) goto fin;
-		}
-	if(curr_lines + 1 <= lines_per_page) {
-		fprintf(out, "\n"); ++curr_lines;
-		}
-	if( ! vary_only ) current += res_per_line;
-	}
-if(ferror(out)) goto fin;
-retval = FALSE;
-fin:
-fclose(out);
-return retval;
-}
-
-
-int calc_vary_lines(int *vary_pos, int widpos)
-{
-int maxi = 0, num, nl;
-
-for(num = 0; num < widpos; num++) 
-	if(vary_pos[num] > maxi) maxi = vary_pos[num];
-if(maxi >= 100000)
-	 nl = 6;
-else if(maxi >= 10000)
-	 nl = 5;
-else if(maxi >= 1000)
-	 nl = 4;
-else if(maxi >= 100)
-	 nl = 3;
-else if(maxi >= 10)
-	 nl = 2;
-else 	
-	 nl = 1;
-return nl;
-}
-
-
-void out_vary_pos(int *vary_pos, int widnames, int widpos, int nl, FILE *out)
-{
-int num, l, echelle, digit, val;
-static char chiffre[] = "0123456789";
-
-echelle = 1;
-for(l = 2; l <= nl; l++) echelle *= 10;
-for(l = nl; l > 0; l--) {
-	for(num = 0; num < widnames; num++) putc(' ', out);
-	for(num = 0; num < widpos; num++) {
-		val = vary_pos[num];
-		if(val < echelle)
-			putc(' ', out);
-		else	{
-			digit = (val / echelle) % 10 ;
-			putc(*(chiffre + digit), out);
-			}
-		}
-	putc('\n', out);
-	echelle /= 10;
-	}
-}
-
-
-#ifdef WIN32
-extern "C" { 
-	char *get_prog_dir(void); 
-	void add_to_path(char *dir);
-	}
-#endif
-
-
-FILE *open_path(char *fname)  /* to open in read-only file fname searching for 
-				 it through all path directories */
-{
-#define Mxdir 200
-char dir[Mxdir+1], *path, *deb, *fin;
-FILE *fich;
-int lf, ltot;
-#ifdef WIN32
-/* try first dir where program was launched */
-char *p = get_prog_dir();
-strcpy(dir, ( p == NULL ? "" : p) ); 
-strcat(dir, fname);
-fich = fopen(dir, "r");
-if(fich != NULL) { /* ajouter cette dir au PATH */
-	add_to_path(p);
-	return fich;
-	}
-fich = fopen(fname, "r"); /* try next current directory */
-if(fich != NULL) return fich;
-#endif
-path = getenv("PATH"); // get the list of path directories, separated by : or ;
-if (path == NULL ) return fopen(fname,"r");
-lf = strlen(fname);
-deb = path;
-do             {
-#ifdef WIN32
-                fin = strchr(deb,';');
-#else
-                fin = strchr(deb,':');
-#endif
-                if(fin != NULL)
-                        { ltot = fin-deb; if(ltot > 0) strncpy(dir,deb,ltot);  }
-                else
-                        { strcpy(dir,deb); ltot=strlen(dir); }
-                /* now one directory is in string dir */
-                if( ltot > 0 && ltot + lf + 1 <= Mxdir)
-                        {
-#ifdef WIN32
-                        dir[ltot]='\\';
-#else 
-                        dir[ltot]='/';
-#endif
-                        strcpy(dir+ltot+1,fname); /* now dir is appended with filename */
-                        fich = fopen(dir,"r");
-                        if( fich != NULL) break;
-                        }
-                else fich = NULL;
-                deb = fin+1;
-                }
-while (fin != NULL);
-#ifndef WIN32
-if(fich == NULL) fich = fopen(fname,"r"); /* try also current directory */
-#endif
-return fich;
-#undef Mxdir
-}
-
-
-#ifdef WIN32
-
-int check_path(char *fname)  
-{
-FILE *tmp = open_path(fname);
-if(tmp != NULL) {
-	fclose(tmp);
-	return 0;
-	}
-else	return 1;
-}
-
-#else
-
-extern "C" { int stat(char *, void *); }
-
-int check_path(char *fname)  
-/* to check for presence of file fname 
-searching for it through all path directories 
-returns 0 if found, != 0 if not found
-*/
-{
-#define Mxdir 200
-    char dir[Mxdir+1], *path, *deb, *fin;
-    int lf, ltot;
-    static char stat_struct[250]; /* bigger than necessary */
-    path=getenv("PATH"); 	/* get the list of path directories, 
-				    separated by :
-				*/
-    if (path == NULL ) return -1;
-    lf=strlen(fname);
-    deb=path;
-    do
-	    {
-	    fin=strchr(deb,':');
-	    if(fin!=NULL)
-		    { strncpy(dir,deb,fin-deb); ltot=fin-deb; }
-	    else
-		    { strcpy(dir,deb); ltot=strlen(dir); }
-	    /* now one directory is in string dir */
-	    if( ltot + lf + 1 <= Mxdir)
-		    {
-		    dir[ltot]='/';
-		    strcpy(dir+ltot+1,fname); 
-			/* now dir is appended with filename */
-		    if( stat(dir, stat_struct)  == 0) return 0;
-		    }
-	    deb=fin+1;
-	    }
-    while (fin != NULL);
-    return -1;
-#undef Mxdir
-}
-
-#endif
-
-
-static void save_species_sets(int numb_species_sets, int **list_species_sets, 
-	char **name_species_sets, int totseqs, FILE *out)
-{
-int num, i, previous, total;
-for(num=0; num < numb_species_sets; num++) {
-	total = 0;
-	for(i=0; i< totseqs; i++) 
-		if( list_species_sets[num][i] ) total++;
-	if( total == 0 ) continue;
-	fprintf(out,";;@ of species = %d %s\n;;", total, 
-		name_species_sets[num]);
-	for(previous = 0; previous < totseqs; previous++) 
-		if( list_species_sets[num][previous] ) break;
-	total = 0;
-	for(i = previous+1; i < totseqs; i++) {
-		if( list_species_sets[num][i] ) {
-			fprintf(out," %d,", previous+1);
-			previous = i;
-			total++;
-			if( total >= 15 ) {
-				fprintf(out, "\n;;");
-				total = 0;
-				}
-			}
-		}
-	fprintf(out," %d\n", previous+1);
-	}
-}
-
-
-void save_comment_lines(int tot_comment_lines, char **names, char **lines, 
-	FILE *out)
-{
-int num, l, pos;
-
-for(num = 0; num < tot_comment_lines; num++) {
-	if( (l = strlen(lines[num]) ) == 0) continue;
-	fprintf(out, ";;|%s\n", names[num]);
-	for(pos = 0; pos < l; pos += 60)
-		fprintf(out, ";;%.60s\n", lines[num]+pos);
-	fprintf(out, ";;||\n");
-	}
-}
-
-
-known_format what_format(const char *filename)
-{
-FILE *in;
-char line[100], *p;
-int format = -1;
-int nseq, lseq;
-
-in = fopen(filename, "r");
-if(in == NULL) return (known_format)-1;
-p = fgets(line, sizeof(line), in);
-if( p == NULL) { fclose(in); return (known_format)-1; }
-while(*p) { *p = toupper(*p); p++; }
-if(*line == ';') format = MASE_FORMAT;
-else if(*line == '>') format = FASTA_FORMAT;
-else if(strncmp(line, "CLUSTAL", 7) == 0) format = CLUSTAL_FORMAT;
-else if(strncmp(line, "#NEXUS", 6) == 0) format = NEXUS_FORMAT;
-else {
-	nseq = lseq = -1;
-	sscanf(line, "%d%d", &nseq, &lseq);
-	if(nseq != -1 && lseq != -1) format = PHYLIP_FORMAT; 
-	else {
-		/* try MSF format */
-		do 	{
-			p = fgets(line, sizeof(line), in);
-			if(p != NULL && strstr(p, " MSF: ") !=  NULL) format = MSF_FORMAT;
-			}
-		while(p != NULL  && strncmp(p, "//", 2) != 0 );
-		}
-	}
-fclose(in);
-return (known_format)format;
-}
-
-
-char *my_fgets(char *s, int n, FILE *f)
-{
-int next_char, ahead;
-char *p;
-
-p = s;
-while(--n > 0) {
-	next_char = getc(f);
-	if( next_char == '\r' || next_char == '\n' ) {
-		*(p++) = '\n';
-		ahead = getc(f);
-		if(ahead == EOF) break;
-		if( (next_char == '\r' && ahead != '\n') || (next_char == '\n' && ahead != '\r') ) {
-			ungetc(ahead, f);
-			}
-		break;
-		}
- 	else if (next_char == EOF) 
-		break;
-	*(p++) = next_char;
-	}
-*p = 0;
-return (p == s ? NULL : s);
-}

Deleted: trunk/packages/seaview/trunk/xfmatpt.cxx
===================================================================
--- trunk/packages/seaview/trunk/xfmatpt.cxx	2007-07-20 10:28:45 UTC (rev 359)
+++ trunk/packages/seaview/trunk/xfmatpt.cxx	2007-07-21 02:32:37 UTC (rev 360)
@@ -1,1281 +0,0 @@
-#include "matpt.h"
-#include <stdlib.h>
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <ctype.h>
-
-#define MAXSEQLENGTH 10000 /* pas utilise pour interface avec seaview */
-#define MAXSEGMENTS 20000
-#define segment_x_ou_y(num, offset) \
-			(*(int *)(((char *)(segments + num)) + offset))
-/* globals */
-struct segment {
-	int x, y, longueur;
-	};
-static struct segment segments[MAXSEGMENTS+1];
-gap_site gap_sites[MAX_GAP_SITES];
-
-/* prototypes */
-void show_dot_plot(char *seq1, char *seq2, char *seqname1, char *seqname2,
-	int l1, int l2, int maxseqlength, void *seaview_data);
-FD_matpt *create_form_matpt(void);
-static void err_message(char *text);
-static char *check_alloc(int nbrelt, int sizelt);
-void log_to_phys(int lx, int ly, int *px, int *py, FD_matpt *matpt);
-void phys_to_log(int px, int py, int *lx, int *ly, FD_matpt *matpt);
-void reset_mat_data(FD_matpt *matpt);
-void reset_sliders_data(FD_matpt * matpt);
-void init_mat_data(FD_matpt * matpt, int seqlong1, int seqlong2,
-	char *seqname1, char *seqname2, char *seq1, char *seq2, char *name,
-	int maxseqlength);
-void set_size_data(FD_matpt *matpt);
-void compute_region_text(FD_matpt *matpt);
-void draw_rect(FD_matpt *matpt);
-int mat_handle_proc(Fl_Widget *ob, int event, float x, float y, 
-	char key);
-void center_view_on_hit(FD_matpt *matpt);
-void magnify_reduce_proc(Fl_Widget *ob, void *extra);
-void change_comput_params(Fl_Widget *ob, void *data);
-void compute_proc(Fl_Widget *ob, void *data);
-void interrupt_callback(Fl_Widget *ob, void *data);
-void ps_draw_line(int x1, int y1, int x2, int y2, FD_matpt *matpt,
-	FILE *plotfile);
-void ps_set_mat_data(FD_matpt *matpt);
-void plot_button_proc(Fl_Widget *ob, void *data);
-int really_close(FD_matpt *matpt);
-void exit_button_proc(Fl_Widget *ob, void *data);
-void move_mat_proc(Fl_Widget *ob, void *data);
-void move_box_step(Fl_Widget *ob, void *extra);
-void region_size_proc(Fl_Widget *ob, void *data);
-char *readseq(FILE *infile, int *slong, char **seqname);
-char *readseqfile(char *fname, int *seqlong1, int *seqlong2,
-	char **name1, char **name2, char **seq1, char **seq2);
-int compute_diags(FD_matpt *matpt, int *erreur, char **errmess);
-void compute_title(FD_matpt *matpt);
-int find_next_gap_site(int pos, gap_site *gap_sites, int tot_gap_sites);
-void new_gap_site(int pos, int l, gap_site *gap_sites, int *p_tot_gap_sites,
-	int seqrank);
-int delete_gaps_bef_pos(char *seq, int pos, int number, int length, 
-	int totsegments, int offset);
-int insert_gaps_bef_pos(char *seq, int pos, int number, int length, 
-	int totsegments, int offset, int maxlen);
-int dispatch_gaps_bef(int pos, int number, char *seq, gap_site * gap_sites, 
-	int *p_tot_gap_sites, int offset, int seqlen, int totsegments,
-	int seqrank, char *other_seq, int *other_seqlen, int other_offset,
-	int maxlen);
-void align_callback(Fl_Widget *ob, void *data);
-void record_alignment_callback(Fl_Widget *ob, void *data);
-extern int insert_gaps_at(SEA_VIEW *view, int seq, int site, int total);
-extern void update_current_seq_length(int newlength, SEA_VIEW *view);
-void update_col_lines(int num, SEA_VIEW *view);
-
-class matpt_panel : public Fl_Widget {
-    FL_EXPORT void draw(void);
-    FL_EXPORT int handle(int);
-public:
-    FL_EXPORT matpt_panel(int x,int y,int w,int h, void *data) :
-		Fl_Widget(x,y,w,h,NULL) {
-	this->user_data(data);
-	}
-};
-
-
-void my_watch_cursor(Fl_Window *win)
-{
-win->cursor(FL_CURSOR_WAIT); 
-Fl::flush();
-}
-
-void fl_reset_cursor(Fl_Window *win)
-{
-Fl::flush();
-win->cursor(FL_CURSOR_DEFAULT); 
-}
-
-
-void show_dot_plot(char *seq1, char *seq2, char *seqname1, char *seqname2,
-	int l1, int l2, int maxseqlength, void *seaview_data)
-{
-static int first = TRUE;
-static FD_matpt *matpt;
-char *new_seq1, *new_seq2;
-static char *old_seq1, *old_seq2;
-SEA_VIEW *view = (SEA_VIEW *)seaview_data;
-if(first) {
-	first = FALSE;
-   	matpt = create_form_matpt();
-	matpt->form->callback(exit_button_proc, matpt);
-	matpt->seq1 = matpt->seq2 = NULL;
-	matpt->seaview_data = seaview_data;
-	old_seq1 = NULL; old_seq2 = NULL;
-	if(view->protein) {
-		((Fl_Input *)matpt->win_size_type_box)->value("10");
-		((Fl_Input *)matpt->ident_type_box)->value("5");
-		}
-	}
-if(matpt->seq1 == NULL || seq1 != old_seq1 || seq2 != old_seq2) {
-	if(matpt->seq1 != NULL) {
-		free(matpt->seq1+1);
-		free(matpt->seq2+1);
-		}
-	new_seq1 = (char *)malloc(maxseqlength+1); 
-	memcpy(new_seq1, seq1, l1 + 1);
-	new_seq2 = (char *)malloc(maxseqlength+1); 
-	memcpy(new_seq2, seq2, l2 + 1);
-	init_mat_data(matpt, l1, l2, seqname1, seqname2, 
-		new_seq1 - 1, new_seq2 - 1, view->masename, maxseqlength);
-	set_size_data(matpt);
-	old_seq1 = seq1; old_seq2 = seq2;
-	}
-matpt->form->show();
-compute_title(matpt);
-}
-
-
-static Fl_Widget *cre_button(int x, int y, int *w, int h, 
-	int si, char *label)
-{
-Fl_Widget *obj;
-fl_font(FL_HELVETICA, si);
-*w = (int)fl_width(label) + 4 * 2;
-obj = new Fl_Button(x, y, *w, h, label);
-obj->labelsize(si);
-return obj;
-}
-
-
-FD_matpt *create_form_matpt(void)
-{
-Fl_Widget *obj;
-FD_matpt *fdui = (FD_matpt *) check_alloc(1, sizeof(*fdui));
-static char def_title[] = "Dot Plot";
-Fl_Window *form;
-int curr_x, curr_y, fin, width, fontsize, but_height;
-user_data_plus *data;
-
-fdui->title = def_title;
-
-#if defined(WIN32) || defined(__APPLE__)
-fontsize = 10;
-fdui->form = form = new Fl_Window(540, 540);
-#else
-fontsize = 12;
-fdui->form = form = new Fl_Window(680, 815);
-#endif
-form->box(FL_FLAT_BOX);
-form->label("Dot Plot");
-
-curr_y  = fin = 5;
-but_height = fontsize + 4 * 2;
-Fl_Group *top = new Fl_Group(fin, curr_y, form->w() - 2 * fin, but_height);
-obj = cre_button(fin, curr_y, &width, but_height, fontsize, "Fit to window");
-fin += width + 2;
-data = new user_data_plus;
-data->p = fdui;
-data->value = 1;
-obj->callback(magnify_reduce_proc, data);
-
-obj = cre_button(fin, curr_y, &width, but_height, fontsize, "Reduce");
-fin += width + 2;
-data = new user_data_plus;
-data->p = fdui;
-data->value = 2;
-obj->callback(magnify_reduce_proc, data);
-
-Fl_Widget *magnify = cre_button(fin, curr_y, &width, but_height, fontsize, "Magnify");
-fin += width + 2;
-data = new user_data_plus;
-data->p = fdui;
-data->value = 3;
-magnify->callback(magnify_reduce_proc, data);
-
-curr_x = fin;
-Fl_Widget *compute = cre_button(fin, curr_y, &width, but_height, fontsize, "Compute");
-fin += width + 2;
-compute->callback(compute_proc, fdui);
-fdui->compute_butt = compute;
-
-Fl_Widget *postscript = cre_button(fin, curr_y, &width, but_height, fontsize, "Write Postscript");
-fin += width;
-postscript->callback(plot_button_proc, fdui);
-
-#ifndef WIN32
-fin += 2;
-Fl_Widget *close = cre_button(fin, curr_y, &width, but_height, fontsize, "Close");
-fin += width;
-close->callback(exit_button_proc, fdui);
-#endif
-
-width = fin - curr_x;
-width = top->x() + top->w() - width;
-width = width - curr_x;
-compute->position(compute->x() + width, compute->y() );
-postscript->position(postscript->x() + width, postscript->y() );
-#ifndef WIN32
-close->position(close->x() + width, close->y() );
-#endif
-
-static char wsize_label[] = "Window size:";
-fl_font(FL_HELVETICA, fontsize);
-width = (int)fl_width(wsize_label) + 2;
-curr_x = magnify->x() + magnify->w() + 2;
-obj = new Fl_Input(curr_x + width, curr_y, 30, but_height, wsize_label);
-obj->type(FL_INT_INPUT);
-fin = obj->x() + obj->w() + 2;
-obj->labelsize(fontsize); ((Fl_Input *)obj)->textsize(fontsize);
-obj->callback(change_comput_params, fdui);
-((Fl_Input *)obj)->value("20");
-fdui->win_size_type_box = obj;
-
-static char wmatch_label[] = "matches/window:";
-fl_font(FL_HELVETICA, fontsize);
-width = (int)fl_width(wmatch_label) + 2;
-obj = new Fl_Input(fin + width, curr_y, 30, but_height, wmatch_label);
-obj->type(FL_INT_INPUT);
-fin = obj->x() + obj->w();
-obj->labelsize(fontsize); ((Fl_Input *)obj)->textsize(fontsize);
-obj->callback(change_comput_params, fdui);
-((Fl_Input *)obj)->value("13");
-fdui->ident_type_box = obj;
-
-curr_x = magnify->x() + magnify->w() + 1;
-width = compute->x() - curr_x - 1;
-top->add_resizable(*new Fl_Box(curr_x, curr_y, width, but_height) );
-top->end();
-
-curr_y += but_height + 2;
-Fl_Group *align_group = new Fl_Group(top->x(), curr_y, top->w(), but_height);
-fin = align_group->x();
-
-obj = cre_button(fin, curr_y, &width, but_height, fontsize, "Align");
-fin += width + 2;
-obj->callback(align_callback, fdui);
-fdui->align_button = obj;
-
-obj = cre_button(fin, curr_y, &width, but_height, fontsize, "Record alignment");
-fin += width + 5;
-obj->callback(record_alignment_callback, fdui);
-
-static char ref_choice_label[] = "Ref. sequence";
-fl_font(FL_HELVETICA, fontsize);
-width = (int)fl_width(ref_choice_label) + 4 * 2;
-obj = new Fl_Choice(fin + width, curr_y, 150, but_height, ref_choice_label);
-obj->type(0);
-obj->labelfont(FL_HELVETICA); obj->labelsize(fontsize);
-((Fl_Choice *)obj)->textfont(FL_HELVETICA); ((Fl_Choice *)obj)->textsize(fontsize);
-fdui->choice_ref_seq = obj;
-
-obj = cre_button(0, curr_y, &width, but_height, fontsize, "Interrupt");
-curr_x = align_group->x() + align_group->w() - width;
-obj->position(curr_x, obj->y());
-obj->callback(interrupt_callback, fdui);
-fdui->interrupt_butt = obj;
-
-curr_x = fdui->choice_ref_seq->x() + fdui->choice_ref_seq->w() + 1;
-width = fdui->interrupt_butt->x() - curr_x - 1;
-align_group->add_resizable(*new Fl_Box(curr_x, curr_y, width, but_height) );
-align_group->end();
-
-curr_y += but_height + 2;
-Fl_Group *region_group = new Fl_Group(top->x(), curr_y, top->w(), 80);
-
-#ifdef WIN32
-#define SQW 15
-#else
-#define SQW 20
-#endif
-fin = region_group->x();
-obj = new Fl_Repeat_Button(fin,curr_y,SQW,SQW,"@<-");
-obj->labeltype(FL_SYMBOL_LABEL);
-obj->box(FL_ENGRAVED_BOX);
-data = new user_data_plus;
-data->p = fdui;
-data->value = 1;
-obj->callback(move_box_step, data);
-obj = new Fl_Repeat_Button(fin + SQW,curr_y,SQW,SQW,"@->");
-obj->labeltype(FL_SYMBOL_LABEL);
-obj->box(FL_ENGRAVED_BOX);
-data = new user_data_plus;
-data->p = fdui;
-data->value = 2;
-obj->callback(move_box_step, data);
-curr_y += SQW;
-obj = new Fl_Repeat_Button(fin,curr_y,SQW,SQW,"@1->");
-obj->labeltype(FL_SYMBOL_LABEL);
-obj->box(FL_ENGRAVED_BOX);
-data = new user_data_plus;
-data->p = fdui;
-data->value = 3;
-obj->callback(move_box_step, data);
-obj = new Fl_Repeat_Button(fin + SQW,curr_y,SQW,SQW,"@9->");
-obj->labeltype(FL_SYMBOL_LABEL);
-obj->box(FL_ENGRAVED_BOX);
-data = new user_data_plus;
-data->p = fdui;
-data->value = 4;
-obj->callback(move_box_step, data);
-curr_y += SQW;
-obj = new Fl_Repeat_Button(fin,curr_y,SQW,SQW,"@2->");
-obj->labeltype(FL_SYMBOL_LABEL);
-obj->box(FL_ENGRAVED_BOX);
-data = new user_data_plus;
-data->p = fdui;
-data->value = 5;
-obj->callback(move_box_step, data);
-obj = new Fl_Repeat_Button(fin + SQW,curr_y,SQW,SQW,"@8->");
-obj->labeltype(FL_SYMBOL_LABEL);
-obj->box(FL_ENGRAVED_BOX);
-data = new user_data_plus;
-data->p = fdui;
-data->value = 6;
-obj->callback(move_box_step, data);
-
-curr_x = fin + 2*SQW + 3;
-curr_y -= 2 * SQW;
-width = form->w() - curr_x - 3;
-strcpy(fdui->regionboxtext, "");
-obj = new Fl_Box(FL_ENGRAVED_BOX,curr_x,curr_y,width,3*SQW,fdui->regionboxtext);
-obj->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE);
-obj->labelsize(fontsize);
-obj->labelfont(FL_COURIER);
-fdui->region_box = obj;
-
-fl_font(fdui->region_box->labelfont(), fdui->region_box->labelsize() );
-int debut = 4 + 10 * (int)fl_width('A');
-int maxbound = (fdui->region_box->w() - 8) / (int)fl_width('A') - 6;
-obj = new Fl_Slider(FL_HOR_FILL_SLIDER, fdui->region_box->x() + debut,
-	fdui->region_box->y() + fdui->region_box->h(),
-	fdui->region_box->w() - debut, SQW, "");
-obj->callback(region_size_proc, fdui);
-((Fl_Slider *)obj)->when((Fl_When)(FL_WHEN_CHANGED | FL_WHEN_RELEASE));
-((Fl_Slider *)obj)->bounds(4, maxbound);
-((Fl_Slider *)obj)->value(10);
-fdui->region_slider = obj;
-
-region_group->resizable(fdui->region_slider);
-region_group->end();
-
-curr_y += fdui->region_box->h() + fdui->region_slider->h() + 5;
-Fl_Group *panel_group = new Fl_Group(top->x(), curr_y, top->w(), form->h() - curr_y - 5);
-
-obj = new Fl_Slider(FL_VERT_SLIDER, panel_group->x() + panel_group->w() - SQW,
-	panel_group->y(), SQW, panel_group->h() - SQW - 5, "");
-data = new user_data_plus;
-data->value = 1;
-data->p = fdui;
-obj->callback(move_mat_proc, data);
-((Fl_Slider*)obj)->when((Fl_When)(FL_WHEN_CHANGED | FL_WHEN_RELEASE));
-fdui->y_slider = obj;
-
-obj = new Fl_Slider(FL_HOR_SLIDER, panel_group->x(),
-	panel_group->y() + panel_group->h() - SQW, panel_group->w() - SQW -5, SQW, "");
-data = new user_data_plus;
-data->value = 2;
-data->p = fdui;
-obj->callback(move_mat_proc, data);
-((Fl_Slider*)obj)->when((Fl_When)(FL_WHEN_CHANGED | FL_WHEN_RELEASE));
-fdui->x_slider = obj;
-
-/* mat_panel */
-obj = new Fl_Box(FL_ENGRAVED_FRAME, panel_group->x()-3, panel_group->y()-3,
-	fdui->x_slider->w()+6, fdui->y_slider->h()+6, "");
-obj = new matpt_panel(panel_group->x(), panel_group->y(),
-	fdui->x_slider->w(), fdui->y_slider->h(), fdui);
-
-obj->color(FL_BLACK, FL_GRAY);
-fdui->mat_panel = obj;
-fdui->gap_sites = gap_sites;
-
-panel_group->resizable(fdui->mat_panel);
-panel_group->end();
-
-form->end();
-form->resizable(panel_group);
-return fdui;
-}
-
-
-static void err_message(char *text)
-{
-fl_alert(text);
-exit(1);
-}
-
-static char *check_alloc(int nbrelt, int sizelt)
-{
-char *retval;
-if( (retval = (char *)calloc(nbrelt,sizelt)) != NULL ) return retval;
-err_message("ERROR: I cannot obtain enough memory.");
-return NULL;
-}
-
-
-void log_to_phys(int lx, int ly, int *px, int *py, FD_matpt *matpt)
-{
-*px = (int)floor(lx * matpt->factor + matpt->kx + 0.5);
-*py = (int)floor( - ly * matpt->factor + matpt->ky + 0.5);
-}
-
-
-void phys_to_log(int px, int py, int *lx, int *ly, FD_matpt *matpt)
-{
-*lx = (int)floor( (px - matpt->kx) / matpt->factor + 0.5 );
-*ly = (int)floor( (matpt->ky - py) / matpt->factor + 0.5 );
-}
-
-
-void reset_mat_data(FD_matpt *matpt)
-{
-int a, b, c, d;
-matpt->factor = ((double) matpt->phys_width) / matpt->view_size;
-a = matpt->view_x; b = a + matpt->view_size; 
-c = matpt->mat_panel->x() + matpt->margin; d = c + matpt->phys_width;
-matpt->kx = (b*c - a*d) / (double) matpt->view_size;
-a = matpt->view_y; b = a + matpt->view_size; 
-c = matpt->mat_panel->y() + matpt->mat_panel->h() - matpt->margin; 
-d = c - matpt->phys_width;
-matpt->ky = (b*c - a*d) / (double) matpt->view_size;
-}
-
-
-void reset_sliders_data(FD_matpt * matpt)
-{
-((Fl_Slider *)matpt->x_slider)->bounds(0, matpt->longmax - matpt->view_size);
-((Fl_Slider *)matpt->x_slider)->slider_size(matpt->view_size / (double)matpt->longmax);
-((Fl_Slider *)matpt->x_slider)->step(1);
-((Fl_Slider *)matpt->y_slider)->bounds( - (matpt->longmax - matpt->view_size), 0);
-((Fl_Slider *)matpt->y_slider)->slider_size(matpt->view_size / (double)matpt->longmax);
-((Fl_Slider *)matpt->y_slider)->step(1);
-((Fl_Slider *)matpt->x_slider)->value(matpt->view_x);
-((Fl_Slider *)matpt->y_slider)->value(- matpt->view_y);
-}
-
-
-void init_mat_data(FD_matpt * matpt, int seqlong1, int seqlong2,
-	char *seqname1, char *seqname2, char *seq1, char *seq2, char *name,
-	int maxseqlength)
-{
-const int margin = 5;
-int fenetre, identites;
-
-matpt->rect_only = FALSE;
-matpt->longmax = FL_max(seqlong1, seqlong2);
-matpt->margin = margin;
-matpt->seqlong1 = seqlong1;
-matpt->seqlong2 = seqlong2;
-matpt->seq1 = seq1;
-matpt->seq2 = seq2;
-matpt->seqname1 = seqname1;
-matpt->seqname2 = seqname2;
-matpt->view_x = matpt->view_y = 0;
-matpt->view_size = matpt->longmax;
-sscanf( ((Fl_Input *)matpt->win_size_type_box)->value(), "%d", &fenetre);
-matpt->fenetre = fenetre;
-sscanf( ((Fl_Input *)matpt->ident_type_box)->value(), "%d", &identites);
-matpt->identites = identites;
-matpt->region_size = fenetre;
-matpt->hitx = seqlong1/2;
-matpt->hity = seqlong2/2;
-matpt->totsegments = -1;
-matpt->need_compute = FALSE;
-matpt->modif_but_not_saved = FALSE;
-matpt->plotname = (char *)malloc(strlen(name) + 1);
-strcpy(matpt->plotname, name);
-if(matpt->align_button != NULL) {
-	char temp[200];
-	sprintf(temp, "align to %s|align to %s", seqname1, seqname2);
-	((Fl_Choice*)matpt->choice_ref_seq)->clear();
-	((Fl_Choice *)matpt->choice_ref_seq)->value(0);
-	((Fl_Choice *)matpt->choice_ref_seq)->add(temp);
-	((Fl_Choice *)matpt->choice_ref_seq)->mode(0, FL_MENU_RADIO);
-	((Fl_Choice *)matpt->choice_ref_seq)->mode(1, FL_MENU_RADIO);
-	matpt->tot_gap_sites = 0;
-	matpt->maxseqlength = maxseqlength;
-	}
-}
-
-
-void set_size_data(FD_matpt *matpt)
-{
-matpt->phys_width = FL_min(matpt->mat_panel->w(), matpt->mat_panel->h()) - 
-	2 * matpt->margin;
-reset_mat_data(matpt);
-reset_sliders_data(matpt);
-}
-
-
-void compute_region_text(FD_matpt *matpt)
-{
-int i, matches=0, l;
-char *p;
-static char newtext[sizeof(matpt->regionboxtext)];
-
-if(matpt->longmax == 0) return;
-p = newtext;
-sprintf(p, "%5d ", matpt->hitx);
-l = FL_min(matpt->region_size, matpt->seqlong1 - matpt->hitx + 1);
-l = FL_min(l, matpt->seqlong2 - matpt->hity + 1);
-memcpy(p+6, (matpt->seq1 + matpt->hitx), l);
-*(p + l + 6) = '\n';
-p += l + 7;
-
-strcpy(p, "      ");
-for(i=0; i < l; i++) {
-	if( toupper(*(matpt->seq1 + matpt->hitx + i)) ==
-		 toupper(*(matpt->seq2 + matpt->hity + i))  &&
-		 *(matpt->seq2 + matpt->hity + i) != '-' ) {
-		*(p + i + 6) = '|';
-		matches++;
-		}
-	else
-		*(p + i + 6)=' ';
-	}
-sprintf(p,"%d/%d", matches, matpt->region_size);
-*(p + strlen(p)) = ' ';
-*(p + 6 + l)='\n';
-p += l + 7;
-
-sprintf(p, "%5d ", matpt->hity);
-memcpy(p+6, (matpt->seq2 + matpt->hity), l);
-*(p + l + 6)='\0';
-if(strcmp(matpt->regionboxtext, newtext) != 0) {
-	strcpy(matpt->regionboxtext, newtext);
-	matpt->region_box->redraw();
-	}
-}
-
-
-void draw_rect(FD_matpt *matpt)
-{
-int px, py, pxf, pyf;
-rectangle old_rect;
-log_to_phys(matpt->hitx, matpt->hity, &px, &py, matpt);
-log_to_phys(matpt->hitx + matpt->region_size, matpt->hity + matpt->region_size, 
-	&pxf, &pyf, matpt);
-// rectangle mis pour avoir h > 0
-old_rect.x = px; old_rect.y = pyf; old_rect.w = pxf - px; old_rect.h = py - pyf;
-fl_overlay_rect(old_rect.x, old_rect.y, old_rect.w, old_rect.h);
-fl_color(FL_BLACK);
-matpt->rect_only = FALSE;
-}
-
-
-void matpt_panel::draw(void)
-{
-FD_matpt *matpt = (FD_matpt *)this->user_data();
-static int erreur = FALSE;
-static char *errmess;
-int i, pxd, pyd, pxf, pyf;
-static int old_w = 0, old_h = 0;
-	this->clear_damage(); // tres important!
-	if( this->w() != old_w || this->h() != old_h ) { /* was resized */
-		old_w = this->w(); old_h = this->h();
-		set_size_data(matpt);
-		((Fl_Slider *)matpt->region_slider)->value(matpt->region_size);
-		}
-	fl_clip(this->x(), this->y(), this->w(), this->h());
-	if(matpt->rect_only) goto label_draw_rect;
-	fl_overlay_clear();
-/* ecriture du fond */
-	fl_color(this->selection_color());
-	fl_rectf(this->x(), this->y(), this->w(), this->h());
-	fl_color(FL_BLACK);
-/* draw the diagonal line */
-	if( ( (SEA_VIEW *) matpt->seaview_data )->numb_gc > 1) {
-/* in red on color displays */
-		log_to_phys(0, 0, &pxd, &pyd, matpt);
-		i = FL_min(matpt->seqlong1, matpt->seqlong2);
-		log_to_phys(i, i, &pxf, &pyf, matpt);
-		fl_color(FL_RED);
-		fl_line(pxd, pyd, pxf, pyf);
-		fl_color(FL_BLACK);
-		}
-	else	{
-/* as a dotted line on B&W displays */
-		int p, q;
-		log_to_phys(0, 0, &pxd, &pyd, matpt);
-		i = FL_min(matpt->seqlong1, matpt->seqlong2);
-		log_to_phys(i, i, &pxf, &pyf, matpt);
-		q = pyd;
-		for(p=pxd; p<=pxf; p += 2) {
-			fl_line(p, q, p, q);
-			q -= 2;
-			}
-		}
-	log_to_phys(0, 0, &pxd, &pyd, matpt);
-	log_to_phys(matpt->seqlong1, 0, &pxf, &pyf, matpt);
-	fl_line(pxd, pyd, pxf, pyf);
-	log_to_phys(0, matpt->seqlong2, &pxf, &pyf, matpt);
-	fl_line(pxd, pyd, pxf, pyf);
-	if(matpt->need_compute) {
-		matpt->totsegments = compute_diags(matpt, &erreur, &errmess);
-		}
-	else	{
-		erreur = FALSE;
-		for (i = 0; i <= matpt->totsegments; i++) {
-			log_to_phys(segments[i].x,
-				segments[i].y, 
-				&pxd, &pyd, matpt);
-			log_to_phys(segments[i].x+segments[i].longueur, 
-				segments[i].y+segments[i].longueur, 
-				&pxf, &pyf, matpt);
-			fl_line(pxd, pyd, pxf, pyf);
-			}
-		}
-label_draw_rect:
-	draw_rect(matpt);
-	fl_pop_clip();
-	compute_region_text(matpt);
-	fl_reset_cursor(this->window());
-	if(erreur) {
-		fl_message(errmess);
-		erreur = FALSE;
-		}
-}
-
-
-int matpt_panel::handle(int event) 
-{
-FD_matpt *matpt = (FD_matpt *)this->user_data();
-
-if(event == FL_PUSH) {
-	int lx, ly;
-	phys_to_log( Fl::event_x(), Fl::event_y(), &lx, &ly, matpt);
-	if(lx <= 0 || ly <= 0 || lx > matpt->seqlong1 || ly > matpt->seqlong2)
-		return 1;
-	matpt->hitx = lx; matpt->hity = ly;
-	matpt->rect_only = TRUE;
-	matpt->mat_panel->redraw();
-	Fl::focus(this);
-	return 1;
-	}
-else if(event == FL_KEYBOARD) {
-	int key = Fl::event_key();
-	if(Fl::event_length() > 0 || (key != FL_Right && key != FL_Left && 
-		key != FL_Up && key != FL_Down) ) return 1;	
-	if(key == FL_Left) {
-		matpt->hitx = FL_max(matpt->hitx - 5, 1);
-		matpt->hity = FL_max(matpt->hity - 5, 1);
-		}
-	else if(key == FL_Right) {
-		matpt->hitx = FL_min(matpt->hitx + 5, matpt->seqlong1);
-		matpt->hity = FL_min(matpt->hity + 5, matpt->seqlong2);
-		}
-	else if(key == FL_Up) {
-		matpt->hity = FL_min(matpt->hity + 5, matpt->seqlong2);
-		}
-	else 	{ /* FL_Down */
-		matpt->hity = FL_max(matpt->hity - 5, 1);
-		}
-	matpt->rect_only = TRUE;
-	matpt->mat_panel->redraw();
-	return 1;
-	}
-else if(event == FL_FOCUS) {
-	return 1;
-	}
-return 0;
-}
-
-
-void center_view_on_hit(FD_matpt *matpt)
-{
-int newval;
-newval = matpt->hitx + (matpt->region_size - matpt->view_size) / 2;
-newval = FL_min( FL_max(newval, 0), matpt->longmax - matpt->view_size);
-matpt->view_x = newval;
-newval = matpt->hity + (matpt->region_size - matpt->view_size) / 2;
-newval = FL_min( FL_max(newval, 0), matpt->longmax - matpt->view_size);
-matpt->view_y = newval;
-reset_mat_data(matpt);
-reset_sliders_data(matpt);
-}
-
-
-void magnify_reduce_proc(Fl_Widget *ob, void *extra)
-{
-const int zoom = 2;
-FD_matpt *matpt = (FD_matpt *)((user_data_plus *)extra)->p;
-int data = ((user_data_plus *)extra)->value;
-
-if( data == 3 ) { 	/* magnify */
-	matpt->view_size /= zoom;
-	}
-else if ( data == 1 ) { /* fit to window */
-	matpt->view_size = matpt->longmax;
-	}
-else	{ 		/* reduce */
-	matpt->view_size = FL_min( matpt->view_size * zoom, matpt->longmax );
-	}
-center_view_on_hit(matpt);
-matpt->mat_panel->redraw();
-matpt->x_slider->redraw();
-matpt->y_slider->redraw();
-}
-
-
-void change_comput_params(Fl_Widget *ob, void *data)
-{
-const char *p;
-int value = -1;
-FD_matpt *fdui = (FD_matpt *)data;
-
-p= ((Fl_Input *)ob)->value();
-sscanf(p,"%d",&value);
-if(value<=0 || value>50) {
-	((Fl_Input *)ob)->value("??");
-	value = -1;
-	}
-if(ob == fdui->win_size_type_box)
-	fdui->fenetre = value;
-else
-	fdui->identites = value;
-if(fdui->identites > fdui->fenetre && fdui->fenetre>0) {
-	char tmp[10];
-	fdui->identites = fdui->fenetre;
-	sprintf(tmp,"%d", fdui->identites);
-	((Fl_Input *)fdui->ident_type_box)->value(tmp);
-	}
-}
-
-
-void compute_proc(Fl_Widget *ob, void *data)
-{
-FD_matpt *fdui = (FD_matpt *)data;
-change_comput_params(fdui->win_size_type_box, fdui);
-change_comput_params(fdui->ident_type_box, fdui);
-if(fdui->fenetre == -1 || fdui->identites == -1) return;
-my_watch_cursor(fdui->mat_panel->window());
-fdui->need_compute = TRUE;
-fdui->interrupted = FALSE;
-fdui->mat_panel->redraw();
-if(!fdui->form->visible()) return;
-if(fdui->fenetre > fdui->region_size) fdui->region_size = fdui->fenetre;
-((Fl_Slider *)fdui->region_slider)->value(fdui->region_size);
-fdui->region_slider->redraw();
-}
-
-
-void interrupt_callback(Fl_Widget *ob, void *data)
-{
-FD_matpt *fdui = (FD_matpt *)data;
-fdui->interrupted = TRUE;
-}
-
-
-void ps_draw_line(int x1, int y1, int x2, int y2, FD_matpt *matpt,
-	FILE *plotfile)
-{
-int px, py;
-px = (int)floor(x1 * matpt->factor + matpt->kx + 0.5);
-py = (int)floor(y1 * matpt->factor + matpt->ky + 0.5);
-fprintf(plotfile,"%d %d moveto ",px,py);
-px = (int)floor(x2 * matpt->factor + matpt->kx + 0.5);
-py = (int)floor(y2 * matpt->factor + matpt->ky + 0.5);
-fprintf(plotfile,"%d %d lineto stroke\n",px,py);
-}
-
-void ps_set_mat_data(FD_matpt *matpt)
-{
-int a, b, c, d;
-matpt->factor = ((double) matpt->phys_width) / matpt->view_size;
-a = matpt->view_x; b = a + matpt->view_size; 
-c = matpt->margin; d = c + matpt->phys_width;
-matpt->kx = (b*c - a*d) / (double) matpt->view_size;
-a = matpt->view_y; b = a + matpt->view_size; 
-c = matpt->margin; 
-d = c + matpt->phys_width;
-matpt->ky = (b*c - a*d) / (double) matpt->view_size;
-}
-
-
-void plot_button_proc(Fl_Widget *ob, void *data)
-{
-FD_matpt *matpt = (FD_matpt *)data;
-int i;
-char plotfname[150], *sp;
-int old_phys;
-FILE *plotfile;
-
-strcpy(plotfname, matpt->plotname);
-sp = strchr(plotfname,'.'); 
-if( sp == NULL || strcmp(sp, ".ps") == 0 ) 
-	sp = plotfname+strlen(plotfname);
-strcpy(sp, ".ps");
-plotfile=fopen(plotfname,"w");
-if(plotfile == NULL) {
-	fl_alert("Cannot write to file\n%s", plotfname);
-	return;
-	}
-fprintf(plotfile,"%%!\n1 setlinecap 1 setlinejoin 1 setlinewidth 0 setgray\n");
-fprintf(plotfile,"/basefont /Helvetica findfont 12 scalefont def\n");
-fprintf(plotfile,"basefont setfont\n");
-fprintf(plotfile,"50 200 translate\n");
-fprintf(plotfile,"-10 -10 moveto 510 -10 lineto 510 510 lineto -10 510 lineto \
--10 -10 lineto stroke\n");
-
-old_phys = matpt->phys_width; matpt->phys_width = 500;
-ps_set_mat_data(matpt);
-
-ps_draw_line(0, 0, matpt->seqlong1, 0, matpt, plotfile);
-ps_draw_line(0, 0, 0, matpt->seqlong2, matpt, plotfile);
-for (i = 0; i <= matpt->totsegments; i++)	{
-	ps_draw_line(segments[i].x, segments[i].y,
-		segments[i].x+segments[i].longueur,
-		segments[i].y+segments[i].longueur, matpt, plotfile);
-
-	}
-matpt->phys_width = old_phys;
-reset_mat_data(matpt);
-
-fl_message("Dot plot is now in file\n%s\nin postscript format", plotfname);
-sprintf(plotfname,
-	"Horizontal: %s (%d)  Vertical: %s (%d)  Window: %d Matches: %d",
-	matpt->seqname1, matpt->seqlong1, matpt->seqname2, matpt->seqlong2, 
-		matpt->fenetre, matpt->identites);
-fprintf(plotfile,"-10 -30 moveto (%s) show\n",plotfname);
-fprintf(plotfile,"showpage\n");
-fclose(plotfile);
-}
-
-
-int really_close(FD_matpt *matpt)
-{
-int rep;
-if(matpt->modif_but_not_saved) {
-	rep = ask_with_custom_yesno("Changes in dot plot were not saved in alignment\n"
-		"Do you really want to close the dot plot?", "Close", "Cancel");
-	if(!rep) return FALSE;
-	}
-free(matpt->seq1 + 1);
-free(matpt->seq2 + 1);
-matpt->seq1 = matpt->seq2 = NULL;
-return TRUE;
-}
-
-
-void exit_button_proc(Fl_Widget *ob, void *data)
-{
-if( really_close( (FD_matpt *)data ) )  ((FD_matpt *)data)->form->hide();
-}
-
-
-void move_mat_proc(Fl_Widget *ob, void *data)
-{
-int rank = ((user_data_plus *)data)->value;
-FD_matpt *matpt = (FD_matpt *)((user_data_plus *)data)->p;
-int val;
-val = (int)( ((Fl_Slider *)ob)->value() );
-if(rank == 1)
-	matpt->view_y = - val;
-else
-	matpt->view_x = val;
-reset_mat_data(matpt);
-matpt->mat_panel->redraw();
-}
-
-
-void move_box_step(Fl_Widget *ob, void *extra)
-{
-int data = ((user_data_plus *)extra)->value;
-FD_matpt *matpt = (FD_matpt *)((user_data_plus *)extra)->p;
-if(data == 1) {
-	matpt->hitx = FL_max(matpt->hitx - 1, 1);
-	}
-else if(data == 2) {
-	matpt->hitx = FL_min(matpt->hitx + 1, matpt->seqlong1);
-	}
-else if(data == 3) {
-	matpt->hitx = FL_max(matpt->hitx - 1, 1);
-	matpt->hity = FL_max(matpt->hity - 1, 1);
-	}
-else if(data == 4) {
-	matpt->hitx = FL_min(matpt->hitx + 1, matpt->seqlong1);
-	matpt->hity = FL_min(matpt->hity + 1, matpt->seqlong2);
-	}
-else if(data == 5) {
-	matpt->hity = FL_max(matpt->hity - 1, 1);
-	}
-else	{
-	matpt->hity = FL_min(matpt->hity + 1, matpt->seqlong2);
-	}
-matpt->rect_only = TRUE;
-matpt->mat_panel->redraw();
-}
-
-
-void region_size_proc(Fl_Widget *ob, void *data)
-{
-FD_matpt *matpt = (FD_matpt *)data;
-matpt->region_size = (int)( ((Fl_Slider *)ob)->value() );
-matpt->rect_only = TRUE;
-matpt->mat_panel->redraw();
-}
-
-
-void compute_title(FD_matpt *matpt)
-{
-static char title[100];
-sprintf(title, "Horizontal: %s (%d)   Vertical: %s (%d)",
-	matpt->seqname1, matpt->seqlong1, matpt->seqname2, matpt->seqlong2);
-matpt->title = title;
-matpt->mat_panel->window()->label(title);
-}
-
-
-int find_next_gap_site(int pos, gap_site *gap_sites, int tot_gap_sites)
-{
-int num;
-for(num = 0; num < tot_gap_sites; num++)
-	if(gap_sites[num].pos > pos) return num;
-return -1;
-}
-
-
-void new_gap_site(int pos, int l, gap_site *gap_sites, int *p_tot_gap_sites,
-	int seqrank)
-{
-int num, i;
-for(num = 0; num < *p_tot_gap_sites; num++)
-	if(gap_sites[num].pos >= pos) break;
-if(num < *p_tot_gap_sites && gap_sites[num].pos == pos)
-	gap_sites[num].l[seqrank-1] += l;
-else 	{
-	if(*p_tot_gap_sites >= MAX_GAP_SITES) return;
-	if(num < *p_tot_gap_sites) {
-		for(i = *p_tot_gap_sites; i > num; i--)
-			gap_sites[i] = gap_sites[i - 1];
-		}
-	(*p_tot_gap_sites)++;
-	gap_sites[num].pos = pos;
-	gap_sites[num].l[0] = 0;
-	gap_sites[num].l[1] = 0;
-	gap_sites[num].l[seqrank-1] = l;
-	}
-}
-
-
-int delete_gaps_bef_pos(char *seq, int pos, int number, int length, 
-	int totsegments, int offset)
-{
-int i;
-if(number == 0) return length;
-memmove(seq + pos - number, seq + pos, length - pos + 2);
-for(i=0; i <= totsegments; i++)
-	if(segment_x_ou_y(i, offset) + segments[i].longueur - 1 >= pos ) 
-		segment_x_ou_y(i, offset) -= number;
-return length - number;
-}
-
-
-int insert_gaps_bef_pos(char *seq, int pos, int number, int length, 
-	int totsegments, int offset, int maxlen)
-{
-int i;
-if(length + number > maxlen) return length;
-memmove(seq + pos + number, seq + pos, length - pos + 2);
-memset(seq + pos, '-', number);
-for(i=0; i <= totsegments; i++)
-	if(segment_x_ou_y(i, offset) + segments[i].longueur - 1 >= pos ) 
-		segment_x_ou_y(i, offset) += number;
-return length + number;
-}
-
-
-int dispatch_gaps_bef(int pos, int number, char *seq, gap_site * gap_sites, 
-	int *p_tot_gap_sites, int offset, int seqlen, int totsegments,
-	int seqrank, char *other_seq, int *other_seqlen, int other_offset,
-	int maxlen)
-{
-int site, lnextgap, other_rank, i, seuil;
-site = find_next_gap_site(pos + number, gap_sites, *p_tot_gap_sites);
-if(site != -1) {
-	if(gap_sites[site].l[seqrank-1] >= number) {
-		seqlen = delete_gaps_bef_pos(seq, gap_sites[site].pos, number, 
-			seqlen, totsegments, offset);
-		seqlen = insert_gaps_bef_pos(seq, pos, number, seqlen, 
-			totsegments, offset, maxlen);
-		gap_sites[site].l[seqrank-1] -= number;
-		}
-	else	{
-		lnextgap = gap_sites[site].l[seqrank-1];
-		other_rank = (seqrank == 1 ? 2 : 1);
-		seqlen = delete_gaps_bef_pos(seq, gap_sites[site].pos, lnextgap,
-			seqlen, totsegments, offset);
-		*other_seqlen = insert_gaps_bef_pos(other_seq, 
-			gap_sites[site].pos, 
-			number - lnextgap, *other_seqlen, 
-			totsegments, other_offset, maxlen);
-		seqlen = insert_gaps_bef_pos(seq, pos, number, seqlen, 
-			totsegments, offset, maxlen);
-		gap_sites[site].l[seqrank-1] = 0;
-		gap_sites[site].l[other_rank-1] += number - lnextgap;
-		seuil = gap_sites[site].pos;
-		for(i = 0; i < *p_tot_gap_sites; i++) {
-			if(gap_sites[i].pos < seuil) continue;
-			gap_sites[i].pos += number - lnextgap;
-			}
-		}
-	}
-else	{
-	seqlen = insert_gaps_bef_pos(seq, pos, number, seqlen, totsegments, 
-		offset, maxlen);
-	}
-new_gap_site(pos + number, number, gap_sites, p_tot_gap_sites, seqrank);
-return seqlen;
-}
-
-
-void align_callback(Fl_Widget *ob, void *data)
-{
-int number, offset_1, offset_2;
-FD_matpt *matpt = (FD_matpt *)data;
-if(matpt->hitx == matpt->hity) return;
-my_watch_cursor(ob->window());
-offset_1 = (char *)&(segments[0].x) - (char *)&(segments[0]);
-offset_2 = (char *)&(segments[0].y) - (char *)&(segments[0]);
-if(matpt->hitx > matpt->hity) {
-	number = matpt->hitx - matpt->hity;
-	matpt->seqlong2 = dispatch_gaps_bef(matpt->hity, number, 
-		matpt->seq2, matpt->gap_sites, 
-		&(matpt->tot_gap_sites), offset_2, matpt->seqlong2, 
-		matpt->totsegments, 2, matpt->seq1, &matpt->seqlong1, offset_1,
-		matpt->maxseqlength);
-	matpt->hity = matpt->hitx;
-	}
-else 	{
-	number = matpt->hity - matpt->hitx;
-	matpt->seqlong1 = dispatch_gaps_bef(matpt->hitx, number, 
-		matpt->seq1, matpt->gap_sites, 
-		&(matpt->tot_gap_sites), offset_1, matpt->seqlong1, 
-		matpt->totsegments, 1, matpt->seq2, &matpt->seqlong2, offset_2,
-		matpt->maxseqlength);
-	matpt->hitx = matpt->hity;
-	}
-matpt->longmax = FL_max(matpt->seqlong1, matpt->seqlong2);
-center_view_on_hit(matpt);
-matpt->mat_panel->redraw();
-matpt->x_slider->redraw();
-matpt->y_slider->redraw();
-compute_title(matpt);
-matpt->modif_but_not_saved = TRUE;
-}
-
-
-void update_col_lines(int num, SEA_VIEW *view)
-{
-int l, col, i, res;
-int (*calc_color_function)(int);
-
-if(view->numb_gc == 1) return;
-calc_color_function = ( view->protein ? 
-				get_color_for_aa : get_color_for_base );
-l = view->each_length[num];
-for(col=0; col < view->numb_gc; col++) {
-	memset(view->col_seq[num][col], ' ', l);
-	view->col_seq[num][col][l]=0;
-	}
-for(i=0; i<l; i++) {
-	res = view->sequence[num][i]; 
-	col = calc_color_function( res );
-	view->col_seq[num][col][i] = ( view->allow_lower ? res : toupper(res) );
-	}
-}
-
-
-void record_alignment_callback(Fl_Widget *ob, void *data)
-{
-int num1, num2, site, need_big_gaps = FALSE, seqrank, num, ngaps,
-	newlength;
-FD_matpt *matpt = (FD_matpt *)data;
-SEA_VIEW *view = (SEA_VIEW *)matpt->seaview_data;
-Fl_Menu_ *menu = (Fl_Menu_ *)matpt->choice_ref_seq;
-if( ! menu->mvalue() ) {
-	fl_message("Please, select which is the reference sequence");
-	return;
-	}
-seqrank = menu->value();
-my_watch_cursor(ob->window());
-for(site = 0; site < matpt->tot_gap_sites; site++) {
-	if(matpt->gap_sites[site].l[seqrank] != 0) {
-		need_big_gaps = TRUE;
-		break;
-		}
-	}
-for(num1 = 0; num1 < view->tot_seqs; num1++)
-	if(view->sel_seqs[num1]) break;
-for(num2 = num1 + 1; num2 < view->tot_seqs; num2++)
-	if(view->sel_seqs[num2]) break;
-memcpy(view->sequence[num1], matpt->seq1 + 1, matpt->seqlong1 + 1);
-view->each_length[num1] = matpt->seqlong1;
-update_col_lines(num1, view);
-memcpy(view->sequence[num2], matpt->seq2 + 1, matpt->seqlong2 + 1);
-view->each_length[num2] = matpt->seqlong2;
-update_col_lines(num2, view);
-if( need_big_gaps ) {
-	newlength = FL_max(matpt->seqlong1, matpt->seqlong2);
-	for(site = 0; site < matpt->tot_gap_sites; site++) {
-		ngaps = matpt->gap_sites[site].l[seqrank];
-		if( ngaps == 0) continue;
-		for(num = 0; num < view->tot_seqs; num++) {
-			if( view->sel_seqs[num] ) continue;
-			insert_gaps_at(view, num+1, 
-				matpt->gap_sites[site].pos - ngaps, ngaps);
-			newlength = FL_max(newlength, view->each_length[num]);
-			}
-		matpt->gap_sites[site].l[seqrank] = 0;
-		insert_region_part(view, matpt->gap_sites[site].pos - ngaps, 
-			ngaps);
-		}
-	update_current_seq_length(newlength, view);
-	view->horsli->redraw();
-	}
-view->modif_but_not_saved = TRUE;
-matpt->modif_but_not_saved = FALSE;
-view->DNA_obj->redraw();
-fl_reset_cursor(ob->window());
-}
-
-
-/* dot plot pour sequences avec gaps:
-les segments sont calcules sans les gaps
-leurs coordonnees sont reportees sur les seqs avec gaps
-puis ils sont coupes en autant de morceaux sans gap
-*/
-int compute_diags(FD_matpt *matpt, int *erreur, char **errmess)
-{
-int lwin,  match, seqlong1, seqlong2, longmax, diff;
-char *seq1, *seq2;
-int pxd, pyd, pxf, pyf;
-int dmin, dmax, k, deb, fin, *it, i, pp, nmatch, finw, d, totsegments, kk,
-	centre, flip;
-static char err_mem[]="Not enough memory";
-static char err_seg[]="Only part of the dot plot was computed";
-int *addgaps1, *addgaps2, deb1, deb2, fin1, fin2, lfrag;
-char *p;
-
-matpt->need_compute = FALSE;
-lwin = matpt->fenetre; match = matpt->identites; 
-seqlong1 = matpt->seqlong1; seqlong2 = matpt->seqlong2;
-seq1 = matpt->seq1; seq2 = matpt->seq2;
-
-totsegments= -1;
-/* calcul corresp coord sans gap -> coord avec gap */
-addgaps1 = (int *)malloc( (seqlong1+2) * sizeof(int));
-addgaps2 = (int *)malloc( (seqlong2+2) * sizeof(int));
-if(addgaps1 == NULL || addgaps2 == NULL) {
-	*erreur = TRUE;
-	*errmess = err_mem;
-	return totsegments;
-	}
-p = seq1; seqlong1 = 0;
-while( *(++p) != 0) {
-	if( *p == '-') continue;
-	addgaps1[++seqlong1] = p - seq1;
-	}
-p = seq2; seqlong2 = 0;
-while( *(++p) != 0) {
-	if( *p == '-') continue;
-	addgaps2[++seqlong2] = p - seq2;
-	}
-
-dmin = lwin-seqlong2; dmax = seqlong1-lwin-1;
-longmax = FL_max(seqlong1, seqlong2);
-it = (int *)malloc( (longmax + 2) * sizeof(int));
-if(it == NULL) {
-	*erreur = TRUE;
-	*errmess = err_mem;
-	return totsegments;
-	}
-centre = (dmin + dmax)/2; flip = 1;
-for(kk = dmin + 1; kk <= dmax + 1; kk++) {
-	if( Fl::ready() ) {
-		Fl::check();
-		if(matpt->interrupted) break;
-		if( !matpt->form->visible() ) {
-			*erreur = TRUE;
-			goto fin;
-			}
-		}
-/* pour faire la boucle k = [dmin,dmax] en partant du centre et s'eloignant */
-	flip = - flip;
-	k = centre + ((kk - dmin)/2) * flip;
-	deb= ( k>=0 ? k+1 : 1);
-	fin= FL_min( seqlong2+k , seqlong1);
-/*on met it[1] ssi bases egales en majuscu dans les 2 seqs sur la diagonale k*/
-	for(i = deb; i <= fin; i++) {
-		diff = seq1[addgaps1[i]] - seq2[addgaps2[i-k]];
-		it[i] = (diff == 0 || diff == 32 || diff == -32 ? 1 : 0);
-		}
-	it[fin + 1] = 0;
-/* on met it[1] ssi au moins match bases egales dans fenetre de taille lwin 
-sur la diagonale k 
-*/
-	pp=it[deb];
-	nmatch=0;
-	for(i = deb; i < deb+lwin; i++) nmatch += it[i];
-	if(nmatch>=match)
-		it[deb]=1;
-	else
-		it[deb]=0;
-	finw = fin-lwin+1;
-	for(i = deb+1; i <= finw; i++) {
-		nmatch += (it[i+lwin-1]-pp);
-		pp=it[i];
-		if(nmatch>=match)
-			it[i]=1;
-		else
-			it[i]=0;
-		}
-	i=deb-1;
-/* calcul de d = debut des runs de 1, i = suivant de la fin du run de 1 */
-	while(i<finw) {
-		i++;
-		if(it[i]==0) continue;
-		d=i;
-		do	{
-			i++;
-			if(i>finw) break;
-			}
-		while(it[i]==1);
-/* decoupage du segment sans gaps en autant de morceaux non coupes de gaps */
-		deb1 = addgaps1[d]; deb2 = addgaps2[d-k]; lfrag = 0;
-		do	{
-			fin1 = deb1; fin2 = deb2;
-			while(lfrag < i - d && seq1[fin1] != '-' && 
-							seq2[fin2] != '-') {
-				fin1++; fin2++; lfrag++;
-				}
-			fin1--; fin2--;
-			if(totsegments>=MAXSEGMENTS) {
-				*erreur = TRUE;
-				*errmess = err_seg;
-				goto fin;
-				}
-			totsegments++;
-			segments[totsegments].x = deb1;
-			segments[totsegments].y = deb2;
-			segments[totsegments].longueur = fin1 - deb1 + 1;
-			log_to_phys(segments[totsegments].x,
-				segments[totsegments].y, 
-				&pxd, &pyd, matpt);
-			log_to_phys(segments[totsegments].x + 
-				segments[totsegments].longueur, 
-				segments[totsegments].y + 
-				segments[totsegments].longueur, 
-				&pxf, &pyf, matpt);
-			fl_line(pxd, pyd, pxf, pyf);
-			deb1 = fin1+1; deb2 = fin2+1;
-			while(seq1[deb1] == '-') deb1++;
-			while(seq2[deb2] == '-') deb2++;
-			}
-		while(lfrag < i - d);
-		}
-	}
-*erreur = FALSE;
-fin:
-free(it);
-free(addgaps1); free(addgaps2);
-return totsegments;
-}




More information about the debian-med-commit mailing list