Long Term ST Database 1.0.0

File: <base>/semia-3.0.1/semia_stubs.cc (342,197 bytes)
//=========================================================================================================
//
// semia_stubs.cc
//
// F. Jager and R. Dorn  20 May       2002
// Last revised:          5 September 2002
//
// Callback and user functions of SEMIA (SEMI-Automatic viewer and annotation editor), Version 3.0.1
//
// -------------------------------------------------------------------------------
// SEMIA: SEMI-Automatic viewer and annotation editor
// SEMIA, Version 3.0.1: SEMI-Automatic viewer of waveforms, time series, and
//                       ST-segment annotations in the Long-Term ST Database
// 
// Copyright (C) 2002 Franc Jager and Roman Dorn
// 
// 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.
// 
// You should have received a copy of the GNU General Public License along with
// this program; if not, write to the Free Software Foundation, Inc., 59 Temple
// Place - Suite 330, Boston, MA 02111-1307, USA.
// 
// You may contact the author by e-mail (franc@manca.fri.uni-lj.si) or postal
// mail (Faculty of Computer and Information Science, Trzaska 25, 1000 Ljubljana,
// Slovenia). For updates to this software, please visit PhysioNet
// (http://www.physionet.org/).
// -------------------------------------------------------------------------------
//

#include <stdlib.h>
#include <stdio.h>
#include <math.h>

#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/X.h>
#include <X11/Xatom.h>

#include <sys/param.h>
#include <sys/types.h>

#include <xview/xview.h>
#include <xview/panel.h>
#define _OTHER_TEXTSW_FUNCTIONS
#include <xview/textsw.h>
#include <xview/xv_xrect.h>
#include <xview/frame.h>
#include <xview/notice.h>

#include "semia_ui.h"

//Work with WFDB library
#include <wfdb/wfdb.h>
#include <wfdb/ecgmap.h>
#include <wfdb/ecgcodes.h>

//How to plot time series
#define PLOT_ALL   FALSE

//Length of one screen in samples if Fsamp is 250 samples/sec
//Lengths                           21600000 - 24 hours
//                                  43200000 - 48 hours
//Length of fine buffers if Fsamp is 250 samples/sec    (LEN_BUFF_F)
//Lengths                  187200  (190000)  - 26 hours
//                         345600  (370000)  - 48 hours
//Length of raw buffers if Fsamp is 250 samples/sec     (LEN_BUFF_R)
//Lengths                   46800   (47000)  - 26 hours
//                          86400   (90000)  - 48 hours
#define LEN_BUFF_F 224000 // fine data buff length
#define LEN_BUFF_R 86400  // raw data buff length

//
#define STAMPL 200            // 200 units = 1000 uV
#define FSAMP 250             // 250 msec
#define auto_ampl_1 10.0      // 50  uV
#define BORDER_SEP_CLICK 120  // Samples at the bottom of lead window
#define ALL_ONE FALSE         // true = copy lead0 > lead1 > lead2
#define LEN_BUFF_D 37626      // 5 min / 2 = 150 * 1000 msec = 150 * 1000 / (1000/FSAMP) + 125 (avr /2 ) + 1 ( center )
#define LEN_BUFF_D_A 251      // average window = 1000 msec

#define OR ||

void d_ini_cp_b(Panel_item, Event *);
void l_ini_cp1_b(Panel_item, Event *);
void k_ini_cp_b(Panel_item, Event *);
void l_ini_cp2_b(Panel_item, Event *);
void main_open_init(Panel_item, Event *);
void init_counts(Panel_item, Event *);
void init_diagdata(Panel_item, Event *);
void show_diagdata(Panel_item, Event *);
void show_counts(Panel_item, Event *);
void init_help(Panel_item, Event *);
void show_help(Panel_item, Event *);

//Global variables for drawing
Display  *l_b_display, *l_b1_display, *l_b2_display, *d_b_display, *k_b_display, *my_display;
Window   l_b_window, l_b1_window, l_b2_window, d_b_window, k_b_window, my_window;
GC       gcLead0, gcLead1, gcLead2, gcdata, gckoeff, my_gc;
unsigned long background, foreground;
Colormap cmap;
XColor   col, unused;

//Global data
int set_line_width=1;
int set_marker=1; 
char set_color1[30]="green";
char set_color2[30]="blue";
char set_color3[30]="red";
char set_color4[30]="red";
char set_color5[30]="red";
char set_color6[30]="red";

//Other
char set_color7[30]="LightCyan1";
char set_color8[30]="yellow";

long click_ST80_0 = 0, click_STsb_0 = 0, click_ST80_f0 = 0;
long click_ST80_1 = 0, click_STsb_1 = 0, click_ST80_f1 = 0;
long click_ST80_2 = 0, click_STsb_2 = 0, click_ST80_f2 = 0;

Bool auto_save = FALSE;     
int  auto_save_counter = 0;

Bool fast0_center = FALSE; 
Bool fast1_center = FALSE; 
Bool fast2_center = FALSE; 
Bool fast0_right  = FALSE; 
Bool fast1_right  = FALSE; 
Bool fast2_right  = FALSE; 

char message[60], message1[60], message2[60], message3[60];
char pr_buff[80];

//Input data variables
char inp_rec_name[80];

WFDB_Siginfo *siarray;            
long nsig;
WFDB_Siginfo DB_s[WFDB_MAXSIG];
WFDB_Sample v_sample[3];
FILE *dataFileDescriptor = NULL;    
long buff[5][15000];

//Save
FILE *file_save=NULL;
FILE *flinsave=NULL;
char save_name[20];
char save_name_lin[20];
Bool final_save = FALSE;

//Program status
Bool status_manual_mode=TRUE, status_unsubtracted=TRUE, status_consider_localref=TRUE;
Bool status_manual_mode1=TRUE, status_unsubtracted1=TRUE, status_consider_localref1=TRUE;
Bool status_manual_mode2=TRUE, status_unsubtracted2=TRUE, status_consider_localref2=TRUE;

//Diagram data
long time_scale_0=720, time_scale_1=720, time_scale_2=720;  // 720 = 12 min 
long time_scale_d=6;                                        // 6 = 6sec
int  data_scale=6;                                          // 6 = 6 sec
long data_tick=160;
double data_grid_tick = 25.6;                               // 6 sec / 960 * 25.6 = 160 msec
long scale_time_tick=60;                                    // 720 / 12 = 60
long diagram_time_begin_lead, diagram_time_end_lead;
long time_begin_lead, time_end_lead;
long ampl_0=100, ampl_1=100, ampl_2=100;                    // 100 = 100uV

long ampl_d=1000;
long auto_ampl_2[3];
float ampl_c=1.0;

long index_0, index_0_b, index_0_e;
long raw_last_index, fin_last_index;
long raw_display_begin, raw_display_end, fin_display_begin, fin_display_end;
Bool ovr0_l1=FALSE,  ovr0_l2=FALSE;
Bool ovr1_l0=FALSE,  ovr1_l2=FALSE;
Bool ovr2_l1=FALSE,  ovr2_l0=FALSE;
Bool ovr0_app = FALSE, ovr1_app = FALSE, ovr2_app = FALSE;
Bool lead1_data=FALSE,  lead2_data=FALSE; 
Bool KL_coefficents=TRUE;
Bool ovr_coef=FALSE;

Bool allow_l0;
Bool allow_l1, allow_l2;
Bool x_lead =FALSE;

short Lead0_operation;
short Lead1_operation;
short Lead2_operation;

Bool change_atribute0=FALSE; 
Bool change_atribute1=FALSE;
Bool change_atribute2=FALSE;
Bool how0=TRUE;
Bool how1=TRUE;
Bool how2=TRUE;

char ref_code[5];
int Data_lead=0;
Bool data_ovr_l0, data_ovr_l1, data_ovr_l2;
Bool data_ovrly_shift;

long data_mstime_index, reference_mstime_index;

long L_buff_M[6][LEN_BUFF_D], R_buff_M[6][LEN_BUFF_D],A_buff_M[6][LEN_BUFF_D_A];
long L_buff_R[6][LEN_BUFF_D], R_buff_R[6][LEN_BUFF_D],A_buff_R[6][LEN_BUFF_D_A];

Bool global_set;
Bool last_set_all; 

int current_iso_m, current_j_m;
long current_nl, current_nr, current_mean_smp;

long ref_iso, ref_j, ref_dj;

long current_average_beat_time = 0;
long d_avrg_index = 0;
long current_average_window_index;
long current_average_window_time;

short data_ovrly=1;
Bool data_ovr_ref=FALSE;
Bool repeat_set =FALSE;
Bool repeat_set1=FALSE;
Bool repeat_set2=FALSE;

class def_click
{ public:
   Bool first;
   long x,y,  time_index, raw, raw_l,raw_r, fine, fine_l, fine_r;
};

def_click click_l0, click_c0, click_r0;
def_click click_l1, click_c1, click_r1;
def_click click_l2, click_c2, click_r2;
def_click click_c;

class button_lead_status_def
{
public:
  Bool Mark,Dmy, Auto, Subtr, Cmpt, OvrApp, OvrLds, GlR, SetLB, SetLE, DelLI, Isc, Rate_r, Cnd, AxS,Exm, Atr, Move, Del, DelA, ChAtr,ChAtrA, ConsLR, LcRef, Cancel, Rpt;
  short Auto_s,Subtr_s,OvrApp_s,ConsLR_s;
  void copy_button_status(  button_lead_status_def source);
};

button_lead_status_def Lead0_buttons, Lead0_op_begin_status;
button_lead_status_def Lead1_buttons, Lead1_op_begin_status;
button_lead_status_def Lead2_buttons, Lead2_op_begin_status;

class data_fin_def
{
   public:
      long index;
      int HR;
      float l0_ST80,l0_ST20,l1_ST80,l1_ST20,l2_ST80,l2_ST20;
      int  STk1,STk2,STk3,STk4,STk5,
            ST_f,
            QRSk1,QRSk2,QRSk3,QRSk4,QRSk5,
            QRS_f,
            nPB, nPE, nISO, nQ, nJ, nTB, nTX, nTE;
      float lin_v[3], sub_v[3];

   void Init(void);
   void Insert(data_fin_def value);
};

data_fin_def data_fin[LEN_BUFF_F];
data_fin_def data_raw[LEN_BUFF_R];

class lead_plot_button_status
{
public:
  Bool HRate,HRRaw,STFine,STslFine,STslRaw,Episodes,HideHR,ISOJ,Mode9,Mode10,lead0,lead1,lead2,UnOvrly;
}; 

lead_plot_button_status lead0_plot_button_status;
lead_plot_button_status lead1_plot_button_status;
lead_plot_button_status lead2_plot_button_status;

class reference_def
{
   public:
      Bool set; 

      long raw_index, fine_index;
      int code1, code2;
      int lead, raw_HR, fine_HR;
      int  raw_ST80,raw_ST20, ST_sub, fine_ST80, fine_ST20, STd, ST80, STsl;
      int  nPB, nPE, nISO, nQ, nJ, nJ80, nTB, nTX, nTE, window, NL, NR, NS;
   void copy_ref(reference_def source);

};

reference_def global_ref[3], act_ref_data[3], Marker[3], references[3][5000], loc_interval_b[3], loc_interval_e[3];
long references_index[3];
long reference_act[3];  // last active reference - set or ex

class ref_use_def
{
public:
  Bool set, change;
  long typ; // 1 - global, 2 - local
  long index, lead;
};

ref_use_def act_reference[3];

void k_call_left(Xv_window, Event *, Notify_arg, Notify_event_type);
void k_call_center(Xv_window, Event *, Notify_arg, Notify_event_type);
void k_call_right(Xv_window, Event *, Notify_arg, Notify_event_type);
void d_call_left(Xv_window, Event *, Notify_arg, Notify_event_type);
void d_call_center(Xv_window, Event *, Notify_arg, Notify_event_type);
void d_call_right(Xv_window, Event *, Notify_arg, Notify_event_type);
void l_call_left(Xv_window, Event *, Notify_arg, Notify_event_type);
void l_call_center(Xv_window, Event *, Notify_arg, Notify_event_type);
void l_call_right(Xv_window, Event *, Notify_arg, Notify_event_type);
void l_call_left1(Xv_window, Event *, Notify_arg, Notify_event_type);
void l_call_center1(Xv_window, Event *, Notify_arg, Notify_event_type);
void l_call_right1(Xv_window, Event *, Notify_arg, Notify_event_type);
void l_call_left2(Xv_window, Event *, Notify_arg, Notify_event_type);
void l_call_center2(Xv_window, Event *, Notify_arg, Notify_event_type);
void l_call_right2(Xv_window, Event *, Notify_arg, Notify_event_type);
void l_ini_lcp_b(Panel_item, Event *);

void draw_grid_coeff(void);
void draw_ovrly_coeff(void);

void sub_op0_exec(void);
void sub_op1_exec(void);
void sub_op2_exec(void);

void insert_ref(int, reference_def, int, int);
void set_marker_l(int leadx);
void update_marker(int leadx,long cal);
void draw_grid_lead0(int leadx); 
void show_data(int leadx, Bool xx_lead, Bool xx_kl);

void data_new_r_read(void);
void get_average_M(void);
void get_average_R(void);
void set_buttons_lead1_setGR(void);
void set_buttons_lead1(void);
void set_buttons_lead2_setGR(void);
void set_buttons_lead2(void);
void set_buttons_lead0(void);

//Global object definitions.
sem_0_m_bw_objects	Sem_0_m_bw;
sem_0_k_bw_objects	Sem_0_k_bw;
sem_0_o_pw_objects	Sem_0_o_pw;
sem_0_q_pw_objects	Sem_0_q_pw;
sem_0_w_pw_objects	Sem_0_w_pw;
sem_0_d_bw_objects	Sem_0_d_bw;
sem_0_l_bw_objects	Sem_0_l_bw;
sem_0_l_bw1_objects	Sem_0_l_bw1;
sem_0_l_bw2_objects	Sem_0_l_bw2;
sem_0_d_pw_objects	Sem_0_d_pw;
sem_0_c_pw_objects	Sem_0_c_pw;
sem_0_h_pw_objects	Sem_0_h_pw;

//User functions =========================================================================================

//void (*textsw_default_notifyx)(Textsw textsw, Attr_avlist  attributes);
void myproc(Textsw textsw, Attr_avlist  attributes)
{
  int  pass_on = FALSE;
  Attr_avlist   attrs;
  for (attrs = attributes; *attrs; attrs = attr_next(attrs)) {
    //    switch ((Textsw_action)(*attrs)) {
    //    case TEXTSW_ACTION_TOOL_DESTROY:
      ATTR_CONSUME(*attrs);
      //      break;
      //    case TEXTSW_ACTION_TOOL_QUIT:
      //      ATTR_CONSUME(*attrs);
      //      break;
      //    defaults:
      pass_on = TRUE;
      //      break;
      //    }
  }
  if (pass_on) textsw_default_notify(textsw, attributes);
}

void reset_HR_lead0(int leadx)
{
	switch (leadx) {
          case 0:
	    lead0_plot_button_status.HRate=FALSE;
	    lead0_plot_button_status.HRRaw=FALSE;
	    lead0_plot_button_status.STFine=FALSE;
	    lead0_plot_button_status.STslFine=FALSE;
	    lead0_plot_button_status.STslRaw=FALSE;
	    lead0_plot_button_status.Episodes=FALSE;
	    lead0_plot_button_status.HideHR=FALSE;
	    lead0_plot_button_status.ISOJ=FALSE;
	    lead0_plot_button_status.Mode9=FALSE;
	    lead0_plot_button_status.Mode10=FALSE;
	    break;
          case 1: 
	    lead1_plot_button_status.HRate=FALSE;
	    lead1_plot_button_status.HRRaw=FALSE;
	    lead1_plot_button_status.STFine=FALSE;
	    lead1_plot_button_status.STslFine=FALSE;
	    lead1_plot_button_status.STslRaw=FALSE;
	    lead1_plot_button_status.Episodes=FALSE;
	    lead1_plot_button_status.HideHR=FALSE;
	    lead1_plot_button_status.ISOJ=FALSE;
	    lead1_plot_button_status.Mode9=FALSE;
	    lead1_plot_button_status.Mode10=FALSE;
	    break;
	  case 2:
	    lead2_plot_button_status.HRate=FALSE;
	    lead2_plot_button_status.HRRaw=FALSE;
	    lead2_plot_button_status.STFine=FALSE;
	    lead2_plot_button_status.STslFine=FALSE;
	    lead2_plot_button_status.STslRaw=FALSE;
	    lead2_plot_button_status.Episodes=FALSE;
	    lead2_plot_button_status.HideHR=FALSE;
	    lead2_plot_button_status.ISOJ=FALSE;
	    lead2_plot_button_status.Mode9=FALSE;
	    lead2_plot_button_status.Mode10=FALSE;
	    break;
	} // end switch
}

void data_fin_def::Init(void)
{
      index=0;
      HR=0;
      l0_ST80=0;l0_ST20=0;
      l1_ST80=0;l1_ST20=0;
      l2_ST80=0;l2_ST20=0;
      STk1=0;STk2=0;STk3=0;STk4=0;STk5=0;
      ST_f=0;
      QRSk1=0;QRSk2=0;QRSk3=0;QRSk4=0;QRSk5=0;
      QRS_f=0;
      nPB=0; nPE=0; nISO=0; nQ=0; nJ=0; nTB=0; nTX=0; nTE=0;
      lin_v[0]=0.0;lin_v[1]=0.0;lin_v[2]=0.0; 
      sub_v[0]=0.0;  sub_v[1]=0.0;sub_v[2]=0.0;
} // data_fin_def::Init

void data_fin_def::Insert(data_fin_def value)
{
      index=value.index;
      HR=value.HR;
      l0_ST80=value.l0_ST80;l0_ST20=value.l0_ST20;
      l1_ST80=value.l1_ST80;l1_ST20=value.l1_ST20;
      l2_ST80=value.l2_ST80;l2_ST20=value.l2_ST20;
      STk1=value.STk1;STk2=value.STk2;STk3=value.STk3;STk4=value.STk4;STk5=value.STk5;
      ST_f=value.ST_f;
      QRSk1=value.QRSk1;QRSk2=value.QRSk2;QRSk3=value.QRSk3;QRSk4=value.QRSk4;QRSk5=value.QRSk5;
      QRS_f=value.QRS_f;
      nPB=value.nPB; nPE=value.nPE; nISO=value.nISO; nQ=value.nQ;
      nJ=value.nJ; nTB=value.nTB; nTX=value.nTX; nTE=value.nTE;
} // data_fin_def::Insert

void reference_def::copy_ref(reference_def source)
{
      set = source.set;
      raw_index=source.raw_index;
      fine_index=source.fine_index;
      code1= source.code1;
      code2 =source.code2;
      lead=source.lead;
      raw_HR=source.raw_HR; fine_HR=source.fine_HR;
      raw_ST80=source.raw_ST80; raw_ST20 = source.raw_ST20; 
      fine_ST80 = source.fine_ST80; fine_ST20= source.fine_ST20;
      STd = source.STd; STsl = source.STsl;
      ST80=source.ST80;
      ST_sub=source.ST_sub;
      nPB = source.nPB;  nPE = source.nPE;
      nISO = source.nISO;  nQ = source.nQ ;  nJ =  source.nJ;  nJ80 =  source.nJ80; 
      nTB =  source.nTB;   nTX =  source.nTX;   nTE =  source.nTE;
      window =  source.window ;   NL= source.NL; NR =  source.NR;   NS =  source.NS;
} // reference_def::copy(reference_def source, dest) 

void insert_ref(int leadx, reference_def source,int code1x, int code2x)
{
 long i, j;
 long ref_index;

   references_index[leadx]++; ref_index=references_index[leadx]; 
   for (i=0; (i < ref_index) && ( references[leadx][i].raw_index < source.raw_index ) ; i++);
   if ( i < ref_index ) { for (j=ref_index; j > i; j--) references[leadx][j].copy_ref(references[leadx][j-1]);}
   references[leadx][i].copy_ref(source);
   references[leadx][i].code1=code1x;
   references[leadx][i].code2=code2x;
   reference_act[leadx]=i; 
}  // end insert_ref

void button_lead_status_def::copy_button_status(  button_lead_status_def source)
{   
   Auto_s=source.Auto_s;  Subtr_s=source.Subtr_s;  OvrApp_s= source.OvrApp_s; ConsLR_s= source.ConsLR_s;
   Mark = source.Mark; Dmy = source.Dmy; Auto = source.Auto; Subtr = source.Subtr; Cmpt = source.Cmpt; 
   OvrApp = source.OvrApp; OvrLds = source.OvrLds; GlR = source.GlR; SetLB = source.SetLB; SetLE = source.SetLE; 
   DelLI = source.DelLI; Isc = source.Isc; Rate_r = source.Rate_r; Cnd= source.Cnd; 
   AxS = source.AxS; Exm = source.Exm; Atr = source.Atr; Move = source.Move; Del = source.Del; DelA = source.DelA;  
   ChAtr = source.ChAtr; ChAtrA = source.ChAtrA; ConsLR = source.ConsLR; LcRef =source.LcRef;
   Cancel=source.Cancel; Rpt= source.Rpt;
} // end copy_button_status

void warning_message(int lines)
{
	  xv_set(Sem_0_w_pw.w_m_message1, PANEL_LABEL_STRING,message1, NULL);
	  if ( lines < 2 ) strcpy(message2,"");
	  if ( lines < 3) strcpy(message3, "");
	  xv_set(Sem_0_w_pw.w_m_message2, PANEL_LABEL_STRING,message2, NULL);
	  xv_set(Sem_0_w_pw.w_m_message3, PANEL_LABEL_STRING,message3, NULL);
	   if (xv_get(Sem_0_w_pw.w_pw, FRAME_CLOSED)) 
	     xv_set(Sem_0_w_pw.w_pw, FRAME_CLOSED, FALSE, NULL);
	   xv_set(Sem_0_w_pw.w_pw, FRAME_CMD_PUSHPIN_IN, FALSE, NULL);
	   xv_set(Sem_0_w_pw.w_pw, XV_SHOW, TRUE, NULL);
} // end warnig_message

long Round(double value)
{
   // Plain vanila round function
   if(value >= 0.0)
      return(long(value + 0.5));
   else
      return(long(value - 0.5));   
}

long TimeToIndex(long time)
{
   return((long)(time * double(FSAMP)));
}

void TimeToHoursMinSec(long time, long *hou, long *min, long *sec, long *hou_l)
{
   long timeTemp;
   
   timeTemp = time;
   timeTemp = long(timeTemp / 60);
   timeTemp = timeTemp * 60;
   
   *sec = time - timeTemp;
   
   time = long(time / 60);
   timeTemp = time;
   timeTemp = long(timeTemp / 60);
   timeTemp = timeTemp * 60;
   
   *min = time - timeTemp;
   
   time = long(time / 60);
   *hou_l = time;

   timeTemp = time;
   timeTemp = long(timeTemp / 24);
   timeTemp = timeTemp * 24;
   
   *hou = time - timeTemp;
}

long IndexToTime(long idx)
{
   return(long(double(idx) / FSAMP));
}

long Coor_x_l0(long index)
{
  long timex;
  
  timex=long(double(index)*1000.0 / FSAMP);
  return ((long)(160 + double(timex)*960.0 /(double) time_scale_0/1000.0));
} // coor_x_l0

long Coor_y_l0(float value)
{
  return(60-Round(double(value)*20000.0/STAMPL/ampl_0)); // 20000.0 = 20 pix  x 1000 uV
}  // coor_y_l0

long Coor_y_l1(float value)
{
  return(60-Round(double(value)*20000.0/STAMPL/ampl_1)); // 20000.0 = 20 pix  x 1000 uV
}  // coor_y_l1

long Coor_y_l2(float value)
{
  return(60-Round(double(value)*20000.0/STAMPL/ampl_2)); // 20000.0 = 20 pix  x 1000 uV
}  // coor_y_l2

long Coor_x_data(long index)
{
  long timex;
  
  timex=long(double(index) * 1000.0 / FSAMP);
  return ((long)(160 + double(timex)*960.0 /(double) data_scale / 1000.0));
} // coor_x_l0

long Coor_y_data_M(float value)
{
  return(270-Round(double(value)*40000.0/STAMPL/ampl_d)); // 20000.0 = 20 pix  x 1000 uV
}  // coor_y_l0

void reset_global_reference(void) {
int l;
  
  for (l=0; l < 3; l++ ) {
      global_ref[l].set=FALSE;
      global_ref[l].raw_index=0;
      global_ref[l].fine_index=0;
      global_ref[l].code1= 0;
      global_ref[l].code2 =-1;
      global_ref[l].lead=l;
      global_ref[l].raw_HR=0; global_ref[l].fine_HR=0;
      global_ref[l].raw_ST80=0; global_ref[l].raw_ST20 = 0; 
      global_ref[l].fine_ST80 = 0; global_ref[l].fine_ST20= 0;
      global_ref[l].STd = 0; global_ref[l].STsl = 0; global_ref[l].ST_sub = 0;
      global_ref[l].nPB = 0;  global_ref[l].nPE = 0; global_ref[l].ST80 = 0;
      global_ref[l].nISO = 0;  global_ref[l].nQ =0 ;  global_ref[l].nJ = 0;  global_ref[l].nJ80 = 0; 
      global_ref[l].nTB = 0;   global_ref[l].nTX = 0;   global_ref[l].nTE = 0;
      global_ref[l].window = 0;   global_ref[l].NL=0; global_ref[l].NR = 0;  global_ref[l].NS = 0;

      act_ref_data[l].copy_ref(global_ref[l]);
     
      references_index[l]=-1;
      reference_act[l]=-1;
      loc_interval_b[l].set=FALSE;
      loc_interval_e[l].set=FALSE;
  }
  global_set=FALSE;
} // end  reset_global_reference

float raw_st80(int leadx, long indexx)
{
  float v;
	switch (leadx) {
          case 0: v=data_raw[indexx].l0_ST80;  break;
          case 1: v=data_raw[indexx].l1_ST80;  break;
	  case 2: v=data_raw[indexx].l2_ST80;  break;
	} // end switch
	return(v);
} //  end raw_st80

Bool Is_code(int leadx, long indexx, int cod1, int cod2)
{
  if ( cod1 == 0 && cod2 == 0 &&  global_ref[0].set &&  act_reference[leadx].change ) return(TRUE);
  if ( indexx < 0 ) return(FALSE);
  return((references[leadx][indexx].code1 == cod1) && (references[leadx][indexx].code2 == cod2));
} // end Is_code 

void lin_function(int leadx)
{
  long i, r_i, end_i;
  float val_1, val_2;
  double fk;
  long tim_1, tim_2;
  long first_r, last_r, next_r, GR_index,act_ind;

  act_ind=reference_act[leadx];
  end_i=references_index[leadx];

  // temp insert GR
  insert_ref(leadx,global_ref[leadx],0,0);
  end_i=end_i+1; 

  GR_index=reference_act[leadx]; 

  first_r=0; while (!Is_code(leadx,first_r,0,0)) first_r++;
  last_r=end_i; while (!Is_code(leadx,last_r,0,0)) last_r--; 
  next_r=first_r;

  val_1=raw_st80(leadx,references[leadx][first_r].raw_index); 
  val_2=raw_st80(leadx,references[leadx][first_r].raw_index); 
  tim_1=data_raw[references[leadx][first_r].raw_index].index; 
  tim_2=data_raw[references[leadx][first_r].raw_index].index; 
  fk=0.0;

  i=0;
  while ( i <= references[leadx][first_r].raw_index ){
      data_raw[i].lin_v[leadx]=val_2;
      data_raw[i].sub_v[leadx]=raw_st80(leadx,i)- val_2;
      i++;
  } // while befor first
      
  while ( next_r < last_r ) {

    val_1=val_2; tim_1=tim_2;
    next_r++;  while (!Is_code(leadx,next_r,0,0)) next_r++;

    val_2=raw_st80(leadx,references[leadx][next_r].raw_index); 
    tim_2=data_raw[references[leadx][next_r].raw_index].index;

    fk=(val_2 - val_1) / ( tim_2 - tim_1);

    while ( i <= references[leadx][next_r].raw_index ){
      data_raw[i].lin_v[leadx]=val_1 + fk * (data_raw[i].index - tim_1);
      data_raw[i].sub_v[leadx]=raw_st80(leadx,i)- data_raw[i].lin_v[leadx];
      i++;
    } // while to next
  } // while in ref interval

  while ( i <= raw_last_index ){
      data_raw[i].lin_v[leadx]=val_2;
      data_raw[i].sub_v[leadx]=raw_st80(leadx,i)- val_2;
      i++;
  } // while after last set to end data

	  for (r_i=GR_index; r_i < end_i; r_i++) {
	    references[leadx][r_i].copy_ref( references[leadx][r_i+1]); }

  reference_act[leadx]=act_ind;
  references_index[leadx]--;
}  // end lin_function

void get_display_code(int leadx, long indexx)
{
            strcpy(ref_code,"??");

            switch (references[leadx][indexx].code1){
	    case -1:if(Is_code(leadx,indexx,-1,1))  strcpy(ref_code,"BI");
                    if(Is_code(leadx,indexx,-1,7))  strcpy(ref_code,"BR");
                    if(Is_code(leadx,indexx,-1,11))  strcpy(ref_code,"BO");
	      break;
	    case -3:if(Is_code(leadx,indexx,-3,1))  strcpy(ref_code,"EI");
                    if(Is_code(leadx,indexx,-3,7))  strcpy(ref_code,"ER");
                    if(Is_code(leadx,indexx,-3,11))  strcpy(ref_code,"EO");
	      break;
	    case 0: if(Is_code(leadx,indexx,0,-1))  strcpy(ref_code,"GR");
                    if(Is_code(leadx,indexx,0,0))  strcpy(ref_code,"LR");
	      break;
 	     case 2:if(Is_code(leadx,indexx,2,1))  strcpy(ref_code,"XI");
                    if(Is_code(leadx,indexx,2,7))  strcpy(ref_code,"XR");
                    if(Is_code(leadx,indexx,2,11))  strcpy(ref_code,"XO");
	      break;
	    case 4: if(Is_code(leadx,indexx,4,0))  strcpy(ref_code,"DY");
	      break;
	    case 10:if(Is_code(leadx,indexx,10,0))  strcpy(ref_code,"NO");
	      break;
	    case 11:if(Is_code(leadx,indexx,11,0))  strcpy(ref_code,"UR");
	      break;
	    case 12:if(Is_code(leadx,indexx,12,0))  strcpy(ref_code,"PR");
	      break;
	    case 13:if(Is_code(leadx,indexx,13,0)) strcpy(ref_code,"AX");
	      break;
	    case 14:if(Is_code(leadx,indexx,14,0)) strcpy(ref_code,"CC");
	      break;
	    case 15:if(Is_code(leadx,indexx,15,0))  strcpy(ref_code,"UB");
	      break;
	    case 16:if(Is_code(leadx,indexx,16,0))  strcpy(ref_code,"UE");
	      break;
	    case 17:if(Is_code(leadx,indexx,17,0))  strcpy(ref_code,"A6");
	      break;
	    case 18:if(Is_code(leadx,indexx,18,0))  strcpy(ref_code,"A7");
	      break;
	    } // end code1
	      //	    return(ref_code);
} // end get_display_code

Bool IS_free(int leadx, long indexx, int act_op)
{
 long i;
 Bool test= TRUE;
 Bool test_l0=FALSE;
 Bool test_l1=FALSE;
 Bool test_l2=FALSE;
 long code_0, code_1, code_2;
 char d_c[2];

 if ( global_ref[0].set ) {
   if ( global_ref[0].raw_index == indexx ) {
     strcpy(message1,"Attempt to overlap Global Reference !");
     warning_message(1);
     return(FALSE);
   }
 }
 
 switch (leadx ){
 case 0: test_l0=TRUE; if (act_op == 2) { test_l1=lead1_data; test_l2=lead2_data; }
   break;
 case 1: test_l1=TRUE; if (act_op == 2) { test_l0=TRUE; test_l2=lead2_data; }
   break;
 case 2: test_l2=TRUE; if (act_op == 2) { test_l0=TRUE; test_l1=TRUE; }
   break;
 }

 if ( test_l0 ) {
   test_l0=FALSE;
   if ( references_index[0] > - 1) {
     for (i=0; i <= references_index[0]; i++) 
       if ( indexx == references[0][i].raw_index ) { test=FALSE; test_l0=TRUE; code_0=i;}
     
   }
 } // test_l0
 if ( test_l1 ) {
   test_l1=FALSE;
   if ( references_index[1] > - 1) {
     for (i=0; i <= references_index[1]; i++) 
       if ( indexx == references[1][i].raw_index ) { test=FALSE; test_l1=TRUE; code_1=i;}
   }
 } // test_l1
 if ( test_l2 ) {
   test_l2=FALSE;
   if ( references_index[2] > - 1) {
     for (i=0; i <= references_index[2]; i++) 
       if ( indexx == references[2][i].raw_index ) { test=FALSE; test_l2=TRUE; code_2=i;}
   }
 } // test_l2

 strcpy(message1,"");  strcpy(message2,""); strcpy(message3,"");

 if (test_l0 ) { 
   get_display_code(0,code_0);
   sprintf(message1,"Lead 0:   At  %s:", mstimstr(data_raw[indexx].index));
   sprintf(message2,"Attempt to overlap existing annotation (%s) !", ref_code);
 }
 if (test_l1 ) { 
   get_display_code(1,code_1);
   sprintf(message1,"Lead 1:   At  %s:", mstimstr(data_raw[indexx].index));
   sprintf(message2,"Attempt to overlap existing annotation (%s) !", ref_code);
 }
 if (test_l2 ) { 
   get_display_code(2,code_2);
   sprintf(message1,"Lead 2:   At  %s:", mstimstr(data_raw[indexx].index));
   sprintf(message2,"Attempt to overlap existing annotation (%s) !", ref_code);
 }
 if ( test_l0 OR test_l1 OR test_l2 ) warning_message(3);

 return(test);
} // end IS_free

Bool Is_prop_mode(int leadx)
{ 	
Bool test, t0, t1, t2;;

 test=        ( status_manual_mode   && status_unsubtracted  && 
		status_manual_mode1  && status_unsubtracted1 && 
	        status_manual_mode2  && status_unsubtracted2);
 t0= status_manual_mode   && status_unsubtracted ;
 t1= status_manual_mode1  && status_unsubtracted1;
 t2= status_manual_mode2  && status_unsubtracted2;

 switch (leadx){
   case 0: test=test &&	Lead1_operation == 0 && Lead2_operation == 0;
     t1= t1 && 	Lead1_operation == 0;
     t2= t2 && 	Lead2_operation == 0;
     break;
   case 1: test=test &&	Lead0_operation == 0 && Lead2_operation == 0;
     t0= t0 && 	Lead0_operation == 0;
     t2= t2 && 	Lead2_operation == 0;
     break;
   case 2: test=test &&	Lead0_operation == 0 && Lead1_operation == 0;
     t0= t0 && 	Lead0_operation == 0;
     t1= t1 && 	Lead1_operation == 0;
     break;
 }
 if ( ! test ) {
   strcpy(message1,"");  strcpy(message2,""); strcpy(message3,"");
   if (! t0 )    sprintf(message1,"Incorrect mode in Lead 0 ! " );
   if (! t1 )    sprintf(message2,"Incorrect mode in Lead 1 ! " );
   if (! t2 )    sprintf(message3,"Incorrect mode in Lead 2 ! " );
    warning_message(3);
 } 

 return(test);
} // end  Is_prop_mode

float avr_in_avrbeat(int i,int  point, int mean_smp)
{
  long iso_off_n;
  float avr, avr1;
// i = lead
        iso_off_n= 125-point;

	switch (mean_smp) {
	case 1:  avr1 =A_buff_M[i][iso_off_n]; break; 
	case 3:  avr1 = (A_buff_M[i][iso_off_n]+A_buff_M[i][iso_off_n-1]+A_buff_M[i][iso_off_n+1]) / 3.0; break; 
	case 5:  avr1 = (A_buff_M[i][iso_off_n]+A_buff_M[i][iso_off_n-1]+A_buff_M[i][iso_off_n+1]+A_buff_M[i][iso_off_n-2]+A_buff_M[i][iso_off_n+2]) / 5.0; break; 
	case 7:  avr1 = (A_buff_M[i][iso_off_n]+A_buff_M[i][iso_off_n-1]+A_buff_M[i][iso_off_n+1]+A_buff_M[i][iso_off_n-2]+A_buff_M[i][iso_off_n+2] + A_buff_M[i][iso_off_n-3]+A_buff_M[i][iso_off_n+3]) / 7.0; break; 
	}

  avr =STAMPL * long(Round(1000.0* avr1/STAMPL))/1000.0;
  return(avr);
}  // end avr_in_avrbeat

float avr_in_avrbeat_r(int i,int  point, int mean_smp)
{
  long iso_off_n;
  float avr, avr1;

        iso_off_n= 125-point;

	switch (mean_smp) {
	case 1:  avr1 =A_buff_R[i][iso_off_n]; break; 
	case 3:  avr1 = (A_buff_R[i][iso_off_n]+A_buff_R[i][iso_off_n-1]+A_buff_R[i][iso_off_n+1]) / 3.0; break; 
	case 5:  avr1 = (A_buff_R[i][iso_off_n]+A_buff_R[i][iso_off_n-1]+A_buff_R[i][iso_off_n+1]+A_buff_R[i][iso_off_n-2]+A_buff_R[i][iso_off_n+2]) / 5.0; break; 
	case 7:  avr1 = (A_buff_R[i][iso_off_n]+A_buff_R[i][iso_off_n-1]+A_buff_R[i][iso_off_n+1]+A_buff_R[i][iso_off_n-2]+A_buff_R[i][iso_off_n+2] + A_buff_R[i][iso_off_n-3]+A_buff_R[i][iso_off_n+3]) / 7.0; break; 
	}
  avr =STAMPL * long(Round(1000.0* avr1/STAMPL))/1000.0;
  return(avr);
}  // end avr_in_avrbeat_r

void plot_point_symbol(int s_type, long x, long y)
{
  return;
} //end plot_point_symbol

int mk_uv(float x_v)
{
  return((long)(Round(1000.0* x_v/STAMPL)));
}

void write_ref_data_l0(void)
{

long hours=0,hours_l=0,  minutes=0, seconds=0;
int lead=0;

   my_display=l_b_display; my_window=l_b_window; my_gc= gcLead0;

   XAllocNamedColor(my_display, cmap,"white", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   XFillRectangle(my_display, my_window, my_gc, 1,54,130,92);

   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   if (Marker[lead].set ) {
     
   XAllocNamedColor(my_display, cmap,set_color8, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);
   XFillRectangle(my_display, my_window, my_gc, 1,55,130,12);
   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   sprintf(pr_buff, "RAW: %14s",mstimstr(data_raw[Marker[lead].raw_index].index));
   XDrawString(my_display, my_window, my_gc, 2, 66, pr_buff, strlen(pr_buff));

   sprintf(pr_buff, "HRate: %9d [bpm]",data_raw[Marker[lead].raw_index].HR);
   XDrawString(my_display, my_window, my_gc, 2, 78, pr_buff, strlen(pr_buff));

   XAllocNamedColor(my_display, cmap,set_color8, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);
   XFillRectangle(my_display, my_window, my_gc, 1,79,130,24);
   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   sprintf(pr_buff,"ST80:");
   XDrawString(my_display, my_window, my_gc, 2, 90, pr_buff, strlen(pr_buff));

   if ( reference_act[lead] == -1 && references_index[lead] == -1 ) {
   sprintf(pr_buff," %6d/%6d",mk_uv(data_raw[Marker[lead].raw_index].l0_ST80),
	   act_ref_data[lead].raw_ST80); // **
 } else if (reference_act[lead] > -1 ) {
   sprintf(pr_buff," %6d/%6d",mk_uv(data_raw[Marker[lead].raw_index].l0_ST80),
	   references[lead][reference_act[lead]].raw_ST80 ); }
 else
   { sprintf(pr_buff," %6d/%6s",mk_uv(data_raw[Marker[lead].raw_index].l0_ST80), " "); }   

   XDrawString(my_display, my_window, my_gc, 40, 90, pr_buff, strlen(pr_buff));

   sprintf(pr_buff,"STSb:");
   XDrawString(my_display, my_window, my_gc, 2, 102, pr_buff, strlen(pr_buff));

 if ( reference_act[lead] == -1 && references_index[lead] == -1) {
   sprintf(pr_buff," %6d/%6d",mk_uv(data_raw[Marker[lead].raw_index].sub_v[lead]),
	   act_ref_data[lead].ST_sub );
 } else if (reference_act[lead] > -1 ) {
   sprintf(pr_buff," %6d/%6d",mk_uv(data_raw[Marker[lead].raw_index].sub_v[lead]),
                                         references[lead][reference_act[lead]].ST_sub );
 } else {
   sprintf(pr_buff," %6d/%6s",mk_uv(data_raw[Marker[lead].raw_index].sub_v[lead]), " ");
 }

   XDrawString(my_display, my_window, my_gc, 40, 102, pr_buff, strlen(pr_buff));

   XAllocNamedColor(my_display, cmap,set_color8, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);
   XFillRectangle(my_display, my_window, my_gc, 1,109,130,12);
   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   sprintf(pr_buff, "FINE: %14s",mstimstr(data_fin[Marker[lead].fine_index].index));
   XDrawString(my_display, my_window, my_gc, 2, 120, pr_buff, strlen(pr_buff));

   sprintf(pr_buff, "HRate: %9d [bpm]", data_fin[Marker[lead].fine_index].HR);
   XDrawString(my_display, my_window, my_gc, 2, 132, pr_buff, strlen(pr_buff));

   sprintf(pr_buff,"ST80:");
   XDrawString(my_display, my_window, my_gc, 2, 144, pr_buff, strlen(pr_buff));

 if ( reference_act[lead] == -1 && references_index[lead] == -1) {
   sprintf(pr_buff," %6d/%6d", mk_uv( data_fin[Marker[lead].fine_index].l0_ST80), 
	   act_ref_data[lead].fine_ST80 );
 } else if (reference_act[lead] > -1 ) {
   sprintf(pr_buff," %6d/%6d", mk_uv( data_fin[Marker[lead].fine_index].l0_ST80), 
                                       references[lead][reference_act[lead]].fine_ST80 );
 } else {
   sprintf(pr_buff," %6d/%6s",mk_uv(data_fin[Marker[lead].fine_index].l0_ST80), " ");
 }

   XDrawString(my_display, my_window, my_gc, 40, 144, pr_buff, strlen(pr_buff));

  }

   XAllocNamedColor(my_display, cmap,set_color8, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   XFillRectangle(my_display, my_window, my_gc, 1,13,130,24);

   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   if ( status_manual_mode ) XDrawString(my_display, my_window, my_gc, 2,24,"MANUAL MODE",11);
                        else XDrawString(my_display, my_window, my_gc, 2,24,"AUTOMATIC MODE",14);

   if ( status_unsubtracted ) XDrawString(my_display, my_window, my_gc, 2,36,"UNSUBTRACTED",12);
                         else XDrawString(my_display, my_window, my_gc, 2,36,"SUBTRACTED",10);

     if ( act_reference[0].set ){
        if ( act_reference[0].typ == 1 ) 	  sprintf(pr_buff, "ACTIVE: Global Ref");
        if ( act_reference[0].typ == 2 ) 	  sprintf(pr_buff, "ACTIVE: Local Ref");
						}
                   else {
		     sprintf(pr_buff, "ACTIVE:");
		   }

   XDrawString(my_display, my_window, my_gc, 2, 48, pr_buff, strlen(pr_buff));
}// write_ref_data_l0 

void write_ref_data_l1(void)
{

long hours=0,hours_l=0,  minutes=0, seconds=0;

int lead=1;

   my_display=l_b1_display; my_window=l_b1_window; my_gc= gcLead1;

   XAllocNamedColor(my_display, cmap,"white", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   XFillRectangle(my_display, my_window, my_gc, 1,54,130,92);

   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   if (Marker[lead].set ) {
     
   XAllocNamedColor(my_display, cmap,set_color8, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);
   XFillRectangle(my_display, my_window, my_gc, 1,55,130,12);
   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);
   sprintf(pr_buff, "RAW: %14s",mstimstr(data_raw[Marker[lead].raw_index].index));
   XDrawString(my_display, my_window, my_gc, 2, 66, pr_buff, strlen(pr_buff));

   sprintf(pr_buff, "HRate: %9d [bpm]",data_raw[Marker[lead].raw_index].HR);
   XDrawString(my_display, my_window, my_gc, 2, 78, pr_buff, strlen(pr_buff));

   XAllocNamedColor(my_display, cmap,set_color8, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);
   XFillRectangle(my_display, my_window, my_gc, 1,79,130,24);
   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   sprintf(pr_buff,"ST80:");
   XDrawString(my_display, my_window, my_gc, 2, 90, pr_buff, strlen(pr_buff));

   if ( reference_act[lead] == -1 && references_index[lead] == -1 ) {
   sprintf(pr_buff," %6d/%6d",mk_uv(data_raw[Marker[lead].raw_index].l1_ST80),
	   act_ref_data[lead].raw_ST80); // **
 } else if (reference_act[lead] > -1 ) {
   sprintf(pr_buff," %6d/%6d",mk_uv(data_raw[Marker[lead].raw_index].l1_ST80),
	   references[lead][reference_act[lead]].raw_ST80 ); }
 else
   { sprintf(pr_buff," %6d/%6s",mk_uv(data_raw[Marker[lead].raw_index].l1_ST80), " "); }   

   XDrawString(my_display, my_window, my_gc, 40, 90, pr_buff, strlen(pr_buff));

   sprintf(pr_buff,"STSb:");
   XDrawString(my_display, my_window, my_gc, 2, 102, pr_buff, strlen(pr_buff));

 if ( reference_act[lead] == -1 && references_index[lead] == -1) {
   sprintf(pr_buff," %6d/%6d",mk_uv(data_raw[Marker[lead].raw_index].sub_v[lead]),
	   act_ref_data[lead].ST_sub ); // **
 } else if (reference_act[lead] > -1 ) {
   sprintf(pr_buff," %6d/%6d",mk_uv(data_raw[Marker[lead].raw_index].sub_v[lead]),
                                         references[lead][reference_act[lead]].ST_sub );
 } else {
   sprintf(pr_buff," %6d/%6s",mk_uv(data_raw[Marker[lead].raw_index].sub_v[lead]), " ");
 }

   XDrawString(my_display, my_window, my_gc, 40, 102, pr_buff, strlen(pr_buff));

   XAllocNamedColor(my_display, cmap,set_color8, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);
   XFillRectangle(my_display, my_window, my_gc, 1,109,130,12);
   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   sprintf(pr_buff, "FINE: %14s",mstimstr(data_fin[Marker[lead].fine_index].index));
   XDrawString(my_display, my_window, my_gc, 2, 120, pr_buff, strlen(pr_buff));

   sprintf(pr_buff, "HRate: %9d [bpm]", data_fin[Marker[lead].fine_index].HR);
   XDrawString(my_display, my_window, my_gc, 2, 132, pr_buff, strlen(pr_buff));

   sprintf(pr_buff,"ST80:");
   XDrawString(my_display, my_window, my_gc, 2, 144, pr_buff, strlen(pr_buff));

 if ( reference_act[lead] == -1 && references_index[lead] == -1) {
   sprintf(pr_buff," %6d/%6d", mk_uv( data_fin[Marker[lead].fine_index].l1_ST80), 
	   act_ref_data[lead].fine_ST80 ); // **
 } else if (reference_act[lead] > -1 ) {
   sprintf(pr_buff," %6d/%6d", mk_uv( data_fin[Marker[lead].fine_index].l1_ST80), 
                                       references[lead][reference_act[lead]].fine_ST80 );
 } else {
   sprintf(pr_buff," %6d/%6s",mk_uv(data_fin[Marker[lead].fine_index].l1_ST80), " ");
 }
   XDrawString(my_display, my_window, my_gc, 40, 144, pr_buff, strlen(pr_buff));
  }

   XAllocNamedColor(my_display, cmap,set_color8, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   XFillRectangle(my_display, my_window, my_gc, 1,13,130,24);

   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   if ( status_manual_mode1 ) XDrawString(my_display, my_window, my_gc, 2,24,"MANUAL MODE",11);
                        else XDrawString(my_display, my_window, my_gc, 2,24,"AUTOMATIC MODE",14);

   if ( status_unsubtracted1 ) XDrawString(my_display, my_window, my_gc, 2,36,"UNSUBTRACTED",12);
                         else XDrawString(my_display, my_window, my_gc, 2,36,"SUBTRACTED",10);

     if ( act_reference[1].set ){
        if ( act_reference[1].typ == 1 ) 	  sprintf(pr_buff, "ACTIVE: Global Ref");
        if ( act_reference[1].typ == 2 ) 	  sprintf(pr_buff, "ACTIVE: Local Ref");
						}
                   else {
		     sprintf(pr_buff, "ACTIVE:");
		   }

   XDrawString(my_display, my_window, my_gc, 2, 48, pr_buff, strlen(pr_buff));
}// write_ref_data_l1 

void write_ref_data_l2(void)
{

long hours=0,hours_l=0,  minutes=0, seconds=0;

int lead=2;

   my_display=l_b2_display; my_window=l_b2_window; my_gc= gcLead2;

   XAllocNamedColor(my_display, cmap,"white", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   XFillRectangle(my_display, my_window, my_gc, 1,54,130,92);

   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   if (Marker[lead].set ) {
     
   XAllocNamedColor(my_display, cmap,set_color8, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);
   XFillRectangle(my_display, my_window, my_gc, 1,55,130,12);
   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   sprintf(pr_buff, "RAW: %14s",mstimstr(data_raw[Marker[lead].raw_index].index));
   XDrawString(my_display, my_window, my_gc, 2, 66, pr_buff, strlen(pr_buff));

   sprintf(pr_buff, "HRate: %9d [bpm]",data_raw[Marker[lead].raw_index].HR);
   XDrawString(my_display, my_window, my_gc, 2, 78, pr_buff, strlen(pr_buff));

   XAllocNamedColor(my_display, cmap,set_color8, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);
   XFillRectangle(my_display, my_window, my_gc, 1,79,130,24);
   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   sprintf(pr_buff,"ST80:");
   XDrawString(my_display, my_window, my_gc, 2, 90, pr_buff, strlen(pr_buff));

   if ( reference_act[lead] == -1 && references_index[lead] == -1 ) {
   sprintf(pr_buff," %6d/%6d",mk_uv(data_raw[Marker[lead].raw_index].l2_ST80),
	   act_ref_data[lead].raw_ST80); // **
 } else if (reference_act[lead] > -1 ) {
   sprintf(pr_buff," %6d/%6d",mk_uv(data_raw[Marker[lead].raw_index].l2_ST80),
	   references[lead][reference_act[lead]].raw_ST80 ); }
 else
   { sprintf(pr_buff," %6d/%6s",mk_uv(data_raw[Marker[lead].raw_index].l2_ST80), " "); }   

   XDrawString(my_display, my_window, my_gc, 40, 90, pr_buff, strlen(pr_buff));

   sprintf(pr_buff,"STSb:");
   XDrawString(my_display, my_window, my_gc, 2, 102, pr_buff, strlen(pr_buff));

 if ( reference_act[lead] == -1 && references_index[lead] == -1) {
   sprintf(pr_buff," %6d/%6d",mk_uv(data_raw[Marker[lead].raw_index].sub_v[lead]),
	   act_ref_data[lead].ST_sub ); // **
 } else if (reference_act[lead] > -1 ) {
   sprintf(pr_buff," %6d/%6d",mk_uv(data_raw[Marker[lead].raw_index].sub_v[lead]),
                                         references[lead][reference_act[lead]].ST_sub );
 } else {
   sprintf(pr_buff," %6d/%6s",mk_uv(data_raw[Marker[lead].raw_index].sub_v[lead]), " ");
 }

   XDrawString(my_display, my_window, my_gc, 40, 102, pr_buff, strlen(pr_buff));

   XAllocNamedColor(my_display, cmap,set_color8, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);
   XFillRectangle(my_display, my_window, my_gc, 1,109,130,12);
   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   sprintf(pr_buff, "FINE: %14s",mstimstr(data_fin[Marker[lead].fine_index].index));
   XDrawString(my_display, my_window, my_gc, 2, 120, pr_buff, strlen(pr_buff));

   sprintf(pr_buff, "HRate: %9d [bpm]", data_fin[Marker[lead].fine_index].HR);
   XDrawString(my_display, my_window, my_gc, 2, 132, pr_buff, strlen(pr_buff));

   sprintf(pr_buff,"ST80:");
   XDrawString(my_display, my_window, my_gc, 2, 144, pr_buff, strlen(pr_buff));

 if ( reference_act[lead] == -1 && references_index[lead] == -1) {
   sprintf(pr_buff," %6d/%6d", mk_uv( data_fin[Marker[lead].fine_index].l2_ST80), 
	   act_ref_data[lead].fine_ST80 ); // **
 } else if (reference_act[lead] > -1 ) {
   sprintf(pr_buff," %6d/%6d", mk_uv( data_fin[Marker[lead].fine_index].l2_ST80), 
                                       references[lead][reference_act[lead]].fine_ST80 );
 } else {
   sprintf(pr_buff," %6d/%6s",mk_uv(data_fin[Marker[lead].fine_index].l2_ST80), " ");
 }
   XDrawString(my_display, my_window, my_gc, 40, 144, pr_buff, strlen(pr_buff));
  }

   XAllocNamedColor(my_display, cmap,set_color8, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   XFillRectangle(my_display, my_window, my_gc, 1,13,130,24);

   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   if ( status_manual_mode2 ) XDrawString(my_display, my_window, my_gc, 2,24,"MANUAL MODE",11);
                        else XDrawString(my_display, my_window, my_gc, 2,24,"AUTOMATIC MODE",14);

   if ( status_unsubtracted2 ) XDrawString(my_display, my_window, my_gc, 2,36,"UNSUBTRACTED",12);
                         else XDrawString(my_display, my_window, my_gc, 2,36,"SUBTRACTED",10);

     if ( act_reference[2].set ){
        if ( act_reference[2].typ == 1 ) 	  sprintf(pr_buff, "ACTIVE: Global Ref");
        if ( act_reference[2].typ == 2 ) 	  sprintf(pr_buff, "ACTIVE: Local Ref");
						}
                   else {
		     sprintf(pr_buff, "ACTIVE:");
		   }

   XDrawString(my_display, my_window, my_gc, 2, 48, pr_buff, strlen(pr_buff));
}// write_ref_data_l2 

void draw_lead0_A(void)
{
long i, begmisx, begmise, j, ischonbegx, ischonbege;
long x_0, x_1, x_x, y_0, y_1, y1_0, y1_1;
Bool act_loc;

// episodes
 Bool pl_epi=FALSE, pl_epii=FALSE;
 Bool epi_error=FALSE, epi_error_first=TRUE;
 long ep_index=0;
 int ep_status_i=0, ep_status_r=0, ep_status_o=0;

   index_0_b=TimeToIndex(diagram_time_begin_lead);
   index_0_e=TimeToIndex(diagram_time_begin_lead+time_scale_0);
   index_0=index_0_b;

   XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);

   if ( ovr0_l1 ) { 
   XAllocNamedColor(my_display, cmap,set_color5, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   i=0; 
   while (data_raw[i].index < index_0_b) i++;
   x_0=Coor_x_l0(data_raw[i].index-index_0_b); y_0=Coor_y_l0(data_raw[i].l1_ST80);
   while ( (data_raw[i].index < index_0_e ) && ( i < raw_last_index) ){
     i++;
     x_1=Coor_x_l0(data_raw[i].index-index_0_b); y_1=Coor_y_l0(data_raw[i].l1_ST80);

     if ((x_1 > x_0 ) OR PLOT_ALL ) { 
          XDrawLine(my_display, my_window, my_gc, x_0,y_0, x_1,y_1);
	  x_0=x_1; y_0=y_1;
	}

   } // end while

   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);
 }

   if ( ovr0_l2 ) { 
   XAllocNamedColor(my_display, cmap,set_color6, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   i=0; 
   while (data_raw[i].index < index_0_b) i++;
   x_0=Coor_x_l0(data_raw[i].index-index_0_b); y_0=Coor_y_l0(data_raw[i].l2_ST80);
   while ( (data_raw[i].index < index_0_e ) && ( i < raw_last_index) ){
     i++;
     x_1=Coor_x_l0(data_raw[i].index-index_0_b); y_1=Coor_y_l0(data_raw[i].l2_ST80);

     if ((x_1 > x_0 ) OR PLOT_ALL ) { 
          XDrawLine(my_display, my_window, my_gc, x_0,y_0, x_1,y_1);
	  x_0=x_1; y_0=y_1;
	}
   } // end while

   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);
 }

   if ( ovr0_app ) { 
   XAllocNamedColor(my_display, cmap,set_color3, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   i=0; 
   while (data_raw[i].index < index_0_b) i++;
   x_0=Coor_x_l0(data_raw[i].index-index_0_b); y_0=Coor_y_l0(data_raw[i].lin_v[0]);
   while ( (data_raw[i].index < index_0_e ) && ( i < raw_last_index) ){
     i++;
     x_1=Coor_x_l0(data_raw[i].index-index_0_b); y_1=Coor_y_l0(data_raw[i].lin_v[0]);

     if ((x_1 > x_0 ) OR PLOT_ALL ) { 
          XDrawLine(my_display, my_window, my_gc, x_0,y_0, x_1,y_1);
	  x_0=x_1; y_0=y_1;
	}
   } // end while

   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   }

   index_0_b=TimeToIndex(diagram_time_begin_lead);
   index_0_e=TimeToIndex(diagram_time_begin_lead+time_scale_0);
   index_0=index_0_b;

   XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);

   i=0; 
   while (data_raw[i].index < index_0_b) i++;
   raw_display_begin=i;
   fin_display_begin=i;
   x_0=Coor_x_l0(data_raw[i].index-index_0_b);  
   if (status_unsubtracted ) {y_0=Coor_y_l0(data_raw[i].l0_ST80);}
    else  {y_0=Coor_y_l0(data_raw[i].sub_v[0]);}
   if (lead0_plot_button_status.HRRaw ) { y1_0=170-data_raw[i].HR/2; 
					  XDrawString(my_display, my_window, my_gc, 2,161, "Heart Rate Raw [bpm]",20);}

   if (lead0_plot_button_status.STslRaw ) { y1_0=60+Coor_y_l0(data_raw[i].l0_ST80-data_raw[i].l0_ST20); 
                                            XDrawString(my_display, my_window, my_gc, 2,161, "ST Slope Raw [uV]",17);}

   if ((lead0_plot_button_status.Episodes ) && (references_index[0] >= 0)) {
                                            XDrawString(my_display, my_window, my_gc, 2,161, "Episodes",8);}

   begmisx = -1;  begmise = -1; ischonbegx = -1; ischonbege = -1;
   while ( (data_raw[i].index < index_0_e ) && ( i < raw_last_index) ) {

   if ((lead0_plot_button_status.Episodes ) && (references_index[0] >= 0)) { 

     while (( references[0][ep_index].raw_index <= i ) && ( ep_index <= references_index[0] )){

       if (Is_code(0,ep_index,-1,1)){
	 if ( (ep_status_i == 0 ) && (ep_status_r == 0) && (ep_status_o == 0) ) { ep_status_i=1; pl_epi=TRUE; pl_epii=TRUE;}
	 else { epi_error = TRUE; pl_epi=FALSE; pl_epii=FALSE; }     }
       if (Is_code(0,ep_index,2,1)){
	 if (( ep_status_i == 1  ) && (ep_status_r == 0) && (ep_status_o == 0)) { ep_status_i=2; pl_epi=TRUE; pl_epii=TRUE;}
	 else { if (ep_status_i == 0) begmisx = i; ischonbegx = i; epi_error = TRUE; pl_epi=FALSE;  pl_epii=FALSE;}     }
       if (Is_code(0,ep_index,-3,1)){
	 if (( ep_status_i == 2  ) && (ep_status_r == 0) && (ep_status_o == 0)) { ep_status_i=0; pl_epi=FALSE; pl_epii=FALSE;}
	 else { if (ep_status_i == 0) begmise = i; ischonbege = i; epi_error = TRUE; pl_epi=FALSE;  pl_epii=FALSE;}       }

        if (Is_code(0,ep_index,-1,7)){
	 if (( ep_status_r == 0  ) && (ep_status_i == 0) && (ep_status_o == 0)) { ep_status_r=1; pl_epi=TRUE;}
	 else { epi_error = TRUE; pl_epi=FALSE; }       }
       if (Is_code(0,ep_index,2,7)){
	 if (( ep_status_r == 1  ) && (ep_status_i == 0) && (ep_status_o == 0)) { ep_status_r=2; pl_epi=TRUE;}
	 else { if (ep_status_r == 0) begmisx = i; epi_error = TRUE; pl_epi=FALSE; }      }
       if (Is_code(0,ep_index,-3,7)){
	 if (( ep_status_r == 2  ) && (ep_status_i == 0) && (ep_status_o == 0)) { ep_status_r=0; pl_epi=FALSE;}
	 else { if (ep_status_r == 0) begmise = i; epi_error = TRUE; pl_epi=FALSE; }      }

       if (Is_code(0,ep_index,-1,11)){
	 if (( ep_status_o == 0  ) && (ep_status_r == 0) && (ep_status_i == 0)) { ep_status_o=1; pl_epi=TRUE;}
	 else { epi_error = TRUE; pl_epi=FALSE; }       }
       if (Is_code(0,ep_index,2,11)){
	 if (( ep_status_o == 1  ) && (ep_status_r == 0) && (ep_status_i == 0)) { ep_status_o=2; pl_epi=TRUE;}
	 else { if (ep_status_o == 0) begmisx = i; epi_error = TRUE; pl_epi=FALSE; }       }
       if (Is_code(0,ep_index,-3,11)){
	 if (( ep_status_o == 2  ) && (ep_status_r == 0) && (ep_status_i == 0)) { ep_status_o=0; pl_epi=FALSE;}
	 else { if (ep_status_o == 0) begmise = i; epi_error = TRUE; pl_epi=FALSE; }       }

       if ( epi_error) sprintf(message2, "Time: %14s",mstimstr(data_raw[references[0][ep_index].raw_index].index)); 
       ep_index++; 
      if ((ep_index > references_index[0] ) && ((ep_status_i != 0) || (ep_status_r != 0) || (ep_status_o != 0)) ) {
	   epi_error=TRUE;
           sprintf(message2, "Time: %14s",mstimstr(data_raw[references[0][references_index[0]].raw_index].index));       }
       if ( epi_error && epi_error_first )  {
           strcpy(message1,"Lead 0: Inconsistent episode !");
//
//           warning_message(2); 
//
           epi_error=FALSE; ep_status_i=0; ep_status_r=0; ep_status_o=0; epi_error_first=FALSE; }
     }
       if (pl_epi) {
	  XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
	  XDrawLine(my_display, my_window, my_gc, x_0,116, x_0,120);
//	  XDrawLine(my_display, my_window, my_gc, x_0,146, x_0,150);
	  XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);
	  //	  pl_epi=ep_status != 0;
		   }
//       if (pl_epii) {
//	  XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
//	  XDrawLine(my_display, my_window, my_gc, x_0,136, x_0,140);
//	  XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);
//	  //	  pl_epi=ep_status != 0;
//		   }
   } // end episodes

     i++;
     x_1=Coor_x_l0(data_raw[i].index-index_0_b);
     if (status_unsubtracted ) {y_1=Coor_y_l0(data_raw[i].l0_ST80);}
       else  {y_1=Coor_y_l0(data_raw[i].sub_v[0]);}

     if ((x_1 > x_0 ) OR PLOT_ALL ) { 
          XDrawLine(my_display, my_window, my_gc, x_0,y_0, x_1,y_1);
	  XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
	  XDrawLine(my_display, my_window, my_gc, x_0,156, x_0,160);
	  XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);

	  if (lead0_plot_button_status.HRRaw ){
	    y1_1=170-data_raw[i].HR/2;
	    XDrawLine(my_display, my_window, my_gc, x_0,y1_0, x_1,y1_1);
	    y1_0=y1_1;
	  }

	  if (lead0_plot_button_status.STslRaw ){
	    y1_1=60+Coor_y_l0(data_raw[i].l0_ST80-data_raw[i].l0_ST20);
	    XDrawLine(my_display, my_window, my_gc, x_0,y1_0, x_1,y1_1);
	    y1_0=y1_1;
	  }
	  x_0=x_1; y_0=y_1;
	}

   } // end while

	  XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
	  XDrawLine(my_display, my_window, my_gc, x_0,156, x_0,160);
	  XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);

   if (begmisx != -1 && begmise != -1) {
      j=begmise; begmisx = begmise = -1;
      x_x=Coor_x_l0(data_raw[j].index-index_0_b);  
      while ( (data_raw[j].index >= index_0_b ) && ( j >= 0) ) {
	  XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
	  XDrawLine(my_display, my_window, my_gc, x_x,116, x_x,120);
//	  XDrawLine(my_display, my_window, my_gc, x_x,146, x_x,150);
	  XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);
	  j--;
          x_x=Coor_x_l0(data_raw[j].index-index_0_b);  
      }
   }

//   if (ischonbegx != -1 && ischonbege != -1) {
//      j=ischonbegx; ischonbegx = ischonbege = -1;
//      x_x=Coor_x_l0(data_raw[j].index-index_0_b);  
//      while ( (data_raw[j].index >= index_0_b ) && ( j >= 0) ) {
//	  XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
//	  XDrawLine(my_display, my_window, my_gc, x_x,136, x_x,140);
//	  XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);
//	  j--;
//          x_x=Coor_x_l0(data_raw[j].index-index_0_b);  
//      }
//   }

   raw_display_end=i-1;
    fin_display_end=raw_display_end; 
     while ( (data_fin[fin_display_end].index < index_0_e) && ( fin_display_end < fin_last_index) )     fin_display_end++; 
    fin_display_end=fin_display_end-1; 

   i=0;  
   while (data_fin[i].index < index_0_b) i++;
   fin_display_begin=i;
if  (lead0_plot_button_status.HRate OR lead0_plot_button_status.STFine OR lead0_plot_button_status.STslFine OR lead0_plot_button_status.ISOJ ){ 

   x_0=Coor_x_l0(data_fin[i].index-index_0_b);
   if (lead0_plot_button_status.HRate ) { y_0=170-data_fin[i].HR/2; XDrawString(my_display, my_window, my_gc, 2,161, "Heart Rate [bpm]",16);}
   if (lead0_plot_button_status.STFine ) { y_0=60+Coor_y_l0(data_fin[i].l0_ST80); 
					   XDrawString(my_display, my_window, my_gc, 2,161, "ST Fine [uV]",12);}
   if (lead0_plot_button_status.STslFine ) { y_0=60+Coor_y_l0(data_fin[i].l0_ST80-data_fin[i].l0_ST20); 
					     XDrawString(my_display, my_window, my_gc, 2,161, "ST Slope Fine [uV]",18);}

    if (lead0_plot_button_status.ISOJ ) { y_0=(long)(160-1000.0*(data_fin[i].nISO +data_fin[i].nJ)/FSAMP/3); 
					  XDrawString(my_display, my_window, my_gc, 2,161, "ISO - J [ms]",12);}
  while ( (data_fin[i].index < index_0_e) && ( i < fin_last_index) ) {
     i++;
     x_1=Coor_x_l0(data_fin[i].index-index_0_b); 
     if (lead0_plot_button_status.HRate ) y_1=170-data_fin[i].HR/2;
     if (lead0_plot_button_status.STFine ) y_1=60+Coor_y_l0(data_fin[i].l0_ST80);
     if (lead0_plot_button_status.STslFine ) y_1=60+Coor_y_l0(data_fin[i].l0_ST80-data_fin[i].l0_ST20);
     if (lead0_plot_button_status.ISOJ )  y_1=(long)(160-1000.0*(data_fin[i].nISO +data_fin[i].nJ)/FSAMP/3); 
     if ((x_1 > x_0 ) OR PLOT_ALL ) { 
          XDrawLine(my_display, my_window, my_gc, x_0,y_0, x_1,y_1);
	  XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
	  XDrawLine(my_display, my_window, my_gc, x_0,160, x_0,163);
	  XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);

	  x_0=x_1; y_0=y_1;
	}
       } // end while
	  XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
	  XDrawLine(my_display, my_window, my_gc, x_0,160, x_0,163);
	  XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);
    fin_display_end=i-1; 
     } // if hrate

   if ( references_index[0] >= 0 ){
     for (i=0; i <= references_index[0]; i++){
       if ( (data_raw[references[0][i].raw_index].index >= index_0_b) && (data_raw[references[0][i].raw_index].index <= index_0_e) ) {
	 act_loc=FALSE;
	 if ( Is_code(0,i,0,0) ){
	    act_loc= act_reference[0].set && ( act_reference[0].typ == 2 ) && (act_reference[0].index == i);

            if (( i == reference_act[0] ) OR act_loc ) {
	      XAllocNamedColor(my_display, cmap,set_color1, &col, & unused);
	      XSetForeground(my_display, my_gc, col.pixel);
	    }
	    x_0=Coor_x_l0(data_raw[references[0][i].raw_index].index-index_0_b);

	    XDrawLine(my_display, my_window, my_gc, x_0,10, x_0,160);
	    XDrawString(my_display, my_window, my_gc, x_0 - 10 ,10, "LR",2);
            if (( i == reference_act[0] ) OR act_loc ) {
	      XAllocNamedColor(my_display, cmap,"black", &col, & unused);
	      XSetForeground(my_display, my_gc, col.pixel);
	    }
	 } 
	 else  // other ref
	 {
            if ( i == reference_act[0] ) {
	      XAllocNamedColor(my_display, cmap,set_color2, &col, & unused);
	      XSetForeground(my_display, my_gc, col.pixel);
	    }
	    x_0=Coor_x_l0(data_raw[references[0][i].raw_index].index-index_0_b);

	    XDrawLine(my_display, my_window, my_gc, x_0,10, x_0,160);
	    get_display_code(0,i);
	    XDrawString(my_display, my_window, my_gc, x_0 - 10 ,10, ref_code,2);
            if ( i == reference_act[0] ) {
	      XAllocNamedColor(my_display, cmap,"black", &col, & unused);
	      XSetForeground(my_display, my_gc, col.pixel);
	    }
	 }
       }
     } // end for
   } // plot ref.
   
   if ( loc_interval_b[0].set  && (data_raw[loc_interval_b[0].raw_index].index >= index_0_b) && (data_raw[loc_interval_b[0].raw_index].index <= index_0_e) ) {
   x_0=Coor_x_l0(data_raw[loc_interval_b[0].raw_index].index-index_0_b);
   XAllocNamedColor(my_display, cmap,set_color3, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   XDrawLine(my_display, my_window, my_gc, x_0,10, x_0,160);
   XDrawString(my_display, my_window, my_gc, x_0 - 9 ,20, "B",1);

  }

   if ( loc_interval_e[0].set  && (data_raw[loc_interval_e[0].raw_index].index >= index_0_b) && (data_raw[loc_interval_e[0].raw_index].index <= index_0_e) ) {
   x_0=Coor_x_l0(data_raw[loc_interval_e[0].raw_index].index-index_0_b);
   XAllocNamedColor(my_display, cmap,set_color3, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   XDrawLine(my_display, my_window, my_gc, x_0,10, x_0,160);
   XDrawString(my_display, my_window, my_gc, x_0 - 9 ,20, "E",1);

  }

   if ( global_set  && (data_raw[global_ref[0].raw_index].index >= index_0_b) && (data_raw[global_ref[0].raw_index].index <= index_0_e) ) {
   XAllocNamedColor(my_display, cmap,set_color1, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   x_0=Coor_x_l0(data_raw[global_ref[0].raw_index].index-index_0_b);

   XDrawLine(my_display, my_window, my_gc, x_0,10, x_0,160);
   XDrawString(my_display, my_window, my_gc, x_0 - 10 ,10, "GR",2);

  }

  if ( Marker[0].set  && (data_raw[Marker[0].raw_index].index >= index_0_b) && (data_raw[Marker[0].raw_index].index <= index_0_e) ) {
   XAllocNamedColor(my_display, cmap,set_color3, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   x_0=Coor_x_l0(data_raw[Marker[0].raw_index].index-index_0_b);

   XDrawLine(my_display, my_window, my_gc, x_0,10, x_0,160);
   XDrawString(my_display, my_window, my_gc, x_0 - 11 ,20, "M",1);

   x_1=Coor_x_l0(data_fin[Marker[0].fine_index].index-index_0_b);
   if ( x_1 == x_0) x_1++;
   XDrawLine(my_display, my_window, my_gc, x_1,80, x_1,160);

  } // end marker

   XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);
    

} // end draw_lead0_A(void)

void draw_lead1_A(void)
{
long i, begmisx, begmise, j, ischonbegx, ischonbege;
long x_0, x_1, x_x, y_0, y_1, y1_0,y1_1;
Bool act_loc;

 Bool pl_epi=FALSE, pl_epii=FALSE;
 Bool epi_error=FALSE, epi_error_first=TRUE;
 long ep_index=0;
 int ep_status_i=0, ep_status_r=0, ep_status_o=0;

   index_0_b=TimeToIndex(diagram_time_begin_lead);
   index_0_e=TimeToIndex(diagram_time_begin_lead+time_scale_0);
   index_0=index_0_b;

   XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);

   if ( ovr1_l0 ) { 
     XAllocNamedColor(my_display, cmap,set_color4, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   i=0; 
   while (data_raw[i].index < index_0_b) i++;
   x_0=Coor_x_l0(data_raw[i].index-index_0_b); y_0=Coor_y_l1(data_raw[i].l0_ST80);
   while ( (data_raw[i].index < index_0_e ) && ( i < raw_last_index) ){
     i++;
     x_1=Coor_x_l0(data_raw[i].index-index_0_b); y_1=Coor_y_l1(data_raw[i].l0_ST80);

     if ((x_1 > x_0 ) OR PLOT_ALL ) { 
          XDrawLine(my_display, my_window, my_gc, x_0,y_0, x_1,y_1);
	  x_0=x_1; y_0=y_1;
	}

   } // end while

   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);
 }

   if ( ovr1_l2 ) { 
   XAllocNamedColor(my_display, cmap,set_color6, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   i=0; 
   while (data_raw[i].index < index_0_b) i++;
   x_0=Coor_x_l0(data_raw[i].index-index_0_b); y_0=Coor_y_l1(data_raw[i].l2_ST80);
   while ( (data_raw[i].index < index_0_e ) && ( i < raw_last_index) ){
     i++;
     x_1=Coor_x_l0(data_raw[i].index-index_0_b); y_1=Coor_y_l1(data_raw[i].l2_ST80);

     if ((x_1 > x_0 ) OR PLOT_ALL ) { 
          XDrawLine(my_display, my_window, my_gc, x_0,y_0, x_1,y_1);
	  x_0=x_1; y_0=y_1;
	}

   } // end while

   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);
 }

   if ( ovr1_app ) { 
   XAllocNamedColor(my_display, cmap,set_color3, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   i=0; 
   while (data_raw[i].index < index_0_b) i++;
   x_0=Coor_x_l0(data_raw[i].index-index_0_b); y_0=Coor_y_l1(data_raw[i].lin_v[1]);
   while ( (data_raw[i].index < index_0_e ) && ( i < raw_last_index) ){
     i++;
     x_1=Coor_x_l0(data_raw[i].index-index_0_b); y_1=Coor_y_l1(data_raw[i].lin_v[1]);

     if ((x_1 > x_0 ) OR PLOT_ALL ) { 
          XDrawLine(my_display, my_window, my_gc, x_0,y_0, x_1,y_1);
	  x_0=x_1; y_0=y_1;
	}

   } // end while

   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);
 }
   XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);

   i=0; 
   while (data_raw[i].index < index_0_b) i++;
   raw_display_begin=i;
   x_0=Coor_x_l0(data_raw[i].index-index_0_b);  
   if (status_unsubtracted1 ) {y_0=Coor_y_l1(data_raw[i].l1_ST80);}
    else  {y_0=Coor_y_l1(data_raw[i].sub_v[1]);}
   if (lead1_plot_button_status.HRRaw ) { y1_0=170-data_raw[i].HR/2; 
					  XDrawString(my_display, my_window, my_gc, 2,161, "Heart Rate Raw [bpm]",20);}

   if (lead1_plot_button_status.STslRaw ) { y1_0=60+Coor_y_l1(data_raw[i].l1_ST80-data_raw[i].l1_ST20); 
                                            XDrawString(my_display, my_window, my_gc, 2,161, "ST Slope Raw [uV]",17);}

   if ((lead1_plot_button_status.Episodes ) && (references_index[1] >= 0)) {
                                         XDrawString(my_display, my_window, my_gc, 2,161, "Episodes",8);}

   begmisx = -1; begmise = -1; ischonbegx = -1; ischonbege = -1;
   while ( (data_raw[i].index < index_0_e ) && ( i < raw_last_index) ){

    if ((lead1_plot_button_status.Episodes ) && (references_index[1] >= 0)) { 

     while (( references[1][ep_index].raw_index <= i ) && ( ep_index <= references_index[1] )){

       if (Is_code(1,ep_index,-1,1)){
	 if ( (ep_status_i == 0 ) && (ep_status_r == 0) && (ep_status_o == 0) ) { ep_status_i=1; pl_epi=TRUE; pl_epii=TRUE;}
	 else { epi_error = TRUE; pl_epi=FALSE;  pl_epii=FALSE; }       }
       if (Is_code(1,ep_index,2,1)){
	 if (( ep_status_i == 1  ) && (ep_status_r == 0) && (ep_status_o == 0)) { ep_status_i=2; pl_epi=TRUE; pl_epii=TRUE;}
	 else { if (ep_status_i == 0) begmisx = i; ischonbegx = i; epi_error = TRUE; pl_epi=FALSE;  pl_epii=FALSE;}       }
       if (Is_code(1,ep_index,-3,1)){
	 if (( ep_status_i == 2  ) && (ep_status_r == 0) && (ep_status_o == 0)) { ep_status_i=0; pl_epi=FALSE; pl_epii=FALSE;}
	 else { if (ep_status_i == 0) begmise = i; ischonbege = i; epi_error = TRUE; pl_epi=FALSE;  pl_epii=FALSE;}       }

        if (Is_code(1,ep_index,-1,7)){
	 if (( ep_status_r == 0  ) && (ep_status_i == 0) && (ep_status_o == 0)) { ep_status_r=1; pl_epi=TRUE;}
	 else { epi_error = TRUE; pl_epi=FALSE; }       }
       if (Is_code(1,ep_index,2,7)){
	 if (( ep_status_r == 1  ) && (ep_status_i == 0) && (ep_status_o == 0)) { ep_status_r=2; pl_epi=TRUE;}
	 else { if (ep_status_r == 0) begmisx = i; epi_error = TRUE; pl_epi=FALSE; }       }
       if (Is_code(1,ep_index,-3,7)){
	 if (( ep_status_r == 2  ) && (ep_status_i == 0) && (ep_status_o == 0)) { ep_status_r=0; pl_epi=FALSE;}
	 else { if (ep_status_r == 0) begmise = i; epi_error = TRUE; pl_epi=FALSE; }       }

      if (Is_code(1,ep_index,-1,11)){
	 if (( ep_status_o == 0  ) && (ep_status_r == 0) && (ep_status_i == 0)) { ep_status_o=1; pl_epi=TRUE;}
	 else { epi_error = TRUE; pl_epi=FALSE; }       }
       if (Is_code(1,ep_index,2,11)){
	 if (( ep_status_o == 1  ) && (ep_status_r == 0) && (ep_status_i == 0)) { ep_status_o=2; pl_epi=TRUE;}
	 else { if (ep_status_o == 0) begmisx = i; epi_error = TRUE; pl_epi=FALSE; }       }
       if (Is_code(1,ep_index,-3,11)){
	 if (( ep_status_o == 2  ) && (ep_status_r == 0) && (ep_status_i == 0)) { ep_status_o=0; pl_epi=FALSE;}
	 else { if (ep_status_o == 0) begmise = i; epi_error = TRUE; pl_epi=FALSE; }       }

       if ( epi_error) sprintf(message2, "Time: %14s",mstimstr(data_raw[references[1][ep_index].raw_index].index)); 
       ep_index++; 

      if ((ep_index > references_index[1] ) && ((ep_status_i != 0) || (ep_status_r != 0) || (ep_status_o != 0)) ) {
	   epi_error=TRUE;
           sprintf(message2, "Time: %14s",mstimstr(data_raw[references[1][references_index[1]].raw_index].index)); 

       }

       if ( epi_error && epi_error_first )  {

           strcpy(message1,"Lead 1: Inconsistent episode !");
//
//           warning_message(2);
//
           epi_error=FALSE; ep_status_i=0; ep_status_r=0; ep_status_o=0; epi_error_first=FALSE; }
     }

       if (pl_epi) {
	  XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
	  XDrawLine(my_display, my_window, my_gc, x_0,116, x_0,120);
//	  XDrawLine(my_display, my_window, my_gc, x_0,146, x_0,150);
	  XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);
	  //	  pl_epi=ep_status != 0;
		   }
//       if (pl_epii) {
//	  XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
//	  XDrawLine(my_display, my_window, my_gc, x_0,136, x_0,140);
//	  XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);
//	  //	  pl_epi=ep_status != 0;
//		   }
   } // end episodes

     i++;
     x_1=Coor_x_l0(data_raw[i].index-index_0_b);
     if (status_unsubtracted1) {y_1=Coor_y_l1(data_raw[i].l1_ST80);}
       else  {y_1=Coor_y_l1(data_raw[i].sub_v[1]);}

     if ((x_1 > x_0 ) OR PLOT_ALL ) { 
          XDrawLine(my_display, my_window, my_gc, x_0,y_0, x_1,y_1);
	  XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
	  XDrawLine(my_display, my_window, my_gc, x_0,156, x_0,160);
	  XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);

	  if (lead1_plot_button_status.HRRaw ){
	    y1_1=170-data_raw[i].HR/2;
	    XDrawLine(my_display, my_window, my_gc, x_0,y1_0, x_1,y1_1);
	    y1_0=y1_1;
	  }

	  if (lead1_plot_button_status.STslRaw ){
	    y1_1=60+Coor_y_l1(data_raw[i].l1_ST80-data_raw[i].l1_ST20);
	    XDrawLine(my_display, my_window, my_gc, x_0,y1_0, x_1,y1_1);
	    y1_0=y1_1;
	  }
	  x_0=x_1; y_0=y_1;
	}

   } // end while

	  XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
	  XDrawLine(my_display, my_window, my_gc, x_0,156, x_0,160);
	  XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);

   if (begmisx != -1 && begmise != -1) {
      j=begmise; begmisx = begmise = -1;
      x_x=Coor_x_l0(data_raw[j].index-index_0_b);  
      while ( (data_raw[j].index >= index_0_b ) && ( j >= 0) ) {
	  XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
	  XDrawLine(my_display, my_window, my_gc, x_x,116, x_x,120);
//	  XDrawLine(my_display, my_window, my_gc, x_x,146, x_x,150);
	  XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);
	  j--;
          x_x=Coor_x_l0(data_raw[j].index-index_0_b);  
      }
   }

//   if (ischonbegx != -1 && ischonbege != -1) {
//      j=ischonbegx; ischonbegx = ischonbege = -1;
//      x_x=Coor_x_l0(data_raw[j].index-index_0_b);  
//      while ( (data_raw[j].index >= index_0_b ) && ( j >= 0) ) {
//	  XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
//	  XDrawLine(my_display, my_window, my_gc, x_x,136, x_x,140);
//	  XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);
//	  j--;
//          x_x=Coor_x_l0(data_raw[j].index-index_0_b);  
//      }
//   }

   raw_display_end=i-1;

    fin_display_end=raw_display_end; 
     while ( (data_fin[fin_display_end].index < index_0_e) && ( fin_display_end < fin_last_index) )     fin_display_end++; 
    fin_display_end=fin_display_end-1; 

   i=0;  
   while (data_fin[i].index < index_0_b) i++;
   fin_display_begin=i;

   if  (lead1_plot_button_status.HRate OR lead1_plot_button_status.STFine OR lead1_plot_button_status.STslFine OR lead1_plot_button_status.ISOJ ){ 

   x_0=Coor_x_l0(data_fin[i].index-index_0_b);
   if (lead1_plot_button_status.HRate ) { y_0=170-data_fin[i].HR/2; XDrawString(my_display, my_window, my_gc, 2,161, "Heart Rate [bpm]",16);}
   if (lead1_plot_button_status.STFine ) { y_0=60+Coor_y_l1(data_fin[i].l1_ST80); 
					   XDrawString(my_display, my_window, my_gc, 2,161, "ST Fine [uV]",12);}
   if (lead1_plot_button_status.STslFine ) { y_0=60+Coor_y_l1(data_fin[i].l1_ST80-data_fin[i].l1_ST20); 
					     XDrawString(my_display, my_window, my_gc, 2,161, "ST Slope Fine [uV]",18);}

    if (lead1_plot_button_status.ISOJ ) { y_0=(long)(160-1000.0*(data_fin[i].nISO +data_fin[i].nJ)/FSAMP/3); 
					  XDrawString(my_display, my_window, my_gc, 2,161, "ISO - J [ms]",12);}
  while ( (data_fin[i].index < index_0_e) && ( i < fin_last_index) ) {
     i++;
     x_1=Coor_x_l0(data_fin[i].index-index_0_b); 
     if (lead1_plot_button_status.HRate ) y_1=170-data_fin[i].HR/2;
     if (lead1_plot_button_status.STFine ) y_1=60+Coor_y_l1(data_fin[i].l1_ST80);
     if (lead1_plot_button_status.STslFine ) y_1=60+Coor_y_l1(data_fin[i].l1_ST80-data_fin[i].l1_ST20);
     if (lead1_plot_button_status.ISOJ )  y_1=(long)(160-1000.0*(data_fin[i].nISO +data_fin[i].nJ)/FSAMP/3); 
     if ((x_1 > x_0 ) OR PLOT_ALL ) { 
          XDrawLine(my_display, my_window, my_gc, x_0,y_0, x_1,y_1);
	  XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
	  XDrawLine(my_display, my_window, my_gc, x_0,160, x_0,163);
	  XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);

	  x_0=x_1; y_0=y_1;
	}

        } // end while
	  XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
	  XDrawLine(my_display, my_window, my_gc, x_0,160, x_0,163);
	  XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);
    fin_display_end=i-1; 
     } // if hrate

   if ( references_index[1] >= 0 ){
     for (i=0; i <= references_index[1]; i++){
       if ( (data_raw[references[1][i].raw_index].index >= index_0_b) && (data_raw[references[1][i].raw_index].index <= index_0_e) ) {
	 act_loc=FALSE;
	 if ( Is_code(1,i,0,0) ){
	    act_loc= act_reference[1].set && ( act_reference[1].typ == 2 ) && (act_reference[1].index == i);

            if (( i == reference_act[1] ) OR act_loc ) {
	      XAllocNamedColor(my_display, cmap,set_color1, &col, & unused);
	      XSetForeground(my_display, my_gc, col.pixel);
	    }
	    x_0=Coor_x_l0(data_raw[references[1][i].raw_index].index-index_0_b);

	    XDrawLine(my_display, my_window, my_gc, x_0,10, x_0,160);
	    XDrawString(my_display, my_window, my_gc, x_0 - 10 ,10, "LR",2);
            if (( i == reference_act[1] ) OR act_loc ) {
	      XAllocNamedColor(my_display, cmap,"black", &col, & unused);
	      XSetForeground(my_display, my_gc, col.pixel);
	    }
	 } 
	 else  // other ref
	 {
            if ( i == reference_act[1] ) {
	      XAllocNamedColor(my_display, cmap,set_color2, &col, & unused);
	      XSetForeground(my_display, my_gc, col.pixel);
	    }
	    x_0=Coor_x_l0(data_raw[references[1][i].raw_index].index-index_0_b);

	    XDrawLine(my_display, my_window, my_gc, x_0,10, x_0,160);
	    get_display_code(1,i);
	    XDrawString(my_display, my_window, my_gc, x_0 - 10 ,10, ref_code,2);
            if ( i == reference_act[1] ) {
	      XAllocNamedColor(my_display, cmap,"black", &col, & unused);
	      XSetForeground(my_display, my_gc, col.pixel);
	    }
	 }
       }
     } // end for
   } // plot ref.
   

   if ( loc_interval_b[1].set  && (data_raw[loc_interval_b[1].raw_index].index >= index_0_b) && (data_raw[loc_interval_b[1].raw_index].index <= index_0_e) ) {
   x_0=Coor_x_l0(data_raw[loc_interval_b[1].raw_index].index-index_0_b);
   XAllocNamedColor(my_display, cmap,set_color3, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   XDrawLine(my_display, my_window, my_gc, x_0,10, x_0,160);
   XDrawString(my_display, my_window, my_gc, x_0 - 9 ,20, "B",1);

  }

   if ( loc_interval_e[1].set  && (data_raw[loc_interval_e[1].raw_index].index >= index_0_b) && (data_raw[loc_interval_e[1].raw_index].index <= index_0_e) ) {
   x_0=Coor_x_l0(data_raw[loc_interval_e[1].raw_index].index-index_0_b);
   XAllocNamedColor(my_display, cmap,set_color3, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   XDrawLine(my_display, my_window, my_gc, x_0,10, x_0,160);
   XDrawString(my_display, my_window, my_gc, x_0 - 9 ,20, "E",1);

  }

   if ( global_set  && (data_raw[global_ref[1].raw_index].index >= index_0_b) && (data_raw[global_ref[1].raw_index].index <= index_0_e) ) {
   XAllocNamedColor(my_display, cmap,set_color1, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   x_0=Coor_x_l0(data_raw[global_ref[1].raw_index].index-index_0_b);

   XDrawLine(my_display, my_window, my_gc, x_0,10, x_0,160);
   XDrawString(my_display, my_window, my_gc, x_0 - 10 ,10, "GR",2);

  }

  if ( Marker[1].set  && (data_raw[Marker[1].raw_index].index >= index_0_b) && (data_raw[Marker[1].raw_index].index <= index_0_e) ) {
   XAllocNamedColor(my_display, cmap,set_color3, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   x_0=Coor_x_l0(data_raw[Marker[1].raw_index].index-index_0_b);

   XDrawLine(my_display, my_window, my_gc, x_0,10, x_0,160);
   XDrawString(my_display, my_window, my_gc, x_0 - 11 ,20, "M",1);

   x_1=Coor_x_l0(data_fin[Marker[1].fine_index].index-index_0_b);
   if ( x_1 == x_0) x_1++;
   XDrawLine(my_display, my_window, my_gc, x_1,80, x_1,160);

  } // end marker

   XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

} // end draw_lead1_A(void)

void draw_lead2_A(void)
{
long i, begmisx, begmise, j, ischonbegx, ischonbege;
long x_0, x_1, x_x, y_0, y_1, y1_0,y1_1;
Bool act_loc;

 Bool pl_epi=FALSE, pl_epii=FALSE;
 Bool epi_error=FALSE, epi_error_first=TRUE;
 long ep_index=0;
 int ep_status_i=0, ep_status_r=0, ep_status_o=0;

   index_0_b=TimeToIndex(diagram_time_begin_lead);
   index_0_e=TimeToIndex(diagram_time_begin_lead+time_scale_0);
   index_0=index_0_b;

   XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);

   if ( ovr2_l0 ) { 
     XAllocNamedColor(my_display, cmap,set_color4, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   i=0; 
   while (data_raw[i].index < index_0_b) i++;
   x_0=Coor_x_l0(data_raw[i].index-index_0_b); y_0=Coor_y_l2(data_raw[i].l0_ST80);
   while ( (data_raw[i].index < index_0_e ) && ( i < raw_last_index) ){
     i++;
     x_1=Coor_x_l0(data_raw[i].index-index_0_b); y_1=Coor_y_l2(data_raw[i].l0_ST80);

     if ((x_1 > x_0 ) OR PLOT_ALL ) { 
          XDrawLine(my_display, my_window, my_gc, x_0,y_0, x_1,y_1);
	  x_0=x_1; y_0=y_1;
	}

   } // end while

   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

 }
   if ( ovr2_l1 ) { 
     XAllocNamedColor(my_display, cmap,set_color5, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   i=0; 
   while (data_raw[i].index < index_0_b) i++;
   x_0=Coor_x_l0(data_raw[i].index-index_0_b); y_0=Coor_y_l2(data_raw[i].l1_ST80);
   while ( (data_raw[i].index < index_0_e ) && ( i < raw_last_index) ){
     i++;
     x_1=Coor_x_l0(data_raw[i].index-index_0_b); y_1=Coor_y_l2(data_raw[i].l1_ST80);

     if ((x_1 > x_0 ) OR PLOT_ALL ) { 
          XDrawLine(my_display, my_window, my_gc, x_0,y_0, x_1,y_1);
	  x_0=x_1; y_0=y_1;
	}

   } // end while

   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);
 }

   if ( ovr2_app ) { 
   XAllocNamedColor(my_display, cmap,set_color3, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   i=0; 
   while (data_raw[i].index < index_0_b) i++;
   x_0=Coor_x_l0(data_raw[i].index-index_0_b); y_0=Coor_y_l2(data_raw[i].lin_v[2]);
   while ( (data_raw[i].index < index_0_e ) && ( i < raw_last_index) ){
     i++;
     x_1=Coor_x_l0(data_raw[i].index-index_0_b); y_1=Coor_y_l2(data_raw[i].lin_v[2]);

     if ((x_1 > x_0 ) OR PLOT_ALL ) { 
          XDrawLine(my_display, my_window, my_gc, x_0,y_0, x_1,y_1);
	  x_0=x_1; y_0=y_1;
	}

   } // end while

   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);
 }

   XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);

   i=0; 
   while (data_raw[i].index < index_0_b) i++;
   raw_display_begin=i;
   x_0=Coor_x_l0(data_raw[i].index-index_0_b);  
   if (status_unsubtracted2 ) {y_0=Coor_y_l2(data_raw[i].l2_ST80);}
    else  {y_0=Coor_y_l2(data_raw[i].sub_v[2]);}
   if (lead2_plot_button_status.HRRaw ) { y1_0=170-data_raw[i].HR/2; 
					  XDrawString(my_display, my_window, my_gc, 2,161, "Heart Rate Raw [bpm]",20);}

   if (lead2_plot_button_status.STslRaw ) { y1_0=60+Coor_y_l2(data_raw[i].l2_ST80-data_raw[i].l2_ST20); 
                                            XDrawString(my_display, my_window, my_gc, 2,161, "ST Slope Raw [uV]",17);}

   if ((lead2_plot_button_status.Episodes ) && (references_index[2] >= 0)) {
                                         XDrawString(my_display, my_window, my_gc, 2,161, "Episodes",8);}

   begmisx = -1; begmise = -1; ischonbegx = -1; ischonbege = -1;
   while ( (data_raw[i].index < index_0_e ) && ( i < raw_last_index) ){

   if ((lead2_plot_button_status.Episodes ) && (references_index[2] >= 0)) { 

     while (( references[2][ep_index].raw_index <= i ) && ( ep_index <= references_index[2] )){

       if (Is_code(2,ep_index,-1,1)){
	 if ( (ep_status_i == 0 ) && (ep_status_r == 0) && (ep_status_o == 0) ) { ep_status_i=1; pl_epi=TRUE; pl_epii=TRUE;}
	 else { epi_error = TRUE; pl_epi=FALSE; pl_epii=FALSE;}       }
       if (Is_code(2,ep_index,2,1)){
	 if (( ep_status_i == 1  ) && (ep_status_r == 0) && (ep_status_o == 0)) { ep_status_i=2; pl_epi=TRUE; pl_epii=TRUE;}
	 else { if (ep_status_i == 0) begmisx = i; ischonbegx = i; epi_error = TRUE; pl_epi=FALSE; pl_epii=FALSE;}       }
       if (Is_code(2,ep_index,-3,1)){
	 if (( ep_status_i == 2  ) && (ep_status_r == 0) && (ep_status_o == 0)) { ep_status_i=0; pl_epi=FALSE; pl_epii=FALSE;}
	 else { if (ep_status_i == 0) begmise = i; ischonbege = i; epi_error = TRUE; pl_epi=FALSE; pl_epii=FALSE;}       }

        if (Is_code(2,ep_index,-1,7)){
	 if (( ep_status_r == 0  ) && (ep_status_i == 0) && (ep_status_o == 0)) { ep_status_r=1; pl_epi=TRUE;}
	 else { epi_error = TRUE; pl_epi=FALSE; }       }
       if (Is_code(2,ep_index,2,7)){
	 if (( ep_status_r == 1  ) && (ep_status_i == 0) && (ep_status_o == 0)) { ep_status_r=2; pl_epi=TRUE;}
	 else { if (ep_status_r == 0) begmisx = i; epi_error = TRUE; pl_epi=FALSE; }       }
       if (Is_code(2,ep_index,-3,7)){
	 if (( ep_status_r == 2  ) && (ep_status_i == 0) && (ep_status_o == 0)) { ep_status_r=0; pl_epi=FALSE;}
	 else { if (ep_status_r == 0) begmise = i; epi_error = TRUE; pl_epi=FALSE; }       }

      if (Is_code(2,ep_index,-1,11)){
	 if (( ep_status_o == 0  ) && (ep_status_r == 0) && (ep_status_i == 0)) { ep_status_o=1; pl_epi=TRUE;}
	 else { epi_error = TRUE; pl_epi=FALSE; }       }
       if (Is_code(2,ep_index,2,11)){
	 if (( ep_status_o == 1  ) && (ep_status_r == 0) && (ep_status_i == 0)) { ep_status_o=2; pl_epi=TRUE;}
	 else { if (ep_status_o == 0) begmisx = i; epi_error = TRUE; pl_epi=FALSE; }       }
       if (Is_code(2,ep_index,-3,11)){
	 if (( ep_status_o == 2  ) && (ep_status_r == 0) && (ep_status_i == 0)) { ep_status_o=0; pl_epi=FALSE;}
	 else { if (ep_status_o == 0) begmise = i; epi_error = TRUE; pl_epi=FALSE; }       }

       if ( epi_error) sprintf(message2, "Time: %14s",mstimstr(data_raw[references[2][ep_index].raw_index].index)); 
       ep_index++; 

      if ((ep_index > references_index[2] ) && ((ep_status_i != 0) || (ep_status_r != 0) || (ep_status_o != 0)) ) {
	   epi_error=TRUE;
           sprintf(message2, "Time: %14s",mstimstr(data_raw[references[2][references_index[2]].raw_index].index)); 

       }

       if ( epi_error && epi_error_first )  {

           strcpy(message1,"Lead 2: Inconsistent episode !");
//
//           warning_message(2);
//
           epi_error=FALSE; ep_status_i=0; ep_status_r=0; ep_status_o=0; epi_error_first=FALSE; }
     }

       if (pl_epi) {
	  XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
	  XDrawLine(my_display, my_window, my_gc, x_0,116, x_0,120);
//	  XDrawLine(my_display, my_window, my_gc, x_0,146, x_0,150);
	  XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);
		   }
//       if (pl_epii) {
//	  XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
//	  XDrawLine(my_display, my_window, my_gc, x_0,136, x_0,140);
//	  XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);
//	  //	  pl_epi=ep_status != 0;
//		   }
   } // end episodes

     i++;
     x_1=Coor_x_l0(data_raw[i].index-index_0_b);
     if (status_unsubtracted2 ) {y_1=Coor_y_l2(data_raw[i].l2_ST80);}
       else  {y_1=Coor_y_l2(data_raw[i].sub_v[2]);}

     if ((x_1 > x_0 ) OR PLOT_ALL ) { 
          XDrawLine(my_display, my_window, my_gc, x_0,y_0, x_1,y_1);
	  XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
	  XDrawLine(my_display, my_window, my_gc, x_0,156, x_0,160);
	  XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);

	  if (lead2_plot_button_status.HRRaw ){
	    y1_1=170-data_raw[i].HR/2;
	    XDrawLine(my_display, my_window, my_gc, x_0,y1_0, x_1,y1_1);
	    y1_0=y1_1;
	  }
   
	  if (lead2_plot_button_status.STslRaw ){
	    y1_1=60+Coor_y_l2(data_raw[i].l2_ST80-data_raw[i].l2_ST20);
	    XDrawLine(my_display, my_window, my_gc, x_0,y1_0, x_1,y1_1);
	    y1_0=y1_1;
	  }
	  x_0=x_1; y_0=y_1;
	}

   } // end while

	  XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
	  XDrawLine(my_display, my_window, my_gc, x_0,156, x_0,160);
	  XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);

   if (begmisx != -1 && begmise != -1) {
      j=begmise; begmisx = begmise = -1;
      x_x=Coor_x_l0(data_raw[j].index-index_0_b);  
      while ( (data_raw[j].index >= index_0_b ) && ( j >= 0) ) {
	  XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
	  XDrawLine(my_display, my_window, my_gc, x_x,116, x_x,120);
//	  XDrawLine(my_display, my_window, my_gc, x_x,146, x_x,150);
	  XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);
	  j--;
          x_x=Coor_x_l0(data_raw[j].index-index_0_b);  
      }
   }

//   if (ischonbegx != -1 && ischonbege != -1) {
//      j=ischonbegx; ischonbegx = ischonbege = -1;
//      x_x=Coor_x_l0(data_raw[j].index-index_0_b);  
//      while ( (data_raw[j].index >= index_0_b ) && ( j >= 0) ) {
//	  XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
//	  XDrawLine(my_display, my_window, my_gc, x_x,136, x_x,140);
//	  XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);
//	  j--;
//          x_x=Coor_x_l0(data_raw[j].index-index_0_b);  
//      }
//   }

   raw_display_end=i-1;

    fin_display_end=raw_display_end; 
    while ( (data_fin[fin_display_end].index < index_0_e) && ( fin_display_end < fin_last_index) )     fin_display_end++; 
    fin_display_end=fin_display_end-1; 

   i=0;  
   while (data_fin[i].index < index_0_b) i++;
   fin_display_begin=i;

   if  (lead2_plot_button_status.HRate OR lead2_plot_button_status.STFine OR lead2_plot_button_status.STslFine OR lead2_plot_button_status.ISOJ ){ 

   x_0=Coor_x_l0(data_fin[i].index-index_0_b);
   if (lead2_plot_button_status.HRate ) { y_0=170-data_fin[i].HR/2; XDrawString(my_display, my_window, my_gc, 2,161, "Heart Rate [bpm]",16);}
   if (lead2_plot_button_status.STFine ) { y_0=60+Coor_y_l2(data_fin[i].l2_ST80); 
					   XDrawString(my_display, my_window, my_gc, 2,161, "ST Fine [uV]",12);}
   if (lead2_plot_button_status.STslFine ) { y_0=60+Coor_y_l2(data_fin[i].l2_ST80-data_fin[i].l2_ST20); 
					     XDrawString(my_display, my_window, my_gc, 2,161, "ST Slope Fine [uV]",18);}

    if (lead2_plot_button_status.ISOJ ) { y_0=(long)(160-1000.0*(data_fin[i].nISO +data_fin[i].nJ)/FSAMP/3); 
					  XDrawString(my_display, my_window, my_gc, 2,161, "ISO - J [ms]",12);}
  while ( (data_fin[i].index < index_0_e) && ( i < fin_last_index) ) {
     i++;
     x_1=Coor_x_l0(data_fin[i].index-index_0_b); 
     if (lead2_plot_button_status.HRate ) y_1=170-data_fin[i].HR/2;
     if (lead2_plot_button_status.STFine ) y_1=60+Coor_y_l2(data_fin[i].l2_ST80);
     if (lead2_plot_button_status.STslFine ) y_1=60+Coor_y_l2(data_fin[i].l2_ST80-data_fin[i].l2_ST20);
     if (lead2_plot_button_status.ISOJ )  y_1=(long)(160-1000.0*(data_fin[i].nISO +data_fin[i].nJ)/FSAMP/3); 
     if ((x_1 > x_0 ) OR PLOT_ALL ) { 
          XDrawLine(my_display, my_window, my_gc, x_0,y_0, x_1,y_1);
	  XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
	  XDrawLine(my_display, my_window, my_gc, x_0,160, x_0,163);
	  XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);

	  x_0=x_1; y_0=y_1;
	}

        } // end while
	  XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
	  XDrawLine(my_display, my_window, my_gc, x_0,160, x_0,163);
	  XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);
    fin_display_end=i-1; 
     } // if hrate

   if ( references_index[2] >= 0 ){
     for (i=0; i <= references_index[2]; i++){
       if ( (data_raw[references[2][i].raw_index].index >= index_0_b) && (data_raw[references[2][i].raw_index].index <= index_0_e) ) {
	 act_loc=FALSE;
	 if ( Is_code(2,i,0,0) ){
	    act_loc= act_reference[2].set && ( act_reference[2].typ == 2 ) && (act_reference[2].index == i);

            if (( i == reference_act[2] ) OR act_loc ) {
	      XAllocNamedColor(my_display, cmap,set_color1, &col, & unused);
	      XSetForeground(my_display, my_gc, col.pixel);
	    }
	    x_0=Coor_x_l0(data_raw[references[2][i].raw_index].index-index_0_b);

	    XDrawLine(my_display, my_window, my_gc, x_0,10, x_0,160);
	    XDrawString(my_display, my_window, my_gc, x_0 - 10 ,10, "LR",2);
            if (( i == reference_act[2] ) OR act_loc ) {
	      XAllocNamedColor(my_display, cmap,"black", &col, & unused);
	      XSetForeground(my_display, my_gc, col.pixel);
	    }
	 } 
	 else  // other ref
	 {
            if ( i == reference_act[2] ) {
	      XAllocNamedColor(my_display, cmap,set_color2, &col, & unused);
	      XSetForeground(my_display, my_gc, col.pixel);
	    }
	    x_0=Coor_x_l0(data_raw[references[2][i].raw_index].index-index_0_b);

	    XDrawLine(my_display, my_window, my_gc, x_0,10, x_0,160);
	    get_display_code(2,i);
	    XDrawString(my_display, my_window, my_gc, x_0 - 10 ,10, ref_code,2);
            if ( i == reference_act[2] ) {
	      XAllocNamedColor(my_display, cmap,"black", &col, & unused);
	      XSetForeground(my_display, my_gc, col.pixel);
	    }
	 }
       }
     } // end for
   } // plot ref.
   
   if ( loc_interval_b[2].set  && (data_raw[loc_interval_b[2].raw_index].index >= index_0_b) && (data_raw[loc_interval_b[2].raw_index].index <= index_0_e) ) {
   x_0=Coor_x_l0(data_raw[loc_interval_b[2].raw_index].index-index_0_b);
   XAllocNamedColor(my_display, cmap,set_color3, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   XDrawLine(my_display, my_window, my_gc, x_0,10, x_0,160);
   XDrawString(my_display, my_window, my_gc, x_0 - 9 ,20, "B",1);

  }

   if ( loc_interval_e[2].set  && (data_raw[loc_interval_e[2].raw_index].index >= index_0_b) && (data_raw[loc_interval_e[2].raw_index].index <= index_0_e) ) {
   x_0=Coor_x_l0(data_raw[loc_interval_e[2].raw_index].index-index_0_b);
   XAllocNamedColor(my_display, cmap,set_color3, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   XDrawLine(my_display, my_window, my_gc, x_0,10, x_0,160);
   XDrawString(my_display, my_window, my_gc, x_0 - 9 ,20, "E",1);

  }

   if ( global_set  && (data_raw[global_ref[2].raw_index].index >= index_0_b) && (data_raw[global_ref[2].raw_index].index <= index_0_e) ) {
   XAllocNamedColor(my_display, cmap,set_color1, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   x_0=Coor_x_l0(data_raw[global_ref[2].raw_index].index-index_0_b);

   XDrawLine(my_display, my_window, my_gc, x_0,10, x_0,160);
   XDrawString(my_display, my_window, my_gc, x_0 - 10 ,10, "GR",2);
  }

  if ( Marker[2].set  && (data_raw[Marker[2].raw_index].index >= index_0_b) && (data_raw[Marker[2].raw_index].index <= index_0_e) ) {
   XAllocNamedColor(my_display, cmap,set_color3, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   x_0=Coor_x_l0(data_raw[Marker[2].raw_index].index-index_0_b);

   XDrawLine(my_display, my_window, my_gc, x_0,10, x_0,160);
   XDrawString(my_display, my_window, my_gc, x_0 - 11 ,20, "M",1);

   x_1=Coor_x_l0(data_fin[Marker[2].fine_index].index-index_0_b);
   if ( x_1 == x_0) x_1++;
   XDrawLine(my_display, my_window, my_gc, x_1,80, x_1,160);

  } // end marker

   XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

} // end draw_lead2_A(void)

void draw_grid_lead0(int lead)
{

Bool draw_type_B, draw_type_C, draw_type_D, draw_type_E;

	switch(lead){
	case 0: my_display=l_b_display; my_window=l_b_window; my_gc= gcLead0;
	  draw_type_B=lead0_plot_button_status.HRate OR lead0_plot_button_status.HRRaw;
	  draw_type_C=lead0_plot_button_status.STFine OR lead0_plot_button_status.STslFine OR 
	    lead0_plot_button_status.STslRaw ;
	  draw_type_D=lead0_plot_button_status.Episodes;
	  draw_type_E=lead0_plot_button_status.ISOJ;
	  break;
	case 1: my_display=l_b1_display; my_window=l_b1_window; my_gc= gcLead1;
	  draw_type_B=lead1_plot_button_status.HRate OR lead1_plot_button_status.HRRaw;
	  draw_type_C=lead1_plot_button_status.STFine OR lead1_plot_button_status.STslFine OR 
	    lead1_plot_button_status.STslRaw ;
	  draw_type_D=lead1_plot_button_status.Episodes;
	  draw_type_E=lead1_plot_button_status.ISOJ;
	  break;
	case 2: my_display=l_b2_display; my_window=l_b2_window; my_gc= gcLead2;
	  draw_type_B=lead2_plot_button_status.HRate OR lead2_plot_button_status.HRRaw;
	  draw_type_C=lead2_plot_button_status.STFine OR lead2_plot_button_status.STslFine OR 
	    lead2_plot_button_status.STslRaw ;
	  draw_type_D=lead2_plot_button_status.Episodes;
	  draw_type_E=lead2_plot_button_status.ISOJ;
	  break;
	}

XGCValues line_type;
long c_Time=0, hours=0,hours_l=0,  minutes=0, seconds=0;
char pr_time[8];
int i,j, lx, lxx, ampl, imax;
long x_0, x_1, y_0, y_1;

   XClearWindow(my_display, my_window);
   XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);

   cmap=XDefaultColormap(my_display, DefaultScreen(my_display));
   XAllocNamedColor(my_display, cmap,"white", &col, & unused);
   XSetBackground(my_display, my_gc, col.pixel);
   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);
	
   XDrawLine(my_display, my_window, my_gc, 1120, 0, 1120,180);
   XDrawLine(my_display, my_window, my_gc, 160, 0, 160,180);
   XDrawLine(my_display, my_window, my_gc, 160,60, 1120,60);
   XDrawLine(my_display, my_window, my_gc, 160,120, 1120,120);

   line_type.line_style=LineOnOffDash;
   XChangeGC(my_display, my_gc, GCLineStyle,&line_type);
   
   XDrawLine(my_display, my_window, my_gc, 160,10, 1120,10);
   XDrawLine(my_display, my_window, my_gc, 160,20, 1120,20);
   XDrawLine(my_display, my_window, my_gc, 160,30, 1120,30);
   XDrawLine(my_display, my_window, my_gc, 160,40, 1120,40);
   XDrawLine(my_display, my_window, my_gc, 160,50, 1120,50);

   XDrawLine(my_display, my_window, my_gc, 160,70, 1120,70);
   XDrawLine(my_display, my_window, my_gc, 160,80, 1120,80);
   XDrawLine(my_display, my_window, my_gc, 160,90, 1120,90);
   XDrawLine(my_display, my_window, my_gc, 160,100, 1120,100);
   XDrawLine(my_display, my_window, my_gc, 160,110, 1120,110);

   XDrawLine(my_display, my_window, my_gc, 160,130, 1120,130);
   XDrawLine(my_display, my_window, my_gc, 160,140, 1120,140);
   XDrawLine(my_display, my_window, my_gc, 160,150, 1120,150);
   XDrawLine(my_display, my_window, my_gc, 160,160, 1120,160);

   XDrawString(my_display, my_window, my_gc, 142,20, " 2",2);
   XDrawString(my_display, my_window, my_gc, 142,40, " 1",2);
   XDrawString(my_display, my_window, my_gc, 142,60, " 0",2);
   XDrawString(my_display, my_window, my_gc, 142,80, "-1",2);

   XDrawLine(my_display, my_window, my_gc, 1120, 0, 1120,180);
   XDrawLine(my_display, my_window, my_gc, 160, 0, 160,180);
   XDrawLine(my_display, my_window, my_gc, 160,60, 1120,60);
   XDrawLine(my_display, my_window, my_gc, 160,120, 1120,120);
	
   line_type.line_style=LineOnOffDash;
   XChangeGC(my_display, my_gc, GCLineStyle,&line_type);
   
   XDrawLine(my_display, my_window, my_gc, 160,10, 1120,10);
   XDrawLine(my_display, my_window, my_gc, 160,20, 1120,20);
   XDrawLine(my_display, my_window, my_gc, 160,30, 1120,30);
   XDrawLine(my_display, my_window, my_gc, 160,40, 1120,40);
   XDrawLine(my_display, my_window, my_gc, 160,50, 1120,50);
   XDrawLine(my_display, my_window, my_gc, 160,70, 1120,70);
   XDrawLine(my_display, my_window, my_gc, 160,80, 1120,80);
   XDrawLine(my_display, my_window, my_gc, 160,90, 1120,90);
   XDrawLine(my_display, my_window, my_gc, 160,100, 1120,100);
   XDrawLine(my_display, my_window, my_gc, 160,110, 1120,110);
   XDrawLine(my_display, my_window, my_gc, 160,130, 1120,130);
   XDrawLine(my_display, my_window, my_gc, 160,140, 1120,140);
   XDrawLine(my_display, my_window, my_gc, 160,150, 1120,150);
   XDrawLine(my_display, my_window, my_gc, 160,160, 1120,160);

   XDrawLine(my_display, my_window, my_gc, 240,10, 240,180);
   XDrawLine(my_display, my_window, my_gc, 320,10, 320,180);
   XDrawLine(my_display, my_window, my_gc, 400,10, 400,180);
   XDrawLine(my_display, my_window, my_gc, 480,10, 480,180);
   XDrawLine(my_display, my_window, my_gc, 560,10, 560,180);
   XDrawLine(my_display, my_window, my_gc, 640,10, 640,180);
   XDrawLine(my_display, my_window, my_gc, 720,10, 720,180);
   XDrawLine(my_display, my_window, my_gc, 800,10, 800,180);
   XDrawLine(my_display, my_window, my_gc, 880,10, 880,180);
   XDrawLine(my_display, my_window, my_gc, 960,10, 960,180);
   XDrawLine(my_display, my_window, my_gc, 1040,10, 1040,180);

   line_type.line_style=LineSolid;
   XChangeGC(my_display, gcLead0, GCLineStyle,&line_type);
   XDrawString(my_display, my_window, my_gc, 2,174, "[time]",6);
   sprintf(pr_buff, "[units] [uV] R:%s[%d]", inp_rec_name, lead);

   XDrawString(my_display, my_window, my_gc, 2,12,pr_buff, strlen(pr_buff));

   XAllocNamedColor(my_display, cmap,"white", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   XFillRectangle(my_display, my_window, my_gc, 1,54,130,38);

   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   c_Time = diagram_time_begin_lead;
   for(i = 0; i < 12; i++)
   {
      TimeToHoursMinSec(c_Time, &hours, &minutes, &seconds, &hours_l);
      sprintf(pr_time, "%ld:%ld:%ld", hours_l, minutes, seconds);
      XDrawString(my_display, my_window, my_gc, (162 + i * 80), 174, pr_time, strlen(pr_time));
      c_Time +=scale_time_tick;
    }

  if (draw_type_B ){
     XDrawString(my_display, my_window, my_gc, 134,120, "100",3);
     XDrawString(my_display, my_window, my_gc, 136,140, " 60",3);

   }
   if (draw_type_C ){
     XDrawString(my_display, my_window, my_gc, 142,100, " 1",2);
     XDrawString(my_display, my_window, my_gc, 142,120, " 0",2);
     XDrawString(my_display, my_window, my_gc, 142,140, "-1",2);
   }

   if (draw_type_E ){
     XDrawString(my_display, my_window, my_gc, 134,120, "120",3);
     XDrawString(my_display, my_window, my_gc, 136,140, " 60",3);
   }

	switch(lead){
	case 0:
	  write_ref_data_l0();
	  draw_lead0_A();set_buttons_lead0();
	  break;
	case 1:
	  write_ref_data_l1();
	  draw_lead1_A();set_buttons_lead1();
	  break;
	case 2:
	  write_ref_data_l2();
	  draw_lead2_A();set_buttons_lead2();
	  break;
	} // end lead
} // end draw_grid_lead0

void draw_ovrly_coeff(void)
{
int i;
long x_0, x_1, y_0, y_1;
   
   my_display=k_b_display; my_window=k_b_window; my_gc= gckoeff;
   XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);

   index_0_b=TimeToIndex(diagram_time_begin_lead);
   index_0_e=TimeToIndex(diagram_time_begin_lead+time_scale_0);
   index_0=index_0_b;

   if (  ovr_coef ) { 

   XAllocNamedColor(my_display, cmap,"white", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   XFillRectangle(my_display, my_window, my_gc, 100,144,30,14);
   XAllocNamedColor(my_display, cmap,set_color3, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   i=raw_display_begin;
   x_0=Coor_x_l0(data_raw[i].index-index_0_b);
  
   if ( KL_coefficents ) {
        y_0=(long)(157-(double(data_raw[i].ST_f) /5.0 /ampl_c));
      }
    else {
        y_0=(long)(157-(double(data_raw[i].QRS_f) /5.0 /ampl_c));
    }

   while ( (data_raw[i].index < index_0_e ) && ( i < raw_last_index) ){
     i++;
     x_1=Coor_x_l0(data_raw[i].index-index_0_b);
   if ( KL_coefficents ) {
        y_1=(long)(157-(double(data_raw[i].ST_f) /5.0 /ampl_c));
      }
    else {
        y_1=(long)(157-(double(data_raw[i].QRS_f) /5.0 /ampl_c));
    }

     if ((x_1 > x_0 ) OR PLOT_ALL ) { 
          XDrawLine(my_display, my_window, my_gc, x_0,y_0, x_1,y_1);
	  x_0=x_1; y_0=y_1;
	}

   } // end while

   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   XDrawString(my_display, my_window, my_gc, 5,157, "KL 5 ......................Dist..",34);
 }
} // end draw_ovrly_coeff(void);

void draw_grid_coeff(void)
{
	my_display=k_b_display; my_window=k_b_window; my_gc= gckoeff;

XGCValues line_type;
long c_Time=0, hours=0,hours_l=0,  minutes=0, seconds=0;
char pr_time[8], pr_m[1];
int i,j, lx, lxx, ampl, imax;
long x_0, x_1, y_0, y_1;

   XClearWindow(my_display, my_window);
   XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);

   cmap=XDefaultColormap(my_display, DefaultScreen(my_display));
   XAllocNamedColor(my_display, cmap,"white", &col, & unused);
   XSetBackground(my_display, my_gc, col.pixel);
   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);
	
   XDrawLine(my_display, my_window, my_gc, 1120, 0, 1120,196);
   XDrawLine(my_display, my_window, my_gc, 160, 0, 160,196);
   XDrawLine(my_display, my_window, my_gc, 160,37, 1120,37);
   XDrawLine(my_display, my_window, my_gc, 160,67, 1120,67);
   XDrawLine(my_display, my_window, my_gc, 160,97, 1120,97);
   XDrawLine(my_display, my_window, my_gc, 160,127, 1120,127);
   XDrawLine(my_display, my_window, my_gc, 160,157, 1120,157);

   line_type.line_style=LineOnOffDash;
   XChangeGC(my_display, my_gc, GCLineStyle,&line_type);
   
   XDrawLine(my_display, my_window, my_gc, 160,7, 1120,7);
   XDrawLine(my_display, my_window, my_gc, 160,17, 1120,17);
   XDrawLine(my_display, my_window, my_gc, 160,27, 1120,27);

   XDrawLine(my_display, my_window, my_gc, 160,47, 1120,47);
   XDrawLine(my_display, my_window, my_gc, 160,57, 1120,57);

   XDrawLine(my_display, my_window, my_gc, 160,77, 1120,77);
   XDrawLine(my_display, my_window, my_gc, 160,87, 1120,87);

   XDrawLine(my_display, my_window, my_gc, 160,107, 1120,107);
   XDrawLine(my_display, my_window, my_gc, 160,117, 1120,117);

   XDrawLine(my_display, my_window, my_gc, 160,137, 1120,137);
   XDrawLine(my_display, my_window, my_gc, 160,147, 1120,147);

   XDrawLine(my_display, my_window, my_gc, 160,167, 1120,167);
   XDrawLine(my_display, my_window, my_gc, 160,177, 1120,177);

   XDrawString(my_display, my_window, my_gc, 145,17, " 1",2);
   XDrawString(my_display, my_window, my_gc, 145,37, " 0",2);
   XDrawString(my_display, my_window, my_gc, 145,67, " 0",2);
   XDrawString(my_display, my_window, my_gc, 145,97, " 0",2);
   XDrawString(my_display, my_window, my_gc, 145,127, " 0",2);
   XDrawString(my_display, my_window, my_gc, 145,157, " 0",2);
   XDrawString(my_display, my_window, my_gc, 145,177, "-1",2);

   XDrawString(my_display, my_window, my_gc, 145,47, " 1",2);
   XDrawString(my_display, my_window, my_gc, 145,77, " 1",2);
   XDrawString(my_display, my_window, my_gc, 145,107, " 1",2);
   XDrawString(my_display, my_window, my_gc, 145,137, " 1",2);

   XDrawLine(my_display, my_window, my_gc, 240,7, 240,180);
   XDrawLine(my_display, my_window, my_gc, 320,7, 320,180);
   XDrawLine(my_display, my_window, my_gc, 400,7, 400,180);
   XDrawLine(my_display, my_window, my_gc, 480,7, 480,180);
   XDrawLine(my_display, my_window, my_gc, 560,7, 560,180);
   XDrawLine(my_display, my_window, my_gc, 640,7, 640,180);
   XDrawLine(my_display, my_window, my_gc, 720,7, 720,180);
   XDrawLine(my_display, my_window, my_gc, 800,7, 800,180);
   XDrawLine(my_display, my_window, my_gc, 880,7, 880,180);
   XDrawLine(my_display, my_window, my_gc, 960,7, 960,180);
   XDrawLine(my_display, my_window, my_gc, 1040,7, 1040,180);

   line_type.line_style=LineSolid;
   XChangeGC(my_display, gcLead0, GCLineStyle,&line_type);
   XDrawString(my_display, my_window, my_gc, 2,190, "[time]",6);

   sprintf(pr_buff, "[units] [std] R:%s", inp_rec_name);

   XDrawString(my_display, my_window, my_gc, 2,12,pr_buff, strlen(pr_buff));

   c_Time = diagram_time_begin_lead;
   for(i = 0; i < 12; i++)
   {
      TimeToHoursMinSec(c_Time, &hours, &minutes, &seconds, &hours_l);
      sprintf(pr_time, "%ld:%ld:%ld", hours, minutes, seconds);
      XDrawString(my_display, my_window, my_gc, (162 + i * 80), 190, pr_time, strlen(pr_time));
      c_Time +=scale_time_tick;
    }

int k1_0, k2_0, k3_0, k4_0, k5_0, k1_1, k2_1, k3_1, k4_1, k5_1;

   index_0_b=TimeToIndex(diagram_time_begin_lead);
   index_0_e=TimeToIndex(diagram_time_begin_lead+time_scale_0);
   index_0=index_0_b;

	XDrawString(my_display, my_window, my_gc, 5,37, "KL 1 ..................................",40);
	XDrawString(my_display, my_window, my_gc, 5,67, "KL 2 ..................................",40);
	XDrawString(my_display, my_window, my_gc, 5,97, "KL 3 ..................................",40);
	XDrawString(my_display, my_window, my_gc, 5,127, "KL 4 ..................................",40);
	XDrawString(my_display, my_window, my_gc, 5,157, "KL 5 ..................................",40);

   XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);

   i=0; 
   while (data_raw[i].index < index_0_b) i++;
   raw_display_begin=i;
   x_0=Coor_x_l0(data_raw[i].index-index_0_b);
   if (  KL_coefficents ) {
        k1_0=(int)(37-(double(data_raw[i].STk1) /5.0 /ampl_c));
        k2_0=(int)(67-(double(data_raw[i].STk2) /5.0 /ampl_c));
        k3_0=(int)(97-(double(data_raw[i].STk3) /5.0 /ampl_c));
        k4_0=(int)(127-(double(data_raw[i].STk4) /5.0 /ampl_c));
        k5_0=(int)(157-(double(data_raw[i].STk5) /5.0 /ampl_c));

      }
    else {
        k1_0=(int)(37-(double(data_raw[i].QRSk1) /5.0 /ampl_c));
        k2_0=(int)(67-(double(data_raw[i].QRSk2) /5.0 /ampl_c));
        k3_0=(int)(97-(double(data_raw[i].QRSk3) /5.0 /ampl_c));
        k4_0=(int)(127-(double(data_raw[i].QRSk4) /5.0 /ampl_c));
        k5_0=(int)(157-(double(data_raw[i].QRSk5) /5.0 /ampl_c));
    }

   while ( (data_raw[i].index < index_0_e ) && ( i < raw_last_index) ){
     i++;
     x_1=Coor_x_l0(data_raw[i].index-index_0_b); 
   if ( KL_coefficents ) {
        k1_1=(int)(37-(double(data_raw[i].STk1) /5.0 /ampl_c));
        k2_1=(int)(67-(double(data_raw[i].STk2) /5.0 /ampl_c));
        k3_1=(int)(97-(double(data_raw[i].STk3) /5.0 /ampl_c));
        k4_1=(int)(127-(double(data_raw[i].STk4) /5.0 /ampl_c));
        k5_1=(int)(157-(double(data_raw[i].STk5) /5.0 /ampl_c));

      }
    else {
        k1_1=(int)(37-(double(data_raw[i].QRSk1) /5.0 /ampl_c));
        k2_1=(int)(67-(double(data_raw[i].QRSk2) /5.0 /ampl_c));
        k3_1=(int)(97-(double(data_raw[i].QRSk3) /5.0 /ampl_c));
        k4_1=(int)(127-(double(data_raw[i].QRSk4) /5.0 /ampl_c));
        k5_1=(int)(157-(double(data_raw[i].QRSk5) /5.0 /ampl_c));

    }

     if ((x_1 > x_0 ) OR PLOT_ALL ) { 
          XDrawLine(my_display, my_window, my_gc, x_0,k1_0, x_1,k1_1); k1_0=k1_1;
          XDrawLine(my_display, my_window, my_gc, x_0,k2_0, x_1,k2_1); k2_0=k2_1;
          XDrawLine(my_display, my_window, my_gc, x_0,k3_0, x_1,k3_1); k3_0=k3_1;
          XDrawLine(my_display, my_window, my_gc, x_0,k4_0, x_1,k4_1); k4_0=k4_1;
          XDrawLine(my_display, my_window, my_gc, x_0,k5_0, x_1,k5_1); k5_0=k5_1;
	  x_0=x_1; 
	}

   } // end while
 raw_display_end=i-1;
 draw_ovrly_coeff();

  for (i=0; i<= 2; i++){
  if ( Marker[i].set  && (data_raw[Marker[i].raw_index].index >= index_0_b) && (data_raw[Marker[i].raw_index].index <= index_0_e) ) {
       XAllocNamedColor(my_display, cmap,set_color3, &col, & unused);
       XSetForeground(my_display, my_gc, col.pixel);

       x_0=Coor_x_l0(data_raw[Marker[i].raw_index].index-index_0_b);

       XDrawLine(my_display, my_window, my_gc, x_0,10, x_0,177);
       sprintf(pr_m,"%d",i);
       XDrawString(my_display, my_window, my_gc, x_0 - 6 ,10, pr_m,1);

     } // end marker
 }

   XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

} // end draw_grid_coeff

void data_new_r_read(void)
{

long i,j,i_fin;
long data_b_0, data_e_0, t_index;
char time[15], time_b[15],time_e[15];
long R_end;

   data_b_0=reference_mstime_index - (150 * FSAMP + FSAMP / 2 ); // - 150 sec= 2.5 min  as max display offset + 1/2 avr ( 1000 ms /2 )
   data_e_0=reference_mstime_index + (150 * FSAMP + FSAMP / 2 ); // + 150 sec as max display offset

   i=LEN_BUFF_D-1;
   while ( data_b_0 < 0 ){
     L_buff_R[0][i]=0; L_buff_R[1][i]=0; L_buff_R[2][i]=0; L_buff_R[3][i]=0; L_buff_R[4][i]=0; L_buff_R[5][i]=0;
     data_b_0++;
     i--;
   }  

   t_index=data_b_0;

   i_fin=0; 
   while ( data_fin[i_fin].index < t_index ) i_fin++;
   isigsettime(data_b_0);  
   
     while ( i >= 0 ) {
      if (getvec(v_sample) <= 0) 
      {
         fprintf(stderr,"Error reading data (1)\n"); 
         exit(-1);
      }

      for (j = 0; j< nsig; j++)
         L_buff_R[j][i]=v_sample[j];
      L_buff_R[4][i]=t_index; 
      if ( t_index == data_fin[i_fin].index ) { 
             L_buff_R[5][i]=1; i_fin++;
	   }
        else  {
             L_buff_R[5][i]=0;
            }
      t_index++;
      i--;
    }

      for (j = 0; j< 6; j++)
         R_buff_R[j][0]= L_buff_R[j][0];

   i=1;
   R_end= LEN_BUFF_D;
   while ( data_raw[raw_last_index].index < data_e_0  ){
     R_buff_R[0][data_e_0]=0; R_buff_R[1][data_e_0]=0; R_buff_R[2][data_e_0]=0; R_buff_R[3][data_e_0]=0; R_buff_R[4][data_e_0]=0; R_buff_R[5][data_e_0]=0;
     data_e_0--;
      R_end--;
   }  

     while ( i < R_end ) {
      if (getvec(v_sample) <= 0) 
      {
         fprintf(stderr,"Error reading data (2)\n"); 
         exit(-1);
      }

      for (j = 0; j< nsig; j++)
         R_buff_R[j][i]=v_sample[j];
      R_buff_R[4][i]=t_index; 
      if ( t_index == data_fin[i_fin].index ) { 
             R_buff_R[5][i]=1; i_fin++;
	   }
        else  {
             R_buff_R[5][i]=0;
            }
      t_index++;
      i++;
    }

 i--;  

} // end data_new_r_read

void data_new_m_read(void)
{

long i,j,i_fin;
long data_b_0, data_e_0, t_index;
char time[15], time_b[15],time_e[15];
 long R_end;

   data_b_0=data_mstime_index - (150 * FSAMP + FSAMP / 2 ); // - 150 sec= 2.5 min  as max display offset + 1/2 avr ( 1000 ms /2 )
   data_e_0=data_mstime_index + (150 * FSAMP + FSAMP / 2 ); // + 150 sec as max display offset

   i=LEN_BUFF_D-1;
   while ( data_b_0 < 0 ){
     L_buff_M[0][i]=0; L_buff_M[1][i]=0; L_buff_M[2][i]=0; L_buff_M[3][i]=0; L_buff_M[4][i]=0; L_buff_M[5][i]=0;
     data_b_0++;
     i--;
   }  

   t_index=data_b_0;

   i_fin=0; 
   while ( data_fin[i_fin].index < t_index ) i_fin++;
   isigsettime(data_b_0);  
   
   while ( i >= 0 )
   {
      if (getvec(v_sample) <= 0) 
      {
         fprintf(stderr,"Error reading data (3)\n"); 
         exit(-1);
      }

      for (j = 0; j< nsig; j++)
         L_buff_M[j][i]=v_sample[j];
      L_buff_M[4][i]=t_index; 
      if ( t_index == data_fin[i_fin].index ) { 
             L_buff_M[5][i]=1; i_fin++;
	   }
        else  {
             L_buff_M[5][i]=0;
            }
      t_index++;
      i--;
    }

   for (j = 0; j< 6; j++)
         R_buff_M[j][0]= L_buff_M[j][0];

   i=1;
   
   R_end= LEN_BUFF_D-1;
   while ( data_raw[raw_last_index].index < data_e_0  ){
     R_buff_M[0][R_end]=0; R_buff_M[1][R_end]=0; R_buff_M[2][R_end]=0; R_buff_M[3][R_end]=0; R_buff_M[4][R_end]=0; R_buff_M[5][R_end]=0;
     data_e_0--;
      R_end--;
   }  

   while ( i < R_end)
   {
      if (getvec(v_sample) <= 0) 
      {
         fprintf(stderr,"Error reading data (4)\n"); 
         exit(-1);
      }

      for (j = 0; j< nsig; j++)
         R_buff_M[j][i]=v_sample[j];
      R_buff_M[4][i]=t_index; 
      if ( t_index == data_fin[i_fin].index ) { 
             R_buff_M[5][i]=1; i_fin++;
	   }
        else  {
             R_buff_M[5][i]=0;
            }
      t_index++;
      i++;
    }

 i--;  

} // end data_new_m_read

void data_plot_marker_x(int Data_lead_x, int pos)
{
long d_display_index;
long j;
long i;
long x_0, x_1, y_0, y_1, y_s;
float y;
long x;
char time[15], time_b[15];
float v_iso, v_j, v_j80;

   XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);

   d_display_index= data_scale * FSAMP / 2;

  	  v_iso =  avr_in_avrbeat(Data_lead_x, Marker[Data_lead].nISO,Marker[Data_lead].NS);
  	  v_j =  avr_in_avrbeat(Data_lead_x,- Marker[Data_lead].nJ,Marker[Data_lead].NS);
  	  v_j80 =  avr_in_avrbeat(Data_lead_x,- Marker[Data_lead].nJ80,Marker[Data_lead].NS);

    i=d_display_index;

   y=L_buff_M[Data_lead_x][i]- v_iso;
   x=L_buff_M[4][i]-L_buff_M[4][d_display_index];
   x_0=Coor_x_data(x); y_0=Coor_y_data_M(y)+pos;

   while ( i > d_avrg_index ){ 

    i--;
     y=L_buff_M[Data_lead_x][i]- v_iso;
     x=L_buff_M[4][i]-L_buff_M[4][d_display_index];
     x_1=Coor_x_data(x); y_1=Coor_y_data_M(y)+pos;

     if ( L_buff_M[5][i] == 1 ) XDrawString(my_display, my_window, my_gc, x_0,191, "*",1);
	   
     if ((x_1 > x_0 ) OR PLOT_ALL ) { 
          XDrawLine(my_display, my_window, my_gc, x_0,y_0, x_1,y_1);
	  x_0=x_1; y_0=y_1;
	}

   } // end while
   XDrawLine(my_display, my_window, my_gc, x_0,y_0-10, x_0,y_0+10);

   i = d_avrg_index;
   y=A_buff_M[Data_lead_x][125-i]- v_iso;
   x=L_buff_M[4][i]-L_buff_M[4][d_display_index];
   x_0=Coor_x_data(x); y_0=Coor_y_data_M(y)+pos;
   XDrawLine(my_display, my_window, my_gc, x_0,y_0-10, x_0,y_0+10);
   
   while ( i > -d_avrg_index ){ 

     if (( i ==  Marker[Data_lead].nISO ) && ( data_scale < 3 ))
     {
       y_s=Coor_y_data_M(0.0)+pos;
       plot_point_symbol(set_marker, x_0, y_s);
     }
      if (( -i ==  Marker[Data_lead].nJ )  && ( data_scale < 3 )) {
       y_s=Coor_y_data_M(v_j- v_iso)+pos;
       plot_point_symbol(set_marker, x_0, y_s);
     }

     i--;
     y=A_buff_M[Data_lead_x][125-i]- v_iso;
     if ( i >= 0 ) { x=L_buff_M[4][i]-L_buff_M[4][d_display_index];     
                     if ( L_buff_M[5][i] == 1 ) XDrawString(my_display, my_window, my_gc, x_0,191, "*",1);

		   }
        else  { x=R_buff_M[4][-i]-L_buff_M[4][d_display_index]; 
                if ( R_buff_M[5][-i] == 1 ) XDrawString(my_display, my_window, my_gc, x_0,191, "*",1);
               }
     x_1=Coor_x_data(x); y_1=Coor_y_data_M(y)+pos;

     if ((x_1 > x_0 ) OR PLOT_ALL ) { 
          XDrawLine(my_display, my_window, my_gc, x_0,y_0, x_1,y_1);
	  x_0=x_1; y_0=y_1;
	}
      if (( -i ==  Marker[Data_lead].nJ80 ) && ( data_scale < 3 )) {
       y_s=Coor_y_data_M(v_j80 - v_iso)+pos;
       plot_point_symbol(set_marker, x_0, y_s);
     }

   } // end while
   XDrawLine(my_display, my_window, my_gc, x_0,y_0-10, x_0,y_0+10);

   i = d_avrg_index;
   y=R_buff_M[Data_lead_x][i]- v_iso;
   x=R_buff_M[4][i]-L_buff_M[4][d_display_index];
   x_0=Coor_x_data(x); y_0=Coor_y_data_M(y)+pos;
   XDrawLine(my_display, my_window, my_gc, x_0,y_0-10, x_0,y_0+10);
   while ( i < d_display_index ){ 
     i++;
     y=R_buff_M[Data_lead_x][i]- v_iso;
     x=R_buff_M[4][i]-L_buff_M[4][d_display_index];
     x_1=Coor_x_data(x); y_1=Coor_y_data_M(y)+pos;

     if ( R_buff_M[5][i] == 1 ) XDrawString(my_display, my_window, my_gc, x_0,191, "*",1);
	   
     if ((x_1 > x_0 ) OR PLOT_ALL ) { 
          XDrawLine(my_display, my_window, my_gc, x_0,y_0, x_1,y_1);
	  x_0=x_1; y_0=y_1;
	}

   } // end while

   XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);

} // data_plot_marker_x

void data_plot_marker(void)
{
int pos0, pos1, pos2, posx;

   pos0=0; pos1=0; pos2=0; posx=0;

   if ( data_ovrly_shift ) {  pos0= -40; pos1=0; pos2=40;
			      switch ( Data_lead){
			       case 0: posx=pos0; break;
			       case 1: posx=pos1; break;
			       case 2: posx=pos2; break;
			      };
			    };
   if ( data_ovr_l0 ) { 
   XAllocNamedColor(my_display, cmap,set_color4, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   data_plot_marker_x(0,pos0);

   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

 }

   if ( data_ovr_l1 ) { 
   XAllocNamedColor(my_display, cmap,set_color5, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   data_plot_marker_x(1,pos1);

   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

 }
   if ( data_ovr_l2 ) { 
   XAllocNamedColor(my_display, cmap,set_color6, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   data_plot_marker_x(2,pos2);

   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

 }

   data_plot_marker_x(Data_lead,posx);
} //  end  data_plot_marker 

void data_plot_ref_x(int Data_lead_x ,int pos, Bool plot_box, int Data_lead_x_act)
{

long d_display_index;

long j;
long i;
long x_0, x_1, y_0, y_1, y_s;
float y;
long x;
char time[15], time_b[15];
float v_iso, v_j, v_j80;

   XSetLineAttributes(my_display, my_gc,set_line_width, LineSolid, CapRound, JoinRound);

   d_display_index= data_scale * FSAMP / 2;

   i=d_display_index;

   v_iso =  avr_in_avrbeat_r(Data_lead_x, act_ref_data[Data_lead_x_act].nISO,act_ref_data[Data_lead_x_act].NS);
   v_j =  avr_in_avrbeat_r(Data_lead_x,- act_ref_data[Data_lead_x_act].nJ,act_ref_data[Data_lead_x_act].NS);
   v_j80 =  avr_in_avrbeat_r(Data_lead_x,- act_ref_data[Data_lead_x_act].nJ80,act_ref_data[Data_lead_x_act].NS);

   i=d_display_index;
   y=L_buff_R[Data_lead_x][i]-v_iso;
   x=L_buff_R[4][i]-L_buff_R[4][d_display_index];
   x_0=Coor_x_data(x); y_0=Coor_y_data_M(y)-180+pos;

   while ( i > d_avrg_index ){ 
     i--;
     y=L_buff_R[Data_lead_x][i]-v_iso;
     x=L_buff_R[4][i]-L_buff_R[4][d_display_index];
     x_1=Coor_x_data(x); y_1=Coor_y_data_M(y)-180+pos;

     if ( L_buff_R[5][i] == 1 ) XDrawString(my_display, my_window, my_gc, x_0,20, "*",1);
	   
     if ((x_1 > x_0 ) OR PLOT_ALL) { 
          XDrawLine(my_display, my_window, my_gc, x_0,y_0, x_1,y_1);
	  x_0=x_1; y_0=y_1;
	}

   } // end while
   XDrawLine(my_display, my_window, my_gc, x_0,y_0-10, x_0,y_0+10);

   i = d_avrg_index;
   y=A_buff_R[Data_lead_x][125-i]-v_iso;
   x=L_buff_R[4][i]-L_buff_R[4][d_display_index];
   x_0=Coor_x_data(x); y_0=Coor_y_data_M(y)-180+pos;
   XDrawLine(my_display, my_window, my_gc, x_0,y_0-10, x_0,y_0+10);
   
   while ( i > -d_avrg_index ){ 

     if (( i ==   act_ref_data[Data_lead_x_act].nISO )  && (plot_box ) && ( data_scale < 3 )){ 
       y_s=Coor_y_data_M(0.0)-180+pos;
       
       plot_point_symbol(set_marker, x_0, y_s);
     }

      if (( -i ==  act_ref_data[Data_lead_x_act].nJ  )  && (plot_box ) && ( data_scale < 3 )){
       y_s=Coor_y_data_M(v_j - v_iso)-180+pos;
       plot_point_symbol(set_marker, x_0, y_s);
     }

     i--;
     y=A_buff_R[Data_lead_x][125-i]- v_iso;
     if ( i >= 0 ) { x=L_buff_R[4][i]-L_buff_R[4][d_display_index]; 
		     if (( L_buff_R[5][i] == 1 )  && ( !data_ovr_ref)) XDrawString(my_display, my_window, my_gc, x_0,20, "*",1);
		   }
        else  { x=R_buff_R[4][-i]-L_buff_R[4][d_display_index];  
		if (( R_buff_R[5][-i] == 1 )  && ( !data_ovr_ref))  XDrawString(my_display, my_window, my_gc, x_0,20, "*",1);
	      }
     x_1=Coor_x_data(x); y_1=Coor_y_data_M(y)-180+pos;

     if ((x_1 > x_0 ) OR PLOT_ALL) { 
          XDrawLine(my_display, my_window, my_gc, x_0,y_0, x_1,y_1);
	  x_0=x_1; y_0=y_1;
	}

      if (( -i ==  act_ref_data[Data_lead_x_act].nJ80 )  && (plot_box ) && ( data_scale < 3 )){

       y_s=Coor_y_data_M(v_j80 - v_iso)-180+pos;
       plot_point_symbol(set_marker, x_0, y_s);
     }

   } // end while
   XDrawLine(my_display, my_window, my_gc, x_0,y_0-10, x_0,y_0+10);

   i = d_avrg_index;
   y=R_buff_R[Data_lead_x][i]- v_iso;
   x=R_buff_R[4][i]-L_buff_R[4][d_display_index];
   x_0=Coor_x_data(x); y_0=Coor_y_data_M(y)-180+pos;
   XDrawLine(my_display, my_window, my_gc, x_0,y_0-10, x_0,y_0+10);
   while ( i < d_display_index ){ 
     i++;
     y=R_buff_R[Data_lead_x][i]- v_iso;
     x=R_buff_R[4][i]-L_buff_R[4][d_display_index];
     x_1=Coor_x_data(x); y_1=Coor_y_data_M(y)-180+pos;

     if ( R_buff_R[5][i] == 1 ) XDrawString(my_display, my_window, my_gc, x_0,20, "*",1);
	   
     if ((x_1 > x_0 ) OR PLOT_ALL) { 
          XDrawLine(my_display, my_window, my_gc, x_0,y_0, x_1,y_1);
	  x_0=x_1; y_0=y_1;
	}

   } // end while

   XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);
} // data_plot_ref_x

void data_plot_reference(void)
{
long d_display_index;

char time[15], time_b[15];

int pos0, pos1, pos2, posx;

   pos0=0; pos1=0; pos2=0; posx=0;

   if ( data_ovrly_shift ) {  pos0= -40; pos1=0; pos2=40;
			      switch ( Data_lead){
			       case 0: posx=pos0; break;
			       case 1: posx=pos1; break;
			       case 2: posx=pos2; break;
			      };
			    };
   if ( data_ovr_l0 ) { 
   XAllocNamedColor(my_display, cmap,set_color4, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   data_plot_ref_x(0,pos0, TRUE, Data_lead);

   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

 }

   if ( data_ovr_l1 ) { 
   XAllocNamedColor(my_display, cmap,set_color5, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   data_plot_ref_x(1,pos1, TRUE, Data_lead);

   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);
 }

   if ( data_ovr_l2 ) { 
   XAllocNamedColor(my_display, cmap,set_color6, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   data_plot_ref_x(2,pos2, TRUE, Data_lead);

   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);
 }

   if ( data_ovr_ref ) { 
   XAllocNamedColor(my_display, cmap,set_color3, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   data_plot_ref_x(Data_lead,posx+180, FALSE, Data_lead);

   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

 }
   data_plot_ref_x(Data_lead,posx, TRUE, Data_lead);
} //  end  data_plot_reference 

void draw_grid_data(void)
{
XGCValues line_type;
int     i,x, x_0, x_1;
long    d_display_index;
float   v_j80, v_j20, v_iso, v_isor, v_j80r;

float   v_j80_str, v_j20_str, v_iso_str, v_isor_str, v_j80r_str;
int     v_j80_str_i, v_j20_str_i, v_slo_str_i, v_dev_str_i;

   d_display_index= data_scale * FSAMP / 2;

//   XClearWindow(my_display, my_window, 0, 0, 1128,1087);

   XAllocNamedColor(my_display, cmap,"white", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);
   XFillRectangle(my_display, my_window, my_gc, 0, 0, 1128, 1087);  

   XSetLineAttributes(my_display, my_gc,1, LineSolid, CapRound, JoinRound);

   cmap=XDefaultColormap(my_display, DefaultScreen(my_display));

   XAllocNamedColor(my_display, cmap,set_color7, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);
   x=L_buff_R[4][d_avrg_index]-L_buff_R[4][d_display_index];
   x_0=Coor_x_data(x);
   x=R_buff_R[4][d_avrg_index]-L_buff_R[4][d_display_index];
   x_1=Coor_x_data(x);

   if ( d_avrg_index > 0 ) XFillRectangle(my_display, my_window, my_gc, x_0,0,x_1-x_0,550); // 360

   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

   XDrawLine(my_display, my_window, my_gc, 1120, 0, 1120,550); //
   XDrawLine(my_display, my_window, my_gc, 160, 0, 160,550); //
   XDrawLine(my_display, my_window, my_gc, 160,90, 1120,90); //
   XDrawLine(my_display, my_window, my_gc, 160,180, 1120,180); //
   XDrawLine(my_display, my_window, my_gc, 160,270, 1120,270); //
   XDrawLine(my_display, my_window, my_gc, 160,550, 1120,550); //
   XDrawLine(my_display, my_window, my_gc, 640,0, 640,550); //

   line_type.line_style=LineOnOffDash;
   XChangeGC(my_display, my_gc, GCLineStyle,&line_type);
   
   XDrawLine(my_display, my_window, my_gc, 160,10, 1120,10);
   for (i=30; i <= 550; i+=20) // < 360
     XDrawLine(my_display, my_window, my_gc, 160,i, 1120,i);

      x=(int)data_grid_tick;
   i=1;
   while(x < 480)
   {
     XDrawLine(my_display, my_window, my_gc, 640 + x, 0, 640 + x, 550); // 360
      XDrawLine(my_display, my_window, my_gc, 639 - x, 0, 639 - x, 550); // 360
      i++;
      x = (int)(i * data_grid_tick);
   }

   XDrawString(my_display, my_window, my_gc, 143,10, " 2",2);
   XDrawString(my_display, my_window, my_gc, 143,50, " 1",2);
   XDrawString(my_display, my_window, my_gc, 143,90, " 0",2);
   XDrawString(my_display, my_window, my_gc, 143,130, "-1",2);
   XDrawString(my_display, my_window, my_gc, 143,170, "-2",2);
   XDrawString(my_display, my_window, my_gc, 143,190, " 2",2);
   XDrawString(my_display, my_window, my_gc, 143,230, " 1",2);
   XDrawString(my_display, my_window, my_gc, 143,270, " 0",2);
   XDrawString(my_display, my_window, my_gc, 143,310, "-1",2);
   XDrawString(my_display, my_window, my_gc, 143,350, "-2",2);
   XDrawString(my_display, my_window, my_gc, 143,390, "-3",2); //
   XDrawString(my_display, my_window, my_gc, 143,430, "-4",2); //
   XDrawString(my_display, my_window, my_gc, 143,470, "-5",2); //
   XDrawString(my_display, my_window, my_gc, 143,510, "-6",2); //
   XDrawString(my_display, my_window, my_gc, 143,550, "-7",2); //

   sprintf(pr_buff, "[units] [uV] R:%s", inp_rec_name);

   XDrawString(my_display, my_window, my_gc, 2,12,pr_buff, strlen(pr_buff));

     if ( act_reference[Data_lead].set ){
                          sprintf(pr_buff,"Refer.");   
                          XDrawString(my_display, my_window, my_gc, 2,90, pr_buff,strlen(pr_buff));
                          sprintf(pr_buff,"%s", mstimstr(data_fin[act_ref_data[Data_lead].fine_index].index));   
                          XDrawString(my_display, my_window, my_gc, 50,90, pr_buff,strlen(pr_buff));
 
			  v_isor =  avr_in_avrbeat_r(Data_lead, act_ref_data[Data_lead].nISO,act_ref_data[Data_lead].NS);
			  v_j80r =  avr_in_avrbeat_r(Data_lead,- act_ref_data[Data_lead].nJ80,act_ref_data[Data_lead].NS);

			}
                   else {
		          XDrawString(my_display, my_window, my_gc, 2,90, "NO Reference set .....",22);
			  v_isor=0.0;
			  v_j80r= avr_in_avrbeat(Data_lead,- Marker[Data_lead].nJ80,Marker[Data_lead].NS)
			          -avr_in_avrbeat(Data_lead, Marker[Data_lead].nISO,Marker[Data_lead].NS);
		   }
   if ( Marker[Data_lead].set ) { 
			  v_iso =  avr_in_avrbeat(Data_lead, Marker[Data_lead].nISO,Marker[Data_lead].NS);
			  v_j20 =  avr_in_avrbeat(Data_lead,- (Marker[Data_lead].nJ+5),Marker[Data_lead].NS);
			  v_j80 =  avr_in_avrbeat(Data_lead,- Marker[Data_lead].nJ80,Marker[Data_lead].NS);

   XAllocNamedColor(my_display, cmap,set_color8, &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);
   XFillRectangle(my_display, my_window, my_gc, 1,13,140,25);
   XAllocNamedColor(my_display, cmap,"black", &col, & unused);
   XSetForeground(my_display, my_gc, col.pixel);

	                  sprintf(pr_buff,"HRate:  %d [bpm]",Marker[Data_lead].fine_HR);   
                          XDrawString(my_display, my_window, my_gc, 2,36, pr_buff,strlen(pr_buff));

	                  sprintf(pr_buff,"Mean:");   
                          XDrawString(my_display, my_window, my_gc, 2,54, pr_buff,strlen(pr_buff));
	         if ( reference_act[Data_lead] == -1 && references_index[Data_lead] == -1) {
	                  sprintf(pr_buff,"%4d/%5d",Marker[Data_lead].NS, act_ref_data[Data_lead].NS );   
		 } else if ( reference_act[Data_lead] > -1 ) {
                         sprintf(pr_buff,"%4d/%4d",Marker[Data_lead].NS,
                                      references[Data_lead][reference_act[Data_lead]].NS  );   
		 } else {
                         sprintf(pr_buff,"%4d/%4s",Marker[Data_lead].NS, " " );   
		 }
                          XDrawString(my_display, my_window, my_gc, 46,54, pr_buff,strlen(pr_buff));
	                  sprintf(pr_buff,"[smp]");   
                          XDrawString(my_display, my_window, my_gc, 105,54, pr_buff,strlen(pr_buff));

	                  sprintf(pr_buff,"ABeat:");   
                          XDrawString(my_display, my_window, my_gc, 2,66, pr_buff,strlen(pr_buff));
	         if ( reference_act[Data_lead] == -1 && references_index[Data_lead] == -1) {
	                  sprintf(pr_buff,"%4d/%4d",Marker[Data_lead].window, act_ref_data[Data_lead].window );   
		 } else  if ( reference_act[Data_lead] > -1 ) {
                         sprintf(pr_buff,"%4d/%4d",Marker[Data_lead].window,
                                      references[Data_lead][reference_act[Data_lead]].window  );   
		 } else {
                         sprintf(pr_buff,"%4d/%4s",Marker[Data_lead].window, " ");
		 }
                          XDrawString(my_display, my_window, my_gc, 42,66, pr_buff,strlen(pr_buff));
	                  sprintf(pr_buff,"[sec]");   
                          XDrawString(my_display, my_window, my_gc, 112,66, pr_buff,strlen(pr_buff));

	                  strcpy(pr_buff,"PB:");   

	                  strcpy(pr_buff,"PE:");   

	                  sprintf(pr_buff,"ISO:");   

	         if ( reference_act[Data_lead] == -1 && references_index[Data_lead] == -1 ) {
	                  sprintf(pr_buff,"%4d/%4d",-1000* Marker[Data_lead].nISO/FSAMP,
				  -1000* act_ref_data[Data_lead].nISO/FSAMP);
		 } else if ( reference_act[Data_lead] > -1) {
	                  sprintf(pr_buff,"%4d/%4d",-1000* Marker[Data_lead].nISO/FSAMP,
				  -1000* references[Data_lead][reference_act[Data_lead]].nISO/FSAMP);
		 } else {
	                  sprintf(pr_buff,"%4d/%4s",-1000* Marker[Data_lead].nISO/FSAMP, " ");
		 }

	                  sprintf(pr_buff,"[ms]");   
	
	                  strcpy(pr_buff,"Q:");   

	                  sprintf(pr_buff,"J: ");   

	         if ( reference_act[Data_lead] == -1 && references_index[Data_lead] == -1 ) {
                          sprintf(pr_buff,"%4d/%4d",1000* Marker[Data_lead].nJ/FSAMP,
                                      1000* act_ref_data[Data_lead].nJ/FSAMP);
		 } else if ( reference_act[Data_lead] > -1 ) {
	                  sprintf(pr_buff,"%4d/%4d",1000* Marker[Data_lead].nJ/FSAMP,
                                      1000* references[Data_lead][reference_act[Data_lead]].nJ/FSAMP);
		 } else {
		   sprintf(pr_buff,"%4d/%4s",1000* Marker[Data_lead].nJ/FSAMP, " ");
		 }

	                  sprintf(pr_buff,"[ms]");   

	                  sprintf(pr_buff,"ST:");   

	         if ( reference_act[Data_lead] == -1 && references_index[Data_lead] == -1) {
	                  sprintf(pr_buff,"%4d/%4d", 1000*Marker[Data_lead].nJ80/FSAMP,
                                       1000* act_ref_data[Data_lead].nJ80/FSAMP);
		 } else  if ( reference_act[Data_lead] > -1 ) {
	                  sprintf(pr_buff,"%4d/%4d", 1000*Marker[Data_lead].nJ80/FSAMP,
                                       1000* references[Data_lead][reference_act[Data_lead]].nJ80/FSAMP);
		 } else {
		   sprintf(pr_buff,"%4d/%4s", 1000*Marker[Data_lead].nJ80/FSAMP, " ");
		 }

	                  sprintf(pr_buff,"[ms]");   

	                  strcpy(pr_buff,"TB:" );   

	                  strcpy(pr_buff,"TX:");   

	                  strcpy(pr_buff,"TE:" );   

                          sprintf(pr_buff,"Marker");   
                          XDrawString(my_display, my_window, my_gc, 2,270, pr_buff,strlen(pr_buff));
                          sprintf(pr_buff,"%s", mstimstr(data_fin[Marker[Data_lead].fine_index].index));   
                          XDrawString(my_display, my_window, my_gc, 50,270, pr_buff,strlen(pr_buff));

	         if ( reference_act[Data_lead] == -1) {
			    v_j80_str_i =  act_ref_data[Data_lead].ST80;
			    v_j20_str_i =  act_ref_data[Data_lead].ST80 -
			                   act_ref_data[Data_lead].STsl;
                            v_slo_str_i =  act_ref_data[Data_lead].STsl;
                            v_dev_str_i =  act_ref_data[Data_lead].STd;
		  } else {
			    v_j80_str_i =  references[Data_lead][reference_act[Data_lead]].ST80;
			    v_j20_str_i =  references[Data_lead][reference_act[Data_lead]].ST80 -
			                   references[Data_lead][reference_act[Data_lead]].STsl;
                            v_slo_str_i =  references[Data_lead][reference_act[Data_lead]].STsl;
                            v_dev_str_i =  references[Data_lead][reference_act[Data_lead]].STd;
	          }

                          sprintf(pr_buff,"ST80:");

			  if (reference_act[Data_lead] == -1 && references_index[Data_lead] > -1)
                                sprintf(pr_buff, "%6d/%6s", mk_uv(v_j80 - v_iso), " ");
                          else  sprintf(pr_buff, "%6d/%6d", mk_uv(v_j80 - v_iso), v_j80_str_i);

                          sprintf(pr_buff,"ST20:");

			  if (reference_act[Data_lead] == -1 && references_index[Data_lead] > -1)
                               sprintf(pr_buff, "%6d/%6s", mk_uv(v_j20 - v_iso), " ");
                          else sprintf(pr_buff, "%6d/%6d", mk_uv(v_j20 - v_iso), v_j20_str_i);

                          sprintf(pr_buff,"STsl:");

			  if (reference_act[Data_lead] == -1 && references_index[Data_lead] > -1)
                               sprintf(pr_buff, "%6d/%6s", mk_uv(v_j80- v_j20), " ");
                          else sprintf(pr_buff, "%6d/%6d", mk_uv(v_j80- v_j20), v_slo_str_i);

                          sprintf(pr_buff,"STdev:");

			  if (reference_act[Data_lead] == -1 && references_index[Data_lead] > -1)
                               sprintf(pr_buff,"%6d/%6s",mk_uv(v_j80- v_iso - (v_j80r-v_isor )), " ");
                          else sprintf(pr_buff,"%6d/%6d",mk_uv(v_j80- v_iso - (v_j80r-v_isor )),v_dev_str_i );

			}
                   else {
		          XDrawString(my_display, my_window, my_gc, 2,270, "NO Marker set ........",22);
		   }

   XDrawString(my_display, my_window, my_gc, 2, 24, "FINE MODE", 9);

   sprintf(pr_buff, "Time tick: %ld msec", data_tick);
   XDrawString(my_display, my_window, my_gc, 2, 358, pr_buff, strlen(pr_buff));
}; //  end  draw_grid_data

void get_average_M(void)
{
long i, j, l;
long n_av=1;

   current_nl=0; current_nr=0;

   for ( i= d_avrg_index; i >= 0; i--){
     for (j=0; j < 6; j++)
     {  A_buff_M[j][125-i]= L_buff_M[j][i];
        A_buff_M[j][125+i]= R_buff_M[j][i];}
   }

   for ( i=1; i <= current_average_window_index; i++) {
     if ( L_buff_M[5][i] == 1 ) { 
       n_av++; current_nl++;
       for (l=0; l < nsig; l++)
	 for ( j= d_avrg_index; j >= -d_avrg_index; j--)  A_buff_M[l][125-j] += L_buff_M[l][i+j];
     }
     if ( R_buff_M[5][i] == 1 ) { 
       n_av++; current_nr++;
       for (l=0; l < nsig; l++)
	 for ( j= d_avrg_index; j >= -d_avrg_index; j--)  A_buff_M[l][125-j] += R_buff_M[l][i-j];
     }

   }
   for ( i= d_avrg_index; i >=  -d_avrg_index; i--){
     for (j=0; j < nsig; j++)
      A_buff_M[j][125-i] = Round(( (double)A_buff_M[j][125-i]) / n_av);
   }
} // end get_average_M

void get_average_R(void)
{
  long i, j, l, n_av=1;
long  ref_average_window_index;

   ref_average_window_index = current_average_window_index;

   for ( i= d_avrg_index; i >= 0; i--){
     for (j=0; j < nsig; j++)
       A_buff_R[j][125-i]= L_buff_R[j][i];
     for (j=0; j < nsig; j++)
       A_buff_R[j][125+i]= R_buff_R[j][i];
   }

   for ( i=1; i <= ref_average_window_index; i++) {
     if ( L_buff_R[5][i] == 1 ) { 
       n_av++;
       for (l=0; l < nsig; l++)
	 for ( j= d_avrg_index; j >= -d_avrg_index; j--)  A_buff_R[l][125-j] += L_buff_R[l][i+j];
     }
     if ( R_buff_R[5][i] == 1 ) { 
       n_av++;
       for (l=0; l < nsig; l++)
	 for ( j= d_avrg_index; j >= -d_avrg_index; j--)  A_buff_R[l][125-j] += R_buff_R[l][i-j];
     }

   }
   for ( i= d_avrg_index; i >=  -d_avrg_index; i--){
     for (j=0; j < nsig; j++)
      A_buff_R[j][125-i] = Round(( (double)A_buff_R[j][125-i]) / n_av);
   }
} // end get_average_R

void show_data(int leadx, Bool xx_lead, Bool xx_kl)
{

  if (xx_kl)  draw_grid_coeff();
  if (( leadx == Data_lead ) || xx_lead ) {

	my_display=d_b_display;
	my_window=d_b_window;
	my_gc=gcdata;

      if ( Marker[Data_lead].set ) {
       data_mstime_index= data_fin[Marker[Data_lead].fine_index].index;
       data_new_m_read();
       update_marker(Data_lead,999);
     }

    draw_grid_data();

     if ( Marker[Data_lead].set ) {
       data_plot_marker();
     }

     if ( act_reference[Data_lead].set ) {
       reference_mstime_index= data_fin[act_ref_data[Data_lead].fine_index].index; //r
       data_new_r_read(); //r
       get_average_R();  //r
      data_plot_reference();
     }
  }
} // end show_data

//**

void set_buttons_lead0()
{
  Bool selected;
  Bool loc_int_set;
  Bool sel_lr;

if (Lead0_buttons.Auto_s == 1) 
            { status_manual_mode=TRUE; }
	  else  
	    { status_manual_mode=FALSE;}
if (Lead0_buttons.Subtr_s == 1) 
               { xv_set(Sem_0_l_bw.l_b_Subtr, PANEL_LABEL_STRING, "Subtr", NULL);status_unsubtracted =TRUE; } 
	  else  
               { xv_set(Sem_0_l_bw.l_b_Subtr, PANEL_LABEL_STRING, "UnSubtr", NULL); status_unsubtracted =FALSE;}
if (Lead0_buttons.OvrApp_s == 1) 
               {xv_set(Sem_0_l_bw.l_b_OvrApp, PANEL_LABEL_STRING, "OvrApp", NULL);  ovr0_app = FALSE;}
	  else  
	       {xv_set(Sem_0_l_bw.l_b_OvrApp, PANEL_LABEL_STRING, "UnOvAp", NULL);  ovr0_app = TRUE;}

if (Lead0_buttons.ConsLR ){
if (Lead0_buttons.ConsLR_s == 1)
               { xv_set(Sem_0_l_bw.l_b_ConsLR, PANEL_LABEL_STRING, "ConsLR", NULL); status_consider_localref =TRUE;
	       sel_lr=Is_code(0,reference_act[0],0,0) && status_manual_mode && status_unsubtracted;} 
            else  
               {xv_set(Sem_0_l_bw.l_b_ConsLR, PANEL_LABEL_STRING, "ConsGR", NULL);  status_consider_localref =FALSE;
	       sel_lr=TRUE;}
 }

selected = reference_act[0] >= 0;
if (  status_manual_mode && !status_unsubtracted && Is_code(0,reference_act[0],0,0) ) selected=FALSE; 
loc_int_set = loc_interval_b[0].set && loc_interval_e[0].set; 

xv_set(Sem_0_l_bw.l_b_Mark, PANEL_INACTIVE,! Lead0_buttons.Mark,NULL);

xv_set(Sem_0_l_bw.l_b_Subtr, PANEL_INACTIVE,! Lead0_buttons.Subtr,NULL);
xv_set(Sem_0_l_bw.l_b_OvrApp, PANEL_INACTIVE,! Lead0_buttons.OvrApp,NULL);
xv_set(Sem_0_l_bw.l_b_OvrLds_menu, PANEL_INACTIVE,! Lead0_buttons.OvrLds,NULL);

xv_set(Sem_0_l_bw.l_b_Exm, PANEL_INACTIVE,! Lead0_buttons.Exm,NULL);
xv_set(Sem_0_l_bw.l_b_ConsLR, PANEL_INACTIVE,! (Lead0_buttons.ConsLR && sel_lr),NULL);

};// set_buttons_lead0

void set_buttons_lead0_start()
{

Lead0_buttons.Auto_s = 1; Lead0_buttons.Subtr_s=1; Lead0_buttons.OvrApp_s=1; Lead0_buttons.ConsLR_s=1;

Lead0_buttons.Mark=TRUE;Lead0_buttons.Dmy=FALSE; Lead0_buttons.Auto= FALSE; Lead0_buttons.Subtr=FALSE; Lead0_buttons.Cmpt= TRUE; 
Lead0_buttons.OvrApp= TRUE;  Lead0_buttons.OvrLds= TRUE; Lead0_buttons.GlR =TRUE; Lead0_buttons.SetLB= FALSE;
Lead0_buttons.SetLE= FALSE; Lead0_buttons.DelLI= FALSE; 
Lead0_buttons.Isc= FALSE; Lead0_buttons.Rate_r= FALSE;
Lead0_buttons.Cnd= FALSE; Lead0_buttons.AxS= FALSE; Lead0_buttons.Atr= FALSE;  Lead0_buttons.Exm= FALSE; Lead0_buttons.Move= FALSE;
Lead0_buttons.Del= FALSE; Lead0_buttons.DelA= FALSE; Lead0_buttons.ChAtr= FALSE; Lead0_buttons.ChAtrA= FALSE; 
Lead0_buttons.ConsLR= FALSE;
Lead0_buttons.LcRef= FALSE; Lead0_buttons.Cancel= FALSE; Lead0_buttons.Rpt= FALSE;	

};// set_buttons_lead0_start

void set_buttons_lead0_reset_all()
{
Lead0_buttons.Mark=FALSE; Lead0_buttons.Dmy=FALSE; Lead0_buttons.Auto= FALSE; Lead0_buttons.Subtr=FALSE; Lead0_buttons.Cmpt= TRUE; 
Lead0_buttons.OvrApp= TRUE;  Lead0_buttons.OvrLds= TRUE; Lead0_buttons.GlR =FALSE; Lead0_buttons.SetLB= FALSE;
Lead0_buttons.SetLE= FALSE; Lead0_buttons.DelLI= FALSE; Lead0_buttons.Isc= FALSE; Lead0_buttons.Rate_r= FALSE;
Lead0_buttons.Cnd= FALSE; Lead0_buttons.AxS= FALSE; Lead0_buttons.Atr= FALSE;  Lead0_buttons.Exm= FALSE; Lead0_buttons.Move= FALSE;
Lead0_buttons.Del= FALSE; Lead0_buttons.DelA= FALSE; Lead0_buttons.ChAtr= FALSE; Lead0_buttons.ChAtrA= FALSE; 
Lead0_buttons.ConsLR= FALSE;
Lead0_buttons.LcRef= FALSE; Lead0_buttons.Cancel= TRUE; Lead0_buttons.Rpt= FALSE;	

};// set_buttons_lead0_reset_all

void set_buttons_lead0_setGR()
{
   Lead0_buttons.Auto_s = 1;
   Lead0_buttons.Subtr_s= 1; 

   Lead0_buttons.ConsLR_s = 1;

Lead0_buttons.Mark=TRUE;Lead0_buttons.Dmy=TRUE; Lead0_buttons.Auto= TRUE; Lead0_buttons.Subtr=TRUE; Lead0_buttons.Cmpt= TRUE; 
Lead0_buttons.OvrApp= TRUE;  Lead0_buttons.OvrLds= TRUE; Lead0_buttons.GlR =TRUE; Lead0_buttons.SetLB= TRUE;
Lead0_buttons.SetLE= TRUE; Lead0_buttons.DelLI= loc_interval_b[0].set || loc_interval_e[0].set; 
Lead0_buttons.Isc= FALSE; Lead0_buttons.Rate_r= FALSE;
Lead0_buttons.Cnd= TRUE; Lead0_buttons.AxS= TRUE; Lead0_buttons.Atr= FALSE;  Lead0_buttons.Exm= TRUE; Lead0_buttons.Move= TRUE;
Lead0_buttons.Del= TRUE; Lead0_buttons.DelA= FALSE; Lead0_buttons.ChAtr= FALSE; Lead0_buttons.ChAtrA= FALSE; 
Lead0_buttons.ConsLR=  Is_code(0,reference_act[0],0,0) || !status_consider_localref;
Lead0_buttons.LcRef= TRUE; Lead0_buttons.Cancel= FALSE; Lead0_buttons.Rpt= FALSE;	

};// set_buttons_lead0_setGR

void set_buttons_lead0_unsubtr_manual()
{

     Lead0_buttons.ConsLR_s = 1;

Lead0_buttons.Mark=TRUE;Lead0_buttons.Dmy=TRUE; Lead0_buttons.Auto= TRUE; Lead0_buttons.Subtr=TRUE; Lead0_buttons.Cmpt= TRUE; 
Lead0_buttons.OvrApp= TRUE;  Lead0_buttons.OvrLds= TRUE; Lead0_buttons.GlR =TRUE; Lead0_buttons.SetLB= TRUE;
Lead0_buttons.SetLE= TRUE; Lead0_buttons.DelLI=  loc_interval_b[0].set || loc_interval_e[0].set; 
Lead0_buttons.Isc= FALSE; Lead0_buttons.Rate_r= FALSE;
Lead0_buttons.Cnd= TRUE; Lead0_buttons.AxS= TRUE; Lead0_buttons.Atr= FALSE;  Lead0_buttons.Exm= TRUE; Lead0_buttons.Move= TRUE;
Lead0_buttons.Del= TRUE; Lead0_buttons.DelA= FALSE; Lead0_buttons.ChAtr= FALSE; Lead0_buttons.ChAtrA= FALSE; 
Lead0_buttons.ConsLR=   Is_code(0,reference_act[0],0,0) || !status_consider_localref;

Lead0_buttons.LcRef= TRUE; Lead0_buttons.Cancel= FALSE; Lead0_buttons.Rpt= FALSE;	

};// set_buttons_lead0_unsubtr_manual

void set_buttons_lead0_subtr_manual()
{
     Lead0_buttons.ConsLR_s = 1;

Lead0_buttons.Mark=TRUE;Lead0_buttons.Dmy=FALSE; Lead0_buttons.Auto= TRUE; Lead0_buttons.Subtr=TRUE; Lead0_buttons.Cmpt= TRUE; 
Lead0_buttons.OvrApp= TRUE;  Lead0_buttons.OvrLds= TRUE; Lead0_buttons.GlR =FALSE; Lead0_buttons.SetLB= TRUE;
Lead0_buttons.SetLE= TRUE; Lead0_buttons.DelLI=  loc_interval_b[0].set || loc_interval_e[0].set; 
Lead0_buttons.Isc= FALSE; Lead0_buttons.Rate_r= FALSE;
Lead0_buttons.Cnd= FALSE; Lead0_buttons.AxS= FALSE; Lead0_buttons.Atr= TRUE;  Lead0_buttons.Exm= TRUE; Lead0_buttons.Move= TRUE;
Lead0_buttons.Del= TRUE; Lead0_buttons.DelA= FALSE; Lead0_buttons.ChAtr= TRUE; Lead0_buttons.ChAtrA= FALSE; 
Lead0_buttons.ConsLR= FALSE;
Lead0_buttons.LcRef= FALSE; Lead0_buttons.Cancel= FALSE; Lead0_buttons.Rpt= FALSE;	

};// set_buttons_lead0_subtr_manual

void set_buttons_lead0_subtr_auto()
{
     Lead0_buttons.ConsLR_s = 1;

Lead0_buttons.Mark=TRUE;Lead0_buttons.Dmy=FALSE; Lead0_buttons.Auto= TRUE; Lead0_buttons.Subtr=TRUE; Lead0_buttons.Cmpt= TRUE; 
Lead0_buttons.OvrApp= TRUE;  Lead0_buttons.OvrLds= TRUE; Lead0_buttons.GlR =FALSE; Lead0_buttons.SetLB= TRUE;
Lead0_buttons.SetLE= TRUE; Lead0_buttons.DelLI= loc_interval_b[0].set || loc_interval_e[0].set;
Lead0_buttons.Isc= TRUE; Lead0_buttons.Rate_r= TRUE;
Lead0_buttons.Cnd= FALSE; Lead0_buttons.AxS= FALSE; Lead0_buttons.Atr= FALSE;  Lead0_buttons.Exm= TRUE; Lead0_buttons.Move= FALSE;
Lead0_buttons.Del= FALSE; Lead0_buttons.DelA= TRUE; Lead0_buttons.ChAtr= FALSE; Lead0_buttons.ChAtrA= TRUE; 
Lead0_buttons.ConsLR= FALSE;
Lead0_buttons.LcRef= FALSE; Lead0_buttons.Cancel= FALSE; Lead0_buttons.Rpt= FALSE;	

};// set_buttons_lead0_subtr_auto

void set_buttons_lead0_unsubtr_auto()
{

     Lead0_buttons.ConsLR_s = 1;

Lead0_buttons.Mark=TRUE;Lead0_buttons.Dmy=FALSE; Lead0_buttons.Auto= TRUE; Lead0_buttons.Subtr=TRUE; Lead0_buttons.Cmpt= TRUE; 
Lead0_buttons.OvrApp= TRUE;  Lead0_buttons.OvrLds= TRUE; Lead0_buttons.GlR =FALSE; Lead0_buttons.SetLB= TRUE;
Lead0_buttons.SetLE= TRUE; Lead0_buttons.DelLI=  loc_interval_b[0].set || loc_interval_e[0].set;
Lead0_buttons.Isc= FALSE; Lead0_buttons.Rate_r= FALSE;
Lead0_buttons.Cnd= FALSE; Lead0_buttons.AxS= FALSE; Lead0_buttons.Atr= FALSE;  Lead0_buttons.Exm= TRUE; Lead0_buttons.Move= FALSE;
Lead0_buttons.Del= FALSE; Lead0_buttons.DelA= TRUE; Lead0_buttons.ChAtr= FALSE; Lead0_buttons.ChAtrA= TRUE; 
Lead0_buttons.ConsLR= FALSE;
Lead0_buttons.LcRef= FALSE; Lead0_buttons.Cancel= FALSE; Lead0_buttons.Rpt= FALSE;	

};// set_buttons_lead0_unsubtr_auto

void set_buttons_lead0_conslr()
{

Lead0_buttons.Mark=TRUE;Lead0_buttons.Dmy=FALSE; Lead0_buttons.Auto= FALSE; Lead0_buttons.Subtr=FALSE; Lead0_buttons.Cmpt= TRUE; 
Lead0_buttons.OvrApp= TRUE;  Lead0_buttons.OvrLds= TRUE; Lead0_buttons.GlR =FALSE; Lead0_buttons.SetLB= TRUE;
Lead0_buttons.SetLE= TRUE; Lead0_buttons.DelLI=  loc_interval_b[0].set || loc_interval_e[0].set;
Lead0_buttons.Isc= FALSE; Lead0_buttons.Rate_r= FALSE;
Lead0_buttons.Cnd= FALSE; Lead0_buttons.AxS= FALSE; Lead0_buttons.Atr= FALSE;  Lead0_buttons.Exm= TRUE; Lead0_buttons.Move= FALSE;
Lead0_buttons.Del= FALSE; Lead0_buttons.DelA= FALSE; Lead0_buttons.ChAtr= FALSE; Lead0_buttons.ChAtrA= FALSE; 
 Lead0_buttons.ConsLR=   Is_code(0,reference_act[0],0,0) || !status_consider_localref;

Lead0_buttons.LcRef= FALSE; Lead0_buttons.Cancel= FALSE; Lead0_buttons.Rpt= FALSE;	

};// set_buttons_lead0_conslr

void update_marker(int leadx,long cal)
{    
    float v_isor, v_j80r, v_iso, v_j20, v_j80;

    Marker[leadx].window = 2 * current_average_window_time;
    Marker[leadx].NS=current_mean_smp;
    get_average_M();
    Marker[leadx].NL=current_nl; Marker[leadx].NR=current_nr;
     v_iso =  avr_in_avrbeat(leadx, Marker[leadx].nISO,Marker[leadx].NS);
     v_j20 =  avr_in_avrbeat(leadx,- (Marker[leadx].nJ+5),Marker[leadx].NS);
     v_j80 =  avr_in_avrbeat(leadx,- Marker[leadx].nJ80,Marker[leadx].NS);


     if ( act_reference[leadx].set ){
			v_isor =  avr_in_avrbeat_r(leadx, act_ref_data[leadx].nISO,act_ref_data[leadx].NS);
			v_j80r =  avr_in_avrbeat_r(leadx,- act_ref_data[leadx].nJ80,act_ref_data[leadx].NS);
     }
                   else {
			  v_isor=0.0;
			  v_j80r=v_j80-v_iso;
			}

    Marker[leadx].ST80 = mk_uv(v_j80 - v_iso);
    Marker[leadx].STd = mk_uv(v_j80- v_iso - (v_j80r-v_isor ));
    Marker[leadx].STsl = mk_uv(v_j80- v_j20);
    Marker[leadx].ST_sub = mk_uv(data_raw[Marker[leadx].raw_index].sub_v[leadx]);

    switch (leadx) {
    case 0:
       Marker[leadx].fine_ST80 = mk_uv(data_fin[Marker[leadx].fine_index].l0_ST80);
       Marker[leadx].raw_ST80 = mk_uv(data_raw[Marker[leadx].raw_index].l0_ST80);
       Marker[leadx].fine_ST20 = mk_uv(data_fin[Marker[leadx].fine_index].l0_ST20);
       Marker[leadx].raw_ST20 = mk_uv(data_raw[Marker[leadx].raw_index].l0_ST20);
       break;
    case 1:
       Marker[leadx].fine_ST80 = mk_uv(data_fin[Marker[leadx].fine_index].l1_ST80);
       Marker[leadx].raw_ST80 = mk_uv(data_raw[Marker[leadx].raw_index].l1_ST80);
       Marker[leadx].fine_ST20 = mk_uv(data_fin[Marker[leadx].fine_index].l1_ST20);
       Marker[leadx].raw_ST20 = mk_uv(data_raw[Marker[leadx].raw_index].l1_ST20);
       break;
    case 2:
       Marker[leadx].fine_ST80 = mk_uv(data_fin[Marker[leadx].fine_index].l2_ST80);
       Marker[leadx].raw_ST80 = mk_uv(data_raw[Marker[leadx].raw_index].l2_ST80);
       Marker[leadx].fine_ST20 = mk_uv(data_fin[Marker[leadx].fine_index].l2_ST20);
       Marker[leadx].raw_ST20 = mk_uv(data_raw[Marker[leadx].raw_index].l2_ST20);
       break;
    }

} // end update_marker

void update_global_ref(int leadx, Bool iso_j, long cal)
{    
    global_ref[leadx].window=Marker[leadx].window;

    global_ref[leadx].NS=Marker[leadx].NS;
    global_ref[leadx].NL=Marker[leadx].NL; 
    global_ref[leadx].NR=Marker[leadx].NR;
    if (iso_j ) {
      global_ref[leadx].nISO=Marker[leadx].nISO;
      global_ref[leadx].nJ=Marker[leadx].nJ;
      global_ref[leadx].nJ80=Marker[leadx].nJ80;
    }
    global_ref[leadx].ST80=Marker[leadx].ST80;
    global_ref[leadx].STd=Marker[leadx].STd;
    global_ref[leadx].STsl=Marker[leadx].STsl;
    global_ref[leadx].ST_sub=Marker[leadx].ST_sub;
          
    global_ref[leadx].fine_ST80=Marker[leadx].fine_ST80;
    global_ref[leadx].raw_ST80=Marker[leadx].raw_ST80;
    global_ref[leadx].fine_ST20=Marker[leadx].fine_ST20;
    global_ref[leadx].raw_ST20=Marker[leadx].raw_ST20;
 
} // end update_global_ref

void update_act_ann(int leadx, long indexx, Bool iso_j, long cal)
{    
float v_isor, v_j80r, v_iso, v_j20, v_j80;

  if (indexx >= 0 ) {
    references[leadx][indexx].window=Marker[leadx].window;
    references[leadx][indexx].NL=Marker[leadx].NL;
    references[leadx][indexx].NR=Marker[leadx].NR;
    references[leadx][indexx].NS=Marker[leadx].NS;
    if (iso_j ) {
      references[leadx][indexx].nISO=Marker[leadx].nISO;
      references[leadx][indexx].nJ=Marker[leadx].nJ;
      references[leadx][indexx].nJ80=Marker[leadx].nJ80;
    }

     v_iso =  avr_in_avrbeat(leadx, references[leadx][indexx].nISO,references[leadx][indexx].NS);
     v_j20 =  avr_in_avrbeat(leadx,- (references[leadx][indexx].nJ+5),references[leadx][indexx].NS);
     v_j80 =  avr_in_avrbeat(leadx,- references[leadx][indexx].nJ80,references[leadx][indexx].NS);

     if ( act_reference[leadx].set ){
		       v_isor =  avr_in_avrbeat_r(leadx, act_ref_data[leadx].nISO,act_ref_data[leadx].NS);
		       v_j80r =  avr_in_avrbeat_r(leadx,- act_ref_data[leadx].nJ80,act_ref_data[leadx].NS);
			}
                   else {  v_isor=0.0;  v_j80r=v_j80-v_iso;
		   }

    references[leadx][indexx].ST80 = mk_uv(v_j80 - v_iso);
    references[leadx][indexx].STd = mk_uv(v_j80- v_iso - (v_j80r-v_isor ));
    references[leadx][indexx].STsl = mk_uv(v_j80- v_j20);
    references[leadx][indexx].ST_sub = mk_uv(data_raw[references[leadx][indexx].raw_index].sub_v[leadx]);

    references[leadx][indexx].fine_ST80=Marker[leadx].fine_ST80;
    references[leadx][indexx].raw_ST80=Marker[leadx].raw_ST80;
    references[leadx][indexx].fine_ST20=Marker[leadx].fine_ST20;
    references[leadx][indexx].raw_ST20=Marker[leadx].raw_ST20;

  }
} // end update_act_ann
          
void set_marker_l(int leadx)
{
int vj;

    Marker[leadx].fine_HR = data_fin[Marker[leadx].fine_index].HR;
    Marker[leadx].nPB = data_fin[Marker[leadx].fine_index].nPB;
    Marker[leadx].nPE = data_fin[Marker[leadx].fine_index].nPE;
    Marker[leadx].nQ = data_fin[Marker[leadx].fine_index].nQ;

    Marker[leadx].nISO = data_fin[Marker[leadx].fine_index].nISO;
    Marker[leadx].nJ = data_fin[Marker[leadx].fine_index].nJ;
    current_j_m=  Marker[leadx].nJ;
    current_iso_m=  Marker[leadx].nISO;

    vj = 20;
    if ( ( Marker[leadx].fine_HR >= 100 ) && ( Marker[leadx].fine_HR < 110 )) vj=18;
    if ( ( Marker[leadx].fine_HR >= 110 ) && ( Marker[leadx].fine_HR < 120 )) vj=16;
    if   ( Marker[leadx].fine_HR >= 120 ) vj=15;
    Marker[leadx].nJ80 = Marker[leadx].nJ + vj;

    Marker[leadx].nTB = data_fin[Marker[leadx].fine_index].nTB;
    Marker[leadx].nTX = data_fin[Marker[leadx].fine_index].nTX;
    Marker[leadx].nTE = data_fin[Marker[leadx].fine_index].nTE;
    Marker[leadx].raw_HR = data_raw[Marker[leadx].raw_index].HR;

    Marker[leadx].window = 2 * current_average_window_time;
    Marker[leadx].NS=current_mean_smp;
    Marker[leadx].ST_sub = mk_uv(data_raw[Marker[leadx].raw_index].sub_v[leadx]);

    Marker[leadx].STd = mk_uv(0);

    Marker[leadx].lead=leadx; 

    switch (leadx) {
    case 0:
       Marker[0].fine_ST80 = mk_uv(data_fin[Marker[0].fine_index].l0_ST80);
       Marker[0].raw_ST80 = mk_uv(data_raw[Marker[0].raw_index].l0_ST80);
       Marker[0].fine_ST20 = mk_uv(data_fin[Marker[0].fine_index].l0_ST20);
       Marker[0].raw_ST20 = mk_uv(data_raw[Marker[0].raw_index].l0_ST20);
       break;
    case 1:
       Marker[1].fine_ST80 = mk_uv(data_fin[Marker[1].fine_index].l1_ST80);
       Marker[1].raw_ST80 = mk_uv(data_raw[Marker[1].raw_index].l1_ST80);
       Marker[1].fine_ST20 = mk_uv(data_fin[Marker[1].fine_index].l1_ST20);
       Marker[1].raw_ST20 = mk_uv(data_raw[Marker[1].raw_index].l1_ST20);
       break;
    case 2:
       Marker[2].fine_ST80 = mk_uv(data_fin[Marker[2].fine_index].l2_ST80);
       Marker[2].raw_ST80 = mk_uv(data_raw[Marker[2].raw_index].l2_ST80);
       Marker[2].fine_ST20 = mk_uv(data_fin[Marker[2].fine_index].l2_ST20);
       Marker[2].raw_ST20 = mk_uv(data_raw[Marker[2].raw_index].l2_ST20);
       break;
     } // end switch

    if (last_set_all ) { Marker[0].set = FALSE;  Marker[1].set = FALSE; Marker[2].set = FALSE;
    reference_act[0]=-1; reference_act[1]=-1; reference_act[2]=-1; x_lead =TRUE;
    switch (leadx) {
      case 0: if (lead1_data) draw_grid_lead0(1); 
	if (lead2_data) draw_grid_lead0(2); 
	break;
      case 1:  draw_grid_lead0(0); 
	if (lead2_data) draw_grid_lead0(2); 
	break;
      case 2:  
	draw_grid_lead0(0); draw_grid_lead0(1);
	break; }
}
    last_set_all= FALSE;
    
    Marker[leadx].set= TRUE;
    Marker[leadx].code1=-1; 

    data_mstime_index= data_fin[Marker[leadx].fine_index].index;

    act_reference[0].change=FALSE;
    act_reference[1].change=FALSE;
    act_reference[2].change=FALSE;
    data_new_m_read();

    update_marker(leadx,1);

} //  end set_marker_l

void set_marker_r(int leadx_op)
{
int  vj;

    Marker[0].fine_HR = data_fin[Marker[0].fine_index].HR;
    Marker[0].nPB = data_fin[Marker[0].fine_index].nPB;
    Marker[0].nPE = data_fin[Marker[0].fine_index].nPE;
    Marker[0].nQ = data_fin[Marker[0].fine_index].nQ;
    if (leadx_op == 2) {

      if (current_j_m == 0)
          Marker[0].nJ = data_fin[Marker[0].fine_index].nJ;
      else
        Marker[0].nJ=current_j_m;
      if (current_iso_m == 0)
        Marker[0].nISO = data_fin[Marker[0].fine_index].nISO;
      else
        Marker[0].nISO=current_iso_m;

    }
    else {
      Marker[0].nISO = data_fin[Marker[0].fine_index].nISO;
      Marker[0].nJ = data_fin[Marker[0].fine_index].nJ;
      current_j_m=Marker[0].nJ;
      current_iso_m=Marker[0].nISO;
    }
        vj = 20;
        if ( ( Marker[0].fine_HR >= 100 ) && ( Marker[0].fine_HR < 110 )) vj=18;
        if ( ( Marker[0].fine_HR >= 110 ) && ( Marker[0].fine_HR < 120 )) vj=16;
        if   ( Marker[0].fine_HR >= 120 ) vj=15;
    Marker[0].nJ80 = Marker[0].nJ + vj;

    Marker[0].nTB = data_fin[Marker[0].fine_index].nTB;
    Marker[0].nTX = data_fin[Marker[0].fine_index].nTX;
    Marker[0].nTE = data_fin[Marker[0].fine_index].nTE;
    Marker[0].raw_HR = data_raw[Marker[0].raw_index].HR;

    Marker[0].window = 2 * current_average_window_time;
    Marker[0].NS = current_mean_smp;

    Marker[1].copy_ref(Marker[0]);  Marker[2].copy_ref(Marker[0]); 
    Marker[1].lead=1;  Marker[2].lead=2; 

    Marker[0].fine_ST80 = mk_uv(data_fin[Marker[0].fine_index].l0_ST80);
    Marker[1].fine_ST80 = mk_uv(data_fin[Marker[0].fine_index].l1_ST80);
    Marker[2].fine_ST80 = mk_uv(data_fin[Marker[0].fine_index].l2_ST80);

    Marker[0].raw_ST80 = mk_uv(data_raw[Marker[0].raw_index].l0_ST80);
    Marker[1].raw_ST80 = mk_uv(data_raw[Marker[0].raw_index].l1_ST80);
    Marker[2].raw_ST80 = mk_uv(data_raw[Marker[0].raw_index].l2_ST80);

    Marker[0].ST_sub = mk_uv(data_raw[Marker[0].raw_index].sub_v[0]);
    Marker[1].ST_sub = mk_uv(data_raw[Marker[0].raw_index].sub_v[1]);
    Marker[2].ST_sub = mk_uv(data_raw[Marker[0].raw_index].sub_v[2]);

 
    Marker[0].fine_ST20 = mk_uv(data_fin[Marker[0].fine_index].l0_ST20);
    Marker[1].fine_ST20 = mk_uv(data_fin[Marker[0].fine_index].l1_ST20);
    Marker[2].fine_ST20 = mk_uv(data_fin[Marker[0].fine_index].l2_ST20);

    Marker[0].raw_ST20 = mk_uv(data_raw[Marker[0].raw_index].l0_ST20);
    Marker[1].raw_ST20 = mk_uv(data_raw[Marker[0].raw_index].l1_ST20);
    Marker[2].raw_ST20 = mk_uv(data_raw[Marker[0].raw_index].l2_ST20);

    Marker[0].STd = mk_uv(0); Marker[1].STd = mk_uv(0); Marker[2].STd = mk_uv(0);

    Marker[0].set= TRUE; Marker[1].set = lead1_data; Marker[2].set=lead2_data;
    Marker[0].code1=-1;  Marker[1].code1=-1;  Marker[2].code1=-1; 

    data_mstime_index= data_fin[Marker[0].fine_index].index;
    data_new_m_read(); 
    update_marker(0,2);

    if (Marker[1].set ) {update_marker(1,1003); }
    if (Marker[2].set ) {update_marker(2,2004); }

    act_reference[0].change=FALSE;
    act_reference[1].change=FALSE;
    act_reference[2].change=FALSE;

} //  end set_marker_r

void new_global_reference(int cal)
{
long i;
float off_r_0, off_r_1, off_r_2;

      off_r_0 = data_raw[Marker[0].raw_index].l0_ST80;
      off_r_1 = data_raw[Marker[1].raw_index].l1_ST80;
      off_r_2 = data_raw[Marker[2].raw_index].l2_ST80;

    for (i=0; i <= raw_last_index; i++ ){
      data_raw[i].l0_ST80 = data_raw[i].l0_ST80 - off_r_0;
      data_raw[i].l0_ST20 = data_raw[i].l0_ST20 - off_r_0;

      data_raw[i].l1_ST80 = data_raw[i].l1_ST80 - off_r_1;
      data_raw[i].l1_ST20 = data_raw[i].l1_ST20 - off_r_1;

      data_raw[i].l2_ST80 = data_raw[i].l2_ST80 - off_r_2;
      data_raw[i].l2_ST20 = data_raw[i].l2_ST20 - off_r_2;

      data_raw[i].lin_v[0] = 0.; data_raw[i].lin_v[1] = 0.; data_raw[i].lin_v[2] = 0.;
      data_raw[i].sub_v[0] = 0.; data_raw[i].sub_v[1] = 0.; data_raw[i].sub_v[2] = 0.;
    }
    for (i=0; i <= fin_last_index; i++ ){

      data_fin[i].l0_ST80 = data_fin[i].l0_ST80 - off_r_0;
      data_fin[i].l0_ST20 = data_fin[i].l0_ST20 - off_r_0;

      data_fin[i].l1_ST80 = data_fin[i].l1_ST80 - off_r_1;
      data_fin[i].l1_ST20 = data_fin[i].l1_ST20 - off_r_1;

      data_fin[i].l2_ST80 = data_fin[i].l2_ST80 - off_r_2;
      data_fin[i].l2_ST20 = data_fin[i].l2_ST20 - off_r_2;

    }

} // end  new_global_reference(void)

void sub_op0_start(void)
{
    if (!repeat_set  ) Lead0_op_begin_status.copy_button_status(Lead0_buttons);

  switch (Lead0_operation) {
  case 0: return; 
  case 1: 
    allow_l0=TRUE;
    set_buttons_lead0_reset_all(); if (!repeat_set  ) Lead0_buttons.Rpt= TRUE; set_buttons_lead0();
    break;

  case 9: 
    allow_l0=TRUE;
    set_buttons_lead0_reset_all(); set_buttons_lead0();
   break;

  }
}; // sub_op0_start

void sub_op0_exec(void)
{

long r_i;
int del_code1, del_code2, ii;
long i_r, end_i, l_b, l_e;
long GR_index,act_ind, act_ind_r;
Bool no_gr1, test, test1;
Bool refresh_all =FALSE;
Bool  no_other, no_gr2, no_other2;
long l_l_b, l_l_e;
Bool refresh;

 refresh=FALSE; x_lead=FALSE;
 switch (Lead0_operation) {
  case 0: return; 
  case 1: 
    if (IS_free(0, click_l0.raw,1)) {

    Marker[0].set=TRUE;
    Marker[0].raw_index=click_l0.raw; Marker[0].fine_index=click_l0.fine;
    allow_l0=FALSE;
    set_marker_l(0);
    draw_grid_lead0(0); 
    show_data(0, x_lead, TRUE);

    if (repeat_set  ) {
          allow_l0=TRUE;
	  set_buttons_lead0_reset_all(); set_buttons_lead0();
	}
    else  {
            Lead0_operation=0; 
	    Lead0_buttons.copy_button_status(Lead0_op_begin_status);
	    set_buttons_lead0();
	  }
    }
    else {
            Lead0_operation=0; 
	    Lead0_buttons.copy_button_status(Lead0_op_begin_status);
	    set_buttons_lead0();
	    }      
    break;

  case 9: 
    refresh_all=FALSE;

    if ( references_index[0] > -1 ) {

      for (r_i=0; (r_i < references_index[0] ) && ( click_l0.raw > references[0][r_i].raw_index); r_i++);

      	if  ( click_l0.raw !=  references[0][r_i].raw_index ) {
      	  if ((r_i <= references_index[0] ) && (r_i > 0 )){
      	    if ( (  data_raw[click_l0.raw].index-
      		    data_raw[ references[0][r_i-1].raw_index].index ) <
      	         (  data_raw[ references[0][r_i].raw_index].index -
      		    data_raw[click_l0.raw].index) ) r_i=r_i-1; 
      	  }
      	}
    if  ( abs(click_l0.x - Coor_x_l0( data_raw[ references[0][r_i].raw_index].index-TimeToIndex(diagram_time_begin_lead))) <= 7 ) {
 if ( Is_code(0,r_i,4,0) )
        if ( Is_prop_mode(0) ) last_set_all  = TRUE;
	  if ((! Is_code(0,r_i,4,0) ) OR
	      ( Is_prop_mode(0) &&

                Is_code(0,r_i,4,0))) {
	  if (last_set_all ) { Marker[1].set=FALSE; Marker[2].set=FALSE; refresh_all=TRUE;
	                       reference_act[1]=-1; reference_act[2] =-1; last_set_all=FALSE; x_lead=TRUE; }

	  Marker[0].copy_ref( references[0][r_i]);
	  Marker[0].set=TRUE;
	  current_j_m=Marker[0].nJ;
	  current_iso_m=Marker[0].nISO;

	  reference_act[0]=r_i; 
	  data_mstime_index= data_fin[Marker[0].fine_index].index;
	  act_reference[0].change=FALSE;
	  act_reference[1].change=FALSE;
	  act_reference[2].change=FALSE;
	  data_new_m_read(); 
	  update_marker(0,190);
	  }
     if (! (status_consider_localref)  && Is_code(0,r_i,0,0)  ) { 
	      act_ref_data[0].copy_ref(references[0][reference_act[0]]);
	      act_reference[0].set=TRUE;
	      act_reference[0].change=FALSE;
	      act_reference[0].typ=2; // local
	      act_reference[0].index=reference_act[0];
	      act_reference[1].change=FALSE;
	      act_reference[2].change=FALSE;

	      reference_mstime_index= data_fin[act_ref_data[0].fine_index].index;
	      data_new_r_read();
	      get_average_R();
	      update_marker(0,193);
       }

	  if (Is_code(0,r_i,4,0) ) { // dy
	  if (Is_prop_mode(0) ) {
	    last_set_all=TRUE;
	    if ( references_index[1] > -1){
	    for (r_i=0; (r_i <= references_index[1] ) && (  references[0][reference_act[0]].raw_index > references[1][r_i].raw_index); r_i++);
	    if ( (r_i <= references_index[1] ) && ( r_i > -1 )) {
	      if  (  references[0][reference_act[0]].raw_index  ==  references[1][r_i].raw_index ) {

		Marker[1].copy_ref( references[1][r_i]);
		Marker[1].set=TRUE;
		reference_act[1]=r_i; 
		update_marker(1,100190); refresh_all=TRUE; 
	      }}
	    } // end set lead1
	    if ( references_index[2] > -1){
	    for (r_i=0; (r_i <= references_index[2] ) && ( references[0][reference_act[0]].raw_index  > references[2][r_i].raw_index); r_i++);

	    if ( (r_i <= references_index[2] ) && ( r_i > -1 )) {
	      if  (  references[0][reference_act[0]].raw_index  ==  references[2][r_i].raw_index ) {

		Marker[2].copy_ref( references[2][r_i]); Marker[2].set=TRUE; reference_act[2]=r_i; 
		update_marker(2,200190); refresh_all=TRUE; 
	      }}
	    } 
	   }} 
	  draw_grid_lead0(0); 
	  if (refresh_all && lead1_data )  draw_grid_lead0(1);
	  if (refresh_all && lead2_data )  draw_grid_lead0(2);
	  show_data(0, x_lead,TRUE);
    } }

    if (fast0_center) break;

    Lead0_op_begin_status.ConsLR=   Is_code(0,reference_act[0],0,0) || !status_consider_localref;
    Lead0_buttons.copy_button_status(Lead0_op_begin_status);
    set_buttons_lead0();
    Lead0_operation=0;
    break;

  }
 refresh=FALSE;

}; // sub_op0_exec

void sub_op0_cancel(void)
{

 Lead0_buttons.copy_button_status(Lead0_op_begin_status);

 repeat_set =FALSE;
 
  switch (Lead0_operation) {
  case 0: return; 
  case 1:  
    allow_l0=FALSE;
    break;

  case 9:  
    allow_l0=FALSE;
    break;

  }

  Lead0_buttons.Cancel=FALSE;set_buttons_lead0();
  Lead0_operation=0;

}; // sub_op0_cancel

//**

void set_buttons_lead1()
{
  Bool selected;
  Bool loc_int_set;
  Bool sel_lr;
 
if (Lead1_buttons.Auto_s == 1) 
            { status_manual_mode1=TRUE; }
	  else  
	    { status_manual_mode1=FALSE;}
if (Lead1_buttons.Subtr_s == 1) 
               { xv_set(Sem_0_l_bw1.l_b_Subtr1, PANEL_LABEL_STRING, "Subtr", NULL);status_unsubtracted1 =TRUE; } 
	  else  
               { xv_set(Sem_0_l_bw1.l_b_Subtr1, PANEL_LABEL_STRING, "UnSubtr", NULL); status_unsubtracted1 =FALSE;}
if (Lead1_buttons.OvrApp_s == 1) 
               {xv_set(Sem_0_l_bw1.l_b_OvrApp1, PANEL_LABEL_STRING, "OvrApp", NULL);  ovr1_app = FALSE;}
	  else  
	       {xv_set(Sem_0_l_bw1.l_b_OvrApp1, PANEL_LABEL_STRING, "UnOvAp", NULL);  ovr1_app = TRUE;}

if (Lead1_buttons.ConsLR ){
if (Lead1_buttons.ConsLR_s == 1)
  { xv_set(Sem_0_l_bw1.l_b_ConsLR1, PANEL_LABEL_STRING, "ConsLR", NULL); status_consider_localref1 =TRUE;  
	       sel_lr=Is_code(1,reference_act[1],0,0) && status_manual_mode1 && status_unsubtracted1;} 
	   else    
	      {xv_set(Sem_0_l_bw1.l_b_ConsLR1, PANEL_LABEL_STRING, "ConsGR", NULL);  status_consider_localref1 =FALSE;
	      sel_lr=TRUE;}
}

 selected = reference_act[1] >= 0;
 if (  status_manual_mode1 && !status_unsubtracted1 && Is_code(1,reference_act[1],0,0) ) selected=FALSE; 
 loc_int_set = loc_interval_b[1].set && loc_interval_e[1].set; 

xv_set(Sem_0_l_bw1.l_b_Mark1, PANEL_INACTIVE,! Lead1_buttons.Mark,NULL);

xv_set(Sem_0_l_bw1.l_b_Subtr1, PANEL_INACTIVE,! Lead1_buttons.Subtr,NULL);
xv_set(Sem_0_l_bw1.l_b_OvrApp1, PANEL_INACTIVE,! Lead1_buttons.OvrApp,NULL);
xv_set(Sem_0_l_bw1.l_b_OvrLds_menu1, PANEL_INACTIVE,! Lead1_buttons.OvrLds,NULL);

xv_set(Sem_0_l_bw1.l_b_Exm1, PANEL_INACTIVE,! Lead1_buttons.Exm,NULL);
xv_set(Sem_0_l_bw1.l_b_ConsLR1, PANEL_INACTIVE,! (Lead1_buttons.ConsLR && sel_lr),NULL);

} // set_buttons_lead1

void set_buttons_lead1_start()
{

Lead1_buttons.Auto_s = 1; Lead1_buttons.Subtr_s=1; Lead1_buttons.OvrApp_s=1; Lead1_buttons.ConsLR_s=1;

Lead1_buttons.Mark=TRUE;Lead1_buttons.Dmy=FALSE; Lead1_buttons.Auto= FALSE; Lead1_buttons.Subtr=FALSE; Lead1_buttons.Cmpt= TRUE; 
Lead1_buttons.OvrApp= TRUE;  Lead1_buttons.OvrLds= TRUE; Lead1_buttons.GlR =TRUE; Lead1_buttons.SetLB= FALSE;
Lead1_buttons.SetLE= FALSE; Lead1_buttons.DelLI= FALSE; 
Lead1_buttons.Isc= FALSE; Lead1_buttons.Rate_r= FALSE;
Lead1_buttons.Cnd= FALSE; Lead1_buttons.AxS= FALSE; Lead1_buttons.Atr= FALSE;  Lead1_buttons.Exm= FALSE; Lead1_buttons.Move= FALSE;
Lead1_buttons.Del= FALSE; Lead1_buttons.DelA= FALSE; Lead1_buttons.ChAtr= FALSE; Lead1_buttons.ChAtrA= FALSE; 
Lead1_buttons.ConsLR= FALSE;
Lead1_buttons.LcRef= FALSE; Lead1_buttons.Cancel= FALSE; Lead1_buttons.Rpt= FALSE;	

};// set_buttons_lead1_start

void set_buttons_lead1_reset_all()
{

Lead1_buttons.Mark=FALSE; Lead1_buttons.Dmy=FALSE; Lead1_buttons.Auto= FALSE; Lead1_buttons.Subtr=FALSE; Lead1_buttons.Cmpt= TRUE; 
Lead1_buttons.OvrApp= TRUE;  Lead1_buttons.OvrLds= TRUE; Lead1_buttons.GlR =FALSE; Lead1_buttons.SetLB= FALSE;
Lead1_buttons.SetLE= FALSE; Lead1_buttons.DelLI= FALSE; Lead1_buttons.Isc= FALSE; Lead1_buttons.Rate_r= FALSE;
Lead1_buttons.Cnd= FALSE; Lead1_buttons.AxS= FALSE; Lead1_buttons.Atr= FALSE;  Lead1_buttons.Exm= FALSE; Lead1_buttons.Move= FALSE;
Lead1_buttons.Del= FALSE; Lead1_buttons.DelA= FALSE; Lead1_buttons.ChAtr= FALSE; Lead1_buttons.ChAtrA= FALSE; 
Lead1_buttons.ConsLR= FALSE;
Lead1_buttons.LcRef= FALSE; Lead1_buttons.Cancel= TRUE; Lead1_buttons.Rpt= FALSE;	

};// set_buttons_lead1_reset_all

void set_buttons_lead1_setGR()
{
   Lead1_buttons.Auto_s = 1;
   Lead1_buttons.Subtr_s= 1; 

   Lead1_buttons.ConsLR_s = 1;

Lead1_buttons.Mark=TRUE;Lead1_buttons.Dmy=TRUE; Lead1_buttons.Auto= TRUE; Lead1_buttons.Subtr=TRUE; Lead1_buttons.Cmpt= TRUE; 
Lead1_buttons.OvrApp= TRUE;  Lead1_buttons.OvrLds= TRUE; Lead1_buttons.GlR =TRUE; Lead1_buttons.SetLB= TRUE;
Lead1_buttons.SetLE= TRUE; Lead1_buttons.DelLI= loc_interval_b[1].set || loc_interval_e[1].set; 
Lead1_buttons.Isc= FALSE; Lead1_buttons.Rate_r= FALSE;
Lead1_buttons.Cnd= TRUE; Lead1_buttons.AxS= TRUE; Lead1_buttons.Atr= FALSE;  Lead1_buttons.Exm= TRUE; Lead1_buttons.Move= TRUE;
Lead1_buttons.Del= TRUE; Lead1_buttons.DelA= FALSE; Lead1_buttons.ChAtr= FALSE; Lead1_buttons.ChAtrA= FALSE; 
Lead1_buttons.ConsLR=  Is_code(1,reference_act[1],0,0) || !status_consider_localref1;
Lead1_buttons.LcRef= TRUE; Lead1_buttons.Cancel= FALSE; Lead1_buttons.Rpt= FALSE;	

};// set_buttons_lead1_setGR

void set_buttons_lead1_unsubtr_manual()
{

     Lead1_buttons.ConsLR_s = 1;

Lead1_buttons.Mark=TRUE;Lead1_buttons.Dmy=TRUE; Lead1_buttons.Auto= TRUE; Lead1_buttons.Subtr=TRUE; Lead1_buttons.Cmpt= TRUE; 
Lead1_buttons.OvrApp= TRUE;  Lead1_buttons.OvrLds= TRUE; Lead1_buttons.GlR =TRUE; Lead1_buttons.SetLB= TRUE;
Lead1_buttons.SetLE= TRUE; Lead1_buttons.DelLI=  loc_interval_b[1].set || loc_interval_e[1].set; 
Lead1_buttons.Isc= FALSE; Lead1_buttons.Rate_r= FALSE;
Lead1_buttons.Cnd= TRUE; Lead1_buttons.AxS= TRUE; Lead1_buttons.Atr= FALSE;  Lead1_buttons.Exm= TRUE; Lead1_buttons.Move= TRUE;
Lead1_buttons.Del= TRUE; Lead1_buttons.DelA= FALSE; Lead1_buttons.ChAtr= FALSE; Lead1_buttons.ChAtrA= FALSE; 
 Lead1_buttons.ConsLR=   Is_code(1,reference_act[1],0,0) || !status_consider_localref1;

Lead1_buttons.LcRef= TRUE; Lead1_buttons.Cancel= FALSE; Lead1_buttons.Rpt= FALSE;	

};// set_buttons_lead1_unsubtr_manual

void set_buttons_lead1_subtr_manual()
{
     Lead1_buttons.ConsLR_s = 1;

Lead1_buttons.Mark=TRUE;Lead1_buttons.Dmy=FALSE; Lead1_buttons.Auto= TRUE; Lead1_buttons.Subtr=TRUE; Lead1_buttons.Cmpt= TRUE; 
Lead1_buttons.OvrApp= TRUE;  Lead1_buttons.OvrLds= TRUE; Lead1_buttons.GlR =FALSE; Lead1_buttons.SetLB= TRUE;
Lead1_buttons.SetLE= TRUE; Lead1_buttons.DelLI=  loc_interval_b[1].set || loc_interval_e[1].set; 
Lead1_buttons.Isc= FALSE; Lead1_buttons.Rate_r= FALSE;
Lead1_buttons.Cnd= FALSE; Lead1_buttons.AxS= FALSE; Lead1_buttons.Atr= TRUE;  Lead1_buttons.Exm= TRUE; Lead1_buttons.Move= TRUE;
Lead1_buttons.Del= TRUE; Lead1_buttons.DelA= FALSE; Lead1_buttons.ChAtr= TRUE; Lead1_buttons.ChAtrA= FALSE; 
Lead1_buttons.ConsLR= FALSE;
Lead1_buttons.LcRef= FALSE; Lead1_buttons.Cancel= FALSE; Lead1_buttons.Rpt= FALSE;	

};// set_buttons_lead1_subtr_manual

void set_buttons_lead1_subtr_auto()
{
     Lead1_buttons.ConsLR_s = 1;

Lead1_buttons.Mark=TRUE;Lead1_buttons.Dmy=FALSE; Lead1_buttons.Auto= TRUE; Lead1_buttons.Subtr=TRUE; Lead1_buttons.Cmpt= TRUE; 
Lead1_buttons.OvrApp= TRUE;  Lead1_buttons.OvrLds= TRUE; Lead1_buttons.GlR =FALSE; Lead1_buttons.SetLB= TRUE;
Lead1_buttons.SetLE= TRUE; Lead1_buttons.DelLI= loc_interval_b[1].set || loc_interval_e[1].set;
Lead1_buttons.Isc= TRUE; Lead1_buttons.Rate_r= TRUE;
Lead1_buttons.Cnd= FALSE; Lead1_buttons.AxS= FALSE; Lead1_buttons.Atr= FALSE;  Lead1_buttons.Exm= TRUE; Lead1_buttons.Move= FALSE;
Lead1_buttons.Del= FALSE; Lead1_buttons.DelA= TRUE; Lead1_buttons.ChAtr= FALSE; Lead1_buttons.ChAtrA= TRUE; 
Lead1_buttons.ConsLR= FALSE;
Lead1_buttons.LcRef= FALSE; Lead1_buttons.Cancel= FALSE; Lead1_buttons.Rpt= FALSE;	

};// set_buttons_lead1_subtr_auto

void set_buttons_lead1_unsubtr_auto()
{
     Lead1_buttons.ConsLR_s = 1;

Lead1_buttons.Mark=TRUE;Lead1_buttons.Dmy=FALSE; Lead1_buttons.Auto= TRUE; Lead1_buttons.Subtr=TRUE; Lead1_buttons.Cmpt= TRUE; 
Lead1_buttons.OvrApp= TRUE;  Lead1_buttons.OvrLds= TRUE; Lead1_buttons.GlR =FALSE; Lead1_buttons.SetLB= TRUE;
Lead1_buttons.SetLE= TRUE; Lead1_buttons.DelLI=  loc_interval_b[1].set || loc_interval_e[1].set;
Lead1_buttons.Isc= FALSE; Lead1_buttons.Rate_r= FALSE;
Lead1_buttons.Cnd= FALSE; Lead1_buttons.AxS= FALSE; Lead1_buttons.Atr= FALSE;  Lead1_buttons.Exm= TRUE; Lead1_buttons.Move= FALSE;
Lead1_buttons.Del= FALSE; Lead1_buttons.DelA= TRUE; Lead1_buttons.ChAtr= FALSE; Lead1_buttons.ChAtrA= TRUE; 
Lead1_buttons.ConsLR= FALSE;
Lead1_buttons.LcRef= FALSE; Lead1_buttons.Cancel= FALSE; Lead1_buttons.Rpt= FALSE;	

};// set_buttons_lead1_unsubtr_auto

void set_buttons_lead1_conslr()
{

Lead1_buttons.Mark=TRUE;Lead1_buttons.Dmy=FALSE; Lead1_buttons.Auto= FALSE; Lead1_buttons.Subtr=FALSE; Lead1_buttons.Cmpt= TRUE; 
Lead1_buttons.OvrApp= TRUE;  Lead1_buttons.OvrLds= TRUE; Lead1_buttons.GlR =FALSE; Lead1_buttons.SetLB= TRUE;
Lead1_buttons.SetLE= TRUE; Lead1_buttons.DelLI=  loc_interval_b[1].set || loc_interval_e[1].set;
Lead1_buttons.Isc= FALSE; Lead1_buttons.Rate_r= FALSE;
Lead1_buttons.Cnd= FALSE; Lead1_buttons.AxS= FALSE; Lead1_buttons.Atr= FALSE;  Lead1_buttons.Exm= TRUE; Lead1_buttons.Move= FALSE;
Lead1_buttons.Del= FALSE; Lead1_buttons.DelA= FALSE; Lead1_buttons.ChAtr= FALSE; Lead1_buttons.ChAtrA= FALSE; 
Lead1_buttons.ConsLR=   Is_code(1,reference_act[1],0,0) || !status_consider_localref1;

Lead1_buttons.LcRef= FALSE; Lead1_buttons.Cancel= FALSE; Lead1_buttons.Rpt= FALSE;	

};// set_buttons_lead1_conslr

void sub_op1_start(void)
{
  if (!repeat_set1 ) Lead1_op_begin_status.copy_button_status(Lead1_buttons);

  switch (Lead1_operation) {
  case 0: return; 
  case 1: 
    allow_l1=TRUE;
    set_buttons_lead1_reset_all(); if (!repeat_set1 ) Lead1_buttons.Rpt= TRUE; set_buttons_lead1();
    break;

  case 9: 
    allow_l1=TRUE;
    set_buttons_lead1_reset_all(); set_buttons_lead1();
   break;

  }
}; // sub_op1_start

void sub_op1_exec(void)
{

long r_i;
int del_code1, del_code2, ii;
long i_r, end_i, l_b, l_e;
long GR_index,act_ind, act_ind_r;
Bool no_gr1, test, test1;
Bool refresh_all =FALSE;
Bool  no_other, no_other2, no_gr2;
long l_l_b, l_l_e;
Bool refresh=FALSE;

 refresh=FALSE; x_lead=FALSE;
 switch (Lead1_operation) {
  case 0: return; 
  case 1: 
    if (IS_free(1, click_l1.raw,1)) {
    Marker[1].set=TRUE;
    Marker[1].raw_index=click_l1.raw; Marker[1].fine_index=click_l1.fine;
    allow_l1=FALSE;
    set_marker_l(1);
    draw_grid_lead0(1); 

    show_data(1, x_lead, TRUE);

    if (repeat_set1 ) {
          allow_l1=TRUE;
	  set_buttons_lead1_reset_all(); set_buttons_lead1();
	}
    else  {
            Lead1_operation=0; 
	    Lead1_buttons.copy_button_status(Lead1_op_begin_status);
	    set_buttons_lead1();
	  }      
	}
    else  {
            Lead1_operation=0; 
	    Lead1_buttons.copy_button_status(Lead1_op_begin_status);
	    set_buttons_lead1();
	  }
    break;

  case 9: // set examine
    refresh_all =FALSE;

    if ( references_index[1] > -1 ) {

      for (r_i=0; (r_i < references_index[1] ) && ( click_l1.raw > references[1][r_i].raw_index); r_i++);

      	if  ( click_l1.raw !=  references[1][r_i].raw_index ) {
	  // find nearest ann
      	  if ((r_i <= references_index[1] ) && (r_i > 0 )){
      	    if ( (  data_raw[click_l1.raw].index-
      		    data_raw[ references[1][r_i-1].raw_index].index ) <
      	         (  data_raw[ references[1][r_i].raw_index].index -
      		    data_raw[click_l1.raw].index) ) r_i=r_i-1; 
      	  }
      	}
    if  ( abs(click_l1.x - Coor_x_l0( data_raw[ references[1][r_i].raw_index].index-TimeToIndex(diagram_time_begin_lead))) <= 7 ) {

 if ( Is_code(1,r_i,4,0) )
        if ( Is_prop_mode(1) ) last_set_all  = TRUE;

	  if ((! Is_code(1,r_i,4,0) ) OR
	    ( Is_prop_mode(1) &&
                Is_code(1,r_i,4,0))) {
	  if (last_set_all ) { Marker[0].set=FALSE; Marker[2].set=FALSE; refresh_all =TRUE;
	                        reference_act[0]=-1; reference_act[2] =-1; last_set_all=FALSE;    x_lead=TRUE; }

	  Marker[1].copy_ref( references[1][r_i]);
	  Marker[1].set=TRUE;
	  current_j_m=Marker[1].nJ;
	  current_iso_m=Marker[1].nISO;

	  reference_act[1]=r_i; 
	  data_mstime_index= data_fin[Marker[1].fine_index].index;
	  act_reference[0].change=FALSE;
	  act_reference[1].change=FALSE;
	  act_reference[2].change=FALSE;
	  data_new_m_read(); 
	  update_marker(1,190);
	  }
     if (! (status_consider_localref1)  && Is_code(1,r_i,0,0)  ) { 
	      act_ref_data[1].copy_ref(references[1][reference_act[1]]);
	      act_reference[1].set=TRUE;
	      act_reference[0].change=FALSE;
	      act_reference[1].typ=2; // local
	      act_reference[1].index=reference_act[1];
	      act_reference[1].change=FALSE;
	      act_reference[2].change=FALSE;

	      reference_mstime_index= data_fin[act_ref_data[1].fine_index].index;
	      data_new_r_read();
	      get_average_R();
	      update_marker(1,193);
       }

	  if (Is_code(1,r_i,4,0) ) { // dy
	    if( Is_prop_mode(1) ) {
	    last_set_all=TRUE;
	    if ( references_index[0] > -1){
	    for (r_i=0; (r_i <= references_index[0] ) && (  references[1][reference_act[1]].raw_index > references[0][r_i].raw_index); r_i++);

	    if ( (r_i <= references_index[0] ) && ( r_i > -1 )) {
	      if  (  references[1][reference_act[1]].raw_index  ==  references[0][r_i].raw_index ) {

		Marker[0].copy_ref( references[0][r_i]);
		Marker[0].set=TRUE;
		reference_act[0]=r_i; 
		update_marker(0,100190); refresh_all=TRUE;
	      }}
	    } 
	    if ( references_index[2] > -1){
	    for (r_i=0; (r_i <= references_index[2] ) && ( references[1][reference_act[1]].raw_index  > references[2][r_i].raw_index); r_i++);

	    if ( (r_i <= references_index[2] ) && ( r_i > -1 )) {
	      if  (  references[1][reference_act[1]].raw_index  ==  references[2][r_i].raw_index ) {

		Marker[2].copy_ref( references[2][r_i]); Marker[2].set=TRUE; reference_act[2]=r_i; 
		update_marker(2,200190); refresh_all=TRUE;
	      }}
	    }
	   }} 
	  if ( refresh_all) draw_grid_lead0(0);
	  draw_grid_lead0(1);	
	  if ( refresh_all && lead2_data ) draw_grid_lead0(2);
 	  show_data(1, x_lead, TRUE);
    } }

    if (fast1_center) break;

    Lead1_op_begin_status.ConsLR=   Is_code(1,reference_act[1],0,0) || !status_consider_localref1;
    Lead1_buttons.copy_button_status(Lead1_op_begin_status);
    set_buttons_lead1();
    Lead1_operation=0;
    break;

  }
 refresh = FALSE;

}; // sub_op1_exec

void sub_op1_cancel(void)
{

 Lead1_buttons.copy_button_status(Lead1_op_begin_status);

 repeat_set1=FALSE;
 
  switch (Lead1_operation) {
  case 0: return; 
  case 1: 
    allow_l1=FALSE;
    break;

  case 9:  // set examine
    allow_l1=FALSE;
    break;

  }

  Lead1_buttons.Cancel=FALSE;set_buttons_lead1();
  Lead1_operation=0;

}; // sub_op1_cancel

//**

void set_buttons_lead2()
{
  Bool selected;
  Bool loc_int_set;
  Bool sel_lr;

if (Lead2_buttons.Auto_s == 1) 
            { status_manual_mode2=TRUE; }
	  else  
	    { status_manual_mode2=FALSE;}
if (Lead2_buttons.Subtr_s == 1) 
               { xv_set(Sem_0_l_bw2.l_b_Subtr2, PANEL_LABEL_STRING, "Subtr", NULL);status_unsubtracted2 =TRUE; } 
	  else  
               { xv_set(Sem_0_l_bw2.l_b_Subtr2, PANEL_LABEL_STRING, "UnSubtr", NULL); status_unsubtracted2 =FALSE;}
if (Lead2_buttons.OvrApp_s == 1) 
               {xv_set(Sem_0_l_bw2.l_b_OvrApp2, PANEL_LABEL_STRING, "OvrApp", NULL);  ovr2_app = FALSE;}
	  else  
	       {xv_set(Sem_0_l_bw2.l_b_OvrApp2, PANEL_LABEL_STRING, "UnOvAp", NULL);  ovr2_app = TRUE;}

if (Lead2_buttons.ConsLR ){
if (Lead2_buttons.ConsLR_s == 1)
               { xv_set(Sem_0_l_bw2.l_b_ConsLR2, PANEL_LABEL_STRING, "ConsLR", NULL); status_consider_localref2 =TRUE;
		       sel_lr=Is_code(2,reference_act[2],0,0) && status_manual_mode2 && status_unsubtracted2;} 
            else  
               {xv_set(Sem_0_l_bw2.l_b_ConsLR2, PANEL_LABEL_STRING, "ConsGR", NULL);  status_consider_localref2 =FALSE;
	       sel_lr=TRUE;}
 }

 selected = reference_act[2] >= 0;
 if (  status_manual_mode2 && !status_unsubtracted2 && Is_code(2,reference_act[2],0,0) ) selected=FALSE; 
 loc_int_set = loc_interval_b[2].set && loc_interval_e[2].set; 

xv_set(Sem_0_l_bw2.l_b_Mark2, PANEL_INACTIVE,! Lead2_buttons.Mark,NULL);

xv_set(Sem_0_l_bw2.l_b_Subtr2, PANEL_INACTIVE,! Lead2_buttons.Subtr,NULL);
xv_set(Sem_0_l_bw2.l_b_OvrApp2, PANEL_INACTIVE,! Lead2_buttons.OvrApp,NULL);
xv_set(Sem_0_l_bw2.l_b_OvrLds_menu2, PANEL_INACTIVE,! Lead2_buttons.OvrLds,NULL);

xv_set(Sem_0_l_bw2.l_b_Exm2, PANEL_INACTIVE,! Lead2_buttons.Exm,NULL);
xv_set(Sem_0_l_bw2.l_b_ConsLR2, PANEL_INACTIVE,! (Lead2_buttons.ConsLR && sel_lr),NULL);

};// set_buttons_lead2

void set_buttons_lead2_start()
{

Lead2_buttons.Auto_s = 1; Lead2_buttons.Subtr_s=1; Lead2_buttons.OvrApp_s=1; Lead2_buttons.ConsLR_s=1;

Lead2_buttons.Mark=TRUE;Lead2_buttons.Dmy=FALSE; Lead2_buttons.Auto= FALSE; Lead2_buttons.Subtr=FALSE; Lead2_buttons.Cmpt= TRUE; 
Lead2_buttons.OvrApp= TRUE;  Lead2_buttons.OvrLds= TRUE; Lead2_buttons.GlR =TRUE; Lead2_buttons.SetLB= FALSE;
Lead2_buttons.SetLE= FALSE; Lead2_buttons.DelLI= FALSE; 
Lead2_buttons.Isc= FALSE; Lead2_buttons.Rate_r= FALSE;
Lead2_buttons.Cnd= FALSE; Lead2_buttons.AxS= FALSE; Lead2_buttons.Atr= FALSE;  Lead2_buttons.Exm= FALSE; Lead2_buttons.Move= FALSE;
Lead2_buttons.Del= FALSE; Lead2_buttons.DelA= FALSE; Lead2_buttons.ChAtr= FALSE; Lead2_buttons.ChAtrA= FALSE; 
Lead2_buttons.ConsLR= FALSE;
Lead2_buttons.LcRef= FALSE; Lead2_buttons.Cancel= FALSE; Lead2_buttons.Rpt= FALSE;	

};// set_buttons_lead2_start

void set_buttons_lead2_reset_all()
{

Lead2_buttons.Mark=FALSE; Lead2_buttons.Dmy=FALSE; Lead2_buttons.Auto= FALSE; Lead2_buttons.Subtr=FALSE; Lead2_buttons.Cmpt= TRUE; 
Lead2_buttons.OvrApp= TRUE;  Lead2_buttons.OvrLds= TRUE; Lead2_buttons.GlR =FALSE; Lead2_buttons.SetLB= FALSE;
Lead2_buttons.SetLE= FALSE; Lead2_buttons.DelLI= FALSE; Lead2_buttons.Isc= FALSE; Lead2_buttons.Rate_r= FALSE;
Lead2_buttons.Cnd= FALSE; Lead2_buttons.AxS= FALSE; Lead2_buttons.Atr= FALSE;  Lead2_buttons.Exm= FALSE; Lead2_buttons.Move= FALSE;
Lead2_buttons.Del= FALSE; Lead2_buttons.DelA= FALSE; Lead2_buttons.ChAtr= FALSE; Lead2_buttons.ChAtrA= FALSE; 
Lead2_buttons.ConsLR= FALSE;
Lead2_buttons.LcRef= FALSE; Lead2_buttons.Cancel= TRUE; Lead2_buttons.Rpt= FALSE;	

};// set_buttons_lead2_reset_all

void set_buttons_lead2_setGR()
{
   Lead2_buttons.Auto_s = 1;
   Lead2_buttons.Subtr_s= 1; 
   Lead2_buttons.ConsLR_s = 1;

Lead2_buttons.Mark=TRUE;Lead2_buttons.Dmy=TRUE; Lead2_buttons.Auto= TRUE; Lead2_buttons.Subtr=TRUE; Lead2_buttons.Cmpt= TRUE; 
Lead2_buttons.OvrApp= TRUE;  Lead2_buttons.OvrLds= TRUE; Lead2_buttons.GlR =TRUE; Lead2_buttons.SetLB= TRUE;
Lead2_buttons.SetLE= TRUE; Lead2_buttons.DelLI= loc_interval_b[2].set || loc_interval_e[2].set; 
Lead2_buttons.Isc= FALSE; Lead2_buttons.Rate_r= FALSE;
Lead2_buttons.Cnd= TRUE; Lead2_buttons.AxS= TRUE; Lead2_buttons.Atr= FALSE;  Lead2_buttons.Exm= TRUE; Lead2_buttons.Move= TRUE;
Lead2_buttons.Del= TRUE; Lead2_buttons.DelA= FALSE; Lead2_buttons.ChAtr= FALSE; Lead2_buttons.ChAtrA= FALSE; 
Lead2_buttons.ConsLR=  Is_code(2,reference_act[2],0,0) || !status_consider_localref2;
Lead2_buttons.LcRef= TRUE; Lead2_buttons.Cancel= FALSE; Lead2_buttons.Rpt= FALSE;	

};// set_buttons_lead2_setGR

void set_buttons_lead2_unsubtr_manual()
{
     Lead2_buttons.ConsLR_s = 1;

Lead2_buttons.Mark=TRUE;Lead2_buttons.Dmy=TRUE; Lead2_buttons.Auto= TRUE; Lead2_buttons.Subtr=TRUE; Lead2_buttons.Cmpt= TRUE; 
Lead2_buttons.OvrApp= TRUE;  Lead2_buttons.OvrLds= TRUE; Lead2_buttons.GlR =TRUE; Lead2_buttons.SetLB= TRUE;
Lead2_buttons.SetLE= TRUE; Lead2_buttons.DelLI=  loc_interval_b[2].set || loc_interval_e[2].set; 
Lead2_buttons.Isc= FALSE; Lead2_buttons.Rate_r= FALSE;
Lead2_buttons.Cnd= TRUE; Lead2_buttons.AxS= TRUE; Lead2_buttons.Atr= FALSE;  Lead2_buttons.Exm= TRUE; Lead2_buttons.Move= TRUE;
Lead2_buttons.Del= TRUE; Lead2_buttons.DelA= FALSE; Lead2_buttons.ChAtr= FALSE; Lead2_buttons.ChAtrA= FALSE; 
 Lead2_buttons.ConsLR=   Is_code(2,reference_act[2],0,0) || !status_consider_localref2;

Lead2_buttons.LcRef= TRUE; Lead2_buttons.Cancel= FALSE; Lead2_buttons.Rpt= FALSE;	

};// set_buttons_lead2_unsubtr_manual

void set_buttons_lead2_subtr_manual()
{
     Lead2_buttons.ConsLR_s = 1;

Lead2_buttons.Mark=TRUE;Lead2_buttons.Dmy=FALSE; Lead2_buttons.Auto= TRUE; Lead2_buttons.Subtr=TRUE; Lead2_buttons.Cmpt= TRUE; 
Lead2_buttons.OvrApp= TRUE;  Lead2_buttons.OvrLds= TRUE; Lead2_buttons.GlR =FALSE; Lead2_buttons.SetLB= TRUE;
Lead2_buttons.SetLE= TRUE; Lead2_buttons.DelLI=  loc_interval_b[2].set || loc_interval_e[2].set; 
Lead2_buttons.Isc= FALSE; Lead2_buttons.Rate_r= FALSE;
Lead2_buttons.Cnd= FALSE; Lead2_buttons.AxS= FALSE; Lead2_buttons.Atr= TRUE;  Lead2_buttons.Exm= TRUE; Lead2_buttons.Move= TRUE;
Lead2_buttons.Del= TRUE; Lead2_buttons.DelA= FALSE; Lead2_buttons.ChAtr= TRUE; Lead2_buttons.ChAtrA= FALSE; 
Lead2_buttons.ConsLR= FALSE;
Lead2_buttons.LcRef= FALSE; Lead2_buttons.Cancel= FALSE; Lead2_buttons.Rpt= FALSE;	

};// set_buttons_lead2_subtr_manual

void set_buttons_lead2_subtr_auto()
{
     Lead2_buttons.ConsLR_s = 1;

Lead2_buttons.Mark=TRUE;Lead2_buttons.Dmy=FALSE; Lead2_buttons.Auto= TRUE; Lead2_buttons.Subtr=TRUE; Lead2_buttons.Cmpt= TRUE; 
Lead2_buttons.OvrApp= TRUE;  Lead2_buttons.OvrLds= TRUE; Lead2_buttons.GlR =FALSE; Lead2_buttons.SetLB= TRUE;
Lead2_buttons.SetLE= TRUE; Lead2_buttons.DelLI= loc_interval_b[2].set || loc_interval_e[2].set;
Lead2_buttons.Isc= TRUE; Lead2_buttons.Rate_r= TRUE;
Lead2_buttons.Cnd= FALSE; Lead2_buttons.AxS= FALSE; Lead2_buttons.Atr= FALSE;  Lead2_buttons.Exm= TRUE; Lead2_buttons.Move= FALSE;
Lead2_buttons.Del= FALSE; Lead2_buttons.DelA= TRUE; Lead2_buttons.ChAtr= FALSE; Lead2_buttons.ChAtrA= TRUE; 
Lead2_buttons.ConsLR= FALSE;
Lead2_buttons.LcRef= FALSE; Lead2_buttons.Cancel= FALSE; Lead2_buttons.Rpt= FALSE;	

};// set_buttons_lead2_subtr_auto

void set_buttons_lead2_unsubtr_auto()
{
     Lead2_buttons.ConsLR_s = 1;

Lead2_buttons.Mark=TRUE;Lead2_buttons.Dmy=FALSE; Lead2_buttons.Auto= TRUE; Lead2_buttons.Subtr=TRUE; Lead2_buttons.Cmpt= TRUE; 
Lead2_buttons.OvrApp= TRUE;  Lead2_buttons.OvrLds= TRUE; Lead2_buttons.GlR =FALSE; Lead2_buttons.SetLB= TRUE;
Lead2_buttons.SetLE= TRUE; Lead2_buttons.DelLI=  loc_interval_b[2].set || loc_interval_e[2].set;
Lead2_buttons.Isc= FALSE; Lead2_buttons.Rate_r= FALSE;
Lead2_buttons.Cnd= FALSE; Lead2_buttons.AxS= FALSE; Lead2_buttons.Atr= FALSE;  Lead2_buttons.Exm= TRUE; Lead2_buttons.Move= FALSE;
Lead2_buttons.Del= FALSE; Lead2_buttons.DelA= TRUE; Lead2_buttons.ChAtr= FALSE; Lead2_buttons.ChAtrA= TRUE; 
Lead2_buttons.ConsLR= FALSE;
Lead2_buttons.LcRef= FALSE; Lead2_buttons.Cancel= FALSE; Lead2_buttons.Rpt= FALSE;	

};// set_buttons_lead2_unsubtr_auto

void set_buttons_lead2_conslr()
{

Lead2_buttons.Mark=TRUE;Lead2_buttons.Dmy=FALSE; Lead2_buttons.Auto= FALSE; Lead2_buttons.Subtr=FALSE; Lead2_buttons.Cmpt= TRUE; 
Lead2_buttons.OvrApp= TRUE;  Lead2_buttons.OvrLds= TRUE; Lead2_buttons.GlR =FALSE; Lead2_buttons.SetLB= TRUE;
Lead2_buttons.SetLE= TRUE; Lead2_buttons.DelLI=  loc_interval_b[2].set || loc_interval_e[2].set;
Lead2_buttons.Isc= FALSE; Lead2_buttons.Rate_r= FALSE;
Lead2_buttons.Cnd= FALSE; Lead2_buttons.AxS= FALSE; Lead2_buttons.Atr= FALSE;  Lead2_buttons.Exm= TRUE; Lead2_buttons.Move= FALSE;
Lead2_buttons.Del= FALSE; Lead2_buttons.DelA= FALSE; Lead2_buttons.ChAtr= FALSE; Lead2_buttons.ChAtrA= FALSE; 
Lead2_buttons.ConsLR=   Is_code(2,reference_act[2],0,0) || !status_consider_localref2;

Lead2_buttons.LcRef= FALSE; Lead2_buttons.Cancel= FALSE; Lead2_buttons.Rpt= FALSE;	

};// set_buttons_lead2_conslr

void sub_op2_start(void)
{
  if (!repeat_set2 ) Lead2_op_begin_status.copy_button_status(Lead2_buttons);

  switch (Lead2_operation) {
  case 0: return; 
  case 1: 
    allow_l2=TRUE;
    set_buttons_lead2_reset_all(); if (!repeat_set2 ) Lead2_buttons.Rpt= TRUE; set_buttons_lead2();
    break;

  case 9: // set examine
    allow_l2=TRUE;
    set_buttons_lead2_reset_all(); set_buttons_lead2();
   break;

  }

} // end sub_op2_star

void sub_op2_exec (void)
{

long r_i;
int del_code1, del_code2, ii;
long i_r, end_i, l_b, l_e;
long GR_index,act_ind, act_ind_r;
Bool no_gr1, test, test1;
Bool refresh_all=FALSE;
Bool  no_other, no_other2, no_gr2;
long l_l_b, l_l_e;
Bool refresh;

 refresh=FALSE;    x_lead=FALSE;

  switch (Lead2_operation) {
  case 0: return; 
  case 1: 
    if (IS_free(2, click_l2.raw,1)) {
    Marker[2].set=TRUE;
    Marker[2].raw_index=click_l2.raw; Marker[2].fine_index=click_l2.fine;
    allow_l2=FALSE;
    set_marker_l(2);
    draw_grid_lead0(2); 

    show_data(2, x_lead, TRUE);

    if (repeat_set2 ) {
          allow_l2=TRUE;
	  set_buttons_lead2_reset_all(); set_buttons_lead2();
	}
    else  {
            Lead2_operation=0; 
	    Lead2_buttons.copy_button_status(Lead2_op_begin_status);
	    set_buttons_lead2();
	  }
	}
    else  {
            Lead2_operation=0; 
	    Lead2_buttons.copy_button_status(Lead2_op_begin_status);
	    set_buttons_lead2();
	  }
     break;

  case 9: // set examine
    refresh_all=FALSE;
    if ( references_index[2] > -1 ) {

      for (r_i=0; (r_i < references_index[2] ) && ( click_l2.raw > references[2][r_i].raw_index); r_i++);

      	if  ( click_l2.raw !=  references[2][r_i].raw_index ) {
	  // find nearest ann
      	  if ((r_i <= references_index[2] ) && (r_i > 0 )){
      	    if ( (  data_raw[click_l2.raw].index-
      		    data_raw[ references[2][r_i-1].raw_index].index ) <
      	         (  data_raw[ references[2][r_i].raw_index].index -
      		    data_raw[click_l2.raw].index) ) r_i=r_i-1; 
      	  }
      	}

    if  ( abs(click_l2.x - Coor_x_l0( data_raw[ references[2][r_i].raw_index].index-TimeToIndex(diagram_time_begin_lead))) <= 7 ) {

 if ( Is_code(2,r_i,4,0) )
        if ( Is_prop_mode(2) ) last_set_all  = TRUE;

	  if ((! Is_code(2,r_i,4,0) ) OR
	    ( Is_prop_mode(2) &&
                Is_code(2,r_i,4,0))) {
	  if (last_set_all ) { Marker[0].set=FALSE; Marker[1].set=FALSE;refresh_all=TRUE; 
	                        reference_act[0]=-1; reference_act[1] =-1; last_set_all=FALSE;     x_lead=TRUE;}

	  Marker[2].copy_ref( references[2][r_i]);
	  Marker[2].set=TRUE;
	  current_j_m=Marker[2].nJ;
	  current_iso_m=Marker[2].nISO;

	  reference_act[2]=r_i; 
	  data_mstime_index= data_fin[Marker[2].fine_index].index;
	  act_reference[0].change=FALSE;
	  act_reference[1].change=FALSE;
	  act_reference[2].change=FALSE;
	  data_new_m_read(); 
	  update_marker(2,190);
	  }
     if (! (status_consider_localref2)  && Is_code(2,r_i,0,0)  ) { 
	      act_ref_data[2].copy_ref(references[2][reference_act[2]]);
	      act_reference[2].set=TRUE;
	      act_reference[0].change=FALSE;
	      act_reference[2].typ=2; // local
	      act_reference[2].index=reference_act[2];
	      act_reference[1].change=FALSE;
	      act_reference[2].change=FALSE;

	      reference_mstime_index= data_fin[act_ref_data[2].fine_index].index;
	      data_new_r_read();
	      get_average_R();
	      update_marker(2,193);
       }

	  if (Is_code(2,r_i,4,0) ) { // dy
	    x_lead=TRUE;
	    if( Is_prop_mode(2) ) {
	    last_set_all=TRUE;
	    if ( references_index[0] > -1){
	    for (r_i=0; (r_i <= references_index[0] ) && (  references[2][reference_act[2]].raw_index > references[0][r_i].raw_index); r_i++);

		    if ( (r_i <= references_index[0] ) && ( r_i > -1 )) {
	      if  (  references[2][reference_act[2]].raw_index  ==  references[0][r_i].raw_index ) {

		Marker[0].copy_ref( references[0][r_i]);
		Marker[0].set=TRUE;
		reference_act[0]=r_i; 
		update_marker(0,100190); refresh_all=TRUE;    set_buttons_lead0();

	      }}
	    } 
	    if ( references_index[1] > -1){
	    for (r_i=0; (r_i <= references_index[1] ) && ( references[2][reference_act[2]].raw_index  > references[1][r_i].raw_index); r_i++);
	    if ( (r_i <= references_index[1] ) && ( r_i > -1 )) {
	      if  (  references[2][reference_act[2]].raw_index  ==  references[1][r_i].raw_index ) {

		Marker[1].copy_ref( references[1][r_i]); Marker[1].set=TRUE; reference_act[1]=r_i; 
		update_marker(1,100190);     set_buttons_lead1();

	      }}
	    }
	   }} 
	  if (refresh_all) {  draw_grid_lead0(0);draw_grid_lead0(1); }
	  draw_grid_lead0(2); 	  
	  show_data(2, x_lead, TRUE);
    } }
    if (fast2_center) break;

    Lead2_op_begin_status.ConsLR=   Is_code(2,reference_act[2],0,0) || !status_consider_localref2;
    Lead2_buttons.copy_button_status(Lead2_op_begin_status);
    set_buttons_lead2();
    Lead2_operation=0;
  break;

  }
  refresh = FALSE;

} // end sub_op2_exec

void sub_op2_cancel(void)
{

 Lead2_buttons.copy_button_status(Lead2_op_begin_status);

 repeat_set2=FALSE;
 
  switch (Lead2_operation) {
  case 0: return; 
  case 1: 
    allow_l2=FALSE;
    break;

  case 9:  // set examine
    allow_l2=FALSE;
    break;

  }
  Lead2_buttons.Cancel=FALSE;set_buttons_lead2();
  Lead2_operation=0;
}

//End user functions =====================================================================================

// Destroy function
Notify_value destroy_func(Notify_client client, Destroy_status status)
{
    if (status == DESTROY_CHECKING) {
	int result;

	result = notice_prompt((Frame)client, (Event *)NULL,
		NOTICE_MESSAGE_STRINGS, "Quit ?", NULL,
				   NOTICE_BUTTON_YES, "Cancel",
				   NOTICE_BUTTON_NO, "Quit",
				   NULL);
	if (result != NOTICE_NO)
	    notify_veto_destroy(client);
    } else if (status == DESTROY_CLEANUP) {
	return notify_next_destroy_func(client, status);
    }
    return NOTIFY_DONE;
}

#ifdef MAIN

Attr_attribute	INSTANCE;

main(int argc, char **argv)
{
	//
	// Initialize XView.
	//
	xv_init(XV_INIT_ARGC_PTR_ARGV, &argc, argv, NULL);
	INSTANCE = xv_unique_key();

	//
	// Initialize user interface components.
	//

	Sem_0_m_bw.objects_initialize(0L);
	Sem_0_k_bw.objects_initialize(Sem_0_m_bw.m_bw);
	Sem_0_o_pw.objects_initialize(Sem_0_m_bw.m_bw);
	Sem_0_q_pw.objects_initialize(Sem_0_m_bw.m_bw);
	Sem_0_w_pw.objects_initialize(Sem_0_m_bw.m_bw);
	Sem_0_d_bw.objects_initialize(Sem_0_m_bw.m_bw);
	Sem_0_l_bw.objects_initialize(Sem_0_m_bw.m_bw);
	Sem_0_l_bw1.objects_initialize(Sem_0_m_bw.m_bw);
        Sem_0_l_bw2.objects_initialize(Sem_0_m_bw.m_bw);
	Sem_0_d_pw.objects_initialize(Sem_0_m_bw.m_bw);
	Sem_0_c_pw.objects_initialize(Sem_0_m_bw.m_bw);
	Sem_0_h_pw.objects_initialize(Sem_0_m_bw.m_bw);
	
        // Install the destroy_func signal handler for cleanup before quiting
        notify_interpose_destroy_func((Notify_client) Sem_0_m_bw.m_bw, (Notify_value (*)(...)) destroy_func);
	// notify_interpose_destroy_func(Sem_0_m_bw.m_bw, destroy_func);

	//
	// Turn control over to XView.
	//

        xv_main_loop(Sem_0_m_bw.m_bw);
	exit(0);
}

#endif

//
// Menu handler for `l_menu_OvrLds (Lead0)'.
//
Menu_item
l_call_OvrLds_Lead0(Menu_item item, Menu_generate op)
{
	sem_0_l_bw_objects * ip = (sem_0_l_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
		
     	switch (op) {
	case MENU_DISPLAY:
		xv_set(item, MENU_INACTIVE, TRUE, 0);
		break;

	case MENU_DISPLAY_DONE:
		break;

	case MENU_NOTIFY:

		// gxv_start_connections DO NOT EDIT THIS SECTION
		// gxv_end_connections

		break;

	case MENU_NOTIFY_DONE:
		break;
	}
	return item;
}

//
// Menu handler for `l_menu_OvrLds (Lead1)'.
//
Menu_item
l_call_OvrLds_Lead1(Menu_item item, Menu_generate op)
{
	sem_0_l_bw_objects * ip = (sem_0_l_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	switch (op) {
	case MENU_DISPLAY:
	  	if ( ovr0_l1 OR ( ! lead1_data) ) { xv_set(item, MENU_INACTIVE, TRUE, 0);
						  }
		else
		  { xv_set(item, MENU_INACTIVE, FALSE, 0);
						  }
		break;

	case MENU_DISPLAY_DONE:
		break;

	case MENU_NOTIFY:

		ovr0_l1=TRUE; draw_grid_lead0(0);
		
		// gxv_start_connections DO NOT EDIT THIS SECTION
		// gxv_end_connections

		break;

	case MENU_NOTIFY_DONE:
		break;
	}
	return item;
}

//
// Menu handler for `l_menu_OvrLds (Lead2)'.
//
Menu_item
l_call_OvrLds_Lead2(Menu_item item, Menu_generate op)
{
	sem_0_l_bw_objects * ip = (sem_0_l_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	switch (op) {
	case MENU_DISPLAY:
	  if ( ovr0_l2  OR ( ! lead2_data))  xv_set(item, MENU_INACTIVE, TRUE, 0);

		else
		  { xv_set(item, MENU_INACTIVE, FALSE, 0);
						  }
		break;

	case MENU_DISPLAY_DONE:
		break;

	case MENU_NOTIFY:

		ovr0_l2=TRUE; draw_grid_lead0(0);
		
		// gxv_start_connections DO NOT EDIT THIS SECTION
		// gxv_end_connections

		break;

	case MENU_NOTIFY_DONE:
		break;
	}
	return item;
}

//
// Menu handler for `l_menu_OvrLds (UnOvrly)'.
//
Menu_item
l_call_OvrLds_UnOvrly(Menu_item item, Menu_generate op)
{
	sem_0_l_bw_objects * ip = (sem_0_l_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	switch (op) {
	case MENU_DISPLAY:
	  if ( ovr0_l1 || ovr0_l2 )
		xv_set(item, MENU_INACTIVE, FALSE, 0);
	  else
		xv_set(item, MENU_INACTIVE, TRUE, 0);
		break;

	case MENU_DISPLAY_DONE:
		break;

	case MENU_NOTIFY:

		ovr0_l1=FALSE; ovr0_l2=FALSE; draw_grid_lead0(0);

		// gxv_start_connections DO NOT EDIT THIS SECTION
		// gxv_end_connections

		break;

	case MENU_NOTIFY_DONE:
		break;
	}
	return item;
}

//
// Menu handler for `d_menu_OvrLds (Lead0)'.
//
Menu_item
d_call_OvrLds_Lead0(Menu_item item, Menu_generate op)
{
	sem_0_d_bw_objects * ip = (sem_0_d_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	switch (op) {
	case MENU_DISPLAY:
	  if ( ( Data_lead == 0 ) OR ( data_ovr_l0 )  )  xv_set(item, MENU_INACTIVE, TRUE, 0);
	  else xv_set(item, MENU_INACTIVE, FALSE, 0);
		break;

	case MENU_DISPLAY_DONE:
		break;

	case MENU_NOTIFY:
		 
          data_ovr_l0=TRUE;

	  show_data(Data_lead,FALSE, FALSE);

		// gxv_start_connections DO NOT EDIT THIS SECTION
		// gxv_end_connections

		break;

	case MENU_NOTIFY_DONE:
		break;
	}
	return item;
}

//
// Menu handler for `d_menu_OvrLds (Lead1)'.
//
Menu_item
d_call_OvrLds_Lead1(Menu_item item, Menu_generate op)
{
	sem_0_d_bw_objects * ip = (sem_0_d_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	switch (op) {
	case MENU_DISPLAY:
  if ( Data_lead == 1  OR ( ! lead1_data) OR ( data_ovr_l1) )  xv_set(item, MENU_INACTIVE, TRUE, 0);
	  else  xv_set(item, MENU_INACTIVE, FALSE, 0);
		break;

	case MENU_DISPLAY_DONE:
		break;

	case MENU_NOTIFY:

	  data_ovr_l1=TRUE;

	  show_data(Data_lead,FALSE, FALSE);

		// gxv_start_connections DO NOT EDIT THIS SECTION
		// gxv_end_connections

		break;

	case MENU_NOTIFY_DONE:
		break;
	}
	return item;
}

//
// Menu handler for `d_menu_OvrLds (Lead2)'.
//
Menu_item
d_call_OvrLds_Lead2(Menu_item item, Menu_generate op)
{
	sem_0_d_bw_objects * ip = (sem_0_d_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	switch (op) {
	case MENU_DISPLAY:
	  if ( Data_lead == 2  OR ( ! lead2_data) OR ( data_ovr_l2)  )  xv_set(item, MENU_INACTIVE, TRUE, 0);
	  else xv_set(item, MENU_INACTIVE, FALSE, 0);
		break;

	case MENU_DISPLAY_DONE:
		break;

	case MENU_NOTIFY:

	data_ovr_l2=TRUE;
	
        show_data(Data_lead,FALSE, FALSE);
		
		// gxv_start_connections DO NOT EDIT THIS SECTION
		// gxv_end_connections

		break;

	case MENU_NOTIFY_DONE:
		break;
	}
	return item;
}

//
// Menu handler for `d_menu_OvrLds (UnOvrly)'.
//
Menu_item
d_call_OvrLds_UnOvrly(Menu_item item, Menu_generate op)
{
	sem_0_d_bw_objects * ip = (sem_0_d_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	switch (op) {
	case MENU_DISPLAY:
	  if ( 	data_ovr_l0 OR  data_ovr_l1 OR  data_ovr_l2)  
               xv_set(item, MENU_INACTIVE, FALSE, 0);
	  else xv_set(item, MENU_INACTIVE, TRUE, 0);
		break;

	case MENU_DISPLAY_DONE:
		break;

	case MENU_NOTIFY:

	data_ovr_l0=FALSE; data_ovr_l1=FALSE; data_ovr_l2=FALSE;

        data_ovrly_shift=FALSE;

	  show_data(Data_lead,FALSE, FALSE);

		// gxv_start_connections DO NOT EDIT THIS SECTION
		// gxv_end_connections

		break;

	case MENU_NOTIFY_DONE:
		break;
	}
	return item;
}

//
// Menu handler for `l_menu_OvrLds1 (Lead0)'.
//
Menu_item
l_call_OvrLds1_Lead0(Menu_item item, Menu_generate op)
{
	sem_0_l_bw1_objects * ip = (sem_0_l_bw1_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	switch (op) {
	case MENU_DISPLAY:
	  if ( ovr1_l0 ) { xv_set(item, MENU_INACTIVE, TRUE, 0);}
		else
		  { xv_set(item, MENU_INACTIVE, FALSE, 0);  }
		break;

	case MENU_DISPLAY_DONE:
		break;

	case MENU_NOTIFY:

		ovr1_l0=TRUE; draw_grid_lead0(1);
		
		// gxv_start_connections DO NOT EDIT THIS SECTION
		// gxv_end_connections

		break;

	case MENU_NOTIFY_DONE:
		break;
	}
	return item;
}

//
// Menu handler for `l_menu_OvrLds1 (Lead1)'.
//
Menu_item
l_call_OvrLds1_Lead1(Menu_item item, Menu_generate op)
{
	sem_0_l_bw1_objects * ip = (sem_0_l_bw1_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	switch (op) {
	case MENU_DISPLAY:
		xv_set(item, MENU_INACTIVE, TRUE, 0);
		break;

	case MENU_DISPLAY_DONE:
		break;

	case MENU_NOTIFY:

		// gxv_start_connections DO NOT EDIT THIS SECTION
		// gxv_end_connections

		break;

	case MENU_NOTIFY_DONE:
		break;
	}
	return item;
}

//
// Menu handler for `l_menu_OvrLds1 (Lead2)'.
//
Menu_item
l_call_OvrLds1_Lead2(Menu_item item, Menu_generate op)
{
	sem_0_l_bw1_objects * ip = (sem_0_l_bw1_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	switch (op) {
	case MENU_DISPLAY:
	  if ( ovr1_l2  OR ( ! lead2_data))  xv_set(item, MENU_INACTIVE, TRUE, 0);
      
		else
		  { xv_set(item, MENU_INACTIVE, FALSE, 0);}
		break;

	case MENU_DISPLAY_DONE:
		break;

	case MENU_NOTIFY:

		ovr1_l2=TRUE; draw_grid_lead0(1);
		
		// gxv_start_connections DO NOT EDIT THIS SECTION
		// gxv_end_connections

		break;

	case MENU_NOTIFY_DONE:
		break;
	}
	return item;
}

//
// Menu handler for `l_menu_OvrLds1 (UnOvrly)'.
//
Menu_item
l_call_OvrLds1_UnOvrly(Menu_item item, Menu_generate op)
{
	sem_0_l_bw1_objects * ip = (sem_0_l_bw1_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	switch (op) {
	case MENU_DISPLAY:
	  if ( ovr1_l0 || ovr1_l2 )
		xv_set(item, MENU_INACTIVE, FALSE, 0);
	  else
		xv_set(item, MENU_INACTIVE, TRUE, 0);
		break;

	case MENU_DISPLAY_DONE:
		break;

	case MENU_NOTIFY:

		ovr1_l0=FALSE; ovr1_l2=FALSE; draw_grid_lead0(1);
			
		// gxv_start_connections DO NOT EDIT THIS SECTION
		// gxv_end_connections

		break;

	case MENU_NOTIFY_DONE:
		break;
	}
	return item;
}

//
// Menu handler for `l_menu_OvrLds2 (Lead0)'.
//
Menu_item
l_call_OvrLds2_Lead0(Menu_item item, Menu_generate op)
{
	sem_0_l_bw2_objects * ip = (sem_0_l_bw2_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	switch (op) {
	case MENU_DISPLAY:
	  if ( ovr2_l0 ) { xv_set(item, MENU_INACTIVE, TRUE, 0);}
		else
		  { xv_set(item, MENU_INACTIVE, FALSE, 0);}
		break;

	case MENU_DISPLAY_DONE:
		break;

	case MENU_NOTIFY:

		ovr2_l0=TRUE; draw_grid_lead0(2);
		
		// gxv_start_connections DO NOT EDIT THIS SECTION
		// gxv_end_connections

		break;

	case MENU_NOTIFY_DONE:
		break;
	}
	return item;
}

//
// Menu handler for `l_menu_OvrLds2 (Lead1)'.
//
Menu_item
l_call_OvrLds2_Lead1(Menu_item item, Menu_generate op)
{
	sem_0_l_bw2_objects * ip = (sem_0_l_bw2_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	switch (op) {
	case MENU_DISPLAY:
	  	if ( ovr2_l1 OR ( ! lead1_data) ) { xv_set(item, MENU_INACTIVE, TRUE, 0);
						  }
		else
		  { xv_set(item, MENU_INACTIVE, FALSE, 0);
						  }
			break;

	case MENU_DISPLAY_DONE:
		break;

	case MENU_NOTIFY:

		 ovr2_l1=TRUE; draw_grid_lead0(2);
	
		// gxv_start_connections DO NOT EDIT THIS SECTION
		// gxv_end_connections

		break;

	case MENU_NOTIFY_DONE:
		break;
	}
	return item;
}

//
// Menu handler for `l_menu_OvrLds2 (Lead2)'.
//
Menu_item
l_call_OvrLds2_Lead2(Menu_item item, Menu_generate op)
{
	sem_0_l_bw2_objects * ip = (sem_0_l_bw2_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	switch (op) {
	case MENU_DISPLAY:
		xv_set(item, MENU_INACTIVE, TRUE, 0);
		break;

	case MENU_DISPLAY_DONE:
		break;

	case MENU_NOTIFY:

		// gxv_start_connections DO NOT EDIT THIS SECTION
		// gxv_end_connections

		break;

	case MENU_NOTIFY_DONE:
		break;
	}
	return item;
}

//
// Menu handler for `l_menu_OvrLds2 (UnOvrly)'.
//
Menu_item
l_call_OvrLds2_UnOvrly(Menu_item item, Menu_generate op)
{
	sem_0_l_bw2_objects * ip = (sem_0_l_bw2_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	switch (op) {
	case MENU_DISPLAY:
	  if ( ovr2_l1 || ovr2_l0 )
		xv_set(item, MENU_INACTIVE, FALSE, 0);
	  else
		xv_set(item, MENU_INACTIVE, TRUE, 0);
		break;

	case MENU_DISPLAY_DONE:
		break;

	case MENU_NOTIFY:

		ovr2_l1=FALSE; ovr2_l0=FALSE; draw_grid_lead0(2);
			
		// gxv_start_connections DO NOT EDIT THIS SECTION
		// gxv_end_connections

		break;

	case MENU_NOTIFY_DONE:
		break;
	}
	return item;
}

//
// Notify callback function for `m_b_Open'.
//
void
sem_0_m_bw_m_b_Open_notify_callback(Panel_item item, Event *event)
{
	sem_0_m_bw_objects *ip = (sem_0_m_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	// gxv_start_connections DO NOT EDIT THIS SECTION

	main_open_init(item, event);
	
	xv_set(Sem_0_k_bw.k_bw, XV_SHOW, FALSE, NULL);
	
	xv_set(Sem_0_o_pw.o_pw, FRAME_CMD_PUSHPIN_IN, TRUE, NULL);
	xv_set(Sem_0_o_pw.o_pw, XV_SHOW, TRUE, NULL);
	
	xv_set(Sem_0_q_pw.q_pw, FRAME_CMD_PUSHPIN_IN, FALSE, NULL);
	xv_set(Sem_0_q_pw.q_pw, XV_SHOW, FALSE, NULL);
	
	xv_set(Sem_0_w_pw.w_pw, FRAME_CMD_PUSHPIN_IN, FALSE, NULL);
	xv_set(Sem_0_w_pw.w_pw, XV_SHOW, FALSE, NULL);
	
	xv_set(Sem_0_d_bw.d_bw, XV_SHOW, FALSE, NULL);
	
	xv_set(Sem_0_l_bw.l_bw, XV_SHOW, FALSE, NULL);
	
	xv_set(Sem_0_d_pw.d_pw, FRAME_CMD_PUSHPIN_IN, FALSE, NULL);
	xv_set(Sem_0_d_pw.d_pw, XV_SHOW, FALSE, NULL);

	xv_set(Sem_0_c_pw.c_pw, FRAME_CMD_PUSHPIN_IN, FALSE, NULL);
	xv_set(Sem_0_c_pw.c_pw, XV_SHOW, FALSE, NULL);

//	xv_set(Sem_0_h_pw.h_pw, FRAME_CMD_PUSHPIN_IN, FALSE, NULL);
//	xv_set(Sem_0_h_pw.h_pw, XV_SHOW, FALSE, NULL); 

	xv_set(Sem_0_l_bw1.l_bw1, XV_SHOW, FALSE, NULL);
	
	xv_set(Sem_0_l_bw2.l_bw2, XV_SHOW, FALSE, NULL);
	
	// gxv_end_connections

}

//
// Notify callback function for `m_b_Lead0'.
//
void
init_Lead(Panel_item item, Event *event)
{
	sem_0_m_bw_objects *ip = (sem_0_m_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);

	// gxv_start_connections DO NOT EDIT THIS SECTION

	if (xv_get(Sem_0_l_bw.l_bw, FRAME_CLOSED))
		xv_set(Sem_0_l_bw.l_bw, FRAME_CLOSED, FALSE, NULL);

	xv_set(Sem_0_l_bw.l_bw, XV_SHOW, TRUE, NULL);
	
	l_ini_lcp_b(item, event);
	
	// gxv_end_connections

}

//
// Notify callback function for `m_b_Data'.
//
void
init_data(Panel_item item, Event *event)
{
	sem_0_m_bw_objects *ip = (sem_0_m_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	// gxv_start_connections DO NOT EDIT THIS SECTION

	if (xv_get(Sem_0_d_bw.d_bw, FRAME_CLOSED))
		xv_set(Sem_0_d_bw.d_bw, FRAME_CLOSED, FALSE, NULL);

	xv_set(Sem_0_d_bw.d_bw, XV_SHOW, TRUE, NULL);
	
	d_ini_cp_b(item, event);
	
	// gxv_end_connections

}

//
// Notify callback function for `m_b_Lead1'.
//
void
init_Lead1(Panel_item item, Event *event)
{
	sem_0_m_bw_objects *ip = (sem_0_m_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	// gxv_start_connections DO NOT EDIT THIS SECTION

	if (xv_get(Sem_0_l_bw1.l_bw1, FRAME_CLOSED))
		xv_set(Sem_0_l_bw1.l_bw1, FRAME_CLOSED, FALSE, NULL);

	xv_set(Sem_0_l_bw1.l_bw1, XV_SHOW, TRUE, NULL);
	
	l_ini_cp1_b(item, event);
	
	// gxv_end_connections

}

//
// Notify callback function for `m_b_KLCoeff'.
//
void
init_kl(Panel_item item, Event *event)
{
	sem_0_m_bw_objects *ip = (sem_0_m_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	// gxv_start_connections DO NOT EDIT THIS SECTION

	if (xv_get(Sem_0_k_bw.k_bw, FRAME_CLOSED))
		xv_set(Sem_0_k_bw.k_bw, FRAME_CLOSED, FALSE, NULL);

	xv_set(Sem_0_k_bw.k_bw, XV_SHOW, TRUE, NULL);
	
	k_ini_cp_b(item, event);
	
	// gxv_end_connections

}

//
// Notify callback function for `m_b_AplOp'.
//
void
apply_options(Panel_item item, Event *event)
{
	sem_0_m_bw_objects *ip = (sem_0_m_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
FILE *set_data=NULL;
char i_str1[132], i_str2[132];
int x, i, j, l;
int test=0;

	if((set_data=fopen("semia.opt","r")) != NULL )
	   {
	     l=fscanf(set_data,"%s\n",&i_str1);

	     i=0; j=0;
	     while ((i_str1[i] != ':') && ( i < 132) ) i++;
	     i++;
	     while (i_str1[i] != 0 ) { i_str2[j]=i_str1[i]; i++; j++;}
	     i_str2[j]=0;
	     x=(int)(strtod(i_str2,0));

             set_line_width=x;
	     if ((x > 0) && (x < 5) )
	       { set_line_width=x;}
	     else 
	       { test++;}

	     l=fscanf(set_data,"%s\n",&i_str1);

	     i=0; j=0;
	     while ((i_str1[i] != ':') && ( i < 132) ) i++;
	     i++;
	     while (i_str1[i] != 0 ) { set_color1[j]=i_str1[i]; i++; j++;}
	     set_color1[j]=0;
	     if (j == 0) test++;

	     l=fscanf(set_data,"%s\n",&i_str1);

	     i=0; j=0;
	     while ((i_str1[i] != ':') && ( i < 132) ) i++;
	     i++;
	     while (i_str1[i] != 0 ) { set_color2[j]=i_str1[i]; i++; j++;}  
	     set_color2[j]=0;
	     if (j == 0) test++;

	     l=fscanf(set_data,"%s\n",&i_str1);

             i=0; j=0;
	     while ((i_str1[i] != ':') && ( i < 132) ) i++;
	     i++;
	     while (i_str1[i] != 0 ) { set_color3[j]=i_str1[i]; i++; j++;}  
	     set_color3[j]=0;
	     if (j == 0) test++;

	     l=fscanf(set_data,"%s\n",&i_str1);

	     i=0; j=0;
	     while ((i_str1[i] != ':') && ( i < 132) ) i++;
	     i++;
	     while (i_str1[i] != 0 ) { set_color4[j]=i_str1[i]; i++; j++;}  
	     set_color4[j]=0;
	     if (j == 0) test++;

	     l=fscanf(set_data,"%s\n",&i_str1);

	     i=0; j=0;
	     while ((i_str1[i] != ':') && ( i < 132) ) i++;
	     i++;
	     while (i_str1[i] != 0 ) { set_color5[j]=i_str1[i]; i++; j++;}  
	     set_color5[j]=0;
	     if (j == 0) test++;

	     l=fscanf(set_data,"%s\n",&i_str1);

	     i=0; j=0;
	     while ((i_str1[i] != ':') && ( i < 132) ) i++;
	     i++;
	     while (i_str1[i] != 0 ) { set_color6[j]=i_str1[i]; i++; j++;}  
	     set_color6[j]=0;
	     if (j == 0) test++;

	if (test > 0 ){ 
	       sprintf(message1,"Incorrect options !",test);
	       sprintf(message2,"LineWidth=%d",set_line_width);
	       sprintf(message3,"%s,%s,%s,%s,%s,%s",set_color1,set_color2,set_color3,set_color4,set_color5,set_color6);
	       warning_message(3);
               }
	  }
	else
	  {
 	   sprintf(message1,"No <semia.opt> file !");
	   warning_message(1);
          }

	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections

}

//
// Notify callback function for `m_b_Quit'.
//
void
sem_0_m_bw_m_b_Quit_notify_callback(Panel_item item, Event *event)
{
	sem_0_m_bw_objects *ip = (sem_0_m_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);

	xv_set(Sem_0_m_bw.m_b_Open, PANEL_INACTIVE, FALSE, NULL);
	
	// gxv_start_connections DO NOT EDIT THIS SECTION

	xv_set(Sem_0_q_pw.q_pw, FRAME_CMD_PUSHPIN_IN, TRUE, NULL);
	xv_set(Sem_0_q_pw.q_pw, XV_SHOW, TRUE, NULL);
	
	// gxv_end_connections

}

//
// Notify callback function for `m_b_Lead2'.
//
void
init_Lead2(Panel_item item, Event *event)
{
	sem_0_m_bw_objects *ip = (sem_0_m_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	// gxv_start_connections DO NOT EDIT THIS SECTION

	if (xv_get(Sem_0_l_bw2.l_bw2, FRAME_CLOSED))
		xv_set(Sem_0_l_bw2.l_bw2, FRAME_CLOSED, FALSE, NULL);

	xv_set(Sem_0_l_bw2.l_bw2, XV_SHOW, TRUE, NULL);
	
	l_ini_cp2_b(item, event);
	
	// gxv_end_connections

}

//
// Notify callback function for `k_ss_ST'.
//
void
k_call_ST(Panel_item item, int value, Event *event)
{
	sem_0_k_bw_objects *ip = (sem_0_k_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	KL_coefficents=  value == 0 ;
	draw_grid_coeff();
	
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections

}

//
// Notify callback function for `k_ss_1std'.
//
void
k_call_1std(Panel_item item, int value, Event *event)
{
	sem_0_k_bw_objects *ip = (sem_0_k_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	switch (value){
	case 0:  ampl_c=0.1; break;
	case 1:  ampl_c=0.125; break;
	case 2:  ampl_c=0.2; break;
	case 3:  ampl_c=0.25; break;
	case 4:  ampl_c=0.5; break;
	case 5:  ampl_c=1.0; break;
	case 6:  ampl_c=2.0; break;
	case 7:  ampl_c=4.0; break;
	case 8:  ampl_c=5.0; break;
	case 9:  ampl_c=8.0; break;	
	case 10:  ampl_c=10.0; break;	
	case 11:  ampl_c=20.0; break;
      	}

	draw_grid_coeff();

	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections

}

//
// Notify callback function for `k_b_Overlay'.
//
void
k_call_Overlay(Panel_item item, Event *event)
{
	sem_0_k_bw_objects *ip = (sem_0_k_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	if ( !ovr_coef ) {
	  xv_set(Sem_0_k_bw.k_b_Overlay, PANEL_LABEL_STRING, "UnDistF", NULL);
	  ovr_coef=TRUE;
	  draw_ovrly_coeff();
	}
	else {
	  xv_set(Sem_0_k_bw.k_b_Overlay, PANEL_LABEL_STRING, "DistF", NULL);
	  ovr_coef=FALSE;
	  draw_grid_coeff();
	}

	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections

}

//
// Event callback function for `k_cp'.
//
Notify_value
sem_0_k_bw_k_cp_event_callback(Xv_window win, Event *event, Notify_arg arg, Notify_event_type type)
{
	sem_0_k_bw_objects *ip = (sem_0_k_bw_objects *) xv_get(xv_get(win, CANVAS_PAINT_CANVAS_WINDOW), XV_KEY_DATA, INSTANCE);

	// gxv_start_connections DO NOT EDIT THIS SECTION

	if (event_action(event) == ACTION_SELECT)
	{
		k_call_left(win, event, arg, type);
	}
	
	if (event_action(event) == ACTION_ADJUST)
	{
		k_call_center(win, event, arg, type);
	}
	
	if (event_action(event) == ACTION_MENU)
	{
		k_call_right(win, event, arg, type);
	}
	
	// gxv_end_connections

	return notify_next_event_func(win, (Notify_event) event, arg, type);
}

//
// User-defined action for `k_cp'.
//
void
k_call_left(Xv_window win, Event *event, Notify_arg arg, Notify_event_type type)
{
long x,y,i, dx;
long c_Time;
char pr_time[12];

	sem_0_k_bw_objects *ip = (sem_0_k_bw_objects *) xv_get(xv_get(win, CANVAS_PAINT_CANVAS_WINDOW), XV_KEY_DATA, INSTANCE);
	
        x=(event->ie_xevent)->xbutton.x ;
        if (( x < 160 ) OR (x > 1120 )) return;

        c_Time = (long)(FSAMP *(diagram_time_begin_lead+ double(x-160.0)*time_scale_0/960.0));

        i=raw_display_begin;
        while ( (c_Time > data_raw[i].index) && (i < raw_display_end) )
        {  i++; }

        dx= abs(c_Time - data_raw[i].index);

        click_c.first=! click_c.first;

        click_c.x=(event->ie_xevent)->xbutton.x;
        click_c.y=(event->ie_xevent)->xbutton.y;
        if ( click_c.first ){	

   XAllocNamedColor(k_b_display, cmap,"white", &col, & unused);
   XSetForeground(k_b_display, gckoeff, col.pixel);

   XFillRectangle( k_b_display, k_b_window, gckoeff,35,20,112,155);
   XFillRectangle(k_b_display, k_b_window, gckoeff, 40,180,90,15);

   XAllocNamedColor(k_b_display, cmap,"black", &col, & unused);
   XSetForeground(k_b_display, gckoeff, col.pixel);


   sprintf(pr_time, "%s",mstimstr(c_Time));
   XDrawString(k_b_display, k_b_window, gckoeff, 42, 190, pr_time, strlen(pr_time));

   dx= abs(c_Time - data_raw[i].index);
   if (dx == 0) {
     click_c.raw_l=i; click_c.raw_r=i; click_c.raw=i; 
   }
   else { click_c.raw_l=i-1; click_c.raw_r=i;
	  if ( dx < FSAMP / 2) { click_c.raw=i;}
	  else  { click_c.raw=i-1;}
   }
   i=click_c.raw;

  if ( KL_coefficents ) {
//        y_0=157-(double(data_raw[i].ST_f) /5.0 /ampl_c);
	sprintf(pr_buff, "%5.2f  ....................",data_raw[i].STk1/100.0);
	XDrawString(k_b_display, k_b_window, gckoeff, 40, 37, pr_buff, strlen(pr_buff));
	sprintf(pr_buff, "%5.2f  ....................",data_raw[i].STk2/100.0);
	XDrawString(k_b_display, k_b_window, gckoeff, 40, 67, pr_buff, strlen(pr_buff));
	sprintf(pr_buff, "%5.2f  ....................",data_raw[i].STk3/100.0);
	XDrawString(k_b_display, k_b_window, gckoeff, 40, 97, pr_buff, strlen(pr_buff));
	sprintf(pr_buff, "%5.2f  ....................",data_raw[i].STk4/100.0);
	XDrawString(k_b_display, k_b_window, gckoeff, 40, 127, pr_buff, strlen(pr_buff));
	if ( ovr_coef) sprintf(pr_buff, "%5.2f   Dis %5.2f",data_raw[i].STk5/100.0,data_raw[i].ST_f/100.0);
           else sprintf(pr_buff, "%5.2f  ....................",data_raw[i].STk5/100.0);
	XDrawString(k_b_display, k_b_window, gckoeff, 40, 157, pr_buff, strlen(pr_buff));
      }
    else {
//        y_0=157-(double(data_raw[i].QRS_f) /5.0 /ampl_c);
	sprintf(pr_buff, "%5.2f  ....................",data_raw[i].QRSk1/100.0);
	XDrawString(k_b_display, k_b_window, gckoeff, 40, 37, pr_buff, strlen(pr_buff));
	sprintf(pr_buff, "%5.2f  ....................",data_raw[i].QRSk2/100.0);
	XDrawString(k_b_display, k_b_window, gckoeff, 40, 67, pr_buff, strlen(pr_buff));
	sprintf(pr_buff, "%5.2f  ....................",data_raw[i].QRSk3/100.0);
	XDrawString(k_b_display, k_b_window, gckoeff, 40, 97, pr_buff, strlen(pr_buff));
	sprintf(pr_buff, "%5.2f  ....................",data_raw[i].QRSk4/100.0);
	XDrawString(k_b_display, k_b_window, gckoeff, 40, 127, pr_buff, strlen(pr_buff));
	if ( ovr_coef) sprintf(pr_buff, "%5.2f   Dis %5.2f",data_raw[i].QRSk5/100.0,data_raw[i].QRS_f/100.0);
           else sprintf(pr_buff, "%5.2f  ....................",data_raw[i].QRSk5/100.0);
	XDrawString(k_b_display, k_b_window, gckoeff, 40, 157, pr_buff, strlen(pr_buff));
     }        
             }
        else {
   XAllocNamedColor(k_b_display, cmap,"white", &col, & unused);
   XSetForeground(k_b_display, gckoeff, col.pixel);

   XFillRectangle(k_b_display, k_b_window, gckoeff, 35,20,112,155);
   XFillRectangle(k_b_display, k_b_window, gckoeff, 40,180,90,15);

   XAllocNamedColor(k_b_display, cmap,"black", &col, & unused);
   XSetForeground(k_b_display, gckoeff, col.pixel);
    if (  ovr_coef ) { 
         XDrawString(k_b_display, k_b_window, gckoeff, 35,157, "......................Dist.......",33);}
    else {XDrawString(k_b_display, k_b_window, gckoeff, 35,157,"....................................",36); }
	  XDrawString(k_b_display, k_b_window, gckoeff, 35,37, "....................................",36);
	  XDrawString(k_b_display, k_b_window, gckoeff, 35,67, "....................................",36);
	  XDrawString(k_b_display, k_b_window, gckoeff, 35,97, "....................................",36);
	  XDrawString(k_b_display, k_b_window, gckoeff, 35,127, "....................................",36);
	}
}

//
// User-defined action for `k_cp'.
//
void
k_call_center(Xv_window win, Event *event, Notify_arg arg, Notify_event_type type)
{
	sem_0_k_bw_objects *ip = (sem_0_k_bw_objects *) xv_get(xv_get(win, CANVAS_PAINT_CANVAS_WINDOW), XV_KEY_DATA, INSTANCE);

}

//
// User-defined action for `k_cp'.
//
void
k_call_right(Xv_window win, Event *event, Notify_arg arg, Notify_event_type type)
{
	sem_0_k_bw_objects *ip = (sem_0_k_bw_objects *) xv_get(xv_get(win, CANVAS_PAINT_CANVAS_WINDOW), XV_KEY_DATA, INSTANCE);

}

//
// Notify callback function for `o_file_name'.
//
Panel_setting
get_record_name(Panel_item item, Event *event)
{
	sem_0_o_pw_objects *ip = (sem_0_o_pw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	char *	value = (char *) xv_get(item, PANEL_VALUE);

	strcpy(inp_rec_name,"");
	if ((strlen(value) > 6 )|| (strlen(value) < 1 )) {  
	        sprintf(message1, "Incorrect lenght of record name ! ");
		warning_message(1);
		
		xv_set(Sem_0_m_bw.m_m_Record, PANEL_INACTIVE, FALSE, NULL);
		xv_set(Sem_0_o_pw.o_b_OK, PANEL_INACTIVE, TRUE, NULL);
				  }
	else  
	  { strcpy(inp_rec_name,value);
	   xv_set(Sem_0_m_bw.m_m_Record, PANEL_INACTIVE, FALSE, NULL);
	   xv_set(Sem_0_o_pw.o_b_OK, PANEL_INACTIVE,FALSE, NULL);		       
	  }

	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections

	return panel_text_notify(item, event);
}

//
// Notify callback function for `o_b_Cancel'.
//
void
sem_0_o_pw_o_b_Cancel_notify_callback(Panel_item item, Event *event)
{
	sem_0_o_pw_objects *ip = (sem_0_o_pw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	// gxv_start_connections DO NOT EDIT THIS SECTION

	xv_set(Sem_0_o_pw.o_pw, FRAME_CMD_PUSHPIN_IN, FALSE, NULL);
	xv_set(Sem_0_o_pw.o_pw, XV_SHOW, FALSE, NULL);
	xv_set(Sem_0_o_pw.o_b_OK, PANEL_INACTIVE, TRUE, NULL);
	
	// gxv_end_connections

}

//
// Notify callback function for `o_b_OK'.
//
void
open_input_record(Panel_item item, Event *event)
{
	sem_0_o_pw_objects *ip = (sem_0_o_pw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);

FILE *file_fin=NULL, *file_raw=NULL;
char fin_name[16], raw_name[16], backup_name[48];
int  succ;
long i,i1;
int n_data;
long hours_b=0, minutes_b=0, seconds_b=0, hour_l=0;
long hours_e=0, minutes_e=0, seconds_e=0;

     long index;
     long HR;
     float  l0_ST80,l0_ST20,
            l1_ST80,l1_ST20,
            l2_ST80,l2_ST20;
     int STk1,STk2,STk3,STk4,STk5,
            ST_f,
            QRSk1,QRSk2,QRSk3,QRSk4,QRSk5,
            QRS_f,
            nPB, nPE, nISO, nQ, nJ, nTB, nTX, nTE;

	xv_set(Sem_0_m_bw.m_m_Record, XV_SHOW, FALSE, NULL);
	
        auto_save_counter = 0;

	sprintf(fin_name,"%s_fin.dmy",inp_rec_name);
        sprintf(raw_name,"%s_raw.dmy",inp_rec_name);
	sprintf(save_name,"%s_1.sta",inp_rec_name);

        file_save=fopen(save_name,"r"); 

       	if (file_save == NULL){
	  sprintf(message1,"No <%s_1.sta> file !",inp_rec_name);
	  sprintf(message2,"",inp_rec_name);
          warning_message(2);		
	  xv_set(Sem_0_o_pw.o_b_OK, PANEL_INACTIVE, TRUE, NULL);
          return;
	}

	file_fin=fopen(fin_name,"r"); file_raw=fopen(raw_name,"r");

       	if ((file_fin == NULL) || (file_raw == NULL)){
	  sprintf(message1,"No <%s_fin.dmy> or",inp_rec_name);
	  sprintf(message2,"     <%s_raw.dmy> file !",inp_rec_name);
          warning_message(2);		
	  xv_set(Sem_0_o_pw.o_b_OK, PANEL_INACTIVE, TRUE, NULL);
          return;
	}

	if ((file_fin != NULL) && (file_raw != NULL)){
	  nsig = isigopen(inp_rec_name, DB_s, WFDB_MAXSIG);
	  if (nsig < 1 ) 
	    {
	      sprintf(message1,"No <%s.hea> or",inp_rec_name);
	      sprintf(message2,"      <%s.dat> file !",inp_rec_name);
              warning_message(2);
	      xv_set(Sem_0_o_pw.o_b_OK, PANEL_INACTIVE, TRUE, NULL);

	      return;
	    }
	  else
	    {
              sprintf(message,"Record:  %s",inp_rec_name);
	      while ( strlen(message) < 46 ) strcat(message," ");
              sprintf(message2,"( %d Lead",nsig);
	      if ( nsig > 1 ) strcat(message2,"s");
	      strcat(message,message2); strcat(message," )");
	      xv_set(Sem_0_m_bw.m_m_Record, PANEL_LABEL_STRING,message, NULL);
	      xv_set(Sem_0_m_bw.m_m_Record,XV_SHOW, TRUE, NULL);
	   
	      xv_set(Sem_0_m_bw.m_b_Data, PANEL_INACTIVE, FALSE, NULL);
	      xv_set(Sem_0_m_bw.m_b_KLCoeff, PANEL_INACTIVE, FALSE, NULL);
	      xv_set(Sem_0_m_bw.m_b_DiagData, PANEL_INACTIVE, FALSE, NULL);
	      xv_set(Sem_0_m_bw.m_b_NumEpis, PANEL_INACTIVE, FALSE, NULL);

	      xv_set(Sem_0_m_bw.m_b_Lead0, PANEL_INACTIVE, FALSE, NULL);
	      xv_set(Sem_0_m_bw.m_b_Open, PANEL_INACTIVE, TRUE, NULL);
	      lead1_data=FALSE; lead2_data=FALSE;
	      xv_set(Sem_0_m_bw.m_b_Lead1, PANEL_INACTIVE, TRUE, NULL);
	      xv_set(Sem_0_m_bw.m_b_Lead2, PANEL_INACTIVE, TRUE, NULL);
	      if (nsig > 1)  { xv_set(Sem_0_m_bw.m_b_Lead1, PANEL_INACTIVE, FALSE, NULL); lead1_data=TRUE;}
	      if (nsig > 2)  { xv_set(Sem_0_m_bw.m_b_Lead2, PANEL_INACTIVE, FALSE, NULL); lead2_data=TRUE;}

	i=0; 

	strcpy(message1,"Reading the data ...");

	xv_set(Sem_0_o_pw.o_b_Cancel, XV_SHOW, FALSE, NULL);
	xv_set(Sem_0_o_pw.o_b_OK, XV_SHOW, FALSE, NULL);
	
	while( ( n_data=fscanf(file_raw,"%ld%d%f%f%f%f%f%f%d%d%d%d%d%d%d%d%d%d%d%d",
		&index,&HR,&l0_ST80,&l1_ST80,&l2_ST80,&l0_ST20,&l1_ST20,&l2_ST20,
                &STk1,&STk2,&STk3,&STk4,&STk5,&ST_f,&QRSk1,&QRSk2,&QRSk3,&QRSk4,&QRSk5,&QRS_f) > 0) &&
	       ( i < LEN_BUFF_R ) ){
	  data_raw[i].index=index;
          data_raw[i].HR=HR;
          data_raw[i].l0_ST80=l0_ST80; data_raw[i].l0_ST20=l0_ST20;
          data_raw[i].l1_ST80=l1_ST80; data_raw[i].l1_ST20=l1_ST20;
          data_raw[i].l2_ST80=l2_ST80; data_raw[i].l2_ST20=l2_ST20;
		  if ( ALL_ONE ){
          data_raw[i].l0_ST80=l0_ST80; data_raw[i].l0_ST20=l0_ST20;
          data_raw[i].l1_ST80=l0_ST80; data_raw[i].l1_ST20=l0_ST20;
          data_raw[i].l2_ST80=l0_ST80; data_raw[i].l2_ST20=l0_ST20;
	  }
          data_raw[i].STk1=STk1; data_raw[i].STk2=STk2; data_raw[i].STk3=STk3; data_raw[i].STk4=STk4; data_raw[i].STk5=STk5;
          data_raw[i].ST_f=ST_f;
          data_raw[i].QRSk1=QRSk1; data_raw[i].QRSk2=QRSk2; data_raw[i].QRSk3=QRSk3; data_raw[i].QRSk4=QRSk4; data_raw[i].QRSk5=QRSk5;
          data_raw[i].QRS_f=QRS_f;

	  data_raw[i].lin_v[0]=0.0; data_raw[i].lin_v[1]=0.0; data_raw[i].lin_v[2]=0.0; 
	  data_raw[i].sub_v[0]=0.0; data_raw[i].sub_v[1]=0.0; data_raw[i].sub_v[2]=0.0;

	  i++;
	}
        i--;

      sprintf(message1,"Data interval:");
      time_begin_lead=IndexToTime(data_raw[0].index);
      raw_last_index=i;
      time_end_lead=IndexToTime(data_raw[i].index);
      diagram_time_begin_lead=time_begin_lead;
      TimeToHoursMinSec(time_begin_lead, &hours_b, &minutes_b, &seconds_b, &hour_l);
      TimeToHoursMinSec(time_end_lead, &hour_l, &minutes_e, &seconds_e, &hours_e);
      sprintf(message2, "[%ld:%ld:%ld - %ld:%ld:%ld]", hours_b, minutes_b, seconds_b, hours_e, minutes_e, seconds_e);
      if ( n_data > 0 ) {	 sprintf(message3,"Some data unread !"); warning_message(3); 
			       }
	      else {
                    warning_message(2);}
	} 

	i=0; 

	strcpy(message1,"Reading the data ...");

	xv_set(Sem_0_o_pw.o_b_Cancel, XV_SHOW, FALSE, NULL);
	xv_set(Sem_0_o_pw.o_b_OK, XV_SHOW, FALSE, NULL);
	
	while( ( n_data=fscanf(file_fin,"%ld%d%f%f%f%f%f%f%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d",
		&index,&HR,&l0_ST80,&l1_ST80,&l2_ST80,&l0_ST20,&l1_ST20,&l2_ST20,
                &STk1,&STk2,&STk3,&STk4,&STk5,&ST_f,&QRSk1,&QRSk2,&QRSk3,&QRSk4,&QRSk5,&QRS_f, &nPB, &nPE, &nISO, &nQ, &nJ, &nTB, &nTX, &nTE
) > 0) &&
	       ( i < LEN_BUFF_F ) ){
	  
	  data_fin[i].index=index;
          data_fin[i].HR=HR;
          data_fin[i].l0_ST80=l0_ST80; data_fin[i].l0_ST20=l0_ST20;
          data_fin[i].l1_ST80=l1_ST80; data_fin[i].l1_ST20=l1_ST20;
          data_fin[i].l2_ST80=l2_ST80; data_fin[i].l2_ST20=l2_ST20;
		  if ( ALL_ONE ){
          data_fin[i].l0_ST80=l0_ST80; data_fin[i].l0_ST20=l0_ST20;
          data_fin[i].l1_ST80=l0_ST80; data_fin[i].l1_ST20=l0_ST20;
          data_fin[i].l2_ST80=l0_ST80; data_fin[i].l2_ST20=l0_ST20;
			  }
          data_fin[i].STk1=STk1; data_fin[i].STk2=STk2; data_fin[i].STk3=STk3; data_fin[i].STk4=STk4; data_fin[i].STk5=STk5;
          data_fin[i].ST_f=ST_f;
          data_fin[i].QRSk1=QRSk1; data_fin[i].QRSk2=QRSk2; data_fin[i].QRSk3=QRSk3; data_fin[i].QRSk4=QRSk4; data_fin[i].QRSk5=QRSk5;
          data_fin[i].QRS_f=QRS_f;
          data_fin[i].nPB=nPB; data_fin[i].nPE=nPE; data_fin[i].nQ=nQ;
	  data_fin[i].nJ=nJ; data_fin[i].nTB=nTB; data_fin[i].nTX=nTX; data_fin[i].nTE=nTE; data_fin[i].nISO=nISO;

	  data_fin[i].lin_v[0]=0.0; data_fin[i].lin_v[1]=0.0; data_fin[i].lin_v[2]=0.0; 
	  data_fin[i].sub_v[0]=0.0; data_fin[i].sub_v[1]=0.0; data_fin[i].sub_v[2]=0.0;

	  i++;
	}
	 i--;

      fin_last_index=i;

      time_begin_lead=IndexToTime(data_fin[0].index);
      time_end_lead=IndexToTime(data_fin[i].index);

      TimeToHoursMinSec(time_begin_lead, &hours_b, &minutes_b, &seconds_b, &hour_l);
      TimeToHoursMinSec(time_end_lead, &hour_l, &minutes_e, &seconds_e, &hours_e);

	  while ( data_raw[raw_last_index].index > data_fin[fin_last_index].index ) raw_last_index--;
	  while ( data_raw[raw_last_index].index < data_fin[fin_last_index-1].index ) fin_last_index--;
          time_end_lead=IndexToTime(data_raw[raw_last_index].index);
	} 
	
	time_begin_lead=0;
	diagram_time_begin_lead=0;

      current_iso_m = data_fin[0].nISO; 
      current_j_m = data_fin[0].nJ;

  long  r_i, end_i;
  long GR_index,act_ind;
  int leadx;

  references_index[0]=-1;  references_index[1]=-1;  references_index[2]=-1;

  if (file_save != NULL ) { 

    reset_global_reference();
    Marker[0].set=FALSE;     Marker[1].set=FALSE;     Marker[2].set=FALSE; 

    n_data=1;
    i=0; leadx=0;
    while ( n_data > 0) {
	n_data=  fscanf(file_save,"%ld %ld %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d \n",&references[leadx][i].raw_index, &references[leadx][i].fine_index,&references[leadx][i].lead, &references[leadx][i].code1, &references[leadx][i].code2, &references[leadx][i].raw_ST80,&references[leadx][i].raw_ST20,&references[leadx][i].ST_sub, &references[leadx][i].fine_ST80,&references[leadx][i].fine_ST20,&references[leadx][i].STd,&references[leadx][i].ST80,&references[leadx][i].STsl,&references[leadx][i].raw_HR,&references[leadx][i].fine_HR,&references[leadx][i].nPB,&references[leadx][i].nPE,&references[leadx][i].nISO,&references[leadx][i].nQ,&references[leadx][i].nJ,&references[leadx][i].nJ80,&references[leadx][i].nTB,&references[leadx][i].nTX,&references[leadx][i].nTE,&references[leadx][i].window,&references[leadx][i].NL,&references[leadx][i].NR,&references[leadx][i].NS);
	
	if ((leadx == 0 ) && (references[leadx][i].lead == 1)){
	  references_index[0]= i-1;
	  references[1][0].copy_ref( references[0][i]); 
	  leadx=1;
	  i=0;
	}
	if ((leadx == 1 ) && (references[leadx][i].lead == 2)){
	  references_index[1]= i-1;
	  references[2][0].copy_ref( references[1][i]); 
	  leadx=2;
	  i=0;
	}
	i++;
	}

    references_index[leadx]= i-2;

	i=0;
	while (!Is_code(0,i,0, -1 )){
	  for (r_i=0; (data_raw[r_i].index != references[0][i].raw_index ); r_i++);
	  references[0][i].raw_index =r_i;
	  for (r_i=0; (data_fin[r_i].index != references[0][i].fine_index ) && (r_i < fin_last_index ); r_i++);
	  references[0][i].fine_index =r_i;
	  i++;
	}
	// GR
	  for (r_i=0; (data_raw[r_i].index != references[0][i].raw_index ) && (r_i < raw_last_index ); r_i++);
	  references[0][i].raw_index =r_i;
	  for (r_i=0; (data_fin[r_i].index != references[0][i].fine_index ) && (r_i < fin_last_index ); r_i++);
	  references[0][i].fine_index =r_i;
	  global_ref[0].copy_ref( references[0][i]);
	  global_ref[0].set=TRUE;
	  global_set=TRUE;

	  act_reference[0].set=TRUE;
	  act_reference[0].change=FALSE;
	  act_reference[0].typ=1; // global
	  act_reference[0].index=-1; 

	  act_reference[1].set=TRUE;
	  act_reference[1].change=FALSE;
	  act_reference[1].typ=1; // global
	  act_reference[1].index=-1; 

	  act_reference[2].set=TRUE;
	  act_reference[2].change=FALSE;
	  act_reference[2].typ=1; // global
	  act_reference[2].index=-1; 

    data_mstime_index= data_fin[global_ref[0].fine_index].index;
    reference_mstime_index= data_mstime_index;
    data_new_r_read(); 
    act_ref_data[0].copy_ref(global_ref[0]);

    new_global_reference(1);
 
    get_average_R();
    data_new_m_read();  

    global_set=TRUE;

	  for (; i < references_index[0]; i++) {
	    references[0][i].copy_ref( references[0][i+1]); 
	    for (r_i=0; (data_raw[r_i].index != references[0][i].raw_index ) && (r_i < raw_last_index ); r_i++);
	    references[0][i].raw_index =r_i;
	    for (r_i=0; (data_fin[r_i].index != references[0][i].fine_index ) && (r_i < fin_last_index ); r_i++);
	    references[0][i].fine_index =r_i;
	
	  }
	  references_index[0]=references_index[0]-1; 
	  reference_act[0]=-1; reference_act[1]=-1; reference_act[2]=-1;

	  if (references_index[1] >= 0 ) {

	i=0;
	while (!Is_code(1,i,0, -1 )){
	  for (r_i=0; (data_raw[r_i].index != references[1][i].raw_index ); r_i++);
	  references[1][i].raw_index =r_i;
	  for (r_i=0; (data_fin[r_i].index != references[1][i].fine_index ) && (r_i < fin_last_index ); r_i++);
	  references[1][i].fine_index =r_i;
	  i++;
	}

	  for (r_i=0; (data_raw[r_i].index != references[1][i].raw_index ) && (r_i < raw_last_index ); r_i++);
	  references[1][i].raw_index =r_i;
	  for (r_i=0; (data_fin[r_i].index != references[1][i].fine_index ) && (r_i < fin_last_index ); r_i++);
	  references[1][i].fine_index =r_i;
	  global_ref[1].copy_ref( references[1][i]);
	  global_ref[1].set=TRUE;
	  act_ref_data[1].copy_ref(global_ref[1]);

	  for (; i < references_index[1]; i++) {
	    references[1][i].copy_ref( references[1][i+1]); 
	    for (r_i=0; (data_raw[r_i].index != references[1][i].raw_index ) && (r_i < raw_last_index ); r_i++);
	    references[1][i].raw_index =r_i;
	    for (r_i=0; (data_fin[r_i].index != references[1][i].fine_index ) && (r_i < fin_last_index ); r_i++);
	    references[1][i].fine_index =r_i;
	
	    }
	  references_index[1]=references_index[1]-1;
	  }
  
	  if (references_index[2] >= 0 ) {

	i=0;
	while (!Is_code(2,i,0, -1 )){
	  for (r_i=0; (data_raw[r_i].index != references[2][i].raw_index ); r_i++);
	  references[2][i].raw_index =r_i;
	  for (r_i=0; (data_fin[r_i].index != references[2][i].fine_index ) && (r_i < fin_last_index ); r_i++);
	  references[2][i].fine_index =r_i;
	  i++;
	}

	  for (r_i=0; (data_raw[r_i].index != references[2][i].raw_index ) && (r_i < raw_last_index ); r_i++);
	  references[2][i].raw_index =r_i;
	  for (r_i=0; (data_fin[r_i].index != references[2][i].fine_index ) && (r_i < fin_last_index ); r_i++);
	  references[2][i].fine_index =r_i;
	  global_ref[2].copy_ref( references[2][i]);
	  global_ref[2].set=TRUE;
	  act_ref_data[2].copy_ref(global_ref[2]);

	  for (; i < references_index[2]; i++) {
	    references[2][i].copy_ref( references[2][i+1]); 
	    for (r_i=0; (data_raw[r_i].index != references[2][i].raw_index ) && (r_i < raw_last_index ); r_i++);
	    references[2][i].raw_index =r_i;
	    for (r_i=0; (data_fin[r_i].index != references[2][i].fine_index ) && (r_i < fin_last_index ); r_i++);
	    references[2][i].fine_index =r_i;
	
	    }
	  references_index[2]=references_index[2]-1;
	  }
      
	fclose(file_save);

data_mstime_index= data_fin[global_ref[0].fine_index].index;
reference_mstime_index= data_fin[global_ref[0].fine_index].index;

   xv_set(Sem_0_d_bw.d_b_OvrRef, PANEL_INACTIVE, FALSE, NULL); 

   data_new_r_read();  

   act_ref_data[0].copy_ref(global_ref[0]);
   act_ref_data[1].copy_ref(global_ref[1]);
   act_ref_data[2].copy_ref(global_ref[2]);
   Marker[0].raw_index=global_ref[0].raw_index;
   Marker[1].raw_index=global_ref[0].raw_index;
   Marker[2].raw_index=global_ref[0].raw_index;

   new_global_reference(3);
   lin_function(0);

    set_buttons_lead0_setGR();
    set_buttons_lead0();
    Lead0_operation=0;

    draw_grid_lead0(0); 

    if (lead1_data ) {
      lin_function(1);
      draw_grid_lead0(1); 
      set_buttons_lead1_setGR();
      set_buttons_lead1();
   }
     if (lead2_data ) {
      lin_function(2);
      draw_grid_lead0(2); 
      set_buttons_lead2_setGR();
      set_buttons_lead2();
   }

    show_data(Data_lead,TRUE, FALSE);
 
    int l;
    l=0;

    } // read annottations

	xv_set(Sem_0_o_pw.o_b_Cancel, XV_SHOW, TRUE, NULL);
       	xv_set(Sem_0_o_pw.o_b_OK, XV_SHOW, TRUE, NULL);
      	xv_set(Sem_0_o_pw.o_m_message1, XV_SHOW, FALSE, NULL);

	// gxv_start_connections DO NOT EDIT THIS SECTION

	xv_set(Sem_0_o_pw.o_pw, FRAME_CMD_PUSHPIN_IN, FALSE, NULL);
	xv_set(Sem_0_o_pw.o_pw, XV_SHOW, FALSE, NULL);
	
	// gxv_end_connections
}

//
// Notify callback function for `q_b_Cancel'.
//
void
sem_0_q_pw_q_b_Cancel_notify_callback(Panel_item item, Event *event)
{
	sem_0_q_pw_objects *ip = (sem_0_q_pw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	// gxv_start_connections DO NOT EDIT THIS SECTION

	xv_set(Sem_0_q_pw.q_pw, FRAME_CMD_PUSHPIN_IN, FALSE, NULL);
	xv_set(Sem_0_q_pw.q_pw, XV_SHOW, FALSE, NULL);
	
	// gxv_end_connections
}

//
// Notify callback function for `q_b_Quit'.
//
void
semia_terminate(Panel_item item, Event *event)
{
	sem_0_q_pw_objects *ip = (sem_0_q_pw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	// gxv_start_connections DO NOT EDIT THIS SECTION

	xv_set(Sem_0_o_pw.o_pw, FRAME_CMD_PUSHPIN_IN, FALSE, NULL);
	xv_set(Sem_0_o_pw.o_pw, XV_SHOW, FALSE, NULL);
	
	xv_set(Sem_0_k_bw.k_bw, XV_SHOW, FALSE, NULL);
	
	xv_set(Sem_0_m_bw.m_bw, XV_SHOW, FALSE, NULL);
	
	xv_set(Sem_0_q_pw.q_pw, FRAME_CMD_PUSHPIN_IN, FALSE, NULL);
	xv_set(Sem_0_q_pw.q_pw, XV_SHOW, FALSE, NULL);
	
	xv_set(Sem_0_w_pw.w_pw, FRAME_CMD_PUSHPIN_IN, FALSE, NULL);
	xv_set(Sem_0_w_pw.w_pw, XV_SHOW, FALSE, NULL);
	
	xv_set(Sem_0_d_bw.d_bw, XV_SHOW, FALSE, NULL);
	
	xv_set(Sem_0_l_bw.l_bw, XV_SHOW, FALSE, NULL);
	
	xv_set(Sem_0_d_pw.d_pw, FRAME_CMD_PUSHPIN_IN, FALSE, NULL);
	xv_set(Sem_0_d_pw.d_pw, XV_SHOW, FALSE, NULL);
	
	xv_set(Sem_0_c_pw.c_pw, FRAME_CMD_PUSHPIN_IN, FALSE, NULL);
	xv_set(Sem_0_c_pw.c_pw, XV_SHOW, FALSE, NULL);

	xv_set(Sem_0_h_pw.h_pw, FRAME_CMD_PUSHPIN_IN, FALSE, NULL);
	xv_set(Sem_0_h_pw.h_pw, XV_SHOW, FALSE, NULL);

	xv_set(Sem_0_l_bw1.l_bw1, XV_SHOW, FALSE, NULL);
	
	xv_set(Sem_0_l_bw2.l_bw2, XV_SHOW, FALSE, NULL);
	
	// gxv_end_connections

	exit(0);
}

//
// Notify callback function for `w_b_OK'.
//
void
sem_0_w_pw_w_b_OK_notify_callback(Panel_item item, Event *event)
{
	sem_0_w_pw_objects *ip = (sem_0_w_pw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	// gxv_start_connections DO NOT EDIT THIS SECTION

	xv_set(Sem_0_w_pw.w_pw, FRAME_CMD_PUSHPIN_IN, FALSE, NULL);
	xv_set(Sem_0_w_pw.w_pw, XV_SHOW, FALSE, NULL);
	
	// gxv_end_connections

}

//
// Notify callback function for `d_ss_16s'.
//
void
d_call_16s(Panel_item item, int value, Event *event)
{
	sem_0_d_bw_objects *ip = (sem_0_d_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	switch (value){
	case 0:   current_average_window_time= 0;   break; // single
	case 1:   current_average_window_time= 1;   break; // 2 sec
	case 2:   current_average_window_time= 2 ;   break; // 4 sec
	case 3:   current_average_window_time= 3 ;   break; // 6 sec
	case 4:   current_average_window_time= 5 ;   break; // 10 sec
	case 5:   current_average_window_time= 8 ;   break; // 16 sec  - default
	case 6:   current_average_window_time= 10 ;   break; // 20 sec
	case 7:   current_average_window_time= 15 ;   break; // 30 sec
	case 8:   current_average_window_time= 30 ;   break; // 60 sec
	case 9:   current_average_window_time= 60 ;   break; // 120 sec = 2 min
	case 10:   current_average_window_time= 90 ;   break; // 180 sec = 3 min
	case 11:   current_average_window_time= 120 ;   break; // 240 sec = 4 min
	case 12:   current_average_window_time= 150 ;   break; // 300 sec = 5 min
	}

	Marker[Data_lead].window= 2 * current_average_window_time;
 	current_average_window_index=current_average_window_time * FSAMP; // sec to index

	if ( (act_reference[0].set ) && (act_reference[0].change ) ) {
	  if ( act_reference[0].typ == 1 )  {          
	    act_ref_data[Data_lead].window=Marker[Data_lead].window;
	    get_average_R();}
	}
 
	if (  last_set_all ) {
	     Marker[0].window= 2 * current_average_window_time; update_marker(0,161);
	     if (lead1_data) {Marker[1].window= 2 * current_average_window_time;update_marker(1,100161);}
	     if (lead2_data) {Marker[2].window= 2 * current_average_window_time;update_marker(2,200161);}
	}
	else update_marker(Data_lead,25);

	if ( (act_reference[0].set ) && (act_reference[0].change ) ) {
	  if ( act_reference[0].typ == 1 )  {          
                    update_global_ref(0,TRUE,33);
                    act_ref_data[0].copy_ref(global_ref[0]); 
                    update_marker(0,34); 
						  
	     if (lead1_data) { update_global_ref(1,TRUE,10036); act_ref_data[1].copy_ref(global_ref[1]);
	                       update_marker(1,10040);  }

             if (lead2_data) { update_global_ref(2,TRUE,20038); act_ref_data[2].copy_ref(global_ref[2]); 
                               update_marker(2,20041);  }
	                                 }
	}

       if (status_consider_localref) { 
	 if ((reference_act[Data_lead] >= 0 ) && ( Marker[Data_lead].raw_index  ==  references[Data_lead][reference_act[Data_lead]].raw_index )  ){
	  if ( Is_code(Data_lead,reference_act[Data_lead],4,0) ) { // dumy 
	    update_act_ann(0, reference_act[0], TRUE,27);
	    if (lead1_data) { update_act_ann(1, reference_act[1], TRUE,10030);}
	    if (lead2_data) { update_act_ann(2, reference_act[2], TRUE,20031);}
	  }
	  else {
	    // 

	    if ( Is_code(Data_lead,reference_act[Data_lead],18,0) ) {  update_act_ann(Data_lead, reference_act[Data_lead], TRUE, 23); }
	      else
	    // 

	    update_act_ann(Data_lead, reference_act[Data_lead], FALSE,32);
	  }
	}
      	}
	show_data(Data_lead,TRUE, FALSE);

	// write_ref_data_l0();

	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections

}

//
// Notify callback function for `d_ss_520ms'.
//
void
d_call_520ms(Panel_item item, int value, Event *event)
{
	sem_0_d_bw_objects *ip = (sem_0_d_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	current_average_beat_time=200 + 80 *value ; // 200 m sec
        d_avrg_index = current_average_beat_time / ( 1000 / FSAMP ) /2 ;

       	if ( (act_reference[0].set ) && (act_reference[0].change ) ) {
	  if ( act_reference[0].typ == 1 )  {          
	    act_ref_data[Data_lead].window=Marker[Data_lead].window;
	    data_mstime_index= data_fin[Marker[Data_lead].fine_index].index;
	    reference_mstime_index= data_mstime_index;
	    data_new_r_read(); 
	    get_average_R();}
	}
 
	if (  last_set_all ) {
	     update_marker(0,162);
	     if (lead1_data) {update_marker(1,100162);}
	     if (lead2_data) {update_marker(2,200162);}
	}
	else update_marker(Data_lead,163);

	if ( (act_reference[0].set ) && (act_reference[0].change ) ) {
	  if ( act_reference[0].typ == 1 )  {          
                    update_global_ref(0,TRUE,164);
                    act_ref_data[0].copy_ref(global_ref[0]); 
                    update_marker(0,165); 
						  
	     if (lead1_data) { update_global_ref(1,TRUE,100166); act_ref_data[1].copy_ref(global_ref[1]);
	                       update_marker(1,100167);  }

             if (lead2_data) { update_global_ref(2,TRUE,200168); act_ref_data[2].copy_ref(global_ref[2]); 
                               update_marker(2,200169);  }
	                                 }
	}

       if (status_consider_localref) { 
	if (reference_act[Data_lead] >= 0 ){
	  if ( Is_code(Data_lead,reference_act[Data_lead],4,0) ) { // dumy 
	    update_act_ann(0, reference_act[0], TRUE,170);
	    if (lead1_data) { update_act_ann(1, reference_act[1], TRUE,100171);}
	    if (lead2_data) { update_act_ann(2, reference_act[2], TRUE,100172);}
	  }
	  else {
	    //

	    if ( Is_code(Data_lead,reference_act[Data_lead],18,0) ) {  update_act_ann(Data_lead, reference_act[Data_lead], TRUE, 23); }
	      else
	    // 

	    update_act_ann(Data_lead, reference_act[Data_lead], FALSE,173);

	  }
	}
       	}
	show_data(Data_lead,TRUE, FALSE);

	// write_ref_data_l0();

	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `d_ss_6s'.
//
void
d_call_6s(Panel_item item, int value, Event *event)
{
	sem_0_d_bw_objects *ip = (sem_0_d_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	switch (value){
	case 0:   data_scale= 1; data_tick=80;  break; // 80*960/1000 / 1
	case 1:   data_scale = 2; data_tick=80; break;
	case 2:   data_scale = 4; data_tick=80;break;
	case 3:   data_scale = 5; data_tick=160;break;
	case 4:  data_scale = 6; data_tick=160;break;
	case 5:  data_scale = 8; data_tick=160;break;
	case 6:  data_scale = 10; data_tick=160;break;
	case 7:  data_scale = 12; data_tick=320;break;
	case 8:  data_scale = 15; data_tick=320;break;
	case 9:  data_scale = 20; data_tick=320;break;
	case 10: data_scale = 25; data_tick=640; break;	
	case 11: data_scale = 30; data_tick=640;break;
	case 12: data_scale = 45; data_tick=1280; break;	
	case 13: data_scale = 60; data_tick=1280;break;
	} 

	data_grid_tick= data_tick * 960.0 / data_scale / 1000.0;

	show_data(Data_lead,TRUE,FALSE);
	
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `d_ss_1mV'.
//
void
d_call_1mV(Panel_item item, int value, Event *event)
{
	sem_0_d_bw_objects *ip = (sem_0_d_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	switch (value){
	case 0:   ampl_d= 50;   break; // 50 uV
	case 1:   ampl_d= 75;   break;
	case 2:   ampl_d= 100;   break;
	case 3:   ampl_d= 125;   break;
	case 4:   ampl_d= 150;   break;
	case 5:   ampl_d= 200;   break;
	case 6:   ampl_d= 250;   break;
	case 7:   ampl_d= 500;   break;
	case 8:   ampl_d= 750;   break;
	case 9:   ampl_d= 1000;   break; // default 1mV
	case 10:   ampl_d= 2000;   break;
	case 11:   ampl_d= 5000;   break;
	}

	show_data(Data_lead,TRUE,FALSE);
		
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `d_b_OvrLds_menu'.
//
void
d_call_menu_OvrLds(Panel_item item, Event *event)
{
	sem_0_d_bw_objects *ip = (sem_0_d_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
		
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `d_b_OvrRef'.
//
void
d_call_OvrRef(Panel_item item, Event *event)
{
	sem_0_d_bw_objects *ip = (sem_0_d_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	if (!data_ovr_ref ) {
	  xv_set(Sem_0_d_bw.d_b_OvrRef, PANEL_LABEL_STRING, "UnOvrRef", NULL);
	  data_ovr_ref=TRUE;
	}
	else {
	  xv_set(Sem_0_d_bw.d_b_OvrRef, PANEL_LABEL_STRING, "OvrRef", NULL);
	  data_ovr_ref=FALSE;
	}

	show_data(Data_lead,FALSE, FALSE);
	
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Event callback function for `d_cp'.
//
Notify_value
sem_0_d_bw_d_cp_event_callback(Xv_window win, Event *event, Notify_arg arg, Notify_event_type type)
{
	sem_0_d_bw_objects *ip = (sem_0_d_bw_objects *) xv_get(xv_get(win, CANVAS_PAINT_CANVAS_WINDOW), XV_KEY_DATA, INSTANCE);
	
	// gxv_start_connections DO NOT EDIT THIS SECTION

	if (event_action(event) == ACTION_SELECT)
	{
		d_call_left(win, event, arg, type);
	}
	
	if (event_action(event) == ACTION_ADJUST)
	{
		d_call_center(win, event, arg, type);
	}
	
	if (event_action(event) == ACTION_MENU)
	{
		d_call_right(win, event, arg, type);
	}
	
	// gxv_end_connections

	return notify_next_event_func(win, (Notify_event) event, arg, type);
}

//
// User-defined action for `d_cp'.
//
void
d_call_left(Xv_window win, Event *event, Notify_arg arg, Notify_event_type type)
{
	sem_0_d_bw_objects *ip = (sem_0_d_bw_objects *) xv_get(xv_get(win, CANVAS_PAINT_CANVAS_WINDOW), XV_KEY_DATA, INSTANCE);
}

//
// User-defined action for `d_cp'.
//
void
d_call_center(Xv_window win, Event *event, Notify_arg arg, Notify_event_type type)
{
	sem_0_d_bw_objects *ip = (sem_0_d_bw_objects *) xv_get(xv_get(win, CANVAS_PAINT_CANVAS_WINDOW), XV_KEY_DATA, INSTANCE);
}

//
// User-defined action for `d_cp'.
//
void
d_call_right(Xv_window win, Event *event, Notify_arg arg, Notify_event_type type)
{
	sem_0_d_bw_objects *ip = (sem_0_d_bw_objects *) xv_get(xv_get(win, CANVAS_PAINT_CANVAS_WINDOW), XV_KEY_DATA, INSTANCE);
}

//
// Notify callback function for `l_b_shift_ll'.
//
void
l_call_shift_ll(Panel_item item, Event *event)
{
	sem_0_l_bw_objects *ip = (sem_0_l_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
		
long x,y;

        y=TimeToIndex(diagram_time_begin_lead);

        if ( TimeToIndex(diagram_time_begin_lead) > TimeToIndex(time_begin_lead)) {
	  x=TimeToIndex(diagram_time_begin_lead-time_scale_0);
	  if ( x < 0 ) x=0;

	  xv_set(Sem_0_l_bw.l_b_shift_r, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_rr, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_r1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_rr1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_r2, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_rr2, PANEL_INACTIVE, FALSE, NULL);

	}
	else
	  {
	    x=0;
	     xv_set(Sem_0_l_bw.l_b_shift_ll, PANEL_INACTIVE, TRUE, NULL);
	     xv_set(Sem_0_l_bw1.l_b_shift_ll1, PANEL_INACTIVE, TRUE, NULL);
	     xv_set(Sem_0_l_bw1.l_b_shift_ll1, PANEL_INACTIVE, TRUE, NULL);

	     sprintf(message1,"You are at the beginning of data !"); 
	     warning_message(1);
	  }
	  diagram_time_begin_lead=IndexToTime(x);

	  draw_grid_lead0(0);

	  if (lead1_data )  draw_grid_lead0(1); 
	  if (lead2_data )  draw_grid_lead0(2); 
	  draw_grid_coeff();

	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_b_shift_l'.
//
void
l_call_shift_l(Panel_item item, Event *event)
{
	sem_0_l_bw_objects *ip = (sem_0_l_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
long x,y;

        y=TimeToIndex(diagram_time_begin_lead);
        if ( (x=TimeToIndex(diagram_time_begin_lead-time_scale_0/2)) >= TimeToIndex(time_begin_lead)) {

	  xv_set(Sem_0_l_bw.l_b_shift_rr, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_r, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_rr1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_r1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_rr2, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_r2, PANEL_INACTIVE, FALSE, NULL);

	}
	else
	  {
	    x=0;
       	     xv_set(Sem_0_l_bw.l_b_shift_l, PANEL_INACTIVE, TRUE, NULL);
	     xv_set(Sem_0_l_bw.l_b_shift_ll, PANEL_INACTIVE, TRUE, NULL);
       	     xv_set(Sem_0_l_bw1.l_b_shift_l1, PANEL_INACTIVE, TRUE, NULL);
	     xv_set(Sem_0_l_bw1.l_b_shift_ll1, PANEL_INACTIVE, TRUE, NULL);
       	     xv_set(Sem_0_l_bw2.l_b_shift_l2, PANEL_INACTIVE, TRUE, NULL);
	     xv_set(Sem_0_l_bw2.l_b_shift_ll2, PANEL_INACTIVE, TRUE, NULL);
	     sprintf(message1,"You are at the beginning of data !"); 
	     warning_message(1);
	  }

	  diagram_time_begin_lead=IndexToTime(x);

	  draw_grid_lead0(0);

	  if (lead1_data )  draw_grid_lead0(1); 
	  if (lead2_data )  draw_grid_lead0(2); 
	  draw_grid_coeff();	

	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_b_shift_r'.
//
void
l_call_shift_r(Panel_item item, Event *event)
{
	sem_0_l_bw_objects *ip = (sem_0_l_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
long x,y;

        y=TimeToIndex(diagram_time_begin_lead);
        if ( (x=TimeToIndex(diagram_time_begin_lead+time_scale_0/2)) <= TimeToIndex(time_end_lead)) {

	  xv_set(Sem_0_l_bw.l_b_shift_ll, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_l, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_ll1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_l1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_ll2, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_l2, PANEL_INACTIVE, FALSE, NULL);
	}
	else
	  {
            x=TimeToIndex(time_end_lead);

	    y = x % 60000;
	    if ( y  > 30000 )  { y = - (60000 -y); }
	    x=x - y;
	    if (x < 0 ) x=0;

	    xv_set(Sem_0_l_bw.l_b_shift_r, PANEL_INACTIVE, TRUE, NULL);
	    xv_set(Sem_0_l_bw.l_b_shift_rr, PANEL_INACTIVE, TRUE, NULL);
	    xv_set(Sem_0_l_bw1.l_b_shift_r1, PANEL_INACTIVE, TRUE, NULL);
	    xv_set(Sem_0_l_bw1.l_b_shift_rr1, PANEL_INACTIVE, TRUE, NULL);
	    xv_set(Sem_0_l_bw2.l_b_shift_r2, PANEL_INACTIVE, TRUE, NULL);
	    xv_set(Sem_0_l_bw2.l_b_shift_rr2, PANEL_INACTIVE, TRUE, NULL);
	     sprintf(message1,"You are at the end of data !"); 
	     warning_message(1);
	  }

	  diagram_time_begin_lead=IndexToTime(x);
	  xv_set(Sem_0_l_bw.l_b_shift_ll, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_l, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_ll1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_l1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_ll2, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_l2, PANEL_INACTIVE, FALSE, NULL);

	  draw_grid_lead0(0);
	
	  if (lead1_data )  draw_grid_lead0(1); 
	  if (lead2_data )  draw_grid_lead0(2); 
	  draw_grid_coeff();

	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_b_shift_rr'.
//
void
l_call_shift_rr(Panel_item item, Event *event)
{
	sem_0_l_bw_objects *ip = (sem_0_l_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
long x,y;

        y=TimeToIndex(diagram_time_begin_lead);
        if ( (x=TimeToIndex(diagram_time_begin_lead+time_scale_0)) <= TimeToIndex(time_end_lead)) {

	  xv_set(Sem_0_l_bw.l_b_shift_ll, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_l, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_ll1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_l1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_ll2, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_l2, PANEL_INACTIVE, FALSE, NULL);
	}
	else
	  {
            x=TimeToIndex(time_end_lead);

	    y = x % 60000;
	    if ( y  > 30000 )  { y = - (60000 -y); }
	    x=x - y;
	    if (x < 0 ) x=0;

	     xv_set(Sem_0_l_bw.l_b_shift_rr, PANEL_INACTIVE, TRUE, NULL);
	     xv_set(Sem_0_l_bw1.l_b_shift_rr1, PANEL_INACTIVE, TRUE, NULL);
	     xv_set(Sem_0_l_bw2.l_b_shift_rr2, PANEL_INACTIVE, TRUE, NULL);
	     sprintf(message1,"You are at the end of data !"); 
	     warning_message(1);
	  }

       	  diagram_time_begin_lead=IndexToTime(x);
	  xv_set(Sem_0_l_bw.l_b_shift_ll, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_l, PANEL_INACTIVE, FALSE, NULL);

	  draw_grid_lead0(0);    

	  if (lead1_data )  draw_grid_lead0(1); 
	  if (lead2_data )  draw_grid_lead0(2); 

	  draw_grid_coeff();

	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_ss_HRate'.
//
void
l_call_HRate(Panel_item item, int value, Event *event)
{
	sem_0_l_bw_objects *ip = (sem_0_l_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	reset_HR_lead0(0);

	switch (value){
	case 0:  lead0_plot_button_status.HRate=TRUE; break;
	case 1:  lead0_plot_button_status.HRRaw=TRUE;break;
	case 2:  lead0_plot_button_status.STFine=TRUE;break;
	case 3:  lead0_plot_button_status.STslFine=TRUE;break;
	case 4:  lead0_plot_button_status.STslRaw=TRUE;break;
	case 5:  lead0_plot_button_status.Episodes=TRUE;break;
	case 6:  lead0_plot_button_status.HideHR=TRUE;	break;
	case 7:  lead0_plot_button_status.ISOJ=TRUE;  break;
	case 8:  lead0_plot_button_status.HRate=TRUE; 	  
	  xv_set(Sem_0_l_bw.l_ss_HRate, PANEL_VALUE, 0, NULL);
	  break;
	case 9:  lead0_plot_button_status.HRate=TRUE; 	  
	  xv_set(Sem_0_l_bw.l_ss_HRate, PANEL_VALUE, 0, NULL);
	  break;

		} // end select
     
	draw_grid_lead0(0);

	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_ss_12min'.
//
void
l_call_12min(Panel_item item, int value, Event *event)
{
	sem_0_l_bw_objects *ip = (sem_0_l_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	switch (value){
	case 0: time_scale_0=60; break;
	case 1: time_scale_0=120; break;
	case 2: time_scale_0=180; break;
	case 3: time_scale_0=360; break;
	case 4: time_scale_0=540; break;
	case 5: time_scale_0=720; break;
	case 6: time_scale_0=1440; break;
	case 7: time_scale_0=1800; break;
	case 8: time_scale_0=3600; break;
	case 9: time_scale_0=7200; break;
	case 10: time_scale_0=14400; break;
	case 11: time_scale_0=21600; break;
	case 12: time_scale_0=43200; break;
	case 13: time_scale_0=86400; break;
	case 14: time_scale_0=172800; break;
	case 15: time_scale_0=345600; break;
	} 

   scale_time_tick=(long)(time_scale_0 / 12.0);
	  xv_set(Sem_0_l_bw.l_b_shift_ll, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_l, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_rr, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_r, PANEL_INACTIVE, FALSE, NULL);

	  xv_set(Sem_0_l_bw1.l_b_shift_ll1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_l1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_rr1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_r1, PANEL_INACTIVE, FALSE, NULL);

	  xv_set(Sem_0_l_bw2.l_b_shift_ll2, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_l2, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_rr2, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_r2, PANEL_INACTIVE, FALSE, NULL);

	 xv_set(Sem_0_l_bw1.l_ss_12min1, PANEL_VALUE,value,NULL);
	 xv_set(Sem_0_l_bw2.l_ss_12min2, PANEL_VALUE,value,NULL);
	
         draw_grid_lead0(0);

	 if (lead1_data )  draw_grid_lead0(1); 
	 if (lead2_data )  draw_grid_lead0(2); 
	  draw_grid_coeff();

	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_ss_100mV'.
//
void
l_call_100mV(Panel_item item, int value, Event *event)
{
	sem_0_l_bw_objects *ip = (sem_0_l_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	switch (value){
	case 0: ampl_0=20; break;
	case 1: ampl_0=25; break;
	case 2: ampl_0=50; break;
	case 3: ampl_0=75; break;
	case 4: ampl_0=100; break;
	case 5: ampl_0=125; break;
	case 6: ampl_0=150; break;
	case 7: ampl_0=200; break;
	case 8: ampl_0=250; break;
	case 9: ampl_0=500; break;
	case 10: ampl_0=750; break;
	case 11: ampl_0=1000; break;
	case 12: ampl_0=2000; break;
	case 13: ampl_0=5000; break;
	} 
	draw_grid_lead0(0);
	
	// gxv_start_connections DO NOT EDIT THIS SECTION

	// gxv_end_connections
}

//
// Notify callback function for `l_b_Mark'.
//
void
l_call_Mark(Panel_item item, Event *event)
{
	sem_0_l_bw_objects *ip = (sem_0_l_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	Lead0_operation=1;
	sub_op0_start();

	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}


//
// Notify callback function for `l_b_Subtr'.
//
void
l_call_Subtr(Panel_item item, Event *event)
{
	sem_0_l_bw_objects *ip = (sem_0_l_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	if ( status_unsubtracted ) {
	  Lead0_buttons.Subtr_s=2;
	  status_unsubtracted =FALSE;

          if (status_manual_mode) 
                set_buttons_lead0_subtr_manual();
          else
                set_buttons_lead0_subtr_auto();   
	}
	else {
	  Lead0_buttons.Subtr_s=1;
	  status_unsubtracted =TRUE;

          if (status_manual_mode)
                 set_buttons_lead0_unsubtr_manual();
          else
                 set_buttons_lead0_unsubtr_auto();
	}

	set_buttons_lead0(); draw_grid_lead0(0); 
		
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_b_OvrApp'.
//
void
l_call_OvrApp(Panel_item item, Event *event)
{
	sem_0_l_bw_objects *ip = (sem_0_l_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	if ( Lead0_buttons.OvrApp_s == 1 ) {
	    Lead0_buttons.OvrApp_s=2; ovr0_app = TRUE;
	}
	else {
	    Lead0_buttons.OvrApp_s=1; ovr0_app = FALSE;
	}

	set_buttons_lead0();   draw_grid_lead0(0); 

	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_b_OvrLds_menu'.
//
void
l_call_menu_OvrLds(Panel_item item, Event *event)
{
	sem_0_l_bw_objects *ip = (sem_0_l_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
		
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_b_Exm'.
//
void
l_call_Exm(Panel_item item, Event *event)
{
	sem_0_l_bw_objects *ip = (sem_0_l_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	Lead0_operation=9;
	sub_op0_start();
	
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_b_ConsLR'.
//
void
l_call_ConsLR(Panel_item item, Event *event)
{
	sem_0_l_bw_objects *ip = (sem_0_l_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	if ( status_manual_mode && status_unsubtracted && Lead0_buttons.ConsLR_s == 1 ) {
	  if ( reference_act[0] > -1 )
	  if ( Is_code(0,reference_act[0],0,0)) {
	    Lead0_buttons.ConsLR_s=2;
	    status_consider_localref=FALSE;
            set_buttons_lead0_conslr();

	      act_ref_data[0].copy_ref(references[0][reference_act[0]]);

	      act_reference[0].set=TRUE;
	      act_reference[0].change=FALSE;
	      act_reference[1].change=FALSE;
	      act_reference[2].change=FALSE;
	      act_reference[0].typ=2; // local
	      act_reference[0].index=reference_act[0];

	      data_mstime_index= data_fin[Marker[0].fine_index].index;
	      reference_mstime_index= data_fin[act_ref_data[0].fine_index].index;
 
	      data_new_r_read();
	      get_average_R();
	      update_marker(0,192);

	    draw_grid_lead0(0); 
	    show_data(0,FALSE, FALSE);

	    } // end cons loc ref 
	}
	else if ( Lead0_buttons.ConsLR_s == 2 ) { 
	    Lead0_buttons.ConsLR_s=1;
	    status_consider_localref=TRUE;
            set_buttons_lead0_unsubtr_manual();

	    if ( global_ref[0].set) {
	      act_ref_data[0].copy_ref(global_ref[0]);
	      act_ref_data[0].code1=0;

	      act_reference[0].set=TRUE;
	      act_reference[0].change=FALSE;
	      act_reference[1].change=FALSE;
	      act_reference[2].change=FALSE;
	      act_reference[0].typ=1; // global
	      act_reference[0].index=-1;

	      data_mstime_index= data_fin[Marker[0].fine_index].index;
	      reference_mstime_index= data_fin[act_ref_data[0].fine_index].index;

	      data_new_r_read();
	      get_average_R();
	      update_marker(0,192);

	    } // end cons loc ref 
	      draw_grid_lead0(0); 
	      show_data(0,FALSE, FALSE);
	}
	set_buttons_lead0();

	// gxv_start_connections DO NOT EDIT THIS SECTION

	// gxv_end_connections

}

//
// Event callback function for `l_cp'.
//
Notify_value
sem_0_l_bw_l_cp_event_callback(Xv_window win, Event *event, Notify_arg arg, Notify_event_type type)
{
	sem_0_l_bw_objects *ip = (sem_0_l_bw_objects *) xv_get(xv_get(win, CANVAS_PAINT_CANVAS_WINDOW), XV_KEY_DATA, INSTANCE);
	
	// gxv_start_connections DO NOT EDIT THIS SECTION

	if (event_action(event) == ACTION_SELECT)
	{
		l_call_left(win, event, arg, type);
	}
	
	if (event_action(event) == ACTION_ADJUST)
	{
		l_call_center(win, event, arg, type);
	}
	
	if (event_action(event) == ACTION_MENU)
	{
		l_call_right(win, event, arg, type);
	}
	
	// gxv_end_connections

	return notify_next_event_func(win, (Notify_event) event, arg, type);
}

//
// Repaint callback function for `l_cp'.
//
void
l_ini_lcp(Canvas canvas, Xv_window paint_window, Display *display, Window xid, Xv_xrectlist *rects)
{

	gcLead0 = DefaultGC(display, DefaultScreen(display));
	l_b_display = display;
	l_b_window = xid;

	// gxv_start_connections DO NOT EDIT THIS SECTION

	// gxv_end_connections

}

//
// User-defined action for `l_cp'.
//
void
l_call_left(Xv_window win, Event *event, Notify_arg arg, Notify_event_type type)
{
	sem_0_l_bw_objects *ip = (sem_0_l_bw_objects *) xv_get(xv_get(win, CANVAS_PAINT_CANVAS_WINDOW), XV_KEY_DATA, INSTANCE);
	
long x,y,i, dx;
long c_Time;
char pr_time[12];

int lead = 0;

        x=(event->ie_xevent)->xbutton.x ;
        c_Time = (long)(FSAMP *(diagram_time_begin_lead+ double(x-160.0)*time_scale_0/960.0));

	if ( ( c_Time < data_raw[raw_display_begin].index) || ( c_Time > data_fin[fin_display_end].index ) ) return;

        i=raw_display_begin;
        while ( (c_Time > data_raw[i].index) && (i < (raw_display_end)) ) i++;
        dx= abs(c_Time - data_raw[i].index);

        click_l0.first=! click_l0.first;

        click_l0.x=(event->ie_xevent)->xbutton.x;
        click_l0.y=(event->ie_xevent)->xbutton.y;
        if ( click_l0.first ){	

   dx= abs(c_Time - data_raw[i].index);
   if (dx == 0) {
     click_l0.raw_l=i; click_l0.raw_r=i; click_l0.raw=i; 
   }
   else { click_l0.raw_l=i-1; click_l0.raw_r=i;
	  if ( dx < FSAMP) { click_l0.raw=i;}
	  else  { click_l0.raw=i-1;}
   }
   i=click_l0.raw;

   i=fin_display_begin;

   while ( ( data_raw[click_l0.raw].index > data_fin[i].index) && (i < (fin_display_end+1)) )
     {

 i++;
 }
   dx= abs( data_raw[click_l0.raw].index - data_fin[i].index);
   if (dx == 0) {
     click_l0.fine_l=i; click_l0.fine_r=i; click_l0.fine=i; 
   }
   else { click_l0.fine_l=i-1; click_l0.fine_r=i;
	  click_l0.fine=i;
   }
   i=click_l0.fine;

   XAllocNamedColor(l_b_display, cmap,set_color8, &col, & unused);
   XSetForeground(l_b_display, gcLead0, col.pixel);

 if (Lead0_operation == 0 || ( Lead0_operation != 0 && click_l0.y > BORDER_SEP_CLICK) ) {
  if ( click_l0.y > BORDER_SEP_CLICK ) {

   XFillRectangle(l_b_display, l_b_window, gcLead0, 40,162,90,15);

   XAllocNamedColor(l_b_display, cmap,"black", &col, & unused);
   XSetForeground(l_b_display, gcLead0, col.pixel);

   sprintf(pr_time, "%s",mstimstr(c_Time));
   XDrawString(l_b_display, l_b_window, gcLead0, 42, 174, pr_time, strlen(pr_time));

   XAllocNamedColor(l_b_display, cmap,"white", &col, & unused);
   XSetForeground(l_b_display, gcLead0, col.pixel);
   XFillRectangle(l_b_display, l_b_window, gcLead0, 1,55,130,90);

   XAllocNamedColor(l_b_display, cmap,set_color8, &col, & unused);
   XSetForeground(l_b_display, gcLead0, col.pixel);
   XFillRectangle(l_b_display, l_b_window, gcLead0, 1, 55,130,12);
   XFillRectangle(l_b_display, l_b_window, gcLead0, 1, 79,130,24);
   XFillRectangle(l_b_display, l_b_window, gcLead0, 1, 108, 130,12);

   XAllocNamedColor(l_b_display, cmap,"black", &col, & unused);
   XSetForeground(l_b_display, gcLead0, col.pixel);

   sprintf(pr_buff, "RAW: %14s",mstimstr(data_raw[click_l0.raw].index));
   XDrawString(l_b_display, l_b_window, gcLead0, 2, 66, pr_buff, strlen(pr_buff));

   sprintf(pr_buff, "HRate: %9d [bpm]",data_raw[click_l0.raw].HR);
   XDrawString(l_b_display, l_b_window, gcLead0, 2, 78, pr_buff, strlen(pr_buff));

   sprintf(pr_buff,"ST80:");
   XDrawString(l_b_display, l_b_window, gcLead0, 2, 90, pr_buff, strlen(pr_buff));
   sprintf(pr_buff," %6d/%6d",mk_uv(data_raw[click_l0.raw].l0_ST80),
                              mk_uv(data_raw[click_l0.raw].l0_ST80)-click_ST80_0);
   click_ST80_0 = mk_uv(data_raw[click_l0.raw].l0_ST80);
   XDrawString(l_b_display, l_b_window, gcLead0, 40, 90, pr_buff, strlen(pr_buff));

   sprintf(pr_buff,"STSb:");
   XDrawString(l_b_display, l_b_window, gcLead0, 2, 102, pr_buff, strlen(pr_buff));
   sprintf(pr_buff," %6d/%6d",mk_uv(data_raw[click_l0.raw].sub_v[lead]),
                              mk_uv(data_raw[click_l0.raw].sub_v[lead]) - click_STsb_0);
   click_STsb_0 = mk_uv(data_raw[click_l0.raw].sub_v[lead]);
   XDrawString(l_b_display, l_b_window,  gcLead0, 40, 102, pr_buff, strlen(pr_buff));

   sprintf(pr_buff, "FINE: %14s",mstimstr(data_fin[click_l0.fine].index));
   XDrawString(l_b_display, l_b_window, gcLead0, 2, 120, pr_buff, strlen(pr_buff));

   sprintf(pr_buff, "HRate: %9d [bpm]", data_fin[click_l0.fine].HR);
   XDrawString(l_b_display, l_b_window, gcLead0, 2, 132, pr_buff, strlen(pr_buff));

   sprintf(pr_buff,"ST80:");
   XDrawString(l_b_display, l_b_window, gcLead0, 2, 144, pr_buff, strlen(pr_buff));
   sprintf(pr_buff," %6d/%6d", mk_uv( data_fin[click_l0.fine].l0_ST80),
                 	   mk_uv( data_fin[click_l0.fine].l0_ST80) - click_ST80_f0);
   click_ST80_f0 = mk_uv( data_fin[click_l0.fine].l0_ST80);
   XDrawString(l_b_display, l_b_window, gcLead0, 40, 144, pr_buff, strlen(pr_buff));
   }
   else {
    if (IS_free(0, click_l0.raw,0)) {

       Lead0_operation = 1;
       Marker[0].set=TRUE;
       Marker[0].raw_index=click_l0.raw; Marker[0].fine_index=click_l0.fine;
       set_marker_l(0);
       draw_grid_lead0(0); 
       show_data(0,FALSE, TRUE);
       Lead0_operation = 0;}
   }
  } else {
      sub_op0_exec();
  }
             }
        else {

   XAllocNamedColor(l_b_display, cmap,"white", &col, & unused);
   XSetForeground(l_b_display, gcLead0, col.pixel);

   XFillRectangle(l_b_display, l_b_window, gcLead0, 40,162,90,15);

   XAllocNamedColor(l_b_display, cmap,"black", &col, & unused);
   XSetForeground(l_b_display, gcLead0, col.pixel);
	}

}

//
// User-defined action for `l_cp'.
//
void
l_call_center(Xv_window win, Event *event, Notify_arg arg, Notify_event_type type)
{
	sem_0_l_bw_objects *ip = (sem_0_l_bw_objects *) xv_get(xv_get(win, CANVAS_PAINT_CANVAS_WINDOW), XV_KEY_DATA, INSTANCE);

	if (Lead0_operation != 0 )  return;

def_click click_tmp0;

long x,y,i, dx;
long c_Time;
char pr_time[12];

long  r_i;
int   lead = 0;
short Lead0_operation_tmp;

        x=(event->ie_xevent)->xbutton.x ;
        c_Time = (long)(FSAMP *(diagram_time_begin_lead+ double(x-160.0)*time_scale_0/960.0));

	if ( ( c_Time < data_raw[raw_display_begin].index) || ( c_Time > data_fin[fin_display_end].index ) ) return;

        i=raw_display_begin;
        while ( (c_Time > data_raw[i].index) && (i < (raw_display_end)) ) i++;
        dx= abs(c_Time - data_raw[i].index);

        click_c0.first=! click_c0.first;

        click_c0.x=(event->ie_xevent)->xbutton.x;
        click_c0.y=(event->ie_xevent)->xbutton.y;
        if ( click_c0.first ){	

   dx= abs(c_Time - data_raw[i].index);
   if (dx == 0) {
     click_c0.raw_l=i; click_c0.raw_r=i; click_c0.raw=i; 
   }
   else { click_c0.raw_l=i-1; click_c0.raw_r=i;
	  if ( dx < FSAMP) { click_c0.raw=i;}
	  else  { click_c0.raw=i-1;}
   }
   i=click_c0.raw;

   i=fin_display_begin;

   while ( ( data_raw[click_c0.raw].index > data_fin[i].index) && (i < (fin_display_end+1)) )
     {

i++;
}

   dx= abs( data_raw[click_c0.raw].index - data_fin[i].index);
   if (dx == 0) {
     click_c0.fine_l=i; click_c0.fine_r=i; click_c0.fine=i; 
   }
   else { click_c0.fine_l=i-1; click_c0.fine_r=i;
	  click_c0.fine=i;
   }
   i=click_c0.fine;

   if ( click_c0.y <= BORDER_SEP_CLICK ) {
       Lead0_operation_tmp = Lead0_operation;
       Lead0_operation = 9;

       click_tmp0.first = click_l0.first;
       click_tmp0.x = click_l0.x;
       click_tmp0.y = click_l0.y;
       click_tmp0.time_index = click_l0.time_index;
       click_tmp0.raw = click_l0.raw;
       click_tmp0.raw_l = click_l0.raw_l;
       click_tmp0.raw_r = click_l0.raw_r;
       click_tmp0.fine = click_l0.fine;
       click_tmp0.fine_l = click_l0.fine_l;
       click_tmp0.fine_r = click_l0.fine_r;

       click_l0.first = click_c0.first;
       click_l0.x = click_c0.x;
       click_l0.y = click_c0.y;
       click_l0.time_index = click_c0.time_index;
       click_l0.raw = click_c0.raw;
       click_l0.raw_l = click_c0.raw_l;
       click_l0.raw_r = click_c0.raw_r;
       click_l0.fine = click_c0.fine;
       click_l0.fine_l = click_c0.fine_l;
       click_l0.fine_r = click_c0.fine_r;

       fast0_center = TRUE;
       
       if (!repeat_set) {
         fast0_center = FALSE; // &&
         sub_op0_start();      // &&
       }
       sub_op0_exec();
       fast0_center = FALSE;

       click_l0.first = click_tmp0.first;
       click_l0.x = click_tmp0.x;
       click_l0.y = click_tmp0.y;
       click_l0.time_index = click_tmp0.time_index;
       click_l0.raw = click_tmp0.raw;
       click_l0.raw_l = click_tmp0.raw_l;
       click_l0.raw_r = click_tmp0.raw_r;
       click_l0.fine = click_tmp0.fine;
       click_l0.fine_l = click_tmp0.fine_l;
       click_l0.fine_r = click_tmp0.fine_r;

    Lead0_operation = Lead0_operation_tmp;

   }
 }

}

//
// User-defined action for `l_cp'.
//
void
l_call_right(Xv_window win, Event *event, Notify_arg arg, Notify_event_type type)
{
	sem_0_l_bw_objects *ip = (sem_0_l_bw_objects *) xv_get(xv_get(win, CANVAS_PAINT_CANVAS_WINDOW), XV_KEY_DATA, INSTANCE);
}

//
// Notify callback function for `l_b_shift_ll1'.
//
void
l_call_shift_ll1(Panel_item item, Event *event)
{
	sem_0_l_bw1_objects *ip = (sem_0_l_bw1_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
long x,y;

        y=TimeToIndex(diagram_time_begin_lead);

        if ( TimeToIndex(diagram_time_begin_lead) > TimeToIndex(time_begin_lead)) {
	  x=TimeToIndex(diagram_time_begin_lead-time_scale_0);
	  if ( x < 0 ) x=0;

	  xv_set(Sem_0_l_bw.l_b_shift_r, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_rr, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_r1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_rr1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_r2, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_rr2, PANEL_INACTIVE, FALSE, NULL);

	}
	else
	  {
	    x=0;
	     xv_set(Sem_0_l_bw.l_b_shift_ll, PANEL_INACTIVE, TRUE, NULL);
	     xv_set(Sem_0_l_bw1.l_b_shift_ll1, PANEL_INACTIVE, TRUE, NULL);
	     xv_set(Sem_0_l_bw2.l_b_shift_ll2, PANEL_INACTIVE, TRUE, NULL);

	     sprintf(message1,"You are at the beginning of data !"); 
	     warning_message(1);
	  }
	  diagram_time_begin_lead=IndexToTime(x);

	  draw_grid_lead0(0);

	  if (lead1_data )  draw_grid_lead0(1); 
	  if (lead2_data )  draw_grid_lead0(2); 
	  draw_grid_coeff();
	
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_b_shift_l1'.
//
void
l_call_shift_l1(Panel_item item, Event *event)
{
	sem_0_l_bw1_objects *ip = (sem_0_l_bw1_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
long x,y;

        y=TimeToIndex(diagram_time_begin_lead);
        if ( (x=TimeToIndex(diagram_time_begin_lead-time_scale_0/2)) >= TimeToIndex(time_begin_lead)) {

	  xv_set(Sem_0_l_bw.l_b_shift_rr, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_r, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_rr1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_r1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_rr2, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_r2, PANEL_INACTIVE, FALSE, NULL);

	}
	else
	  {
	    x=0;
       	     xv_set(Sem_0_l_bw.l_b_shift_l, PANEL_INACTIVE, TRUE, NULL);
	     xv_set(Sem_0_l_bw.l_b_shift_ll, PANEL_INACTIVE, TRUE, NULL);
       	     xv_set(Sem_0_l_bw1.l_b_shift_l1, PANEL_INACTIVE, TRUE, NULL);
	     xv_set(Sem_0_l_bw1.l_b_shift_ll1, PANEL_INACTIVE, TRUE, NULL);
       	     xv_set(Sem_0_l_bw2.l_b_shift_l2, PANEL_INACTIVE, TRUE, NULL);
	     xv_set(Sem_0_l_bw2.l_b_shift_ll2, PANEL_INACTIVE, TRUE, NULL);
	     sprintf(message1,"You are at the beginning of data !"); 
	     warning_message(1);
	  }

	  diagram_time_begin_lead=IndexToTime(x);
	  draw_grid_lead0(0);

	  if (lead1_data )  draw_grid_lead0(1); 
	  if (lead2_data )  draw_grid_lead0(2); 
	  draw_grid_coeff();	

	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_b_shift_r1'.
//
void
l_call_shift_r1(Panel_item item, Event *event)
{
	sem_0_l_bw1_objects *ip = (sem_0_l_bw1_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
long x,y;

        y=TimeToIndex(diagram_time_begin_lead);
        if ( (x=TimeToIndex(diagram_time_begin_lead+time_scale_0/2)) <= TimeToIndex(time_end_lead)) {

	  xv_set(Sem_0_l_bw.l_b_shift_ll, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_l, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_ll1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_l1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_ll2, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_l2, PANEL_INACTIVE, FALSE, NULL);
	}
	else
	  {
            x=TimeToIndex(time_end_lead);

	    y = x % 60000;
	    if ( y  > 30000 )  { y = - (60000 -y); }
	    x=x - y;
	    if (x < 0 ) x=0;

	    xv_set(Sem_0_l_bw.l_b_shift_r, PANEL_INACTIVE, TRUE, NULL);
	    xv_set(Sem_0_l_bw.l_b_shift_rr, PANEL_INACTIVE, TRUE, NULL);
	    xv_set(Sem_0_l_bw1.l_b_shift_r1, PANEL_INACTIVE, TRUE, NULL);
	    xv_set(Sem_0_l_bw1.l_b_shift_rr1, PANEL_INACTIVE, TRUE, NULL);
	    xv_set(Sem_0_l_bw2.l_b_shift_r2, PANEL_INACTIVE, TRUE, NULL);
	    xv_set(Sem_0_l_bw2.l_b_shift_rr2, PANEL_INACTIVE, TRUE, NULL);
	     sprintf(message1,"You are at the end of data !"); 
	     warning_message(1);
	  }

	  diagram_time_begin_lead=IndexToTime(x);
	  xv_set(Sem_0_l_bw.l_b_shift_ll, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_l, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_ll1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_l1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_ll2, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_l2, PANEL_INACTIVE, FALSE, NULL);

	  draw_grid_lead0(0);
	
	  if (lead1_data )  draw_grid_lead0(1); 
	  if (lead2_data )  draw_grid_lead0(2); 
	  draw_grid_coeff();
	
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_b_shift_rr1'.
//
void
l_call_shift_rr1(Panel_item item, Event *event)
{
	sem_0_l_bw1_objects *ip = (sem_0_l_bw1_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
long x,y;

        y=TimeToIndex(diagram_time_begin_lead);
        if ( (x=TimeToIndex(diagram_time_begin_lead+time_scale_0)) <= TimeToIndex(time_end_lead)) {

	  xv_set(Sem_0_l_bw.l_b_shift_ll, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_l, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_ll1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_l1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_ll2, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_l2, PANEL_INACTIVE, FALSE, NULL);
	}
	else
	  {
            x=TimeToIndex(time_end_lead);

	    y = x % 60000;
	    if ( y  > 30000 )  { y = - (60000 -y); }
	    x=x - y;
	    if (x < 0 ) x=0;

	     xv_set(Sem_0_l_bw.l_b_shift_rr, PANEL_INACTIVE, TRUE, NULL);
	     xv_set(Sem_0_l_bw1.l_b_shift_rr1, PANEL_INACTIVE, TRUE, NULL);
	     xv_set(Sem_0_l_bw2.l_b_shift_rr2, PANEL_INACTIVE, TRUE, NULL);
	     sprintf(message1,"You are at the end of data !"); 
	     warning_message(1);
	  }

     	  diagram_time_begin_lead=IndexToTime(x);
	  xv_set(Sem_0_l_bw.l_b_shift_ll, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_l, PANEL_INACTIVE, FALSE, NULL);

	  draw_grid_lead0(0);    

	  if (lead1_data )  draw_grid_lead0(1); 
	  if (lead2_data )  draw_grid_lead0(2); 
	  draw_grid_coeff();
	
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_ss_HRate1'.
//
void
l_call_HRate1(Panel_item item, int value, Event *event)
{
	sem_0_l_bw1_objects *ip = (sem_0_l_bw1_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	reset_HR_lead0(1);

	switch (value){
	case 0:  lead1_plot_button_status.HRate=TRUE; break;
	case 1:  lead1_plot_button_status.HRRaw=TRUE;break;
	case 2:  lead1_plot_button_status.STFine=TRUE;break;
	case 3:  lead1_plot_button_status.STslFine=TRUE;break;
	case 4:  lead1_plot_button_status.STslRaw=TRUE;break;
	case 5:  lead1_plot_button_status.Episodes=TRUE;break;
	case 6:  lead1_plot_button_status.HideHR=TRUE;	break;
	case 7:  lead1_plot_button_status.ISOJ=TRUE;  break;
	case 8:  lead1_plot_button_status.HRate=TRUE; 	  
	  xv_set(Sem_0_l_bw1.l_ss_HRate1, PANEL_VALUE, 0, NULL);
	  break;
	case 9:  lead1_plot_button_status.HRate=TRUE; 	  
	  xv_set(Sem_0_l_bw1.l_ss_HRate1, PANEL_VALUE, 0, NULL);
	  break;
	} // end select

	draw_grid_lead0(1);

	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_ss_12min1'.
//
void
l_call_12min1(Panel_item item, int value, Event *event)
{
	sem_0_l_bw1_objects *ip = (sem_0_l_bw1_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);

	switch (value){
	case 0: time_scale_0=60; break;
	case 1: time_scale_0=120; break;
	case 2: time_scale_0=180; break;
	case 3: time_scale_0=360; break;
	case 4: time_scale_0=540; break;
	case 5: time_scale_0=720; break;
	case 6: time_scale_0=1440; break;
	case 7: time_scale_0=1800; break;
	case 8: time_scale_0=3600; break;
	case 9: time_scale_0=7200; break;
	case 10: time_scale_0=14400; break;
	case 11: time_scale_0=21600; break;
	case 12: time_scale_0=43200; break;
	case 13: time_scale_0=86400; break;
	case 14: time_scale_0=172800; break;
	case 15: time_scale_0=345600; break;
	} // end select

   scale_time_tick=(long)(time_scale_0 / 12.0);
	  xv_set(Sem_0_l_bw.l_b_shift_ll, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_l, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_rr, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_r, PANEL_INACTIVE, FALSE, NULL);

	  xv_set(Sem_0_l_bw1.l_b_shift_ll1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_l1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_rr1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_r1, PANEL_INACTIVE, FALSE, NULL);

	  xv_set(Sem_0_l_bw2.l_b_shift_ll2, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_l2, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_rr2, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_r2, PANEL_INACTIVE, FALSE, NULL);


	 xv_set(Sem_0_l_bw.l_ss_12min, PANEL_VALUE,value,NULL);
	 xv_set(Sem_0_l_bw2.l_ss_12min2, PANEL_VALUE,value,NULL);
	
         draw_grid_lead0(0);

	 if (lead1_data )  draw_grid_lead0(1); 
	 if (lead2_data )  draw_grid_lead0(2); 
	 draw_grid_coeff();

	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_ss_100mV1'.
//
void
l_call_100mV1(Panel_item item, int value, Event *event)
{
	sem_0_l_bw1_objects *ip = (sem_0_l_bw1_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	switch (value){
	case 0: ampl_1=20; break;
	case 1: ampl_1=25; break;
	case 2: ampl_1=50; break;
	case 3: ampl_1=75; break;
	case 4: ampl_1=100; break;
	case 5: ampl_1=125; break;
	case 6: ampl_1=150; break;
	case 7: ampl_1=200; break;
	case 8: ampl_1=250; break;
	case 9: ampl_1=500; break;
	case 10: ampl_1=750; break;
	case 11: ampl_1=1000; break;
	case 12: ampl_1=2000; break;
	case 13: ampl_1=5000; break;
	} // end select
	draw_grid_lead0(1);
		
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_b_Mark1'.
//
void
l_call_Mark1(Panel_item item, Event *event)
{
	sem_0_l_bw1_objects *ip = (sem_0_l_bw1_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	Lead1_operation=1;
	sub_op1_start();
	
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_b_Subtr1'.
//
void
l_call_Subtr1(Panel_item item, Event *event)
{
	sem_0_l_bw1_objects *ip = (sem_0_l_bw1_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);

	if ( status_unsubtracted1 ) {
	  Lead1_buttons.Subtr_s=2;
	  status_unsubtracted1 =FALSE;

          if (status_manual_mode1) 
                set_buttons_lead1_subtr_manual();
          else
                set_buttons_lead1_subtr_auto();   
	}
	else {
	  Lead1_buttons.Subtr_s=1;
	  status_unsubtracted1 =TRUE;

          if (status_manual_mode1)
                 set_buttons_lead1_unsubtr_manual();
          else
                 set_buttons_lead1_unsubtr_auto();
	}

	set_buttons_lead1(); draw_grid_lead0(1); 
		
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_b_OvrApp1'.
//
void
l_call_OvrApp1(Panel_item item, Event *event)
{
	sem_0_l_bw1_objects *ip = (sem_0_l_bw1_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
       	if ( Lead1_buttons.OvrApp_s == 1 ) {
	    Lead1_buttons.OvrApp_s=2; ovr1_app = TRUE;
	}
	else {
	    Lead1_buttons.OvrApp_s=1; ovr1_app = FALSE;
	}

	set_buttons_lead1();   draw_grid_lead0(1); 

	// gxv_start_connections DO NOT EDIT THIS SECTION

	// gxv_end_connections

}

//
// Notify callback function for `l_b_OvrLds_menu1'.
//
void
l_call_menu_OvrLds1(Panel_item item, Event *event)
{
	sem_0_l_bw1_objects *ip = (sem_0_l_bw1_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_b_Exm1'.
//
void
l_call_Exm1(Panel_item item, Event *event)
{
	sem_0_l_bw1_objects *ip = (sem_0_l_bw1_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	Lead1_operation=9;
	sub_op1_start();

	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_b_ConsLR1'.
//
void
l_call_ConsLR1(Panel_item item, Event *event)
{
	sem_0_l_bw1_objects *ip = (sem_0_l_bw1_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	if ( status_manual_mode1 && status_unsubtracted1 && Lead1_buttons.ConsLR_s == 1 ) {
	  if ( reference_act[1] > -1 )
	  if ( Is_code(1,reference_act[1],0,0)) {
	    Lead1_buttons.ConsLR_s=2;
	    status_consider_localref1=FALSE;
            set_buttons_lead1_conslr();

	      act_ref_data[1].copy_ref(references[1][reference_act[1]]);

	      act_reference[1].set=TRUE;
	      act_reference[0].change=FALSE;
	      act_reference[1].change=FALSE;
	      act_reference[2].change=FALSE;
	      act_reference[1].typ=2; // local
	      act_reference[1].index=reference_act[1];

	      data_mstime_index= data_fin[Marker[1].fine_index].index;
	      reference_mstime_index= data_fin[act_ref_data[1].fine_index].index;

	      data_new_r_read();
	      get_average_R();
	      update_marker(1,192);

	    draw_grid_lead0(1); 
	    show_data(1,FALSE, TRUE);

	    } // end cons loc ref 
	}
	else if ( Lead1_buttons.ConsLR_s == 2 ) { 
	    Lead1_buttons.ConsLR_s=1;
	    status_consider_localref1=TRUE;
            set_buttons_lead1_unsubtr_manual();

	    if ( global_ref[1].set) {
	      act_ref_data[1].copy_ref(global_ref[1]);
	      act_ref_data[1].code1=0;

	      act_reference[1].set=TRUE;
	      act_reference[0].change=FALSE;
	      act_reference[1].change=FALSE;
	      act_reference[2].change=FALSE;
	      act_reference[1].typ=1; // global
	      act_reference[1].index=-1;

	      data_mstime_index= data_fin[Marker[1].fine_index].index;
	      reference_mstime_index= data_fin[act_ref_data[0].fine_index].index;

	      data_new_r_read();
	      get_average_R();
	      update_marker(1,192);

	    } // end cons loc ref 
	      draw_grid_lead0(1); 
	      show_data(1,FALSE, TRUE);
	}
	set_buttons_lead1();
	
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Event callback function for `l_cp1'.
//
Notify_value
sem_0_l_bw1_l_cp1_event_callback(Xv_window win, Event *event, Notify_arg arg, Notify_event_type type)
{
	sem_0_l_bw1_objects *ip = (sem_0_l_bw1_objects *) xv_get(xv_get(win, CANVAS_PAINT_CANVAS_WINDOW), XV_KEY_DATA, INSTANCE);
	
	// gxv_start_connections DO NOT EDIT THIS SECTION

	if (event_action(event) == ACTION_SELECT)
	{
		l_call_left1(win, event, arg, type);
	}
	
	if (event_action(event) == ACTION_ADJUST)
	{
		l_call_center1(win, event, arg, type);
	}
	
	if (event_action(event) == ACTION_MENU)
	{
		l_call_right1(win, event, arg, type);
	}
	
	// gxv_end_connections

	return notify_next_event_func(win, (Notify_event) event, arg, type);
}

//
// User-defined action for `l_cp1'.
//
void
l_call_left1(Xv_window win, Event *event, Notify_arg arg, Notify_event_type type)
{
	sem_0_l_bw1_objects *ip = (sem_0_l_bw1_objects *) xv_get(xv_get(win, CANVAS_PAINT_CANVAS_WINDOW), XV_KEY_DATA, INSTANCE);
	
long x,y,i, dx;
long c_Time;
char pr_time[12];
int lead = 1;

        x=(event->ie_xevent)->xbutton.x ;
        c_Time = (long)(FSAMP *(diagram_time_begin_lead+ double(x-160.0)*time_scale_0/960.0));

	if ( ( c_Time < data_raw[raw_display_begin].index) || ( c_Time > data_fin[fin_display_end].index ) ) return;

        i=raw_display_begin;
        while ( (c_Time > data_raw[i].index) && (i < (raw_display_end)) ) i++;
        dx= abs(c_Time - data_raw[i].index);

        click_l1.first=! click_l1.first;

        click_l1.x=(event->ie_xevent)->xbutton.x;
        click_l1.y=(event->ie_xevent)->xbutton.y;
        if ( click_l1.first ){	

   dx= abs(c_Time - data_raw[i].index);
   if (dx == 0) {
     click_l1.raw_l=i; click_l1.raw_r=i; click_l1.raw=i; 
   }
   else { click_l1.raw_l=i-1; click_l1.raw_r=i;
	  if ( dx < FSAMP) { click_l1.raw=i;}
	  else  { click_l1.raw=i-1;}
   }
   i=click_l1.raw;

   i=fin_display_begin;

   while ( ( data_raw[click_l1.raw].index > data_fin[i].index) && (i < (fin_display_end+1)) )
     {  i++;  }

   dx= abs( data_raw[click_l1.raw].index - data_fin[i].index);
   if (dx == 0) {
     click_l1.fine_l=i; click_l1.fine_r=i; click_l1.fine=i; 
   }
   else { click_l1.fine_l=i-1; click_l1.fine_r=i;
	  click_l1.fine=i;
   }
   i=click_l1.fine;

   XAllocNamedColor(l_b1_display, cmap,set_color8, &col, & unused);
   XSetForeground(l_b1_display, gcLead1, col.pixel);

 if (Lead1_operation == 0 || ( Lead1_operation != 0 && click_l1.y > BORDER_SEP_CLICK) ) {
  if ( click_l1.y > BORDER_SEP_CLICK ) {

   XFillRectangle(l_b1_display, l_b1_window, gcLead1, 40,162,90,15);

   XAllocNamedColor(l_b1_display, cmap,"black", &col, & unused);
   XSetForeground(l_b1_display, gcLead1, col.pixel);

   sprintf(pr_time, "%s",mstimstr(c_Time));
   XDrawString(l_b1_display, l_b1_window, gcLead1, 42, 174, pr_time, strlen(pr_time));

   XAllocNamedColor(l_b1_display, cmap,"white", &col, & unused);
   XSetForeground(l_b1_display, gcLead1, col.pixel);
   XFillRectangle(l_b1_display, l_b1_window, gcLead1, 1,55,130,90);

   XAllocNamedColor(l_b1_display, cmap,set_color8, &col, & unused);
   XSetForeground(l_b1_display, gcLead1, col.pixel);
   XFillRectangle(l_b1_display, l_b1_window, gcLead1, 1, 55,130,12);
   XFillRectangle(l_b1_display, l_b1_window, gcLead1, 1, 79,130,24);
   XFillRectangle(l_b1_display, l_b1_window, gcLead1, 1, 108, 130,12);

   XAllocNamedColor(l_b1_display, cmap,"black", &col, & unused);
   XSetForeground(l_b1_display, gcLead1, col.pixel);

   sprintf(pr_buff, "RAW: %14s",mstimstr(data_raw[click_l1.raw].index));
   XDrawString(l_b1_display, l_b1_window, gcLead1, 2, 66, pr_buff, strlen(pr_buff));

   sprintf(pr_buff, "HRate: %9d [bpm]",data_raw[click_l1.raw].HR);
   XDrawString(l_b1_display, l_b1_window, gcLead1, 2, 78, pr_buff, strlen(pr_buff));

   sprintf(pr_buff,"ST80:");
   XDrawString(l_b1_display, l_b1_window, gcLead1, 2, 90, pr_buff, strlen(pr_buff));
   sprintf(pr_buff," %6d/%6d",mk_uv(data_raw[click_l1.raw].l1_ST80),
                              mk_uv(data_raw[click_l1.raw].l1_ST80)-click_ST80_1);
   click_ST80_1 = mk_uv(data_raw[click_l1.raw].l1_ST80);
   XDrawString(l_b1_display, l_b1_window, gcLead1, 40, 90, pr_buff, strlen(pr_buff));

   sprintf(pr_buff,"STSb:");
   XDrawString(l_b1_display, l_b1_window, gcLead1, 2, 102, pr_buff, strlen(pr_buff));
   sprintf(pr_buff," %6d/%6d",mk_uv(data_raw[click_l1.raw].sub_v[lead]),
                              mk_uv(data_raw[click_l1.raw].sub_v[lead]) - click_STsb_1);
   click_STsb_1 = mk_uv(data_raw[click_l1.raw].sub_v[lead]);
   XDrawString(l_b1_display, l_b1_window,  gcLead1, 40, 102, pr_buff, strlen(pr_buff));

   sprintf(pr_buff, "FINE: %14s",mstimstr(data_fin[click_l1.fine].index));
   XDrawString(l_b1_display, l_b1_window, gcLead1, 2, 120, pr_buff, strlen(pr_buff));

   sprintf(pr_buff, "HRate: %9d [bpm]", data_fin[click_l1.fine].HR);
   XDrawString(l_b1_display, l_b1_window, gcLead1, 2, 132, pr_buff, strlen(pr_buff));

   sprintf(pr_buff,"ST80:");
   XDrawString(l_b1_display, l_b1_window, gcLead1, 2, 144, pr_buff, strlen(pr_buff));
   sprintf(pr_buff," %6d/%6d", mk_uv( data_fin[click_l1.fine].l1_ST80),
                 	   mk_uv( data_fin[click_l1.fine].l1_ST80) - click_ST80_f1);
   click_ST80_f1 = mk_uv( data_fin[click_l1.fine].l1_ST80);
   XDrawString(l_b1_display, l_b1_window, gcLead1, 40, 144, pr_buff, strlen(pr_buff));
   }
   else {
    if (IS_free(1, click_l1.raw,0)) {

       Lead1_operation = 1;
       Marker[1].set=TRUE;
       Marker[1].raw_index=click_l1.raw; Marker[1].fine_index=click_l1.fine;
       set_marker_l(1);
       draw_grid_lead0(1); 

       show_data(1,FALSE, TRUE);
       Lead1_operation = 0;}
   }
  } else {
      sub_op1_exec();
  }
             }
        else {

   XAllocNamedColor(l_b1_display, cmap,"white", &col, & unused);
   XSetForeground(l_b1_display, gcLead1, col.pixel);

   XFillRectangle(l_b1_display, l_b1_window, gcLead1, 40,162,90,15);

   XAllocNamedColor(l_b1_display, cmap,"black", &col, & unused);
   XSetForeground(l_b1_display, gcLead1, col.pixel);

	}
}

//
// User-defined action for `l_cp1'.
//
void
l_call_center1(Xv_window win, Event *event, Notify_arg arg, Notify_event_type type)
{
	sem_0_l_bw1_objects *ip = (sem_0_l_bw1_objects *) xv_get(xv_get(win, CANVAS_PAINT_CANVAS_WINDOW), XV_KEY_DATA, INSTANCE);

	if (Lead1_operation != 0 )  return;

def_click click_tmp1;

long x,y,i, dx;
long c_Time;
char pr_time[12];

long  r_i;
int   lead = 1;
short Lead1_operation_tmp;

        x=(event->ie_xevent)->xbutton.x;
        c_Time = (long)(FSAMP *(diagram_time_begin_lead+ double(x-160.0)*time_scale_0/960.0));

	if ( ( c_Time < data_raw[raw_display_begin].index) || ( c_Time > data_fin[fin_display_end].index ) ) return;

        i=raw_display_begin;
        while ( (c_Time > data_raw[i].index) && (i < (raw_display_end)) ) i++;
        dx= abs(c_Time - data_raw[i].index);

        click_c1.first=! click_c1.first;

        click_c1.x=(event->ie_xevent)->xbutton.x;
        click_c1.y=(event->ie_xevent)->xbutton.y;
        if ( click_c1.first ){	

   dx= abs(c_Time - data_raw[i].index);
   if (dx == 0) {
     click_c1.raw_l=i; click_c1.raw_r=i; click_c1.raw=i; 
   }
   else { click_c1.raw_l=i-1; click_c1.raw_r=i;
	  if ( dx < FSAMP) { click_c1.raw=i;}
	  else  { click_c1.raw=i-1;}
   }
   i=click_c1.raw;
   i=fin_display_begin;

   while ( ( data_raw[click_c1.raw].index > data_fin[i].index) && (i < (fin_display_end+1)) )
     {

 i++;
 }

   dx= abs( data_raw[click_c1.raw].index - data_fin[i].index);
   if (dx == 0) {
     click_c1.fine_l=i; click_c1.fine_r=i; click_c1.fine=i; 
   }
   else { click_c1.fine_l=i-1; click_c1.fine_r=i;
	  click_c1.fine=i;
   }
   i=click_c1.fine;

   if ( click_c1.y <= BORDER_SEP_CLICK ) {
       Lead1_operation_tmp = Lead1_operation;
       Lead1_operation = 9;

       click_tmp1.first = click_l1.first;
       click_tmp1.x = click_l1.x;
       click_tmp1.y = click_l1.y;
       click_tmp1.time_index = click_l1.time_index;
       click_tmp1.raw = click_l1.raw;
       click_tmp1.raw_l = click_l1.raw_l;
       click_tmp1.raw_r = click_l1.raw_r;
       click_tmp1.fine = click_l1.fine;
       click_tmp1.fine_l = click_l1.fine_l;
       click_tmp1.fine_r = click_l1.fine_r;

       click_l1.first = click_c1.first;
       click_l1.x = click_c1.x;
       click_l1.y = click_c1.y;
       click_l1.time_index = click_c1.time_index;
       click_l1.raw = click_c1.raw;
       click_l1.raw_l = click_c1.raw_l;
       click_l1.raw_r = click_c1.raw_r;
       click_l1.fine = click_c1.fine;
       click_l1.fine_l = click_c1.fine_l;
       click_l1.fine_r = click_c1.fine_r;

       fast1_center = TRUE;
       
       if (!repeat_set1) {
         fast1_center = FALSE;
         sub_op1_start();     
       }
       sub_op1_exec();
       fast1_center = FALSE;

       click_l1.first = click_tmp1.first;
       click_l1.x = click_tmp1.x;
       click_l1.y = click_tmp1.y;
       click_l1.time_index = click_tmp1.time_index;
       click_l1.raw = click_tmp1.raw;
       click_l1.raw_l = click_tmp1.raw_l;
       click_l1.raw_r = click_tmp1.raw_r;
       click_l1.fine = click_tmp1.fine;
       click_l1.fine_l = click_tmp1.fine_l;
       click_l1.fine_r = click_tmp1.fine_r;

    Lead1_operation = Lead1_operation_tmp;

   }
 }
}

//
// User-defined action for `l_cp1'.
//
void
l_call_right1(Xv_window win, Event *event, Notify_arg arg, Notify_event_type type)
{
	sem_0_l_bw1_objects *ip = (sem_0_l_bw1_objects *) xv_get(xv_get(win, CANVAS_PAINT_CANVAS_WINDOW), XV_KEY_DATA, INSTANCE);
	
}

//
// Notify callback function for `l_b_shift_ll2'.
//
void
l_call_shift_ll2(Panel_item item, Event *event)
{
	sem_0_l_bw2_objects *ip = (sem_0_l_bw2_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
long x,y;

        y=TimeToIndex(diagram_time_begin_lead);

        if ( TimeToIndex(diagram_time_begin_lead) > TimeToIndex(time_begin_lead)) {
	  x=TimeToIndex(diagram_time_begin_lead-time_scale_0);
	  if ( x < 0 ) x=0;

	  xv_set(Sem_0_l_bw.l_b_shift_r, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_rr, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_r1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_rr1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_r2, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_rr2, PANEL_INACTIVE, FALSE, NULL);

	}
	else
	  {
	    x=0;
	     xv_set(Sem_0_l_bw.l_b_shift_ll, PANEL_INACTIVE, TRUE, NULL);
	     xv_set(Sem_0_l_bw1.l_b_shift_ll1, PANEL_INACTIVE, TRUE, NULL);
	     xv_set(Sem_0_l_bw1.l_b_shift_ll1, PANEL_INACTIVE, TRUE, NULL);

	     sprintf(message1,"You are at the beginning of data !"); 
	     warning_message(1);
	  }
	  diagram_time_begin_lead=IndexToTime(x);

	  draw_grid_lead0(0);

	  if (lead1_data )  draw_grid_lead0(1); 
	  if (lead2_data )  draw_grid_lead0(2); 

	  draw_grid_coeff();
	
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_b_shift_l2'.
//
void
l_call_shift_l2(Panel_item item, Event *event)
{
	sem_0_l_bw2_objects *ip = (sem_0_l_bw2_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
long x,y;

        y=TimeToIndex(diagram_time_begin_lead);
        if ( (x=TimeToIndex(diagram_time_begin_lead-time_scale_0/2)) >= TimeToIndex(time_begin_lead)) {

	  xv_set(Sem_0_l_bw.l_b_shift_rr, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_r, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_rr1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_r1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_rr2, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_r2, PANEL_INACTIVE, FALSE, NULL);

	}
	else
	  {
	    x=0;
       	     xv_set(Sem_0_l_bw.l_b_shift_l, PANEL_INACTIVE, TRUE, NULL);
	     xv_set(Sem_0_l_bw.l_b_shift_ll, PANEL_INACTIVE, TRUE, NULL);
       	     xv_set(Sem_0_l_bw1.l_b_shift_l1, PANEL_INACTIVE, TRUE, NULL);
	     xv_set(Sem_0_l_bw1.l_b_shift_ll1, PANEL_INACTIVE, TRUE, NULL);
       	     xv_set(Sem_0_l_bw2.l_b_shift_l2, PANEL_INACTIVE, TRUE, NULL);
	     xv_set(Sem_0_l_bw2.l_b_shift_ll2, PANEL_INACTIVE, TRUE, NULL);
	     sprintf(message1,"You are at the beginning of data !"); 
	     warning_message(1);
	  }

	  diagram_time_begin_lead=IndexToTime(x);

	  draw_grid_lead0(0);

	  if (lead1_data )  draw_grid_lead0(1); 
	  if (lead2_data )  draw_grid_lead0(2); 
	  draw_grid_coeff();	
	
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_b_shift_r2'.
//
void
l_call_shift_r2(Panel_item item, Event *event)
{
	sem_0_l_bw2_objects *ip = (sem_0_l_bw2_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
long x,y;

        y=TimeToIndex(diagram_time_begin_lead);
        if ( (x=TimeToIndex(diagram_time_begin_lead+time_scale_0/2)) <= TimeToIndex(time_end_lead)) {

	  xv_set(Sem_0_l_bw.l_b_shift_ll, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_l, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_ll1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_l1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_ll2, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_l2, PANEL_INACTIVE, FALSE, NULL);
	}
	else
	  {
            x=TimeToIndex(time_end_lead);

	    y = x % 60000;
	    if ( y  > 30000 )  { y = - (60000 -y); }
	    x=x - y;
	    if (x < 0 ) x=0;

	    xv_set(Sem_0_l_bw.l_b_shift_r, PANEL_INACTIVE, TRUE, NULL);
	    xv_set(Sem_0_l_bw.l_b_shift_rr, PANEL_INACTIVE, TRUE, NULL);
	    xv_set(Sem_0_l_bw1.l_b_shift_r1, PANEL_INACTIVE, TRUE, NULL);
	    xv_set(Sem_0_l_bw1.l_b_shift_rr1, PANEL_INACTIVE, TRUE, NULL);
	    xv_set(Sem_0_l_bw2.l_b_shift_r2, PANEL_INACTIVE, TRUE, NULL);
	    xv_set(Sem_0_l_bw2.l_b_shift_rr2, PANEL_INACTIVE, TRUE, NULL);
	     sprintf(message1,"You are at the end of data !"); 
	     warning_message(1);
	  }

	  diagram_time_begin_lead=IndexToTime(x);
	  xv_set(Sem_0_l_bw.l_b_shift_ll, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_l, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_ll1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_l1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_ll2, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_l2, PANEL_INACTIVE, FALSE, NULL);

	  draw_grid_lead0(0);
	
	  if (lead1_data )  draw_grid_lead0(1); 
	  if (lead2_data )  draw_grid_lead0(2); 
	  draw_grid_coeff();
	
	
	// gxv_start_connections DO NOT EDIT THIS SECTION

	// gxv_end_connections

}

//
// Notify callback function for `l_b_shift_rr2'.
//
void
l_call_shift_rr2(Panel_item item, Event *event)
{
	sem_0_l_bw2_objects *ip = (sem_0_l_bw2_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
long x,y;

        y=TimeToIndex(diagram_time_begin_lead);
        if ( (x=TimeToIndex(diagram_time_begin_lead+time_scale_0)) <= TimeToIndex(time_end_lead)) {

	  xv_set(Sem_0_l_bw.l_b_shift_ll, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_l, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_ll1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_l1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_ll2, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_l2, PANEL_INACTIVE, FALSE, NULL);
	}
	else
	  {
            x=TimeToIndex(time_end_lead);

	    y = x % 60000;
	    if ( y  > 30000 )  { y = - (60000 -y); }
	    x=x - y;
	    if (x < 0 ) x=0;

	     xv_set(Sem_0_l_bw.l_b_shift_rr, PANEL_INACTIVE, TRUE, NULL);
	     xv_set(Sem_0_l_bw1.l_b_shift_rr1, PANEL_INACTIVE, TRUE, NULL);
	     xv_set(Sem_0_l_bw2.l_b_shift_rr2, PANEL_INACTIVE, TRUE, NULL);
	     sprintf(message1,"You are at the end of data !"); 
	     warning_message(1);
	  }

      	  diagram_time_begin_lead=IndexToTime(x);
	  xv_set(Sem_0_l_bw.l_b_shift_ll, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_l, PANEL_INACTIVE, FALSE, NULL);

	  draw_grid_lead0(0);    

	  if (lead1_data )  draw_grid_lead0(1); 
	  if (lead2_data )  draw_grid_lead0(2); 
	  draw_grid_coeff();
		
	// gxv_start_connections DO NOT EDIT THIS SECTION

	// gxv_end_connections

}

//
// Notify callback function for `l_ss_HRate2'.
//
void
l_call_HRate2(Panel_item item, int value, Event *event)
{
	sem_0_l_bw2_objects *ip = (sem_0_l_bw2_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
		
	reset_HR_lead0(2);

	switch (value){
	case 0:  lead2_plot_button_status.HRate=TRUE; break;
	case 1:  lead2_plot_button_status.HRRaw=TRUE;break;
	case 2:  lead2_plot_button_status.STFine=TRUE;break;
	case 3:  lead2_plot_button_status.STslFine=TRUE;break;
	case 4:  lead2_plot_button_status.STslRaw=TRUE;break;
	case 5:  lead2_plot_button_status.Episodes=TRUE;break;
	case 6:  lead2_plot_button_status.HideHR=TRUE;	break;
	case 7:  lead2_plot_button_status.ISOJ=TRUE;  break;
	case 8:  lead2_plot_button_status.HRate=TRUE; 	  
	  xv_set(Sem_0_l_bw2.l_ss_HRate2, PANEL_VALUE, 0, NULL);
	  break;
	case 9:  lead2_plot_button_status.HRate=TRUE; 	  
	  xv_set(Sem_0_l_bw2.l_ss_HRate2, PANEL_VALUE, 0, NULL);
	  break;

       	} // end select
 
	draw_grid_lead0(2);

	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_ss_12min2'.
//
void
l_call_12min2(Panel_item item, int value, Event *event)
{
	sem_0_l_bw2_objects *ip = (sem_0_l_bw2_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	switch (value){
	case 0: time_scale_0=60; break;
	case 1: time_scale_0=120; break;
	case 2: time_scale_0=180; break;
	case 3: time_scale_0=360; break;
	case 4: time_scale_0=540; break;
	case 5: time_scale_0=720; break;
	case 6: time_scale_0=1440; break;
	case 7: time_scale_0=1800; break;
	case 8: time_scale_0=3600; break;
	case 9: time_scale_0=7200; break;
	case 10: time_scale_0=14400; break;
	case 11: time_scale_0=21600; break;
	case 12: time_scale_0=43200; break;
	case 13: time_scale_0=86400; break;
	case 14: time_scale_0=172800; break;
	case 15: time_scale_0=345600; break;
	} // end select

   scale_time_tick=(long)(time_scale_0 / 12.0);
	  xv_set(Sem_0_l_bw.l_b_shift_ll, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_l, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_rr, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_r, PANEL_INACTIVE, FALSE, NULL);

	  xv_set(Sem_0_l_bw1.l_b_shift_ll1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_l1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_rr1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_r1, PANEL_INACTIVE, FALSE, NULL);

	  xv_set(Sem_0_l_bw2.l_b_shift_ll2, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_l2, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_rr2, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_r2, PANEL_INACTIVE, FALSE, NULL);


	 xv_set(Sem_0_l_bw.l_ss_12min, PANEL_VALUE,value,NULL);
	 xv_set(Sem_0_l_bw1.l_ss_12min1, PANEL_VALUE,value,NULL);
	
         draw_grid_lead0(0);

	 if (lead1_data )  draw_grid_lead0(1); 
	 if (lead2_data )  draw_grid_lead0(2); 
	  draw_grid_coeff();

	// gxv_start_connections DO NOT EDIT THIS SECTION

	// gxv_end_connections

}

//
// Notify callback function for `l_ss_100mV2'.
//
void
l_call_100mV2(Panel_item item, int value, Event *event)
{
	sem_0_l_bw2_objects *ip = (sem_0_l_bw2_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	switch (value){
	case 0: ampl_2=20; break;
	case 1: ampl_2=25; break;
	case 2: ampl_2=50; break;
	case 3: ampl_2=75; break;
	case 4: ampl_2=100; break;
	case 5: ampl_2=125; break;
	case 6: ampl_2=150; break;
	case 7: ampl_2=200; break;
	case 8: ampl_2=250; break;
	case 9: ampl_2=500; break;
	case 10: ampl_2=750; break;
	case 11: ampl_2=1000; break;
	case 12: ampl_2=2000; break;
	case 13: ampl_2=5000; break;
	} // end select

	draw_grid_lead0(2);
		
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_b_Mark2'.
//
void
l_call_Mark2(Panel_item item, Event *event)
{
	sem_0_l_bw2_objects *ip = (sem_0_l_bw2_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	Lead2_operation=1;
	sub_op2_start();
	
	// gxv_start_connections DO NOT EDIT THIS SECTION

	// gxv_end_connections

}

//
// Notify callback function for `l_b_Subtr2'.
//
void
l_call_Subtr2(Panel_item item, Event *event)
{
	sem_0_l_bw2_objects *ip = (sem_0_l_bw2_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	if ( status_unsubtracted2 ) {
	  Lead2_buttons.Subtr_s=2;
	  status_unsubtracted2 =FALSE;

          if (status_manual_mode2) 
                set_buttons_lead2_subtr_manual();
          else
                set_buttons_lead2_subtr_auto();   
	}
	else {
	  Lead2_buttons.Subtr_s=1;
	  status_unsubtracted2 =TRUE;

          if (status_manual_mode2)
                 set_buttons_lead2_unsubtr_manual();
          else
                 set_buttons_lead2_unsubtr_auto();

	}

	set_buttons_lead2(); draw_grid_lead0(2); 
		
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_b_OvrApp2'.
//
void
l_call_OvrApp2(Panel_item item, Event *event)
{
	sem_0_l_bw2_objects *ip = (sem_0_l_bw2_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	if ( Lead2_buttons.OvrApp_s == 1 ) {
	    Lead2_buttons.OvrApp_s=2; ovr2_app = TRUE;
	}
	else {
	    Lead2_buttons.OvrApp_s=1; ovr2_app = FALSE;
	}

	set_buttons_lead2();   draw_grid_lead0(2); 
	
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_b_OvrLds_menu2'.
//
void
l_call_menu_OvrLds2(Panel_item item, Event *event)
{
	sem_0_l_bw2_objects *ip = (sem_0_l_bw2_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_b_Exm2'.
//
void
l_call_Exm2(Panel_item item, Event *event)
{
	sem_0_l_bw2_objects *ip = (sem_0_l_bw2_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	Lead2_operation=9;
	sub_op2_start();
	
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Notify callback function for `l_b_ConsLR2'.
//
void
l_call_ConsLR2(Panel_item item, Event *event)
{
	sem_0_l_bw2_objects *ip = (sem_0_l_bw2_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	if ( status_manual_mode2 && status_unsubtracted2 && Lead2_buttons.ConsLR_s == 1 ) {
	  if ( reference_act[2] > -1 )
	  if ( Is_code(2,reference_act[2],0,0)) {
	    Lead2_buttons.ConsLR_s=2;
	    status_consider_localref2=FALSE;
            set_buttons_lead2_conslr();

	      act_ref_data[2].copy_ref(references[2][reference_act[2]]);

	      act_reference[2].set=TRUE;
	      act_reference[0].change=FALSE;
	      act_reference[1].change=FALSE;
	      act_reference[2].change=FALSE;
	      act_reference[2].typ=2; // local
	      act_reference[2].index=reference_act[1];

	      data_mstime_index= data_fin[Marker[2].fine_index].index;
	      reference_mstime_index= data_fin[act_ref_data[2].fine_index].index;

	      data_new_r_read();
	      get_average_R();
	      update_marker(2,192);

	    draw_grid_lead0(2); 
	    show_data(2,FALSE, TRUE);

	    } // end cons loc ref 

	}
	else if ( Lead2_buttons.ConsLR_s == 2 ) { 
	    Lead2_buttons.ConsLR_s=1;
	    status_consider_localref2=TRUE;
            set_buttons_lead2_unsubtr_manual();

	    if ( global_ref[2].set) {
	      act_ref_data[2].copy_ref(global_ref[2]);
	      act_ref_data[2].code1=0;

	      act_reference[2].set=TRUE;
	      act_reference[0].change=FALSE;
	      act_reference[1].change=FALSE;
	      act_reference[2].change=FALSE;
	      act_reference[2].typ=1; // global
	      act_reference[2].index=-1;

	      data_mstime_index= data_fin[Marker[2].fine_index].index;
	      reference_mstime_index= data_fin[act_ref_data[2].fine_index].index;

	      data_new_r_read();
	      get_average_R();
	      update_marker(2,192);

	    } // end cons loc ref 
	      draw_grid_lead0(2); 
	      show_data(2,FALSE,TRUE) ;

	}
	set_buttons_lead2();

	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Event callback function for `l_cp2'.
//
Notify_value
sem_0_l_bw2_l_cp2_event_callback(Xv_window win, Event *event, Notify_arg arg, Notify_event_type type)
{
	sem_0_l_bw2_objects *ip = (sem_0_l_bw2_objects *) xv_get(xv_get(win, CANVAS_PAINT_CANVAS_WINDOW), XV_KEY_DATA, INSTANCE);
	
	// gxv_start_connections DO NOT EDIT THIS SECTION

	if (event_action(event) == ACTION_SELECT)
	{
		l_call_left2(win, event, arg, type);
	}
	
	if (event_action(event) == ACTION_ADJUST)
	{
		l_call_center2(win, event, arg, type);
	}
	
	if (event_action(event) == ACTION_MENU)
	{
		l_call_right2(win, event, arg, type);
	}
	
	// gxv_end_connections

	return notify_next_event_func(win, (Notify_event) event, arg, type);
}

//
// User-defined action for `l_cp2'.
//
void
l_call_left2(Xv_window win, Event *event, Notify_arg arg, Notify_event_type type)
{
	sem_0_l_bw2_objects *ip = (sem_0_l_bw2_objects *) xv_get(xv_get(win, CANVAS_PAINT_CANVAS_WINDOW), XV_KEY_DATA, INSTANCE);
	
long x,y,i, dx;
long c_Time;
char pr_time[12];
int lead = 2;

        x=(event->ie_xevent)->xbutton.x ;
        c_Time = (long)(FSAMP *(diagram_time_begin_lead+ double(x-160.0)*time_scale_0/960.0));

	if ( ( c_Time < data_raw[raw_display_begin].index) || ( c_Time > data_fin[fin_display_end].index ) ) return;

        i=raw_display_begin;
        while ( (c_Time > data_raw[i].index) && (i < (raw_display_end)) ) i++;
        dx= abs(c_Time - data_raw[i].index);

        click_l2.first=! click_l2.first;

        click_l2.x=(event->ie_xevent)->xbutton.x;
        click_l2.y=(event->ie_xevent)->xbutton.y;
        if ( click_l2.first ){	

   dx= abs(c_Time - data_raw[i].index);
   if (dx == 0) {
     click_l2.raw_l=i; click_l2.raw_r=i; click_l2.raw=i; 
   }
   else { click_l2.raw_l=i-1; click_l2.raw_r=i;
	  if ( dx < FSAMP) { click_l2.raw=i;}
	  else  { click_l2.raw=i-1;}
   }
   i=click_l2.raw;

   i=fin_display_begin;

   while ( ( data_raw[click_l2.raw].index > data_fin[i].index) && (i < (fin_display_end+1)) )
     {

 i++;
 }

   dx= abs( data_raw[click_l2.raw].index - data_fin[i].index);
   if (dx == 0) {
     click_l2.fine_l=i; click_l2.fine_r=i; click_l2.fine=i; 
   }
   else { click_l2.fine_l=i-1; click_l2.fine_r=i;
	  click_l2.fine=i;
   }
   i=click_l2.fine;

   XAllocNamedColor(l_b2_display, cmap,set_color8, &col, & unused);
   XSetForeground(l_b2_display, gcLead1, col.pixel);

 if (Lead2_operation == 0 || ( Lead2_operation != 0 && click_l2.y > BORDER_SEP_CLICK) ) {
  if ( click_l2.y > BORDER_SEP_CLICK ) {

   XFillRectangle(l_b2_display, l_b2_window, gcLead2, 40,162,90,15);

   XAllocNamedColor(l_b2_display, cmap,"black", &col, & unused);
   XSetForeground(l_b2_display, gcLead2, col.pixel);

   sprintf(pr_time, "%s",mstimstr(c_Time));
   XDrawString(l_b2_display, l_b2_window, gcLead2, 42, 174, pr_time, strlen(pr_time));

   XAllocNamedColor(l_b2_display, cmap,"white", &col, & unused);
   XSetForeground(l_b2_display, gcLead2, col.pixel);
   XFillRectangle(l_b2_display, l_b2_window, gcLead2, 1,55,130,90);

   XAllocNamedColor(l_b2_display, cmap,set_color8, &col, & unused);
   XSetForeground(l_b2_display, gcLead2, col.pixel);
   XFillRectangle(l_b2_display, l_b2_window, gcLead2, 1, 55,130,12);
   XFillRectangle(l_b2_display, l_b2_window, gcLead2, 1, 79,130,24);
   XFillRectangle(l_b2_display, l_b2_window, gcLead2, 1, 108, 130,12);

   XAllocNamedColor(l_b2_display, cmap,"black", &col, & unused);
   XSetForeground(l_b2_display, gcLead2, col.pixel);

   sprintf(pr_buff, "RAW: %14s",mstimstr(data_raw[click_l2.raw].index));
   XDrawString(l_b2_display, l_b2_window, gcLead2, 2, 66, pr_buff, strlen(pr_buff));

   sprintf(pr_buff, "HRate: %9d [bpm]",data_raw[click_l2.raw].HR);
   XDrawString(l_b2_display, l_b2_window, gcLead2, 2, 78, pr_buff, strlen(pr_buff));

   sprintf(pr_buff,"ST80:");
   XDrawString(l_b2_display, l_b2_window, gcLead2, 2, 90, pr_buff, strlen(pr_buff));
   sprintf(pr_buff," %6d/%6d",mk_uv(data_raw[click_l2.raw].l2_ST80),
                              mk_uv(data_raw[click_l2.raw].l2_ST80)-click_ST80_2);
   click_ST80_2 = mk_uv(data_raw[click_l2.raw].l2_ST80);
   XDrawString(l_b2_display, l_b2_window, gcLead2, 40, 90, pr_buff, strlen(pr_buff));

   sprintf(pr_buff,"STSb:");
   XDrawString(l_b2_display, l_b2_window, gcLead2, 2, 102, pr_buff, strlen(pr_buff));
   sprintf(pr_buff," %6d/%6d",mk_uv(data_raw[click_l2.raw].sub_v[lead]),
                              mk_uv(data_raw[click_l2.raw].sub_v[lead]) - click_STsb_2);
   click_STsb_2 = mk_uv(data_raw[click_l2.raw].sub_v[lead]);
   XDrawString(l_b2_display, l_b2_window,  gcLead2, 40, 102, pr_buff, strlen(pr_buff));

   sprintf(pr_buff, "FINE: %14s",mstimstr(data_fin[click_l2.fine].index));
   XDrawString(l_b2_display, l_b2_window, gcLead2, 2, 120, pr_buff, strlen(pr_buff));

   sprintf(pr_buff, "HRate: %9d [bpm]", data_fin[click_l2.fine].HR);
   XDrawString(l_b2_display, l_b2_window, gcLead2, 2, 132, pr_buff, strlen(pr_buff));

   sprintf(pr_buff,"ST80:");
   XDrawString(l_b2_display, l_b2_window, gcLead2, 2, 144, pr_buff, strlen(pr_buff));
   sprintf(pr_buff," %6d/%6d", mk_uv( data_fin[click_l2.fine].l2_ST80),
                 	   mk_uv( data_fin[click_l2.fine].l2_ST80) - click_ST80_f2);
   click_ST80_f2 = mk_uv( data_fin[click_l2.fine].l2_ST80);
   XDrawString(l_b2_display, l_b2_window, gcLead2, 40, 144, pr_buff, strlen(pr_buff));
   }
   else {
     if (IS_free(2, click_l2.raw,0)) {

      Lead2_operation = 1;

       Marker[2].set=TRUE;
       Marker[2].raw_index=click_l2.raw; Marker[2].fine_index=click_l2.fine;
       set_marker_l(2);
       draw_grid_lead0(2); 
       show_data(2,FALSE, TRUE);
       Lead2_operation = 0;}
   }
  } else {
      sub_op2_exec();
  }
             }
        else {

   XAllocNamedColor(l_b2_display, cmap,"white", &col, & unused);
   XSetForeground(l_b2_display, gcLead2, col.pixel);

   XFillRectangle(l_b2_display, l_b2_window, gcLead2, 40,162,90,15);

   XAllocNamedColor(l_b2_display, cmap,"black", &col, & unused);
   XSetForeground(l_b2_display, gcLead2, col.pixel);
	}
}

//
// User-defined action for `l_cp2'.
//
void
l_call_center2(Xv_window win, Event *event, Notify_arg arg, Notify_event_type type)
{
	sem_0_l_bw2_objects *ip = (sem_0_l_bw2_objects *) xv_get(xv_get(win, CANVAS_PAINT_CANVAS_WINDOW), XV_KEY_DATA, INSTANCE);
	
	if (Lead2_operation != 0 )  return;

def_click click_tmp2;

long x,y,i, dx;
long c_Time;
char pr_time[12];
long  r_i;
int   lead = 2;
short Lead2_operation_tmp;

        x=(event->ie_xevent)->xbutton.x;
        c_Time = (long)(FSAMP *(diagram_time_begin_lead+ double(x-160.0)*time_scale_0/960.0));

	if ( ( c_Time < data_raw[raw_display_begin].index) || ( c_Time > data_fin[fin_display_end].index ) ) return;

        i=raw_display_begin;
        while ( (c_Time > data_raw[i].index) && (i < (raw_display_end)) ) i++;
        dx= abs(c_Time - data_raw[i].index);

        click_c2.first=! click_c2.first;

        click_c2.x=(event->ie_xevent)->xbutton.x;
        click_c2.y=(event->ie_xevent)->xbutton.y;
        if ( click_c2.first ){	

   dx= abs(c_Time - data_raw[i].index);
   if (dx == 0) {
     click_c2.raw_l=i; click_c2.raw_r=i; click_c2.raw=i; 
   }
   else { click_c2.raw_l=i-1; click_c2.raw_r=i;
	  if ( dx < FSAMP) { click_c2.raw=i;}
	  else  { click_c2.raw=i-1;}
   }
   i=click_c2.raw;

   i=fin_display_begin;

   while ( ( data_raw[click_c2.raw].index > data_fin[i].index) && (i < (fin_display_end+1)) )
     {

 i++;
 }

   dx= abs( data_raw[click_c2.raw].index - data_fin[i].index);
   if (dx == 0) {
     click_c2.fine_l=i; click_c2.fine_r=i; click_c2.fine=i; 
   }
   else { click_c2.fine_l=i-1; click_c2.fine_r=i;
	  click_c2.fine=i;
   }
   i=click_c2.fine;

   if ( click_c2.y <= BORDER_SEP_CLICK ) {
       Lead2_operation_tmp = Lead2_operation;
       Lead2_operation = 9;

       click_tmp2.first = click_l2.first;
       click_tmp2.x = click_l2.x;
       click_tmp2.y = click_l2.y;
       click_tmp2.time_index = click_l2.time_index;
       click_tmp2.raw = click_l2.raw;
       click_tmp2.raw_l = click_l2.raw_l;
       click_tmp2.raw_r = click_l2.raw_r;
       click_tmp2.fine = click_l2.fine;
       click_tmp2.fine_l = click_l2.fine_l;
       click_tmp2.fine_r = click_l2.fine_r;

       click_l2.first = click_c2.first;
       click_l2.x = click_c2.x;
       click_l2.y = click_c2.y;
       click_l2.time_index = click_c2.time_index;
       click_l2.raw = click_c2.raw;
       click_l2.raw_l = click_c2.raw_l;
       click_l2.raw_r = click_c2.raw_r;
       click_l2.fine = click_c2.fine;
       click_l2.fine_l = click_c2.fine_l;
       click_l2.fine_r = click_c2.fine_r;

       fast2_center = TRUE;
      
       if (!repeat_set2) {
         fast2_center = FALSE;
         sub_op2_start();     
       }
       sub_op2_exec();
       fast2_center = FALSE;

       click_l2.first = click_tmp2.first;
       click_l2.x = click_tmp2.x;
       click_l2.y = click_tmp2.y;
       click_l2.time_index = click_tmp2.time_index;
       click_l2.raw = click_tmp2.raw;
       click_l2.raw_l = click_tmp2.raw_l;
       click_l2.raw_r = click_tmp2.raw_r;
       click_l2.fine = click_tmp2.fine;
       click_l2.fine_l = click_tmp2.fine_l;
       click_l2.fine_r = click_tmp2.fine_r;

    Lead2_operation = Lead2_operation_tmp;

   }
 }
}

//
// User-defined action for `l_cp2'.
//
void
l_call_right2(Xv_window win, Event *event, Notify_arg arg, Notify_event_type type)
{
	sem_0_l_bw2_objects *ip = (sem_0_l_bw2_objects *) xv_get(xv_get(win, CANVAS_PAINT_CANVAS_WINDOW), XV_KEY_DATA, INSTANCE);
	
}

//
// User-defined action for `m_b_Lead0'.
//
void
l_ini_lcp_b(Panel_item item, Event *event)
{
	sem_0_m_bw_objects *ip = (sem_0_m_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	draw_grid_lead0(0);  
	if (lead1_data )  draw_grid_lead0(1); 
	if (lead2_data )  draw_grid_lead0(2); 

}

//
// User-defined action for `m_b_Data'.
//
void
d_ini_cp_b(Panel_item item, Event *event)
{
	sem_0_m_bw_objects *ip = (sem_0_m_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	show_data(Data_lead,TRUE, FALSE);
}

//
// User-defined action for `m_b_Lead1'.
//
void
l_ini_cp1_b(Panel_item item, Event *event)
{
	sem_0_m_bw_objects *ip = (sem_0_m_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
        draw_grid_lead0(1); 
}

//
// User-defined action for `m_b_KLCoeff'.
//
void
k_ini_cp_b(Panel_item item, Event *event)
{
	sem_0_m_bw_objects *ip = (sem_0_m_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
        draw_grid_coeff();
}

//
// User-defined action for `m_b_Lead2'.
//
void
l_ini_cp2_b(Panel_item item, Event *event)
{
	sem_0_m_bw_objects *ip = (sem_0_m_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
    
        draw_grid_lead0(2); 
}

//
// Repaint callback function for `k_cp'.
//
void
k_ini_cpb(Canvas canvas, Xv_window paint_window, Display *display, Window xid, Xv_xrectlist *rects)
{
	gckoeff = DefaultGC(display, DefaultScreen(display));
	k_b_display = display;
	k_b_window = xid;
	
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Repaint callback function for `d_cp'.
//
void
d_ini_cpb(Canvas canvas, Xv_window paint_window, Display *display, Window xid, Xv_xrectlist *rects)
{
	gcdata = DefaultGC(display, DefaultScreen(display));
	d_b_display = display;
	d_b_window = xid;

	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Repaint callback function for `l_cp1'.
//
void
l_ini_cp1b(Canvas canvas, Xv_window paint_window, Display *display, Window xid, Xv_xrectlist *rects)
{
       	gcLead1 = DefaultGC(display, DefaultScreen(display));
	l_b1_display = display;
	l_b1_window = xid;

	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Repaint callback function for `l_cp2'.
//
void
l_ini_cp2b(Canvas canvas, Xv_window paint_window, Display *display, Window xid, Xv_xrectlist *rects)
{
	gcLead2 = DefaultGC(display, DefaultScreen(display));
	l_b2_display = display;
	l_b2_window = xid;


	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Event callback function for `m_b_Open'.
//
void
sem_0_m_bw_m_b_Open_event_callback(Panel_item item, Event *event)
{
	sem_0_m_bw_objects *ip = (sem_0_m_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections

	panel_default_handle_event(item, event);
}

//
// User-defined action for `m_b_Open'.
//
void
main_open_init(Panel_item item, Event *event)
{
	sem_0_m_bw_objects *ip = (sem_0_m_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);

// set parameters

FILE *set_data=NULL;
char i_str1[132], i_str2[132];
int x, i, j, l;
int test=0;

	if((set_data=fopen("semia.opt","r")) != NULL )
	   {
	     l=fscanf(set_data,"%s\n",&i_str1);

	     i=0; j=0;
	     while ((i_str1[i] != ':') && ( i < 132) ) i++;
	     i++;
	     while (i_str1[i] != 0 ) { i_str2[j]=i_str1[i]; i++; j++;}
	     i_str2[j]=0;
	     x=(int)(strtod(i_str2,0));

             set_line_width=x;
	     if ((x > 0) && (x < 5) )
	       { set_line_width=x;}
	     else 
	       { test++;}

	     l=fscanf(set_data,"%s\n",&i_str1);

	     i=0; j=0;
	     while ((i_str1[i] != ':') && ( i < 132) ) i++;
	     i++;
	     while (i_str1[i] != 0 ) { set_color1[j]=i_str1[i]; i++; j++;}
	     set_color1[j]=0;
	     if (j == 0) test++;

	     l=fscanf(set_data,"%s\n",&i_str1);

	     i=0; j=0;
	     while ((i_str1[i] != ':') && ( i < 132) ) i++;
	     i++;
	     while (i_str1[i] != 0 ) { set_color2[j]=i_str1[i]; i++; j++;}  
	     set_color2[j]=0;
	     if (j == 0) test++;

	     l=fscanf(set_data,"%s\n",&i_str1);

             i=0; j=0;
	     while ((i_str1[i] != ':') && ( i < 132) ) i++;
	     i++;
	     while (i_str1[i] != 0 ) { set_color3[j]=i_str1[i]; i++; j++;}  
	     set_color3[j]=0;
	     if (j == 0) test++;

	     l=fscanf(set_data,"%s\n",&i_str1);

	     i=0; j=0;
	     while ((i_str1[i] != ':') && ( i < 132) ) i++;
	     i++;
	     while (i_str1[i] != 0 ) { set_color4[j]=i_str1[i]; i++; j++;}  
	     set_color4[j]=0;
	     if (j == 0) test++;

	     l=fscanf(set_data,"%s\n",&i_str1);

	     i=0; j=0;
	     while ((i_str1[i] != ':') && ( i < 132) ) i++;
	     i++;
	     while (i_str1[i] != 0 ) { set_color5[j]=i_str1[i]; i++; j++;}  
	     set_color5[j]=0;
	     if (j == 0) test++;

	     l=fscanf(set_data,"%s\n",&i_str1);

	     i=0; j=0;
	     while ((i_str1[i] != ':') && ( i < 132) ) i++;
	     i++;
	     while (i_str1[i] != 0 ) { set_color6[j]=i_str1[i]; i++; j++;}  
	     set_color6[j]=0;
	     if (j == 0) test++;

	if (test > 0 ){ 
               fprintf(stderr,"semia: incorrect options (semia.opt file)\n");
               fprintf(stderr,"LineWidth:%d\n",set_line_width);
               fprintf(stderr,"Color1:%s\n",set_color1);
               fprintf(stderr,"Color2:%s\n",set_color2);
               fprintf(stderr,"Color3:%s\n",set_color3);
               fprintf(stderr,"Color4:%s\n",set_color4);
               fprintf(stderr,"Color5:%s\n",set_color5);
               fprintf(stderr,"Color6:%s\n",set_color6);
                      }
	  }
	else
	  {
           fprintf(stderr,"semia: no semia.opt file\n");
          }

	xv_set(Sem_0_o_pw.o_b_OK, PANEL_INACTIVE, TRUE, NULL);

        xv_set(Sem_0_m_bw.m_b_Lead0, PANEL_INACTIVE, TRUE, NULL);
        xv_set(Sem_0_m_bw.m_b_Lead1, PANEL_INACTIVE, TRUE, NULL);
        xv_set(Sem_0_m_bw.m_b_Lead2, PANEL_INACTIVE, TRUE, NULL);
        xv_set(Sem_0_m_bw.m_b_Data, PANEL_INACTIVE, TRUE, NULL);
        xv_set(Sem_0_m_bw.m_b_KLCoeff, PANEL_INACTIVE, TRUE, NULL);
        xv_set(Sem_0_m_bw.m_b_DiagData, PANEL_INACTIVE, TRUE, NULL);
        xv_set(Sem_0_m_bw.m_b_NumEpis, PANEL_INACTIVE, TRUE, NULL);

	  xv_set(Sem_0_l_bw.l_b_shift_l, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_ll, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_l1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_ll1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_l2, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_ll2, PANEL_INACTIVE, FALSE, NULL);

	  xv_set(Sem_0_l_bw.l_b_shift_r, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw.l_b_shift_rr, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_r1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw1.l_b_shift_rr1, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_r2, PANEL_INACTIVE, FALSE, NULL);
	  xv_set(Sem_0_l_bw2.l_b_shift_rr2, PANEL_INACTIVE, FALSE, NULL);

nsig=0;

// set initial state

final_save = FALSE;
auto_save  = FALSE;     
auto_save_counter = 0;
lead1_data=FALSE,  lead2_data=FALSE; // given data
last_set_all = FALSE;
Lead0_operation=0; Lead1_operation=0; Lead2_operation=0;
change_atribute0=FALSE;  change_atribute1=FALSE; change_atribute2=FALSE;
how0=FALSE; how1=FALSE; how2=FALSE;
Data_lead=0;
repeat_set =FALSE; repeat_set1=FALSE; repeat_set2=FALSE;

global_set= FALSE;
act_reference[0].set=FALSE; act_reference[1].set=FALSE; act_reference[2].set=FALSE;
Marker[0].set = FALSE;  Marker[1].set = FALSE;  Marker[2].set= FALSE;

status_manual_mode=TRUE, status_unsubtracted=TRUE, status_consider_localref=TRUE;
status_manual_mode1=TRUE, status_unsubtracted1=TRUE, status_consider_localref1=TRUE;
status_manual_mode2=TRUE, status_unsubtracted2=TRUE, status_consider_localref2=TRUE;

status_consider_localref = TRUE; status_consider_localref1 = TRUE; status_consider_localref2 = TRUE;
   
reset_HR_lead0(0);   reset_HR_lead0(1);   reset_HR_lead0(2);

set_buttons_lead0_start();
lead0_plot_button_status.HRate=TRUE;
set_buttons_lead0();
set_buttons_lead1_start();
lead1_plot_button_status.HRate=TRUE;
set_buttons_lead1();
set_buttons_lead2_start();
lead2_plot_button_status.HRate=TRUE;
set_buttons_lead2();

// lead window general
time_scale_0=720, time_scale_1=720, time_scale_2=720;  // 720 = 12 min 
time_scale_d=6; // 6 = 6sec

scale_time_tick=60; // 720 / 12 = 60

	 xv_set(Sem_0_l_bw.l_ss_12min, PANEL_VALUE,5,NULL);
	 xv_set(Sem_0_l_bw1.l_ss_12min1, PANEL_VALUE,5,NULL);
	 xv_set(Sem_0_l_bw2.l_ss_12min2, PANEL_VALUE,5,NULL);

	 xv_set(Sem_0_l_bw.l_ss_100mV, PANEL_VALUE,4,NULL);
	 xv_set(Sem_0_l_bw1.l_ss_100mV1, PANEL_VALUE,4,NULL);
	 xv_set(Sem_0_l_bw2.l_ss_100mV2, PANEL_VALUE,4,NULL);

	 xv_set(Sem_0_l_bw.l_ss_HRate, PANEL_VALUE,0,NULL);
	 xv_set(Sem_0_l_bw1.l_ss_HRate1, PANEL_VALUE,0,NULL);
	 xv_set(Sem_0_l_bw2.l_ss_HRate2, PANEL_VALUE,0,NULL);

// lead0 window
ampl_0=100; ampl_1=100; ampl_2=100;
allow_l0=FALSE;
click_l0.first=FALSE; 
click_r0.first=FALSE; 
auto_ampl_2[0]= 75 * STAMPL / 1000;

// active = true
   ovr0_l1=FALSE; ovr0_l2=FALSE; 
   ovr0_app = FALSE;  

   click_ST80_0 = 0, click_STsb_0 = 0, click_ST80_f0 = 0;
   fast0_center = FALSE; 
   fast0_right  = FALSE; 

// lead1 window
   ampl_1=100;
   click_ST80_1 = 0, click_STsb_1 = 0, click_ST80_f1 = 0;
   fast1_center = FALSE; 
   fast1_right  = FALSE; 
   ovr1_l0=FALSE,  ovr1_l2=FALSE;
   ovr1_app = FALSE; 
   allow_l1=FALSE;
   click_l1.first=FALSE; 
   click_r1.first=FALSE; 
   auto_ampl_2[1]= 75 * STAMPL / 1000;

// lead2 window
   ampl_2=100; // 100 = 100uV
   click_ST80_2 = 0, click_STsb_2 = 0, click_ST80_f2 = 0;
   fast2_center = FALSE; 
   fast2_right  = FALSE; 
   ovr2_l1=FALSE,  ovr2_l0=FALSE;
   ovr2_app = FALSE;
   allow_l2=FALSE;
   click_l2.first=FALSE; 
   click_r2.first=FALSE; 
   auto_ampl_2[2]= 75 * STAMPL / 1000;

// coeff window
KL_coefficents=TRUE; // display = true
ampl_c=1.0;
click_c.first=FALSE; 
ovr_coef=FALSE; // overly

// data window
Data_lead=0; 
data_ovrly=1; 
data_ovrly_shift=FALSE;
data_ovr_ref=FALSE;
x_lead =FALSE;

  xv_set(Sem_0_d_bw.d_b_lead, PANEL_LABEL_STRING, "Lead 0", NULL);
  xv_set(Sem_0_d_bw.d_ss_6s, PANEL_VALUE,4,NULL);
  xv_set(Sem_0_d_bw.d_ss_1mV, PANEL_VALUE,9,NULL);
  xv_set(Sem_0_d_bw.d_ss_520ms, PANEL_VALUE,4,NULL);
  xv_set(Sem_0_d_bw.d_ss_16s, PANEL_VALUE,5,NULL);

  xv_set(Sem_0_d_bw.d_ss_Ovrly, PANEL_VALUE,0,NULL);

  xv_set(Sem_0_d_bw.d_b_OvrRef, PANEL_INACTIVE, TRUE, NULL); 

ampl_d=1000;   // default 1mV

data_tick=160;
data_scale=6;

data_grid_tick= data_tick * 960.0 / data_scale / 1000.0;
data_ovr_l0= FALSE;  data_ovr_l1= FALSE;  data_ovr_l2= FALSE;

current_average_beat_time=520 ;           // 520 msec
d_avrg_index = current_average_beat_time / ( 1000 / FSAMP ) /2 ;

current_average_window_index= 8 *FSAMP;   // index =( time [sec] / 2 ) -> msec
current_average_window_time= 8 ;          // 16 sec  - default

xv_set(Sem_0_k_bw.k_ss_ST, PANEL_VALUE,0,NULL);
xv_set(Sem_0_k_bw.k_ss_1std, PANEL_VALUE,5,NULL);
xv_set(Sem_0_k_bw.k_b_Overlay, PANEL_LABEL_STRING, "DistF", NULL);

ovr_coef=FALSE;
	
current_mean_smp=5;

reset_global_reference();

}

//
// Notify callback function for `o_fike_button1'.
//
void
sem_0_o_pw_o_fike_button1_notify_callback(Panel_item item, Event *event)
{
	sem_0_o_pw_objects *ip = (sem_0_o_pw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections

}

//
// Notify callback function for `d_b_lead'.
//
void
d_call_menu_lead(Panel_item item, Event *event)
{
	sem_0_d_bw_objects *ip = (sem_0_d_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections
}

//
// Menu handler for `d_menu_lead (Lead0)'.
//
Menu_item
d_menu_call_lead0(Menu_item item, Menu_generate op)
{
	sem_0_d_bw_objects * ip = (sem_0_d_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	switch (op) {
	case MENU_DISPLAY:
	  	if (  Data_lead == 0 ) { xv_set(item, MENU_INACTIVE, TRUE, 0);
						  }
		else
		  { xv_set(item, MENU_INACTIVE, FALSE, 0);}
		break;

	case MENU_DISPLAY_DONE:
		break;

	case MENU_NOTIFY:

	  xv_set(Sem_0_d_bw.d_b_lead, PANEL_LABEL_STRING, "Lead 0", NULL);

          Data_lead=0; 
	  data_ovr_l0= FALSE;  data_ovr_l1= FALSE;  data_ovr_l2= FALSE;

	  current_j_m=Marker[Data_lead].nJ;
	  current_iso_m=Marker[Data_lead].nISO;

          show_data(Data_lead,FALSE, FALSE);

		// gxv_start_connections DO NOT EDIT THIS SECTION
		// gxv_end_connections

		break;

	case MENU_NOTIFY_DONE:
		break;
	}
	return item;
}

//
// Menu handler for `d_menu_lead (Lead1)'.
//
Menu_item
d_menu_call_lead1(Menu_item item, Menu_generate op)
{
	sem_0_d_bw_objects * ip = (sem_0_d_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	switch (op) {

	case MENU_DISPLAY:
	  	if ( (! lead1_data) OR (Data_lead ==1) ) { xv_set(item, MENU_INACTIVE, TRUE, 0);
						  }
		else
		  { xv_set(item, MENU_INACTIVE, FALSE, 0);
						  }
		break;

	case MENU_DISPLAY_DONE:
		break;

	case MENU_NOTIFY:
		
	  xv_set(Sem_0_d_bw.d_b_lead, PANEL_LABEL_STRING, "Lead 1", NULL);
          Data_lead=1;
	  data_ovr_l0= FALSE;  data_ovr_l1= FALSE;  data_ovr_l2= FALSE;

	  current_j_m=Marker[Data_lead].nJ;
	  current_iso_m=Marker[Data_lead].nISO;

		 show_data(Data_lead,FALSE, FALSE);

		// gxv_start_connections DO NOT EDIT THIS SECTION
		// gxv_end_connections

		break;

	case MENU_NOTIFY_DONE:
		break;
	}
	return item;
}

//
// Menu handler for `d_menu_lead (Lead2)'.
//
Menu_item
d_menu_call_lead2(Menu_item item, Menu_generate op)
{
	sem_0_d_bw_objects * ip = (sem_0_d_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	switch (op) {
	case MENU_DISPLAY:
	  	if ( (! lead2_data)  OR ( Data_lead == 2) ) { xv_set(item, MENU_INACTIVE, TRUE, 0);
						  }
		else
		  { xv_set(item, MENU_INACTIVE, FALSE, 0);
						  }
		break;

	case MENU_DISPLAY_DONE:
		break;

	case MENU_NOTIFY:

		
	  xv_set(Sem_0_d_bw.d_b_lead, PANEL_LABEL_STRING, "Lead 2", NULL);
          Data_lead=2; 
	  data_ovr_l0= FALSE;  data_ovr_l1= FALSE;  data_ovr_l2= FALSE;

	  current_j_m=Marker[Data_lead].nJ;
	  current_iso_m=Marker[Data_lead].nISO;

		show_data(Data_lead,FALSE, FALSE);

		// gxv_start_connections DO NOT EDIT THIS SECTION
		// gxv_end_connections

		break;

	case MENU_NOTIFY_DONE:
		break;
	}
	return item;
}

//
// Notify callback function for `d_ss_Ovrly'.
//
void
d_call_menu_Ovrly(Panel_item item, int value, Event *event)
{
	sem_0_d_bw_objects *ip = (sem_0_d_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	if (value == 0) { data_ovrly_shift=FALSE; }
	if (value == 1) { data_ovrly_shift=TRUE; }
	if (value == 2) { data_ovrly_shift=FALSE; }

	if (value == 3) { data_ovrly_shift=FALSE; }
	if (value == 4) { data_ovrly_shift=FALSE; }
	
	// gxv_start_connections DO NOT EDIT THIS SECTION
	// gxv_end_connections

	show_data(Data_lead,FALSE, FALSE);
}

//
// Notify callback function for `m_b_NumEpis'.
//
void
sem_0_m_bw_m_b_NumEpis_notify_callback(Panel_item item, Event *event)
{
	sem_0_m_bw_objects *ip = (sem_0_m_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	// gxv_start_connections DO NOT EDIT THIS SECTION

	xv_set(Sem_0_c_pw.c_pw, FRAME_CMD_PUSHPIN_IN, TRUE, NULL);
	xv_set(Sem_0_c_pw.c_pw, XV_SHOW, TRUE, NULL);
	
	init_counts(item, event);
	
	show_counts(item, event);
	
	// gxv_end_connections

}

//
// User-defined action for `m_b_NumEpis'.
//
void
init_counts(Panel_item item, Event *event)
{
	sem_0_m_bw_objects *ip = (sem_0_m_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
}
//
// User-defined action for `m_b_NumEpis'.
//
void
show_counts(Panel_item item, Event *event)
{
	sem_0_m_bw_objects *ip = (sem_0_m_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
FILE *file_counts=NULL;
char counts_name[16];
char bufferc[512];
static int al=0;

	xv_set(Sem_0_c_pw.textpane_numepis, TEXTSW_READ_ONLY, FALSE, NULL);
        xv_set(Sem_0_c_pw.textpane_numepis, TEXTSW_IGNORE_LIMIT, TEXTSW_INFINITY, NULL);

        textsw_delete(Sem_0_c_pw.textpane_numepis,0,TEXTSW_INFINITY);
        textsw_reset(Sem_0_c_pw.textpane_numepis,0,TEXTSW_INFINITY);
        al = 0;

	xv_set(Sem_0_c_pw.textpane_numepis, TEXTSW_READ_ONLY, TRUE, NULL);
        xv_set(Sem_0_c_pw.textpane_numepis, TEXTSW_IGNORE_LIMIT, TEXTSW_INFINITY, NULL);
                
        sprintf(counts_name,"%s.cnt",inp_rec_name);
	file_counts=fopen(counts_name,"r");

   	if (file_counts == NULL) {
	  sprintf(bufferc,"\n\n    No <%s.cnt> file !\n\n",  inp_rec_name );
          textsw_replace_bytes(Sem_0_c_pw.textpane_numepis,al,al,
                                                       bufferc,strlen(bufferc));
          al += strlen(bufferc);
	} else {
	  while (fgets(bufferc,512,file_counts) != NULL) {
	    textsw_replace_bytes(Sem_0_c_pw.textpane_numepis,al,al,
                                                        " ",strlen(" "));
            al += strlen(" ");
	    textsw_replace_bytes(Sem_0_c_pw.textpane_numepis,al,al,
                                                        bufferc,strlen(bufferc));
            al += strlen(bufferc);
	  }
        fclose(file_counts);
        textsw_normalize_view(Sem_0_c_pw.textpane_numepis, 0);
	} 
	xv_set(Sem_0_c_pw.textpane_numepis, TEXTSW_READ_ONLY, TRUE, NULL);
        xv_set(Sem_0_c_pw.textpane_numepis, TEXTSW_IGNORE_LIMIT, TEXTSW_INFINITY, NULL);
}

//
// Notify callback function for `m_b_DiagData'.
//
void
sem_0_m_bw_m_b_DiagData_notify_callback(Panel_item item, Event *event)
{
	sem_0_m_bw_objects *ip = (sem_0_m_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	// gxv_start_connections DO NOT EDIT THIS SECTION

	xv_set(Sem_0_d_pw.d_pw, FRAME_CMD_PUSHPIN_IN, TRUE, NULL);
	xv_set(Sem_0_d_pw.d_pw, XV_SHOW, TRUE, NULL);
	
	init_diagdata(item, event);
	
	show_diagdata(item, event);
	
	// gxv_end_connections
}

//
// User-defined action for `m_b_DiagData'.
//
void
init_diagdata(Panel_item item, Event *event)
{
	sem_0_m_bw_objects *ip = (sem_0_m_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
}

//
// User-defined action for `m_b_DiagData'.
//
void
show_diagdata(Panel_item item, Event *event)
{
	sem_0_m_bw_objects *ip = (sem_0_m_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);

FILE   *file_diag=NULL;
char   diag_name[16];
char   buffer[512];
char   mrec[8], cleads[3], fsamp[5], durat[32], stime[64], lname[32];
int    ix,ix1,ix2,ix3, theleads, ihours, imin, isec;
double sec, ddurat;
long   ldurat;
static int ad=0;
static int clines=0;

	xv_set(Sem_0_d_pw.textpane_data, TEXTSW_READ_ONLY, FALSE, NULL);
        xv_set(Sem_0_d_pw.textpane_data, TEXTSW_IGNORE_LIMIT, TEXTSW_INFINITY, NULL);

        textsw_delete(Sem_0_d_pw.textpane_data,0,TEXTSW_INFINITY);
        textsw_reset(Sem_0_d_pw.textpane_data,0,TEXTSW_INFINITY);
        ad = 0;

	xv_set(Sem_0_d_pw.textpane_data, TEXTSW_READ_ONLY, TRUE, NULL);
        xv_set(Sem_0_d_pw.textpane_data, TEXTSW_IGNORE_LIMIT, TEXTSW_INFINITY, NULL);

	sprintf(diag_name,"%s.hea",inp_rec_name);
	file_diag=fopen(diag_name,"r");

   	if (file_diag == NULL) {
	  sprintf(buffer,"\n\n    No <%s.hea> file !\n\n",  inp_rec_name );
          textsw_replace_bytes(Sem_0_d_pw.textpane_data,ad,ad,
                                                     buffer,strlen(buffer));
          ad += strlen(buffer);
	} else {
            fgets(buffer,512,file_diag);
            clines++;
              ix = ix1 = 0;
              while (buffer[ix] != ' ') { mrec[ix1] = buffer[ix]; ix1++; ix++; }
              mrec[ix1] = '\0';
              ix++; ix1=0;
              cleads[ix1] = buffer[ix];
              ix1++; ix++;
              cleads[ix1] = '\0';  theleads = atoi(cleads);
              ix++; ix1=0;

              while (buffer[ix] != ' ') { fsamp[ix1] = buffer[ix]; ix1++; ix++; }
              fsamp[ix1] = '\0';
              ix++; ix1=0;
              while ((buffer[ix] != ' ')&&(buffer[ix] != '\n')) { durat[ix1] = buffer[ix]; ix1++; ix++; }
              durat[ix1] = '\0';
              if (buffer[ix]!='\n') ix++; 
              ix1=0;
              while (buffer[ix] != '\n') { stime[ix1] = buffer[ix]; ix1++; ix++; }
              stime[ix1] = '\0';

              ldurat = atol(durat);
              ldurat *= 4;
              ddurat = (double)ldurat/1000.;
              ihours = (int)((double)ddurat / 3600.);
              ddurat = ddurat - (ihours * 3600);
              imin   = (int)((double)ddurat / 60.);
              ddurat = ddurat - (imin * 60);
        
              sprintf(buffer,"\n Record: %s    Leads: %s    Sampling frequency: %s[samples/sec]\n\n Start time, recording date: %s\n Duration: %2d:%2d:%6.3f\n\n",  mrec, cleads, fsamp, stime, ihours, imin, ddurat);

	    textsw_replace_bytes(Sem_0_d_pw.textpane_data,ad,ad,
                                                        buffer,strlen(buffer));
            ad += strlen(buffer);

            ix = 0;
            while (ix < theleads) {
               fgets(buffer,512,file_diag);
               clines++;

               ix1 = 0; while (buffer[ix1] != '\0') ix1++;
               ix2 = ix1;
               while (buffer[ix2] != ' ') ix2--;
               for (ix3=ix2+1; ix3 <= ix1; ix3++) lname[ix3-ix2-1] = buffer[ix3];

               sprintf(buffer," Lead %1d:  %s", ix, lname);
	       textsw_replace_bytes(Sem_0_d_pw.textpane_data,ad,ad,
                                                        buffer,strlen(buffer));
               ad += strlen(buffer);
               
               ix++;                  
	    }
          sprintf(buffer,"\n");
	  textsw_replace_bytes(Sem_0_d_pw.textpane_data,ad,ad,
                                                        buffer,strlen(buffer));
          ad += strlen(buffer);
	  while (fgets(buffer,512,file_diag) != NULL) {
            clines++;
            if (buffer[0] == '#') buffer[0] = ' ';
	    textsw_replace_bytes(Sem_0_d_pw.textpane_data,ad,ad,
                                                        buffer,strlen(buffer));
            ad += strlen(buffer);
	  }
	  fclose(file_diag);
          textsw_normalize_view(Sem_0_d_pw.textpane_data, 0);
	}
	xv_set(Sem_0_d_pw.textpane_data, TEXTSW_READ_ONLY, TRUE, NULL);
        xv_set(Sem_0_d_pw.textpane_data, TEXTSW_IGNORE_LIMIT, TEXTSW_INFINITY, NULL);
}

//
// Notify callback function for `m_b_help'.
//
void
sem_0_m_bw_m_b_help_notify_callback(Panel_item item, Event *event)
{
	sem_0_m_bw_objects *ip = (sem_0_m_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
	
	// gxv_start_connections DO NOT EDIT THIS SECTION

	xv_set(Sem_0_h_pw.h_pw, FRAME_CMD_PUSHPIN_IN, TRUE, NULL);
	xv_set(Sem_0_h_pw.h_pw, XV_SHOW, TRUE, NULL);
	
	init_help(item, event);

	show_help(item, event);
	
	// gxv_end_connections

}

//
// User-defined action for `m_b_help'.
//
void
init_help(Panel_item item, Event *event)
{
	sem_0_m_bw_objects *ip = (sem_0_m_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);
}

//
// User-defined action for `m_b_help'.
//
void
show_help(Panel_item item, Event *event)
{
	sem_0_m_bw_objects *ip = (sem_0_m_bw_objects *) xv_get(item, XV_KEY_DATA, INSTANCE);

FILE *file_counts=NULL;
char counts_name[16];
char bufferh[512];
static int ah=0;

	xv_set(Sem_0_h_pw.textpane_help, TEXTSW_READ_ONLY, FALSE, NULL);
        xv_set(Sem_0_h_pw.textpane_help, TEXTSW_IGNORE_LIMIT, TEXTSW_INFINITY, NULL);

        textsw_delete(Sem_0_h_pw.textpane_help,0,TEXTSW_INFINITY);
        textsw_reset(Sem_0_h_pw.textpane_help,0,TEXTSW_INFINITY);
        ah = 0;

	xv_set(Sem_0_h_pw.textpane_help, TEXTSW_READ_ONLY, TRUE, NULL);
        xv_set(Sem_0_h_pw.textpane_help, TEXTSW_IGNORE_LIMIT, TEXTSW_INFINITY, NULL);
                
        sprintf(counts_name,"semia.hlp");
	file_counts=fopen(counts_name,"r");

   	if (file_counts == NULL) {
	  sprintf(bufferh,"\n\n    No <%s.hlp> file !\n\n",  inp_rec_name );
          textsw_replace_bytes(Sem_0_h_pw.textpane_help,ah,ah,
                                                       bufferh,strlen(bufferh));
          ah += strlen(bufferh);
	} else {
	  while (fgets(bufferh,512,file_counts) != NULL) {
	    textsw_replace_bytes(Sem_0_h_pw.textpane_help,ah,ah,
                                                        bufferh,strlen(bufferh));
            ah += strlen(bufferh);
	  }
        fclose(file_counts);
        textsw_normalize_view(Sem_0_h_pw.textpane_help, 0);
	} 
	xv_set(Sem_0_h_pw.textpane_help, TEXTSW_READ_ONLY, TRUE, NULL);
        xv_set(Sem_0_h_pw.textpane_help, TEXTSW_IGNORE_LIMIT, TEXTSW_INFINITY, NULL);
}
//=========================================================================================================