[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), ¤t);
-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 montre 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 ncessaire pour display cran
-*/
-{
-static char out[250];
-CFStringRef mycfs;
-Boolean ok;
-/* j'ai cru comprendre que les pathnames sont cods 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, ¤t, 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 poigne 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,
- ¤t, 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, ¤t, 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, ¤t, 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, ¤t, 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, ¤t, 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,
- ¤t, 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