Index: /trunk/Poubelle/archediab.old/archediab.sources/c/acqui_util.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/acqui_util.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/acqui_util.c	(revision 637)
@@ -0,0 +1,407 @@
+#include "diabolo.h"
+#include "bolo.h"
+#include "acqui.h"
+#include "fichier.h"
+#include "tm.h"
+#include "tache.h"
+#include "regul.h"
+#include "auto.h"
+#include "config_transputer.h" 
+
+
+
+
+void init_struct(int PCI_actif)
+{
+int i,j;
+def_long_block
+def_nom_block
+printf("memoire pour stglob: %d K  \nmemoire pour  tmtc : %d K \n",
+			(sizeof(stglob)>>10),(sizeof(tmtc)>>10));
+
+gg=malloc(sizeof(stglob));
+
+random(-1);
+
+if(parametr.numero_version!=version_num) {erreur("erreur numero de version\n");return;}
+if(parametr.n_max_bolo!=nb_max_bolo) {erreur("erreur nb_max_bolo \n");return;}
+if(parametr.n_per_block!=nb_per_block) {erreur("erreur nb_per_block\n");return;}
+if(parametr.n_max_mes_per!=nb_max_mes_per) {erreur("erreur nb_max_mes_per\n");return;}
+if(parametr.nb_bolo!=nb_bolo_util) {erreur("erreur nb_bolo_util\n");return;}
+
+for(j=0;j<nb_max_bolo;j++) 
+		{
+//		parametr.bolo[j].bolo_code_util=0;
+//		strcpy(parametr.bolo[j].bolo_nom,"");
+//		parametr.bolo[j].bolo_bebo=0;
+//		parametr.bolo[j].bolo_num=0;
+//		parametr.bolo[j].bolo_gain=1000;
+//		parametr.bolo[j].bolo_capa=0;
+//		parametr.bolo[j].bolo_diviseur=0;
+//		parametr.presence_bebo=0;
+//    		parametr.coef[nb_max_bolo][7]  non  initialisé
+
+		gg->reglage.bolo[j].mot1=0;
+		gg->reglage.bolo[j].mot2=0;
+//		gg->reglage.gainbrut[j]=0;
+//		gg->reglage.gain[j]=1;
+		}
+gg->temps_cntl=0;
+gg->depou_en_cours=0;
+gg->trace_ouvert=0;
+for(j=0;j<8;j++) gg->trace_tout[j]=0;
+gg->scan_en_cours=0;
+gg->flag_corel=0;
+gg->flag_tc_reduite=0;
+gg->fichier_dia2_ouvert=0;
+gg->fichier_arch_ouvert=0;
+gg->flag_fou=0;
+gg->temps_origine=0;
+
+//----------   initialise les structures de la tache     -------------
+tt=malloc(sizeof(tmtc));
+
+tt->PCI_actif=PCI_actif;
+printf("tt->PCI_actif=%d \n",tt->PCI_actif);
+
+tt->reglage=gg->reglage;
+
+tt->vi.temps_cntl=0;
+
+tt->signal_scan_immediat=0;
+	// donc toujours zero pour archeops
+
+for(j=0;j<nb_max_bolo;j++) 
+	{
+	tt->ds.ii[j]=0;
+	}
+
+
+tt->te.pos_ecrit=0;tt->te.pos_lit=0;
+tt->tc.pos_ecrit=0;tt->tc.pos_lit=0;
+tt->tm.pos_ecrit=0;tt->tm.pos_lit=0;
+
+
+
+j=0;
+for(i=0;i<nb_type_blocks;i++)	
+	{
+	printf(" - size=%5d   block : %s\n",long_block[i],nom_block[i]);
+	if (long_block[i]> j ) j=long_block[i];
+	}
+printf(" taille maxi du block de telemesure = %d  //  on reserve %d octets par block \n",
+		j,sizeof(block_type_modele));
+if(j>sizeof(block_type_modele)) erreur("block_type_modele trops petit");
+
+
+
+
+init_tache();	// init dependant des taches    
+
+}
+
+
+
+//_________________________________________________________________________________________________________________
+int	test_erreur(void)
+{
+int err,i;
+DateTimeRec date;
+err=tt->te.pos_ecrit-tt->te.pos_lit;	if (err<0) err+=long_table_err;
+if(err>0) 
+	{
+	GetTime(&date);
+	printf("%dh%d:%d  : %d erreurs table: ",date.hour,date.minute,date.second,err);
+	for(i=0;(i<err);i++)	{
+		if(i<5)	switch(tt->te.err[tt->te.pos_lit])
+			{
+			case	900+err_sync_repart	: printf(" sync_repart");break;
+//			case	900+err_fifo_demi	: printf(" fifo_demi");break;
+			case	900+err_fifo_pleine	: printf(" fifo_pleine");break;
+			case	900+err_sync_bebo	: printf(" sync-bebo");break;
+			case	900+err_sync_ctrl	: printf(" sync-ctrl");break;
+			case	900+err_lect_pci	: printf(" lect_pci");break;
+			case	900+err_lect_ctrl	: printf(" lect_ctrl");break;
+			case	900+err_synchro_block	: printf(" synchro_block");break;
+			case	900+err_recut_un_block_ok: printf(" err_recut_un_block_ok");break;
+			case	900+err_longueur_block  : printf(" err_longueur_block");break;
+			case	900+err_sauve_block  	: printf(" err_sauve_block");break;
+			case	900+err_pile_pleine	: printf(" err_pile_pleine");son(133);break;
+			
+			case	8	: printf(" +");break;
+			case	9	: printf(" -");break;
+			default	:	
+				if(tt->te.err[tt->te.pos_lit]>=920)	
+					printf("bit_%d ",tt->te.err[tt->te.pos_lit]-920);
+				else	printf("  %d",tt->te.err[tt->te.pos_lit]);
+				break;
+			}
+	tt->te.pos_lit++;  	if(	tt->te.pos_lit>=long_table_err) tt->te.pos_lit=0;
+	}
+	printf("\n");
+	}
+return(err);
+}					
+//_________________________________________________________________________________________________________________
+ 
+
+
+// appel des bolo pour tracé des courbes individuelles
+void affi_bolo(void)
+{
+static int affi1=0,affi2=0;
+int j;
+static long t=0;
+if(!t) t=TickCount();
+if(t>TickCount()) return;
+t=TickCount()+60;		 //attente au minimum 1 sec entre 2 appels
+
+for(j=0;j<nb_max_bolo;j++)	if(parametr.bolo[j].bolo_code_util) exec_bolo(j+1,tache_de_fond,0); 
+}	
+
+
+
+
+
+
+//*****************************************************************************************
+//											***
+#ifdef _archeops	//---------   pour  Archeops    ------------------------------	***
+//											***
+//*****************************************************************************************
+
+
+
+//_________________________________________________________________________________________________________________
+void	reset_epld(void)
+{
+printf("reset epld");
+/*
+if(gg->flag_tc_reduite)
+	{
+	int i;
+	for(i=0;i<15;i++)	emission_tc_reduite(tc2_reset_epld,i,0);
+	}
+else
+*/
+	{
+	char mot_tc[10];	
+	emission_telecommande(tc_dir_reset_epld,mot_tc);
+	}
+}
+
+
+void	calfreq(int flag_on)	//  fabrique l'etat.bolo    gg->reglage.horloge  et  gg->periode_echantillonage
+				// le flag_on dit s'il faut commander la sortie des data
+{
+double p,f1,f2,f3;
+int pp,b,tm,flag;
+char mot_tc[10];
+
+p=litD(fenetre_acquisition,e_periode,0L);
+if(p<4) p=4;	if(p>16) p=16;	//   butée sur la periode 
+pp=p*5.;  p=(double)pp / 5.;
+ecritD(fenetre_acquisition,e_periode,"%6.1f",p);  	// reconstruit p  
+
+b=litD(fenetre_acquisition,e_nb_mes,0L);
+if(b<18) {b=18;ecritD(fenetre_acquisition,e_nb_mes,b);}
+if(b>44) {b=44;ecritD(fenetre_acquisition,e_nb_mes,b);}
+b=b*2;
+
+
+tm=litD(fenetre_acquisition,e_temp_mort,0L);	// temps mort = 1 .. nbmes par 1/4 per
+if(tm<2) {tm=2;ecritD(fenetre_acquisition,e_temp_mort,tm);}
+if(tm>13) {tm=13;ecritD(fenetre_acquisition,e_temp_mort,tm);}
+
+
+flag=flag_on;
+if(litD(fenetre_acquisition,e_flag1,0L))	flag +=2;		
+if(litD(fenetre_acquisition,e_flag2,0L))	flag +=4;		
+
+//printf(" b=%d  tm=%d  a=%d   h=%d \n",b,tm,a,h);
+
+if(gg->flag_tc_reduite)
+	{
+	
+	if((pp!=gg->reglage.horloge.periode) ou clavier(touche_alt) )	 emission_tc_reduite(tc2_horloge,tc3_periode,pp);
+	if((b!=gg->reglage.horloge.nb_mesures) ou clavier(touche_alt) )	 emission_tc_reduite(tc2_horloge,tc3_nb_mesures,b);
+	if((tm!=gg->reglage.horloge.temp_mort) ou clavier(touche_alt) )	 emission_tc_reduite(tc2_horloge,tc3_temp_mort,tm);
+	if((flag!=gg->reglage.horloge.flag) ou clavier(touche_alt) )	 emission_tc_reduite(tc2_horloge,tc3_flag,flag);
+	}
+
+else
+	{
+	mot_tc[0]=tc_horloge;		//	commande valeur des horloges		
+	mot_tc[1]=pp;			//	periode en multiple de 0.2µsec : de 20 a 80  soit  4 a 16 µsec 
+	mot_tc[2]=b/2 ;			//	nb pts/demi periode de 23 a 44
+	mot_tc[3]=tm;
+	mot_tc[4]=flag;			//	c'est le flag qui met en route la sortie des mesures
+	emission_telecommande(tc_dir_transputer,mot_tc);
+
+	gg->reglage.horloge.periode=pp;
+	gg->reglage.horloge.nb_mesures=b;			//  nombre de mesures dans une periode complete
+	gg->reglage.horloge.temp_mort=tm;
+	gg->reglage.horloge.flag=flag;
+
+	}
+// affichage de toutes les fréquences  
+f1=1000/p;f2=f1/bitmot;f3=f2*1000./(double)(gg->reglage.horloge.nb_mesures);
+ecritD(fenetre_acquisition,e_freq,"freq: %5.1f kHz  --  %5.2f kHz,    modulation: %5.1f Hz",f1,f2,f3);
+printf("freq --> : %5.1f kHz  --  %5.2f kHz,    modulation: %5.1f Hz\n",f1,f2,f3);
+gg->periode_echantillonage=0.5/f3;					//  2 fois la frequence de modulation
+printf(" periode d'échantillonage= %g \n",gg->periode_echantillonage);
+
+tt->reglage=gg->reglage;
+fich_save_partiel(1);
+}
+
+
+#endif
+//*****************************************************************************************
+//											***
+#ifdef _diabolo			//---------   pour  Diabolo    ------------------------------	***
+//											***
+//*****************************************************************************************
+
+void	reset_epld(void)
+{
+}
+
+void	calfreq(int flag_on)				//  fabrique l'etat.bolo    gg->reglage.horloge.nb_mesures  et  gg->periode_echantillonage
+{
+double p,f1,f2,f3;
+int a,h,pp,b,tm;
+int j;
+char mot_tc[10];
+
+p=litD(fenetre_acquisition,e_periode,0L);
+b=litD(fenetre_acquisition,e_nb_mes,0L);
+tm=litD(fenetre_acquisition,e_temp_mort,0L);	// temps mort = 1 .. nbmes par 1/4 per
+if(tm<1) {tm=1;ecritD(fenetre_acquisition,e_temp_mort,tm);}
+if(tm>b) {tm=b;ecritD(fenetre_acquisition,e_temp_mort,b);}
+//  lecture externe ou local
+h=litD(fenetre_acquisition,e_horloge_ext_,0L);
+
+//if(p<5) p=5;				//    butée en periode minimum pour éviter de planter le Mac 
+
+
+//----------------------------------------				nombre de mesures
+
+if(b<4)	b=4;	if(b>44) b=44;		
+gg->reglage.horloge.nb_mesures=(b/2)*4;
+
+//----------------------------------------				periode de l'horloge de base
+if (h&1)	p=p*frequ_horloge_externe;		
+else		p=p*frequ_horloge_interne;
+
+a=(p/frequ_divise)-ofset_periode ;
+
+if(a<0) a=0;
+if(a>1020) a=1020;  			// 10 bits maxi  attention a l'ofset 
+
+pp=a+ofset_periode;
+p=(double)(pp)*frequ_divise;
+if (h&1)	 p=p/frequ_horloge_externe;		
+else		p=p/frequ_horloge_interne;
+
+ecritD(fenetre_acquisition,e_periode,"%6.1f",p);  // reconstruit p et pp 
+
+
+//printf(" b=%d  tm=%d  a=%d   h=%d \n",b,tm,a,h);
+
+mot_tc[0]=tc_horloge;			//79..72		
+mot_tc[1]=(tm%7)+ ((b/2)<<3) ;	//71..64 3 bit temps mort et 5 bit  mb (nombre de coups par 1/4 de periode = b/2)
+mot_tc[2]=(a>>8);			//63..56 poid fort (2 bits)
+mot_tc[3]=a;				//55..48 poid faible (8 bits)
+mot_tc[4]=h&3;			//47..40 horloge externe et bolo-iram
+emission_telecommande(0,mot_tc);
+
+
+// affichage de toutes les fréquences  
+f1=1000/p;f2=f1/bitmot;f3=f2*1000./(double)(gg->reglage.horloge.nb_mesures);
+gg->periode_echantillonage=0.5/f3;		//  2 fois la frequence de modulation
+											// periode * 16 * nbdemesure / 2  
+//printf(" durée= %ld \n",gg->periode_echantillonage);
+
+ecritD(fenetre_acquisition,e_freq,"freq: %5.1f kHz  --  %5.2f kHz,    modulation: %5.1f Hz",f1,f2,f3);
+
+
+
+	{//_______________    fabrique les detections synchrones de la modulation électrique 
+	int i,v,tm;
+	tm=litD(fenetre_acquisition,e_temp_mort,0L);
+	gg->reglage.temp_mort=tm;
+												// detection plus/moins avec tm  points supprimé
+												//		ds[0] ==  plus / moins	
+												//		ds[1] ==  plus / plus
+												//		ds[2] ==  + - 0 /  - + 0
+	
+	tt->ds.dsnorme=0;
+	i=0;
+	for(v=0	;v<gg->reglage.horloge.nb_mesures/2	;v++)	
+		{
+		if(v<tm) 	tt->ds.dstable[i]=0;
+		else 		{tt->ds.dstable[i]=1;	tt->ds.dsnorme++;}
+		i++;
+		}
+	for(v=0;v<gg->reglage.horloge.nb_mesures/2	;v++)	
+		{
+		if(v<tm) 	tt->ds.dstable[i]=0;
+		else 		{tt->ds.dstable[i]=-1;	tt->ds.dsnorme++;}
+		i++;
+		}	
+	}
+//printf(" normes = %d  %d \n",tt->ds.dsnorme[0],tt->ds.dsnorme[1]);
+tt->reglage=gg->reglage;
+fich_save_partiel(1);
+}
+
+
+//*****************************************************************************************
+//											***
+#endif		//--------------------------------------------------------------------	***
+//											***
+//*****************************************************************************************
+
+
+
+
+void 	deglitch(void)
+{
+int j;
+double x,dx;
+static int debut=1;
+static double X[nb_max_bolo];
+static double DX[nb_max_bolo];
+if(debut) 
+	{
+	for(j=0;j<nb_max_bolo;j++)
+		{
+		X[j]=0;DX[j]=1000;
+		}
+	debut=0;
+	}
+
+for(j=0;j<nb_max_bolo;j++)	
+	{
+	x=gg->don.don_bolo[j];
+	dx=x-X[j]; if(dx<0)  dx=-dx;
+	if( dx > DX[j] ) 
+		{
+		printf("glitch bolo %d  ancien X=%g  nouveau x=%g  DX=%g \n",j+1,X[j],x,DX[j]);
+		gg->don.don_bolo[j]=X[j];
+		DX[j] *=1.1;
+		}
+	else	{
+			DX[j]=0.9 * DX[j] + 0.5 * dx +1 ; 
+			X[j]=x;
+			}		// en moyenne, 5 fois l'interval moyen
+	}
+
+}
+
+
+
+
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/acquisition_archeops.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/acquisition_archeops.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/acquisition_archeops.c	(revision 637)
@@ -0,0 +1,364 @@
+#define   utilitaires_de_block_archeops
+
+#include "diabolo.h"
+#include "bolo.h"
+#include "acqui.h"
+#include "carte_acqui.h"
+#include "carte_pci.h"
+#include "trace.h"
+#include "corel.h" 
+#include "montimer.h"
+#include "synchro.h"
+#include "fichier.h"
+#include "onde.h"
+#include "tm.h"
+#include "tache.h"
+#include "compress.h"
+#include "controle.h"
+#include "menu.h"
+
+
+
+
+//*****************************************************************************************
+//											***
+#ifdef _archeops	//---------   pour  Archeops    ------------------------------	***
+//---------------      lit  block      Archeops    ------------------------------	***
+//											***
+//*****************************************************************************************
+
+
+//	la fonction litblock
+//	1	elle	lit dans la table de telemesures
+//	2	elle	teste le type de block et sa validité (somme des bits et code fin)
+//	3 	elle	appelle la fonction de traitement en lui fournissant un pointeur sur le block
+//	4	elle 	sauve le block dans le fichier
+//	C'est la fonction acqui qui apelle lit_block qui avance le pointeur de la table de telemesures	 
+
+
+block_type_modele bktm;			// memoire pour block local pour copie lors de la decompression
+
+block_type_synchro_sol	blk_sync2;	// block memoire pour les synchro sol qui seront traitées lors
+					// de la lecture du block bolo
+
+
+
+#define blk_tm  (&tt->tm.btm[tt->tm.pos_lit].tmtrx) 	//  pointeur sur le block télémesure a lire)
+
+void lit_block_archeops(int err)
+{
+if(verifie_block_printf(blk_tm))	return;
+
+//{def_nom_block  printf("lit un block %s   N°%d   \n",nom_block[type_block(blk_tm)],numero_block(blk_tm));	}				
+
+switch(type_block(blk_tm))
+	{	
+	case block_param :		break;
+
+	case block_journal :		traite_block_journal((block_type_journal*)blk_tm);		break;
+
+	case block_reglage :		traite_block_reglage((block_type_reglage*)blk_tm);		break;
+	
+	case block_dilution :		traite_block_dilution((block_type_dilution*)blk_tm);		break;
+	
+	case block_gps :		traite_block_gps((block_type_gps*)blk_tm);			break;
+	
+	case block_une_periode :	traite_block_une_periode((block_type_une_periode*)blk_tm);	break;
+	
+	case block_bolo_comprime :	traite_block_bolo_comprime((block_type_bolo_comprime*)blk_tm);	break;
+	
+	case block_bolo :		traite_block_bolo((block_type_bolo*)blk_tm);			break;
+	
+	case block_sst :		traite_block_sst((block_type_sst*)blk_tm);			break;
+	
+	case block_synchro_sol :	traite_block_synchro_sol((block_type_synchro_sol*)blk_tm);	break;
+	
+#ifdef	transmet_data_brute
+	case block_data_brute :		traite_block_data_brute((block_type_data_brute*)blk_tm);	break;
+#endif
+	
+	default	:   {def_nom_block  printf("block de type  %s  non traité par le programme \n",nom_block[type_block(blk_tm)]);}
+					break;
+	}
+	
+ecrit_fichier_ARCH(blk_tm);
+
+}
+#undef blk_tm
+
+//*****************************************************************************************
+//											***
+//		------------------   traitement des blocks	---------------		*** 
+//											***
+//*****************************************************************************************
+
+
+
+
+//-----------------------------------------------------------------------------------------	
+//  -------------     block type 1 : lit le journal     ------------------    ------------
+//-----------------------------------------------------------------------------------------	
+void	traite_block_journal(block_type_journal*	blk)
+{
+int i,code,blocknum;
+if(!fenetre(fenetre_journal)) nouveauT(fenetre_journal,0,"journal");
+
+//printf("ecrit une page du journal \n");
+for(i=0;i<long_page;i++)
+	{
+	code=type_block(&blk->jj[i]);
+	blocknum=numero_block(&blk->jj[i]);
+	if(code) break;	// code vaut 1 pour vider une page de journal incomplete
+	ecritT(fenetre_journal,fin_f,"block_num= %d   code %d   ==>  %d %d %d %d %d %d %d %d \n",
+		blocknum,code,
+		blk->jj[i].mot[0],blk->jj[i].mot[1],blk->jj[i].mot[2],blk->jj[i].mot[3],
+		blk->jj[i].mot[0],blk->jj[4].mot[5],blk->jj[i].mot[6],blk->jj[i].mot[7]);
+	}
+}
+
+//-----------------------------------------------------------------------------------------	
+//  -------------     block type 2 : block_reglage   ------------------    ------------
+//-----------------------------------------------------------------------------------------	
+void	traite_block_reglage(block_type_reglage*	blk)
+{
+	
+//printf(" recut un block reglage  ***********************************  \n\n");	
+		
+gg->reglage=blk->reglage;
+tt->reglage=blk->reglage;
+rafraichis_fenetres();
+}
+
+
+//-----------------------------------------------------------------------------------------	
+//  ---------------------     block type 3 : lit les data dilution     ------------------------
+//-----------------------------------------------------------------------------------------	
+//
+//  fonction  void	traite_block_dilution(block_type_dilution*blk)
+//
+//   la fonction est dans le module dilution.c
+
+
+
+//-----------------------------------------------------------------------------------------	
+//  ---------------------     block type 4 : lit la chaine GPS     ------------------------
+//-----------------------------------------------------------------------------------------	
+void	traite_block_gps(block_type_gps*	blk)
+{
+int i;		
+char c1;
+if(!fenetre(fenetre_GPS)) nouveauT(fenetre_GPS,0,"lecture GPS");
+
+//printf("ecrit une ligne GPS \n");
+
+if(blk->gps[0])
+	{
+	ecritT(fenetre_GPS,fin_f,"gps --> ");
+	for(i=0;i<80;i++)			
+		{
+		c1=blk->gps[i];
+		if (c1)	ecritT(fenetre_GPS,fin_f,"%c",c1&0x7f);
+		else	i=80;
+		if(c1==13) i=80;
+		}
+	}
+}
+
+
+
+//-----------------------------------------------------------------------------------------	
+//  -------------     block type 5 : lit les courbes de bolos individuelles    ------------
+//	nb_per_block est le nombre de periodes entieres dans le block  
+//   	-->  le nombre de courbes lues est egal a nb_per_block qui doit etre <= nb_max_bolo 
+//-----------------------------------------------------------------------------------------
+void	traite_block_une_periode(block_type_une_periode*	blk)
+{
+int j,i;		
+for(j=0;j<nb_max_bolo;j++)	for (i=0;i<gg->reglage.horloge.nb_mesures;i++)
+		gg->bol_per[j][i]=blk->bol_per[j][i]^0x7fff;	// 16 bit -> 15 bit utile + phase
+								// change le signe des 15 bits utiles		
+affi_bolo();			// affichage des bolo individuels
+}
+
+
+
+
+//-----------------------------------------------------------------------------------------	
+//  -------------     block type 6 : block_synchro_sol   ------------------    ------------
+//-----------------------------------------------------------------------------------------	
+void	traite_block_synchro_sol(block_type_synchro_sol*	blk)
+{
+blk_sync2 = *blk;
+}
+/*
+int i,j;	
+
+for (i=0;i<nb_per_block*2;i++)	for(j=0;j<nb_sync;j++)			
+		gg->don.sync[j]=blk->synchro[j][i];
+// ne fait rien: le block synchro precede toujours le block bolo
+}
+*/
+
+
+
+//-----------------------------------------------------------------------------------------	
+//  ---------------------     block type 12 : décomprime les données bolo      ------------
+//-----------------------------------------------------------------------------------------	
+void	traite_block_bolo_comprime(block_type_bolo_comprime*	blk)
+{		
+int j;
+#define blk2  ((block_type_bolo*)(&bktm)) 	// pointeur sur la memoire locale
+// maintenant, decomprime  blk  pour le reecrire dans blk2
+printf("comprime: ds1= %x  , %x  ds2= %x  , %x   ",
+	( (blk->data_bolo[0][0] & 0xffff0000)>>11 ) & 0x001fffe0,
+	( (blk->data_bolo[0][0] & 0x0000ffff)<<5 )  & 0x001fffe0,
+	( (blk->data_bolo[1][0] & 0xffff0000)>>11 ) & 0x001fffe0,
+	( (blk->data_bolo[1][0] & 0x0000ffff)<<5 )  & 0x001fffe0);
+
+for(j=0;j<nb_bolo_util;j++)	
+		{
+		decompress_7_2(blk->data_bolo[j],blk2->data_bolo[j],nb_per_block*2);
+		}
+
+printf("ds1= %x  , %x  ds2= %x  , %x   \n",
+					blk2->data_bolo[0][0],
+					blk2->data_bolo[0][1],
+					blk2->data_bolo[1][0],
+					blk2->data_bolo[1][1]);
+
+valide_block(&bktm,block_bolo,numero_block(blk));	// pour recopier le numero de block
+traite_block_bolo(blk2);
+}
+
+
+
+
+//-----------------------------------------------------------------------------------------	
+//  -------------     block type 8 : block_bolo   ------------------    ------------
+//-----------------------------------------------------------------------------------------	
+void	traite_block_bolo(block_type_bolo*	blk)
+{
+static num_block_local;
+int i,j,nb_coups,glitch;	
+static ancien_don_bolo[nb_max_bolo];
+int	secondes;
+
+glitch=litD(fenetre_acquisition,e_deglitch,0L);
+
+num_block_local++;
+if(num_block_local!=numero_block(blk)) {printf(" erreur numblock=%d\n",numero_block(blk));num_block_local=numero_block(blk);}
+
+secondes=(int) (gg->periode_echantillonage*(double)num_block_local*(double)nb_per_block*2.);
+//printf("numblock=%d  sec=%d \n",num_block_local,secondes);
+ecritD(fenetre_controle,con_time,"%d",secondes);
+
+nb_coups= gg->reglage.horloge.nb_mesures/2 - gg->reglage.horloge.temp_mort;
+
+/*
+if( (num_block_local%10)==0)	//  impression des valeurs un block sur 10
+	{
+	int aa = (nb_coups<<14) + (nb_coups*190) ;
+	printf(" nb coups dans une somme : %d \n",nb_coups);
+	for(j=0;j<20;j+=2)	
+		printf("ds1= %x  , %x  ds2= %x  , %x   ",
+					blk->data_bolo[0][j],
+					blk->data_bolo[0][j+1],
+					blk->data_bolo[1][j],
+					blk->data_bolo[1][j+1]);
+		printf("ds1= %8.1f  , %8.1f  ds2= %8.1f  , %8.1f   \n",
+					(double)(blk->data_bolo[0][j]- aa),
+					(double)(blk->data_bolo[0][j+1]- aa),
+					(double)(blk->data_bolo[1][j]- aa),
+					(double)(blk->data_bolo[1][j+1]- aa));
+	}
+*/
+			
+//  -------------      lit les valeur detection synchrone     ------------------
+
+#define  val_DS(j,i)  (blk->data_bolo[j][i]&0x1fffff)
+#define  synchro_DS(j,i)	(blk->data_bolo[j][i]>>20)
+
+for (i=0;i<nb_per_block*2;i++)
+	{
+	int aa,s;
+	aa = (nb_coups<<14) + (nb_coups*190) ;
+	if( i%2) s=1;else	s=-1;
+
+	for(j=0;j<nb_max_bolo;j++)	
+		{
+		gg->don.don_bolo[j]=0.5*(ancien_don_bolo[j]+s*(((val_DS(j,i)-aa)<<1)/nb_coups));		// copy bolos
+		ancien_don_bolo[j]=s*(((val_DS(j,i)-aa)<<1)/nb_coups);
+		}
+
+	for(j=0;j<nb_sync;j++)	gg->don.sync[j]=synchro_DS(j,i);	
+
+	gg->temps_cntl=num_block_local*nb_per_block*2+i;	// temps controlleur en demi-periodes		
+//	printf("gg->temps_cntl=%d  \n",gg->temps_cntl);
+//	exec_synchro(0,100,err);	// en premier pour construire le flag  scan_en_cours 
+	exec_synchro(0,100,0);		// en premier pour construire le flag  scan_en_cours 
+		//  le trace ds et 1p est fait avec les points corelles du coups precedent !!!
+	
+	GetDateTime(&gg->temps_mac);
+	if(gg->fichier_dia2_ouvert)  	ecrit_fichier_dia2(gg->don,gg->temps_cntl,gg->temps_mac);		// ecrit les donnees dans le fichier  
+	
+	if(glitch)	deglitch();
+	corel();
+	
+	//if(gg->trace_ouvert&1)		exec_trace_tout(fenetre_trace_tout,tache_de_fond,0);
+	for(j=0;j<8;j++)	if(gg->trace_tout[j]) exec_trace_tout(gg->trace_tout[j],tache_de_fond,0);
+	if( (gg->trace_ouvert&16)  && 	// trace carte et pas de select synchro
+	  (! (gg->trace_ouvert&32)))	trace_annexe(gg->corel);
+	if(gg->flag_fou)		foufou();	
+	if(gg->trace_ouvert&8)		exec_ondelette(fenetre_ondelette,0,0);
+	
+	
+	}
+
+	// _____________  affichage numerique de la valeur d'un bolometre  _______________
+j=litD(fenetre_acquisition,e_bolo,0L)-1;  
+if( (j<0) ou (j>=nb_max_bolo) )	ecritD(fenetre_acquisition,e_valeur,"--");
+	else				ecritD(fenetre_acquisition,e_valeur,"b%d=%g µV",j+1,xbol(j));
+		
+
+}
+
+
+
+
+#ifdef	transmet_data_brute
+//-----------------------------------------------------------------------------------------	
+//  -------------     block type 15 : lit data brute  (block recut de l'EPLD)   ------------    ------------
+//  -------------     		utilise uniquement pour la mise au point       ------------
+//-----------------------------------------------------------------------------------------	
+void	traite_block_data_brute(block_type_data_brute*	blk)
+{
+int i,k;		
+static int qq=0;
+qq++;
+//if(qq>20)
+	{
+	qq=0;
+	printf(" data brutes : ");
+	for(k=0;k<10;k+=5)	{printf("  ");for (i=0;i<5;i++)	printf(" %x", (unsigned char) blk->data[k+i+1]);}
+	printf("\n");
+	for(k=0;k<nb_per_block;k++)	printf("%d",(blk->data[k*tt->reglage.horloge.nb_mesures*nb_byte_mot+5]>>6)&0x3);
+	printf("\n");
+//	for(k=0;k<2;k++)
+		{
+//		printf("%d",(blk->data[k*tt->reglage.horloge.nb_mesures*nb_byte_mot+2]>>6)&0x3);
+		for(i=0;i<tt->reglage.horloge.nb_mesures;i++)	
+			{
+//			printf("%d",(blk->data[(k*tt->reglage.horloge.nb_mesures+i)*nb_byte_mot+5]>>6)&0x3);
+			}
+//		printf("\n");		
+		}
+
+	}
+}
+#endif
+
+
+
+ 
+#endif
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/acquisition_diabolo.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/acquisition_diabolo.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/acquisition_diabolo.c	(revision 637)
@@ -0,0 +1,89 @@
+#include "diabolo.h"
+#include "bolo.h"
+#include "acqui.h"
+#include "carte_acqui.h"
+#include "carte_pci.h"
+#include "trace.h"
+#include "corel.h" 
+#include "montimer.h"
+#include "synchro.h"
+#include "fichier.h"
+#include "onde.h"
+#include "tm.h"
+#include "tache.h"
+#include "compress.h"
+#include "controle.h"
+#include "menu.h"
+
+
+
+//*****************************************************************************************
+//											***
+#ifdef _diabolo		//---------   pour  Diabolo    ------------------------------	***
+//											***
+//*****************************************************************************************
+
+
+
+void lit_block_diabolo(int err)
+
+{
+int i,j;
+int glitch;
+glitch=litD(fenetre_acquisition,e_deglitch,0L);
+
+for(j=0;j<nb_max_bolo;j++)				//  lit les courbes de bolos individuelles
+	for (i=0;i<gg->reglage.horloge.nb_mesures;i++)
+		gg->bol_per[j][i]=tt->tm.btm[tt->tm.pos_lit].bol_per[j][i];
+
+					
+glitch=litD(fenetre_acquisition,e_deglitch,0L);
+
+for (i=0;i<nb_per_block*2;i++)
+	{
+	for(j=0;j<nb_max_bolo;j++)	
+		gg->don.don_bolo[j]=tt->tm.btm[tt->tm.pos_lit].don[i].don_bolo[j];		// copy bolos
+		
+	for(j=0;j<nb_sync;j++)			
+		gg->don.sync[j]=tt->tm.btm[tt->tm.pos_lit].don[i].sync[j];				// copy synchros
+
+	gg->temps_cntl=tt->tm.btm[tt->tm.pos_lit].temps_cntl[i];		
+	gg->temps_mac=tt->tm.btm[tt->tm.pos_lit].temps_mac[i];		
+
+	exec_synchro(0,100,err);		// en premier pour construire le flag  scan_en_cours 
+		//  le trace ds et 1p est fait avec les points corelles du coups precedent !!!
+
+	if(gg->fichier_dia2_ouvert)  	ecrit_fichier_dia2(gg->don,gg->temps_cntl,gg->temps_mac);// ecrit les donnees dans le fichier  
+	if(gg->fichier_arch_ouvert)  	fabrique_block_type_bolo_synchro();		// ecrit un block bolo archeops 
+	
+	if(glitch)	deglitch();
+
+	corel();
+	
+//	if(gg->trace_ouvert&1)		exec_trace_tout(fenetre_trace_tout,tache_de_fond,0);
+	for(j=0;j<8;j++)	if(gg->trace_tout[j]) exec_trace_tout(gg->trace_tout[j],tache_de_fond,0);
+	if( (gg->trace_ouvert&16)  && 	// trace carte et pas de select synchro
+	  (! (gg->trace_ouvert&32)))	trace_annexe(gg->corel);
+	if(gg->flag_fou)		foufou();	
+	if(gg->trace_ouvert&8)		exec_ondelette(fenetre_ondelette,0,0);
+	
+	}
+
+	// _____________  affichage numerique de la valeur d'un bolometre  _______________
+j=litD(fenetre_acquisition,e_bolo,0L)-1;  
+	if( (j<0) ou (j>=nb_max_bolo) ) ecritD(fenetre_acquisition,e_valeur,"--");
+				else		ecritD(fenetre_acquisition,e_valeur,"b%d=%g µV",j+1,xbol(j));
+
+ecritD(fenetre_controle,con_chauf,tt->tm.btm[tt->tm.pos_lit].chauf_regul);
+
+if(gg->fichier_arch_ouvert)  		fabrique_block_type_une_periode();	// ecrit un block une periode archeops  
+affi_bolo();			// affichage des bolo individuels
+}
+//_____________________________________________________________________________________________
+
+//*****************************************************************************************
+//											***
+#endif		//--------------------------------------------------------------------	***
+//											***
+//*****************************************************************************************
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/acquisition_general.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/acquisition_general.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/acquisition_general.c	(revision 637)
@@ -0,0 +1,237 @@
+#include "diabolo.h"
+#include "bolo.h"
+#include "acqui.h"
+#include "carte_acqui.h"
+#include "carte_pci.h"
+#include "trace.h"
+#include "corel.h" 
+#include "montimer.h"
+#include "synchro.h"
+#include "fichier.h"
+#include "onde.h"
+#include "tm.h"
+#include "tache.h"
+#include "compress.h"
+#include "controle.h"
+
+
+
+#define temps_timer 10		//  10 ms  donc 2500 points pour  4µsec ( fifo 32k )
+
+tmtc*	tt;			// pointeur global  sur la structure tmtc 
+
+
+
+#define max_couleur 10
+int 	bolo_couleur[max_couleur];		//  les numero de bolos des 10 couleurs affichées
+#define perm(a)	{if(fenetre(a)) permanent(a);}
+
+
+//  programme d'acquisition: affichage des résultats en tache de fond tous les 10 ticks (6 fois/seconde) 
+
+
+
+void acqui(int fen,int item,double valeur,...)
+{
+int q;
+static int acquisition=0;
+static int count=0;
+static int nberr=0;
+static double x_err,errmoy;
+static int count_moy_err=0;
+int err;
+
+if	(item!=tache_de_fond)		return;
+if	(gg->depou_en_cours)		return;
+
+gg->depou_en_cours=1;
+
+/*
+{  //  test par envoie continue d'un changement de frequence
+static qq=0;
+qq++;
+if(qq==10)	{ecritD(fenetre_acquisition,e_periode,"4");	calfreq(0);}
+if(qq==20)	{qq=0;ecritD(fenetre_acquisition,e_periode,"8");	calfreq(0);}
+}
+*/
+
+if( count-- < 0 ) 
+		{
+		count=3; 
+		ecritD(fenetre_controle,con_retard1,"%d",tt->nb_lec_fofo_ext);
+		tt->nb_lec_fofo_ext=0;
+		}
+
+
+err=test_erreur();  //______________   test des erreurs   _______________________________
+
+
+//_____________________   lit la table télémesure  ______________________________________
+  					
+
+
+q=(longueur_table_tm+tt->tm.pos_ecrit-tt->tm.pos_lit)%longueur_table_tm;
+
+while(q)
+	{
+	ecritD(fenetre_controle,con_retard2,"%d",(longueur_table_tm+tt->tm.pos_ecrit-tt->tm.pos_lit)%longueur_table_tm);
+
+//*****************************************************************************************
+//											***
+#ifdef _archeops	//---------   pour  Archeops    -----------------------------	***
+lit_block_archeops(err);
+#endif
+#ifdef _diabolo		//---------   pour  Diabolo    ------------------------------	***
+lit_block_diabolo(err);
+#endif			//-----------------------------------------------------------	***
+//											***
+//*****************************************************************************************
+//	printf(" pos=%d \n",tt->tm.pos_lit); 
+	tt->tm.pos_lit++;  if(tt->tm.pos_lit>=longueur_table_tm) tt->tm.pos_lit-=longueur_table_tm;	
+	q--;
+	}
+//________________________________________________________________________________________
+
+gg->depou_en_cours=0;					
+}
+
+
+
+
+
+void exec_acquisition(int fen,int item,double valeur,...) 
+{
+//char ss[256];
+static TMInfoPtr TTm=0;
+int i,j;
+
+switch(item)
+	{
+	case ouverture	:	gg->flag_tc_reduite=litD(fen,e_tc_reduite,0);
+				if(tt->PCI_actif==1) reset_carte;
+	   			ecritD(fen,e_tache_inter,0);   	// arreter les interruptions
+    				reset_epld();
+    				calfreq(0);			// d'abord fixer la fréquence
+    
+	case e_reset       :	reset_epld();	
+	
+    case e_bolo_couleur :
+    case e_bolo_couleur+1 :
+    case e_bolo_couleur+2 :
+    case e_bolo_couleur+3 :
+    case e_bolo_couleur+4 :
+    case e_bolo_couleur+5 :
+    case e_bolo_couleur+6 :
+    case e_bolo_couleur+7 :
+    case e_bolo_couleur+8 :
+    case e_bolo_couleur+9 :
+    
+    				for(i=0;i<max_couleur;i++)	
+    					{
+    					bolo_couleur[i]=litD(fen,e_bolo_couleur+i,0L)-1;
+    					if( (bolo_couleur[i]<1) ou (bolo_couleur[i]>nb_max_bolo) )   bolo_couleur[i]=0;
+    					printf(" i=%d bolo=%d    ",i,bolo_couleur[i]);
+    					}
+    				printf("\n");
+				break;		
+				    
+	case e_montre :		for(j=nb_max_bolo-1;j>=0;j--)	if(parametr.bolo[j].bolo_code_util) select(j+1);
+				break;
+						
+	case e_sauve :		for(j=0;j<nb_max_bolo;j++)	if(parametr.bolo[j].bolo_code_util)permanent(j+1);
+    				perm(fenetre_acquisition);
+    				perm(fenetre_liste_bolos);
+//   				perm(fenetre_regul);
+//    				perm(fenetre_auto);
+   				perm(fenetre_regulation);
+    				perm(fenetre_automatismes);
+//    				perm(fenetre_dilution);
+//    				perm(fenetre_senseur_stellaire);
+				break;
+						
+       
+	case e_transmission :	{
+				long ll=(long)(&(gg->reglage.dilu.transmission))-(long)(&(gg->reglage.dilu));
+    				int a=(int) valeur;	
+    				emission_tc_reduite(tc2_auto_dilu,ll,a);
+    				}
+    				break;
+
+	case e_vanne	: 	{
+				long ll=(long)(&(gg->reglage.dilu.vanne))-(long)(&(gg->reglage.dilu));
+    				int a=(int) valeur;	
+    				emission_tc_reduite(tc2_auto_dilu,ll,a);
+    				}
+    				break;
+
+	case e_chauf	: 	{
+				long ll=(long)(&(gg->reglage.dilu.chauffage))-(long)(&(gg->reglage.dilu));
+    				int a=(int) valeur;	
+    				emission_tc_reduite(tc2_auto_dilu,ll,a);
+    				}
+    				break;
+
+
+	case e_tache_inter :	calfreq(0);	//  command ou arrete le flag epld sortie data
+				if(TTm)		stoptimer(TTm);
+    				if(tt->PCI_actif==1) reset_carte;
+    				tt->vi.a=0;
+    				if(valeur) 
+    					{
+                 			if(!TTm)	TTm=setuptimer(temps_timer,lecture_fifo,tt);	    
+                 			else		redemarretimer(TTm,temps_timer);
+    					calfreq(1);	//  commande le flag epld sortie data
+					}
+                 		break;
+
+	case fermeture	:	if(TTm)		stoptimer(TTm);
+    				
+    				{long t=TickCount()+60; while(t>TickCount()) {};} //attente 1 sec
+				
+				if(TTm)	supprimetimer(TTm);
+   				break;
+    
+
+	case caseferme  	:	cache(fen);	stop_exec(fen);	break;
+   
+
+	case e_periode+1000	:
+	case e_periode		:		// printf("change la période \n");
+	
+	case e_nb_mes		:		// printf("change le nombre de mesures \n");
+	case e_temp_mort	:
+	case e_flag1 		:	  	// passe horloge externe ou local  
+	case e_flag2 		:	  	// passe horloge externe ou local  
+    					calfreq((int)litD(fen,e_tache_inter,0));
+    					break;
+    	case e_tc_reduite  :	gg->flag_tc_reduite=valeur;	break;
+    				
+	case e_correlations :	gg->flag_corel=valeur;		break;
+
+
+	default  			:	break;
+	}
+}
+
+
+//------------------------------   montracen   --------------------------------------
+
+
+void	montracen(int fen,int n,double x,double*y)
+{
+int i;
+double yy[max_couleur];
+for(i=0;i<max_couleur;i++)
+	{
+	if(bolo_couleur[i])	yy[i]=y[bolo_couleur[i]-1];
+		else		yy[i]=0;
+	}
+tracen(fen,max_couleur,x,yy);
+//	printf("0=%g  1=%g  2=%g  \n",yy[0],yy[1],yy[2]);
+}
+
+int bolo_rouge(void)		//  l'indice du bolo rouge 
+{
+return(bolo_couleur[0]);
+}
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/auto.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/auto.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/auto.c	(revision 637)
@@ -0,0 +1,330 @@
+#include "diabolo.h"
+#include "bolo.h" 
+#include "auto.h" 
+#include "tm.h" 
+
+//#define bon_type(j)		( (litD(fen,auto_thermo,0)&&(parametres.bolo_type[j]==0)) ou(litD(fen,auto_voie1,0)&&(parametres.bolo_type[j]==1)) ou(litD(fen,auto_voie2,0)&&(parametres.bolo_type[j]==2)) ou(litD(fen,auto_voie3,0)&&(parametres.bolo_type[j]==3)) ) 
+#define bon_type(j)	1
+
+
+int	vg[nb_max_bolo];			// 0 ou vieux gain pour remonter le gain
+
+
+//--------------------  fonction  exec  de  la  fenetre : auto  -------------------------------
+
+void exec_auto(int fen,int item,double valeur,...) 
+{
+int j;
+if(item>1000) item-=1000;		// pour appeler le case pour tous les cara d'un edit texte
+
+switch(item)
+    {
+    case ouverture	:
+/*    case auto_bolo_couleur :
+    case auto_bolo_couleur+1 :
+    case auto_bolo_couleur+2 :
+    case auto_bolo_couleur+3 :
+    case auto_bolo_couleur+4 :
+    case auto_bolo_couleur+5 :
+    case auto_bolo_couleur+6 :
+    case auto_bolo_couleur+7 :
+    case auto_bolo_couleur+8 :
+    case auto_bolo_couleur+9 :
+    case auto_bolo_couleur+10 :
+    case auto_bolo_couleur+11 :
+    case auto_bolo_couleur+12 :
+    
+    				for(i=0;i<max_couleur;i++)	
+    					{
+    					bolo_couleur[i]=litD(fen,auto_bolo_couleur+i,0L);
+    					if( (bolo_couleur[i]<1) ou (bolo_couleur[i]>nb_max_bolo) )   bolo_couleur[i]=0;
+    					printf(" i=%d bolo=%d    ",i,bolo_couleur[i]);
+    					}
+    				printf("\n");
+*/				break;		
+				    
+    
+    
+    
+    case caseferme  :		cache(fen);	infos(fen)->action=0;	break;
+   
+    case auto_tout_auto :	
+				for(j=0;j<nb_max_bolo;j++)	
+					if( fenetre(j+1) && (!litD(j+1,b_bloq,0L)) && bon_type(j) )
+						{ecritD(j+1,b_auto,1);auto_control(j,auto_force);}
+				break;
+         
+    case auto_rien_auto :  					
+				for(j=0;j<nb_max_bolo;j++)	
+					if( fenetre(j+1) && (!litD(j+1,b_bloq,0L)) && bon_type(j))
+						ecritD(j+1,b_auto,0);
+				break;
+
+    case auto_transitoire_auto :	
+				for(j=0;j<nb_max_bolo;j++)	
+					if( fenetre(j+1) && (!litD(j+1,b_bloq,0L)) && bon_type(j) )
+						exec_bolo(j+1,b_auto_trans,0);
+				break;
+         
+
+    case auto_fixe_gain :  					
+				for(j=0;j<nb_max_bolo;j++)	
+					if( fenetre(j+1) && bon_type(j))  
+						if(!litD(j+1,b_bloq,0L)) 	exec_bolo(j+1,b_gain,litD(fen,auto_gain,0L));
+				break;
+
+
+    case auto_fixe_courant :  					
+				for(j=0;j<nb_max_bolo;j++)	
+					if( fenetre(j+1) && bon_type(j))  
+						if(!litD(j+1,b_bloq,0L)) 	exec_bolo(j+1,b_tri,litD(fen,auto_courant,0L));
+				break;
+
+						
+    case auto_auto_val :	break;
+    case auto_gain :		break;
+    default  :			break;
+    }
+}
+
+
+void auto_transitoire(int bolo,int ct)	
+{
+int i;
+double a,tt,dd;
+int n=gg->reglage.horloge.nb_mesures;
+static double	coef[nb_max_bolo]={0,0};
+static double	val_p[nb_max_bolo];
+def_gains
+if(ct%4!=0)	return;
+
+if(coef[0]==0)	for(i=0;i<nb_max_bolo;i++)	coef[i]=0.05;
+
+
+tt=0;for(i=0;i<n;i++)
+	{
+	a=(double) ((gg->bol_per[bolo-1][i]&0x7fff)-0x4000);	//  16 bit utiles dans     gg->bol_per
+			// FONCTION :   3 -1 -1 -1 -3 1 1 1 
+	switch(8*i/n)
+			{
+			case 0	:	tt	+=	3*a;	break;
+			case 1	:	tt	-=	a;	break;
+			case 2	:	tt	-=	a;	break;
+			case 3	:	tt	-=	a;	break;
+			case 4	:	tt	-=	3*a;	break;
+			case 5	:	tt	+=	a;	break;
+			case 6	:	tt	+=	a;	break;
+			case 7	:	tt	+=	a;	break;
+			default	:	break;
+			}
+	}
+tt/=0.01*(double)parametr.bolo[bolo-1].bolo_gain*gain_ampli(gg->reglage.bolo[bolo-1]);
+
+printf("transitoire auto ct=%d  bolo %d  : ",ct,bolo);
+printf(" valeur tt=%g ",tt);
+
+
+if(ct==16)		// premiere mesure en 20  :  change le coef  en  16 
+	{
+	double rr;
+/*	correction faite				= ( tt - val_p[bolo-1] )
+	correction qu'il falait faire			=	- val_p[bolo-1]
+	
+	la correction  en valeur de dac faite	=	 val_p[bolo-1] * coef[bolo-1]
+	
+	la correction dac qu'il aurait fallu faire 	 val_p[bolo-1] * coef[bolo-1]	* (- val_p[bolo-1]) / ( tt - val_p[bolo-1] )
+*/	
+	if(val_p[bolo-1] -tt ) 		rr =  ( val_p[bolo-1]) / (  val_p[bolo-1]-tt );
+	if(rr<0.2) rr=0.2;
+	if(rr>4) rr=4;
+	coef[bolo-1]= coef[bolo-1] * rr;
+	printf(" calcul du coef = coef=%g \n", coef[bolo-1]);
+
+	}
+	
+
+val_p[bolo-1]=tt;
+//dd=(double)gg->reglage.dac[d_trans][bolo-1] + tt * coef[bolo-1] ;	// nouvelle valeur de transitoire
+dd=(double)dac_T(gg->reglage.bolo[bolo-1]) + tt * coef[bolo-1] ;	// nouvelle valeur de transitoire
+
+while( (dd<-10) ou (dd>4010) )  {coef[bolo-1]*=0.8;dd=(double)dac_T(gg->reglage.bolo[bolo-1]) + tt * coef[bolo-1] ;}
+	
+printf(" coef=%g  :  valeur nouvelle du DAC =%g \n",coef[bolo-1],dd);
+
+exec_bolo(bolo,b_trans,dd);
+}
+
+
+
+int	test_saturation(int bolo)
+{
+int i,sat;
+int n=gg->reglage.horloge.nb_mesures;
+
+sat=0;for(i=0;i<n;i++)
+	{
+	if ( ((gg->bol_per[bolo-1][i]&0x7fff)<0x400)  
+		ou ((gg->bol_per[bolo-1][i]&0x7fff)>0x7c00) ) sat++;//  16 bit utiles dans     gg->bol_per
+	}
+return(sat);
+}
+
+
+
+
+void auto_control(int bolo,int mode)	// voir les modes
+{
+static int ct[nb_max_bolo],cg[nb_max_bolo];	// static compteur pour changement carre et gain  auto
+static int at[nb_max_bolo];			// attente pour ne pas changer plusieurs fois a la suite
+double nseuil;
+double  y;int yi;
+int cc;
+double r,coef;	//  point convert.  /  µV 
+def_gains;
+//printf("autocontrole de bolo%d en mode %d \n",bolo,mode);
+
+coef=pt_micV(bolo);			//  point convert.  /  µV 
+coef=coef*litD(fenetre_auto,auto_correct,0L);	// correction augmentée artificiellement
+nseuil=litD(fenetre_auto,auto_auto_val,0L);		// seuil defini dans la fenetre violette
+cc=xbolbrut(bolo-1)*coef;							// correction exacte
+
+if(  (ct[bolo-1]>10) ou   (ct[bolo-1]<-10)  ) {ct[bolo-1]=0;cg[bolo-1]=0;}	// initialisation si n'importe quoi
+if(  (at[bolo-1]>20) ou   (at[bolo-1]<0)  ) 	at[bolo-1]=0;			// initialisation si n'importe quoi
+
+
+//____________  test de depassement 	: 	change  ct ++ ou --  : change le carré si ct > 2 en module
+
+if	 (xbolbrut(bolo-1)>nseuil)  ct[bolo-1]++;
+else	{
+	if (xbolbrut(bolo-1)<-nseuil) 	ct[bolo-1]--;
+	else ct[bolo-1]=0;
+	}
+
+
+//printf("bolo %d : moyenne=%g   valeur=%g  ct=%d  cg=%d \n",bolo,gg->xx[bolo-1][1],gg->xx[bolo-1][0],ct[bolo-1],cg[bolo-1]);
+
+//_____________   action de correction
+
+if(((longueur_table_tm+tt->tm.pos_ecrit-tt->tm.pos_lit)%longueur_table_tm)>2)	return;
+
+if ( (litD(fenetre_auto,auto_verouille,0)==1) && gg->scan_en_cours &&  (mode==auto_val) ) return;							// pas de corrections pendant le scan
+if ( (litD(fenetre_auto,auto_verouille,0)==2)  && (gg->don.sync[sync_subscan] && gg->don.sync[sync_scan]) &&  (mode==auto_val) ) return;			// pas de corrections pendant les subscan
+
+
+if(litD(bolo,b_bloq,0L))  return;				// sort si blocqué
+
+
+
+if(test_saturation(bolo)>5)					//*****************************  baisse le gain si sature
+	{
+	printf("bolo %d sature (sat=%d) cg=%d \n",bolo,test_saturation(bolo),cg[bolo-1]);
+	if(!vg[bolo-1]) vg[bolo-1]=gainbrut(gg->reglage.bolo[bolo-1]);
+	cg[bolo-1]++;
+	at[bolo-1]=5; 						// ne va pas changer le carre avant 5 sec
+	if(cg[bolo-1]>2)
+		{
+		yi=gainbrut(gg->reglage.bolo[bolo-1]);
+		if (yi>=16)	yi=yi&3;
+		yi--;
+		if(yi<0) yi=0;
+//		exec_bolo(bolo,b_gain,yi);
+		ecritD(bolo,b_gain,yi);ecritgain(bolo);
+		cg[bolo-1]=0;
+		son(130);
+		}			
+	}
+
+
+if(at[bolo-1]) {at[bolo-1]--;return;}
+
+
+if( (mode==auto_carre) ou (mode==auto_force) ou (ct[bolo-1]>2) ou (ct[bolo-1]<-2) )//*************************  change le carre		
+	{
+	at[bolo-1]=5; 						// attend 5 coups avant de changer une seconde fois								// change le carre apres 3 fois depassement
+	if( (r=litD(bolo,b_auto_R,0L)) ==0 ) 	
+		{
+		y=(double)dac_V(gg->reglage.bolo[bolo-1])-cc;
+		exec_bolo(bolo,b_carre,y);
+		}
+	else 							//  ************     mesure a resistance donnee
+		{
+		cc=cc*2;					// correction double pour converger plus vite  
+		y=(double)dac_V(gg->reglage.bolo[bolo-1])-cc;	// nouvelle valeur de tension
+		exec_bolo(bolo,b_carre,y);
+		
+		r = 1e-6 *	( y / pt_micV(bolo) ) /r ;	// y/pt_micV  donne des microvolts
+								// I = V / R (V en volt, R en MOhm) -> I en µA
+												
+		printf(" carre=%g  I=V/r =%g nA  ",y,r*1000);	// V en pts,  I en nA 
+															 
+		r *= pt_micA(bolo);				// changement i en valeur triangle
+		printf(" triangle=%g  \n",r);
+		exec_bolo(bolo,b_tri,r);
+		}
+	ct[bolo-1]=0;
+	son(130);
+	}			
+
+//if(bolo==3) printf(" vg=%d  at=%d \n",vg[bolo-1],at[bolo-1]);
+if(at[bolo-1]) return;
+
+if(vg[bolo-1]) 			//  *********************  remonte le gain
+	{
+	yi=gainbrut(gg->reglage.bolo[bolo-1]);
+	if (yi>=16)	yi=yi&3;
+	if(yi>=vg[bolo-1])	vg[bolo-1]=0;
+	else		{
+//			exec_bolo(bolo,b_gain,yi+1);
+			printf("remonte gain\n");
+			ecritD(bolo,b_gain,yi+1);ecritgain(bolo);
+			son(130);
+			at[bolo-1]=5; // attend 5 coups avant de rechanger le carre ou le gain
+			}		
+	cg[bolo-1]=0;
+	son(130);
+	}
+	
+
+}
+
+
+
+
+//-----------------------------------------------------------------------------------------
+//-----------------------------------------------------------------------------------------
+//--------------------  fonction  exec  de  la  fenetre : automatismes  -------------------
+//-----------------------------------------------------------------------------------------
+//-----------------------------------------------------------------------------------------
+
+
+
+void exec_automatismes(int fen,int item,double valeur,...) 
+{
+int i,a;
+long ll;
+if(item>0)	for(i=0;i<nombre_de_voies;i++)
+    	{
+    	ll=(long)(&(gg->reglage.autom[i].mode))-(long)(&(gg->reglage.autom[0]));
+    	a=litD(fenetre_automatismes,atm_auto+i,0L)-1;
+    	if( (a!=gg->reglage.autom[i].mode) ou ( /*clavier(touche_alt) et*/ (item==atm_auto+i) ) )   
+    		emission_tc_reduite(tc2_auto_bolo,ll,a);
+
+    	ll=(long)(&(gg->reglage.autom[i].gain))-(long)(&(gg->reglage.autom[0]));
+    	a=litD(fenetre_automatismes,atm_gain+i,0L)-1+20;
+    	if( (a!=gg->reglage.autom[i].gain) ou ( clavier(touche_alt) et (item==atm_gain+i) ) )   
+    		emission_tc_reduite(tc2_auto_bolo,ll,a);
+
+    	ll=(long)(&(gg->reglage.autom[i].courant))-(long)(&(gg->reglage.autom[0]));
+    	a=litD(fenetre_automatismes,atm_courant+i,0L)-1;
+    	if( (a!=gg->reglage.autom[i].courant) ou ( clavier(touche_alt) et (item==atm_courant+i) ) )   
+    		emission_tc_reduite(tc2_auto_bolo,ll,a);
+
+    	ll=(long)(&(gg->reglage.autom[i].delai))-(long)(&(gg->reglage.autom[0]));
+    	a=litD(fenetre_automatismes,atm_delai+i,0L);
+    	if( (a!=gg->reglage.autom[i].delai) ou ( clavier(touche_alt) et (item==atm_delai+i) ) )   
+    		emission_tc_reduite(tc2_auto_bolo,ll,a);
+	}
+}
+
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/bit_block.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/bit_block.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/bit_block.c	(revision 637)
@@ -0,0 +1,164 @@
+#include <manip.h>
+/*#include <stdio.h>
+#include <malloc.h>
+#include <stdlib.h>
+#define utilitaires_de_block_archeops
+*/
+
+#include "choix_acquisition.h"
+#include "archeops.h"
+#include "bit_block.h"
+
+
+
+unsigned long	buffer;
+int	llgg,somme,type_du_block,numero;
+int	deb;	/*deb vaut zero si aucun debut n'a encore ete trouve*/
+int	compteur;
+int cpt_cherche_debut;
+def_long_block
+
+
+
+int	lit_bit(block_type_modele *pbk)
+
+{
+	int	i,m,bit;
+//	unsigned char	bit;	/*c'est le bit lu*/
+	
+	bit=un_bit();
+	switch(bit)
+		{
+		case	bit_vide :	return(lit_bit_vide);		
+		case	bit_un	:	buffer=(buffer>>1)|0x80000000;	break;	
+		case	bit_zero :	buffer=0x7fffffff & (buffer>>1);	break;	
+		default	:		ecrit_erreur_bit(erreur_bit_erreur);
+					buffer=buffer>>1;
+					break;
+		}
+	
+	compteur++;
+	i=compteur%32;
+
+		
+	
+	switch(deb)
+	{
+		case(1) :
+			
+			/*signifie qu'un debut a ete trouve precedemment*/
+			
+			if(i==31)
+			{
+				/*lecture du code 1*/
+				pbk->code1=buffer;
+				deb=2;
+			 } 
+			 break;
+			 
+		case(2) :
+		
+			/*lecture du code 2*/	
+			
+			if(i==31)
+			{	
+				
+				pbk->code2=buffer;
+//				type_du_block=((buffer>>24)&0xff);
+//				numero=(buffer&0xffffff);
+				deb=3;
+				
+				/*Quelques tests avant de continuer*/
+				llgg=longueur_block(pbk);
+				somme=somme_block(pbk);
+				type_du_block=type_block(pbk);
+				numero=numero_block(pbk);
+
+				if((type_du_block<0) || (type_du_block>nb_type_blocks))
+				{
+					ecrit_erreur_bit(erreur_type);
+					deb=0;	/*on va rechercher un nouveau debut*/
+				}
+				
+				if(llgg!=long_block[type_du_block])
+				{
+					ecrit_erreur_bit(erreur_longueur);
+					deb=0;	/*on va rechercher un nouveau debut*/
+				}
+//				if(deb) ecrit_erreur_bit(bloc_correct);			
+			 } 
+			 break;
+			 
+		case(3) :
+		
+			if(i==31)
+			{
+				m=(compteur+1)/32-4;
+				if( (m>(taille_maxi_block_archeops)/4) ou (m<0) )	
+					{
+					ecrit_erreur_bit(erreur_longueur);
+					deb=0;
+					}
+					else
+				{
+					pbk->mot[m]=buffer;
+					
+					if(m==llgg/4-4) 	/*en principe, c'est le mot fin*/
+					{
+						if(pbk->mot[m] == fin_block_mesure)
+						{
+							if(calcul_somme_block(pbk,llgg)!=somme)
+							{
+								ecrit_erreur_bit(erreur_somme);
+								
+								/*on continue quand meme*/
+							}
+//							else	ecrit_erreur_bit(bloc_correct);	
+								
+							deb=0;
+
+							return(lit_bit_un_block);
+										
+						}
+						else
+						{
+							ecrit_erreur_bit(erreur_fin);
+							
+							/*ecrire ici une nouvelle recherche de debut dans pbk*/
+							deb=0;
+						}
+						
+						
+					}
+				}		
+			}
+			break;
+			
+			
+		default :
+		
+				
+			if(buffer==debut_block_mesure)
+			{
+				deb=1;
+				compteur=31;
+				pbk->debut=buffer;
+			}
+			else
+			{
+			if( (cpt_cherche_debut++<0) ou (cpt_cherche_debut>10000) ) 
+				{
+				cpt_cherche_debut=0;
+				ecrit_erreur_bit(cherche_debut);
+				}
+			}
+			break;
+		
+
+	}		
+	
+	return(lit_bit_OK);
+			
+}				
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/bolo.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/bolo.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/bolo.c	(revision 637)
@@ -0,0 +1,287 @@
+#include "diabolo.h"
+#include "bolo.h"
+#include "acqui.h"
+#include "fichier.h"
+#include "auto.h"
+#include "regul.h"
+#include "tm.h"
+
+
+int auto_tr[nb_max_bolo];
+int ib_efface[nb_max_bolo];
+
+
+//----------------------------------  fenetre : bolo  -----------------------------------
+
+
+
+//  le numero du bolometre dans  fen    (fenetres 1 à parametres.nb_bolo )
+
+void exec_bolo(int fen,int item,double valeur,...) 
+{
+int a,c,i;
+int n=gg->reglage.horloge.nb_mesures;
+//if(fen > 5 ) return;
+if(item>1000) item-=1000;		// pour appeler le case pour tous les cara d'un edit texte
+//controlemanip(0);
+//printf("execbolo avec fen=%d , item=%d \n",fen,item);
+switch(item)
+	{
+	case ouverture	:	ib_efface[fen-1]=0;
+    				selectgra(fen);
+    				graph->ymin=-18000;
+    				graph->ymax=18000;
+    				graph->ypas=9000;
+    				graph->xmax=gg->reglage.horloge.nb_mesures;
+    				graph->xpas=graph->xmax/4;
+    				graph->grille=1;
+    				graph->graduations=0;
+ 				graph->sans_image=1;   					
+ 				graph->avec_icones=0;   					
+ 				graph->xtitre[0]=0;   					
+ 				graph->ytitre[0]=0;   
+// 				ecritD(fen,b_voy,fen+1);					
+
+				ecritgain(fen);
+ 				break;
+ 
+						
+	case tache_de_fond  :	// appellé par le programme d'acquisition pour tracer	----  la cadence est variable 
+				n=gg->reglage.horloge.nb_mesures;
+					{
+					selectgra(fen);
+					graph->xmax=n;		graph->xpas=n/4;
+					graph->ymin=-18000;	graph->ymax=18000;	graph->ypas=9000;
+					}
+				if(ib_efface[fen-1]--<0) { ib_efface[fen-1]=10;	retrace(fen);}	
+				c=1234;
+    				effacecourbe(fen);
+//				style(fen);
+				//tt->bololut[fen-1]=lecture_en_cours;	
+				
+				for(i=0;i<n;i++)
+					{
+					//  16 bit utiles dans     gg->bol_per   
+					trace(fen,i, ((double)((gg->bol_per[fen-1][i]&0x7fff)-0x4000)));
+					a=(gg->bol_per[fen-1][i]>>15)&1;
+					if(a!=c)	{
+							c=a;	if(a)	modtrace(fen,1,bleu);
+								else	modtrace(fen,1,rouge);
+							}
+					}							
+				trace(fen,n, ((double)((gg->bol_per[fen-1][0]&0x7fff)-0x4000)));
+				if(gg->flag_tc_reduite)		break;	/* pas d'auto en local  si en tc_reduites */
+				if( (litD(fen,b_auto,0L))!=0)	auto_control(fen,auto_val); 
+				if(auto_tr[fen-1]) 		{auto_transitoire(fen,auto_tr[fen-1]);auto_tr[fen-1]--;}
+
+				break;
+
+//  reecrit les valeurs dans la fenetre pour appel par un autre programme						
+	case b_carre 	:	ecritD(fen,b_carre,(int)valeur);		ecritgain(fen);		break;
+	case b_tri 	:	ecritD(fen,b_tri,(int)valeur);			ecritgain(fen);		break;	
+	case b_trans 	:	ecritD(fen,b_trans,(int)valeur);		ecritgain(fen);		break;	
+	case b_lin 	:	ecritD(fen,b_lin,(int)valeur);			ecritgain(fen);		break;	
+	case b_gain 	:	vg[fen-1]=0;  ecritD(fen,b_gain,(int)valeur);	ecritgain(fen);		break;												
+	case b_phase 	:	ecritD(fen,b_phase,(int)valeur);		ecritgain(fen);		break;
+	case b_comm 	:	ecritD(fen,b_comm,(int)valeur);			ecritgain(fen);		break;
+	case b_voie	:							ecritgain(fen);		break;
+	case caseferme  :	//SizeWindow(ptf->ptwindow,210,105,1);MoveWindow(ptf->ptwindow,620,-20+fen*95,0);zoom(fen);
+				stop_exec(fen);	break;
+
+					break;
+	case b_auto_trans:	case	b_auto_trans+1000	:	auto_tr[fen-1]=20;		break;
+	case b_auto_lin	:	case	b_auto_lin+1000		:	ecritD(fen,b_lin,2048);		break;			
+					
+	case b_auto	:	ecritgain(fen);
+//				if(valeur && (! gg->flag_tc_reduite) )	
+				if(valeur)	auto_control(fen,auto_force);
+				break;			
+
+	default  	:	break;
+	}
+}
+
+
+unsigned char codage_12_bit(int av,int an);
+unsigned char codage_12_bit(int av,int an)
+{
+int a=an-av;
+if( (a>0) && (a<64) ) a =  0x40  |  a;
+	else	if( (a<0) && (a>-64) ) a = -a;
+		else	a=0x80  |  ((an&0xfff)>>5) ;
+return(a);
+}
+
+
+void ecritgain(int fen)		// ecrit gain, carre, triangle, .....gg->reglage.dac[...]
+{
+int carr,tri,lin,tran,i,j,gainbrut,phase,comm,voie;
+int gain_MLPA[16]={1,2,4,8,10,20,40,80,100,200,400,800,1000,2000,4000,8000};
+int gain_BEBO[4]={5,25,100,500};	/*	gainbrut ampli  1 / 5 / 20 / 100	*/
+int gain_BEDIF[3]={10,40,200}; 		/* 	gainbrut ampli  2 / 8 / 40 	*/
+int table_phase[4]={0,1,3,2};
+char bit[80];
+int b,ordre;
+char mot_tc[10];
+carr=litD(fen,b_carre,0L);			
+tri=litD(fen,b_tri,0L);				
+lin=litD(fen,b_lin,0L);				
+tran=litD(fen,b_trans,0L);			
+gainbrut=litD(fen,b_gain,0L);			
+phase=litD(fen,b_phase,0L);
+comm=litD(fen,b_comm,0L);		
+if(litD(fen,b_auto,0L))  voie=litD(fen,b_voie,0L);	else voie=0;
+
+//  verifie les gainsbrut  en fonction de la boite utilisée    
+switch(parametr.bolo[fen-1].bolo_bebo)
+	{
+	case 	0:	//  ----------------------   programmation MLPA  -------------------
+			break;
+	case	2:
+	case 	3:
+	case 	4:	//  ----------------------   programmation BEBO  -------------------
+			if(gainbrut>3) {gainbrut=3;ecritD(fen,b_gain,3);}
+			gainbrut+=16;	// pour une BEBO
+			break;
+
+	case	10:	//  ----------------------   programmation Bediff  -------------------
+			if(gainbrut>2) {gainbrut=2;ecritD(fen,b_gain,2);}
+			gainbrut+=20;	//  pour une BEDIFF
+			if(phase>1) {phase=1;ecritD(fen,b_phase,1);}
+
+	default	:	break;
+	}
+	
+
+
+//  emission des telecommandes reduites au lieu des telecommandes completes
+
+if(gg->flag_tc_reduite)
+	{
+	if(carr!=dac_V(gg->reglage.bolo[fen-1]))
+	  emission_tc_reduite(tc2_bolo_dacV,fen-1,codage_12_bit(dac_V(gg->reglage.bolo[fen-1]),carr));
+
+	if(tri!=dac_I(gg->reglage.bolo[fen-1]))
+	  emission_tc_reduite(tc2_bolo_dacI,fen-1,codage_12_bit(dac_I(gg->reglage.bolo[fen-1]),tri));
+
+	if(tran!=dac_T(gg->reglage.bolo[fen-1]))
+	  emission_tc_reduite(tc2_bolo_dacT,fen-1,codage_12_bit(dac_T(gg->reglage.bolo[fen-1]),tran));
+
+	if(lin!=dac_L(gg->reglage.bolo[fen-1]))
+	  emission_tc_reduite(tc2_bolo_dacL,fen-1,codage_12_bit(dac_L(gg->reglage.bolo[fen-1]),lin));
+
+	if( (gainbrut!=gainbrut(gg->reglage.bolo[fen-1]))
+		ou (phase!=phase(gg->reglage.bolo[fen-1]))
+		ou (comm!=comm(gg->reglage.bolo[fen-1])) ) 
+	  		emission_tc_reduite(tc2_bolo_gain,fen-1,bolo_mot1(carr,tri,gainbrut,phase,comm));
+
+	if(voie!=voie(gg->reglage.bolo[fen-1]))
+	  emission_tc_reduite(tc2_bolo_voie,fen-1,voie);
+	}
+	
+else	{
+	for(j=0;j<72;j++) bit[j]=0;			//  prepare 72 bits à envoyer en 9 mots de 8 bits
+
+	switch(parametr.bolo[fen-1].bolo_bebo)
+		{
+		case 	0:
+			{			//  ----------------------   programmation MLPA  -------------------
+		//	printf("programmation MLPA:  tri=%d  car=%d \n",tri,carr); 
+
+			mot_tc[0]=parametr.bolo[fen-1].bolo_num;	//  premier mot de 8 bit (code adresse bolometre)
+		//	printf(" ecrit bolo %d \n",gg->bolo[fen-1].bolo_num);
+			bit[0]=table_phase[phase&3]>>1;	bit[1]=table_phase[phase&3];
+			b=2;
+			for(i=11;i>=0;i--) {bit[b]=1;	bit[b+1]=tran>>i;   bit[b+2]=lin>>i;	bit[b+3]=tri>>i;   bit[b+4]=carr>>i;b+=5;}
+					    bit[b]=1;	bit[b+1]=gainbrut>>3;   bit[b+2]=gainbrut>>2;	bit[b+3]=gainbrut>>1;  bit[b+4]=gainbrut;
+			ordre=0;
+			}
+			break;
+
+
+		case	2:
+		case 	3:
+		case 	4:
+			{			//  ----------------------   programmation BEBO  -------------------
+			mot_tc[0]=8*parametr.bolo[fen-1].bolo_bebo + parametr.bolo[fen-1].bolo_num;	//  premier mot de 8 bit (code adresse bolometre)
+		//	printf("programmation BEBO N° :  tri=%d  car=%d \n",mot_tc[0],tri,carr); 
+
+			bit[0]=gainbrut>>1;	bit[1]=gainbrut;	bit[2]=table_phase[phase&3]>>1;	bit[3]=table_phase[phase&3];
+			b=4;
+					for(i=11;i>=0;i--)	bit[b++]=(tri>>i)&1;
+					for(i=11;i>=0;i--)	bit[b++]=(carr>>i)&1;
+					for(i=11;i>=0;i--)	bit[b++]=(tran>>i)&1;
+
+					ecritD(fen,b_lin,0);
+			ordre=0;
+			}
+			break;
+
+		case	10:
+			{			//  ----------------------   programmation Bediff  -------------------
+				//  ---  les bits sortent dans l'autre sens : poid faible d'abord  ----
+				//  --  il faut donc retourner les bits des dacs
+	//		lin=0;
+	//		ecritD(fen,b_lin,lin);	gg->reglage.dac[d_lin][fen-1]=lin; // pas de linearité
+			mot_tc[0]= parametr.bolo[fen-1].bolo_num;	//  premier mot de 8 bit (code adresse bolometre)
+			printf("programmation BEdiff N° %d:  tri=%d  car=%d \n",mot_tc[0],tri,carr); 
+
+			bit[0]=gainbrut>>1;	bit[1]=gainbrut;	bit[2]=comm; bit[3]=phase;
+			b=4;
+					for(i=11;i>=0;i--)	bit[b++]=(tri>>i)&1;
+					for(i=11;i>=0;i--)	bit[b++]=(carr>>i)&1;
+					for(i=11;i>=0;i--)	bit[b++]=(tran>>i)&1;
+					for(i=11;i>=0;i--)	bit[b++]=(lin>>i)&1;
+			ordre=1;
+			}
+			break;
+
+
+		default	:	break;
+		}
+
+
+
+
+	if (ordre)			//  remet les bit par mot de 8 bit poid faible en premier
+		for(i=0;i<9;i++)	mot_tc[i+1]=
+			( ((bit[8*i]&1)) | ((bit[8*i+1]&1)<<1) | ((bit[8*i+2]&1)<<2) | ((bit[8*i+3]&1)<<3)
+		      | ((bit[8*i+4]&1)<<4) | ((bit[8*i+5]&1)<<5) | ((bit[8*i+6]&1)<<6) | ((bit[8*i+7]&1)<<7 ) );
+
+	else				//  remet les bit par mot de 8 bit, poid fort en premier
+		for(i=0;i<9;i++)	mot_tc[i+1]=
+			( ((bit[8*i]&1)<<7) | ((bit[8*i+1]&1)<<6) | ((bit[8*i+2]&1)<<5) | ((bit[8*i+3]&1)<<4)
+		      | ((bit[8*i+4]&1)<<3) | ((bit[8*i+5]&1)<<2) | ((bit[8*i+6]&1)<<1) | ((bit[8*i+7]&1) ) );
+
+	emission_telecommande(tc_dir_transputer,mot_tc);
+		
+	gg->reglage.bolo[fen-1].mot1=bolo_mot1(carr,tri,gainbrut,phase,comm);
+	gg->reglage.bolo[fen-1].mot2=bolo_mot2(tran,lin,voie);
+
+	}
+mesures_bolo(fen,carr,tri,1);		//  mesure temperature, puissance,... pour les bolos
+
+tt->reglage=gg->reglage;
+
+fich_save_partiel(1);
+}
+
+
+/*
+
+void 	ecritpulseprisme(int per);
+
+void ecritpulseprisme(int per)							//   ecrit l'etat.bolo :  gg->reglage.diode_dure
+{
+//int i;
+gg->reglage.diode_dure=per;
+per=per+1;
+//printf(" ecriture de per=%d  \n",per);
+// lecture et ecriture carte du nopmbre de mesures
+if(per<1)	per=1;	if(per>31) per=31;
+//ecrit_nubus_dec(25);		//  valeur  2 * num_bolo  +1  = 2*12 + 1 = 25
+//ecrit_nubus_dec(per & 31 );	//  5 bits ecriture  
+//for(i=0;i<12;i++) ecrit_nubus_dec(0);
+fich_save_partiel(1);
+}
+*/
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/carte.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/carte.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/carte.c	(revision 637)
@@ -0,0 +1,218 @@
+#include "diabolo.h"
+#include "synchro.h"
+#include "carte.h"
+
+
+
+#define indicemax	1000
+
+double taille_carte,pas,vitesse;
+int bolo_carte,indice,ind_moy,debut_ligne,moy,sens_ligne;
+double dynamique;
+double seuil;
+
+double carte[nb_max_bolo][indicemax];
+double	xx[indicemax];
+double	yy[indicemax];
+int	flag_fin[indicemax],flag_sens[indicemax];
+
+double xx0,yy0;
+
+
+//--------------------  fonction  exec  de  la  fenetre : trace_carte  -------------------------------
+void	echelles(void);
+void	retrace_carte(void);
+
+void exec_carte(int fen,int item,double valeur,...) 
+{
+if(item>1000) item-=1000;		// pour appeler le case pour tous les cara d'un edit texte
+
+switch(item)
+	{
+	case ouverture     :	gg->trace_ouvert=gg->trace_ouvert | 16 ;	
+ 	    			selectgra(fen);
+    				graph->taille_graduations=7;
+
+	case cart_debut :	echelles();
+				indice=0;ind_moy=0;sens_ligne=1;debut_ligne=1;	// premier point a venir
+				xx0=-0.5*(taille_carte-0.5*pas);yy0=-0.5*taille_carte;
+				break;
+
+
+
+	case fermeture     :	gg->trace_ouvert=gg->trace_ouvert & (255-16); 		// enleve le 16
+    						break;
+   
+	case cart_taille_carte :			
+	case cart_pas :			
+	case cart_dynamique :			
+	case cart_bolo :			
+	case cart_vitesse :	echelles();		
+				
+				break;
+	
+	case cart_retrace :	retrace_carte();
+				break;			
+	        			
+	default  :		break;
+	}
+}
+
+
+void echelles(void)
+{
+double moyenne_double;
+taille_carte=litD(fenetre_annexe,cart_taille_carte,0);
+pas=litD(fenetre_annexe,cart_pas,0);
+vitesse=litD(fenetre_annexe,cart_vitesse,0);
+dynamique=litD(fenetre_annexe,cart_dynamique,0);
+bolo_carte=litD(fenetre_annexe,cart_bolo,0);
+selectgra(fenetre_annexe);
+graph->ymin=-0.5*(taille_carte+2*pas);
+graph->ymax=0.5*(taille_carte+2*pas);
+graph->ypas=pas;
+graph->xmin=-0.5*(taille_carte+2*pas);
+graph->xmax=0.5*(taille_carte+2*pas);
+graph->xpas=pas;
+graph->graduations=0;
+graph->grille=1;
+graph->aspect=-1;
+efface(fenetre_annexe);
+// moyennes par demi pas en x
+moyenne_double= pas * 0.5 /( gg->periode_echantillonage * vitesse );
+
+if(gg->trace_ouvert&32)		moyenne_double/=(double)synchro_periode;	// pour mesure avec Detection synchrone
+moy=(int)(moyenne_double+0.5);
+if(moy<1) moy=1;
+printf("moyennes calculee sur %6.2f points  soit m=%d \n",moyenne_double,moy);
+}
+
+void trace_carte(double * y)
+{
+int j;
+// calculer le nombre de points de mesure dans un pas a la vitesse 
+//	gg->periode_echantillonage	contient la duree entre deux points de mesure (pour diabolo)
+
+if( (!(gg->don.sync[sync_scan]&&gg->don.sync[sync_subscan])) && (indice==0) ) return; 	
+
+if( (!gg->don.sync[sync_subscan]) && (indice>2) && (debut_ligne<3) ) debut_ligne=2;	// entre deux subscan
+
+if(ind_moy==0)	for(j=0;j<nb_max_bolo;j++)	carte[j][indice]=0;
+if(ind_moy<moy)	for(j=0;j<nb_max_bolo;j++)	carte[j][indice]+=y[j];
+if(ind_moy<moy+10) ind_moy++;	// pour ne pas continuer a l'infini
+
+if( (ind_moy>=moy) && (indice<indicemax) )
+	{
+	if(ind_moy==moy)
+		{
+		int couleur_degrade;
+		xx[indice]=xx0;
+		yy[indice]=yy0;
+		flag_fin[indice]=debut_ligne;
+		flag_sens[indice]=sens_ligne;
+		for(j=0;j<nb_max_bolo;j++)	carte[j][indice]/=(double)moy;
+
+//		if(debut_ligne==1)	seuil=carte[bolo-1][indice];	// premier point d'une ligne : seuil pour la suite 
+		seuil=0;	// pas de seuil: utiliser le filtrage en mode puissance totale
+				//  et raz parasite  en mode detection synchrone
+		couleur_degrade=1050+(50.*(carte[bolo_carte-1][indice]-seuil)/dynamique);
+		if(sens_ligne>0)rectangle(fenetre_annexe,xx0-0.25*pas,yy0-0.5*pas,xx0+0.25*pas,yy0,couleur_degrade);
+			else	rectangle(fenetre_annexe,xx0-0.25*pas,yy0,xx0+0.25*pas,yy0+0.5*pas,couleur_degrade);
+		if(debut_ligne==1)	
+			{
+			debut_ligne=0;	// premier point 
+			printf(" debut_ligne indice=%d :  x=%g  y=%g   valeur=%g  couleur=%d \n",indice,xx0,yy0,carte[8][indice],couleur_degrade);
+			}
+		indice++;
+		}
+
+
+	if( (debut_ligne==2) && (!gg->don.sync[sync_scan]) )	
+		{
+		debut_ligne=3;	// fin de carte
+		son(133);
+		printf("fin de carte \n\n");
+		}
+
+	if(gg->don.sync[sync_subscan])	
+		{
+		if(debut_ligne==2)	// prepare pour mesure premier point
+			{
+			sens_ligne=-sens_ligne;
+			if(sens_ligne>0) yy0+=pas;
+			xx0=-0.5*sens_ligne*(taille_carte-0.5*pas);
+			debut_ligne=1;	 ind_moy=0;	// premier point 
+			}
+		if(!debut_ligne)	// prepare pour mesure point suivant
+			{
+			xx0+=sens_ligne*0.5*pas;
+			if( (xx0<0.5*taille_carte) && (xx0>-0.5*taille_carte) ) ind_moy=0;
+			}
+		}
+	}
+
+}
+
+
+void	retrace_carte(void)
+{
+int i,k,kk,couleur_degrade;
+double sx,sy,sx2,sxy,n,a,b;		// pour le fit lineaire
+efface(fenetre_annexe);
+//  calcul dynamique automatique 
+dynamique=0.000000001;
+
+for(i=0;i<indice;i+=kk) 
+	{			//  une ligne commence en indice==i
+				// fit lineaire avec un poid null au milieu  :  y= ax+b
+				//  
+	//  calcule la droite a soustraire
+	sx=0;sy=0;sx2=0;sxy=0;n=0;
+	k=0;
+	do	{
+//		printf(" i=%d  k=%d  carte=%g  \n",i,k,carte[bolo-1][i+k]);
+		if( (xx[i+k]>0.25*taille_carte) ou (xx[i+k]<-0.25*taille_carte) )
+			{
+			n++;
+			sx+=xx[i+k];
+			sy+=carte[bolo_carte-1][i+k];
+			sx2+=xx[i+k]*xx[i+k];
+			sxy+=xx[i+k]*carte[bolo_carte-1][i+k];
+			}
+		k++;
+		}
+	while ( (k<indice-i) &&  (flag_fin[i+k]!=1) );
+	
+	kk=k; // kk = longueur de ligne 
+	a=(sxy*n-sx*sy)/(sx2*n-sx*sx); b=(sy-a*sx)/n;
+//	printf(" une ligne indice i=%d  ligne de %d points a=%g  b=%g \n\n",i,kk,a,b); 
+	
+	//  soustrait la droite fittée sur la ligne et calcule la dynamique
+	for(k=0;k<kk;k++)
+		{
+		carte[bolo_carte-1][i+k]-=a*xx[i+k]+b;
+		
+//		printf(" k=%d  carte/fittee=%g  \n",k,carte[bolo_carte-1][i+k]);
+
+		if(dynamique<carte[bolo_carte-1][i+k])  dynamique=carte[bolo_carte-1][i+k];
+		if(dynamique<-carte[bolo_carte-1][i+k])  dynamique=-carte[bolo_carte-1][i+k];
+		}
+	}
+	
+ecritD(	fenetre_annexe,cart_dynamique,"%g",dynamique);
+
+for(i=0;i<indice;i++)
+	{	
+	couleur_degrade=1050+(50.*carte[bolo_carte-1][i]/dynamique);
+//	printf(" retrace : debut_ligne=%d i=%d :  x=%g  y=%g   valeur=%g  couleur=%d \n",debut_ligne,i,xx0,yy0,carte[8][i],couleur_degrade);
+	if(flag_sens[i]>0)	rectangle(fenetre_annexe,xx[i]-0.25*pas,yy[i]-0.5*pas,xx[i]+0.25*pas,yy[i],couleur_degrade);
+		else		rectangle(fenetre_annexe,xx[i]-0.25*pas,yy[i],xx[i]+0.25*pas,yy[i]+0.5*pas,couleur_degrade);
+	}	
+}
+
+
+
+
+
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/compress.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/compress.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/compress.c	(revision 637)
@@ -0,0 +1,542 @@
+#include <manip.h>
+#include "compress.h"
+
+
+/*******************************************************************************************/
+/****************   			 											****************/
+/****************   			 		compress_3							****************/
+/****************   			 											****************/
+/*******************************************************************************************/
+
+void  com_3(long val,long* in,long*out,int n,int pasin);
+
+
+#define kmax_	15		/*  valeur maximum de l'exposant	*/
+#define	kmak_	0xf		/*	masque pour l'exposant		*/
+#define	emak_	0x7		/*	masque pour l'ecart		*/		
+#define	sgbi_	0x4		/*	bit de signe de l'ecart		*/
+#define	sign_	0xfffffff8	/*	masque de signe de l'ecart	*/
+
+/*  compress un tableau in de n*9 points disposé avec un pas pasin		*/
+/*  les data compressées sont ecrites dans le tableau out de n points	*/
+/*  la valeur val est la valeur de reference du point origine			*/
+
+
+/*  comprime	9*n points  : 1er point dans 1er mot, tous les ecarts dans les n mots suivants		*/ 
+/*	9*n	==>	n+1	    pour  72 points :   9 mots			*/
+
+void compress_3_1(long* in,long*out,int n,int pasin)
+{
+long val;
+val=in[0]; out[0]=val;
+com_3(val,in,out+1,n/9,pasin);
+}
+
+
+
+void  com_3(long val,long* in,long*out,int n,int pasin)
+{
+int filtre[16]={0xffffffff,0xfffffffe,0xfffffffc,0xfffffff8,
+				0xfffffff0,0xffffffe0,0xffffffc0,0xffffff80,
+				0xffffff00,0xfffffe00,0xfffffc00,0xfffff800,
+				0xfffff000,0xffffe000,0xffffc000,0xffff8000};
+int test[16]=  {0x00000000,0x00000001,0x00000002,0x00000004,
+				0x00000008,0x00000010,0x00000020,0x00000040,
+				0x00000080,0x00000100,0x00000200,0x00000400,
+				0x00000800,0x00001000,0x00002000,0x00004000};
+
+long val1;
+long ec1,ec2,ec3,ec4,ec5,ec6,ec7,ec8,ec9;
+int i,k,k1;long q;
+
+
+for(i=0;i<n;i++)
+	{
+	k=0;q=3;	/* 3 bit = 7 = +-3	*/
+
+	ec1=in[i*9*pasin]-val;
+	shif(ec1,k,q);
+	val1=val + arrondi(ec1,k);
+	
+	k1=k;
+	ec2=in[(i*9+1)*pasin]-val1;
+	shif(ec2,k,q);
+	
+	if(k>k1)	{k1=k;val1=val + arrondi(ec1,k);}
+	val1+= arrondi(ec2,k);
+
+	ec3=in[(i*9+2)*pasin]-val1;
+	shif(ec3,k,q);
+
+	if(k>k1)	{k1=k;val1=val + arrondi(ec1,k) + arrondi(ec2,k);}
+	val1+= arrondi(ec3,k);		
+
+	ec4=in[(i*9+3)*pasin]-val1;
+	shif(ec4,k,q);
+
+	if(k>k1)	{k1=k;val1=val + arrondi(ec1,k) + arrondi(ec2,k) + arrondi(ec3,k);}
+	val1+= arrondi(ec4,k);		
+
+	ec5=in[(i*9+4)*pasin]-val1;
+	shif(ec5,k,q);
+
+	if(k>k1)	{k1=k;val1=val + arrondi(ec1,k) + arrondi(ec2,k) + arrondi(ec3,k) + arrondi(ec4,k);}
+	val1+= arrondi(ec5,k);		
+	
+	ec6=in[(i*9+5)*pasin]-val1;
+	shif(ec6,k,q);
+
+	if(k>k1)	{k1=k;val1=val + arrondi(ec1,k) + arrondi(ec2,k) + arrondi(ec3,k)
+					 + arrondi(ec4,k) + arrondi(ec5,k);}
+	val1+= arrondi(ec6,k);		
+	
+	ec7=in[(i*9+6)*pasin]-val1;
+	shif(ec7,k,q);
+
+	if(k>k1)	{k1=k;val1=val + arrondi(ec1,k) + arrondi(ec2,k) 
+				+ arrondi(ec3,k) + arrondi(ec4,k) + arrondi(ec5,k) + arrondi(ec6,k);}
+	val1+= arrondi(ec7,k);		
+	
+	ec8=in[(i*9+7)*pasin]-val1;
+	shif(ec8,k,q);
+
+	if(k>k1)	{k1=k;val1=val + arrondi(ec1,k) + arrondi(ec2,k) + arrondi(ec3,k)
+					 + arrondi(ec4,k) + arrondi(ec5,k) + arrondi(ec6,k) + arrondi(ec7,k);}
+	val1+= arrondi(ec8,k);		
+	
+	ec9=in[(i*9+8)*pasin]-val1;
+	shif(ec9,k,q);
+	
+/*printf("i=%d  k=%d  ec= %d %d %d \n",i,k,ec1,ec2,ec3,out[(i+8)/7]);	*/
+
+	ec1 =  arrondi(ec1,k) >> k;
+	ec2 =  arrondi(ec2,k) >> k;
+	ec3 =  arrondi(ec3,k) >> k;
+	ec4 =  arrondi(ec4,k) >> k;
+	ec5 =  arrondi(ec5,k) >> k;
+	ec6 =  arrondi(ec6,k) >> k;
+	ec7 =  arrondi(ec7,k) >> k;
+	ec8 =  arrondi(ec8,k) >> k;
+	ec9 =  arrondi(ec9,k) >> k;
+
+	out[i]= ((ec1&emak_)<<29) | ((ec2&emak_)<<26) | ((ec3&emak_)<<23) 
+				| ((ec4&emak_)<<20) | ((ec5&emak_)<<17) | ((ec6&emak_)<<14)
+				| ((ec7&emak_)<<11)  | ((ec8&emak_)<<8) | ((ec9&emak_)<<5) | k ;
+
+
+/*	if(i<30)  printf("i=%d  k=%d  ec= %d %d %d \n",i,k,ec1,ec2,ec3,out[(i+8)/7]);*/
+
+	val+= ( (ec1 + ec2 + ec3 + ec4 + ec5 + ec6 + ec7 + ec8 + ec9 ) << k );
+	}
+}
+
+
+
+/*******************************************************************************************/
+/****************   			 											*****************/
+/****************   			 		compress_4							*****************/
+/****************   			 											*****************/
+/*******************************************************************************************/
+
+void  com_4(long val,long* in,long*out,int n,int pasin);
+void  com_4_paire(long val1,long val2,long* in,long*out,int n,int pasin);
+
+
+#undef kmax_
+#undef	kmak_
+#undef	emak_		
+#undef	sgbi_
+#undef	sign_
+
+
+#define kmax_	15		/*  valeur maximum de l'exposant	*/
+#define	kmak_	0xf		/*	masque pour l'exposant		*/
+#define	emak_	0xf		/*	masque pour l'ecart		*/		
+#define	sgbi_	0x8		/*	bit de signe de l'ecart		*/
+#define	sign_	0xfffffff0	/*	masque de signe de l'ecart	*/
+
+/*  compress un tableau in de n*7 points disposé avec un pas pasin	*/
+/*  les data compressées sont ecrites dans le tableau out de n points*/
+/*  la valeur val est la valeur de reference du point origine*/
+
+
+/*  comprime	7*n + 2  points  (de 16 bit chacun)  					*/
+/*	1er et 2 eme point dans 1er mot, les ecarts dans les n mots suivants*/ 
+/*	7*n + 2	==>	n+1	     ==>   pour  72 points :   11 mots  			*/
+
+void compress_4_1(long* in,long*out,int n,int pasin)
+{
+long val1,val2;
+val1=in[0];val2=in[1];
+*out=( (val1<<16) & 0xffff0000 )	|	( ( val2 ) & 0xffff ) ;
+
+com_4(val2,in+2,out+1,n/7,pasin);
+}
+
+
+
+void  com_4(long val,long* in,long*out,int n,int pasin)
+{
+int filtre[16]={0xffffffff,0xfffffffe,0xfffffffc,0xfffffff8,
+				0xfffffff0,0xffffffe0,0xffffffc0,0xffffff80,
+				0xffffff00,0xfffffe00,0xfffffc00,0xfffff800,
+				0xfffff000,0xffffe000,0xffffc000,0xffff8000};
+int test[16]=  {0x00000000,0x00000001,0x00000002,0x00000004,
+				0x00000008,0x00000010,0x00000020,0x00000040,
+				0x00000080,0x00000100,0x00000200,0x00000400,
+				0x00000800,0x00001000,0x00002000,0x00004000};
+
+long val1;
+long ec1,ec2,ec3,ec4,ec5,ec6,ec7;
+int i,k,k1;long q;
+
+
+for(i=0;i<n;i++)
+	{
+	k=0;q=7;	/* 4 bit = 15 = +-7	*/
+
+	ec1=in[i*7*pasin]-val;
+	shif(ec1,k,q);
+	val1=val + arrondi(ec1,k);
+	
+	k1=k;
+	ec2=in[(i*7+1)*pasin]-val1;
+	shif(ec2,k,q);
+	
+	if(k>k1)	{k1=k;val1=val + arrondi(ec1,k);}
+	val1+= arrondi(ec2,k);
+
+	ec3=in[(i*7+2)*pasin]-val1;
+	shif(ec3,k,q);
+
+	if(k>k1)	{k1=k;val1=val + arrondi(ec1,k) + arrondi(ec2,k);}
+	val1+= arrondi(ec3,k);		
+
+	ec4=in[(i*7+3)*pasin]-val1;
+	shif(ec4,k,q);
+
+	if(k>k1)	{k1=k;val1=val + arrondi(ec1,k) + arrondi(ec2,k) + arrondi(ec3,k);}
+	val1+= arrondi(ec4,k);		
+
+	ec5=in[(i*7+4)*pasin]-val1;
+	shif(ec5,k,q);
+
+	if(k>k1)	{k1=k;val1=val + arrondi(ec1,k) + arrondi(ec2,k) + arrondi(ec3,k) + arrondi(ec4,k);}
+	val1+= arrondi(ec5,k);		
+	
+	ec6=in[(i*7+5)*pasin]-val1;
+	shif(ec6,k,q);
+
+	if(k>k1)	{k1=k;val1=val + arrondi(ec1,k) + arrondi(ec2,k) + arrondi(ec3,k)
+					 + arrondi(ec4,k) + arrondi(ec5,k);}
+	val1+= arrondi(ec6,k);		
+	
+	ec7=in[(i*7+6)*pasin]-val1;
+	shif(ec7,k,q);
+	
+/*printf("i=%d  k=%d  ec= %d %d %d \n",i,k,ec1,ec2,ec3,out[(i+8)/7]);*/
+
+	ec1 =  arrondi(ec1,k) >> k;
+	ec2 =  arrondi(ec2,k) >> k;
+	ec3 =  arrondi(ec3,k) >> k;
+	ec4 =  arrondi(ec4,k) >> k;
+	ec5 =  arrondi(ec5,k) >> k;
+	ec6 =  arrondi(ec6,k) >> k;
+	ec7 =  arrondi(ec7,k) >> k;
+
+	out[i]= ((ec1&emak_)<<28) | ((ec2&emak_)<<24) | ((ec3&emak_)<<20) 
+				| ((ec4&emak_)<<16) | ((ec5&emak_)<<12) | ((ec6&emak_)<<8) | ((ec7&emak_)<<4) | k ;
+
+
+/*	if(i<30)  printf("i=%d  k=%d  ec= %d %d %d \n",i,k,ec1,ec2,ec3,out[(i+8)/7]);*/
+
+	val+= ( (ec1 + ec2 + ec3 + ec4 + ec5 + ec6 + ec7 ) << k );
+	}
+}
+
+/********************************************************************************************/
+
+/*  compresse en 4 bit mais par paire (pour data provenant de la detection synchrone)		*/
+
+/*     21 bit maleur maximum			*/
+/*  comprime	7*n+2 points  : 1er et 2eme point dans 1er et 2eme mot, suite dans n mots	*/
+/*		différences entre valeures paires  et entre valeures impaires uniquement			*/ 
+/*	7*n+2	==>	n+2			==>  pour 72 points :		12 mots								*/
+
+void compress_4_2(long* in,long*out,int n,int pasin)
+{
+long val1,val2;
+val1=in[0];		val2=in[1];
+out[0]=val1;	out[1]=val2;
+com_4_paire(val1,val2,in+2,out+2,n/7,pasin);
+}
+
+
+void  com_4_paire(long val1,long val2,long* in,long*out,int n,int pasin)
+{
+int filtre[16]={0xffffffff,0xfffffffe,0xfffffffc,0xfffffff8,
+				0xfffffff0,0xffffffe0,0xffffffc0,0xffffff80,
+				0xffffff00,0xfffffe00,0xfffffc00,0xfffff800,
+				0xfffff000,0xffffe000,0xffffc000,0xffff8000};
+int test[16]=  {0x00000000,0x00000001,0x00000002,0x00000004,
+				0x00000008,0x00000010,0x00000020,0x00000040,
+				0x00000080,0x00000100,0x00000200,0x00000400,
+				0x00000800,0x00001000,0x00002000,0x00004000};
+
+long val1p,val2p;
+long ec1,ec2,ec3,ec4,ec5,ec6,ec7;
+int i,k,k1;long q;
+
+
+for(i=0;i<n;i++)
+	{
+	k=0;q=7;	/* 4 bit = 15 = +-7	*/
+
+	ec1=in[i*7*pasin]-val1;
+	shif(ec1,k,q);
+	
+	ec2=in[(i*7+1)*pasin]-val2;
+	shif(ec2,k,q);
+	
+	k1=k;
+	val1p=val1 + arrondi(ec1,k);
+
+
+	ec3=in[(i*7+2)*pasin]-val1p;
+	shif(ec3,k,q);
+
+	val2p=val2 + arrondi(ec2,k);
+
+	ec4=in[(i*7+3)*pasin]-val2p;
+	shif(ec4,k,q);
+
+	if(k>k1)	{k1=k;val1p=val1 + arrondi(ec1,k);val2p = val2 + arrondi(ec2,k);}
+	
+	val1p+= arrondi(ec3,k);		
+
+	ec5=in[(i*7+4)*pasin]-val1p;
+	shif(ec5,k,q);
+
+	if(k>k1)	{	k1=k;
+				val1p=val1 + arrondi(ec1,k) + arrondi(ec3,k);
+				val2p=val2 + arrondi(ec2,k);
+				}
+	val2p+= arrondi(ec4,k);		
+	
+	ec6=in[(i*7+5)*pasin]-val2p;
+	shif(ec6,k,q);
+
+	if(k>k1)	{	k1=k;
+				val1p=val1 + arrondi(ec1,k) + arrondi(ec3,k);
+				val2p=val2 + arrondi(ec2,k) + arrondi(ec4,k);
+				}
+	val1p+= arrondi(ec5,k);		
+	
+	ec7=in[(i*7+6)*pasin]-val1p;
+	shif(ec7,k,q);
+	
+/*printf("i=%d  k=%d  ec= %d %d %d \n",i,k,ec1,ec2,ec3,out[(i+8)/7]);*/
+
+	ec1 =  arrondi(ec1,k) >> k;
+	ec2 =  arrondi(ec2,k) >> k;
+	ec3 =  arrondi(ec3,k) >> k;
+	ec4 =  arrondi(ec4,k) >> k;
+	ec5 =  arrondi(ec5,k) >> k;
+	ec6 =  arrondi(ec6,k) >> k;
+	ec7 =  arrondi(ec7,k) >> k;
+
+	out[i]= ((ec1&emak_)<<28) | ((ec2&emak_)<<24) | ((ec3&emak_)<<20) 
+				| ((ec4&emak_)<<16) | ((ec5&emak_)<<12) | ((ec6&emak_)<<8) | ((ec7&emak_)<<4) | k ;
+
+
+/*	if(i<30)  printf("i=%d  k=%d  ec= %d %d %d \n",i,k,ec1,ec2,ec3,out[(i+8)/7]);*/
+
+	val1p = val1 + ( (ec1 + ec3 + ec5 + ec7 ) << k );
+	val1= val2 + ( (ec2 + ec4	+ ec6 ) << k );
+	val2 = val1p;
+	}
+}
+
+
+
+
+
+/*******************************************************************************************/
+/****************   			 											*****************/
+/****************   			 		compress_7							*****************/
+/****************   			 											*****************/
+/*******************************************************************************************/
+
+
+void  compress_7(long val,long* in,long*out,int n,int pasin);
+void  compress_7_paire(long val1,long val2,long* in,long*out,int n,int pasin);
+
+
+#undef kmax_
+#undef	kmak_
+#undef	emak_		
+#undef	sgbi_
+#undef	sign_
+
+
+
+#define kmax_	15		/*  valeur maximum de l'exposant	*/
+#define	kmak_	0xf		/*	masque pour l'exposant		*/
+#define	emak_	0x7f		/*	masque pour l'ecart		*/		
+#define	sgbi_	0x40		/*	bit de signe de l'ecart		*/
+#define	sign_	0xffffff80	/*	masque de signe de l'ecart	*/
+
+
+/*  comprime	4*n points  : 1er point dans 1er mot, tous les ecarts dans les n mots suivants		*/ 
+/*	4*n	==>	n+1	*/
+
+void compress_7_1(long* in,long*out,int n,int pasin)
+{
+long val;
+val=*in;
+*out=val;
+compress_7(val,in,out+1,n/4,pasin);
+}
+
+
+
+/*  compress un tableau in de n*4 points disposé avec un pas pasin	*/
+/*  les data compressées sont ecrites dans le tableau out de n points	*/
+/*  la valeur val est la valeur de reference du point origine	*/
+
+void  compress_7(long val,long* in,long*out,int n,int pasin)
+{
+int filtre[16]={0xffffffff,0xfffffffe,0xfffffffc,0xfffffff8,
+				0xfffffff0,0xffffffe0,0xffffffc0,0xffffff80,
+				0xffffff00,0xfffffe00,0xfffffc00,0xfffff800,
+				0xfffff000,0xffffe000,0xffffc000,0xffff8000};
+int test[16]=  {0x00000000,0x00000001,0x00000002,0x00000004,
+				0x00000008,0x00000010,0x00000020,0x00000040,
+				0x00000080,0x00000100,0x00000200,0x00000400,
+				0x00000800,0x00001000,0x00002000,0x00004000};
+
+long val1;
+long ec1,ec2,ec3,ec4;
+int i,k,k1;long q;
+
+
+for(i=0;i<n;i++)
+	{
+	k=0;q=63;		/* 7 bit ->  127  ->   +-63	*/
+
+	ec1=in[i*4*pasin]-val;
+	shif(ec1,k,q);
+	val1=val + arrondi(ec1,k);
+	
+	k1=k;
+	ec2=in[(i*4+1)*pasin]-val1;
+	shif(ec2,k,q);
+	
+/*	if(k>k1)	{k1=k;val1=val + arrondi(ec1,k);}	*/
+	val1+= arrondi(ec2,k);
+
+	ec3=in[(i*4+2)*pasin]-val1;
+	shif(ec3,k,q);
+
+/*	if(k>k1)	{k1=k;val1=val + arrondi(ec1,k) + arrondi(ec2,k);}	*/
+	val1+= arrondi(ec3,k);		
+
+	ec4=in[(i*4+3)*pasin]-val1;
+	shif(ec4,k,q);
+	
+/*printf("i=%d  k=%d  ec= %d %d %d \n",i,k,ec1,ec2,ec3,out[(i+8)/7]);	*/
+
+	ec1 =  arrondi(ec1,k) >> k;
+	ec2 =  arrondi(ec2,k) >> k;
+	ec3 =  arrondi(ec3,k) >> k;
+	ec4 =  arrondi(ec4,k) >> k;
+
+	out[i]= ((ec1&emak_)<<25) | ((ec2&emak_)<<18) | ((ec3&emak_)<<11) | ((ec4&emak_)<<4) | k ;
+
+/*	if(i<30)  printf("i=%d  k=%d  ec= %d %d %d \n",i,k,ec1,ec2,ec3,out[(i+8)/7]);	*/
+
+	val+= ( (ec1 + ec2 + ec3 + ec4 ) << k );
+	}
+}
+
+
+/*******************************************************************************************/
+
+/*  compresse en 7 bit mais par paire (pour data provenant de la detection synchrone      */
+
+/* ne prend que les 21 bit de poid faible dans le mot en entree			*/
+/*  comprime	4*n points  : 1er et 2eme point dans 1er mot (16 bit chacun),  suite dans n mots		*/
+/*		différences entre valeures paires  et entre valeures impaires uniquement			*/ 
+/*	4*n	==>	n+1	*/
+
+#define  point_in(i,pasin,n)  (in[(i*4+n)*pasin]&0x1fffff)
+
+
+void compress_7_2(long* in,long*out,int n,int pasin)
+{
+long val1,val2;
+val1=in[0]&0x1fffe0;val2=in[1]&0x1fffe0;
+*out=( (val1<<11) & 0xffff0000 )	|	( (val2 >> 5) & 0xffff ) ;
+
+/*printf("in[0]=%x  val1=%x   //    in[1]=%x   val2=%x  \n",in[0],val1,in[1],val2);
+printf("in[2]=%x    in[3]=%x   \n",in[2],in[3]);*/
+compress_7_paire(val1,val2,in,out+1,n/4,pasin);
+}
+
+
+void  compress_7_paire(long val1,long val2,long* in,long*out,int n,int pasin)
+{
+int filtre[16]={0xffffffff,0xfffffffe,0xfffffffc,0xfffffff8,
+				0xfffffff0,0xffffffe0,0xffffffc0,0xffffff80,
+				0xffffff00,0xfffffe00,0xfffffc00,0xfffff800,
+				0xfffff000,0xffffe000,0xffffc000,0xffff8000};
+int test[16]=  {0x00000000,0x00000001,0x00000002,0x00000004,
+				0x00000008,0x00000010,0x00000020,0x00000040,
+				0x00000080,0x00000100,0x00000200,0x00000400,
+				0x00000800,0x00001000,0x00002000,0x00004000};
+
+long val1p,val2p;
+long ec1,ec2,ec3,ec4;
+int i,k;long q;
+
+
+for(i=0;i<n;i++)
+	{
+	k=0;q=63;		/* 7 bit ->  127  ->   +-63	*/
+
+	ec1=point_in(i,pasin,0)-val1;
+	shif(ec1,k,q);
+	
+	
+	ec2=point_in(i,pasin,1)-val2;
+	shif(ec2,k,q);
+		
+	val1p =val1 + arrondi(ec1,k);
+
+	ec3=point_in(i,pasin,2)-val1p;
+	shif(ec3,k,q);
+
+	val2p=val2+ arrondi(ec2,k);
+
+	ec4=point_in(i,pasin,3)-val2p;
+	shif(ec4,k,q);
+	
+/*printf("i=%d  k=%d  ec= %d %d %d \n",i,k,ec1,ec2,ec3,out[(i+8)/7]);	*/
+
+	ec1 =  arrondi(ec1,k) >> k;
+	ec2 =  arrondi(ec2,k) >> k;
+	ec3 =  arrondi(ec3,k) >> k;
+	ec4 =  arrondi(ec4,k) >> k;
+
+	out[i]= ((ec1&emak_)<<25) | ((ec2&emak_)<<18) | ((ec3&emak_)<<11) | ((ec4&emak_)<<4) | k ;
+
+/*	if(i<5)  printf("i=%d  k=%d  ec= %x %x %x %x  out=%x \n",i,k,ec1,ec2,ec3,ec4,out[i]);*/	
+
+	val1+= ( (ec1 + ec3 ) << k );
+	val2+= ( (ec2 + ec4 ) << k );
+	}
+}
+
+
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/config_transputer.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/config_transputer.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/config_transputer.c	(revision 637)
@@ -0,0 +1,53 @@
+#include "diabolo.h"
+#include "config_transputer.h" 
+
+
+
+//--------------------  fonction  exec  de  la  fenetre : config_transputer  -------------------------------
+
+
+void exec_config_transputer(int fen,int item,double valeur,...) 
+{
+int i;
+if(item>1000) item-=1000;
+if( (item!=ouverture) && (item<0) )return;
+if(gg->flag_tc_reduite)
+//	for(i=0;i<nb_type_blocks;i++)
+	for(i=0;i<14;i++)
+		{
+		int a;
+		a=litD(fen,ct_cadence+i,0);
+		if((gg->reglage.vitesse[i]!=a)
+			ou (clavier(touche_alt) && (item==ct_cadence+i) ) )
+				emission_tc_reduite(tc2_horloge,tc3_vitesse+i,a);
+//	gg->reglage.vitesse[i]=a;
+		}
+
+else	{
+	char mot_tc[10];
+	if(item>0) 
+		{
+		mot_tc[0]=tc_cadence1;
+		for(i=0;i<7;i++)	mot_tc[i+1]=litD(fen,ct_cadence+i,0);		
+		emission_telecommande(tc_dir_transputer,mot_tc);
+		mot_tc[0]=tc_cadence2;
+		for(i=0;i<7;i++)	mot_tc[i+1]=litD(fen,ct_cadence+7+i,0);		
+		emission_telecommande(tc_dir_transputer,mot_tc);
+		mot_tc[0]=tc_cadence3;
+		for(i=0;i<2;i++)	mot_tc[i+1]=litD(fen,ct_cadence+14+i,0);		
+		emission_telecommande(tc_dir_transputer,mot_tc);
+	/*	
+		mot_tc[0]=tc_switch_dil;
+		for(i=0;i<7;i++)	mot_tc[i+1]=litD(fen,ct_dil+i,0);		
+		emission_telecommande(tc_dir_transputer,mot_tc);
+	*/
+		}
+	for(i=0;i<16;i++)
+		gg->reglage.vitesse[i]=litD(fen,ct_cadence+i,0);
+
+	}
+
+
+}
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/corel.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/corel.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/corel.c	(revision 637)
@@ -0,0 +1,101 @@
+#include "diabolo.h"
+#include "corel.h" 
+
+
+double coef_corel[nb_max_bolo][nb_max_bolo];
+int flag_corel[nb_max_bolo];
+
+
+
+
+
+
+void corel(void)
+{
+int j;
+//int k;
+def_gains;
+/*if(gg->flag_corel)
+	for(j=0;j<nb_max_bolo;j++)
+		{
+		gg->corel[j]=0;
+		if(flag_corel[j])
+			{
+			for(k=0;k<parametres.nb_bolo;k++)	gg->corel[j]+=xbolbrut(k)*coef_corel[j][k];
+			gg->nb_trace=j+1;
+			} 
+		}
+else
+*/
+	{
+	for(j=0;j<nb_max_bolo;j++)	gg->corel[j]=xbolbrut(j);
+	}
+	
+}					
+
+
+
+
+
+
+
+
+
+//--------------------  fonction  exec  de  la  fenetre : choix_corel  -------------------------------
+
+
+void exec_choix_corel(int fen,int item,double valeur,...) 
+{
+//int i,j;
+//char ss[250];
+
+if(item>1000) item-=1000;		// pour appeler le case pour tous les cara d'un edit texte
+
+
+switch(item)
+    {
+	case caseferme	:	cache(fen);stop_exec(fen);	break;
+    case ouverture               : cache(fen);
+    case chcr_choix_corel_1 :
+    case chcr_bouton_1 :
+    case chcr_choix_corel_13 :
+    case chcr_bouton_14 :
+    case chcr_choix_corel_15 :
+    case chcr_bouton_16 :
+    case chcr_choix_corel_17 :
+    case chcr_bouton_18 :
+    case chcr_choix_corel_19 :
+    case chcr_bouton_110 :
+    case chcr_choix_corel_111 :
+    case chcr_bouton_112 :
+    case chcr_choix_corel_113 :
+    case chcr_bouton_114 :
+    case chcr_choix_corel_115 :
+    case chcr_bouton_116 :
+    case chcr_choix_corel_117 :
+    case chcr_bouton_118 :
+/*    	for(i=0;i<nb_max_bolo;i++)
+    		if(litD(fen,chcr_bouton_1+2*i,0L))
+    			{
+    			flag_corel[i]=1;
+    			for(j=0;j<nb_max_bolo;j++)	coef_corel[i][j]=0;
+    			litD(fen,chcr_choix_corel_1+2*i,ss);
+    			valeurs(ss,coef_corel[i]);
+    			printf("canal%d :",i+1); 
+    			for(j=0;j<nb_max_bolo;j++)
+    				{
+    				if(coef_corel[i][j])
+    				printf("   b%d * %g  ,",j,coef_corel[i][j]);
+    				}
+    			printf("\n");
+    			}
+    		else 	flag_corel[i]=0;
+    	printf("\n");
+
+*/    
+    default 			 :   break;
+    }
+
+}
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/courbeVI.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/courbeVI.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/courbeVI.c	(revision 637)
@@ -0,0 +1,191 @@
+#include "diabolo.h"
+#include "bolo.h"
+#include "auto.h"
+#include "courbeVI.h"
+#include "fenetres_diabolo.h"
+
+int voie_bit;		// octet contenant dans chaque bit le flag qui dit si on equiloibre cette voie
+int bolo;
+int posi=0;		// valeur du courant (triangle )
+int act=0;
+int ref_nep=0;
+double Ip=0,Vp=0;
+//--------------------  fonction  exec  de  la  fenetre : courbeVI  -------------------------------
+
+void	equilibre_tout(void);
+
+void exec_courbeVI(int fen,int item,double valeur,...) 
+{
+int i,j;double I,V,A,nep;int c;double x[50];
+double y[nb_max_bolo+1];
+
+switch(item)
+	{
+	case ouverture	:	
+		graph->type_symbole=rondplein;efface(fen);
+    		break;
+
+	case cvi_bolo :
+		voie_bit=valeur;	posi=0;tachedefond(fen,-1);
+		break;
+			
+/*		bolo=litD(fen,cvi_bolo,0L);posi=0;tachedefond(fen,-1);	
+    		if(bolo) exec_bolo(bolo,b_tri,posi);
+    		if(bolo) exec_bolo(bolo,b_carre,0);
+     		break;
+*/
+/*	case cvi_tous :
+		bolo=0;posi=0;tachedefond(fen,-1);	
+    		for(j=0;j<nb_max_bolo;j++)
+    			{
+    			if(fenetre(j+1) &&(!litD(j+1,b_bloq,0L)) )
+    				{
+    				exec_bolo(j+1,b_tri,0);
+    				exec_bolo(j+1,b_carre,0);
+    				}
+    			}
+		break;
+*/	
+	
+	case cvi_calc_nep :
+    		ref_nep=ouvreD(0,0,"1e-16/Nep",0);
+    		graph->type_symbole=rondplein;efface(ref_nep);
+	
+		position(fen,0);Ip=0;Vp=0;
+   		while( (c=litvaleur(fen,x)) >=0)
+			{
+//  					printf(" c=%d \n",c);
+			if (c>1)
+				{
+				I=x[0];V=x[1];
+				ecritD(fen,cvi_valI,"I=%g",I);
+				ecritD(fen,cvi_valV,"V=%g",V);
+				if(Ip>0)
+					{
+					A=( (V-Vp)/(I-Ip)-(V+Vp)/(I+Ip) ) / (V+Vp);
+					nep= 30. * A / sqrt((V+Vp)/(I+Ip));
+					printf(" I=%g  V=%g  A=%g (10^9V/W^)  1/nep=%g (10^16)  \n",I,V,A,nep);
+					trace(ref_nep,I,nep);
+					}
+				Ip=I;Vp=V;
+				}
+			}
+		break;
+
+	
+	case tache_de_fond	:	
+		switch(act)
+			{
+			case 0: /*pas=4;
+				if(posi>=20) pas=10;
+				if(posi>=60) pas=20;
+				if(posi>=100) pas=50;
+				if(posi>=200) pas=100;
+				if(posi>=600) pas=200;
+				if(posi>=1000) pas=500;
+				if(litD(fen,cvi_precis,0L)) pas=pas/2;
+				posi+=pas;
+				if(posi>4000) {posi=0;tachedefond(fen,-1);} 						 
+				if(litD(fen,cvi_tous,0L))	
+					for(j=0;j<nb_max_bolo;j++)	
+						{
+						if(fenetre(j+1) &&(!litD(j+1,b_bloq,0L)) )
+						exec_bolo(j+1,b_tri,posi);
+						}
+				else	 		exec_bolo(bolo,b_tri,posi);
+				*/
+				
+				if(litD(fen,cvi_precis,0L)) posi++;	else posi+=2;
+				if(!fenetre(fenetre_automatismes)) 
+					ouvreD(fenetre_automatismes,automatismes_id,"automatismes",exec_automatismes);
+				for(i=0;i<6;i++)	if((voie_bit>>i)&1)  
+					{
+					long ll;
+					ll=(long)(&(gg->reglage.autom[i].courant))-(long)(&(gg->reglage.autom[0]));
+					ecritD(fenetre_automatismes,atm_courant+i,posi+1);
+    					emission_tc_reduite(tc2_auto_bolo,ll,posi);
+    					}
+				act++;
+				break;
+
+			case 1: /*
+				if(litD(fen,cvi_tous,0L))	equilibre_tout();
+				else				auto_control(bolo,auto_carre);
+				*/
+				act++;	break;
+
+			case 2: /*
+				if(litD(fen,cvi_tous,0L))	equilibre_tout();
+				else				auto_control(bolo,auto_carre);
+				*/
+				act++;	break;
+
+			case 3:	
+				j=bolo_rouge();
+				I=calcI(j)*1e3;ecritD(fen,cvi_valI,"I=%g",I);	//  nA
+				for(j=0;j<nb_max_bolo;j++)	
+					{
+					y[j]=calcV(j+1)*1e-3;	//  mV
+					}
+				montracen(fen,nb_max_bolo,I,y);
+				act=0;
+				break;
+			
+			
+				
+				/*
+				if(litD(fen,cvi_tous,0L))
+					{
+					equilibre_tout();									
+					for(j=nb_max_bolo-1;j>=0;j--)	
+						if(!litD(j+1,b_bloq,0L) )
+							{y[j]=calcV(j+1)*1e-3;	I=calcI(j+1)*1e3;}
+						else	y[j]=0;
+							ecritD(fen,cvi_valI,"I=%g",I);
+							montracen(fen,nb_max_bolo,I,y);
+					}
+				else	{
+					auto_control(bolo,auto_carre);	
+					I=calcI(bolo)*1e3;		// en nA
+					V=calcV(bolo)*1e-3;		// en mV						
+					ecritD(fen,cvi_valI,"I=%g",I);
+					ecritD(fen,cvi_valV,"V=%g",V);
+					trace(fen,I,V);
+					}							
+				act=0;						
+				break;
+				*/
+			
+			default	: act=0;
+			}
+		break;
+
+	case cvi_mesure :
+		
+		if(!posi) style(fen);
+  		tachedefond(fen,litD(fen,cvi_vitesse,0L)*60);act=0;
+		break;
+
+	case cvi_stop :
+		posi=0;act=0;
+    		tachedefond(fen,-1);	break;
+		
+	default  :
+		break;
+	}
+}
+
+
+void	equilibre_tout(void)	// fait la correction sans passer par auto_control
+{
+int j;
+double coef[nb_max_bolo];
+def_gains;
+for(j=0;j<nb_max_bolo;j++)
+    {
+	coef[j]= pt_micV(j+1) * xbolbrut(j) * litD(fenetre_auto,auto_correct,0L);	// correction augmentée artificiellement
+	coef[j]=(double)dac_V(gg->reglage.bolo[j])-coef[j];
+	}
+
+for(j=0;j<nb_max_bolo;j++)	if( (parametr.bolo[j].bolo_code_util) && !litD(j+1,b_bloq,0L) )   exec_bolo(j+1,b_carre,coef[j]);
+}
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/decompress.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/decompress.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/decompress.c	(revision 637)
@@ -0,0 +1,300 @@
+#include <manip.h>
+#include "compress.h"
+
+
+//*******************************************************************************************
+//****************   			 											*****************
+//****************   			 		decompress_3							*****************
+//****************   			 											*****************
+//*******************************************************************************************
+
+void  decom_3(long val,long* in,long*out,int n);
+
+#define kmax_	15		/*  valeur maximum de l'exposant	*/
+#define	kmak_	0xf		/*	masque pour l'exposant		*/
+#define	emak_	0x7		/*	masque pour l'ecart		*/		
+#define	sgbi_	0x4		/*	bit de signe de l'ecart		*/
+#define	sign_	0xfffffff8	/*	masque de signe de l'ecart	*/
+
+//  compress un tableau in de n*9 points disposé avec un pas pasin
+//  les data compressées sont ecrites dans le tableau out de n points
+//  la valeur val est la valeur de reference du point origine
+
+/*  comprime	9*n points  : 1er point dans 1er mot, tous les ecarts dans les n mots suivants		*/ 
+/*	9*n	==>	n+1	    pour  72 points :   9 mots			*/
+
+
+void decompress_3_1(long* in,long*out,int n)
+{
+long val;
+val=	*in;
+decom_3(val,in+1,out,n/9);
+}
+
+
+
+void  decom_3(long val,long* in,long*out,int n)
+{
+register long R;
+long ec1,ec2,ec3,ec4,ec5,ec6,ec7,ec8,ec9;
+int i,k;
+
+for(i=0;i<n;i++)
+	{
+	R=in[i];
+	k=R&kmak_;
+	recup(ec1,29,k); 
+	recup(ec2,26,k); 
+	recup(ec3,23,k); 
+	recup(ec4,20,k); 
+	recup(ec5,17,k); 
+	recup(ec6,14,k); 
+	recup(ec7,11,k);
+	recup(ec8,8,k);
+	recup(ec9,5,k);
+	
+	val+=ec1; 	out[i*9]=val;	 
+	val+=ec2;	out[i*9+1]=val;	 
+	val+=ec3;	out[i*9+2]=val;	 
+	val+=ec4;	out[i*9+3]=val;	 
+	val+=ec5;	out[i*9+4]=val;	 
+	val+=ec6;	out[i*9+5]=val;	 
+	val+=ec7;	out[i*9+6]=val;	 
+	val+=ec8;	out[i*9+7]=val;	 
+	val+=ec9;	out[i*9+8]=val;	 
+	}
+}
+
+
+
+//*******************************************************************************************
+//****************   			 											*****************
+//****************   			 		decompress_4							*****************
+//****************   			 											*****************
+//*******************************************************************************************
+
+void  decom_4(long val,long* in,long*out,int n);
+void  decom_4_paire(long val1,long val2,long* in,long*out,int n);
+
+#undef kmax_
+#undef	kmak_
+#undef	emak_		
+#undef	sgbi_
+#undef	sign_
+
+
+
+#define kmax_	15		/*  valeur maximum de l'exposant	*/
+#define	kmak_	0xf		/*	masque pour l'exposant		*/
+#define	emak_	0xf		/*	masque pour l'ecart		*/		
+#define	sgbi_	0x8		/*	bit de signe de l'ecart		*/
+#define	sign_	0xfffffff0	/*	masque de signe de l'ecart	*/
+
+
+/*  comprime	7*n + 2  points  (de 16 bit chacun)  				*/
+/*	1er et 2 eme point dans 1er mot, les ecarts dans les n mots suivants	*/ 
+/*	7*n + 2	==>	n+1	     ==>   pour  72 points :   11 mots  	*/
+
+
+void decompress_4_1(long* in,long*out,int n)
+{
+long val1,val2;
+val1=	( (*in & 0xffff0000)>>16 ) & 0x0000ffff;
+val2=	( (*in & 0x0000ffff)     )  & 0x0000ffff;
+out[0]=val1;
+out[1]=val2;
+decom_4(val2,in+1,out+2,n/7);
+}
+
+
+
+void  decom_4(long val,long* in,long*out,int n)
+{
+register long R;
+long ec1,ec2,ec3,ec4,ec5,ec6,ec7;
+int i,k;
+
+for(i=0;i<n;i++)
+	{
+	R=in[i];
+	k=R&kmak_;
+	recup(ec1,28,k); 
+	recup(ec2,24,k); 
+	recup(ec3,20,k); 
+	recup(ec4,16,k); 
+	recup(ec5,12,k); 
+	recup(ec6,8,k); 
+	recup(ec7,4,k);
+	
+	val+=ec1; 	out[7*i]=val;	 
+	val+=ec2;	out[7*i+1]=val;	 
+	val+=ec3;	out[7*i+2]=val;	 
+	val+=ec4;	out[7*i+3]=val;	 
+	val+=ec5;	out[7*i+4]=val;	 
+	val+=ec6;	out[7*i+5]=val;	 
+	val+=ec7;	out[7*i+6]=val;	 
+	}
+}
+
+/********************************************************************************************/
+
+/*  compresse en 4 bit mais par paire (pour data provenant de la detection synchrone)		*/
+
+/*     21 bit maleur maximum									*/
+/*  comprime	7*n+2 points  : 1er et 2eme point dans 1er et 2eme mot, suite dans n mots	*/
+/*		différences entre valeures paires  et entre valeures impaires uniquement	*/ 
+/*	7*n+2	==>	n+2		==>  pour 72 points :	12 mots				*/
+
+
+void decompress_4_2(long* in,long*out,int n)
+{
+long val1,val2;
+val1=in[0];		val2=in[1];
+out[0]=val1;	out[1]=val2;
+decom_4_paire(val1,val2,in+2,out+2,n/7);
+}
+
+
+void  decom_4_paire(long val1,long val2,long* in,long*out,int n)
+{
+register long R;
+long ec1,ec2,ec3,ec4,ec5,ec6,ec7;
+int i,k;
+
+for(i=0;i<n;i++)
+	{
+	R=in[i];
+	k=R&kmak_;
+	recup(ec1,28,k); 
+	recup(ec2,24,k); 
+	recup(ec3,20,k); 
+	recup(ec4,16,k); 
+	recup(ec5,12,k); 
+	recup(ec6,8,k); 
+	recup(ec7,4,k);
+	
+//	printf("i=%d  k=%d  ec= %d %d %d    \n",i,k,ec1,ec2,ec3);
+
+
+	val1+=ec1; 	out[7*i]=val1;	 
+	val2+=ec2;	out[7*i+1]=val2;	 
+	val1+=ec3;	out[7*i+2]=val1;	 
+	val2+=ec4;	out[7*i+3]=val2;	 
+	val1+=ec5;	out[7*i+4]=val1;	 
+	val2+=ec6;	out[7*i+5]=val2;	 
+	val1+=ec7;	out[7*i+6]=val1;
+	R=val1;val1=val2;val2=R;	 
+	}
+}
+
+
+//*******************************************************************************************
+//****************   			 											*****************
+//****************   			 		compress_7							*****************
+//****************   			 											*****************
+//*******************************************************************************************
+
+
+#undef kmax_
+#undef	kmak_
+#undef	emak_		
+#undef	sgbi_
+#undef	sign_
+
+
+
+#define kmax_	15		/*  valeur maximum de l'exposant	*/
+#define	kmak_	0xf		/*	masque pour l'exposant		*/
+#define	emak_	0x7f		/*	masque pour l'ecart		*/		
+#define	sgbi_	0x40		/*	bit de signe de l'ecart		*/
+#define	sign_	0xffffff80	/*	masque de signe de l'ecart	*/
+
+
+/*  comprime	4*n points  : 1er point dans 1er mot, tous les ecarts dans les n mots suivants		*/ 
+/*	4*n	==>	n+1	*/
+
+void  decom_7(long val,long* in,long*out,int n);
+
+void decompress_7_1(long* in,long*out,int n)
+{
+long val;
+val=*in;
+*out=val;
+decom_7(val,in+1,out,n/4);
+}
+
+
+
+/*  compress un tableau in de n*4 points disposé avec un pas pasin	*/
+/*  les data compressées sont ecrites dans le tableau out de n points	*/
+/*  la valeur val est la valeur de reference du point origine	*/
+
+void  decom_7(long val,long* in,long*out,int n)
+{
+register long R;
+long ec1,ec2,ec3,ec4;
+int i,k;
+
+for(i=0;i<n;i++)
+	{
+	R=in[i];
+	k=R&kmak_;
+	recup(ec1,25,k); 
+	recup(ec2,18,k); 
+	recup(ec3,11,k); 
+	recup(ec4,4,k); 
+	
+	val+=ec1; 	out[4*i]=val;	 
+	val+=ec2;	out[4*i+1]=val;	 
+	val+=ec3;	out[4*i+2]=val;	 
+	val+=ec4;	out[4*i+3]=val;	 
+	}
+}
+
+/********************************************************************************/
+/*  compresse en 7 bit mais par paire (pour data de la detection synchrone	*/
+/* 21 bit maleur maximum							*/
+/*  comprime	4*n points  : 1er et 2eme point dans 1er mot (16 bit chacun),	*/
+/*				 suite dans n mots				*/
+/*	différences entre valeures paires  et entre valeures impaires uniquement*/ 
+/*			4*n	==>	n+1					*/
+/********************************************************************************/
+
+void  decom_7_paire(long val1,long val2,long* in,long*out,int n);
+
+void decompress_7_2(long* in,long*out,int n)
+{
+long val1,val2;
+val1=	( (*in & 0xffff0000)>>11 ) & 0x001fffe0;
+val2=	( (*in & 0x0000ffff)<<5 )  & 0x001fffe0;
+/*printf("val1=%x  val2=%x  \n",val1,val2);*/
+decom_7_paire(val1,val2,in+1,out,n/4);
+}
+
+
+void  decom_7_paire(long val1,long val2,long* in,long*out,int n)
+{
+register long R;
+long ec1,ec2,ec3,ec4;
+int i,k;
+
+for(i=0;i<n;i++)
+	{
+	R=in[i];
+	k=R&kmak_;
+	recup(ec1,25,k); 
+	recup(ec2,18,k); 
+	recup(ec3,11,k); 
+	recup(ec4,4,k); 
+	
+	val1+=ec1; 	out[4*i]=val1;	 
+	val2+=ec2;	out[4*i+1]=val2;	 
+	val1+=ec3;	out[4*i+2]=val1;	 
+	val2+=ec4;	out[4*i+3]=val2;	 
+
+/*if(i<5)  printf("in=%x  i=%d  k=%d  ec= %x %x %x %x  \n",R,i,k,ec1,ec2,ec3,ec4);	*/
+
+	}
+}
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/diabolo.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/diabolo.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/diabolo.c	(revision 637)
@@ -0,0 +1,167 @@
+#include "diabolo.h"
+#include "bolo.h"
+#include "acqui.h"
+#define	main_nubus
+#include "carte_acqui.h"
+#include "trace.h"
+#include "synchro.h"
+#include "fichier.h"
+#include "Serial.h"
+#include "auto.h" 
+#include "menu.h" 
+#include "regul.h" 
+#include "alarme.h" 
+#include "controle.h" 
+
+#include "comment.h" 
+#include "corel.h" 
+#include "version.h" 
+#include "config_transputer.h" 
+#include "dilution.h" 
+
+
+stglob* gg;			// pointeur global  sur la structure 
+
+
+
+
+main()
+{
+int j,flag;
+char ss[255];
+
+sprintf(ss,"%s:archediab_%d.rsrc",chemin_ressource,version_num);
+if(!ouvrirR(ss)) 	
+	{
+	if(alerte(2,"ne trouve pas le fichier ressource  Diabolo    voulez vous en ouvrir un autre ?")==1)
+			ouvrirR("");
+	else	return(option_quit);
+	}
+#ifdef _diabolo
+flag=alerte(3,"        DIABOLO    \r\r acquisition avec carte PCI ??"); // vaut 1 pour acquisition PCI
+#else
+//flag=alerte(3,"   Archeops ou Planck  \r\r acquisition avec carte PCI ??"); // vaut 1 pour acquisition PCI
+//flag=2;	// en mode simulation
+if(!clavier(touche_alt) ) flag=2; else flag=1;		// en mode acquisition
+#endif
+
+//return(1);
+
+init_struct(flag);
+
+//printf(" long_entete 	  	= %ld \n",	sizeof(F_entete));
+//printf(" long_entete_part 	= %ld \n",	sizeof(F_entete_part));
+//printf(" long_donne 	  	= %ld \n\n",	sizeof(F_donne));
+//return(0);
+
+
+nouveauD(fenetre_alarme,alarme_id,"alarme",exec_alarme);
+nouveauD(fenetre_controle,controle_id,"controle",exec_controle);
+
+nouveautypefichier('DIA2',exec_DIA2);
+nouveautypefichier('ARCH',exec_ARCH);
+
+//nouveautypefichier('TEXT',exec_DIA2);
+
+nouveauM(0,diabolo_id,exec_menu_diabolo);
+
+ouvreD(fenetre_acquisition,acquisition_id,"acquisition",exec_acquisition);
+
+ouvreD(fenetre_synchro,synchro_id,"synchro",exec_synchro);
+ouvreD(fenetre_fichier,fichier_id,"fichier",exec_fichier);
+//ouvreD(fenetre_auto,auto_id,"auto",exec_auto);
+
+
+ouvre('WIND',fenetre_liste_bolos,liste_bolos_id,"liste_des_bolos",exec_cache,0L);
+#ifndef _archeops
+ouvreD(fenetre_choix_corel,choix_corel_id,"choix_corel",exec_choix_corel);
+ouvreD(fenetre_regul,regul_id,"regul",exec_regul);
+#endif
+
+#ifdef _archeops
+nouveauD(fenetre_vitesse_block,config_transputer_id,"config_transputer",exec_config_transputer);
+
+printf(" acquisition  Archeops  \n\n");
+#endif
+
+
+#ifdef lire_les_donnees_POM2
+initRS(port_A,baud19200+data8+stop20+noParity,Xon_Xoff);
+printf(" avec lecture des données POM2 sur la RS232  \n");
+#endif 
+
+#ifdef  lire_les_noms_sources_IRAM
+printf(" avec recherche lecture des noms de source IRAM \n");
+#ifdef  lire_les_data_telescope_IRAM
+printf("et lecture de tous les fichiers th tp de l'IRAM  \n");
+#endif			
+#endif			
+
+for(j=0;j<nb_max_bolo;j++)	 
+			{
+			printf(" cherche a ouvrir bolo %d ",j+1);
+			printf(" capa=%g ",capa(j+1));
+			printf(" boloutil = %d  bolonom = %s  \n",parametr.bolo[j].bolo_code_util,parametr.bolo[j].bolo_nom);
+			if(parametr.bolo[j].bolo_code_util)
+				{
+				sprintf(ss,"%d: %s",j+1,parametr.bolo[j].bolo_nom);
+				ouvreD(j+1,bolo_id,ss,exec_bolo);
+				}
+			}
+ouvreA(tache_acqui,10,"acquisition",acqui);	// ouvre la tache de fond				   
+
+/*
+ouvreA(tache_acqui,-1,"acquisition",acqui);	// ouvre la tache de fond sans la mettre en marche				   
+relit_liste();					// c'est relit_liste qui demarre la tache de fond d'acquisition
+*/
+
+if(flag==1)					//  mets en route les interruptions
+	{
+	ecritD(fenetre_acquisition,e_tache_inter,1);
+	exec_acquisition(fenetre_acquisition,e_tache_inter,1);
+	}	
+
+select(fenetre_controle);
+select(fenetre_acquisition);
+
+return(option_texte+option_unclick);
+}
+
+
+
+
+
+
+//------  fonction  exec  de traitement des alarmes  ------------
+
+
+void exec_alarme(int fen,int item,double valeur,...) 
+{
+if(item==caseferme)  {cache(fen);stop_exec(fen);}
+if(item==ouverture)  {tachedefond(fen,1800);cache(fen);}	//  30 sec
+if(item==tache_de_fond)	
+	{
+	if( (litD(fenetre_alarme,a_fin_scan,0) ) && (!gg->scan_en_cours) )
+  		{son(5);son(6);son(7);son(8);son(133);son(135);son(133);}
+  	}
+					
+}
+
+//------  fonction  exec  qui interdit la fermeture de la fenetre  ------------
+
+
+void exec_controle(int fen,int item,double valeur,...) 
+{
+if(item==caseferme)  {stop_exec(fen);}
+}
+
+
+//------  fonction  exec  qui cache la fenetre quand on la ferme  ------------
+
+void exec_cache(int fen,int item,double valeur,...) 
+{
+if(item==ouverture)  cache(fen);
+if(item==caseferme)  {cache(fen);stop_exec(fen);}
+}
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/dilution.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/dilution.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/dilution.c	(revision 637)
@@ -0,0 +1,280 @@
+#include "diabolo.h"
+#include "dilution.h" 
+#include "controle.h" 
+
+
+//--------------------  fonction  exec  de  la  fenetre : dilution  -------------------------------
+
+#define	bit0	0x01
+#define	bit1	0x02
+#define	bit2	0x04
+#define	bit3	0x08
+#define	bit4	0x10
+#define	bit5	0x20
+#define	bit6	0x40
+#define	bit7	0x80
+
+
+#define  val_multiplex(i)	(0.0003052*(double)(blk->ADC_dil[i]-0x8000))	
+//#define  val_temperature(i)	(34.+ (300./4.4)*(4.4-val_multiplex(i))	)
+//#define  val_temperature(i)	((1146.3/(val_multiplex(i)-0.1)) - 245.13)
+#define  val_temperature(i)	((val_multiplex(i)<0.2)?-99:((1146.3/(val_multiplex(i)-0.1)) - 245.13))
+#define  cnt_temperature(i)	(20+(int)val_temperature(i))
+
+#define  ecrit_switch(val,ii,bit) {if(val) ii=ii | bit ;else ii=ii& (0xffffffff^bit) ;}
+#define  calib(j)		litD(fenetre_dilution_calibration,j,0L)
+void  ecrit_bit_dilution(int valeur,int bit);
+
+void  ecrit_bit_dilution(int valeur,int bit)
+{
+int i;
+char mot_tc[10];
+
+		i=litD(fenetre_dilution,dil_switch_1,0);
+i=i<<8; 	i+=litD(fenetre_dilution,dil_switch_2,0);
+i=i<<8;		i+=litD(fenetre_dilution,dil_switch_3,0);
+i=i<<8;		// les 3 octets en poid fort, rien dans le dernier octet
+ecrit_switch(valeur,i,bit);
+ecritD(fenetre_dilution,dil_switch_1,(i>>24)&0xff);
+ecritD(fenetre_dilution,dil_switch_2,(i>>16)&0xff);
+ecritD(fenetre_dilution,dil_switch_3,(i>>8 )&0xff);
+
+mot_tc[0]=tc_switch_dil;
+mot_tc[1]=0;
+mot_tc[2]=0;
+mot_tc[3]=0;
+mot_tc[4]=(i>>8 )&0xff;
+mot_tc[5]=(i>>16)&0xff;
+mot_tc[6]=(i>>24)&0xff;
+mot_tc[7]=0;	
+emission_telecommande(tc_dir_transputer,mot_tc);
+}
+
+
+
+
+void exec_dilution(int fen,int item,double valeur,...) 
+{
+int i;
+
+if(item>1000) item-=1000;		// pour appeler le case pour tous les cara d'un edit texte
+
+switch(item)
+    {
+    case dil_switch_helium :	ecrit_bit_dilution((int)valeur,switch_helium);	break;
+    case dil_EVB :		ecrit_bit_dilution((int)valeur,vanne_EVB);	break;
+    case dil_EVO :		ecrit_bit_dilution((int)valeur,vanne_EVO);	break;
+    case dil_EVF :		ecrit_bit_dilution((int)valeur,vanne_EVF);	break;
+    case dil_EVV :		ecrit_bit_dilution((int)valeur,vanne_EVV);	break;
+    case dil_sw_pp5 :		ecrit_bit_dilution((int)valeur,switch_pile_par_5);	break;
+    case dil_sw_pp15 :		ecrit_bit_dilution((int)valeur,switch_pile_par_15);	break;
+
+//  ----   commande directe d'un mot avec les 3 case de codage hexadecimales
+
+  //  case dil_switch_1 :
+ //   case dil_switch_2 :
+  //  case dil_switch_3 :		ecrit_bit_dilution(0,0);	break;
+
+//  ----   telecommande du raz periodique des fets 
+    case dil_raz_modul :
+    case dil_fet_raz :
+    		{
+    		char mot_tc[10];
+		mot_tc[0]=7;		//  commande la premiere bebo directe -> il faut ecrire tc reduite
+		i=litD(fen,dil_raz_modul,0);
+		i=i<<3;
+		if(litD(fen,dil_fet_raz,0)==2)	i+=1;
+		if(litD(fen,dil_fet_raz,0)==3)	i+=7;
+		i=i<<4;
+		mot_tc[1]=i;
+		for(i=2;i<8;i++)	mot_tc[i]=0;
+		emission_telecommande(tc_dir_transputer,mot_tc);
+		}
+
+                 break;
+                 
+    case dil_ch1 :		ecrit_bit_dilution((int)valeur,chauffage1);	break;
+    case dil_ch2 :		ecrit_bit_dilution((int)valeur,chauffage2);	break;
+    case dil_ch3 :		ecrit_bit_dilution((int)valeur,chauffage3);	break;
+    case dil_ch4 :		ecrit_bit_dilution((int)valeur,chauffage4);	break;
+    case dil_ch5 :		ecrit_bit_dilution((int)valeur,chauffage5);	break;
+    case dil_ch6 :		ecrit_bit_dilution((int)valeur,chauffage6);	break;
+    case dil_ch7 :		ecrit_bit_dilution((int)valeur,chauffage7);	break;
+
+    default  :   break;
+    }
+}
+
+
+
+
+void	traite_block_dilution(block_type_dilution*	blk)
+{
+int i;
+
+//  ouvre la fenetre de calibration
+if(!fenetre(fenetre_dilution_calibration)) 
+	nouveauD(fenetre_dilution_calibration,dilution_calibrations_id,"dilution_calibration",exec_cache);
+
+if( (blk->switch_dil&0x3f ) != 6 )	{
+//					printf("****************   affiche erreur \n");
+					changecontrole(fenetre_dilution,dil_erreur,idem,idem,idem,idem,idem,"erreur");
+					}
+else					{
+					static int q;
+					char ss[10]="____";
+					q=(q+1)&3;
+					ss[q]='/'; 
+					changecontrole(fenetre_dilution,dil_erreur,idem,idem,idem,idem,idem,ss);
+//					printf("****************   pas d' erreur \n");
+					}
+
+
+// lit les switchs
+//  --  les voyants de fin de course vanne principale  (logique negative)
+ecritD(fenetre_dilution,dil_voyant_EVO,((blk->switch_dil&switch_EVO)?0:1));
+ecritD(fenetre_dilution,dil_voyant_EVF,((blk->switch_dil&switch_EVF)?0:1));
+
+// les retour de commande des electrovannes
+ecritD(fenetre_dilution,dil_EVB_retour,((blk->switch_dil&vanne_EVB)?1:0));
+ecritD(fenetre_dilution,dil_EVO_retour,((blk->switch_dil&vanne_EVO)?1:0));
+ecritD(fenetre_dilution,dil_EVF_retour,((blk->switch_dil&vanne_EVF)?1:0));
+ecritD(fenetre_dilution,dil_EVV_retour,((blk->switch_dil&vanne_EVV)?1:0));
+
+// les pressions et debits metres des injections de la dilution
+ecritD(fenetre_dilution,dil_p_d_3He,"3He: %4.1fb -> %5.2fµm/s -> %4.1fb"
+	,40. 	*	val_multiplex(p_R3)		//	200 bars pour 5V
+	,2. 	* 	val_multiplex(d_3He)		//  10 MICRO MOLES  pour  5V
+	,20. 	*	val_multiplex(p_C3)		//	100 bars pour 5V
+	);
+ecritD(fenetre_dilution,dil_p_d_4He,"4He: %4.1fb -> %5.2fµm/s -> %4.1fb"
+	,40. 	*	val_multiplex(p_R4)		//	200 bars pour 5V
+	,8. 	* 	val_multiplex(d_4He)		//  40 MICRO MOLES  pour  5V
+	,20. 	*	val_multiplex(p_C4)		//	100 bars pour 5V
+	);
+
+ecritD(fenetre_dilution,dil_p_air,"Van=%4.1fb  charb=%4.1fb  mmb=%4.3fb  haut=%4.3fb"
+	,20.*val_multiplex(p_air),20.*val_multiplex(p_charb)
+	,0.2*val_multiplex(p_memb),0.2*val_multiplex(p_haut)	);
+			
+ecritD(fenetre_dilution,dil_piles," Trp=%4.1fV   Dil=%4.1fV / %4.1fV  \rBebo=%4.1fV   /   %4.1fV / %4.1fV  Ch=%4.1fV"
+	,2.03*val_multiplex(p_10T),3.90*val_multiplex(p_p18D),3.90*val_multiplex(p_m18D)
+	,2.03*val_multiplex(p_10B),3.90*val_multiplex(p_p18B),3.90*val_multiplex(p_m18B)
+	,3.8*val_multiplex(p_Ch));
+
+/* valeur seuil au mini (5.3 ou 15.3V) , *17 =  +5.9 V au maxi	*/
+
+
+ecritD(fenetre_dilution,dil_p_10T,(int)(17*(2.03*val_multiplex(p_10T)-5.3)));
+ecritD(fenetre_dilution,dil_p_p18D,(int)(17*(3.90*val_multiplex(p_p18D)-15.3)));
+ecritD(fenetre_dilution,dil_p_m18D,(int)(17*(-3.90*val_multiplex(p_m18D)-15.3)));
+ecritD(fenetre_dilution,dil_p_10B,(int)(17*(2.03*val_multiplex(p_10B)-5.3)));
+ecritD(fenetre_dilution,dil_p_p18B,(int)(17*(3.93*val_multiplex(p_p18B)-15.3)));
+ecritD(fenetre_dilution,dil_p_m18B,(int)(17*(-3.93*val_multiplex(p_m18B)-15.3)));
+ecritD(fenetre_dilution,dil_p_Ch,(int)(10*(3.8*val_multiplex(p_Ch)-25)));	/* 25 a 35 V  */
+
+//  --  les voyants de switch de piles
+ecritD(fenetre_dilution,dil_voyant_pp5,((blk->switch_dil&switch_pile_par_5)?1:0));
+ecritD(fenetre_dilution,dil_voyant_pp15,((blk->switch_dil&switch_pile_par_15)?1:0));
+
+
+ecritD(fenetre_dilution,dil_temperatures,"temp-Haut =   %4.1f°   %4.1f°   %4.1f°   %4.1f° \rtemp-Bas  =   %4.1f°   %4.1f°   %4.1f°   %4.1f°  "
+	,val_temperature(t_h1),val_temperature(t_h2),val_temperature(t_h3),val_temperature(t_h4)
+	,val_temperature(t_b1),val_temperature(t_b2),val_temperature(t_b3),val_temperature(t_b4)	
+	);
+
+ecritD(fenetre_dilution,dil_t_h1,cnt_temperature(t_h1));
+ecritD(fenetre_dilution,dil_t_h2,cnt_temperature(t_h2));
+ecritD(fenetre_dilution,dil_t_h3,cnt_temperature(t_h3));
+ecritD(fenetre_dilution,dil_t_h4,cnt_temperature(t_h4));
+ecritD(fenetre_dilution,dil_t_a1,cnt_temperature(t_a1));
+ecritD(fenetre_dilution,dil_t_a2,cnt_temperature(t_a2));
+ecritD(fenetre_dilution,dil_t_a3,cnt_temperature(t_a3));
+ecritD(fenetre_dilution,dil_t_a4,cnt_temperature(t_a4));
+ecritD(fenetre_dilution,dil_t_b1,cnt_temperature(t_b1));
+ecritD(fenetre_dilution,dil_t_b2,cnt_temperature(t_b2));
+ecritD(fenetre_dilution,dil_t_b3,cnt_temperature(t_b3));
+ecritD(fenetre_dilution,dil_t_b4,cnt_temperature(t_b4));
+
+
+//  les afficheurs analogiques de pression helium et pirani  
+
+ecritD(fenetre_dilution,dil_RP_He,(int)(2500*val_multiplex(RP_He)-7500));
+//  je veux 10000 pour 0.8 bars  soit    alors que l'on a 5V pour 1 bar ou 1V = 0.2 bar
+//  soit multiplier par 2500
+// puis j'enleve 0.6 bars soit 7500 
+ecritD(fenetre_dilution,dil_pirani,(int)(1000*val_multiplex(pirani)));
+
+
+
+
+
+
+//  ecriture des valeurs brutes de la dilution
+if(litD(fenetre_dilution,dil_sortie_brute,0))
+	{
+	if(!fenetre(fenetre_dilution_lecture_brute)) nouveauT(fenetre_dilution_lecture_brute,0,"lecture dilution");
+
+	ecritT(fenetre_dilution_lecture_brute,fin_f,"dil_switch= %x  \n",blk->switch_dil);
+
+	for(i=0;i<16;i++)	ecritT(fenetre_dilution_lecture_brute,fin_f,"%2d=%6.3f ",i<8?i+11:i+13,val_multiplex(i));
+	ecritT(fenetre_dilution_lecture_brute,fin_f,"\n");
+	for(i=16;i<32;i++)	ecritT(fenetre_dilution_lecture_brute,fin_f,"%2d=%6.3f ",i<24?i+15:i+17,val_multiplex(i));
+	ecritT(fenetre_dilution_lecture_brute,fin_f,"\n");
+	for(i=32;i<48;i++)	ecritT(fenetre_dilution_lecture_brute,fin_f,"%2d=%6.3f ",i<40?i+19:i+21,val_multiplex(i));
+	ecritT(fenetre_dilution_lecture_brute,fin_f,"\n");
+	}
+// lecture des sondes de niveau helium
+
+//if(blk->switch_dil & switch_helium )
+if(1)
+	{
+	double y[8];
+	int niveau,fin;
+	changecontrole(fenetre_dilution,dil_niveau_helium,idem,idem,idem,idem,calrefcon(0,0,rouge,blanc,blanc),"");
+	y[0]=val_multiplex(j_he1)-calib(dil_j_he1);
+	y[1]=val_multiplex(j_he2)-calib(dil_j_he2);
+	y[2]=val_multiplex(j_he3)-calib(dil_j_he3);
+	y[3]=val_multiplex(j_he4)-calib(dil_j_he4);
+	y[4]=val_multiplex(j_he5)-calib(dil_j_he5);
+	y[5]=val_multiplex(j_he6)-calib(dil_j_he6);
+	y[6]=val_multiplex(j_he7)-calib(dil_j_he7);
+	y[7]=val_multiplex(j_he8)-calib(dil_j_he8);
+	niveau=0;fin=0;
+	for(i=0;i<8;i++)
+		{
+		if(y[i]>0.1) 	{
+				niveau++;
+				if(fin) 	niveau=9;
+				}
+		else		fin=1;
+		}
+	if(niveau==9)	changecontrole(fenetre_dilution,dil_niveau_helium,idem,idem,idem,idem
+				,calrefcon(0,0,jaune,blanc,blanc),"");
+	ecritD(fenetre_dilution,dil_niveau_helium,niveau);
+//	printf("niveau=%d \n",niveau);
+
+	if(litD(fenetre_dilution,dil_trace_helium,0))// trace les sondes de niveau helium
+		{
+		int temps_cntl=numero_block(blk)*nb_per_block*2;
+		double secondes,minutes;
+		secondes=gg->periode_echantillonage*(double)temps_cntl;
+		minutes=secondes/60.;
+		if(!fenetre(fenetre_niveau_helium)) 
+			{
+			nouveauD(fenetre_niveau_helium,0,"niveau_helium",0);
+			selectgra(fenetre_niveau_helium);
+			strcpy(graph->xtitre,"minutes");
+			}
+		tracen(fenetre_niveau_helium,8,minutes,y);
+		}
+	}
+else	
+	{
+	changecontrole(fenetre_dilution,dil_niveau_helium,idem,idem,idem,idem,calrefcon(0,0,vert,blanc,blanc),"");
+	}
+
+
+}
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/fichier.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/fichier.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/fichier.c	(revision 637)
@@ -0,0 +1,357 @@
+#include "diabolo.h"
+#include "fichier.h"
+#include "acqui.h"
+#include <time.h>
+#include "alarme.h"
+#include "controle.h"
+
+
+char dossier_dia2_1[256],dossier_dia2_2[256];
+char dossier_arch_1[256],dossier_arch_2[256];
+
+char dossier_datex[256];
+char nom_du_fichierx[256];
+
+char message_sommairex[512];
+char fichiers_perdusx[512];
+
+char *dossier_date;
+char *nom_du_fichier;
+char *message_sommaire;
+char *fichiers_perdus;
+
+extern unsigned long 	temps_debut_arch;	
+
+
+F_entete		* E;
+F_block_desc		* BD;
+F_block_param		* BP;
+F_donne			* T;		// tableau courant de donnee
+
+
+//---------------------------------------------------------------------------------------
+//---------------    fonctions pour  DIA2  et  pour  ARCH	-------------------------
+//---------------------------------------------------------------------------------------
+
+
+
+void exec_fichier(int fen,int item,double valeur,...) 	// exec de la fenetre de controle du fichier
+{
+//DateTimeRec date;char ss[300];VDos d;
+
+//if(item>1000) item-=1000;		// pour appeler le case pour tous les cara d'un edit texte
+
+switch(item)
+    {
+    case ouverture	:   T=malloc(max_nb_donne*sizeof(F_donne));
+     				E=malloc(sizeof(F_entete));
+     				BD=malloc(sizeof(F_block_desc));
+     				BP=malloc(sizeof(F_block_param));
+     				BD->n_ligne_don=0;
+				BD->n_blok=0;
+				BD->change=2;					// debut nouveau fichier 
+				BD->bololut=0;
+
+     				E->version=2;					// 2 pour cette version du programme
+				E->long_entete=sizeof(F_entete);		// longueur de l'entete	
+				E->long_entete_part=sizeof(F_block_desc)+sizeof(F_block_param);	// longueur de l'entete partielle
+				E->long_donne=sizeof(F_donne);			// longueur d'une ligne de données
+				ecritD(fen,f_ouvre,2);				// affiche fichier fermé
+				
+				dossier_date=dossier_datex;
+				nom_du_fichier=nom_du_fichierx;
+				message_sommaire=message_sommairex;
+				fichiers_perdus=fichiers_perdusx;
+					
+				break;
+	
+	case f_ouvre	:	if (valeur==2) 
+					{
+					if( alerte(2,"etes vous sur de vouloir fermer les fichiers ?")==1 ) 
+						fich_new(0,3);		// fermeture des fichiers 
+					else	ecritD(fen,f_ouvre,1);
+					}
+				else	fich_new(0,1);		// nouveau fichier cree: fichier ordinaire sans scan et nouveau dossier
+				break;
+
+	case f_new	:	if(!gg->scan_en_cours)	fich_new(0,0);
+				break;
+						
+	case f_don_tele :	lit_data_telescope();	break;
+						
+	case caseferme	:	cache(fen);stop_exec(fen);	break;
+    					break;
+
+    case fermeture	:	free(T);free(E);free(BD);free(BP);
+						break;
+
+    default  :   break;
+    }
+
+}
+
+
+
+
+void	debut_scan_fich(void)
+{
+
+if(!gg->fichier_dia2_ouvert)	// debut de scan sans enregistrement des fichiers
+	{
+	if( litD(fenetre_alarme,a_debut_scan,0)>0 )
+		{son(5);son(6);son(7);son(8);son(135);}
+	return;
+	}	
+
+
+fich_new(1,0);		// nouveau fichier cree  : fichier scan
+}
+
+
+void	fin_scan_fich(void)		// pas utilisé
+{
+printf("fin_fich_scan  -->  ne devrait jamais arriver ici !!!!!\n\n");
+select(printf_ref);son(135);son(135);son(135);son(135);
+if(!gg->fichier_dia2_ouvert) return;
+#ifdef lire_les_donnees_POM2
+litRS(port_A,0L,finRS_tout,120,0);// vide le buffer RS232  
+#endif
+fich_new(0,0);		// nouveau fichier cree : fichier ordinaire sans scan
+}
+
+
+
+void fich_new(int scan,int newdos)
+{
+DateTimeRec date;VDos d;
+char ss[255];
+int sub;
+
+sub=gg->compte_subscan;
+if(sub<0) sub=-sub;
+
+#ifdef lire_les_data_telescope_IRAM
+//  	attend que tous les fichiers tp et th soit lu avant de fermer
+// 	avec un time out de 20 sec
+if(nom_du_fichier[18]=='_') 		// un fichier scan en cours est ouvert
+	{
+	unsigned long ttx1,ttx2,tt;
+	GetDateTime(&ttx1);
+	while(1)
+		{
+//		printf("dans fich_new : ferme fichier scan : attend de lire tous les tp-th  \n");
+		lit_data_telescope();		
+//		printf(" subscan=%d   fichier_th=%d   fichier_tp=%d  \n",sub,gg->compte_fichiers_th,gg->compte_fichiers_tp);
+		if( (gg->compte_fichiers_th==sub) &&  (gg->compte_fichiers_tp==sub) ) break;
+		GetDateTime(&ttx2);
+		tt=(ttx2-ttx1);
+		if(tt>30) 	{	// 15 sec
+				printf("time out: tp=%d th=%d ",gg->compte_fichiers_th,gg->compte_fichiers_tp);
+				sprintf(ss,"time out:  tp=%d th=%d ",gg->compte_fichiers_th,gg->compte_fichiers_tp);
+				ajoute_sommaire(ss);break;
+				}
+		if((tt%2)==0) 	
+			{
+			printf(" attente des fichiers th et tp \n");
+			ttx1--;
+			}
+		}
+	}
+#endif
+
+	
+if(nom_du_fichier[18]=='_') 		// un fichier scan en cours est ouvert
+	{
+	if(fenetre(fichier_sommaire_scan_0)) 
+		{
+		ecritT(fichier_sommaire_scan_0,fin_f,"%s  -->  %d subscan %s \n",nom_du_fichier,sub,message_sommaire);
+		if(strlen(fichiers_perdus)>4)	ecritT(fichier_sommaire_scan_0,fin_f,"  fichiers perdus :  %s\n",fichiers_perdus);
+		}
+
+	if(fenetre(fichier_sommaire_scan_1)) 
+		{
+		ecritT(fichier_sommaire_scan_1,fin_f,"%s  -->  %d subscan %s \n",nom_du_fichier,sub,message_sommaire);
+		if(strlen(fichiers_perdus)>4)	ecritT(fichier_sommaire_scan_1,fin_f,"  fichiers perdus :  %s\n",fichiers_perdus);
+		}
+
+	if(fenetre(fichier_sommaire_scan_2)) 
+		{
+		ecritT(fichier_sommaire_scan_2,fin_f,"%s  -->  %d subscan %s \n",nom_du_fichier,sub,message_sommaire);
+		if(strlen(fichiers_perdus)>4)	ecritT(fichier_sommaire_scan_1,fin_f,"  fichiers perdus :  %s\n",fichiers_perdus);
+		}
+	}
+else
+	{
+//	if(fenetre(fichier_sommaire_scan_1)) ecritT(fichier_sommaire_scan_1,fin_f,"%s  -->  fichier simple\n",nom_du_fichier);
+//	if(fenetre(fichier_sommaire_scan_2)) ecritT(fichier_sommaire_scan_2,fin_f,"%s  -->  fichier simple\n",nom_du_fichier);
+	}
+	
+strcpy(nom_du_fichier,"                         ");	//efface le nom de fichier
+message_sommaire[0]=0; 					//efface le message pour sommaire
+fichiers_perdus[0]=0; 					//efface le message pour sommaire
+
+gg->compte_fichiers_th=0;
+gg->compte_fichiers_tp=0;
+
+//select(printf_ref);
+fich_save_partiel(3);
+litD(fenetre_fichier,f_comment,E->commentaires);
+GetDateTime(&E->tempsfin);
+
+//------  commence par fermer les fichiers ouverts 
+
+if( fenetre(fichier_dia2_1) )  
+		{
+		position(fichier_dia2_1,0L);
+		ecritF(fichier_dia2_1,(long)E->long_entete,E);
+		ferme(fichier_dia2_1);
+		}
+if( fenetre(fichier_dia2_2) )  
+		{
+		GetDateTime(&E->tempsfin);
+		position(fichier_dia2_2,0L);
+		ecritF(fichier_dia2_2,(long)E->long_entete,E);
+		ferme(fichier_dia2_2);
+		}
+
+
+if( fenetre(fichier_arch_1) )  	ferme(fichier_arch_1);
+if( fenetre(fichier_arch_2) )  	ferme(fichier_arch_2);
+		
+
+ecritD(fenetre_fichier,f_comment,"../..");	
+ecritD(fenetre_fichier,f_bloc,"");
+ecritD(fenetre_fichier,f_nom,"fichier fermé");
+ecritD(fenetre_controle,con_fichier," *****  fichier fermé  *****  ");
+	
+while(fenetre(fichier_dia2_1)) printf(" fermeture du fichier_dia2_1 en cours\n");
+while(fenetre(fichier_dia2_2)) printf(" fermeture du fichier_dia2_2 en cours\n");
+while(fenetre(fichier_arch_1)) printf(" fermeture du fichier_arch_1 en cours\n");
+while(fenetre(fichier_arch_2)) printf(" fermeture du fichier_arch_2 en cours\n");
+
+if(newdos==3)	{
+		if(fenetre(fichier_sommaire_scan_0)) ferme(fichier_sommaire_scan_0);
+		if(fenetre(fichier_sommaire_scan_1)) ferme(fichier_sommaire_scan_1);
+		if(fenetre(fichier_sommaire_scan_2)) ferme(fichier_sommaire_scan_2);
+		return;    // fermeture definitive  
+		}
+
+GetTime(&date);
+
+if(newdos)		//  seulement si création d'un nouveau dossier de jour
+	{
+	sprintf(dossier_date,"%d%d%d"	,100+(date.year%100),100+date.month,100+date.day);
+					dossier_date[0]='-';dossier_date[3]='_';dossier_date[6]='_';
+	sprintf(ss,"sommaire%s",dossier_date);
+//	nouveauT(fichier_sommaire_scan_0,0,ss);
+	ouvre('WIND',fichier_sommaire_scan_0,0,ss,exec_cache,0L);
+
+	litD(fenetre_fichier,f_d1,dossier_dia2_1);
+	if( (strlen(dossier_dia2_1)>2) && (*dossier_dia2_1!='/') )	
+		{
+		strcat(dossier_dia2_1,":dia2"); d=cherchedossier(dossier_dia2_1); // verifie que le dossier dia2 existe ou le crée
+		strcat(dossier_dia2_1,":dia2");	strcat(dossier_dia2_1,dossier_date);
+		printf("dossier DIA2_1:  %s  ",dossier_dia2_1);
+ 		d=cherchedossier(dossier_dia2_1);
+//		printf(" dossier1 : fich new :  retour de dossier : d.dos=%d d.vol=%d \n",d.dossier,d.volume);
+		if(d.dossier)	{
+				fixedossier(d);
+				if(!ouvrirF(fichier_sommaire_scan_1,ss)) ouvreF('TEXT',fichier_sommaire_scan_1,ss);
+//				if(!ouvrirT(fichier_sommaire_scan_1,0,ss)) nouveauT(fichier_sommaire_scan_1,0,ss);
+				}
+		}
+	else	*dossier_dia2_1=0;
+
+
+	litD(fenetre_fichier,f_d2,dossier_dia2_2);
+	if( (strlen(dossier_dia2_2)>2) && (*dossier_dia2_2!='/') )	
+		{
+		strcat(dossier_dia2_2,":dia2"); d=cherchedossier(dossier_dia2_2); // verifie que le dossier dia2 existe ou le crée
+		strcat(dossier_dia2_2,":dia2");	strcat(dossier_dia2_2,dossier_date);
+		printf("dossier DIA2_2:  %s  ",dossier_dia2_2);
+ 		d=cherchedossier(dossier_dia2_2);
+//		printf(" dossier2 : fich new :  retour de dossier : d.dos=%d d.vol=%d \n",d.dossier,d.volume);
+		if(d.dossier)	{
+				fixedossier(d);
+				if(!ouvrirF(fichier_sommaire_scan_2,ss)) ouvreF('TEXT',fichier_sommaire_scan_2,ss);
+//				if(!ouvrirT(fichier_sommaire_scan_2,0,ss)) nouveauT(fichier_sommaire_scan_2,0,ss);
+				}
+		}
+	else	*dossier_dia2_2=0;
+
+	litD(fenetre_fichier,f_a1,dossier_arch_1);
+	if( (strlen(dossier_arch_1)>2) && (*dossier_arch_1!='/') )	
+		{
+		sprintf(dossier_arch_1,"%s:arch_%d",dossier_arch_1,version_num); d=cherchedossier(dossier_arch_1); // verifie que le dossier arch existe ou le crée
+//		strcat(dossier_arch_1,":arch"); d=cherchedossier(dossier_arch_1); // verifie que le dossier arch existe ou le crée
+		sprintf(dossier_arch_1,"%s:arch%s",dossier_arch_1,dossier_date);
+		printf("dossier ARCH_1:  -->%s<--  ",dossier_arch_1);
+		}
+	else	*dossier_arch_1=0;
+
+	litD(fenetre_fichier,f_a2,dossier_arch_2);
+	if( (strlen(dossier_arch_2)>2) && (*dossier_arch_2!='/') )	
+		{
+		sprintf(dossier_arch_2,"%s:arch_%d",dossier_arch_2,version_num); d=cherchedossier(dossier_arch_2); // verifie que le dossier arch existe ou le crée
+		sprintf(dossier_arch_2,"%s:arch%s",dossier_arch_2,dossier_date);
+		printf("dossier ARCH_2:   -->%s<--  ",dossier_arch_2);
+		}
+	else	*dossier_arch_2=0;
+
+	printf("\n");
+	}
+
+sprintf(nom_du_fichier,"%d%d%d%d%d%d"	,
+	100+(date.year%100),100+date.month,100+date.day,100+date.hour,100+date.minute,100+date.second);
+nom_du_fichier[0]='a';
+#ifdef  lire_les_data_telescope_IRAM
+nom_du_fichier[0]='t';
+#endif			
+nom_du_fichier[3]='_';nom_du_fichier[6]='_';nom_du_fichier[9]='-';nom_du_fichier[12]='h';nom_du_fichier[15]='m';
+if(scan) strcat(nom_du_fichier,"_scan");								
+printf("nouveau fichier : %s \n",nom_du_fichier);
+
+if(*dossier_dia2_1)
+	{
+ 	d=cherchedossier(dossier_dia2_1);
+//	printf(" dossier1 : fich new :  retour de dossier : d.dos=%d d.vol=%d \n",d.dossier,d.volume);
+	if(d.dossier) {fixedossier(d);ouvreF('DIA2',fichier_dia2_1,nom_du_fichier);}
+	}
+
+if(*dossier_dia2_2)
+	{
+	d=cherchedossier(dossier_dia2_2);
+//	printf("dossier2 : fich new :  retour de dossier : d.dos=%d d.vol=%d \n",d.dossier,d.volume);
+	if(d.dossier)  {fixedossier(d);ouvreF('DIA2',fichier_dia2_2,nom_du_fichier);}
+	}
+
+nom_du_fichier[0]='h';
+
+if(*dossier_arch_1)
+	{
+ 	d=cherchedossier(dossier_arch_1);
+	if(d.dossier) {fixedossier(d);ouvreF('ARCH',fichier_arch_1,nom_du_fichier);}
+	GetDateTime(&temps_debut_arch);		
+	}
+
+if(*dossier_arch_2)
+	{
+ 	d=cherchedossier(dossier_arch_2);
+	if(d.dossier) {fixedossier(d);ouvreF('ARCH',fichier_arch_2,nom_du_fichier);}
+	GetDateTime(&temps_debut_arch);		
+	}
+
+nom_du_fichier[0]='a';
+#ifdef  lire_les_data_telescope_IRAM
+nom_du_fichier[0]='t';
+#endif			
+
+fich_save_partiel(2);						
+ecritD(fenetre_fichier,f_nom,"%s",nom_du_fichier);
+ecritD(fenetre_controle,con_fichier,"ouvre -> %s",nom_du_fichier);
+}
+
+
+
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/fichier_archeops.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/fichier_archeops.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/fichier_archeops.c	(revision 637)
@@ -0,0 +1,184 @@
+#include "diabolo.h"
+#include "fichier.h"
+
+
+block_type_modele 	bktm2;		// memoire pour block local pour fabrication block
+block_type_bolo		blk_bol;
+block_type_synchro_sol	blk_sync;
+int			index=0;
+int			num_block=0;
+unsigned long		temps_debut_arch;
+
+/*
+void  valide_block(block_type_modele* blk,int type,int block_num)
+	{
+	int somme;
+	def_long_block
+	blk->debut		=	debut_block_mesure;
+	blk->code2		=	(block_num & 0xffffff ) | ( (type<<24)&0xff000000 );
+	blk->mot[(long_block[type]/4)-4]  =	fin_block_mesure;
+	calcul_somme_block(blk,longueur);
+	blk->code1		=	(long_block[type]<<16)	|	somme;
+	}
+
+*/
+
+
+
+void	fabrique_block_type_param(void)
+{
+#define blk  ((block_type_param*)(&bktm2)) 	// pointeur sur la memoire locale
+blk->param	=	parametr;
+
+valide_block(&bktm2,block_param,num_block);
+#undef blk
+ecrit_fichier_ARCH(&bktm2);
+}
+
+
+
+void	fabrique_block_type_reglage(void)
+{
+#define blk  ((block_type_reglage*)(&bktm2)) 	// pointeur sur la memoire locale
+blk->reglage	=	gg->reglage;
+
+valide_block(&bktm2,block_reglage,num_block);
+#undef blk
+ecrit_fichier_ARCH(&bktm2);
+}
+
+
+
+
+void	fabrique_block_type_une_periode(void)
+{
+#define blk  ((block_type_une_periode*)(&bktm2)) 	// pointeur sur la memoire locale
+
+//  a ecrire boucle pour copier les periodes simples
+int j,i;		
+for(j=0;j<nb_max_bolo;j++)	for (i=0;i<nb_max_mes_per;i++)
+		blk->bol_per[j][i]=gg->bol_per[j][i]^0x7fff;	// 16 bit -> 15 bit utile + phase
+								// change le signe des 15 bits utiles		
+valide_block(&bktm2,block_une_periode,num_block);
+#undef blk
+ecrit_fichier_ARCH(&bktm2);
+}
+
+//	short 		bol_per[nb_max_bolo][nb_max_mes_per];		
+
+
+
+//  cette fonction rempli un block coups par coups et l'ecrit quand il est plein
+
+void	fabrique_block_type_bolo_synchro(void)
+{
+int j;
+int nb_coups,aa,s;
+static compt_block_reg=0;
+
+nb_coups= gg->reglage.horloge.nb_mesures/2 - gg->reglage.horloge.temp_mort;
+aa = (nb_coups<<14) + (nb_coups*190) ;
+if( index%2) s=1;else	s=-1;
+//gg->don.don_bolo[j] =  s*(((blk->data_bolo[j][i]-aa)<<1)/nb_coups)
+for(j=0;j<nb_max_bolo;j++)	blk_bol.data_bolo[j][index]=aa+((gg->don.don_bolo[j]*s*nb_coups)>>1);
+for(j=0;j<nb_sync;j++)		blk_sync.synchro[j][index]=gg->don.sync[j];
+
+index++;
+if( index < (nb_per_block*2) ) return;
+
+index=0;
+num_block++;
+
+valide_block( (block_type_modele*) &blk_sync,block_synchro_sol,num_block);
+ecrit_fichier_ARCH( (block_type_modele*) &blk_sync);
+
+
+valide_block( (block_type_modele*) &blk_bol,block_bolo,num_block);
+ecrit_fichier_ARCH( (block_type_modele*) &blk_bol);
+
+compt_block_reg++;
+if(compt_block_reg>20)
+	{
+	compt_block_reg=0;
+	fabrique_block_type_reglage();
+	}
+}
+
+
+
+
+
+//---------------------------------------------------------------------------------------
+//---------------    ecrit  les  fichiers     ARCH  	  -------------------------------
+//---------------------------------------------------------------------------------------
+
+
+void	ecrit_fichier_ARCH(block_type_modele * bktp)
+{
+unsigned long ttx;
+int long_b=longueur_block(bktp);
+
+GetDateTime(&ttx);
+if(gg->scan_en_cours)	temps_debut_arch=ttx;
+if( (!gg->scan_en_cours)  && ( (ttx-temps_debut_arch) > 2*temps_max_fichier) )
+	{
+//	printf(" fichier Archeops sans scan de plus de 10 minutes: fich_new \n");
+	GetDateTime(&temps_debut_arch);		// pour ne pas le faire deux fois
+	fich_new(0,0);				// pour limiter la duree des fichiers arch
+	}
+
+if(fenetre(fichier_arch_1))
+	{
+//	position(fichier_arch_1,fin_f);
+	ecritF(fichier_arch_1,long_b,bktp);
+	}
+if(fenetre(fichier_arch_2))
+	{
+//	position(fichier_arch_2,fin_f);
+	ecritF(fichier_arch_2,long_b,bktp);
+	}
+}
+
+
+
+void exec_ARCH(int fen,int item,double valeur,...) 	// exec du fichier lui_meme
+ 							// apellé pour les deux fichiers ARCH ouverts et fermés
+{
+switch(item)
+	{
+	case ouverture	:	
+     		if( (fen!=fichier_arch_1) && (fen!=fichier_arch_2) )	
+     			{
+#ifdef _archeops
+     			ouvre('ACTI',0,10,"lit_fichier_arch",exec_lit_fichier_ARCH,(void*)fen);
+#else
+			printf(" ne peut pas relire les fichiers archeops \n");
+			printf("il faut compiler avec archeops ou planck  \n");
+#endif
+     			break;
+     			}
+//											
+//*****************************************************************************************
+		printf("nouveau fichier archeops : %s  \n",titre(fen));
+		gg->fichier_arch_ouvert=1;
+		GetDateTime(&temps_debut_arch);
+		fabrique_block_type_param();
+		fabrique_block_type_reglage();
+		break;
+
+
+	case fermeture :
+		gg->fichier_arch_ouvert=0;
+
+//		if( (fen!=fichier_arch_1) && (fen!=fichier_arch_2) )  break;
+//		fich_save_partiel(3);
+
+//		litD(fenetre_fichier,f_comment,E->commentaires);
+//		ecritD(fenetre_fichier,f_comment,"../..");
+		break;
+		
+	}
+}
+
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/fichier_diabolo.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/fichier_diabolo.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/fichier_diabolo.c	(revision 637)
@@ -0,0 +1,127 @@
+#include "diabolo.h"
+#include "fichier.h"
+//#include "acqui.h"
+#include "controle.h"
+
+
+extern	F_entete		*E;
+extern	F_block_desc		*BD;
+extern	F_block_param		*BP;
+extern	F_donne			* T;		// tableau courant de donnee
+
+extern char * nom_du_fichier;
+
+unsigned long		temps_debut_dia2;
+
+
+//---------------------------------------------------------------------------------------
+//---------------    ecrit  les  fichiers      DIA2  	  -------------------------------
+//---------------------------------------------------------------------------------------
+
+
+
+void	ecrit_fichier_dia2(F_donne  d,unsigned long temps_cntl,unsigned long temps_mac)			//	ecrit les valeurs bolo et synchro 
+{
+int nl=BD->n_ligne_don;
+
+E->tempsfin=temps_mac;					// comme ca bon a la fin du fichier
+if(!E->tempsdebut) 	E->tempsdebut=temps_mac; 	// parceque mis a zero a l'ouverture du fichier
+
+T[nl]=d;
+if(!nl)	BP->temps_controleur_debut=temps_cntl;
+BP->temps_controleur_fin=temps_cntl;
+BD->n_ligne_don++;	if (BD->n_ligne_don>=max_nb_donne) fich_save_partiel(0);
+if( (nl%100)==0 ) 	ecritD(fenetre_fichier,f_bloc,"bloc %d : %d lignes",BD->n_blok+1,nl);
+
+if( (nl%100)==0 ) 	ecritD(fenetre_controle,con_fichier,"%s  *",nom_du_fichier);
+if( (nl%100)==50 ) 	ecritD(fenetre_controle,con_fichier,"%s   ",nom_du_fichier);
+}
+
+
+
+void	fich_save_partiel(int change)	//  change==3   -> fin de fichier sans changement de parametres
+					//  change==1	->	change un parametre: nouveau block
+					//	change==2	->	nouveau fichier, nouvelle serie de mesure			
+					//	change==0	->	meme fichier nouveau block avec memes parametres			
+{
+unsigned long ttx;
+int j,i,n=gg->reglage.horloge.nb_mesures;
+
+if((!fenetre(fichier_dia2_1)) && (!fenetre(fichier_dia2_2)))	return;
+if (change!=2)
+	{
+	for(j=0;j<nb_max_bolo;j++)
+		for(i=0;i<n;i++)	BP->bol_per[j][i]=gg->bol_per[j][i];
+	
+	if(fenetre(fichier_dia2_1))
+		{
+		position(fichier_dia2_1,fin_f);
+		ecritF(fichier_dia2_1,sizeof(F_block_desc),BD);				// ecrit l'entete partielle
+		ecritF(fichier_dia2_1,sizeof(F_block_param),BP);			// ecrit l'entete partielle
+		ecritF(fichier_dia2_1,(long)E->long_donne*(long)BD->n_ligne_don,T);	// ecrit le block de data
+		}
+	if(fenetre(fichier_dia2_2))
+		{
+		position(fichier_dia2_2,fin_f);
+		ecritF(fichier_dia2_2,sizeof(F_block_desc),BD);				// ecrit l'entete partielle
+		ecritF(fichier_dia2_2,sizeof(F_block_param),BP);			// ecrit l'entete partielle
+		ecritF(fichier_dia2_2,(long)E->long_donne*(long)BD->n_ligne_don,T);
+		}
+
+	}
+if( (change==0) ou (change==2) )	lit_data_telescope();	//  debut fichier ou apres block complet  
+
+BD->n_ligne_don=0;
+BP->temps_controleur_debut=BP->temps_controleur_fin;
+
+BD->n_blok++;
+BP->reglage=gg->reglage;
+BD->change=change;
+BD->bololut=0;
+
+if( (change==0) ou (change==1) )
+	{
+	GetDateTime(&ttx);
+//	printf(" temps debut fichier = %d   temps courant=%d  \n",E->tempsdebut,ttx);
+	if(gg->scan_en_cours)	temps_debut_dia2=ttx;
+	if( (!gg->scan_en_cours)  && ( (ttx-temps_debut_dia2) > temps_max_fichier) )	
+		{
+//		printf(" fichier Diabolo sans scan de plus de 5 minutes: fich_new \n");
+		GetDateTime(&temps_debut_dia2);	// pour etre sur de ne pas le faire deux fois
+		fich_new(0,0);
+		}
+	}
+if(change==3) change=0;	
+BD->change=change;
+}
+
+
+
+
+void exec_DIA2(int fen,int item,double valeur,...) 	// exec du fichier lui_meme
+ 							// apellé pour les deux fichiers DIA2 ouverts et fermés
+{
+switch(item)
+	{
+	case ouverture	:	
+     		if( (fen!=fichier_dia2_1) && (fen!=fichier_dia2_2) )	{lit_fichier_DIA2(fen);break;}
+     		gg->fichier_dia2_ouvert=1;
+     		E->tempsdebut=0;	E->tempsfin=0;			// temps de debut et fin de fichier		
+		litD(fenetre_fichier,f_comment,E->commentaires);	// commentaires à la main
+		ecritF(fen,(long)E->long_entete,E);
+//		printf("fabrique fichier : %s  \n",titre(fen));
+		GetDateTime(&temps_debut_dia2);
+		break;
+
+	case fermeture :
+		if( (fen!=fichier_dia2_1) && (fen!=fichier_dia2_2) )  break;
+		gg->fichier_dia2_ouvert=0;
+		fich_save_partiel(3);
+
+//		litD(fenetre_fichier,f_comment,E->commentaires);
+//		ecritD(fenetre_fichier,f_comment,"../..");
+		break;
+		
+	}
+}
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/fichier_relit_ARCH.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/fichier_relit_ARCH.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/fichier_relit_ARCH.c	(revision 637)
@@ -0,0 +1,65 @@
+#include "diabolo.h"
+#include "fichier.h"
+
+#include "tm.h"
+
+
+//*************************************************************************************
+//											
+#ifdef _archeops	//---------   pour  Archeops    ------------------------------	***
+
+
+void exec_lit_fichier_ARCH(int fen,int item,double valeur,...)
+{
+block_type_modele  bkt;
+static long pos;
+int fich,type;
+
+fich=(int)infos(fen)->util;
+
+switch(item)
+	{
+	case ouverture	: 	printf("\nlecture du fichier %s  \n",titre(fich));
+				pos=0;
+				break;
+
+	case fermeture	: 	printf("fermeture du fichier  \n\n");
+				ferme(fich);
+				break;
+
+	case tache_de_fond :
+
+			if (  (pos+12) >  longueur(fich) )
+				{
+				printf("fin du fichier \n");
+				ferme(fen);
+				}
+
+			else
+				{
+				int u;
+				def_nom_block
+				
+				position(fich,pos);
+				litF(fich,sizeof(block_type_modele),&bkt);
+				type=type_block(&bkt);
+				pos+=longueur_block(&bkt);
+				printf("block %d  :  %s \n",numero_block(&bkt),nom_block[type]);
+				
+				u=tt->tm.pos_ecrit;
+				tt->tm.btm[u].tmtrx=bkt;
+				u++; if(u>=longueur_table_tm) u=0;
+				tt->tm.pos_ecrit=u;
+				}
+
+			break;
+	default :	break;
+	}
+}
+
+
+
+#endif
+//											
+//*****************************************************************************************
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/fichier_relit_DIA2.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/fichier_relit_DIA2.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/fichier_relit_DIA2.c	(revision 637)
@@ -0,0 +1,118 @@
+#include "diabolo.h"
+#include "fichier.h"
+#include "bolo.h"
+
+
+
+
+
+
+void	lit_fichier_DIA2(int fen)
+{
+//int i,f;
+F_entete			*E;
+F_block_desc 		*BD;
+F_block_param 		*BP;
+F_donne		*	T;							// tableau courant de donnee
+long tt=1397151033;
+long total=0;
+long val_controleur;
+long blockold=0;
+double total_controleur=-1;
+int bb=0;
+int i;
+def_gains;
+
+T=malloc(max_nb_donne*sizeof(F_donne));
+E=malloc(sizeof(F_entete));
+BD=malloc(sizeof(F_block_desc));
+BP=malloc(sizeof(F_block_param));
+printf("lecture du fichier  \n");
+position(fen,0L);
+select(printf_ref);
+litF(fen,sizeof(F_entete),E);
+printf(" version :  =%d     ",E->version);
+printf("temps debut, fin =%ld , %ld  \n",tt+E->tempsdebut,tt+E->tempsfin);
+E->commentaires[255]=0;
+printf("commentaires à la main : %s \n",E->commentaires);
+
+while ( litF(fen,sizeof(F_block_desc),BD) != -1)
+	{
+//	printf(" BD.change = %d    nb ligne= %d \n",BD->change,BD->n_ligne_don);
+	if(BD->change>10)
+		{
+		char buf[20000];
+		printf("block  type  %d,  longueur %d ",BD->change,BD->n_ligne_don);
+		litF(fen,BD->n_ligne_don,buf);
+		}
+	else
+	
+	if(BD->change==10)
+		{
+		char comment[10000];
+		printf(" commentaire longueur %d ",BD->n_ligne_don);
+		litF(fen,BD->n_ligne_don,comment);
+//		printf("commentaire : \n");
+//		printf(comment);
+		printf("\n");
+		}
+	else
+		{
+			
+		bb++;
+		litF(fen,sizeof(F_block_param),BP);
+		if(total_controleur==-1)	{val_controleur=BP->temps_controleur_debut;total_controleur=0;}
+		total_controleur+=(double)( (BP->temps_controleur_fin - val_controleur) & 0x7fffffff ) ;
+		val_controleur=BP->temps_controleur_fin;
+		printf(" block %d :chg=%d , %d lignes , horloge %x ,temps debut %ld , fin =%ld ,  ereur%ld ",		
+			BD->n_blok,
+			BD->change,
+			BD->n_ligne_don,
+			BP->reglage.horloge,
+			BP->temps_controleur_debut,BP->temps_controleur_fin,
+			BP->temps_controleur_fin-(blockold+(long)BD->n_ligne_don));
+		blockold=BP->temps_controleur_fin;
+//		printf("bololu =%d \n",BD->bololut);
+		if(BD->n_ligne_don>max_nb_donne) {printf("\n trop de ligne a lire : erreur \n\n");break;}
+		litF(fen,sizeof(F_donne)*(long)BD->n_ligne_don,T);
+		total+=BD->n_ligne_don;
+		if(bb==5) // pour le 5 eme block uniquement
+				{
+				for(i=0;i<nb_max_bolo;i++)
+					{
+					printf("\nbolo%d : gain=%d -> %g   V=%d  I=%d  T=%d  L=%d  phase=%d "
+						,i+1,gainbrut(BP->reglage.bolo[i]),gain_ampli(BP->reglage.bolo[i])
+						,dac_V(BP->reglage.bolo[i]),dac_I(BP->reglage.bolo[i])
+						,dac_T(BP->reglage.bolo[i]),dac_L(BP->reglage.bolo[i])
+						,phase(BP->reglage.bolo[i])   );
+					}
+				printf("\n periode horloge=%g ,   nb_mesures=%d  ,  frequence=%g  , temps mort=%d  \n"
+					,2./(double)(BP->reglage.horloge.nb_mesures*24),BP->reglage.horloge.nb_mesures/2 ,500000.,BP->reglage.horloge.temp_mort);
+				}	  
+		}
+	
+	
+	
+	printf("\n");
+	}
+
+printf(" total fichier %ld lignes  \n",total);
+printf("temps  fichier %ld sec     \n",E->tempsfin-E->tempsdebut);
+printf("temps  controleur %8.3f sec     \n",1e-6*total_controleur);
+printf("frequence de modulation calculée a partir du temps controleur = %g Hz  \n",((double)(total-1))/(2*1e-6*total_controleur));
+printf("periode calculee  = %g  ms \n",(1e-3*total_controleur/((double)(total-1))));
+printf("frequence moyenne reelle 	 = %g Hz  \n",((double)total)/(double)(2*(E->tempsfin-E->tempsdebut)));
+printf("frequence generateur   	 = %g MHz  \n",
+		15.0*(((double)(total-1))/(double)(E->tempsfin-E->tempsdebut))/(((double)(total-1))/(1e-6*total_controleur)));
+/*
+f=ouvreD(0,0,"",0);
+for(i=0;i<1000;i++)
+	{
+	double x,y;
+	x=i;
+	y=T[i].bolo[0];
+//	y=BP->bol_per[0][i];
+	trace(f,x,y);
+	}
+*/	
+}
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/fichier_telescope.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/fichier_telescope.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/fichier_telescope.c	(revision 637)
@@ -0,0 +1,443 @@
+#include "diabolo.h"
+#include "fichier.h"
+
+#define  long_maxi_fich_tele  20000L
+
+void renomme_fichier(int ncar,int numscan,char *nom_source);
+
+extern	F_entete		*E;
+extern	F_block_desc		*BD;
+extern	F_block_param		*BP;
+
+extern char *dossier_date;	// dossier date pour creer le dossier ou ranger les data telescope
+extern char * nom_du_fichier;
+extern char * message_sommaire;
+extern char * fichiers_perdus;
+
+//------------------------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------------------------------
+//----------------------         recherche  des  données  du  telescope           ----------------------
+//------------------------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------------------------------
+
+
+//-------------------------------------------------------------------------------------
+// -------------		      -0-    utilitaire commun        -------------------------
+//-------------------------------------------------------------------------------------
+
+//-----------------------  renomme le fichier    ----------------------------
+//  *********************     renomme les fichier	*********************
+
+//  fabrique le nouveau nom de fichier
+//	ss[0] 		= 	longueur du string=29
+//  ss[1..18]	=   heure et date
+//  ss[19]		=	underscore
+//	ss[20..29]	=	numscan et nom de la source
+
+
+void renomme_fichier(int ncar,int numscan,char *nom_source)
+{
+char nom_pascal[50],ss[256];
+Tfenetre ptf;
+FSSpec file;
+int i;
+
+nom_source[30]=0;
+
+ecritD(fenetre_fichier,f_comment,"scan numero %d   source : %s  ",numscan,nom_source);
+//	printf("scan numero %d   source : %s  \n",numscan,nom_source);
+
+if(nom_du_fichier[18]!='_') return;
+if(ncar==4)	sprintf(nom_du_fichier+19,"%d-%s",numscan+10000,nom_source);
+	else	sprintf(nom_du_fichier+19,"%d-%s",numscan+100000,nom_source);
+nom_du_fichier[18]='_';nom_du_fichier[19]='s';nom_du_fichier[29]=0;
+for(i=0;i<29;i++) if(nom_du_fichier[i]==' ') nom_du_fichier[i]='_';	// enleve les blancs
+//	printf(" nouveau nom : .................. %s \n",nom_du_fichier);
+strcpy(ss+1,nom_du_fichier);ss[0]=29;
+
+
+if(fenetre(fichier_dia2_1))
+
+	{
+	ss[1]='a';
+#ifdef  lire_les_data_telescope_IRAM
+	ss[1]='t';
+#endif			
+	ptf=infos(fichier_dia2_1);
+	
+	strcpy(nom_pascal+1,ptf->titre);*nom_pascal=strlen(nom_pascal+1);
+	FSMakeFSSpec(ptf->dossier.volume,ptf->dossier.dossier,(ConstStr255Param)nom_pascal,&file);
+	FSpRename(&file,(ConstStr255Param)ss);
+	position(fichier_dia2_1,0L);
+	ecritF(fichier_dia2_1,(long)E->long_entete,E);
+
+	if(fenetre(fichier_dia2_2))
+		{
+		ptf=infos(fichier_dia2_2);
+		FSMakeFSSpec(ptf->dossier.volume,ptf->dossier.dossier,(ConstStr255Param)nom_pascal,&file);
+		FSpRename(&file,(ConstStr255Param)ss);
+		position(fichier_dia2_2,0L);
+		ecritF(fichier_dia2_2,(long)E->long_entete,E);
+		}
+	}
+
+if(fenetre(fichier_arch_1))
+
+	{
+	ss[1]='h';
+	ptf=infos(fichier_arch_1);
+	
+	strcpy(nom_pascal+1,ptf->titre);*nom_pascal=strlen(nom_pascal+1);
+	FSMakeFSSpec(ptf->dossier.volume,ptf->dossier.dossier,(ConstStr255Param)nom_pascal,&file);
+	FSpRename(&file,(ConstStr255Param)ss);
+
+	if(fenetre(fichier_arch_2))
+		{
+		ptf=infos(fichier_arch_2);
+		FSMakeFSSpec(ptf->dossier.volume,ptf->dossier.dossier,(ConstStr255Param)nom_pascal,&file);
+		FSpRename(&file,(ConstStr255Param)ss);
+		}
+	}
+
+}
+
+
+//-------------------------------------------------------------------------------------
+// -------------		      -1-     r i e n       	      -------------------------
+//-------------------------------------------------------------------------------------
+
+
+#if (!defined (lire_les_donnees_POM2) && !defined (lire_les_noms_sources_IRAM)  && !defined (lire_le_numero_de_scan_iram) )
+void lit_data_telescope() {}	
+
+#endif
+
+//-------------------------------------------------------------------------------------
+// -------------		      -1-      P O M 2       	      -------------------------
+//-------------------------------------------------------------------------------------
+
+
+/*  lit sur la RS232  et sauve le commentaire si besoin   */ 
+
+#ifdef lire_les_donnees_POM2
+
+
+
+void ecrit_don_telescope(char *comment,int i);	// ecrit le commentaire de longueur i
+
+#define temps_d_attente  20
+
+
+void lit_data_telescope(void)
+{
+char comment[10000];
+int i,numscan;					
+i=0;
+//	printf("cherche les commentaires sur RS232 : ");
+while ( (i<8000) && (litRS(port_A,comment+i,finRS_cr,temps_d_attente,1)==1) )	i=strlen(comment);
+if(i>9000)	erreur(" comment trop long dans fichier_telescope données POM2");
+if(i)	{
+		char ss[200];
+		int j=0,k,q=0;
+//		printf("lit commentaire  %dcara: ",i);
+		while ( (j<i) && comment[j] )
+			{
+			while( (j<i) && (comment[j]<20) ) j++;
+			k=0;
+			while( (k<100) && (j<i) && (comment[j]>20) ) {ss[k]=comment[j];k++; j++;}				
+			ss[k]=0;j++;
+//			if(q<1) printf(" %s\n",ss);
+			q++;
+			}
+		ecrit_don_telescope(comment,i);
+		numscan=myatof(comment+1);	
+		renomme_fichier(5,numscan,comment+7);
+		}
+//	printf("\n");
+}
+
+
+
+void ecrit_don_telescope(char *comment,int i)	// ecrit le commentaire de longueur i
+{
+i=(i/4+1)*4;
+BD->n_ligne_don=i;
+BD->change=10;
+BD->bololut=0;
+if(fenetre(fichier_dia2_1))
+	{
+	ecritF(fichier_dia2_1,sizeof(F_block_desc),BD);		// ecrit l'entete partielle
+	ecritF(fichier_dia2_1,i,comment);					// ecrit le texte du block commentaire
+	if(fenetre(fichier_dia2_2))
+		{
+		ecritF(fichier_dia2_2,sizeof(F_block_desc),BD);		// ecrit l'entete partielle
+		ecritF(fichier_dia2_2,i,comment);					// ecrit le texte du block commentaire
+		}
+	}
+}
+
+
+#endif
+
+//-------------------------------------------------------------------------------------
+// -------------  -2-      IRAM  30m  juste le numero de scan			    ---------
+//-------------------------------------------------------------------------------------
+
+#ifdef lire_le_numero_de_scan_iram
+
+
+void lit_data_telescope(void)		
+{
+static VDos data_telescope;
+static int index=1;
+static char nomfich[40];
+
+char	ss[100];
+
+
+//printf("lit_data_telescope et copie dans %s\n",nom_dossier);
+
+litD(fenetre_fichier,f_don_tele,ss);
+strcat(ss,":info");
+if( (strlen(ss)>2) && (*ss!='/') )
+	{
+	data_telescope=cherchedossier(ss);
+	if(!data_telescope.volume) {printf("erreur de dossier data telescope \n");return;}
+	fixedossier(data_telescope);
+	ouvrirT(0,0,"copied_last");
+	}
+}
+
+#endif
+
+
+//-------------------------------------------------------------------------------------
+// -------------  -2-      IRAM  30m nom des sources + donnees eventuelles    ---------
+//-------------------------------------------------------------------------------------
+
+
+
+
+#ifdef lire_les_noms_sources_IRAM
+
+void ouvre_et_lit(VDos dd,char * nomfich);	// bonfich est un string pascal termine par un zero
+int deplace_un_fichier_telescope(VDos d1,char *nomfich);
+int cherche_fich(VDos dd,char *nomfich);
+
+
+
+void lit_data_telescope(void)	
+{
+VDos data_telescope;
+char nomfich[40],ss[100];
+
+data_telescope.volume=0;
+//printf("lit_data_telescope dans %s  et les deplace dans ...%s \n",ss,dossier_date);
+
+litD(fenetre_fichier,f_don_tele,ss);
+if( (strlen(ss)>2) && (*ss!='/') )	data_telescope=cherchedossier(ss);
+if(!data_telescope.volume) return;
+//printf("lit_data_telescope dans %s  et les deplace dans ...%s \n",ss,dossier_date);
+
+while(1)
+	{
+	if(!cherche_fich(data_telescope,nomfich))  return;	//  pas de fichier a lire
+//	printf("je trouve le fichier telescope  %s  \n",nomfich+1);
+	ouvre_et_lit(data_telescope,nomfich);
+	if(deplace_un_fichier_telescope(data_telescope,nomfich)) 
+		{printf("erreur dans deplace un fichier\n");return;} // return si erreur	
+//	printf("je deplace le fichier %s \n",nomfich+1);
+	}
+}
+
+
+
+// Cherche le premier fichier du dossier (index=1)
+//  si oui, renvoie 1  et le nom du fichier dans nomfich (string pascal avec un zero a la fin)
+//  si pas de fichier: renvoie 0
+
+int cherche_fich(VDos dd,char * nomfich)
+{
+HFileParam	pb;
+pb.ioCompletion=0L;
+pb.ioFDirIndex=1;			// index commence à 1   
+pb.ioNamePtr=(StringPtr)nomfich;
+pb.ioVRefNum=dd.volume;
+pb.ioDirID=dd.dossier;
+if(PBHGetFInfo( (HParmBlkPtr) &pb,0)) return(0);
+//if( ( (pb.ioFlFndrInfo.fdType!='DATA') et (pb.ioFlFndrInfo.fdType!='TEXT') ) ou (*nomfich!=13) ) return(-1);
+nomfich[*nomfich+1]=0;		//  nomfich est un string pascal avec zero à la fin
+//printf("index=%d : un bon fichier : %s \n",index,nomfich+1);
+return(1);
+}
+
+
+
+void ouvre_et_lit(VDos dd,char * nomfich)	// nomfich est un string pascal termine par un zero
+{
+short err;
+short data;
+FSSpec file;
+char *buf;
+char source[40];
+int i;
+long lg;
+int numscan,subscan,alire;
+int monscan;
+char ss[255];
+
+//--  recherche numscan et subscan
+monscan=0;
+if( (nom_du_fichier[18]=='_') && (nom_du_fichier[21]!='a') ) 	// un fichier scan en cours est ouvert
+	{
+	monscan=myatof(nom_du_fichier+20);
+//	printf(" monscan=%d  \n",monscan);
+	}
+
+numscan=myatof(nomfich+1);
+subscan=myatof(nomfich+11);
+
+
+switch(nomfich[6])
+	{
+	case 'h' :	
+			if(monscan && (monscan != numscan) ) 	subscan=3000;	
+			else	{
+				if(subscan!=gg->compte_fichiers_th+1) 
+					{
+					printf(" erreur fichier th: ancien=%d  lit %d \n",gg->compte_fichiers_th,subscan);
+					sprintf(ss," -th%d",gg->compte_fichiers_th+1);ajoute_sommaire(ss);
+					}
+				gg->compte_fichiers_th=subscan;
+				subscan+=1000;
+				}
+			
+			break;
+			
+	case 'p' :	
+			if(monscan && (monscan != numscan) )	 subscan=3000;	
+			else	{
+				if(subscan!=gg->compte_fichiers_tp+1) 
+					{
+					printf(" erreur fichier tp: ancien=%d  lit %d \n",gg->compte_fichiers_tp,subscan);
+					sprintf(ss," -tp%d",gg->compte_fichiers_th+1);ajoute_sommaire(ss);
+					}
+				gg->compte_fichiers_tp=subscan;
+				subscan+=2000;
+				}
+			
+			break;
+						
+	default :	subscan=3000;
+			break;
+	}
+			
+//printf("lecture fichier type %c%c, numscan=%d  subscan=%d \n",nomfich[5],nomfich[6],numscan,subscan);
+
+if(subscan==3000) 
+	{
+	ajoute_sommaire2(nomfich+1);
+	printf(" fichier *s d'un autre scan \n",nomfich+1);
+	return;
+	}
+
+alire=0;
+if(subscan==1001) alire=1;
+
+#ifdef lire_les_data_telescope_IRAM
+alire=2;
+#endif
+
+if(alire)
+	{
+	FSMakeFSSpec(dd.volume,dd.dossier,(ConstStr255Param)nomfich,&file);
+	if ((err=FSpOpenDF(&file,0,&data))!=0) 
+			{
+			son(1);		printf("\n pas possible de lire le fichier données telescope :");
+			select(printf_ref);
+			return;
+			}
+
+	lg=long_maxi_fich_tele-5;
+	if(alire==1) lg=1100;	
+	buf=malloc(long_maxi_fich_tele+16);
+	strcpy(buf,nomfich+1);		//buff contient le nom du fichier (20 octets) suivit du contenu du fichier
+	FSRead(data,&lg,buf+16);	
+	FSClose(data);	// lit le fichier th ou tp  de donnees telescope
+	printf("lecture fichier type %c%c, numscan=%d  subscan=%d :  lit %d caracteres \n",nomfich[5],nomfich[6],numscan,subscan,lg);
+
+	for(i=0;i<38;i++) source[i]=buf[i+1052+16];source[38]=0;	// lit le nom de la source 
+	if(subscan==1001)  renomme_fichier(4,numscan,source);		// ne renomme le fichier que pour le th.001
+	
+#ifdef lire_les_data_telescope_IRAM
+
+	if(lg>long_maxi_fich_tele-10)
+			{
+			son(1);		
+			printf("\nle fichier données telescope est trops gros \n");
+			printf("il depasse la taille maximum de %d octets \n",long_maxi_fich_tele);
+			select(printf_ref);
+			}
+
+	lg=(lg/4+1)*4 +16 ;
+	BD->n_ligne_don=lg;
+	BD->change=subscan;
+	BD->bololut=0;
+	if(fenetre(fichier_dia2_1))
+		{
+		position(fichier_dia2_1,fin_f);
+		ecritF(fichier_dia2_1,sizeof(F_block_desc),BD);		// ecrit l'entete partielle
+		ecritF(fichier_dia2_1,lg,buf);				// ecrit le texte du block data
+		if(fenetre(fichier_dia2_2))
+			{
+			position(fichier_dia2_2,fin_f);
+			ecritF(fichier_dia2_2,sizeof(F_block_desc),BD);	// ecrit l'entete partielle
+			ecritF(fichier_dia2_2,lg,buf);			// ecrit le texte du block data
+			}
+		}
+#endif
+
+	free(buf);
+	}
+}
+
+
+
+
+int deplace_un_fichier_telescope(VDos d1,char *nomfich)		// retourne 0 si tout va bien
+{
+char dossier2[100],nom_dossier_tele[100],dossier_complet[150];
+FSSpec file1,file2;
+VDos d2;
+DateTimeRec date;
+
+FSMakeFSSpec(d1.volume,d1.dossier,(ConstStr255Param)nomfich,&file1);	// le fichier source
+
+// fabrique le dossier destination
+GetTime(&date);
+
+strcpy(nom_dossier_tele+1,"tele");
+strcat(nom_dossier_tele+1,dossier_date);
+*nom_dossier_tele=strlen(nom_dossier_tele+1);
+litD(fenetre_fichier,f_d2,dossier2);			// le meme dossier que le second fichier de data DIA2
+if( (strlen(dossier2)<3) ou (*dossier2=='/') )	return(1);
+strcat(dossier2,":telescope");
+d2=cherchedossier(dossier2);	// cree le dossier telescope s'il n'existe pas
+//printf("deplace le fichier %s dans le dossier  %s //  %s  \n",nomfich+1,dossier2,nom_dossier_tele+1);
+
+sprintf(dossier_complet,"%s:%s",dossier2,nom_dossier_tele+1);
+d2=cherchedossier(dossier_complet);	// cree le dossier du jour s'il n'existe pas
+//printf("dossiercomplet O.K. \n");
+d2=cherchedossier(dossier2);		//  le dossier parent
+if(!d2.volume) return(1);
+//printf("dossier2 O.K. \n");
+FSMakeFSSpec(d2.volume,d2.dossier,(ConstStr255Param)nom_dossier_tele,&file2);	// le dossier destination
+//printf(" fichier %s copie dans dossier %s \n",nomfich+1,nom_dossier_tele+1);
+return(FSpCatMove(&file1,&file2));
+}
+
+
+
+
+#endif
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/fourier.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/fourier.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/fourier.c	(revision 637)
@@ -0,0 +1,145 @@
+#include "math.h"
+
+#define SWAP(a,b) tempr=(a);(a)=(b);(b)=tempr
+
+void four1(float *data,int nn,int isign);
+
+double souslin(double *y,int n);		/* soustrait la droite de y[0] à y[n-1]  */
+void filtre(double *y,int n,double f);
+void spectre(double *y,int n);
+void spectreRMS(double *y,int n);
+
+
+/*  --------  filtre passe - bas du tableau double y[] -----------*/
+
+/*double souslin(double *y,int n)		/* soustrait la droite de y[0] à y[n-1]  
+{double pas;int i;
+pas=(y[n-1]-y[0])/(double)(n-1);
+for (i=0;i<n;i++) y[i]=y[i]-y[0]-pas*(double)i;
+return(pas);
+}
+*/
+
+double souslin(double *y,int n)		/* soustrait la pente et la moyenne	*/
+{double pas,mm=0;int i;
+pas=(y[n-1]-y[0])/(double)(n-1);
+for (i=0;i<n;i++) {y[i]=y[i]-pas*(double)i;mm+=y[i];}
+mm/=(double)n;
+for (i=0;i<n;i++) y[i]=y[i]-mm;
+return(pas);
+}
+
+void filtre(double *y,int n,double f)
+{
+float *v,u;int i;double pas;
+v=(float *)y;
+pas=souslin(y,n);
+/*
+printf("y0 ... = %g %g %g %g %g\n",y[0],y[1],y[2],y[3],y[4]);
+printf("filtre avec bande=%g  : pente=%g \n",f,pas);
+*/
+for (i=0;i<n;i++)  		v[i]=(float)y[i];
+for (i=n-1;i>=0;i--)  	{v[2*i+1]=v[i]/(float)n;v[2*i+2]=0;}
+
+four1(v,n,1);
+for (i=(int)f;i<n/2;i++)			
+		{u=((double)i-f)/f;
+		u=1/(1+2*u*u);
+		v[2*i+1]=v[2*i+1]*u;
+		v[2*i+2]=v[2*i+2]*u;
+		v[2*n-2*i-1]=v[2*i+1]*u;
+		v[2*n-2*i]=v[2*i+2]*u;
+		}
+four1(v,n,-1);
+for (i=0;i<n;i++)  		v[i]=v[2*i+1];
+for (i=n-1;i>=0;i--)	y[i]= (double)v[i];
+for (i=0;i<n;i++)	y[i]=y[i] + pas * (double)(i-n/2);
+}
+
+
+
+/* -------spectre de fréquence du tableau double y[]-----------*/
+
+void spectreRMS(double *y,int n)
+{float *v;int i;float ym=0;
+v=(float *)y;
+// souslin(y,n);
+for (i=0;i<n;i++)  		{v[i]=(float)y[i];ym=ym+v[i];}
+ym=ym/(float)n;
+for (i=n-1;i>=0;i--)		{v[2*i+1]=(v[i]-ym)/(float)n;v[2*i+2]=0;}
+four1(v,n,1);
+for (i=0;i<n;i++)  		v[i]=sqrt(2*(v[2*i+1]*v[2*i+1]+v[2*i+2]*v[2*i+2]));
+for (i=n-1;i>=0;i--)  	y[i]=(double)v[i];
+}
+
+
+
+
+void spectre(double *y,int n)
+{float *v;int i;float ym=0;
+v=(float *)y;
+ souslin(y,n);
+for (i=0;i<n;i++)  		{v[i]=(float)y[i];ym=ym+v[i];}
+ym=ym/(float)n;
+for (i=n-1;i>=0;i--)		{v[2*i+1]=(v[i]-ym)/(float)n;v[2*i+2]=0;}
+four1(v,n,1);
+for (i=0;i<n;i++)  		v[i]=v[2*i+1]*v[2*i+1]+v[2*i+2]*v[2*i+2];
+for (i=n-1;i>=0;i--)  	y[i]=(double)v[i];
+}
+
+
+
+/* ----------------- transformée de Fourier complexe ---------*/
+
+void four1(float *data,int nn,int isign)   /* data tableau de 1 à 2*nn  */
+/* isign=1 --> Tf directe   data = real-imag-real-imag ........ */
+
+		/* isign=-1 --> Tf inverse    */
+{
+	int n,mmax,m,j,istep,i;
+	double wtemp,wr,wpr,wpi,wi,theta;
+	float tempr,tempi;
+
+	n=nn << 1;
+	j=1;
+	for (i=1;i<n;i+=2) {
+	
+		if (j > i) {
+			SWAP(data[j],data[i]);
+			SWAP(data[j+1],data[i+1]);
+		}
+		m=n >> 1;
+		while (m >= 2 && j > m) {
+			j -= m;
+			m >>= 1;
+		}
+		j += m;
+	}
+	mmax=2;
+	while (n > mmax) {
+		istep=2*mmax;
+		theta=6.28318530717959/(isign*mmax);
+		wtemp=sin(0.5*theta);
+		wpr = -2.0*wtemp*wtemp;
+		wpi=sin(theta);
+		wr=1.0;
+		wi=0.0;
+		for (m=1;m<mmax;m+=2) {
+			for (i=m;i<=n;i+=istep) {
+				j=i+mmax;
+				tempr=wr*data[j]-wi*data[j+1];
+				tempi=wr*data[j+1]+wi*data[j];
+				data[j]=data[i]-tempr;
+				data[j+1]=data[i+1]-tempi;
+				data[i] += tempr;
+				data[i+1] += tempi;
+			}
+			wr=(wtemp=wr)*wpr-wi*wpi+wr;
+			wi=wi*wpr+wtemp*wpi+wi;
+		}
+		mmax=istep;
+	}
+}
+
+#undef SWAP
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/fourier_diabolo.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/fourier_diabolo.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/fourier_diabolo.c	(revision 637)
@@ -0,0 +1,163 @@
+#include "diabolo.h"
+#include "acqui.h" 
+#include "fourier.h" 
+
+
+void	spectreRMS(double *y,int n);
+void 	fou(int n_fou,double*t_fou,int bolo);
+
+double*  t_fou=0L;
+int i=0;
+int k,n=0;
+double ff,qq;
+
+int indfen=0;
+int	fenet[100];
+
+
+//  foufou crée un tableau de doubles qui contiendra k traces et  k transformees de fourier
+//   ou k est le niombre de bolos  : k=nb_max_bolo
+//  trace bolo j 	:	y[i]=t_fou[(n+10)*j+i];
+//  fourier bolo j  :	y[i]=t_fou[(n+10)*k+(n+10)*j+i];
+
+// gg->flag_fou est le flag qui contient	0  si rien ne se passe ou une transformee en memoire
+//											1  s'il faut initialiser la transformee
+//											2  si une transformee est en cours
+//    foufou  est apelle si flag>0
+
+// ces deux definitions ne marchent que si  n (nb de pts pour fourier)  et  k  (nombre de bolo) sont connus
+//#define  tr(j,i)    t_fou[((n)+10)*(j)+(i)]
+//#define  fo(j,i)    t_fou[((n)+10)*k+((n)+10)*(j)+(i)]
+
+#define  tr(k,n,j,i)    t_fou[((n)+10)*(2*(j))+(i)]
+#define  fo(k,n,j,i)    t_fou[((n)+10)*(2*(j)+1)+(i)]
+
+
+void foufou()
+{
+int j;
+			
+if(gg->flag_fou==1)		// initialisation
+	{
+	if(!fenetre(fenetre_fourier))	
+		ouvreD(fenetre_fourier,fourier_id,"transformée de fourier",exec_fourier);
+	else	{select(fenetre_fourier);exec_fourier(fenetre_fourier,ouverture,0L);}
+	return;
+	}
+		
+if((i % 10)==0) ecritD(fenetre_fourier,f_message,"prise de donnee: %d",i); 
+for(j=0;j<k;j++)	{tr(k,n,j,i)=xbol(j);fo(k,n,j,i)=xbol(j);}
+i++;	
+
+if(i>n) {			//  fin de prise de donnees
+	char ss[256];
+	double m1,mm;
+
+	gg->flag_fou=0;	
+	for(j=0;j<k;j++)
+		{
+		ecritD(fenetre_fourier,f_message,"transformee bolo %d",j);
+		spectreRMS(&(fo(k,n,j,0)),n);
+		}
+	ecritD(fenetre_fourier,f_message,"fin de calcul",j);
+
+	qq=gg->periode_echantillonage;	printf("echantillonage=%g msec , ",qq*1000.);
+	qq=n*qq;						printf("temps total=%6.2f sec \n",qq);		
+	if(qq>1) ff=1./qq;else ff=1.;		printf("unité de frequence : %6.2f mHz \n",ff*1000.);
+	qq=sqrt(qq);
+	ecritD(fenetre_fourier,f_message,"f=%5.2f,%4.1f Hz",ff*10.,ff*(double)n/8 );
+	printf("\n bruit des bolos entre f=%5.2f et f=%5.1f \n\n",ff*10.,ff*(double)n/8);
+	
+	ss[0]=0;
+	for(j=0;j<k;j++)	if( (j!=0) && (j!=3))
+		{
+		mm=0;m1=0;  for(i=10;i<n/8;i++)	{mm=mm+fo(k,n,j,i);m1++;}
+		if(m1>1)	mm=1000.*qq*mm/m1;
+		printf("%s: %5.1f nV\n",parametr.bolo[j].bolo_nom,mm);
+		if(strlen(ss)<200)	sprintf(ss+strlen(ss),"%s: %5.1f nV\r",parametr.bolo[j].bolo_nom,mm);
+		if(strlen(ss) > 240)	erreur("dans fourier, string trop long ");
+		}	
+	ecritD(fenetre_fourier,f_resu,ss);
+	printf("\n");
+	}
+}
+
+
+
+
+
+//--------------------  fonction  exec  de  la  fenetre : fourier  -------------------------------
+
+
+void exec_fourier(int fen,int item,double valeur,...) 
+{
+int f;
+int j;
+char ss[256];
+double m;
+if(item>1000) item-=1000;		// pour appeler le case pour tous les cara d'un edit texte
+
+switch(item)
+	{
+	case ouverture :	//j=litD(fenetre_acquisition,e_nb_pts,0L);
+			j=litD(fenetre_fourier,f_nb_pts,0L);
+			for(n=64;n<=j;n*=2) {}; n=n/2;	//  n est le nombre de points de la transformée
+    			k=nb_max_bolo;		//  k est le nombre de bolos
+			if(t_fou) free(t_fou);
+    			t_fou=malloc((n+10)*2*k*sizeof(double));
+			printf(" malloc pour le tableau t_fou  avec %d octets \n",2*k*(n+10)*sizeof(double));
+			changecontrole(fenetre_fourier,f_bolo,1,k,idem,idem,idem,"");
+			i=0;		// compteur de prise de données
+			ecritD(fenetre_fourier,f_resu,"");
+			gg->flag_fou=2;
+			break;
+
+	 case fermeture :	gg->flag_fou=0;
+    			while(indfen) {indfen--;if(fenetre(fenet[indfen])) ferme(fenet[indfen]);}
+    			if(t_fou) {free(t_fou);t_fou=0;}
+                	break;
+                	
+	case f_calcule	:	gg->flag_fou=1;	break;
+                 
+	case f_fourier : 
+			
+			j=litD(fen,f_bolo,0)-1;     
+			if( (j<0) ou (j>=k)	)  j=0;
+			sprintf(ss,"fourier bolo %d ",j+1);
+			f=ouvreD(0,0,ss,0L);
+			if(indfen<90) {fenet[indfen]=f;indfen++;}
+			selectgra(f);
+			strcpy(graph->xtitre,"Hz");
+			strcpy(graph->ytitre,"nV/sqrt(Hz)");
+			graph->xlog=1;
+			graph->ylog=1;
+			graph->xmin=litD(fen,f_xmin,0);
+			graph->xmax=litD(fen,f_xmax,0);
+			graph->ymin=litD(fen,f_ymin,0);
+			graph->ymax=litD(fen,f_ymax,0);
+			graph->grille=1;
+			efface(f);
+			for(i=1;i<=(n/2);i++) trace(f,ff*(double)i,1000.*qq*fo(k,n,j,i));		/*  en µV /  Hz */
+			break;
+			
+	case f_trace :	j=litD(fen,f_bolo,0)-1;     
+					if( (j<0) ou (j>=k)	)  j=0;
+					sprintf(ss,"trace bolo %d ",j+1);
+					f=ouvreD(0,0,ss,0L);
+					if(indfen<90) {fenet[indfen]=f;indfen++;}
+					selectgra(f);
+					graph->ymax=litD(fen,f_traceymax,0);
+					graph->ymin=-litD(fen,f_traceymax,0);
+					graph->ypas=litD(fen,f_traceymax,0)/4.;
+					graph->grille=1;
+					strcpy(graph->xtitre,"sec");
+					strcpy(graph->ytitre,"µV");
+					efface(f);
+					m=0;	for(i=1;i<=n;i++)	m+=tr(k,n,j,i);
+					for(i=1;i<=n;i++) trace(f,gg->periode_echantillonage*(double)i,tr(k,n,j,i)-m/(double)n);
+					autox(f);
+					break;
+
+    default  :   break;
+    }
+}
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/foyer.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/foyer.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/foyer.c	(revision 637)
@@ -0,0 +1,138 @@
+#include "diabolo.h"
+#include "foyer.h" 
+
+
+void	fit_foyer(void);
+
+
+
+#define indicemax	500
+
+static int bolo,indice;
+
+static double carte[nb_max_bolo][6];  	//  pour sommer chaque subscan
+
+
+
+//--------------------  fonction  exec  de  la  fenetre : foyer  -------------------------------
+
+
+void exec_foyer(int fen,int item,double valeur,...) 
+{
+
+switch(item)
+	{
+	case ouverture	:	gg->trace_ouvert=gg->trace_ouvert | 16 ;	
+ 	    			selectgra(fen);
+ 	    			
+    				graph->taille_graduations=7;
+				indice=0;
+				bolo=litD(fen,foy_bolo,0);
+				break;
+
+
+
+
+
+	case fermeture	:	gg->trace_ouvert=gg->trace_ouvert & (255-16); 		// enleve le 16
+    				break;
+
+    	case foy_pas 	:	
+	case foy_bolo 	:	bolo=litD(fen,foy_bolo,0);
+    				fit_foyer();
+                 		break;
+   	default  	:   	break;
+    	}
+}
+
+
+
+void	trace_foyer(double *y)
+{
+int j;
+// gg->compte_subscan contient le N° de subscan et est negatif entre 2 subscans
+
+ 
+if( (gg->compte_subscan<1) ou  (gg->compte_subscan>6) ) 
+	{
+	if(indice>0) 
+		{
+		int s=-gg->compte_subscan;
+		if( (s>=1) && (s<=6) )	
+			{
+			for(j=0;j<nb_max_bolo;j++)	carte[j][s-1]/=(double)indice;
+			printf("-> valeur x[%d]=%g \n",bolo,carte[bolo-1][s-1]);
+			}
+		}
+	if( (indice>0) && (gg->compte_subscan==-6) ) fit_foyer();
+	indice=0;
+//	printf("ne trace pas un point (entre 2 subscans) \n");
+	return;
+	}
+
+if(indice==0)	
+	{
+	printf("debut subscan %d ",gg->compte_subscan);
+	selectgra(fenetre_annexe);
+	graph->couleur_trace=gg->compte_subscan+1;
+	style(fenetre_annexe);
+	for(j=0;j<nb_max_bolo;j++)	carte[j][gg->compte_subscan-1]=0;
+	}
+
+printf("%d ",indice);
+
+for(j=0;j<nb_max_bolo;j++)	carte[j][gg->compte_subscan-1]+=y[j];
+
+trace(fenetre_annexe,indice,y[bolo-1]);
+if(indice<indicemax) indice++;
+}
+
+#define	xcorr(x)    (((x)-1)*pas) 
+
+
+void	fit_foyer(void)
+{
+double a,b,c,y0,y1,y2,xmini,x;
+int i;
+double pas=litD(fenetre_annexe,foy_pas,0);
+char ss[255];
+
+//  x=0,1,2
+
+y0=0.5*(carte[bolo-1][0]+carte[bolo-1][5]);
+y1=0.5*(carte[bolo-1][1]+carte[bolo-1][4]);
+y2=0.5*(carte[bolo-1][2]+carte[bolo-1][3]);
+c=y0;
+a=0.5*(c-2*y1+y2);
+b=y1-c-a;
+//  cherche le minimum
+xmini=-0.5*b/a;
+xmini=xcorr(xmini);
+
+efface(fenetre_annexe);
+selectgra(fenetre_annexe);
+graph->couleur_trace=rouge;
+graph->couleur_texte=violet;graph->taille_texte=16;
+graph->type_symbole=rondplein;graph->taille_symbole=5;graph->ligne_trace=0;
+style(fenetre_annexe);
+
+for(i=0;i<3;i++)	trace(fenetre_annexe,xcorr(i),carte[bolo-1][i]);
+for(i=0;i<3;i++)	trace(fenetre_annexe,xcorr(i),carte[bolo-1][5-i]);
+
+graph->type_symbole=rien;graph->ligne_trace=1;
+graph->couleur_trace=bleu;
+style(fenetre_annexe);
+
+for(x=-0.4;x<2.4;x+=0.05)	trace(fenetre_annexe,xcorr(x),a*x*x+b*x+c);
+
+autox(fenetre_annexe);autoy(fenetre_annexe);retrace(fenetre_annexe);
+
+place(fenetre_annexe,-0.9,3*a+b+c);
+
+sprintf(ss,"correction %4.1f",xmini);
+texte(fenetre_annexe,0,ss);
+
+}
+
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/menu.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/menu.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/menu.c	(revision 637)
@@ -0,0 +1,124 @@
+#include "diabolo.h"
+#include "fenetres_diabolo.h"
+#include "bolo.h"
+#include "acqui.h"
+#include "carte_acqui.h"
+#include "trace.h"
+#include "montimer.h"
+#include "synchro.h"
+#include "fichier.h"
+#include "courbeVI.h"
+#include "onde.h"
+#include "menu.h"
+#include "pointage.h"
+#include "foyer.h"
+#include "carte.h"
+#include "auto.h"
+#include "regul.h"
+#include "dilution.h"
+#include "senseur_stellaire.h"
+
+
+void ferme_annexe(void);
+
+int ann;
+
+void exec_menu_diabolo(int fen,int item,double valeur,...)
+{
+switch(item)
+	{
+	case	d_param_reglage	:	param_reglage();
+								/*sauve_param();//relit_liste();
+								sauve_reglage(0);
+								sauve_reglage(1);
+								sauve_reglage(2);*/
+								break;
+	case	d_trace_tout	:	ouvreD(0,trace_tout_id ,"trace tout" ,exec_trace_tout );
+								break;
+//	case	d_trace_tout	:	if(fenetre(fenetre_trace_tout)) select(fenetre_trace_tout);
+//								else	ouvreD(fenetre_trace_tout ,trace_tout_id ,"trace tout"       ,exec_trace_tout );
+//								break;
+	case	d_trace_1_per	:	if(fenetre(fenetre_trace_1_per)) select(fenetre_trace_1_per);
+								else	ouvreD(fenetre_trace_1_per,trace_1_per_id,"trace une periode",exec_trace_1_per);
+								break;
+	case	d_trace_DS		:	if(fenetre(fenetre_trace_DS)) select(fenetre_trace_DS);
+								else	ouvreD(fenetre_trace_DS   ,trace_DS_id   ,"trace DS"         ,exec_trace_DS);		
+								break;
+
+	case	d_fourier		:	gg->flag_fou=1;
+								break;
+	case	d_courbeVI		:	ouvreD(0,courbeVI_id,"courbe V(I)",exec_courbeVI);
+								break;
+	case	d_ondelette		:	if(fenetre(fenetre_ondelette)) select(fenetre_ondelette);
+								else	ouvreD(fenetre_ondelette,ondelette_id,"ondelette",exec_ondelette);
+								break;
+
+
+
+	case	d_automatismes		:	if(fenetre(fenetre_automatismes)) select(fenetre_automatismes);
+								else	ouvreD(fenetre_automatismes,automatismes_id,"automatismes",exec_automatismes);
+								break;
+
+	case	d_regulation		:	if(fenetre(fenetre_regulation)) select(fenetre_regulation);
+								else	ouvreD(fenetre_regulation,regulation_id,"regulation",exec_regulation);
+								break;
+
+	case	d_dilution		:	if(fenetre(fenetre_dilution)) select(fenetre_dilution);
+								else	ouvreD(fenetre_dilution,dilution_id,"dilution",exec_dilution);
+								break;
+
+	case	d_senseur_stellaire		:	if(fenetre(fenetre_senseur_stellaire)) select(fenetre_senseur_stellaire);
+								else	ouvreD(fenetre_senseur_stellaire,senseur_stellaire_id,"senseur_stellaire",exec_senseur_stellaire);
+								break;
+
+/*
+nouveauD(0,senseur_stellaire_id,"senseur_stellaire",exec_senseur_stellaire);
+
+
+*/
+
+
+
+
+
+
+
+	case	d_trace_carte	:	ferme_annexe();
+								ann=1;
+								ouvreD(fenetre_annexe   ,carte_id   ,"carte",exec_carte);		
+								break;
+
+	case	d_pointage		:	ferme_annexe();
+								ann=2;
+								ouvreD(fenetre_annexe   ,pointage_id   ,"pointage",exec_pointage);		
+								break;
+
+	case	d_foyer			:	ferme_annexe();
+								ann=3;
+								ouvreD(fenetre_annexe   ,foyer_id   ,"foyer",exec_foyer);		
+								break;
+
+	default					:	break;
+	}
+}
+
+
+void ferme_annexe(void)
+{
+if( fenetre(fenetre_annexe) )   ferme(fenetre_annexe);
+while (fenetre(fenetre_annexe))
+	printf("fermeture fenetre_annexe  en cours  \n");
+ann=0;
+}
+
+
+void  trace_annexe(double * y)
+{
+switch(ann)
+	{
+	case 1 :	trace_carte(y);	break;
+	case 2 :	trace_pointage(y);	break;
+	case 3 :	trace_foyer(y);	break;
+	default	:	break;
+	}
+}
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/mesures_bolo.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/mesures_bolo.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/mesures_bolo.c	(revision 637)
@@ -0,0 +1,104 @@
+#include "diabolo.h"
+#include "bolo.h"
+
+//*********  coefficients  pour  les  mesures  bolo    ***************************************************
+//													//
+//	-1-	loi de reponse thermique des bolos  avec R en ohms et T en Kelvin  coef 0,1,2		//
+//													//
+// 	T =  coef2  *   (   ln (  R / coef1) **  ( -1 / coef0 )						//
+//													//
+//	-2-	fuite thermique du bolo   coef 3,4							//
+//													//
+//	Ptot =  coef3  *  ( Tb ** coef4    -    Tcryo  **  coef4 )					//
+//													//
+//	-3-	calcul empirique de Pciel et de  tau	  coef  5,6					//
+//													//
+//		Pciel	=	V * I -  coef5			coef5= I * Ai (tables xavier)		//
+//		tau	=	- ln ( 1 +  Pciel / coef6 )	coef6= I * Bi (tables xavier)		//
+//													//
+//******************************************************************************************************//
+
+#define	c(i)		(1e-4*(double)parametr.bolo[fen-1].coef[i])	
+
+
+void mesures_bolo(int fen,int carr,int tri,int flag)
+{
+double I,V,R,T,Pelec,Tcryo,Ptot,Pciel,tau;
+double a;
+def_gains;
+
+if(parametr.bolo[fen-1].bolo_diviseur)		//  BEBO normale ou MLPA
+	{
+	I = (double)tri / pt_micA(fen);						//	I en µA
+	V= (double) carr / pt_micV(fen);					//	V en µVolts
+	if(I>0.0000001)		R=V/I;	else	R=0;				//	R  en 
+	if(R>=1e6) ecritD(fen,b_res,"%7.3fM %6.3fnA %7.3fmV",R*1e-6,I*1e3,V*1e-3);// R  en M I en nA et V en mV
+	else	 ecritD(fen,b_res,"%6.2fK %6.3fnA %7.3fmV",R*1e-3,I*1e3,V*1e-3);// R  en K   I en nA et V en mV
+	V=V-xbolbrut(fen-1);	//  corrigée du déséquilibre  en  µV
+	}
+else						//  pour carte BEBO modifiée (mesure temperature)
+	{
+	I = 1e-3 * (double)carr * 2441. / parametr.bolo[fen-1].bolo_capa;	//	I en µA
+	V=xbolbrut(fen-1);							//	V en µVolts
+	if(I>0.0000001)		R=V/I;	else	R=0;				//	R  en 
+	if(R>=1e3) ecritD(fen,b_res,"%7.3fK %6.3fnA %7.3fmV",R*1e-3,I*1e3,V*1e-3);// R  en K I en nA et V en mV
+	else	 ecritD(fen,b_res,"%6.2f %6.3fnA %7.3fmV",R,I*1e3,V*1e-3);	// R  en    I en nA et V en mV
+	}
+
+
+if(!flag) return;
+
+if(!fenetre(fenetre_mesures_bolo)) nouveauT(fenetre_mesures_bolo,mesures_bolo_id,"mesures bolos");
+
+	//****************  tension corrigée du déséquilibre     *******************
+
+if(I<0.000001) return;
+if(V<-1000000) return;
+if(V>1000000) return;
+
+
+Pelec=V*I;		// pW
+
+//	-1-	loi de reponse thermique des bolos  avec R en ohms et T en Kelvin  coef 0,1,2		//
+//													//
+// 	T =  coef2  *   (   ln (  R / coef1) **  ( -1 / coef0 )						//
+
+a=1;	if( (R>0) && (c(1) >0.01) )		a= log ( R / c(1) );
+T=0;	if( (a>0) && (c(0)>0.01) )		T= c(2) * pow( a , -1 / c(0) );
+
+//	-2-	fuite thermique du bolo   coef 3,4							//
+//													//
+//	Ptot =  coef3  *  ( (10*Tb) ** coef4    -    (10*Tcryo)  **  coef4 )				//
+Tcryo=0.1;
+
+Ptot=0;	if( (c(4)>0.01) && (T>0.01) )	Ptot = c(3) * ( pow(10.*T,c(4)) - pow(10.*Tcryo,c(4)) );
+
+//	-3-	calcul empirique de Pciel et de  tau	  coef  5,6					//
+//													//
+//		Pciel	=	coef5  - V * I   		coef5= I * Ai (tables xavier)		//
+//		tau	=	- ln ( 1 +  Pciel / coef6 )	coef6= I * Bi (tables xavier)		//
+
+Pciel = 0;  if( c(5)>Pelec)	Pciel = c(5) - Pelec;
+a=1;	if( c(6) >0.1 )		a =  1 - Pciel / c(6) ;
+tau=0;	if( a>0 )		tau =  - log ( a );
+
+
+
+ecritT(fenetre_mesures_bolo,fin_f,"%d %s :",fen,parametr.bolo[fen-1].bolo_nom);
+
+//ecritT(fenetre_mesures_bolo,fin_f,"%s (b%d) :"/* bebo=%d  num=%d  gain_pa=%d   coef0=%g  coef1=%g  coef2=%g */,
+//		parametr.bolo_nom[fen-1],fen,parametr.bolo[fen-1].bolo_bebo,parametr.bolo[fen-1].bolo_num,parametr.bolo_gain[fen-1]
+//		,parametr.coef[fen-1][0],parametr.coef[fen-1][1],parametr.coef[fen-1][2]);
+
+
+ecritT(fenetre_mesures_bolo,fin_f," R=%7.3fM  I=%6.3fnA  V=%7.3fmV   Pelec=%5.1fpW",R*1e-6,I*1e3,V*1e-3,Pelec);
+
+if(T>0.01) ecritT(fenetre_mesures_bolo,fin_f,"  T=%6.1fmK  ", T*1e3);
+
+if( Ptot>0.1) ecritT(fenetre_mesures_bolo,fin_f," Ptot=%5.1fpW   Pciel=%5.1fpW   tau=%5.3f  ",Ptot,Pciel,tau);
+
+
+//ecritT(fenetre_mesures_bolo,fin_f,": C=%g  ptmic=%g\n",capa(fen),pt_micA(fen));
+
+ecritT(fenetre_mesures_bolo,fin_f,"\n");
+}
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/onde.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/onde.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/onde.c	(revision 637)
@@ -0,0 +1,232 @@
+#include "diabolo.h"
+#include "bolo.h"
+#include "onde.h" 
+
+
+static long x0=0;
+
+typedef struct
+	{
+	double tech;		// 	temps d'échantillonage
+	double s,f,w;		// 	sigma, frequence, pulsation
+	int lg;				//  demi largeur de l'ondelette en points
+	double *or;			//	pointeur sur la table contenant l'ondelette (cos)
+	double *oc;			//	pointeur sur la table contenant l'ondelette (sin)
+	}ondestruct;
+
+
+void	calonde(void);
+void	ondelette(int init,double* y);
+
+
+ondestruct mononde;
+
+
+void exec_ondelette(int fen,int item,double valeur,...)
+{
+static double y[nb_max_bolo];
+
+int  j;
+
+switch(item)
+    {
+    case ouverture	:	gg->trace_ouvert=gg->trace_ouvert | 8 ;	
+						mononde.or=0;
+						mononde.oc=0;
+
+    					selectgra(fen);
+    					graph->ymin=0;
+	   					graph->ymax=1000;
+    					graph->ypas=100;
+    					strcpy(graph->ytitre,"nV/sqr(Hz)");
+    					graph->xmax=200;
+    					graph->xpas=20;
+						graph->taille_graduations=7;
+    					graph->sans_image=1;
+//						graph->flag_tracen=0;
+//						for(j=0;j<nb_max_bolo;j++)	if(gg->bolo_type[j])	graph->flag_tracen+=(1<<j);
+             			
+             			ondelette(1,y);
+             			
+             			
+             			break;
+
+    case fermeture :	gg->trace_ouvert=gg->trace_ouvert & (255-8); 		// enleve le 8
+             			ondelette(2,y);
+    					break;
+		
+	case ond_sigma :
+        
+						{
+						int i;
+						ondelette(1,y);
+						efface(fen);
+					   	graph->couleur_trace=rouge;
+					   	style(fen);
+						for(i=0;i<2*mononde.lg;i++)
+							{
+					   		trace(fen,mononde.tech*i,mononde.or[i]);
+					   		}
+					   	graph->couleur_trace=bleu;
+					   	style(fen);
+						for(i=0;i<2*mononde.lg;i++)
+							{
+					   		trace(fen,mononde.tech*i,mononde.oc[i]);
+					   		}
+					   	graph->couleur_trace=vert;
+					   	style(fen);
+
+						}
+
+						break;
+
+	case ond_frequ:	ondelette(1,y);
+					break;
+                 
+	case ond_raz :	gg->temps_origine=gg->temps_cntl;	efface(fen);
+    				break;
+                 
+                 
+	case	0	:	for(j=0;j<nb_max_bolo;j++)	y[j]=xbol(j);
+					ondelette(0,y);
+					break;
+		
+	
+    default  	:   break;
+    }
+}
+
+
+/*
+
+double valtest(int i);
+double valtest(int i)
+{
+double x;
+x=random(0);
+if( (i>3000) && (i<5000) ) x+=0.5*sin(i*0.5);
+if(i>7000)  x*=2;
+return(x);
+}
+
+*/
+
+
+void ondelette(int init,double* y)
+{
+static int mpos;
+static double *mm[nb_max_bolo];
+static flag_init=0;
+int i,j;
+double vr,vc;
+double x;
+static double yo[nb_max_bolo];
+if(init)			// init==1 pour initialisation    //  init==2 pour free
+	{
+	
+	if(flag_init==4)	{flag_init=1;for(j=0;j<nb_max_bolo;j++)	if(mm[j]) free(mm[j]);flag_init=0;}
+
+	if( (init==1) && (flag_init==0) )
+		{
+		flag_init=2;
+		mononde.tech=gg->periode_echantillonage;
+		mononde.s=litD(fenetre_ondelette,ond_sigma,0);
+		mononde.f=litD(fenetre_ondelette,ond_frequ,0);
+		calonde();
+		for(j=0;j<nb_max_bolo;j++)
+			{
+			mm[j]=malloc(2*mononde.lg*sizeof(double));
+			for(i=0;i<2*mononde.lg;i++)	mm[j][i]=0;
+			yo[j]=0;
+			}
+		mpos=0;
+		flag_init=4;
+		}
+	}
+
+if ( (!init) && (flag_init==4) )
+	{
+
+	for(j=0;j<nb_max_bolo;j++)	mm[j][mpos]=y[j];
+						
+
+	if(mpos % (mononde.lg/10) ==0 )
+		{
+		double filtre;
+		filtre=litD(fenetre_ondelette,ond_filtre,0L);
+		if(filtre>1) filtre=1./filtre;
+		for(j=0;j<nb_max_bolo;j++)
+				{	
+				vr=0;vc=0;
+				for(i=0;i<2*mononde.lg;i++)
+					{
+					vr+=mm[j][mpos]*mononde.or[i];
+					vc+=mm[j][mpos]*mononde.oc[i];
+					mpos++;if(mpos>=2*mononde.lg) mpos=0;
+					}
+
+				yo[j]=yo[j]*(1-filtre)+filtre * sqrt(vr*vr+vc*vc)*1000;	// en nV/sqr(Hz)
+				}
+		x=gg->periode_echantillonage*(double)gg->temps_cntl-gg->temps_origine;
+		if(x<0) 		{
+				 		graph->xmax-=graph->xmin;graph->xmin=0;
+				 		 gg->temps_origine=gg->periode_echantillonage*(double)gg->temps_cntl;	
+				 		 x=0;
+				 		}
+		montracen(fenetre_ondelette,nb_max_bolo,x,yo);
+		if(!(graph->scroll_courbe) &&
+				 ( (x<graph->xmin) ou (x>graph->xmax) )) 
+				 		{
+				 		graph->xmax-=graph->xmin;graph->xmin=0;
+				 		 gg->temps_origine=gg->periode_echantillonage*(double)gg->temps_cntl;	
+				 		 x=0;
+				 		}
+		}	
+	mpos++;if(mpos>=2*mononde.lg) mpos=0;
+	}
+}
+
+
+//--------------------  fonction  fabriQUE L'ONDELETTE et fait les malloc  -------------------------------
+
+
+void calonde(void)
+{
+double t,a,nbp;
+double somme=0,gaus=0,norme=0;
+int i;
+
+mononde.w=2*3.14159*mononde.f;		// w en unite de point
+mononde.lg=mononde.s*5./(mononde.w*mononde.tech); 
+if(mononde.or) free(mononde.or);
+if(mononde.oc) free(mononde.oc);
+mononde.or=malloc(2*mononde.lg*sizeof(double));
+mononde.oc=malloc(2*mononde.lg*sizeof(double));
+
+for(i=0;i<2*mononde.lg;i++)
+	{
+	t=mononde.tech*(i-mononde.lg)*mononde.w;
+	a=t/mononde.s;a=exp (-a*a/ 2.);
+	mononde.or[i]=a  * cos(t);
+	mononde.oc[i]=a  * sin(t);
+	somme+=mononde.or[i];
+	norme+=a*a;
+	gaus+=a;
+	}
+somme=somme/gaus;
+nbp=1/sqrt(norme);
+printf("normalisation: somme=%g  gaus=%g \n",somme,gaus);
+nbp*=sqrt(2*mononde.tech);		// dépendance avec la frequence d'échantillonage
+//  en mettant 2* le temps d'échantillonage, on améliore la correspondance avec le spectre RMS
+for(i=0;i<2*mononde.lg;i++)	
+	{
+	t=mononde.tech*(i-mononde.lg)*mononde.w;
+	a=t/mononde.s;a=exp (-a*a/ 2.);
+	mononde.or[i]-=a*somme;
+	mononde.or[i]*=nbp;
+	mononde.oc[i]*=nbp;
+	}
+}
+
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/parametres.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/parametres.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/parametres.c	(revision 637)
@@ -0,0 +1,93 @@
+//*********  coefficients  pour  les  mesures  bolo    *******************************//
+//                         toutes les puissances en pW                                //
+//	-1-	loi de reponse thermique des bolos  avec R en ohms et T en Kelvin  coef 0,1,2		//
+//                                                                                    //
+// 	T =  coef2  *   (   ln (  R / coef1) **  ( -1 / coef0 )                           //
+//                                                                                    //
+//	-2-	fuite thermique du bolo   coef 3,4                                             //
+//                                                                                    //
+//	Ptot =  coef3  *  ( (10*Tb) ** coef4    -    (10*Tcryo)  **  coef4 )               //
+//                                                                                    //
+//	-3-	calcul empirique de Pciel et de  tau	  coef  5,6                               //
+//                                                                                    //
+//		Pciel	=	coef5	- Pelec		coef5= I * Ai (tables xavier)                              //
+//		tau	=	- ln ( 1 +  Pciel / coef6 )	coef6= I * Bi (tables xavier)                   //
+//                                                                                    //
+//************************************************************************************//
+
+
+//************************************************************************************//
+//                                                                                    //
+//   pour les MLPA      :  gain = 100   diviseur = 101  ou  330                       //
+//   pour les bebodiff  :  gain = diviseur = 100Kohm / R preampli                     //
+//   pour les bebodiff  :  la capa est corrigee d'un facteur 0.868                    //
+//   pour les cartes modifiees : mettre diviseur=0                                    //
+//                         et capa = la resistance de chage en Megohm                 //
+//                                                                                    //
+//************************************************************************************//
+
+
+//  nom  ,  on/off  ,  0 = MLPA       , N° bolo ,  gain_pa  , capa , diviseur , coef0  , coef1 , .......
+//       ,  0 ou 1  ,  2..8 = BEBO    ,  hard   ,           ,  4.7 ,  333     , 
+//                     10 = Bediff    ,         ,           , 
+
+// pour les bediff (code 10)  le n° de bolo est  N° de bebo*8  +  numero dans la bebo
+//  soit :  1 2 3 4 5 6  ..  9 10 11 12 13 14 .. 17 18 19 20 21 22 .. etc
+
+
+// bolos campagne 1998-1999
+/*
+reg_NbSi.J, 1, 0, 1, 100, 4.7, 333,	.5			,519.6  , 8.286
+v1-231...L, 1, 0, 2, 100, 4.7, 333, .5   , 1.7   , 32.41 , 0.333 , 10  , 20.30  ,  11.41  		
+v1-232...N, 1, 0, 3, 100, 4.7, 333,		
+v1-237...E, 1, 0, 4, 100, 4.7, 333,
+
+reg_JamieO, 1, 0, 5, 100, 4.7, 101,
+
+V2-NbSi..H, 1, 0, 6, 100, 4.7, 101, .5   ,433.8  , 9.25
+V2-230...B, 1, 0, 7, 100, 4.7, 333, .5   , 8.26  , 26.61 , 5.10  ,  7  , 9.354   ,  1.026
+V2-205...Q, 1, 0, 8, 100, 4.7, 333,	.518 , 81    , 25.2 
+V2-208...P, 1, 0, 9, 100, 4.7, 333, .5   , 12.31 , 33.42 , 0.627 , 6.5 , 8.113   ,  2.958
+
+*/
+//bolos campagne 1997-1998
+/*
+
+v1-208...J, 1, 0, 1, 100, 4.7, 333, .5   , 12.31 , 33.42 		
+v1-232...L, 1, 0, 2, 100, 4.7, 333,		
+v1-205...N, 1, 0, 3, 100, 4.7, 333,	.518 , 81    , 25.2	
+v1-NbSi..E, 1, 0, 4, 100, 4.7, 333,	.5			,519.6  , 8.286
+Jamie....O, 1, 0, 5, 100, 4.7, 101,
+V2-NbSi..H, 1, 0, 6, 100, 4.7, 101, .5   ,433.8  , 9.25
+V2-224...B, 1, 0, 7, 100, 4.7, 333, .5   ,3.43   , 26.6
+V2-230...Q, 1, 0, 8, 100, 4.7, 333, .5   , 8.26  , 26.61
+V2-231...P, 1, 0, 9, 100, 4.7, 333, .5   , 1.7   , 32.41
+
+*/
+
+
+
+//  bolos pour Archeops   
+
+
+v1-bedif1  , 1,10,1 ,  200, 22,  200, .5   , 12.31 , 33.42 		
+v1-bedif2  , 1,10,2 ,  200, 22,  200, .5   , 12.31 , 33.42 		
+v1-bedif3  , 1,10,3 ,  200, 22,  200, .5   , 50.0 , 14.0 		
+v1-bedif4  , 1,10,4 ,  200, 22,  200, .5   , 12.31 , 33.42 		
+v1-bedif5  , 1,10,5 , 1000, 4.7, 1000, .5   , 12.31 , 33.42 		
+v1-bedif6  , 1,10,6 , 1000, 4.7, 1000, .5   , 12.31 , 33.42 		
+
+v1-bedif7  , 1,10,9 , 1000, 4.7, 1000, .5   , 12.31 , 33.42 		
+v1-bedif8  , 1,10,10, 1000, 4.7, 1000, .5   , 12.31 , 33.42 		
+v1-bedif9  , 1,10,11, 1000, 4.7, 1000, .5   , 12.31 , 33.42 		
+v1-bedif10 , 1,10,12, 1000, 4.7, 1000, .5   , 12.31 , 33.42 		
+v1-bedif11 , 1,10,13, 1000, 4.7, 1000, .5   , 12.31 , 33.42 		
+v1-bedif12 , 1,10,14, 1000, 4.7, 1000, .5   , 12.31 , 33.42 		
+
+v1-bedif13 , 1,10,17, 1000, 4.7, 1000, .5   , 12.31 , 33.42 		
+v1-bedif14 , 1,10,18, 1000, 4.7, 1000, .5   , 12.31 , 33.42 		
+germanium  , 1,10,19, 1000, 22 ,    0, .5   , 12.31 , 33.42 		
+therm_4k   , 1,10,20, 1000, 1  ,    0, .5   , 12.31 , 33.42 		
+therm_1.6k , 1,10,21, 1000, 1  ,    0, .5   , 12.31 , 33.42 		
+therm_10k  , 1,10,22, 1000, 1  ,    0, .5   , 12.31 , 33.42 		
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/pointage.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/pointage.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/pointage.c	(revision 637)
@@ -0,0 +1,183 @@
+#include "diabolo.h"
+#include "pointage.h"
+
+
+#define indicemax	500
+
+static int bolo,indice;
+
+static double carte[nb_max_bolo][indicemax][4];  //  4 pour 4 subscan (un pointage)
+static int nbpts[4];  				//  nb de points dans chaque trace
+
+
+
+//--------------------  fonction  exec  de  la  fenetre : trace_carte  -------------------------------
+void	echelles(void);
+void	fit_pointage(void);
+
+void exec_pointage(int fen,int item,double valeur,...) 
+{
+//if(item>1000) item-=1000;		// pour appeler le case pour tous les cara d'un edit texte
+
+switch(item)
+	{
+	case ouverture     :	gg->trace_ouvert=gg->trace_ouvert | 16 ;	
+ 	    			selectgra(fen);
+ 	    			
+ 	    			
+    				graph->taille_graduations=7;
+				indice=0;
+				bolo=litD(fen,point_bolo,0);
+				break;
+
+
+
+
+
+	case fermeture     :	gg->trace_ouvert=gg->trace_ouvert & (255-16); 		// enleve le 16
+    						break;
+   
+	case point_taille :			
+	case point_largeur :			
+	case point_bolo :	bolo=litD(fen,point_bolo,0);		
+					
+				fit_pointage();
+				break;			
+	        			
+	default  :		break;
+	}
+}
+
+
+
+
+
+void trace_pointage(double * y)
+{
+int j;
+// gg->compte_subscan contient le N° de subscan et est negatif entre 2 subscans
+
+ 
+if( (gg->compte_subscan<1) ou  (gg->compte_subscan>4) ) 
+	{
+	if(indice>0) printf("\n");
+	if( (indice>0) && (gg->compte_subscan==-4) ) fit_pointage();
+	indice=0;
+//	printf("ne trace pas un point (entre 2 subscans) \n");
+	return;
+	}
+
+if(indice==0)	
+	{
+	printf("debut subscan %d ",gg->compte_subscan);
+	selectgra(fenetre_annexe);
+	graph->couleur_trace=gg->compte_subscan+1;
+	style(fenetre_annexe);
+	}
+
+printf("%d ",indice);
+
+for(j=0;j<nb_max_bolo;j++)	carte[j][indice][gg->compte_subscan-1]=y[j];
+
+trace(fenetre_annexe,indice,y[bolo-1]);
+nbpts[gg->compte_subscan-1]=indice;
+if(indice<indicemax) indice++;
+}
+
+
+#define  arcsec(x)  ( 0.5*(double)(2*(x)-nbpt_max)*taille/(double)nbpt_max)
+
+
+
+void	fit_pointage(void)
+{
+int i,j,k;
+double  data[2][indicemax];
+efface(fenetre_annexe);
+
+//printf(" fit pour bolo %d  \n",bolo);
+
+//  somme aller retour
+
+for(k=0;k<2;k++)
+	{
+	char ss[255];
+	int x0;
+	double taille=litD(fenetre_annexe,point_taille,0);
+	double largeur_pic=litD(fenetre_annexe,point_largeur,0);
+	int 	nbpt_max;
+	double a,b,a1,a2,a3,a4,b1,b2;
+	double deuxsig2;
+	double xx,ki2;
+	double amin=0,bmin=0,ki2min=0;
+	int x0min=0;
+	if(k)  	printf(" fit en elevation  ");
+	else  	printf(" fit en azimuth  ");
+	nbpt_max=nbpts[k*2]; if(nbpts[k*2+1]<nbpt_max) nbpt_max=nbpts[k*2+1];
+	printf(" avec %d  points  pour %g  arc sec   \n",nbpt_max,taille);
+	deuxsig2 = 2 * ( nbpt_max* largeur_pic/taille );
+	
+	for(i=0;i<nbpt_max;i++)  data[k][i]=0.5*(carte[bolo-1][i][k*2]+carte[bolo-1][nbpt_max-i-1][k*2+1]);	
+	
+	a1=nbpt_max;
+	b1=0;for(i=0;i<nbpt_max;i++)	b1+=data[k][i];
+	
+	for(x0=nbpt_max/4;x0<3*nbpt_max/4;x0+=1)	// boucle sur la position x0 de la gaussienne
+		{
+		a2=0;
+		a4=0;
+		b2=0;
+		for(i=0;i<nbpt_max;i++)		
+			{
+			xx=exp(-(double)((i-x0)*(i-x0))/ deuxsig2);
+			a2+=xx;
+			a4+=xx*xx;
+			b2+=xx*data[k][i];
+			}
+		a3=a2;
+		ki2=0;
+		for(i=0;i<nbpt_max;i++)	
+			{
+			b=a1*a4-a2*a3;
+			if(b!=0)	
+				{
+				a=(b1*a4-b2*a2)/b;
+				b=(a1*b2-a3*b1)/b;
+				xx=(a+b*exp(-(double)((i-x0)*(i-x0))/ deuxsig2))-data[k][i];
+				ki2+=xx*xx;
+				}
+			else 	{printf("x0= %d : determinant nul !!  \n",x0);son(130);}	
+			}
+		if( (ki2min==0) ou (ki2min>ki2) )	{     ki2min=ki2;amin=a;bmin=b;x0min=x0;}
+		}
+
+	printf(" bolo %d (%s) :",bolo,parametr.bolo[bolo-1].bolo_nom);
+	if(k)	sprintf(ss,"elevation :");
+	else	sprintf(ss,"azimuth :");
+	printf(" x0=%d  a=%g  b=%g  ki2=%g  ",x0min,amin,bmin,sqrt(ki2min/(double)nbpt_max));		
+	printf(" %4.1farcsec Pic=%gµV  \n",arcsec(x0min),bmin);
+	sprintf(ss+strlen(ss)," %4.1farcsec  Pic=%gµV\n",arcsec(x0min),bmin);
+
+	selectgra(fenetre_annexe);
+	graph->couleur_trace=2+k;
+	graph->couleur_texte=violet;graph->taille_texte=7;
+	graph->type_symbole=rondplein;graph->taille_symbole=2;graph->ligne_trace=0;style(fenetre_annexe);
+	for(j=0;j<nbpt_max;j++)		trace(fenetre_annexe,arcsec(j+k*nbpt_max*5/4),data[k][j]);
+//	retrace(fenetre_annexe);
+
+	graph->type_symbole=rien;graph->ligne_trace=1;style(fenetre_annexe);
+	for(j=0;j<nbpt_max;j++)		trace(fenetre_annexe,arcsec(j+k*nbpt_max*5/4)
+			,amin+bmin*exp(-(double)((j-x0min)*(j-x0min))/ deuxsig2));
+//	retrace(fenetre_annexe);
+	place(fenetre_annexe,arcsec(x0min+k*nbpt_max*5/4-nbpt_max/2),amin+bmin*1.1);
+	texte(fenetre_annexe,0,ss);
+	}
+autox(fenetre_annexe);autoy(fenetre_annexe);retrace(fenetre_annexe);
+}
+
+
+
+
+
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/rafraichis_fenetre.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/rafraichis_fenetre.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/rafraichis_fenetre.c	(revision 637)
@@ -0,0 +1,89 @@
+#include "diabolo.h"
+#include "bolo.h"
+#include "acqui.h"
+#include "regul.h"
+#include "auto.h"
+#include "config_transputer.h" 
+
+
+
+
+void rafraichis_fenetres(void)
+{
+int i,j;
+//printf("rafraichis fenetres ");
+if(fenetre(fenetre_acquisition))
+	{
+	double f1,f2,f3;
+
+	ecritD(fenetre_acquisition,e_periode,"%6.1f",(double)gg->reglage.horloge.periode/5.);
+	ecritD(fenetre_acquisition,e_nb_mes,(int)gg->reglage.horloge.nb_mesures/2);
+	ecritD(fenetre_acquisition,e_temp_mort,(int)gg->reglage.horloge.temp_mort);
+	ecritD(fenetre_acquisition,e_transmission,(int)gg->reglage.dilu.transmission);
+
+	// affichage de toutes les fréquences  
+	if(gg->reglage.horloge.periode)	f1=5000/(double)gg->reglage.horloge.periode; else f1=1;
+	f2=f1/bitmot;f3=f2*1000./(double)(gg->reglage.horloge.nb_mesures);
+	ecritD(fenetre_acquisition,e_freq,"freq: %5.1f kHz  --  %5.2f kHz,    modulation: %5.1f Hz",f1,f2,f3);
+		
+	gg->periode_echantillonage=(double)gg->reglage.horloge.periode*((double)bitmot)*(double)(gg->reglage.horloge.nb_mesures)/10000000.;					//  2 fois la frequence de modulation
+//	printf(" periode d'échantillonage= %g \n",gg->periode_echantillonage);
+	}
+
+for(j=0;j<nb_max_bolo;j++)
+	if(fenetre(j+1))	// seuls les bolos avec fenetre ouverte	
+		{
+		int V,I,g,v;
+//		printf("b%d  ",j+1);
+		V=dac_V(gg->reglage.bolo[j]);
+		I=dac_I(gg->reglage.bolo[j]);
+		ecritD(j+1,b_carre,V);
+		ecritD(j+1,b_tri,I);
+		ecritD(j+1,b_lin,dac_L(gg->reglage.bolo[j]));
+		ecritD(j+1,b_trans,dac_T(gg->reglage.bolo[j]));
+		g=gainbrut(gg->reglage.bolo[j]);if(g>15)	g=g&3;
+		ecritD(j+1,b_gain,g);
+		ecritD(j+1,b_phase,phase(gg->reglage.bolo[j]));
+		ecritD(j+1,b_comm,comm(gg->reglage.bolo[j]));
+		v=voie(gg->reglage.bolo[j]);
+		if(v)	{ecritD(j+1,b_auto,1);ecritD(j+1,b_voie,v);}
+		else	ecritD(j+1,b_auto,0);
+		mesures_bolo(j+1,V,I,0);
+		}
+//printf("\n");
+
+if(fenetre(fenetre_vitesse_block))
+	for(i=0;i<14;i++)
+		ecritD(fenetre_vitesse_block,ct_cadence+i,"%d",gg->reglage.vitesse[i]);
+
+
+if(fenetre(fenetre_regulation))
+	for(i=0;i<nombre_de_regul;i++)
+	    	{
+	    	ecritD(fenetre_regulation,regu_mode+i,gg->reglage.regul[i].mode+1);
+		ecritD(fenetre_regulation,regu_bolo+i,gg->reglage.regul[i].num_bolo+1);
+		ecritD(fenetre_regulation,regu_voie_chauf+i,gg->reglage.regul[i].voie_chauf+1);
+		ecritD(fenetre_regulation,regu_prop+i,gg->reglage.regul[i].prop);
+		ecritD(fenetre_regulation,regu_int+i,gg->reglage.regul[i].integ+1);
+		ecritD(fenetre_regulation,regu_deriv+i,gg->reglage.regul[i].deriv+1);
+		ecritD(fenetre_regulation,regu_chauffage+i,gg->reglage.regul[i].chauffage);
+		}
+
+if(fenetre(fenetre_automatismes))
+	for(i=0;i<nombre_de_voies;i++)
+	    	{
+	    	ecritD(fenetre_automatismes,atm_auto+i,gg->reglage.autom[i].mode+1);
+		ecritD(fenetre_automatismes,atm_gain+i,gg->reglage.autom[i].gain+1-20);
+		ecritD(fenetre_automatismes,atm_courant+i,gg->reglage.autom[i].courant+1);
+		ecritD(fenetre_automatismes,atm_delai+i,gg->reglage.autom[i].delai);
+		}
+}
+
+
+
+
+
+
+
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/reglage.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/reglage.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/reglage.c	(revision 637)
@@ -0,0 +1,182 @@
+#include "diabolo.h"
+#include "reglage.h"
+
+
+void	param_reglage(void)
+{
+nouveauD(fenetre_param_reglage,reglage_id,"param_reglage",exec_reglage);
+}
+
+//--------------------  fonction  exec  de  la  fenetre : param_reglage  -------------------------------
+
+
+void exec_reglage(int fen,int item,double valeur,...) 
+{
+int a,i,num;
+char ss[256];
+switch(item)
+	{
+	case ouverture	:	
+				a=ouvrirT(fenetre_fichier_archeops_c,256,"archeops.c");
+				if(!a)	a=ouvrirT(fenetre_fichier_archeops_c,256,0L);
+				if(!a) 	printf(" n'arrive pas a ouvrir le fichier archeops.c \n");
+				if(!a)	a=nouveauT(fenetre_fichier_archeops_c,256,"archeops.c");
+//  cherche les noms de reglages
+				litT(fenetre_fichier_archeops_c,cherchedebut_f,"/*debut_nom_reglage*/");
+				for(i=0;i<8;i++)
+					{
+					litT(fenetre_fichier_archeops_c,curseur_f,ss);
+					if(strlen(ss)>9) 
+						{
+						ss[strlen(ss)-2]=0;
+						ecritD(fen,pr_nom_reglage+i,ss+6);
+						}
+					else	ecritD(fen,pr_nom_reglage+i,"reglage %d",i);
+					}				
+				select(fen);
+				break;
+	case fermeture	:	ferme(fenetre_fichier_archeops_c);break;
+//	case pr_relit_param :	relit_param();sauve_param();break;
+	
+	case pr_sauve_reglage :	num=litD(fen,pr_num_reglage,0L)-1;
+				if(num<0)	alerte(1,"attention, vous n'avez rien sauvé !!");
+				else		sauve_reglage(num);
+				break;
+				
+    default  :   break;
+    }
+}
+
+
+
+//----------------------------------------------------------------------------------------------
+//---																						----
+//---																						----
+//--------------------    sauves les reglages dans archeops.c  ---------------------------------
+//---																						----
+//---																						----
+//----------------------------------------------------------------------------------------------
+
+
+void	sauve_reglage(int num)
+{
+char s1[1024];
+int p,i;
+
+if( (num<0) ou (num>7) ) erreur(" ecrit reglage avec num non valide ");
+
+
+// ---------------------------  cherche debut_id=  pour detruire les ancien define pour ce dialogue   -----------------
+p=litT(fenetre_fichier_archeops_c,cherchedebut_f,"/*debut_nom_reglage*/");
+printf("trouvé  debut_nom_reglage   pour p=%d \n",p);
+
+
+if (p>=0)	
+		{
+		position(fenetre_fichier_archeops_c,p);
+		do		{
+				p=litT(fenetre_fichier_archeops_c,curseur_f,s1);
+				if (p>=0)	{position(fenetre_fichier_archeops_c,p);
+							ecritT(fenetre_fichier_archeops_c,detruit_f,"");
+							}
+//				printf("detruit:-->> %s \n",s1);
+				}
+		while ( (p>=0) && (strcmp(s1,"/*fin_nom_reglage*/")!=0) );
+		}
+else	{
+		ecritT(fenetre_fichier_archeops_c,insert_f,"\n");
+		ecritT(fenetre_fichier_archeops_c,insert_f,"\n");
+		ecritT(fenetre_fichier_archeops_c,insert_f,"\n");
+		}
+
+ecritT(fenetre_fichier_archeops_c,insert_f,"/*debut_nom_reglage*/\n");
+for(i=0;i<8;i++)
+	{
+	litD(fenetre_param_reglage,pr_nom_reglage+i,s1);
+	ecritT(fenetre_fichier_archeops_c,insert_f,"/* %d->%s*/\n",i,s1);
+	}
+ecritT(fenetre_fichier_archeops_c,insert_f,"/*fin_nom_reglage*/\n\n");
+	
+	
+
+
+// ---------------------------  cherche debut_id=  pour detruire les ancien define pour ce dialogue   -----------------
+sprintf(s1,"/*debut reglage %d */",num);
+p=litT(fenetre_fichier_archeops_c,cherchedebut_f,s1);
+printf("trouvé  debut_reglage %d  pour p=%d \n",num,p);
+
+
+if (p>=0)	
+		{
+		position(fenetre_fichier_archeops_c,p);
+		do		{
+				p=litT(fenetre_fichier_archeops_c,curseur_f,s1);
+				if (p>=0)	{position(fenetre_fichier_archeops_c,p);
+							ecritT(fenetre_fichier_archeops_c,detruit_f,"");
+							}
+//				printf("detruit:-->> %s \n",s1);
+				}
+		while ( (p>=0) && (strcmp(s1,"/*fin_reglage*/")!=0) );
+		}
+else	{
+		ecritT(fenetre_fichier_archeops_c,insert_f,"\n");
+		ecritT(fenetre_fichier_archeops_c,insert_f,"\n");
+		ecritT(fenetre_fichier_archeops_c,insert_f,"\n");
+		}
+// ---------------------------------- ecriture des nouveaux defines  ----------------------------------
+/*typedef struct							  long en mot de 32 bit   	
+	{
+	horloge			horloge;						1	
+	char			vitesse[nb_type_blocks];	/*			5	
+	reglage_un_bolo		bolo[nb_max_bolo]; 			18 * 2	= 	36	
+	auto_bolo		autom[nombre_de_voies];			6  * 1		6								
+	regul_bolo		regul[nombre_de_regul];			4  * 2	=	8										
+	auto_dilu		dilu;							2	
+	}
+	reglage_bolo;							total 58		
+*/
+
+ecritT(fenetre_fichier_archeops_c,insert_f,"/*debut reglage %d */\n",num);
+ecritT(fenetre_fichier_archeops_c,insert_f,"{%d,%d,%d,%d},\n",gg->reglage.horloge.periode,gg->reglage.horloge.nb_mesures
+		,gg->reglage.horloge.temp_mort,gg->reglage.horloge.flag);
+
+for(i=0;i<nb_type_blocks;i++)
+	{if(i>0) ecritT(fenetre_fichier_archeops_c,insert_f,",%d\n",gg->reglage.vitesse[i]); else  ecritT(fenetre_fichier_archeops_c,insert_f,"{%d\n",gg->reglage.vitesse[i]); }
+
+ecritT(fenetre_fichier_archeops_c,insert_f,"},{\n");
+	
+for(i=0;i<nb_max_bolo;i++)
+	{if(i>0) ecritT(fenetre_fichier_archeops_c,insert_f,",{%d,%d}\n",gg->reglage.bolo[i].mot1,gg->reglage.bolo[i].mot2); 
+			else	ecritT(fenetre_fichier_archeops_c,insert_f,"{%d,%d}\n",gg->reglage.bolo[i].mot1,gg->reglage.bolo[i].mot2);
+	}
+
+ecritT(fenetre_fichier_archeops_c,insert_f,"},{\n");
+	
+for(i=0;i<nombre_de_voies;i++)
+	{if(i>0) ecritT(fenetre_fichier_archeops_c,insert_f,",{%d,%d,%d,%d}\n",gg->reglage.autom[i].mode,gg->reglage.autom[i].gain,gg->reglage.autom[i].courant,gg->reglage.autom[i].delai); 
+			else	ecritT(fenetre_fichier_archeops_c,insert_f,"{%d,%d,%d,%d}\n",gg->reglage.autom[i].mode,gg->reglage.autom[i].gain,gg->reglage.autom[i].courant,gg->reglage.autom[i].delai);
+	}
+
+ecritT(fenetre_fichier_archeops_c,insert_f,"},{\n");
+	
+for(i=0;i<nombre_de_regul;i++)
+	{if(i>0) ecritT(fenetre_fichier_archeops_c,insert_f,",{%d,%d,%d,%d,%d,%d,%d}\n"
+				,gg->reglage.regul[i].mode,gg->reglage.regul[i].num_bolo,gg->reglage.regul[i].voie_chauf,gg->reglage.regul[i].prop
+				,gg->reglage.regul[i].integ,gg->reglage.regul[i].deriv,gg->reglage.regul[i].chauffage); 
+	else	ecritT(fenetre_fichier_archeops_c,insert_f,"{%d,%d,%d,%d,%d,%d,%d}\n"
+				,gg->reglage.regul[i].mode,gg->reglage.regul[i].num_bolo,gg->reglage.regul[i].voie_chauf,gg->reglage.regul[i].prop
+				,gg->reglage.regul[i].integ,gg->reglage.regul[i].deriv,gg->reglage.regul[i].chauffage);
+	}
+
+ecritT(fenetre_fichier_archeops_c,insert_f,"},{%d,%d,%d,%d,%d,%d,%d,%d} \n"
+		,gg->reglage.dilu.vanne,gg->reglage.dilu.helium,gg->reglage.dilu.chauffage,gg->reglage.dilu.piles
+		,gg->reglage.dilu.transmission,gg->reglage.dilu.temps_max_vanne,gg->reglage.dilu.xx7,gg->reglage.dilu.xx8);
+
+
+ecritT(fenetre_fichier_archeops_c,insert_f,"/*fin_reglage*/\n");
+
+
+if(enregistrer(fenetre_fichier_archeops_c)) 		alerte(1,"atention : erreur dans engeristrer");
+}
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/regul.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/regul.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/regul.c	(revision 637)
@@ -0,0 +1,139 @@
+#include "diabolo.h"
+#include "bolo.h"
+#include "auto.h"
+#include "acqui.h"
+#include "fichier.h"
+#include "regul.h"
+#include "tm.h"
+#include "alarme.h"
+
+
+//-----------------------------------------------------------------------------------------
+//--------------------  fonction  exec  de  la  fenetre : regul  --------------------------
+//-----------------------------------------------------------------------------------------
+
+
+
+void exec_regul(int fen,int item,double valeur,...) 
+{
+regul_p_i_d pid;
+int bolo,g;
+
+switch(item)
+    {
+    case ouverture   :	tachedefond(fen,10*60);
+    case rg_num_bolo :
+    case rg_nb_mes   :
+    case rg_chauf    :
+    case rg_p :		  case rg_p+1000:
+    case rg_i :		  case rg_i+1000:
+    case rg_d :		  case rg_d+1000:
+//    case rg_periode_raz :  case rg_periode_raz+1000 :
+
+    		pid.code=tc_regul;
+    		pid.num_bolo=litD(fen,rg_num_bolo,0L);
+    		pid.nb_mes=litD(fen,rg_nb_mes,0L);
+    		pid.chauf=litD(fen,rg_chauf,0L);
+    		pid.p=litD(fen,rg_p,0L);
+    		pid.i=litD(fen,rg_i,0L);
+    		pid.d=litD(fen,rg_d,0L);
+//     		tt->reg.per_raz=litD(fen,rg_periode_raz,0L);
+//    		printf(" nbmes=%d  chauf=%d   prop=%g  compteur=%d  \n",gg->reg.nb_mes,gg->reg.chauf,gg->reg.p,gg->reg.compteur);   
+//    		printf(" valeur=%ld  commande=%d  int=%g  compteur=%d  \n",tt->.valeur,tt->reg.cc,tt->reg.tint,tt->reg.compteur);   
+    		
+//    for(i=0;i<10;i++)  btc.mot[i]=mot[i];		
+	
+		emission_telecommande(tc_dir_transputer,&pid);
+    		
+                break;   
+    
+    case tache_de_fond	:				// toutes les 10 secondes, test la saturation de la regul
+    		if( ! litD(fenetre_acquisition,e_tache_inter,0) ) break;	    		
+//    		break;
+    		pid.code=tc_regul;
+    		pid.num_bolo=bolo=litD(fen,rg_num_bolo,0L);
+    		pid.nb_mes=litD(fen,rg_nb_mes,0L);
+    		pid.p=litD(fen,rg_p,0L);
+    		pid.i=litD(fen,rg_i,0L);
+    		pid.d=litD(fen,rg_d,0L);
+    		if(test_saturation(bolo))
+    			{
+    			pid.chauf=0;
+			g=gainbrut(gg->reglage.bolo[bolo-1]);
+			if(g>15) g=g&3;
+			g--;
+			if(g<0) g=0;
+			printf("ecritgain dans regul\n");
+			ecritD(bolo,b_gain,g);	ecritgain(bolo);		
+			if( litD(fenetre_alarme,a_sat_regul,0) >0)  son(133);
+			}
+		else	pid.chauf=litD(fen,rg_chauf,0L);
+		
+		emission_telecommande(tc_dir_transputer,&pid);
+					
+    		break;
+    
+     
+    case caseferme	:	cache(fen);stop_exec(fen);	break;
+    default:	break;
+    }
+}
+
+
+//-----------------------------------------------------------------------------------------
+//-----------------------------------------------------------------------------------------
+//--------------------  fonction  exec  de  la  fenetre : regulation  ---------------------
+//-----------------------------------------------------------------------------------------
+//-----------------------------------------------------------------------------------------
+
+void ecrit_regulation(void);
+
+
+
+void exec_regulation(int fen,int item,double valeur,...) 
+{
+if( (item>0) ou (item==ouverture) ) 	ecrit_regulation();
+}
+
+
+void ecrit_regulation(void)
+{
+int i,a;
+long ll;
+//printf("ecrit regulation nombre_de_regul=%d  \n",nombre_de_regul);
+for(i=0;i<nombre_de_regul;i++)
+    	{
+    	ll=(long)(&(gg->reglage.regul[i].mode))-(long)(&(gg->reglage.regul[0]));
+    	a=litD(fenetre_regulation,regu_mode+i,0L)-1;
+ //   	printf(" a= %d  reglage=%d  ll=%d  \n",a,gg->reglage.regul[i].mode,ll);
+    	if(a!=gg->reglage.regul[i].mode)   
+    		{
+//    		printf(" envoie %d en regul mode \n",a);
+    		emission_tc_reduite(tc2_regul,ll,a);
+		}
+    	ll=(long)(&(gg->reglage.regul[i].num_bolo))-(long)(&(gg->reglage.regul[0]));
+    	a=litD(fenetre_regulation,regu_bolo+i,0L)-1;
+    	if(a!=gg->reglage.regul[i].num_bolo)   emission_tc_reduite(tc2_regul,ll,a);
+
+    	ll=(long)(&(gg->reglage.regul[i].voie_chauf))-(long)(&(gg->reglage.regul[0]));
+    	a=litD(fenetre_regulation,regu_voie_chauf+i,0L)-1;
+    	if(a!=gg->reglage.regul[i].voie_chauf)   emission_tc_reduite(tc2_regul,ll,a);
+
+    	ll=(long)(&(gg->reglage.regul[i].prop))-(long)(&(gg->reglage.regul[0]));
+    	a=litD(fenetre_regulation,regu_prop+i,0L);
+    	if(a!=gg->reglage.regul[i].prop)   emission_tc_reduite(tc2_regul,ll,a);
+
+    	ll=(long)(&(gg->reglage.regul[i].integ))-(long)(&(gg->reglage.regul[0]));
+    	a=litD(fenetre_regulation,regu_int+i,0L)-1;
+    	if(a!=gg->reglage.regul[i].integ)   emission_tc_reduite(tc2_regul,ll,a);
+
+    	ll=(long)(&(gg->reglage.regul[i].deriv))-(long)(&(gg->reglage.regul[0]));
+    	a=litD(fenetre_regulation,regu_deriv+i,0L)-1;
+    	if(a!=gg->reglage.regul[i].deriv)   emission_tc_reduite(tc2_regul,ll,a);
+	}
+}
+
+
+
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/senseur_stellaire.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/senseur_stellaire.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/senseur_stellaire.c	(revision 637)
@@ -0,0 +1,177 @@
+#include "diabolo.h" 
+#include "senseur_stellaire.h" 
+
+
+
+//--------------------  fonction  exec  de  la  fenetre : senseur_stellaire  -------------------------------
+
+
+void exec_senseur_stellaire(int fen,int item,double valeur,...) 
+{
+if(item>1000) item-=1000;		// pour appeler le case pour tous les cara d'un edit texte
+
+switch(item)
+    {
+    case ouverture               :
+    			
+                 break;
+    case fermeture               :
+                 break;
+    case sst_azer :
+                 break;
+    case sst_sortie_brute :
+                 break;
+    default  :   break;
+    }
+}
+
+//#define	bit_sst(i,j,k)  (((blk->sst[i][i*3+k/4])>>(j+8*k%4))&1)   
+
+
+//   i est le numero du point dans le block de 72
+//	j	est le numero de la diode  de 0 a 47
+//  	j%8	est la place du bit dans le mot de 8 bit 
+//	j/8	(de 0 a 5 ) est la serie de mesure
+//	k est le numero du bit dans le mot de 12 bits
+//		les k se suivent dans les données
+
+//   k est le numero du point dans le block de 72
+//	i	est le numero de la diode  de 0 a 47
+//  	j	est le paquet de 4 bits de 0 a 2 
+
+
+// on prend des paquets de 4 bits
+// chaque diode est formee de 3 paquets
+// dans l'ordre :  les paquets de 8 diodes  (8 paquets)
+//  recommencer 3 fois	(24 paquets)
+// enfin, faire 6 fois cette operation  (144 paquets)
+
+// soit q  la place du paquet  i,j,k
+#define place_paquet(i,j)	 (i/8) * 24  + j*8 + (i%8) 
+
+
+void	traite_block_sst(block_type_sst*	blk)
+{
+int i,j,k;
+double	y[15];
+double	x;
+
+int temps_cntl;
+double secondes;
+int a,b,b0,b1,b2;
+
+if(!fenetre(fenetre_senseur_stellaire)) return;
+//  ecriture des valeurs brutes du senseur stellaire
+//  les numero 0 et 4  sont dediés aux thermometres
+//  pour l'instant machent bien 1 2 3   8 9 10 11   
+if(litD(fenetre_senseur_stellaire,sst_sortie_brute,0))
+	{
+	if(!fenetre(fenetre_senseur_stellaire_lecture_brute)) nouveauT(fenetre_senseur_stellaire_lecture_brute,0,"lecture senseur stellaire");
+
+	ecritT(fenetre_senseur_stellaire_lecture_brute,fin_f,"\nsenseur stellaire  \n");
+
+
+//	k=0;
+	for(k=0;k<4;k++)
+		{
+	    	for(i=0;i<16;i++)		//  16 senseurs 
+			{
+			for(j=0;j<3;j++)		//  3 paquets
+	    			{
+	    			a=place_paquet(i,j);
+	    			b= ( blk->sst[k][a/8] >>( (a%8)*4) ) & 0xf;
+				ecritT(fenetre_senseur_stellaire_lecture_brute,fin_f,"%x",b);
+				}
+			ecritT(fenetre_senseur_stellaire_lecture_brute,fin_f,"  ");
+			}
+	 	ecritT(fenetre_senseur_stellaire_lecture_brute,fin_f,"\n");
+	 	}
+
+	 ecritT(fenetre_senseur_stellaire_lecture_brute,fin_f,"\n");
+
+	 }
+
+
+//k=0;
+for(k=0;k<72;k++)
+	{
+	 for(i=0;i<12;i++)		//  seulement les 8 premieres diodes 
+		{
+		int q;
+		q=i+4;
+		if(i>3 ) q=i+8;
+		if(i>7 ) q=i+12;
+		
+		a=place_paquet(q,0);
+	    	b0= ( blk->sst[k][a/8] >>( (a%8)*4) ) & 0xf;
+		a=place_paquet(q,1);
+	    	b1= ( blk->sst[k][a/8] >>( (a%8)*4) ) & 0xf;
+		a=place_paquet(q,2);
+	    	b2= ( blk->sst[k][a/8] >>( (a%8)*4) ) & 0xf;
+		
+
+		x=(double)( (b0<<8) | (b1<<4) |  b2 ) ;
+		if(x>2047) x-=4096;
+		y[i]=x;
+		}
+//	printf(" y = %g %g %g %g %g \n",y[0],y[1],y[2],y[3],y[4]);
+	temps_cntl =numero_block(blk)*nb_per_block*2+k;
+	secondes=gg->periode_echantillonage*(double)temps_cntl-gg->temps_origine;
+	tracen(fenetre_senseur_stellaire,12,secondes,y);
+	}
+}
+
+
+		
+//	les 46 valeurs en hexa
+//	i=0;			//  juste le premier point du block
+//	for(i=0;i<72;i++)
+/*
+for(i=0;i<72;i++)
+	{
+
+	 for(j=0;j<12;j++)		//  seulement les 12 premieres diodes 
+		{
+		x=0;
+		for(k=0;k<12;k++)	x=(x<<1)  | bit_sst(i,j,k);
+		y[j]=(double)x;
+		}
+	temps_cntl =numero_block(blk)*nb_per_block*2+i;
+	secondes=gg->periode_echantillonage*(double)temps_cntl-gg->temps_origine;
+	tracen(fenetre_senseur_stellaire,12,secondes,y);
+	}
+			
+*/
+/*	i=1;			//  juste le premier point du block
+//	for(i=0;i<72;i++)
+		{
+		for(k=0;k<12;k++)		//  12 bits
+	    		{
+	    		for(j=0;j<35;j++)		//  46 senseurs 
+				{
+				ecritT(fenetre_senseur_stellaire_lecture_brute,fin_f,"%d   ",bit_sst(i,j,k));
+				}
+	 		ecritT(fenetre_senseur_stellaire_lecture_brute,fin_f,"\n");
+			}
+	 	ecritT(fenetre_senseur_stellaire_lecture_brute,fin_f,"\n");
+	 	}
+		
+//	les 46 valeurs en hexa
+//	i=0;			//  juste le premier point du block
+//	for(i=0;i<72;i++)
+	for(i=0;i<10;i++)
+		{
+	    	for(j=0;j<35;j++)		//  46 senseurs 
+			{
+			x=0;
+			for(k=0;k<12;k++)	x=(x<<1)  | bit_sst(i,j,k);
+			ecritT(fenetre_senseur_stellaire_lecture_brute,fin_f,"%3x ",x);
+			}
+	 	ecritT(fenetre_senseur_stellaire_lecture_brute,fin_f,"\n");
+	 	}
+			
+	
+	}
+
+			
+*/	
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/synchro.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/synchro.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/synchro.c	(revision 637)
@@ -0,0 +1,164 @@
+#include "diabolo.h"
+#include "bolo.h"
+#include "synchro.h"
+#include "fichier.h"
+#include "trace.h"
+#include "alarme.h"
+#include "controle.h"
+#include "tm.h"
+
+//----------------------------------  fenetre : synchro  -----------------------------------
+void appel_detection_synchrone(void);
+
+
+double	synchro_periode=0;			//  valeur courante mesurée de la periode en nb de pts de mesure
+int select_synchro=0;
+int sy_flag[nb_sync];
+double	sy_per;			// nombre de points de mesure dans une periode
+int force_scan,force_subscan;
+
+// ------------------  programme synchro : traite les synchro et appelle trace_DS avec argument ds_debut ou ds_suite
+
+void exec_synchro(int fen,int item,double valeur,...) 
+{
+int j;
+
+switch(item)
+	{
+	case ouverture	:	
+	case sy_select	:	
+	case sy_fixe	:	
+	case sy_fixe+1000 :
+	case sy_force_scan :
+	case sy_force_subscan :
+		
+		force_scan=litD(fenetre_synchro,sy_force_scan,0L);
+		force_subscan=litD(fenetre_synchro,sy_force_subscan,0L);
+		
+		select_synchro=litD(fenetre_synchro,sy_select,0L);	
+		if(select_synchro)	gg->trace_ouvert=gg->trace_ouvert | 32 ;
+		else			gg->trace_ouvert=gg->trace_ouvert & (255-32); 		// enleve le 32
+		synchro_periode=litD(fenetre_synchro,sy_fixe,0L);
+		if(fenetre(fenetre_trace_DS))  exec_trace_DS(fenetre_trace_DS,ds_choix_DS,0);
+		break;	
+
+
+	case caseferme	:	cache(fen);stop_exec(fen);	break;
+
+                 
+	case 100	:	//  appellé à chaque point de mesure avec err dans valeur
+   		if(force_scan)	gg->don.sync[sync_scan]=1;
+   		if(force_subscan)	gg->don.sync[sync_subscan]=1;
+   		
+   		if(select_synchro)  appel_detection_synchrone();	
+     				
+		for(j=0;j<nb_sync;j++)		 // eclaire tous les voyants  
+			{
+			if(gg->don.sync[j])
+				{
+				if(!sy_flag[j]) {
+						sy_flag[j]=1;
+						ecritD(fenetre_synchro,sy_voyant+j,j+1);
+						ecritD(fenetre_controle,con_voyant+j,j+1);
+						}
+				}
+			else 
+				{
+				if(sy_flag[j])	{
+						sy_flag[j]=0;
+						ecritD(fenetre_synchro,sy_voyant+j,0);
+						ecritD(fenetre_controle,con_voyant+j,0);
+						}
+				}    					
+			}
+		if( tt->signal_scan_immediat ou gg->don.sync[sync_scan] )		//  debut scan seulement si pas d'erreur synchro  
+			{
+			if(!gg->scan_en_cours)	
+					{
+					debut_scan_fich();
+					gg->compte_subscan=0;
+					ecritD(fenetre_controle,con_subscan,"debut scan");
+					}
+				
+			gg->scan_en_cours=10;	// ou n'importe quoi >0
+			if( (gg->don.sync[sync_subscan]) && (gg->compte_subscan<1) )
+					{
+					gg->compte_subscan=-gg->compte_subscan+1;
+					ecritD(fenetre_controle,con_subscan,"subscan %d",gg->compte_subscan);
+					}
+			if( (!gg->don.sync[sync_subscan]) && (gg->compte_subscan>0) )
+					{
+					gg->compte_subscan=-gg->compte_subscan;
+					ecritD(fenetre_controle,con_subscan,"fin (%d)",-gg->compte_subscan);
+					}
+			}
+		else	
+			{
+			if( gg->compte_subscan>0) 
+					{
+					gg->compte_subscan=-gg->compte_subscan;
+					}
+			if(gg->scan_en_cours)
+				{
+				ecritD(fenetre_controle,con_subscan,"       "); 
+				// affiche rien mais compte_subscan se rappelle la derniere valeur en negatif
+				if(litD(fenetre_alarme,a_fin_scan,0)>0) 
+						 {son(5);son(6);son(7);son(8);son(133);son(135);son(133);}
+				}
+			gg->scan_en_cours=0;
+			}
+		break;
+				
+	default : break;
+	}
+
+}
+
+
+void appel_detection_synchrone(void)
+{
+int i;	
+double x;
+if(select_synchro==7)	// selection  valeur fixe
+	{
+	if(sy_per>=synchro_periode)
+		{
+		if(gg->trace_ouvert&2)	exec_trace_1_per(fenetre_trace_1_per,ds_debut,0);
+		if(gg->trace_ouvert&4)	exec_trace_DS(fenetre_trace_DS,ds_debut,0);
+		sy_per=1;
+		}
+	else
+		{
+		sy_per=sy_per+1;
+		if(gg->trace_ouvert&2)	exec_trace_1_per(fenetre_trace_1_per,ds_suite,0);
+		if(gg->trace_ouvert&4)	exec_trace_DS(fenetre_trace_DS,ds_suite,0);
+		}
+	}
+else
+	{
+	i=gg->don.sync[select_synchro-1];
+	if(i && !sy_flag[select_synchro-1]) 
+		{
+		x=1-2.*(double)i/(double)gg->reglage.horloge.nb_mesures;
+		ecritD(fenetre_synchro,sy_phase,(int)(x*100));
+		ecritD(fenetre_controle,con_phase,(int)(x*100));
+		sy_per=sy_per+x;
+//						printf("i=%d  x=%g  p=%6.2f  frequ=%g Hz\n",i,x,sy_per,1e6/(sy_per*gg->periode_echantillonage));
+		ecritD(fenetre_synchro,sy_periode," p=%6.2f\r frequ=%g Hz",sy_per,1e6/(sy_per*gg->periode_echantillonage));
+		ecritD(fenetre_controle,con_periode," p=%6.2f",sy_per);
+		synchro_periode=sy_per;
+		sy_per=1-x;
+		if(gg->trace_ouvert&2)	exec_trace_1_per(fenetre_trace_1_per,ds_debut,0);
+		if(gg->trace_ouvert&4)	exec_trace_DS(fenetre_trace_DS,ds_debut,0);
+		}
+	else 	
+		{
+		sy_per=sy_per+1;
+		if(gg->trace_ouvert&2)	exec_trace_1_per(fenetre_trace_1_per,ds_suite,0);
+		if(gg->trace_ouvert&4)	exec_trace_DS(fenetre_trace_DS,ds_suite,0);
+		}
+			
+	}
+}	
+//					printf("\n");
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/tache_PCI.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/tache_PCI.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/tache_PCI.c	(revision 637)
@@ -0,0 +1,81 @@
+#include "manip.h"
+#include "choix_acquisition.h"
+#include "archeops.h"
+#include "choix_param.h"
+#include "structure.h"
+#include "tm.h"
+#include "tache.h"
+#include "carte_acqui.h"
+#include "carte_pci.h"
+
+
+
+// interprete la telecommande provenant du programme principal mac
+// si c'est une commande directe, l'envoie directement sur le bus PCI (s'il est libre)
+// sinon, appelle la fonction correspondante
+
+
+//    si le bus PCI est libre : lit une telecommande et l'ecrit sur le bus PCI
+
+
+//*****************************************************************************************
+//											***
+#ifdef _diabolo	//---------   pour  Diabolo    ------------------------------	***
+//											***
+//*****************************************************************************************
+
+
+
+
+void	decode_telecommande(tmtc* tt)
+{
+int q,code,avance;
+q=tt->tc.pos_ecrit-tt->tc.pos_lit;	if (q<0) q+=longueur_table_tc;
+if(q) 	
+	{
+	avance=1;
+	code=(tt->tc.btc[tt->tc.pos_lit].mot[0])&0xff;		// code de telecommande
+	switch(code)
+		{
+		case	tc_horloge	:	avance=ecrit_commande_PCI(tt) ;		break;
+		case	tc_regul	:	tache_regul(tt);					break;
+		default	:				avance=ecrit_commande_PCI(tt) ;		break;
+		}
+	if(avance) 		
+		{
+		tt->tc.pos_lit++; 
+		if(tt->tc.pos_lit>=longueur_table_tc) tt->tc.pos_lit=0;
+		}
+
+	}
+}
+
+
+
+int	ecrit_commande_PCI(tmtc* tt)
+{
+int j;
+if (tt->vi.flag_ecriture_data>3)				// priorité a la regul 
+		{
+		char * mot;
+		mot=tt->tc.btc[tt->tc.pos_lit].mot;
+		for(j=0;j<10;j++)	
+			{
+			//			for(i=0;i<1000;i++);
+//			ecrit_carte(tt->tc.btc[tt->tc.pos_lit].mot[j]);
+			if(tt->PCI_actif==1)	ecrit_carte(mot[j]);
+			}
+		tt->vi.flag_ecriture_data=0;
+		return(1);
+		}
+return(0);
+}
+
+
+//*****************************************************************************************
+//											***
+#endif		//--------------------------------------------------------------------	***
+//											***
+//*****************************************************************************************
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/tache_archeops.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/tache_archeops.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/tache_archeops.c	(revision 637)
@@ -0,0 +1,185 @@
+#include "manip.h"
+#include "choix_acquisition.h"
+#include "archeops.h"
+#include "choix_param.h"
+#include "structure.h"
+#include "tm.h"
+#include "tache.h"
+#include "bolo.h"
+#include "carte_acqui.h"
+#include "carte_pci.h"
+
+
+//*****************************************************************************************
+//											***
+#ifdef _archeops		//---------   pour  Archeops    -----------------------	***
+#ifndef _sans_transputer	//---------   pour  Archeops avec transputer    -------------	***
+//											***
+//*****************************************************************************************
+//
+//
+//   lit directement les blocks recut sur la fifo et les envoie au programme principal
+//
+//
+
+
+
+//def_long_block
+
+#define avance_erreur  {tt->te.pos_ecrit++; if(tt->te.pos_ecrit>=long_table_err) tt->te.pos_ecrit=0;}
+#define	ecrit_erreur(xx)	{avance_erreur;tt->te.err[tt->te.pos_ecrit]=900+(xx);}
+void	sauve_un_block(tmtc* tt);
+
+#define	test_val(xx)	{if(octet_a_lire!=(xx)) {if(octet_a_lire==(debut_block_mesure&0xff)) tt->vi.a=1; else tt->vi.a=0;}}
+	
+
+//*****************************************************************************************
+
+void init_tache(void)
+{
+tt->vi.a=0;
+tt->vi.b=0;
+tt->vi.c=0;
+}
+
+
+#define	max_fifo  4000
+
+
+
+void lecture_fifo(void* tx)	// appellé directement pour acquisition en interruptions
+{
+register unsigned long RR;
+tmtc* tt=(tmtc*)tx;
+long lec_fifo=0;		//  compteur nombre de points lut en une fois dans la fifo
+char*	t_char=(char*)(&tt->vi.btt);
+
+
+if(tt->PCI_actif==2)	// simulation Archeops
+	{
+	static int numblock=0;
+	tt->vi.a++;
+	if(tt->vi.a>20)	// ecrit un block toutes les 20 interruptions (soit 0.5 sec)
+		{
+		int i;
+		tt->vi.a=0;
+		numblock++;
+
+		for(i=0;i<(taille_maxi_block_archeops/4);i++)	tt->vi.btt.mot[i]=(int)((random(0)-0.5)*256.*256.*256.*256.);	
+		valide_block(&tt->vi.btt,block_bolo,numblock);
+		sauve_un_block(tt);
+
+		for(i=0;i<(taille_maxi_block_archeops/4);i++)	tt->vi.btt.mot[i]=(int)((random(0)-0.5)*256.*256.*256.*256.);	
+		valide_block(&tt->vi.btt,block_une_periode,numblock);
+		sauve_un_block(tt);
+
+		for(i=0;i<(taille_maxi_block_archeops/4);i++)	tt->vi.btt.mot[i]=(int)((random(0)-0.5)*256.*256.*256.*256.);	
+		valide_block(&tt->vi.btt,block_dilution,numblock);
+		sauve_un_block(tt);
+		
+//		if((numblock%5)==0)
+			{
+			for(i=0;i<(taille_maxi_block_archeops/4);i++)	tt->vi.btt.mot[i]=(int)((random(0)-0.5)*256.*256.*256.*256.);	
+			valide_block(&tt->vi.btt,block_sst,numblock);
+			sauve_un_block(tt);
+			}
+
+		}
+	}
+
+else	while(1)
+	{
+	lit_carte;	if(rien_a_lire)		break;				//  fifo vide  ->  retour  ->  sort du while
+	lec_fifo++;
+	
+	
+//ecrit_erreur(err_sync_bebo);	
+
+	
+	if(tt->vi.b)	 // ecrit les mots pour b=[1....(sizeof(block_tm_trx)/4)-2]
+		{
+		t_char[tt->vi.b*4+3-tt->vi.c]=octet_a_lire;	// dans l'ordre: 3 2 1 0 7 6 5 4 11 10 9 8 ...
+		
+		tt->vi.c++;
+		if(tt->vi.c>=4)				//  c est le compteur de cara  
+			{
+//			ecrit_erreur(err_recut_un_block_ok);
+			tt->vi.c=0;
+			tt->vi.b++;			//  b est le compteur de mot long de 4 octets
+			
+			if (tt->vi.b>=4)	// teste la longueur apres avoir lut 3 entiers long
+				{
+				int ll;
+				ll=longueur_block(&tt->vi.btt);
+				if(ll>sizeof(block_type_modele))  {tt->vi.a=0;tt->vi.b=0;ecrit_erreur(err_longueur_block);}
+//				if(ll>sizeof(block_type_gps))  {tt->vi.a=0;tt->vi.b=0;ecrit_erreur(err_lect_pci);}
+				if( tt->vi.b > ((ll/4)-1) ) 	 {tt->vi.b=0;}
+				}
+			}  
+		}
+
+	if(!tt->vi.b)	 // test et cherche debut
+		{
+		tt->vi.a++;
+//		ecrit_erreur(err_lect_pci);			
+		switch(tt->vi.a)
+			{
+			case 1	:	test_val(debut_block_mesure&0xff);		break;
+			case 2	:	test_val((debut_block_mesure>>8)&0xff);		break;
+			case 3	:	test_val((debut_block_mesure>>16)&0xff);	break;
+			case 4	:		
+					if(octet_a_lire!=((debut_block_mesure>>24)&0xff)) tt->vi.a=0;
+					else 	{
+						tt->vi.c=0;		//  pret pour la lecture de la suite du block
+						tt->vi.b=1;		//  déja lut debut du block: commence par mot b=1;
+						}
+					 break;	
+					 
+			case 5	:	
+//					ecrit_erreur(err_recut_un_block_ok);
+					sauve_un_block(tt);	//  le code de debut n'a pas été ecrit dans le block
+			default	:	tt->vi.a=0;break;
+			}
+		}
+	
+	if(lec_fifo>max_fifo) break;
+	}
+if(lec_fifo > tt->nb_lec_fofo_int)  	tt->nb_lec_fofo_int=lec_fifo;
+if(!tt->nb_lec_fofo_ext)  		{tt->nb_lec_fofo_ext=tt->nb_lec_fofo_int;tt->nb_lec_fofo_int=0;}
+
+}
+
+
+
+//______________________________________________________________________________________________//
+//   lit le block brut tel que recut par telemesure dans  tt->vi.btt				//
+//	ce block contient  ??  periodes de mesure						// 
+// 	Je rempli un block tm  en position	u=tt->tm.pos_ecrit				//
+//	Le block s'ecrit: 			tt->tm.btm[u]					//
+//______________________________________________________________________________________________//
+
+
+
+void	sauve_un_block(tmtc* tt)
+{
+int u;
+u=tt->tm.pos_ecrit;
+//  le code de debut n'a pas été ecrit dans le block : il faut l'ecrire
+tt->vi.btt.debut=debut_block_mesure;
+tt->tm.btm[u].tmtrx=tt->vi.btt;	// recopie le block courant dans la table
+u++; if(u>=longueur_table_tm) u=0;
+tt->tm.pos_ecrit=u;
+
+if(tt->tm.pos_ecrit==tt->tm.pos_lit)  ecrit_erreur(err_pile_pleine);
+}
+
+//*****************************************************************************************
+//											***
+#endif		//--------------------------------------------------------------------	***
+#endif		//--------------------------------------------------------------------	***
+//											***
+//*****************************************************************************************
+
+
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/tache_archeops_bit2.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/tache_archeops_bit2.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/tache_archeops_bit2.c	(revision 637)
@@ -0,0 +1,158 @@
+#include "manip.h"
+#include "choix_acquisition.h"
+#include "archeops.h"
+#include "choix_param.h"
+#include "structure.h"
+#include "tm.h"
+#include "tache.h"
+#include "bolo.h"
+#include "carte_acqui.h"
+#include "carte_pci.h"
+#include "bit_block.h"
+
+
+
+
+
+//*****************************************************************************************
+//											***
+#ifdef _archeopsxx		//---------   pour  Archeops    -----------------------	***
+#ifndef _sans_transputer	//---------   pour  Archeops avec transputer    -------------	***
+//											***
+//*****************************************************************************************
+//
+//
+//   lit directement les blocks recut sur la fifo et les envoie au programme principal
+//
+
+
+#define avance_erreur  {tt->te.pos_ecrit++; if(tt->te.pos_ecrit>=long_table_err) tt->te.pos_ecrit=0;}
+#define	ecrit_erreur(xx)	{avance_erreur;tt->te.err[tt->te.pos_ecrit]=900+(xx);}
+void	sauve_un_block(tmtc* tt);
+
+	
+
+//*****************************************************************************************
+
+void init_tache(void)
+{
+tt->vi.a=0;
+tt->vi.b=0;
+tt->vi.c=0;
+//init_lit_bit();
+}
+
+
+#define	max_fifo  4000
+
+
+
+char	un_bit(void)
+{
+static int i;
+static unsigned long RR;
+i++;
+if( (i<0) ou (i>7) ) 
+	{
+	lit_carte;	if(rien_a_lire)		return(bit_vide);	//  fifo vide  ->  retour  ->  sort du while
+	i=0;
+	}
+if( (RR>>i) & 1 )  	return(bit_un);
+	else		return(bit_zero);
+}
+
+
+
+void	ecrit_erreur_bit(int e)
+{
+ecrit_erreur(e+20);
+}
+
+
+
+
+
+
+void lecture_fifo(void* tx)	// appellé directement pour acquisition en interruptions
+{
+tmtc* tt=(tmtc*)tx;
+long lec_fifo=0;		//  compteur nombre de points lut en une fois dans la fifo
+char*	t_char=(char*)(&tt->vi.btt);
+int i;
+
+
+if(tt->PCI_actif==2)	// simulation Archeops
+	{
+	static int numblock=0;
+	tt->vi.a++;
+	if(tt->vi.a>20)	// ecrit un block toutes les 20 interruptions (soit 0.5 sec)
+		{
+		int i;
+		tt->vi.a=0;
+		numblock++;
+
+		for(i=0;i<(taille_maxi_block_archeops/4);i++)	tt->vi.btt.mot[i]=(int)((random(0)-0.5)*256.*256.*256.*256.);	
+		valide_block(&tt->vi.btt,block_bolo,numblock);
+		sauve_un_block(tt);
+
+		for(i=0;i<(taille_maxi_block_archeops/4);i++)	tt->vi.btt.mot[i]=(int)((random(0)-0.5)*256.*256.*256.*256.);	
+		valide_block(&tt->vi.btt,block_une_periode,numblock);
+		sauve_un_block(tt);
+
+		for(i=0;i<(taille_maxi_block_archeops/4);i++)	tt->vi.btt.mot[i]=(int)((random(0)-0.5)*256.*256.*256.*256.);	
+		valide_block(&tt->vi.btt,block_dilution,numblock);
+		sauve_un_block(tt);
+
+		}
+	}
+
+else	while(1)
+	{
+	i=lit_bit(&tt->vi.btt);
+	if(i==lit_bit_vide)	break;
+	if(i==lit_bit_un_block)	sauve_un_block(tt);
+
+	lec_fifo++;	
+	if(lec_fifo>max_fifo*8) 	break;		// parceque compte les bit et non les octets
+	}
+if(lec_fifo > tt->nb_lec_fofo_int)  	tt->nb_lec_fofo_int=lec_fifo;
+if(!tt->nb_lec_fofo_ext)  		{tt->nb_lec_fofo_ext=tt->nb_lec_fofo_int;tt->nb_lec_fofo_int=0;}
+
+}
+
+
+
+//______________________________________________________________________________________________//
+//   lit le block brut tel que recut par telemesure dans  tt->vi.btt				//
+//	ce block contient  ??  periodes de mesure						// 
+// 	Je rempli un block tm  en position	u=tt->tm.pos_ecrit				//
+//	Le block s'ecrit: 			tt->tm.btm[u]					//
+//______________________________________________________________________________________________//
+
+
+
+void	sauve_un_block(tmtc* tt)
+{
+int u;
+//ecrit_erreur(err_recut_un_block_ok);
+
+u=tt->tm.pos_ecrit;
+//  le code de debut n'a pas été ecrit dans le block : il faut l'ecrire
+tt->vi.btt.debut=debut_block_mesure;
+tt->tm.btm[u].tmtrx=tt->vi.btt;	// recopie le block courant dans la table
+u++; if(u>=longueur_table_tm) u=0;
+tt->tm.pos_ecrit=u;
+
+if(tt->tm.pos_ecrit==tt->tm.pos_lit)  ecrit_erreur(err_pile_pleine);
+}
+
+//*****************************************************************************************
+//											***
+#endif		//--------------------------------------------------------------------	***
+#endif		//--------------------------------------------------------------------	***
+//											***
+//*****************************************************************************************
+
+
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/tache_diabolo.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/tache_diabolo.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/tache_diabolo.c	(revision 637)
@@ -0,0 +1,376 @@
+#include "manip.h"
+#include "choix_acquisition.h"
+#include "archeops.h"
+#include "choix_param.h"
+#include "structure.h"
+#include "tm.h"
+#include "tache.h"
+#include "bolo.h"
+#include "carte_acqui.h"
+#include "carte_pci.h"
+
+
+
+
+
+
+
+//*****************************************************************************************
+//											***
+#ifdef _diabolo	//---------   pour  Diabolo    ------------------------------	***
+//											***
+//*****************************************************************************************
+
+//#define test_erreur_complet
+
+
+
+#define avance_erreur  {tt->te.pos_ecrit++; if(tt->te.pos_ecrit>=long_table_err) tt->te.pos_ecrit=0;}
+#define	ecrit_erreur(xx)	{avance_erreur;tt->te.err[tt->te.pos_ecrit]=900+(xx);}
+
+
+#define	SYNCHRO			fifo0
+#define	EPLD_occupe		fifo12
+#define	top_debut		fifo13
+
+#define	ADC_BEBO		fifo(10)
+#define	DS_BEBO			fifo(11)
+
+
+
+void	depou_un_bit(tmtc* tt,long RR);
+void	depou_un_mot_24_bit(tmtc* tt);
+
+void	sauvedata(tmtc* tt,long * somme_ds);
+
+//   i= position dans la periode     j=numero de bolo    k=numero de detection
+
+
+void init_tache(void)
+{
+
+tt->vi.flag_ecriture_data=0;
+
+tt->vi.i=0;
+tt->vi.pos_block_tm=0;
+
+
+tt->vi.reg.pid.nb_mes=0;
+tt->vi.reg.pid.code=0;										
+tt->vi.reg.pid.num_bolo=0;										
+tt->vi.reg.pid.nb_mes=0;						  	
+tt->vi.reg.pid.chauf=0;
+tt->vi.reg.pid.p=0;
+tt->vi.reg.pid.i=0;
+tt->vi.reg.pid.d=0;
+
+
+tt->vi.reg.compteur=0;	
+
+tt->vi.reg.valeur=0;
+tt->vi.reg.anc_ecart=0;
+tt->vi.reg.tint=0;
+tt->vi.reg.cc=0;
+
+}
+
+
+
+void lecture_fifo(void* tx)					// appellé directement pour acquisition en interuptions
+{
+register unsigned long RR;
+tmtc* tt=(tmtc*)tx;
+long lec_fifo=0;
+int max_fifo;
+
+if(tt->PCI_actif==1)	max_fifo=3000;	//  3000  points maxi par interruption (10ms)  soit (3.3µs)
+	 else		max_fifo=200;	//  ((1000)faux )  points maxi par interruption (10ms)  soit  (20µs)
+
+	
+while(1)
+	{
+	if(tt->PCI_actif==1)	{lit_carte;	if(rien_a_lire)	break;}//  fifo vide  ->  retour  ->  sort du while
+	lec_fifo++;
+	if (EPLD_occupe) tt->vi.flag_ecriture_data=0;
+
+
+//----------------------    test des erreurs PCI  a mettre ou a enlever pour aller plus vite   -------------	
+#ifdef test_erreur_complet
+	{
+	int j;
+/*	j=  (RR>>30) & 3;		// ***** test bonne lecture PCI (seulement carte fife ) ******
+	while (j!=5)	{
+			ecrit_erreur(err_lect_pci);
+			lit_carte;	if(rien_a_lire)		break;
+			j=  (RR>>29) & 7;
+			tt->vi.aa=0;
+			}
+	if(j!=5) break;		// parceque il faut sortir des deux while 	
+*/
+	tt->vi.aa++;	    // le aa du test d'erreur n'est pas le meme que le a du compteur de temps  
+
+	j=  ((RR>>26) - tt->vi.aa ) & 7;				// ***** test compteur dans carte PCI ******
+	if(j)	{	
+		tt->vi.aa= (RR>>26) & 7;
+		avance_erreur;tt->te.err[tt->te.pos_ecrit]=j;
+		ecrit_erreur(err_lect_pci);
+		}
+	
+//	j= ((RR>>15) -  tt->vi.a ) & 7 ;				// ****** test compteur dans controleur *******	
+//	if(j)		{
+//			avance_erreur;tt->te.err[tt->te.pos_ecrit]=j;
+//			ecrit_erreur(err_lect_ctrl);
+//			}
+	}					// autre erreur de synchro fifo			
+#endif
+//_____________________   fin du test des erreurs facultatif    _____________________________________________
+	
+
+//	if(parametr.presence_bebo && (tt->vi.a==5) && 	ADC_BEBO )	ecrit_erreur(err_sync_bebo);				// erreur synchro de la BEBO
+
+	depou_un_bit(tt,RR); 
+
+	tt->vi.a++;
+
+//  --------------------   avance les compteurs  a (position dans le mot de 24 bits)  et i (position dans la periode)
+	if	(tt->vi.a>(bitmot-1)) 	
+		{
+		tt->vi.a=0;tt->vi.i++;
+		if(tt->vi.i>(tt->reglage.horloge.nb_mesures-1))   tt->vi.i=0; 			// normal : fin de periode complete 
+		if(SYNCHRO)			ecrit_erreur(err_sync_repart);					// erreur synchro du repartiteur
+		if( RR&FLAG_FIFO_FULL )		{ecrit_erreur(err_fifo_pleine);read_flags();reset_fifo();}	// la fifo a débordée			
+		if(lec_fifo > tt->nb_lec_fofo_int)  tt->nb_lec_fofo_int=lec_fifo;
+		if(!tt->nb_lec_fofo_ext)  	{tt->nb_lec_fofo_ext=tt->nb_lec_fofo_int;tt->nb_lec_fofo_int=0;}
+		if(lec_fifo>max_fifo) 
+			{
+			if(!(RR&FLAG_NFIFOHF))	tt->nb_lec_fofo_int=2*max_fifo;	// fifo plus qu'à moitié pleine			
+			break; 
+			}
+		}
+//     -------------------	test    topdebut en même temps que le dernier bit du mot    --------------
+//    si pas de top debut: les compteurs tournent normalement et pas de diagnostique d'erreur
+	if(top_debut && ( tt->vi.a ou tt->vi.i) ) 
+			{
+			ecrit_erreur(err_sync_ctrl);		// erreur synchro controlleur-mac
+			tt->vi.a=0;tt->vi.i=0;
+			}
+
+	}
+}
+
+
+//_________________________________________________________________________________________________________________
+
+
+
+
+void depou_un_bit(tmtc* tt,long RR)
+{
+int j,n,t,s;
+n=tt->reglage.horloge.nb_mesures;
+
+
+
+//___________________		 calcul detection synchrone et remplissage table courante
+
+if(tt->vi.a ==0)			
+	{
+	depou_un_mot_24_bit(tt);	//  appel du programme qui somme les points pour calcul de la D.S.
+						//  c'est aussi le programme qui rempli la table pour affichage d'une periode
+	}
+
+//___________________	 B.E.B.O.	 Lecture de numbol : numero du bolo de la bebo a lire
+if(tt->vi.a==2) 	tt->vi.numbol=0;
+
+if( (tt->vi.a>=2) && (tt->vi.a<=4) )	tt->vi.numbol= tt->vi.numbol | (  ADC_BEBO  << (4-tt->vi.a))  ;		// a==2, 3 et 4  ->  numero du bolo en cours de mesure  
+
+
+for(j=0;j<nb_max_bolo;j++)
+	{
+	t=parametr.bolo[j].bolo_bebo;
+	switch(t)
+		{
+		case 0	:			//   lecture  MLPA  direct sur fifo numero t
+					if  (tt->vi.a==2)	tt->vi.mot[j]=tt->vi.mot[j] | ( fifo(parametr.bolo[j].bolo_num) << 12 );			//  a=2 : bit de phase	(ecrit pour a=0 : 2 temps de retard)		
+					if( (tt->vi.a>=4) && (tt->vi.a<=15) )  tt->vi.mot[j]=tt->vi.mot[j] | ( fifo(parametr.bolo[j].bolo_num)  << (15-tt->vi.a));
+					break; 
+
+		case 2	:					// lecture beboA  :  bolo 17 à 22 
+
+					t=parametr.bolo[j].bolo_num;
+					if( !t ou ( t == tt->vi.numbol ) )
+						{
+						if(tt->vi.a==6) 	tt->vi.mot[j]=tt->vi.mot[j] | ( ADC_BEBO  << 12 );	// a=6 : bit de phase
+						if( (tt->vi.a>6) && (tt->vi.a<=18) )																// a==7 ->  poid fort de l'ADC  
+							tt->vi.mot[j]=tt->vi.mot[j] | ( ADC_BEBO  << (18-tt->vi.a));  // données de chaque bolo individuels de la bebo
+						}
+					if(  ( t == (7-tt->vi.i) )  &&  (tt->vi.a>0) && (tt->vi.a<=22) )  	// a==1 ->  premier bit de poid fort   --   22 bits en tout
+								tt->ds.sommeA[j]=tt->ds.sommeA[j] | ( DS_BEBO  << (22-tt->vi.a));  	// valeur DS de chaque bolo individuels de la bebo
+					if(  ( t == (7 + n/2 -tt->vi.i) )  &&  (tt->vi.a>0) && (tt->vi.a<=22) )  	// a==1 ->  premier bit de poid fort   --   22 bits en tout
+								tt->ds.sommeB[j]=tt->ds.sommeB[j] | ( DS_BEBO  << (22-tt->vi.a));  	// valeur DS de chaque bolo individuels de la bebo
+
+					break;
+		default	:	break;
+		}
+	}
+// ------------------- calcul des signaux de synchro (sur chaque bit de chaque mot) ------------------
+
+s=tt->vi.a-5;
+if( (s>=0) && (s<nb_sync) && !SYNCHRO ) tt->vi.synchro[s]++;
+
+if(tt->PCI_actif==2)
+//if(tt->vi.a ==0)
+	{
+	if(((tt->vi.temps_cntl>>19)&1)) 	tt->vi.synchro[0]=10;else tt->vi.synchro[0]=0;
+	if(((tt->vi.temps_cntl>>25)&1)) 	tt->vi.synchro[1]=20;else tt->vi.synchro[1]=0;	// scan
+	if(((tt->vi.temps_cntl>>21)&1)) 	tt->vi.synchro[2]=30;else tt->vi.synchro[2]=0;	// subscan
+	if(((tt->vi.temps_cntl>>22)&1)) 	tt->vi.synchro[3]=40;else tt->vi.synchro[3]=0;
+	}
+
+}
+
+
+
+
+
+void	depou_un_mot_24_bit(tmtc* tt)
+{
+// -----------------   traitement d'une valeur ADC lue (typique 10 kHz)  --------------------------------
+//------------------   appellé pour  tt->vi.a==0  avant lecture du bit correspondant   --------------
+register long R1;
+int j,n,p;
+n=tt->reglage.horloge.nb_mesures;
+
+
+if(tt->PCI_actif==2)
+    for(j=0;j<nb_max_bolo;j++)  
+	{
+	int q;
+	q=tt->vi.i-1;if(q<0) q=n-1;  // parceque tt->vi.i vaut 0 pour le dernier point
+//			tt->vi.mot[j]=	0x800 -	(q-(n/2)) * (((double)j+10.) * 0.1 * (double)((tt->vi.temps_cntl>>15)&0x1f)) ;	//  sans carte : mot fini sans erreur
+	tt->vi.mot[j]=	0x800 -	(q-(n/2)) * (int)(5.*((double)j+5.) * cos(0.01*(double)(tt->vi.temps_cntl>>8))) ;	//  sans carte : mot fini sans erreur
+	tt->vi.mot[j]+=	((int)(random(0)*256.)&0xff) ;		//  bruit aléatoire 8 bits
+//			tt->vi.mot[j]=	0x800 +	((int)(random(0)*3.)&0x3f) ;		//  bruit aléatoire 3 bits
+	if(q>=n/2)	tt->vi.mot[j]+=0x1000;			// phase
+	}
+
+
+
+for(j=0;j<nb_max_bolo;j++)
+	{
+// --------------- pour   MLPA ou  BEBO voie zero: je calcule la detection synchrone par soft: ------------
+	if ( ( !parametr.bolo[j].bolo_bebo ) ou ( !parametr.bolo[j].bolo_num ) ) 	
+		{
+		if( (  (tt->ds.ii[j]>n/2) &&  (!(tt->vi.mot[j]&0x1000)) ) ou (tt->ds.ii[j]>n) ) 
+				tt->ds.ii[j]=0;		// calage de la phase sur la phase mesurée
+		
+		R1=( tt->vi.mot[j]&0xfff ) * ( tt->ds.dstable[tt->ds.ii[j]] );	// calcul de la D.S.
+		tt->ds.sommeA[j]+=R1;	tt->ds.sommeB[j]+=R1;					// somme dans les deux tables
+		tt->ds.ii[j]++;				//  avance la phase propre de chaque bolometre  ii avance de 0 à n-1
+		}
+				
+
+
+//---------------------------   remplissage table affichage une periode dans block tm  --------------------
+
+	p=tt->vi.i-1;if ( p<0)  p=n-1;
+	if( ( !parametr.bolo[j].bolo_bebo ) ou ( !parametr.bolo[j].bolo_num ) ou ( parametr.bolo[j].bolo_num==tt->vi.numbol) )	
+			{
+			tt->tm.btm[tt->tm.pos_ecrit].bol_per[j][p]=tt->vi.mot[j]<<3;		// je lit le dernier point pour i=0,  que j'ecrit en p=n-1 
+			tt->tm.btm[tt->tm.pos_ecrit].flag_bolo[j]=1;
+			}
+//---------------------------   reset du mot avant mesure point suivant  --------------------
+
+	tt->vi.mot[j]=0;	
+
+//---------------------------  pour BEBO : somme et changement de signe pour calcul D.S.  --------------------
+
+	if( (tt->vi.i==0) &&  parametr.bolo[j].bolo_bebo  && parametr.bolo[j].bolo_num  )   
+			{	tt->ds.sommeB[j] = -tt->ds.sommeB[j];tt->ds.sommeA[j] += tt->ds.sommeB[j];}
+
+	if( (tt->vi.i==(n/2))  &&  parametr.bolo[j].bolo_bebo  && parametr.bolo[j].bolo_num  )
+			tt->ds.sommeB[j] += tt->ds.sommeA[j];
+	}
+
+
+if(tt->vi.i==0)			sauvedata(tt,tt->ds.sommeA);			// apres lecture et sommation du dernier point		
+if(tt->vi.i==(n/2))		sauvedata(tt,tt->ds.sommeB);			
+}
+
+
+void sauvedata(tmtc* tt,long * somme_ds)
+{
+int j,u;
+
+tt->vi.temps_cntl ++;
+
+
+//------------------  ecrit table telemesure  tm
+u=tt->tm.pos_ecrit;
+
+
+tt->tm.btm[u].temps_cntl[tt->vi.pos_block_tm]=tt->vi.temps_cntl;
+GetDateTime(&tt->tm.btm[u].temps_mac[tt->vi.pos_block_tm]);
+
+tt->tm.btm[u].chauf_regul=tt->vi.reg.cc;
+
+
+for(j=0;j<nb_max_bolo;j++)
+			{
+			if( (!parametr.bolo[j].bolo_bebo) ou !parametr.bolo[j].bolo_num )
+				{						//  pour une MLPA  ou voie 0 d'une BEBO
+				tt->tm.btm[u].don[tt->vi.pos_block_tm].don_bolo[j] = (somme_ds[j]<<4) / (long)tt->ds.dsnorme;
+				}
+			else
+				{						//  pour une BEBO
+				//   données dans tt->tb.x -> +-22 bits  au maxi pour dsnorme= 128 ( nb total de points / periode )
+				// apres division (128=7bits),  reste +-15 bit soit un entier short signé   
+				tt->tm.btm[u].don[tt->vi.pos_block_tm].don_bolo[j] = somme_ds[j]  / (long)tt->ds.dsnorme;
+				}						
+			}
+
+for(j=0;j<nb_sync;j++)			tt->tm.btm[u].don[tt->vi.pos_block_tm].sync[j]=tt->vi.synchro[j];		
+
+tt->signal_scan_immediat=tt->vi.synchro[sync_scan];
+tt->vi.pos_block_tm++;
+
+if(tt->vi.pos_block_tm>=nb_per_block*2)		// a la fin d'un block de telemesure
+	{
+	tt->tm.btm[u].reglage=tt->reglage;						//  copie l'etat bolo courant
+	
+	tt->vi.pos_block_tm=0;
+	
+	
+	
+	u++; if(u>=longueur_table_tm) u=0;
+	tt->tm.pos_ecrit=u;
+	
+	if(tt->tm.pos_ecrit==tt->tm.pos_lit)  ecrit_erreur(err_pile_pleine);
+	
+	}
+//------------------   fin ecriture table telemesure  tm
+
+
+tt->vi.reg.valeur+=somme_ds[tt->vi.reg.pid.num_bolo-1];	// integration de la valeur pour la regul
+
+
+for(j=0;j<nb_max_bolo;j++)	somme_ds[j]=0;		//	raz table données pour la suite
+for(j=0;j<nb_sync;j++)		tt->vi.synchro[j]=0;	// raz table des synchro pour la suite	
+for(j=0;j<nb_max_bolo;j++)	tt->tm.btm[u].flag_bolo[j]=0;
+
+
+
+raz_periodique(tt);
+regul(tt);
+decode_telecommande(tt);
+
+tt->vi.flag_ecriture_data++;		// bon pour envoi
+}
+
+
+//*****************************************************************************************
+//											***
+#endif		//--------------------------------------------------------------------	***
+//											***
+//*****************************************************************************************
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/tache_regul.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/tache_regul.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/tache_regul.c	(revision 637)
@@ -0,0 +1,124 @@
+#include "manip.h"
+#include "choix_acquisition.h"
+#include "archeops.h"
+#include "choix_param.h"
+#include "structure.h"
+#include "carte_acqui.h"
+#include "carte_pci.h"
+#include "tm.h"
+#include "tache.h"
+#include "bolo.h"
+
+
+//*****************************************************************************************
+//											***
+#ifdef _diabolo	//---------   pour  Diabolo    ------------------------------	***
+//											***
+//*****************************************************************************************
+
+
+
+
+
+double 	deglitch_regul(double x);
+double 	deglitch_regul(double x)
+{
+double dx;
+static int debut=1;
+static double X,DX;
+//return(x);			//  ligne a retirer pour deglitcher
+
+if(debut) {	X=0;DX=1000;	debut=0;	}
+
+dx=x-X; if(dx<0)  dx=-dx;
+if( dx > DX ) 
+		{
+		x=X;
+		DX *=1.1;
+		}
+else	{
+		DX=0.9 * DX + 0.5 * dx +1 ; 
+		X=x;
+		}		// en moyenne, 5 fois l'interval moyen
+return(x);
+}
+
+
+void  tache_regul(tmtc* tt)
+{
+block_tc  btc;
+btc=tt->tc.btc[tt->tc.pos_lit];
+tt->vi.reg.pid=* ( (regul_p_i_d*)    &btc );
+}
+
+
+void	regul(tmtc* tt)
+{
+int j,cc;
+double i,ecart;
+
+
+if(tt->vi.reg.pid.nb_mes<1) return;		// pas de regul si repetition <1
+tt->vi.reg.compteur++;
+if( (tt->vi.reg.compteur>0) && (tt->vi.reg.compteur< (tt->vi.reg.pid.nb_mes*4+4) ) )	return;
+
+ecart=-deglitch_regul(tt->vi.reg.valeur);
+ecart/=4*tt->vi.reg.pid.nb_mes;		//  valeur mesurée et moyennée apres repetition
+ecart=ecart/(long)tt->ds.dsnorme;
+ecart=((1e5*(double)ecart)/(65536.*tt->reglage.gain[tt->vi.reg.pid.num_bolo-1]));
+tt->vi.reg.valeur=(long)ecart;
+i=tt->vi.reg.tint;							
+i=i+ecart*tt->vi.reg.pid.i;					//	terme intergral
+if(i>4000) i=4000;
+if(i<0) i=0;
+cc=tt->vi.reg.pid.p*ecart+i+(ecart-tt->vi.reg.anc_ecart)*tt->vi.reg.pid.d;	//	calcul de la commande
+if(cc>4000) cc=4000;
+if(cc<0) cc=0;
+if(!tt->vi.reg.pid.chauf) cc=0; 
+//cc=tt->vi.reg.pid.p;
+tt->vi.reg.cc=cc;
+cc=( 0x0fff - cc ) & 0x0fff;		//  12 bits  avec inverser la polarité 
+if( (tt->PCI_actif==1) && ( tt->vi.flag_ecriture_data>2 ) )		//    rien en attente d'ecriture: j'ecris direct en interruption		
+	{
+	ecrit_carte(tc_regul );			// ecrit bolo 251  -->  ecrit regulation
+	ecrit_carte( ( (tt->vi.reg.pid.chauf&3 ) <<6 ) |  (cc>>6)  );		// ecrit relais (2 bits) + 6 bits de data 
+	ecrit_carte( (cc<<2) |  2  );								// ecrit  6 bits de data + 1  +  0	
+	for(j=0;j<7;j++)	ecrit_carte(0);				// reste 7 mots à ecrire 
+	tt->vi.flag_ecriture_data=0;
+	}
+		
+tt->vi.reg.compteur=0;
+tt->vi.reg.valeur=0;
+tt->vi.reg.anc_ecart=(int)ecart;
+tt->vi.reg.tint=i;
+}
+
+void	raz_periodique(tmtc* tt)
+{
+/*****************************  ne  fait  rien  !!!!!!!!
+int j;
+if(tt->reg.per_raz<1) return;		// pas de raz si periode demandee = 0
+tt->reg.nb_raz++;
+if( (tt->reg.nb_raz>0) && (tt->reg.nb_raz< (tt->reg.per_raz) ) )	return;
+
+
+if( tt->vi.flag_ecriture_data>2 )	//   j'ecris direct en interruption sans regrader si autre chose est en cours d'ecriture		
+	{
+	ecrit_carte(23 );			// ecrit bolo 23  -->  bebo A
+	ecrit_carte( 16);			// ecrit a 
+	for(j=0;j<8;j++)	ecrit_carte(0);				// reste 8 mots à ecrire 
+	}
+
+tt->tb.synchro[2][tt->tb.pos_ecrit]=999;		
+tt->reg.nb_raz=0;
+*/
+}
+
+
+//*****************************************************************************************
+//											***
+#endif		//--------------------------------------------------------------------	***
+//											***
+//*****************************************************************************************
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/tache_transputer.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/tache_transputer.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/tache_transputer.c	(revision 637)
@@ -0,0 +1,203 @@
+#include "manip.h"
+#include "choix_acquisition.h"
+#include "archeops.h"
+#include "choix_param.h"
+#include "structure.h"
+#include "tm.h"
+#include "tache.h"
+#include "bolo.h"
+#include "carte_acqui.h"
+#include "carte_pci.h"
+
+
+//*****************************************************************************************
+//											***
+#ifdef _archeops		//---------   pour  Archeops  sans transputer  -------	***
+#ifdef _sans_transputer		//---------   pour  Archeops avec ctb    -------------	***
+//											***
+//*****************************************************************************************
+//
+//
+//
+//  lit le tableau de données brute recue des bebo via le ctb
+//
+//  ensuite, prepare les blocs formaté type archeops pour les envoyer au programme principal
+//
+
+//
+
+
+
+def_long_block
+def_nom_block
+
+#define avance_erreur  {tt->te.pos_ecrit++; if(tt->te.pos_ecrit>=long_table_err) tt->te.pos_ecrit=0;}
+#define	ecrit_erreur(xx)	{avance_erreur;tt->te.err[tt->te.pos_ecrit]=900+(xx);}
+
+void fabrique_block_type_data_brute(tmtc* tt,int num_block);
+void fabrique_block_type_une_periode(tmtc* tt,int num_block);	
+void fabrique_block_type_bolo(tmtc* tt,int num_block);	
+
+void	sauve_un_block(tmtc* tt);
+
+
+void init_tache(void)
+{
+int i,j;
+
+tt->vi.a=0;
+tt->vi.b=0;
+tt->vi.c=0;
+
+
+j=0;
+for(i=0;i<nb_type_blocks;i++)	if (long_block[i]> j ) j=long_block[i];
+printf(" taille maxi du block de telemesure = %d  //  on reserve %d octets par block \n",
+		j,sizeof(block_type_modele));
+if(j>sizeof(block_type_modele)) erreur("block_type_modele trops petit");
+}
+
+
+
+#define	test_val(xx)	{if(octet_a_lire!=(xx)) {if(octet_a_lire==(debut_block_mesure&0xff)) tt->vi.a=1; else tt->vi.a=0;}}
+	
+
+void lecture_fifo(void* tx)					// appellé directement pour acquisition en interuptions
+{
+register unsigned long RR;
+tmtc* tt=(tmtc*)tx;
+long lec_fifo=0		//  compteur nombre de points lut en une fois dans la fifo
+int max_fifo;
+
+if(tt->PCI_actif==1)	max_fifo=4000;	//  3000  points maxi par interruption (10ms)  soit (3.3µs)
+	 else		max_fifo=200;	//  ((1000)faux )  points maxi par interruption (10ms)  soit  (20µs)
+
+int max_buf=nb_byte_mot*tt->reglage.horloge.nb_mesures*nb_per_block;	
+static long	num_block=0;
+
+while(1)
+	{
+	if(tt->PCI_actif==1)	{lit_carte;	if(rien_a_lire)	break;}//  fifo vide  ->  retour  ->  sort du while
+	lec_fifo++;
+//	tt->vi.bkb[tt->vi.a^3]=octet_a_lire;	// dans l'ordre: 3 2 1 0 7 6 5 4 11 10 9 8 ...
+	tt->vi.bkb[tt->vi.a]=octet_a_lire;	// dans l'ordre: 3 2 1 0 7 6 5 4 11 10 9 8 ...
+	tt->vi.a++;
+	if(tt->vi.a>=max_buf)	
+		{
+		num_block++;
+#ifdef	transmet_data_brute
+		fabrique_block_type_data_brute(tt,num_block);
+#endif
+		fabrique_block_type_une_periode(tt,num_block);
+		fabrique_block_type_bolo(tt,num_block);
+		tt->vi.a=0;
+		}	
+	if(lec_fifo>max_fifo) break; 
+	}
+if(lec_fifo > tt->nb_lec_fofo_int)  	tt->nb_lec_fofo_int=lec_fifo;
+if(!tt->nb_lec_fofo_ext)  		{tt->nb_lec_fofo_ext=tt->nb_lec_fofo_int;tt->nb_lec_fofo_int=0;}
+}
+
+//______________________________________________________________________________________________//
+//   je traite le block brut tel que recut de la bebo par le ctb				//
+//	ce block contient    nbper   periodes de mesure						// 
+// 	Je rempli un block tm  en position	u=tt->tm.pos_ecrit				//
+//	Le block s'ecrit: 			tt->tm.btm[u]					//
+//______________________________________________________________________________________________//
+
+
+#ifdef	transmet_data_brute
+void fabrique_block_type_data_brute(tmtc* tt,int num_block)
+{
+int i;
+block_type_data_brute  * blk	=  (block_type_data_brute*)   &(tt->vi.btt);	  
+
+// pour 23 coups / demi-periode   et  nb_per=12  ( 2 bebo a 6 voies completes)  
+//  on a 46 mesures par periode   et  276 mesures pour 6 periodes  et 552 mesures dans le block  	
+for(i=0;i<nb_per_block*tt->reglage.horloge.nb_mesures*nb_byte_mot;i++)	
+		{
+		blk->data[i]=tt->vi.bkb[i];
+		} 
+		
+valide_block((block_type_modele*)blk,block_data_brute,num_block);
+sauve_un_block(tt);
+}
+#endif
+
+
+void fabrique_block_type_une_periode(tmtc* tt,int num_block)
+{
+int i,k;
+block_type_une_periode  * blk	=  (block_type_une_periode*)   &(tt->vi.btt);	  
+
+/* pour 23 coups / demi-periode   et  nb_per=12  ( 2 bebo a 6 voies completes)  */
+/*  on a 46 mesures par periode   et  276 mesures pour 6 periodes  et 552 mesures dans le block  	*/
+//for(k=0;k<nb_per_block;k++)		/* boucle sur les periodes entières   */
+for(k=0;k<6;k++)		/* boucle sur les periodes entières   */
+	{
+		/* spd vaut 1 durant les 6 premieres mesures    */
+//	if( spd(k*reglage.horloge.nb_mesures) != (k<6)  )	blk->erreur_sync+=1000;
+	for(i=0;i<tt->reglage.horloge.nb_mesures;i++)	
+		{
+		blk->bol_per[k][i]=(0xff & tt->vi.bkb[nb_byte_mot*(k*tt->reglage.horloge.nb_mesures+i)+1])
+			| (0xff00 & ((tt->vi.bkb[nb_byte_mot*(k*tt->reglage.horloge.nb_mesures+i)+2])<<8));
+//		if( (cpp(k*reglage.horloge.nb_mesures+i) != (i*2)/reglage.horloge.nb_mesures ) ) blk->erreur_sync++;*/
+		} 
+	}
+//for(i=0;i<max_buf;i++)	blk->data[i]=tt->vi.bkb[i];
+
+valide_block((block_type_modele*)blk,block_une_periode,num_block);
+sauve_un_block(tt);
+}
+
+
+void fabrique_block_type_bolo(tmtc* tt,int num_block)
+{
+int i,k;
+block_type_bolo  * blk	=  (block_type_bolo*)   &(tt->vi.btt);	  
+
+
+for(k=0;k<nb_per_block*2;k++)		/* boucle sur les demi entières   */
+	{
+	for(i=0;i<nb_max_bolo;i++)	
+		{
+		blk->data_bolo[i][k]=
+			(0xff & tt->vi.bkb[nb_byte_mot*(k*tt->reglage.horloge.nb_mesures/2+i+1)+3])
+			| (0xff00 & (tt->vi.bkb[nb_byte_mot*(k*tt->reglage.horloge.nb_mesures/2+i+1)+4]<<8))
+			| (0x1f0000 & (tt->vi.bkb[nb_byte_mot*(k*tt->reglage.horloge.nb_mesures/2+i+1)+5]<<16));
+		} 
+	}
+		
+
+valide_block((block_type_modele*)blk,block_bolo,num_block);
+sauve_un_block(tt);
+}
+
+
+
+//______________________________________________________________________________________________//
+//   lit le block brut tel que recut par telemesure dans  tt->vi.btt				//
+//	ce block contient  ??  periodes de mesure						// 
+// 	Je rempli un block tm  en position	u=tt->tm.pos_ecrit				//
+//	Le block s'ecrit: 			tt->tm.btm[u]					//
+//______________________________________________________________________________________________//
+
+void	sauve_un_block(tmtc* tt)
+{
+int u;
+u=tt->tm.pos_ecrit;
+tt->tm.btm[u].tmtrx=tt->vi.btt;
+u++; if(u>=longueur_table_tm) u=0;
+tt->tm.pos_ecrit=u;
+}
+
+//*****************************************************************************************
+//											***
+#endif		//--------------------------------------------------------------------	***
+#endif		//--------------------------------------------------------------------	***
+//											***
+//*****************************************************************************************
+
+
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/telecommande.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/telecommande.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/telecommande.c	(revision 637)
@@ -0,0 +1,280 @@
+#include "diabolo.h"
+#include "carte_acqui.h"
+#include "carte_pci.h"
+#include "fenetres_diabolo.h"
+#include "acqui.h"
+#include "tm.h"
+
+
+	// telecommande une chaine de 10 mots pour Diabolo
+	//		une chaine de 8 mots pour Archeops et Planck
+	//		pour les telecommandes reduites, seuls 4 mots sont utiles
+
+#define	verif_bolo {bolo=tc[2];if(bolo>nb_max_bolo) {printf("erreur: telecommande pour bolo=%d >nb_max_bolo \n",bolo);return;}}
+
+void	relit_telecommandes_reduites(unsigned char* tc);
+
+
+void	relit_telecommandes_reduites(unsigned char* tc)
+{
+int bolo,a,i;
+if(tc[0]!=tc_reduite)	return;
+printf("relit une telecommande reduite :  ");
+switch(tc[1])
+	{
+	case	tc2_bolo_dacV:
+			verif_bolo;a=dac_V(gg->reglage.bolo[bolo]);
+			a=new_val_dac(a,tc[3]);
+			gg->reglage.bolo[bolo].mot1=(gg->reglage.bolo[bolo].mot1&0xfff000ff) | (a<<8);
+			printf(" nouvelle valeur dacV=%d \n",a);
+			break;
+
+	case	tc2_bolo_dacI:
+			verif_bolo;a=dac_I(gg->reglage.bolo[bolo]);
+			a=new_val_dac(a,tc[3]);
+			gg->reglage.bolo[bolo].mot1=(gg->reglage.bolo[bolo].mot1&0x000fffff) | (a<<20);
+			printf(" nouvelle valeur dacI=%d  \n",a);
+			break;
+
+	case	tc2_bolo_gain:
+			verif_bolo;
+			gg->reglage.bolo[bolo].mot1=(gg->reglage.bolo[bolo].mot1&0xffffff00) | tc[3];
+			
+			printf(" nouvelle valeur gain=%x  \n",tc[3]);
+			break;
+
+	case	tc2_bolo_dacT:
+			verif_bolo;a=dac_T(gg->reglage.bolo[bolo]);
+			a=new_val_dac(a,tc[3]);
+			gg->reglage.bolo[bolo].mot2=(gg->reglage.bolo[bolo].mot2&0xfff000ff) | (a<<8);
+			printf(" nouvelle valeur dacT=%d  \n",a);
+			break;
+
+	case	tc2_bolo_dacL:
+			verif_bolo;a=dac_L(gg->reglage.bolo[bolo]);
+			a=new_val_dac(a,tc[3]);
+			gg->reglage.bolo[bolo].mot2=(gg->reglage.bolo[bolo].mot2&0x000fffff) | (a<<20);
+			printf(" nouvelle valeur dacL=%d  \n",a);
+			break;
+
+	case	tc2_bolo_voie:
+			verif_bolo;
+			gg->reglage.bolo[bolo].mot2=(gg->reglage.bolo[bolo].mot2&0xffffff00) | tc[3];
+			
+			printf(" nouvelle valeur voie=%d  \n",tc[3]);
+			break;
+	case	tc2_horloge:
+			switch(tc[2])
+				{
+				case	tc3_periode	:	
+						gg->reglage.horloge.periode=tc[3];	
+						printf(" nouvelle valeur periode=%d  \n",tc[3]);
+						break;					
+				case	tc3_nb_mesures	:	gg->reglage.horloge.nb_mesures=tc[3];	
+						printf(" nouvelle valeur nb_mesures=%d  \n",tc[3]);
+						break;		
+				case	tc3_temp_mort	:	gg->reglage.horloge.temp_mort=tc[3];	
+						printf(" nouvelle valeur temp_mort=%d  \n",tc[3]);
+						break;		
+				case	tc3_flag	:	gg->reglage.horloge.flag=tc[3];	
+						printf(" nouvelle valeur flag=%d  \n",tc[3]);
+						break;		
+				default	:	
+					i=tc[2]-tc3_vitesse;
+					if( (i>=0) && (i<nb_type_blocks) )
+						gg->reglage.vitesse[i]=tc[3];
+					printf(" nouvelle valeur block%d vitesse %d \n",i,tc[3]);
+					break;
+				}
+	case	tc2_regul:
+			{
+			char * pt;
+			printf(" tc reduite: ecrit regul val=%d  pour position  %d \n",tc[3],tc[2]);
+			pt=(char*)(&(gg->reglage.regul[0]));
+			pt=pt+tc[2];	
+			if(tc[2]<nombre_de_regul*sizeof(regul_bolo))	*pt=tc[3];
+				else		printf("erreur telecommande reduite tc2_regul \n");
+			}
+			break;
+				
+				
+				
+	case	tc2_auto_bolo:
+			{
+			char * pt;
+			printf(" tc reduite: ecrit autobolo val=%d  pour position  %d \n",tc[3],tc[2]);
+			pt=(char*)(&(gg->reglage.autom[0]));
+			pt=pt+tc[2];
+			if(tc[2]<nombre_de_voies*sizeof(auto_bolo))	*pt=tc[3];
+				else		printf("erreur telecommande reduite tc2_auto_bolo \n");
+			}
+			break;
+				
+				
+	case	tc2_auto_dilu:
+			{
+			char * pt;
+			printf(" tc reduite: ecrit auto_dilu val=%d  pour position  %d \n",tc[3],tc[2]);
+			pt=(char*)(&(gg->reglage.dilu));
+			pt=pt+tc[2];
+			if(tc[2]<sizeof(auto_dilu))	*pt=tc[3];
+				else		printf("erreur telecommande reduite tc2_auto_bolo \n");
+			}
+			break;
+				
+				
+	default	:	printf("telecommande reduite type inconnu \n\n");
+			son(130);
+			break;
+	}
+rafraichis_fenetres();
+}
+
+
+void	emission_tc_reduite(unsigned char mot1,unsigned char mot2,unsigned char mot3)
+{
+unsigned char mot_tc[10];
+mot_tc[0]	=	tc_reduite;
+mot_tc[1]	=	mot1;
+mot_tc[2]	=	mot2;
+mot_tc[3]	=	mot3;
+emission_telecommande(tc_dir_transputer,mot_tc);
+}
+
+
+void    emission_telecommande(int direction,void* tc)
+{
+char *mot=tc;
+int j;
+
+//*****************************************************************************************
+//											***
+#ifdef _archeops	//---------   pour  Archeops    ------------------------------	***
+//											***
+//*****************************************************************************************
+//     direction  contient un octet de direction: bebo ou transputer
+//	la commande elle même est dans mot[0..7]
+
+#define	 delai(xx)	{long uu;for(uu=0;uu<(10000L*(long)xx);uu++){};}
+#define  tc_char(x)	{delai(20);if(tt->PCI_actif==1) ecrit_carte((x)&0xff);}  
+#define	 tc_int(x)	{tc_char(x);tc_char(x>>8);tc_char(x>>16);tc_char(x>>24);}
+//printf("telecommande: ");
+
+
+
+//*****************************************************************************************
+#ifdef _sans_transputer		//---------   pour  Archeops avec ctb    -------------	***
+//*****************************************************************************************
+if((mot[0]&0xff) ==  (tc_horloge&0xff)  )
+
+	{
+	printf("horloge  tc_transputer sans transputer:\n");
+					mot[1]=83-mot[1];	// periode
+					mot[2]=((mot[2]+5)-29 + 2* (((mot[2]+5)-1)/6) );
+					mot[2]=mot[2]+(mot[4]<<5); /* +   les trois flags		*/
+					
+					mot[4]=0;
+					for(j=0;j<8;j++)	
+						{
+						printf(" %x ",mot[j]&0xff);
+						tc_char(mot[j]);
+						}
+					printf(" \n");
+	}
+
+else	{
+	printf("tc_bebo directe:");
+	for(j=0;j<8;j++)	
+						{
+						printf(" %x ",mot[j]&0xff);
+						tc_char(mot[j]);
+						}
+	printf(" \n");
+	}
+//*****************************************************************************************
+#else		//---------   pour Archeops avec transputer    -----------------------	***
+//*****************************************************************************************
+switch(direction)
+	{
+	case	tc_dir_transputer	:	//printf("tc_transputer:\n");
+			if( ((mot[0]&0xff)!=tc_reduite) && gg->flag_tc_reduite)
+				{
+				printf("attention: une telecommande normale !!\n\n");
+				son(130);
+				select(printf_ref);
+				}
+//			pour test en mode simulation sans le retour des blocks reglage du transputer
+			if(tt->PCI_actif==2)	relit_telecommandes_reduites(tc);
+			else	{
+				tc_char(0x11);	//  synchro
+				tc_int(debut_telecommande);
+				for(j=0;j<8;j++)	tc_char(mot[j]);
+				tc_int(fin_telecommande);
+				tc_char(0x00);tc_char(0x00);	//  synchro
+				}
+			break;
+
+	case	tc_dir_reset_epld	:	//printf("tc_reset_epld:\n");
+		
+			for(j=0;j<14;j++) tc_char(j);
+			tc_char(1);tc_char(1);
+			tc_char(0x00);tc_char(0x00);	//  synchro
+
+			break;
+
+	default	:	break;
+	}
+
+
+//*****************************************************************************************
+#endif		//--------------------------------------------------------------------	***
+//*****************************************************************************************
+
+//  delai pour separer les télécommandes (archeops, transputer ou non)
+if(tt->PCI_actif==1) delai(1000);
+
+#endif		//--------------------------------------------------------------------	***
+
+
+//*****************************************************************************************
+//											***
+#ifdef _diabolo		//---------   pour  Diabolo    ------------------------------	***
+//											***
+//*****************************************************************************************
+
+int q;
+
+// 	emission dans la table tc
+//	la commande elle même est dans mot[0..9]
+//	le parametre direction n'est pas utilisé
+
+if(!litD(fenetre_acquisition,e_tache_inter,0L) )    // ecriture forcée  directe sur carte pci
+	{
+	for(j=0;j<5;j++)   printf(".");
+	printf(" ecriture forcée des données \n");
+	for(j=0;j<10;j++)	ecrit_carte(mot[j]);
+	son(1);
+	}
+
+
+else	{
+	tt->tc.btc[tt->tc.pos_ecrit]=*((block_tc*)tc);
+	tt->tc.pos_ecrit++; if(tt->tc.pos_ecrit>=longueur_table_tc) tt->tc.pos_ecrit=0;
+	q=tt->tc.pos_ecrit-tt->tc.pos_lit;	if (q<0) q+=longueur_table_tc;
+	
+//	printf(" liste de telecommande : %d chaines :",q);
+//	printf(" %d %d %d %d %d %d %d %d %d %d\n",mot[0],mot[1],mot[2],mot[3],mot[4],mot[5],mot[6],mot[7],mot[8],mot[9]);
+//	if(mot[0]==tc_regul) printf("telecommande regul: %d %d %d %d %d %d\n",mot[1],mot[2],mot[3],mot[4],mot[5],mot[6]);
+	}
+
+
+
+//*****************************************************************************************
+//											***
+#endif		//--------------------------------------------------------------------	***
+//											***
+//*****************************************************************************************
+
+}
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/timer.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/timer.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/timer.c	(revision 637)
@@ -0,0 +1,141 @@
+#include <manip.h>
+#include "montimer.h"
+
+
+#ifndef powerc
+//$$#include <A4Stuff.h>
+#endif
+
+
+
+
+//Globals
+
+
+#ifndef powerc
+void montimer(void);
+#else
+void montimer(TMInfoPtr	recPtr);
+#endif
+
+TMInfo				myTMInfo;
+
+
+TMInfoPtr setuptimer(long delai,void (*execute)(void*),void * mastructure)
+{
+	TMInfoPtr	myTMInfopt=malloc(sizeof(TMInfo));
+	
+		//This statement will work with 68K or PPC 
+	
+	myTMInfopt->atmTask.tmAddr =  NewTimerProc(montimer);
+	myTMInfopt->atmTask.qLink = NULL;
+	myTMInfopt->atmTask.qType = 0;
+	myTMInfopt->atmTask.tmCount = 0L;
+	myTMInfopt->atmTask.tmWakeUp = 0L;
+	myTMInfopt->atmTask.tmReserved = 0L;
+	myTMInfopt->mastructure = mastructure;
+	myTMInfopt->delai=delai;
+	myTMInfopt->execute=execute;
+
+	
+#ifdef  powerc 
+		//You don't need to do anything.  We will ignore the tmRefCon field.
+#else
+			//Store A4 into the TMInfo struct
+			//This is the best way in this situation
+//$$	myTMInfopt->tmRefCon = GetCurrentA4();
+	myTMInfopt->A5=SetCurrentA5();
+#endif //powerc
+	
+	InsXTime((QElemPtr)myTMInfopt);
+	PrimeTime((QElemPtr)myTMInfopt, delai);
+return(myTMInfopt);
+}
+
+
+
+void supprimetimer(TMInfoPtr  myTMInfopt)
+{
+if(myTMInfopt)
+	{
+	TimerUPP tt=myTMInfopt->atmTask.tmAddr;
+	DisposeRoutineDescriptor(tt);
+	RmvTime((QElemPtr)myTMInfopt);
+	free(myTMInfopt);
+	myTMInfopt=0;
+	}
+}
+
+
+
+void stoptimer(TMInfoPtr  myTMInfopt)
+{
+if(myTMInfopt)	myTMInfopt->delai=0;
+}
+
+void redemarretimer(TMInfoPtr  myTMInfopt,long delai)
+{
+if(myTMInfopt)
+	{
+	myTMInfopt->delai=delai;
+	PrimeTime((QElemPtr)myTMInfopt,myTMInfopt->delai);
+	}
+}
+
+
+/*-----------------   prog interruption   -----------------------*/
+
+
+#ifndef powerc
+
+	//The 68K resource needs this glue to move the TMInfo pointer from A1 to A0 where 
+	//the Toolbox put it.  N.B. This is very different from the pascal glue provided in 
+	//IM 6 TimeManager chapter, but then Pascal is very different from C.
+	
+asm  inline TMInfoPtr GetTMInfo( void )
+{
+	move.l A1, A0;	
+	rts;
+}
+
+
+	//This function is being called at interrupt time so we can't move memory.  All we can
+	// do is to set a global flag which our Drawing proc will detect.
+void montimer(void)
+{
+		//Get a pointer to our TMInfo so we can prime it again
+	TMInfoPtr	recPtr = GetTMInfo();
+	long		myDelay = 1000; //one sec.
+	
+		//Sets A4 to the value in tmRefCon which was set to point to A4 at non-interrupt time.
+//$$	long 		oldA4 = SetA4(recPtr->tmRefCon);
+	long		oldA5 =	 SetA5(recPtr->A5);			/*A5 du programme*/
+
+	(recPtr->execute)(recPtr->mastructure);
+	PrimeTime((QElemPtr)recPtr,recPtr->delai);
+	
+		//Restore the register state
+//$$	(void)SetA4(oldA4);
+	SetA5(oldA5);					/*restore A5*/		
+
+}
+	
+
+
+#else
+
+	//The PowerPC version of a TimerUPP has the TMInfo pointer as a parameter.  Whew! No glue.
+	//In fact, no need to set up global space either!
+void montimer(TMInfoPtr	recPtr)
+{
+	
+	(recPtr->execute)(recPtr->mastructure);
+	if(recPtr->delai) PrimeTime((QElemPtr)recPtr,recPtr->delai);
+
+}
+#endif //powerc
+
+
+
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/trace-DS.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/trace-DS.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/trace-DS.c	(revision 637)
@@ -0,0 +1,416 @@
+#include "diabolo.h"
+#include "bolo.h"
+#include "synchro.h"
+#include "fichier.h"
+#include "trace.h"
+#include "menu.h"
+
+
+	
+static int 		choix_DS=0;
+static	int		npt_DS=0;					//  nombre de points (periode) pour le calcul de la DS
+static	double		table_DS[2*max_points_DS];	//  table de detection synchrone, dupliquer en double longueur
+static  double		norme_DS;
+static  int		raz_parasite=2;
+
+
+void	exec_trace_DS_suite(int u);
+void 	trace_DS(double *y,int enregistre);
+void	calcul_table_DS(double periode);
+
+#define degre(x)	((int)(x*180./3.14159))
+
+//  calcul ya  pendant la periode   ,  yb  a cheval sur 2 periodes  , yc= somme des deux
+
+
+void exec_trace_DS(int fen,int item,double valeur,...) 
+{
+static int u=-1;
+static flag_err=0;
+switch(item)
+    {
+    case ouverture	:	gg->trace_ouvert=gg->trace_ouvert | 4 ;
+ 	    			graph->ymin=-20;
+ 		   		graph->ymax=20;
+	    			graph->ypas=5;
+	    			graph->xmax=500;
+	    			graph->xpas=50;
+    				graph->taille_graduations=7;
+//   				graph->flag_tracen=0;
+//   				for(j=0;j<nb_max_bolo;j++)	if( (j<10) && gg->bolo_type[j])	graph->flag_tracen+=(1<<j);
+//				graph->flag_tracen+=(1<<nb_max_bolo);	//  voie pour affichage du scan 
+
+    case ds_choix_DS	:		    
+    case ds_phase	:
+    case ds_phase+1000	:
+    case ds_temps_mort	:	
+    case ds_temps_mort+1000 :
+    				calcul_table_DS(synchro_periode);
+				break;
+
+    case ds_raz_parasite :	if (valeur)	raz_parasite=1;		//  soustraction
+    				else		raz_parasite=2;		//  plus de soustraction
+				printf("remise a zero signal parasite \n");
+    				break;
+							
+	case ds_raz	:	gg->temps_origine=gg->periode_echantillonage*(double)gg->temps_cntl;
+    				efface(fen);	
+    				break;
+
+
+	case ds_debut	:	if( (u<8*npt_DS/10) ou (u>15*npt_DS/10)	)	
+					{
+					if(!flag_err) {printf("erreur periode \n");flag_err=20;}
+					flag_err--;
+					}
+				else	flag_err=0;
+				while(u<npt_DS)	{exec_trace_DS_suite(u);u++;}	// pour finir la periode
+				u=0;
+
+
+	case ds_suite	:	if( (u>=0) && (u<npt_DS) ) exec_trace_DS_suite(u);
+				u++;
+				break;
+	
+	case ds_enregistre :	if(!fenetre(fenetre_enregistre_DS)) nouveauT(fenetre_enregistre_DS,0,"valeurs_DS");
+				trace_DS(0,1);
+				break;
+	
+
+	case fermeture	:	gg->trace_ouvert=gg->trace_ouvert & (255-4);	// enleve le 4 
+    				break;
+
+	default		:	break;
+	}
+
+}
+
+
+//   le trace de la detection synchrone passe par un appel a chaque point  avec u=0,1,2,.... , npt_DS-1
+//  
+//   la commande de trace sera faite par  exec_trace_DS_suite pour certaines valeures de u
+//  pour une detection avec trois positions qui se suivent, le parametre supplementaire pernum
+//  compte de 0 a 2. Il est remis a zero pour un appel de la fonction avec u=-1 (qui ne fait rien d'autre)
+
+//  la detection est accumulée simultanement dans deux registres y1 et y2 qui sont plotte simultanement.
+//  on a ainsi deux points par periode 
+
+ 
+void	exec_trace_DS_suite(int u)	// appellé quoiqu'il arrive avec u=0,1,2,.... , npt_DS-1
+{
+static double y[nb_max_bolo+1],y1[nb_max_bolo+1],y2[nb_max_bolo+1],bb[nb_max_bolo+1];
+int j;
+static double  phase_mesure[nb_max_bolo],confiance[nb_max_bolo],phase_memoire;
+
+switch(choix_DS)
+	{
+	case choix_DS_sinus_1f : 
+		
+		for(j=0;j<nb_max_bolo;j++)
+			{
+			y1[j]+= xbol(j)*table_DS[u];			//  le sinus
+			y2[j]+= xbol(j)*table_DS[u+npt_DS/4];		// dephase de pi/2 -> le cosinus
+			bb[j]+=	xbol(j)* (((double)(u%2))-0.5);		// estimation du bruit
+			}
+
+		if(u==npt_DS-1)
+			{
+			for(j=0;j<nb_max_bolo;j++)
+				{
+				phase_mesure[j]=atan2(y1[j],y2[j]);
+				confiance[j]=log((y1[j]*y1[j]+y2[j]*y2[j])/(bb[j]*bb[j]));
+				printf(" %d°(%2.1f)  ",degre(phase_mesure[j]),confiance[j]);
+				}
+			j=1;	// bolo pur mesurer la phase
+			phase_memoire=phase_mesure[j];
+			ecritD(fenetre_trace_DS,ds_phase,"%d°",degre(phase_memoire));
+			printf(": phase memoire=%g  \n",phase_memoire);
+			for(j=0;j<nb_max_bolo;j++)
+				{
+				y1[j]=sin(phase_memoire)*y1[j]+cos(phase_memoire)*y2[j];
+				}
+//			printf(" trace y1= %g , %g , %g , %g , %g \n",y1[0],y1[1],y1[2],y1[3],y1[4]); 
+			trace_DS(y1,0);
+			for(j=0;j<nb_max_bolo;j++)
+				{
+				y1[j]=0;y2[j]=0;bb[j]=0;
+				}
+			
+			}
+		
+		break;		
+				
+
+	case choix_DS_hacheur	:
+		
+		if( (u==npt_DS/8) ou (u==5*npt_DS/8) )		trace_DS(y1,0);
+			if( (u==3*npt_DS/8) ou (u==7*npt_DS/8) )	trace_DS(y2,0);
+
+		for(j=0;j<nb_max_bolo;j++)
+			{
+			y1[j]+= xbol(j)*table_DS[u];
+			y2[j]+= xbol(j)*table_DS[u];
+			}
+		break;
+	
+
+	case choix_DS_secondaire	:	if(u==npt_DS/4) 	trace_DS(y1,0);
+				if(u==3*npt_DS/4) 	trace_DS(y2,0);
+
+				for(j=0;j<nb_max_bolo;j++)
+					{
+					y1[j]+= xbol(j)*table_DS[u];
+					y2[j]+= xbol(j)*table_DS[u];
+					}
+				break;
+	
+	case choix_DS_prisme	:	if(u==npt_DS/6)		{y[2]=y1[2];y1[2]=0;trace_DS(y,0);}	// phase 1  (bolo 3) 
+
+				if(u==4*npt_DS/6)	{y[2]=y2[2];y2[2]=0;trace_DS(y,0);}	// phase 1  (bolo 3) 
+
+				if(u==0) 			{y[1]=y1[1];y1[1]=0;}				// phase  2  (bolo 2)
+					
+				if(u==3*npt_DS/6) 	{y[1]=y2[1];y2[1]=0;}				// phase  2  (bolo 2)
+					
+				if(u==2*npt_DS/6) 	{y[3]=y1[3];y1[3]=0;				// phase  3  (bolo 4)
+									y[0]=y1[0];y1[0]=0;	// bolo1
+									y[4]=y1[4];y1[4]=0;	// temperature
+									}
+
+				if(u==5*npt_DS/6) 	{y[3]=y2[3];y2[3]=0;				// phase  3  (bolo 4)
+									y[0]=y2[0];y2[0]=0;	// bolo1
+									y[4]=y2[4];y2[4]=0;	// temperature
+									}
+				
+				y1[0]+= xbol(0)*table_DS[u];
+				y2[0]+= xbol(0)*table_DS[u];
+				
+				y1[1]+= xbol(1)*table_DS[u+4*npt_DS/6];
+				y2[1]+= xbol(1)*table_DS[u+4*npt_DS/6];
+				
+				y1[2]+= xbol(2)*table_DS[u+2*npt_DS/6];
+				y2[2]+= xbol(2)*table_DS[u+2*npt_DS/6];
+				
+				y1[3]+= xbol(3)*table_DS[u];
+				y2[3]+= xbol(3)*table_DS[u];
+				
+				y1[4]+= xbol(4)*table_DS[u];
+				y2[4]+= xbol(4)*table_DS[u];
+				
+				break;
+	
+
+
+	default :	break;
+	}
+}	
+							
+
+// divise par la norme, trace y puis fait un RAZ
+void trace_DS(double *y,int enregistre)		//   y [nb_max_bolo +1 ]
+{
+double x;
+static double yraz[nb_max_bolo];
+static double yt[nb_max_bolo+1];
+int j,k,moy;
+static double yfiltre[nb_max_bolo][10];
+static int uf=0;
+x=gg->periode_echantillonage*(double)gg->temps_cntl-gg->temps_origine;
+
+if(enregistre)
+	{
+	printf("traceDS avec enregistre=1\n");
+	ecritT(fenetre_enregistre_DS,fin_f," %9.3f ",x );
+	for(j=0;j<nb_max_bolo;j++) if(parametr.bolo[j].bolo_code_util)
+				{
+				ecritT(fenetre_enregistre_DS,fin_f,"  %9.3f",yt[j]);
+				}
+	ecritT(fenetre_enregistre_DS,fin_f,"\n");
+	return;
+	}
+
+
+for(j=0;j<nb_max_bolo;j++)	yt[j]=y[j];
+for(j=0;j<nb_max_bolo;j++)	y[j]=0;
+
+//printf(" au debut = %g , %g , %g , %g , %g \n",yt[0],yt[1],yt[2],yt[3],yt[4]); 
+
+
+
+
+for(j=0;j<nb_max_bolo;j++)
+			{
+			yt[j]/=norme_DS;
+			if(raz_parasite==1)	yraz[j]=yt[j];
+			if(raz_parasite==2)	yraz[j]=0;
+			yt[j]-=yraz[j];
+			}
+
+if (gg->trace_ouvert&16)  trace_annexe(yt);	// données  razparasite  mais  non filtrées
+
+raz_parasite=0;
+selectgra(fenetre_trace_DS);
+yt[nb_max_bolo]=(0.95*graph->ymin+0.05*graph->ymax) + 
+		+  ( (gg->don.sync[sync_subscan]!=0) et (gg->don.sync[sync_scan]!=0) ) * 0.9 * (graph->ymax-graph->ymin);
+//printf(" signal subscan=%g  ",yt[nb_max_bolo]);
+//printf(" avant moyenne= %g , %g , %g , %g , %g \n",yt[0],yt[1],yt[2],yt[3],yt[4]); 
+
+moy=litD(fenetre_trace_DS,ds_moyenne,0L);
+if(moy>10) {moy=10;ecritD(fenetre_trace_DS,ds_moyenne,"10");}
+if(moy)
+	{
+	uf++;
+	if(uf>=moy) uf=0;
+	for(j=0;j<nb_max_bolo;j++) 					//  ne moyenne pas le signal de scan 
+		{
+		for(k=0;k<moy;k++)	yfiltre[j][k]+=yt[j];
+		yt[j]=yfiltre[j][uf]/moy;
+		yfiltre[j][uf]=0;
+		}
+	}
+//printf(" montracen yt= %g , %g , %g , %g , %g \n",yt[0],yt[1],yt[2],yt[3],yt[4]); 
+//printf(" avant trace : =%g  \n",yt[nb_max_bolo]);
+montracen(fenetre_trace_DS,nb_max_bolo+1,x,yt);
+
+if(!(graph->scroll_courbe) && litD(fenetre_trace_DS,ds_retour,0L) &&
+		 ( (x<graph->xmin) ou (x>graph->xmax) )) 
+			{
+			graph->xmax-=graph->xmin;graph->xmin=0;
+			gg->temps_origine=gg->periode_echantillonage*(double)gg->temps_cntl;
+			x=0;	
+			}
+
+//ecritD(fenetre_trace_DS,ds_bol1,"%gµV",yt[0]);
+//ecritD(fenetre_trace_DS,ds_bol2,"%gµV",yt[1]);
+
+}
+
+
+
+
+//  fabrique une table double longueur pour ne pas poser de problèmes 
+//  la table de detection synchrone est deja dephase comme il faut
+
+void	calcul_table_DS(double periode)
+{
+int i,v,tm,phase;
+npt_DS=(int)(periode+0.2);	// synchro_periode est un double  et npt_DS est un entier
+if (npt_DS>max_points_DS)	npt_DS=max_points_DS;
+choix_DS=litD(fenetre_trace_DS,ds_choix_DS,0L);
+tm=litD(fenetre_trace_DS,ds_temps_mort,0L);
+phase=litD(fenetre_trace_DS,ds_phase,0L);
+norme_DS=0;
+
+
+switch(choix_DS)
+	{
+	case choix_DS_sinus_1f : npt_DS=2* (int) (npt_DS/2);			//  plus  moins  plus  moins  (hacheur)
+				for(i=0	;i<npt_DS;i++)	
+					{
+					table_DS[i]=sin(2 * 3.14159 * (double)i / (double)npt_DS ) ;
+					norme_DS+=0.5;
+					}
+				break;
+				
+
+	case choix_DS_hacheur :	npt_DS=8* (int) (npt_DS/8);			//  plus  moins  plus  moins  (hacheur)
+				printf(" DS1 hacheur pour %d points : ",npt_DS);
+				i=phase;
+				while(i<0) i+=npt_DS;
+				for(v=0	;v<npt_DS/4	;v++)	
+					{
+					if(i>=npt_DS) i=0;
+					if(v<tm) 	table_DS[i]=0;
+					else 		{table_DS[i]=-1;	norme_DS++;}
+					i++;
+					}
+				for(v=0	;v<npt_DS/4	;v++)	
+					{
+					if(i>=npt_DS) i=0;
+					if(v<tm) 	table_DS[i]=0;
+					else 		table_DS[i]=1;
+					i++;
+					}
+				for(v=0	;v<npt_DS/4	;v++)	
+					{
+					if(i>=npt_DS) i=0;
+					if(v<tm) 	table_DS[i]=0;
+					else 		table_DS[i]=-1; //	norme_DS++; la norme ne contient qu'une demi période
+					i++;
+					}
+				for(v=0	;v<npt_DS/4	;v++)	
+					{
+					if(i>=npt_DS) i=0;
+					if(v<tm) 	table_DS[i]=0;
+					else 		table_DS[i]=1;
+					i++;
+					}
+				break;
+
+
+	case choix_DS_secondaire :	npt_DS=4* (int) (npt_DS/4);								//  plus  moins   (diodes/secondaire)
+				printf(" DS2 (diodes) pour %d points : ",npt_DS);
+				i=phase;
+				while(i<0) i+=npt_DS;
+				for(v=0	;v<npt_DS/2	;v++)	
+					{
+					if(i>=npt_DS) i=0;
+					if(v<tm) 	table_DS[i]=0;
+					else 		{table_DS[i]=-1;	norme_DS++;}
+					i++;
+					}
+				for(v=0	;v<npt_DS/2	;v++)	
+					{
+					if(i>=npt_DS) i=0;
+					if(v<tm) 	table_DS[i]=0;
+					else 		table_DS[i]=1;
+					i++;
+					}
+				break;
+
+
+
+	case choix_DS_prisme :	npt_DS=6* (int) (npt_DS/6);						//   moins  plus  moins  (prisme)
+				printf(" DS3 (prisme) pour %d points : ",npt_DS);
+				i=phase;
+				while(i<0) i+=npt_DS;
+				for(v=0	;v<npt_DS/3	;v++)	
+					{
+					if(i>=npt_DS) i=0;
+					if(v<tm) 	table_DS[i]=0;
+					else 		{table_DS[i]=-1;}
+					i++;
+					}
+				for(v=0	;v<npt_DS/3	;v++)	
+					{
+					if(i>=npt_DS) i=0;
+					if(v<tm) 	table_DS[i]=0;
+					else 		{table_DS[i]=-1;}
+					i++;
+					}
+				for(v=0	;v<npt_DS/3	;v++)			//  plus pour la phase de référence   
+					{
+					if(i>=npt_DS) i=0;
+					if(v<tm) 	table_DS[i]=0;
+					else 		{table_DS[i]=2;	norme_DS+=2;}
+					i++;
+					}
+				break;
+				
+	default	:	break;
+	}
+
+for(i=0;i<npt_DS;i++)	table_DS[i+npt_DS]=table_DS[i];	// complete la table (double longueur)
+ecritD(fenetre_trace_DS,ds_periode,"periode: %d pts",npt_DS);
+
+/*
+printf("\n normeDS=%d  : ", norme_DS);
+for(i=0;i<npt_DS;i++)
+	{
+	printf(" %d ",table_DS[i]);
+	}
+printf("\n");
+alerte(2,"bonjour");
+*/
+}
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/trace.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/trace.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/trace.c	(revision 637)
@@ -0,0 +1,123 @@
+#include "diabolo.h"
+#include "bolo.h"
+#include "acqui.h"
+#include "carte_acqui.h"
+#include "trace.h"
+#include "synchro.h"
+
+//#define  scroll_courbe  0
+
+
+
+
+//----------------------------------  fenetre : lit_fifo  -----------------------------------
+
+
+
+
+void exec_trace_tout(int fen,int item,double valeur,...) 
+{
+static double y[nb_max_bolo+1];
+static double f1[nb_max_bolo+1];
+static double f2[nb_max_bolo+1];
+static double	fmin,fmax;
+
+static int moyenne,ipas;
+static double fmini,fmaxi;
+
+
+int  j;
+double x,c1,c2;
+
+switch(item)
+    {
+    case ouverture     :	gg->trace_ouvert=gg->trace_ouvert | 1 ;	
+ 	    					graph->ymin=-120;
+ 		   					graph->ymax=120;
+	    					graph->ypas=20;
+	    					graph->xmax=500;
+	    					graph->xpas=50;
+    						graph->taille_graduations=8;
+//  						graph->sans_image=1;
+//    						graph->flag_tracen=0;
+//    						for(j=0;j<parametr.nb_bolo+1;j++)	graph->flag_tracen+=(1<<j);
+//							moyenne=10;ipas=1;
+//							ecritD(fen,t_moyenne,"%d",moyenne);
+							
+//							fmini=0;ecritD(fen,t_fmini,"%g",fmini);
+//							fmaxi=10;ecritD(fen,t_fmaxi,"%g",fmaxi);
+							for(j=0;j<parametr.nb_bolo;j++)  f1[j]=0;
+							for(j=0;j<parametr.nb_bolo;j++)  f2[j]=0;
+							for(j=0;j<parametr.nb_bolo;j++)  y[j]=0;
+
+                 			
+    case t_moyenne		:	
+    case t_moyenne+1000 :	
+    case t_fmini		:	
+    case t_fmini+1000 	:	
+      case t_fmaxi		:	
+    case t_fmaxi+1000 	:	moyenne=litD(fen,t_moyenne,0L);if(moyenne<1) moyenne=1;
+                 			fmini=litD(fen,t_fmini,0L);
+    						fmaxi=litD(fen,t_fmaxi,0L);
+    						for(j=0;j<parametr.nb_bolo;j++)  f1[j]=0;
+
+							c1=2*3.14*fmini*gg->periode_echantillonage;		c1=c1/(1+c1);	
+							c2=2*3.14*fmaxi*gg->periode_echantillonage;		c2=c2/(1+c2);	
+							
+							printf("c1=%g   c2=%g  \n",c1,c2);		
+                 			break;
+
+    case fermeture     :	gg->trace_ouvert=gg->trace_ouvert & (255-1); 		// enleve le 1
+    						break;
+
+    
+    case t_raz 			: 	gg->temps_origine=gg->periode_echantillonage*(double)gg->temps_cntl;				//break;    
+    case t_efface 		:	efface(fen);
+    						break;
+                 
+
+    case tache_de_fond		:	selectgra(fen);
+    						
+							c1=2*3.14*fmini*gg->periode_echantillonage;		c1=c1/(1+c1);	
+							c2=2*3.14*fmaxi*gg->periode_echantillonage;		c2=c2/(1+c2);	
+							
+			    			for(j=0;j<parametr.nb_bolo;j++)		
+			    				{
+			    				f1[j]= (1-c1) * f1[j]	+ c1 * xbol(j); 
+			    				f2[j]= (1-c2) * f2[j]	+ c2 * xbol(j); 
+								y[j]+=f2[j]-f1[j];
+								}							
+							ipas--;
+							if(ipas<=0)	
+								{
+								ipas=moyenne;
+								for(j=0;j<parametr.nb_bolo;j++) y[j]=y[j]/(double)moyenne;
+								
+//								y[parametr.nb_bolo]=(0.95*graph->ymin+0.05*graph->ymax) + 
+//									+  ( (gg->don.sync[sync_subscan]!=0) et (gg->don.sync[sync_scan]!=0) )
+//										* 0.9 * (graph->ymax-graph->ymin);
+
+								x=gg->periode_echantillonage*(double)gg->temps_cntl-gg->temps_origine;
+//								printf("x=%g  x0=%g  \n",x,x0);
+								//if(x<0) {x0=gg->periode_echantillonage*(double)gg->temps_cntl;x=0;}
+
+								montracen(fen,parametr.nb_bolo,x,y);	// SANS LA SYNCHRO
+//								montracen(fen,parametr.nb_bolo+1,x,y);	// avec la synchro
+
+								if(!(graph->scroll_courbe) && litD(fen,t_retour,0L) &&
+										 ( (x<graph->xmin) ou (x>graph->xmax) )) 
+											{
+											graph->xmax-=graph->xmin;graph->xmin=0;
+											gg->temps_origine=gg->periode_echantillonage*(double)gg->temps_cntl;
+											x=0;	
+											}
+
+								for(j=0;j<parametr.nb_bolo;j++) y[j]=0;
+								}
+	    			
+    default 			 :   break;
+    }
+
+}
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/trace_1p.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/trace_1p.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/trace_1p.c	(revision 637)
@@ -0,0 +1,139 @@
+#include "diabolo.h"
+#include "bolo.h"
+#include "acqui.h"
+#include "carte_acqui.h"
+#include "trace.h"
+#include "synchro.h"
+
+static	double		table_som[nb_max_bolo];	//  table de moyennage
+static	double		table_moy[nb_max_bolo][max_points_DS];	//  table de moyennage
+static	double		temps_per[max_points_DS];	//  table de moyennage
+static	int			nombre_moy;				//  nombre de moyennage
+static int 			indice_per;
+static int 			flag_trace_moy;
+
+static double		temps_origine_local;	
+
+
+void exec_trace_1_per(int fen,int item,double valeur,...) 
+{
+static double y[nb_max_bolo];
+double decale;
+static int lissage=10,ipas=1;
+int  j,k;
+double x;
+
+switch(item)
+    {
+    case ouverture     :	gg->trace_ouvert=gg->trace_ouvert | 2 ;	
+ 	    					selectgra(fen);
+ 	    					graph->ymin=-120;
+ 		   					graph->ymax=120;
+	    					graph->ypas=20;
+	    					graph->xmax=2;
+	    					graph->xpas=0.5;
+    						graph->taille_graduations=7;
+//    						graph->flag_tracen=0;
+//    						for(j=0;j<nb_max_bolo;j++)	if( (j<10) && gg->bolo_type[j])	graph->flag_tracen+=(1<<j);
+                 			flag_trace_moy=0;
+
+
+    case t_raz :			if(synchro_periode>=max_points_DS) synchro_periode=0;
+    						nombre_moy=0;
+    						ecritD(fen,tp_nb_moy,"0");
+
+			    			for(indice_per=0;indice_per<synchro_periode;indice_per++)
+			    					for(j=0;j<nb_max_bolo;j++)		
+			    							table_moy[j][indice_per]=0;
+			    			flag_trace_moy=0;
+    						break;
+
+    case fermeture     :	gg->trace_ouvert=gg->trace_ouvert & (255-2); 		// enleve le 2
+    						break;
+   
+//    case t_lissage	:	case t_lissage+1000	:		lissage=valeur;	break;
+                     
+    case t_efface 		:	if(!flag_trace_moy) flag_trace_moy=1;
+    						else flag_trace_moy=0;
+    						break;
+
+                 
+	case	ds_debut   	:	if(synchro_periode>=max_points_DS) synchro_periode=0;
+							flag_trace_moy=litD(fen,tp_moy,0L);
+							decale=litD(fen,tp_decale,0L);
+							lissage=litD(fen,tp_lissage,0L);
+							if(lissage<1) {lissage=1;ecritD(fen,tp_lissage,"1");}
+//							printf("debut avec flag_trace_moy=%d  et nombre_moy=%d  \n",flag_trace_moy,nombre_moy);
+							if(flag_trace_moy)
+								{
+								if(nombre_moy)
+    								{
+    								efface(fen);
+			    					for(j=0;j<nb_max_bolo;j++)	
+			    							{
+			    							table_som[j]=0;
+			    							}
+    								for(indice_per=0;indice_per<synchro_periode-2;indice_per++)
+    									{
+			    						for(j=0;j<nb_max_bolo;j++)	
+			    							{
+			    							table_som[j]+=table_moy[j][indice_per];
+			    							}
+    									}    							
+							
+     								for(indice_per=0;indice_per<synchro_periode-lissage;indice_per+=lissage)
+    									{
+ 			    						for(j=0;j<nb_max_bolo;j++)	
+			    							{
+			    							y[j]=0;
+			    								for(k=0;k<lissage;k++)
+			    									y[j]+=table_moy[j][indice_per+k]-table_som[j]/(synchro_periode-2);
+			    							y[j]=y[j]/(nombre_moy*lissage) + decale*j;
+			    							}
+   										montracen(fen,nb_max_bolo,temps_per[indice_per],y);
+   										}
+    									}
+   								nombre_moy++;
+   								ecritD(fen,tp_nb_moy,"%d",nombre_moy);
+   								}
+							temps_origine_local=gg->temps_cntl;
+							indice_per=0;
+							
+							for(j=0;j<nb_max_bolo;j++) y[j]=0;
+							ipas=lissage;
+							
+							move(fen,0,0);
+
+    case 	ds_suite	:	if(indice_per>=max_points_DS) indice_per=max_points_DS-1;
+			    			
+			    			x=gg->periode_echantillonage*(double)(gg->temps_cntl-temps_origine_local);
+							
+							if(flag_trace_moy) for(j=0;j<nb_max_bolo;j++)	table_moy[j][indice_per]+=xbol(j);
+			    			
+			    			if(!flag_trace_moy)  
+			    				{
+			    				for(j=0;j<nb_max_bolo;j++)	y[j]+=xbol(j);
+			    				ipas--;
+								if(ipas<=0)	
+									{
+									ipas=lissage;
+									for(j=0;j<nb_max_bolo;j++) y[j]=y[j]/(double)lissage;
+									montracen(fen,nb_max_bolo,x,y);
+									for(j=0;j<nb_max_bolo;j++) y[j]=0;
+			    					}
+			    				}
+			    			
+			    				
+							
+							
+							
+							temps_per[indice_per]=x;
+							indice_per++;
+//							symbole(fen,x,y[0],6,rond,1,rouge);
+    			
+    default  :   break;
+    }
+
+}
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/c/trace_tout.c
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/c/trace_tout.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/c/trace_tout.c	(revision 637)
@@ -0,0 +1,151 @@
+#include "diabolo.h"
+#include "bolo.h"
+#include "acqui.h"
+#include "carte_acqui.h"
+#include "trace_tout.h"
+#include "synchro.h"
+
+
+
+
+//----------------------------------  fenetre : lit_fifo  -----------------------------------
+
+void	montracen_tout(int fen,int n,double x,util_trace_tout *SS);
+
+
+
+void exec_trace_tout(int fen,int item,double valeur,...) 
+{
+int  i,j;
+double x,c1,c2;
+util_trace_tout *SS;
+SS=infos(fen)->util;
+switch(item)
+    {
+    case fermeture     :	for(j=0;j<8;j++) if(gg->trace_tout[j]==fen) {gg->trace_tout[j]=0;}
+    						free(SS);
+    						break;
+    case ouverture     :	
+    						for(j=0;j<8;j++) if(gg->trace_tout[j]==0) {gg->trace_tout[j]=fen;break;}
+    						SS=malloc(sizeof(util_trace_tout));
+    						infos(fen)->util=SS;
+ 	    					
+ 	    					graph->ymin=-120;
+ 		   					graph->ymax=120;
+	    					graph->ypas=20;
+	    					graph->xmax=500;
+	    					graph->xpas=50;
+    						graph->taille_graduations=8;
+							for(j=0;j<nb_max_bolo;j++)  SS->f1[j]=0;
+							for(j=0;j<nb_max_bolo;j++)  SS->f2[j]=0;
+							for(j=0;j<nb_max_bolo;j++)  SS->y[j]=0;
+							
+                 			
+    case t_moyenne		:	
+    case t_moyenne+1000 :	
+    case t_fmini		:	
+    case t_fmini+1000 	:	
+      case t_fmaxi		:	
+    case t_fmaxi+1000 	:	SS->moyenne=litD(fen,t_moyenne,0L);if(SS->moyenne<1) SS->moyenne=1;
+    						SS->ipas=0;
+                 			SS->fmini=litD(fen,t_fmini,0L);
+    						SS->fmaxi=litD(fen,t_fmaxi,0L);
+    						for(j=0;j<nb_max_bolo;j++)  SS->f1[j]=0;
+
+							c1=2*3.14*SS->fmini*gg->periode_echantillonage;		c1=c1/(1+c1);	
+							c2=2*3.14*SS->fmaxi*gg->periode_echantillonage;		c2=c2/(1+c2);	
+							
+							printf("c1=%g   c2=%g  \n",c1,c2);		
+                 			
+                 			
+                 			
+                 			
+    case t_bolo_couleur :
+    case t_bolo_couleur+1 :
+    case t_bolo_couleur+2 :
+    case t_bolo_couleur+3 :
+    case t_bolo_couleur+4 :
+    case t_bolo_couleur+5 :
+    case t_bolo_couleur+6 :
+    case t_bolo_couleur+7 :
+    case t_bolo_couleur+8 :
+    case t_bolo_couleur+9 :
+    
+    				for(i=0;i<max_couleur;i++)	
+    					{
+    					SS->bolo_couleur[i]=litD(fen,t_bolo_couleur+i,0L)-1;
+    					if( (SS->bolo_couleur[i]<1) ou (SS->bolo_couleur[i]>nb_max_bolo) )   SS->bolo_couleur[i]=0;
+    					printf(" i=%d bolo=%d    ",i,SS->bolo_couleur[i]);
+    					}
+    				printf("\n");
+				break;		
+				    
+ 
+                 			break;
+
+    
+    case t_raz 			: 	gg->temps_origine=gg->periode_echantillonage*(double)gg->temps_cntl;				//break;    
+    case t_efface 		:	efface(fen);
+    						break;
+                 
+
+    case tache_de_fond		:	selectgra(fen);
+    						
+							c1=2*3.14*SS->fmini*gg->periode_echantillonage;		c1=c1/(1+c1);	
+							c2=2*3.14*SS->fmaxi*gg->periode_echantillonage;		c2=c2/(1+c2);	
+							
+			    			for(j=0;j<nb_max_bolo;j++)		
+			    				{
+			    				SS->f1[j]= (1-c1) * SS->f1[j]	+ c1 * xbol(j); 
+			    				SS->f2[j]= (1-c2) * SS->f2[j]	+ c2 * xbol(j); 
+								SS->y[j]+=SS->f2[j]-SS->f1[j];
+								}							
+							SS->ipas--;
+							if(SS->ipas<=0)	
+								{
+								SS->ipas=SS->moyenne;
+								for(j=0;j<nb_max_bolo;j++) SS->y[j]=SS->y[j]/(double)SS->moyenne;
+								printf("trace_tout  un  point \n");
+								
+//								SS->[nb_max_bolo]=(0.95*graph->ymin+0.05*graph->ymax) + 
+//									+  ( (gg->don.sync[sync_subscan]!=0) et (gg->don.sync[sync_scan]!=0) )
+//										* 0.9 * (graph->ymax-graph->ymin);
+
+								x=gg->periode_echantillonage*(double)gg->temps_cntl-gg->temps_origine;
+//								printf("x=%g  x0=%g  \n",x,x0);
+								//if(x<0) {x0=gg->periode_echantillonage*(double)gg->temps_cntl;x=0;}
+
+
+								montracen_tout(fen,nb_max_bolo,x,SS);	// SANS LA SYNCHRO
+//								montracen(fen,nb_max_bolo+1,x,SS->y);	// avec la synchro
+
+
+								if(!(graph->scroll_courbe) && litD(fen,t_retour,0L) &&
+										 ( (x<graph->xmin) ou (x>graph->xmax) )) 
+											{
+											graph->xmax-=graph->xmin;graph->xmin=0;
+											gg->temps_origine=gg->periode_echantillonage*(double)gg->temps_cntl;
+											x=0;	
+											}
+
+								for(j=0;j<nb_max_bolo;j++) SS->y[j]=0;
+								}
+	    			
+    default 			 :   break;
+    }
+
+}
+
+
+void	montracen_tout(int fen,int n,double x,util_trace_tout *SS)
+{
+int i;
+double yy[max_couleur];
+for(i=0;i<max_couleur;i++)
+	{
+	if(SS->bolo_couleur[i])	yy[i]=SS->y[SS->bolo_couleur[i]-1];
+		else		yy[i]=0;
+	}
+tracen(fen,max_couleur,x,yy);
+//	printf("0=%g  1=%g  2=%g  \n",yy[0],yy[1],yy[2]);
+}
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/acqui.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/acqui.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/acqui.h	(revision 637)
@@ -0,0 +1,85 @@
+void	foufou(void);
+
+void	acqui(int fen,int item,double valeur,...);
+
+void	calfreq(int flag);
+
+void	reset_epld(void);
+
+void 	deglitch(void);
+
+void 	init_struct(int PCI_actif);
+
+int		test_erreur(void);
+void	lit_donne_tm(void);		
+
+void affi_bolo(void);
+
+
+void lit_block_archeops(int err);
+void lit_block_diabolo(int err);
+
+
+
+
+//debut_id=1000
+//----------------------------------  fenetre : acquisition  -----------------------------------
+
+#define acquisition_id  1000  //  le id de la fenetre dans la ressource
+
+void exec_acquisition(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (44) items 
+
+#define  e_nb_mes                2     //   controle 
+#define  e_periode               3     //   edit texte 
+#define  e_freq                  5     //   static texte 
+#define  e_nb_pts                7     //   edit texte 
+#define  e_pt_courant            8     //   static texte 
+#define  e_correlations          9     //   controle 
+#define  e_tache_inter           10     //   controle 
+#define  e_valeur                11     //   static texte 
+#define  e_deglitch              12     //   controle 
+#define  e_flag1                 14     //   controle 
+#define  e_temp_mort             15     //   controle 
+#define  e_reset                 16     //   controle 
+#define  e_flag2                 17     //   controle 
+#define  e_tc_reduite            18     //   controle 
+#define  e_transmission          29     //   controle 
+#define  e_bolo                  30     //   controle 
+#define  e_montre                31     //   controle 
+#define  e_sauve                 32     //   controle 
+#define  e_vanne                 33     //   controle 
+#define  e_chauf                 34     //   controle 
+#define  e_bolo_couleur          35     //   controle 
+#define  e_bolo_couleur36        36     //   controle 
+#define  e_bolo_couleur37        37     //   controle 
+#define  e_bolo_couleur38        38     //   controle 
+#define  e_bolo_couleur39        39     //   controle 
+#define  e_bolo_couleur40        40     //   controle 
+#define  e_bolo_couleur41        41     //   controle 
+#define  e_bolo_couleur42        42     //   controle 
+#define  e_bolo_couleur43        43     //   controle 
+#define  e_bolo_couleur44        44     //   controle 
+
+//fin_id
+
+
+
+//debut_id=1006
+//----------------------------------  fenetre : adjust_freq  -----------------------------------
+
+#define adjust_freq_id  1006  //  le id de la fenetre dans la ressource
+
+void exec_adjust_freq(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (5) items 
+
+#define  f_mini                  2     //   controle 
+#define  f_maxi                  3     //   controle 
+#define  f_plus                  4     //   bouton 
+#define  f_moins                 5     //   bouton 
+
+//fin_id
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/alarme.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/alarme.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/alarme.h	(revision 637)
@@ -0,0 +1,18 @@
+
+
+
+//debut_id=1330
+//----------------------------------  fenetre : alarme  -----------------------------------
+
+#define alarme_id  1330  //  le id de la fenetre dans la ressource
+
+void exec_alarme(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (5) items 
+
+#define  a__                     1     //   edit texte 
+#define  a_debut_scan            2     //   controle 
+#define  a_fin_scan              3     //   controle 
+#define  a_sat_regul             4     //   controle 
+
+//fin_id
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/auto.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/auto.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/auto.h	(revision 637)
@@ -0,0 +1,90 @@
+
+enum		{
+		auto_val=1,	// appel systematique si auto est on
+		auto_force=4,	// appel sur bouton auto individuel ou global
+		auto_carre=6	// appel par courbe V(I)
+		
+		};  //  differents changement automatiques
+
+void		auto_control(int bolo,int mode);
+void		auto_transitoire(int bolo,int ct);	
+
+int		test_saturation(int bolo);
+
+extern int	vg[nb_max_bolo];			// 0 ou vieux gain pour remonter le gain
+
+//debut_id=1090
+//----------------------------------  fenetre : auto  -----------------------------------
+
+#define auto_id  1090  //  le id de la fenetre dans la ressource
+
+void exec_auto(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (39) items 
+
+#define  auto_auto_val              1     //   edit texte 
+#define  auto_fixe_gain             2     //   controle 
+#define  auto_gain                  3     //   controle 
+#define  auto_tout_auto             4     //   controle 
+#define  auto_rien_auto             5     //   controle 
+#define  auto_montre                7     //   controle 
+#define  auto_verouille             8     //   controle 
+#define  auto_correct               10     //   edit texte 
+#define  auto_thermo                11     //   controle 
+#define  auto_voie1                 13     //   controle 
+#define  auto_voie2                 14     //   controle 
+#define  auto_voie3                 15     //   controle 
+#define  auto_fixe_courant          16     //   controle 
+#define  auto_courant               17     //   controle 
+#define  auto_transitoire_auto      18     //   controle 
+#define  auto_sauve                 19     //   controle 
+#define  auto_bolo_couleur          30     //   controle 
+#define  auto_bolo_couleur31        31     //   controle 
+#define  auto_bolo_couleur32        32     //   controle 
+#define  auto_bolo_couleur33        33     //   controle 
+#define  auto_bolo_couleur34        34     //   controle 
+#define  auto_bolo_couleur35        35     //   controle 
+#define  auto_bolo_couleur36        36     //   controle 
+#define  auto_bolo_couleur37        37     //   controle 
+#define  auto_bolo_couleur38        38     //   controle 
+#define  auto_bolo_couleur39        39     //   controle 
+
+//fin_id
+
+
+
+//debut_id=1120
+//----------------------------------  fenetre : automatismes  -----------------------------------
+
+#define automatismes_id  1120  //  le id de la fenetre dans la ressource
+
+void exec_automatismes(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (34) items 
+
+#define  atm_gain                  10     //   controle 
+#define  atm_gain11                11     //   controle 
+#define  atm_gain12                12     //   controle 
+#define  atm_gain13                13     //   controle 
+#define  atm_gain14                14     //   controle 
+#define  atm_gain15                15     //   controle 
+#define  atm_courant               16     //   controle 
+#define  atm_courant17             17     //   controle 
+#define  atm_courant18             18     //   controle 
+#define  atm_courant19             19     //   controle 
+#define  atm_courant20             20     //   controle 
+#define  atm_courant21             21     //   controle 
+#define  atm_auto                  22     //   controle 
+#define  atm_auto23                23     //   controle 
+#define  atm_auto24                24     //   controle 
+#define  atm_auto25                25     //   controle 
+#define  atm_auto26                26     //   controle 
+#define  atm_auto27                27     //   controle 
+#define  atm_delai                 28     //   controle 
+#define  atm_delai29               29     //   controle 
+#define  atm_delai30               30     //   controle 
+#define  atm_delai31               31     //   controle 
+#define  atm_delai32               32     //   controle 
+#define  atm_delai33               33     //   controle 
+
+//fin_id
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/bit_block.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/bit_block.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/bit_block.h	(revision 637)
@@ -0,0 +1,8 @@
+void	init_lit_bit(void);
+int	lit_bit(block_type_modele * pbk);	 /*  lit un bit puis rend 1 si O.K., 2 si un block correct   ,  0  si rien a lire   */
+enum{lit_bit_vide,lit_bit_OK,lit_bit_un_block};
+char	un_bit(void);
+enum{bit_vide,bit_un,bit_zero,bit_erreur};
+void	ecrit_erreur_bit(int);
+
+enum	{erreur_bit_erreur,erreur_bit_vide,erreur_type,erreur_longueur,erreur_somme,erreur_fin,bloc_correct,cherche_debut};
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/bolo.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/bolo.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/bolo.h	(revision 637)
@@ -0,0 +1,47 @@
+#define capa(uu)	((parametr.bolo[uu-1].bolo_bebo==10)?0.000868 * (double)parametr.bolo[uu-1].bolo_capa:0.001 * (double)parametr.bolo[uu-1].bolo_capa)		// capa en pF
+#define pt_micA(uu)	((4096. * 22. * 20.) / capa(uu) )			//  pts / micro Amperes
+#define calcI(uu)	( (double) litD(uu,b_tri,0L) / pt_micA(uu) )		// I en µA
+
+
+#define pt_micV(uu)	(((double)parametr.bolo[uu-1].bolo_diviseur) / 2441.)	// pts / microvolt
+#define	calcV(uu)	( (double)litD(uu,b_carre,0L) / pt_micV(uu) )		// V en microVolts
+
+
+void	ecritgain(int fen);
+void	mesures_bolo(int fen,int carre,int triangle,int flag);
+
+//------------------------------  structure infos de la fenetre bolo ----------------------------------
+
+enum		{pipo,MLPA,BEBO};				//  types de bolometres
+
+enum	{d_carre,d_tri,d_lin,d_trans};			//	place dans le tableau des DAC
+
+
+//debut_id=1001
+//----------------------------------  fenetre : bolo  -----------------------------------
+
+#define bolo_id  1001  //  le id de la fenetre dans la ressource
+
+void exec_bolo(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (22) items 
+
+#define  b_auto_trans            3     //   static texte 
+#define  b_auto_lin              4     //   static texte 
+#define  b_carre                 5     //   controle 
+#define  b_tri                   6     //   controle 
+#define  b_trans                 7     //   controle 
+#define  b_lin                   8     //   controle 
+#define  b_auto                  10     //   controle 
+#define  b_phase                 12     //   controle 
+#define  b_gain                  13     //   controle 
+#define  b_res                   15     //   static texte 
+#define  b_bloq                  16     //   controle 
+#define  b_auto_R                18     //   edit texte 
+#define  b_voy                   19     //   controle 
+#define  b_comm                  20     //   controle 
+#define  b_voie                  22     //   controle 
+
+//fin_id
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/carte.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/carte.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/carte.h	(revision 637)
@@ -0,0 +1,22 @@
+
+void	trace_carte(double *y);
+
+
+//debut_id=1300
+//----------------------------------  fenetre : carte  -----------------------------------
+
+#define carte_id  1300  //  le id de la fenetre dans la ressource
+
+void exec_carte(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (13) items 
+
+#define  cart_taille_carte          3     //   edit texte 
+#define  cart_debut                 4     //   controle 
+#define  cart_pas                   6     //   edit texte 
+#define  cart_vitesse               8     //   edit texte 
+#define  cart_dynamique             10     //   edit texte 
+#define  cart_bolo                  12     //   edit texte 
+#define  cart_retrace               13     //   controle 
+
+//fin_id
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/carte_acqui.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/carte_acqui.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/carte_acqui.h	(revision 637)
@@ -0,0 +1,37 @@
+
+// 	________________________________________  adresses nubus  (adresses pci dans pci.h)  ________________________
+
+//#if defined( _avec_PCI)	// 	________________________________________  carte PCI  ________________________
+
+#define lit_carte		RR=*fifo_p
+#define ecrit_carte(x)  	(*fifo_p=(unsigned long ) x)
+#define reset_carte		{*reset_p=0L;while(*fifo_p) controlemanip(0);}
+
+/*
+#else	// 	________________________________________________________  sans interface  ________________________
+
+
+#define lit_carte		{RR=FLAG_NFIFOHF;}			// les trois bit controle nubus=3 -> qqchose à lire
+#define ecrit_carte(x)  	{}
+#define reset_carte		{}
+
+#endif
+*/
+//__________________________________________________________________________________________
+//------------------------ decodage apres lecture carte d'interface  -----------------------
+//__________________________________________________________________________________________
+
+
+// 	________________________________________  carte PCI  ou  rien  ______________________
+
+
+#define rien_a_lire  (!RR)
+#define octet_a_lire  (RR & 0xff)
+
+#define fifo(x)		((RR>>(x))&1)		
+#define fifo0		(RR & 0x1L)		//  tire 1 bit (fifo0) (ligne retour cout à 1 1 coups sur 16 + 2 coups à chaque debut de periode )
+#define fifo12		(RR & 0x1000L)		//  tire 1 bit (fifo12) 
+#define fifo13		(RR & 0x2000L)		//  tire 1 bit (fifo13) 
+
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/carte_pci.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/carte_pci.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/carte_pci.h	(revision 637)
@@ -0,0 +1,45 @@
+/*
+ *	Interface de contrôle de la carte PCI
+ */
+
+/* type des pointeurs pour le bus PCI */
+typedef unsigned long * pointeur_PCI;
+
+/* adresse de base de la carte PCI, dans le fichier  choix_acqui    */
+//#define Adresse_base_PCI	0x81000000
+
+/* pointeurs sur les différents ports de la carte */
+static pointeur_PCI fifo_p	= (pointeur_PCI) (Adresse_base_PCI + 0x00);
+static pointeur_PCI util_p	= (pointeur_PCI) (Adresse_base_PCI + 0x00);
+static pointeur_PCI flags_p	= (pointeur_PCI) (Adresse_base_PCI + 0x04);
+static pointeur_PCI reset_p	= (pointeur_PCI) (Adresse_base_PCI + 0x08);
+static pointeur_PCI test_p	= (pointeur_PCI) (Adresse_base_PCI + 0x0c);
+static pointeur_PCI set_util_p	= (pointeur_PCI) (Adresse_base_PCI + 0x10);
+
+/* pseudo-fonctions pour contrôler la carte */
+#define read_fifo()	(*fifo_p)
+#define write_util(x)	(*util_p = (x))
+#define read_flags()	(*flags_p)
+#define write_flags(x)	(*flags_p = (x))
+#define reset_fifo()	((void) (*reset_p = 0))
+#define read_test()	(*test_p)
+#define write_test(x)	(*test_p = (x))
+#define set_util(x)	(*set_util_p = (x))
+#define wait_read(p)	{register unsigned long * q = (p);\
+				while (!(*q = read_fifo())) {}}
+#define fast_read(x)	{while (!((x) = read_fifo())) {}}
+
+/* drapeaux */
+#define POS_FIRST_FLAG	19
+#define NB_FLAGS	7
+#define FLAG_FIFO_FULL	0x00080000
+#define FLAG_NFIFOEF	0x00100000
+#define FLAG_NFIFOHF	0x00200000
+#define FLAG_NFIFOFF	0x00400000
+#define FLAG_PLEIN0	0x00800000
+#define FLAG_PLEIN1	0x01000000
+#define FLAG_MULTIPLEX	0x02000000
+
+/* noms des drapeaux */
+static char *flag_name[NB_FLAGS] = {"Fifo_full", "nFifoef", "nFifohf",
+	"nFifoff", "Plein0", "Plein1", "Multiplex"};
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/comment.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/comment.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/comment.h	(revision 637)
@@ -0,0 +1,42 @@
+/*
+
+bebo branchée sur voie 11 du repartiteur
+
+La bebo utilise deux lignes en entrée : 
+	-	une horloge  standard  ck()
+   	-	une data  qui contient toutes les data emmises par le controleur  ddat()
+deux lignes en sorties:
+	-	une ligne data individuelles		pm()
+	-	une ligne detections synchrones		adat()
+
+
+Les données individuelles de la bebo  pm(10)    reviennent sur bolo10 
+	les données DS		      adat(10)  reviennent sur bolo11
+
+Le retour bolo12 ne contient pour l'instant que le signal d'erreur de l'horloge du repartiteur
+
+
+Seuls les prises bolo 1 à 9 du repartiteur sont utilisables avec une MLPA
+
+données emises par le repartiteur:
+	bolo  0 	-->	 n'existe pas : le numero de bolo a au moins un bit a 1
+	bolo  1 à 9 	-->	dirigées vers prises MLPA  1 à 9
+	bolo  b à b+5	-->	avec b=4 : programmes les bolo de la BEBO
+				ils ressortent sous les numeros b à b+5	
+	bolo  29	-->	commande de la regulation: sortie en prise 12	
+	bolo  30	-->	vers la bebo: choix du bolometre en sortie
+	bolo  31	-->	chargement des memoires compteur
+
+
+
+
+Pour la regul, utiliser bolo12
+
+	-  adat(12)	-->	commande courant fort
+	-  pm(12)	-->	commande courant faible
+	-  ck(6)	-->	horloge
+	-  acs(6)	-->	load
+	-  ddat(12)	-->	données du convertisseur
+
+
+*/
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/compress.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/compress.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/compress.h	(revision 637)
@@ -0,0 +1,97 @@
+
+/************************************************************************/
+/*******   							*********/
+/*******   	compresseur de données rangées en ligne		*********/
+/*******  			 				*********/
+/************************************************************************/
+
+
+
+
+/*  	comprime une suite de n valeures  (dans des mots de 32 bit)	*/
+/*  		valeures  codées sur 22 bit maximum			*/
+/*	resultat de la compression codé sur 7 bit + exposant		*/
+/*	n doit etre multiple de  4					*/
+/*	le fichier resultat a pour longueur   n/4 + 1 mot de 32 bit	*/
+/*		4 * n  octets   ==>	n + 4 octets			*/
+/*	pour 	n = 72	  en sortie	19 mots = 76 octets		*/
+
+void compress_7_1(long* in,long*out,int n,int pasin);
+void decompress_7_1(long* in,long*out,int n);
+
+
+/*  	comprime une suite de n valeures  (dans des mots de 32 bit)	*/
+/*  		valeures  codées sur 16 bit maximum			*/
+/*	resultat de la compression codé sur 4 bit + exposant		*/
+/*	n doit etre  ( multiple de  7 )  + 2				*/
+/*	le fichier resultat a pour longueur   (n-2)/7 + 1 mot de 32 bit	*/
+/*		4 * n  octets   ==>	4 * (n-2) / 7 + 4  octets	*/
+/*	pour 	n = 72	  en sortie	11 mots = 44 octets		*/
+
+void compress_4_1(long* in,long*out,int n,int pasin);
+void decompress_4_1(long* in,long*out,int n);
+
+
+/*  	comprime une suite de n valeures  (dans des mots de 32 bit)	*/
+/*  		valeures  codées sur 16 bit maximum			*/
+/*	resultat de la compression codé sur 3 bit + exposant		*/
+/*	n doit etre  ( multiple de  9 )					*/
+/*	le fichier resultat a pour longueur   n/9 + 1 mot de 32 bit	*/
+/*		4 * n  octets   ==>	4 * n / 9 + 4  octets		*/
+/*	pour 	n = 72	  en sortie	9 mots = 36 octets		*/
+
+
+void compress_3_1(long* in,long*out,int n,int pasin);
+void decompress_3_1(long* in,long*out,int n);
+
+/************************************************************************/
+/***********   							*********/
+/***********   compresseur de données rangées par paires	*********/
+/***********		(data bolo par exemple)			*********/
+/***********   			 				*********/
+/************************************************************************/
+
+
+
+/*  	comprime une suite de n valeures  (dans des mots de 32 bit)	*/
+/*  		valeures  codées sur 21 bit maximum			*/
+/*	resultat de la compression codé sur 7 bit + exposant		*/
+/*	n doit etre multiple de  4					*/
+/*	le fichier resultat a pour longueur   n/4 + 1 mot de 32 bit	*/
+/*		4 * n  octets   ==>	n + 4 octets			*/
+/*	pour 	n = 72	  en sortie	19 mots = 76 octets		*/
+
+
+void compress_7_2(long* in,long*out,int n,int pasin);
+void decompress_7_2(long* in,long*out,int n);
+
+
+
+/*  	comprime une suite de n valeures  (dans des mots de 32 bit)	*/
+/*  		valeures  codées sur 32 bit maximum			*/
+/*	resultat de la compression codé sur 4 bit + exposant		*/
+/*	n doit etre  ( multiple de  7 )  + 2				*/
+/*	le fichier resultat a pour longueur   (n-2)/7 + 2 mot de 32 bit	*/
+/*		4 * n  octets   ==>	4 * (n-2) / 7 + 8  octets	*/
+/*	pour 	n = 72	  en sortie	12 mots = 48 octets		*/
+
+
+
+void compress_4_2(long* in,long*out,int n,int pasin);
+void decompress_4_2(long* in,long*out,int n);
+
+
+																						
+/************************************************************************/
+/***********   							*********/
+/***********   	definitions communes pour les compresseurs	*********/
+/***********   			 				*********/
+/************************************************************************/
+
+/*Les valeures de la table d'entree sont consideres comme toujopurs positives	*/
+/* les ecarts sont calculés signés sur 32 bit avant d'etre tronconnés		*/
+
+#define	shif(ec,k,q)	{while(ec>q)if(k<kmax_){k++;q<<=1;}else ec=q;while(ec<-q)if(k<kmax_){k++;q<<=1;}else ec=-q;}
+#define	recup(ec,sss,k) {ec=((R>>sss)&emak_);if(ec & sgbi_ ) ec|= sign_ ; ec<<=k;}
+#define	arrondi(ec,k)	((ec &  filtre[k]) +( (ec & test[k]) <<1 ) )	
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/config_transputer.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/config_transputer.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/config_transputer.h	(revision 637)
@@ -0,0 +1,22 @@
+
+
+
+//debut_id=1150
+//----------------------------------  fenetre : config_transputer  -----------------------------------
+
+#define config_transputer_id  1150  //  le id de la fenetre dans la ressource
+
+void exec_config_transputer(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (41) items 
+
+#define  ct_cadence               3     //   edit texte 
+#define  ct_dil                   35     //   controle 
+#define  ct_dil36                 36     //   controle 
+#define  ct_dil37                 37     //   controle 
+#define  ct_dil38                 38     //   controle 
+#define  ct_dil39                 39     //   controle 
+#define  ct_dil40                 40     //   controle 
+#define  ct_dil41                 41     //   controle 
+
+//fin_id
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/controle.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/controle.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/controle.h	(revision 637)
@@ -0,0 +1,24 @@
+
+void exec_cache(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+
+//debut_id=1360
+//----------------------------------  fenetre : controle  -----------------------------------
+
+#define controle_id  1360  //  le id de la fenetre dans la ressource
+
+void exec_controle(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (14) items 
+
+#define  con_retard1               1     //   static texte 
+#define  con_chauf                 2     //   controle 
+#define  con_retard2               3     //   static texte 
+#define  con_voyant                4     //   controle 
+#define  con_fichier               10     //   edit texte 
+#define  con_phase                 11     //   controle 
+#define  con_periode               12     //   static texte 
+#define  con_time                  13     //   static texte 
+#define  con_subscan               14     //   static texte 
+
+//fin_id
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/corel.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/corel.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/corel.h	(revision 637)
@@ -0,0 +1,33 @@
+void corel(void);
+
+
+//debut_id=1210
+//----------------------------------  fenetre : choix_corel  -----------------------------------
+
+#define choix_corel_id  1210  //  le id de la fenetre dans la ressource
+
+void exec_choix_corel(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (18) items 
+
+#define  chcr_choix_corel_1         1     //   edit texte 
+#define  chcr_bouton_1              2     //   controle 
+#define  chcr_choix_corel_13        3     //   edit texte 
+#define  chcr_bouton_14             4     //   controle 
+#define  chcr_choix_corel_15        5     //   edit texte 
+#define  chcr_bouton_16             6     //   controle 
+#define  chcr_choix_corel_17        7     //   edit texte 
+#define  chcr_bouton_18             8     //   controle 
+#define  chcr_choix_corel_19        9     //   edit texte 
+#define  chcr_bouton_110            10     //   controle 
+#define  chcr_choix_corel_111       11     //   edit texte 
+#define  chcr_bouton_112            12     //   controle 
+#define  chcr_choix_corel_113       13     //   edit texte 
+#define  chcr_bouton_114            14     //   controle 
+#define  chcr_choix_corel_115       15     //   edit texte 
+#define  chcr_bouton_116            16     //   controle 
+#define  chcr_choix_corel_117       17     //   edit texte 
+#define  chcr_bouton_118            18     //   controle 
+
+//fin_id
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/courbeVI.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/courbeVI.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/courbeVI.h	(revision 637)
@@ -0,0 +1,23 @@
+
+
+
+//debut_id=1030
+//----------------------------------  fenetre : courbeVI  -----------------------------------
+
+#define courbeVI_id  1030  //  le id de la fenetre dans la ressource
+
+void exec_courbeVI(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (11) items 
+
+#define  cvi_valI                  1     //   static texte 
+#define  cvi_valV                  3     //   static texte 
+#define  cvi_mesure                4     //   controle 
+#define  cvi_stop                  5     //   controle 
+#define  cvi_bolo                  6     //   controle 
+#define  cvi_vitesse               7     //   edit texte 
+#define  cvi_calc_nep              9     //   controle 
+#define  cvi_tous                  10     //   controle 
+#define  cvi_precis                11     //   controle 
+
+//fin_id
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/diabolo.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/diabolo.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/diabolo.h	(revision 637)
@@ -0,0 +1,203 @@
+#include "manip.h"
+#include "choix_acquisition.h"
+#include "archeops.h"
+#include "choix_param.h"
+#include "structure.h"
+#include "fenetres_diabolo.h"
+
+
+
+/*
+Le fichier de données diabolo est un fichier mac de type 'DIA2' qui contient 
+	une suite d'enregistrements.
+	
+Il commence par une entete correspondant à la structure de type F_entete
+	- cette entete contient 
+
+On a ensuite une suite d'enregistrements comportant chacun:
+	- une entete partielle avec les parametres de mesure, y compris les parametres DAC
+		structure de type F_entete_part
+	- une suite de valeur correspondant à chaque point mesuré et contenant:
+			Le temps calculé
+			Les 6 signaux de synchro
+			Les voies 1 à 7 :  5 bolometre + 1 temperature + 1 chauffage regul
+
+*/
+
+
+
+/*
+ long_entete 	  	= 272 
+ long_entete_part 	= 2128 
+ long_donne 	  	= 14 
+
+*/
+
+
+/*  ancienne structure reglage de DIABOLO	 (longueur= 12 + 14 *  nb_max_bolo ) */
+/*	la nouvelle structure  a une longueur de  :     4  +  8 * nb_max_bolo  + automatismes + regul */ 
+/*typedef struct
+	{
+	long	duree;			 durée d'une periode (en unite de 4.8 µsec)		
+	short 	nb_mesures;		 nombre de mesures dans une periode entiere 46 à 92	
+	short	temp_mort;		 temps mort pour la detection synchrone numerique	
+
+	short	periode_horloge;	 durée d'une periode (en unite de 0.2 µsec), 20 à 80	
+	short	flag;			 ----------------------------------------------	
+
+	short	gainbrut[nb_max_bolo];	 valeur du gain codé : (0,1,2,...,15) 		
+	short	gain[nb_max_bolo];	 valeur du gain en vraies valeurs(1,2,4,8,10,...,100) 
+	short	dac[4][nb_max_bolo];	 les valeurs des DAC 4 voies en entier (0 à 4095)	
+	short	phase[nb_max_bolo];	 valeur du dephasage individuel : valeur  0  à  1	
+
+	}
+	reglage_bolo;
+*/
+
+
+extern   param_bolo	parametr;		// liste bolo dans le programme principal
+
+
+typedef struct	{
+		short	version;		// 2 pour cette version du programme
+						
+		short	long_entete;		// longueur de l'entete	
+		short	long_entete_part;	// longueur de l'entete partielle
+		short	long_donne;		// longueur d'une ligne de données
+
+		unsigned long tempsdebut;	// temps de debut de fichier (temps mac en sec)	
+		unsigned long tempsfin;		// temps de fin de fichier   (temps mac en sec)
+		char commentaires[256];		// commentaires à la main
+		} F_entete;	  
+
+
+typedef struct	
+		{
+		short	n_ligne_don;		// Nombre de lignes de donné dans cet enregistrement
+						// ou    nombre d'octets du commentaire
+		short	n_blok;			// numero du blok dans le fichier
+		short	change;			// valeur 0 = bloc identique au precedent
+						// valeur 1 = bloc modifié
+						// valeur 2 = debut de prise de donnees
+						// valeur 10 = le block ne contient qu'un commentaire
+						// valeur 1001 et suivante : block telescope type  th
+						// valeur 2001 et suivante : block telescope type  tp
+
+		short	bololut;		//  ancien parametre: bit 0 à bit 3  ==1  si les courbes bolo ont ete lues
+		} F_block_desc;
+
+
+typedef struct	
+		{
+
+		unsigned long 	temps_controleur_debut;		// en micro/secondes :temps du premier point dans le bloc			
+		unsigned long 	temps_controleur_fin;		// en micro/secondes :temps du dernier point dans le bloc			
+		
+		reglage_bolo	reglage;
+		
+		short 	bol_per[nb_max_bolo][nb_max_mes_per];	//   courbe echantillon d'une mesure
+					
+		} F_block_param;	  
+
+
+//__________________________   calcul des valeurs  vraies en micro/volt 
+
+//#define	xbolbrut(j)	((1e5*(double)gg->don.don_bolo[j])/(65536.*((double)(gg->reglage.gain[j]))))		// en µV
+//#define	xbolbrut(jjj)	((1e7*(double)gg->don.don_bolo[jjj])/(65536.*(double)parametr.bolo_gain[jjj]*gain_ampli(gg->reglage.bolo[jjj])))		// en µV
+#define	xbolbrut(jjj)	bol_micro_volt(gg->don.don_bolo[jjj],(double)parametr.bolo[jjj].bolo_gain*gain_ampli(gg->reglage.bolo[jjj]))	// en µV
+
+#define	xbol(jjj)	gg->corel[jjj]
+
+
+
+typedef struct		// structure globale gg  dans le programme principal
+	{
+//	param_bolo	param;					// liste bolo dans le programme principal
+	reglage_bolo	reglage;				// etat bolo dans le programme principal
+	
+	short 		bol_per[nb_max_bolo][nb_max_mes_per];	// table une periode
+
+	
+	//  ------  données lues en un point:
+	
+	double		periode_echantillonage;
+	unsigned long	temps_cntl;			//  temps courant de la lecture d'un point
+	unsigned long	temps_mac;			//  temps courant de la lecture d'un point
+
+	F_donne		don;
+	
+	double		corel[nb_max_bolo];		// données apres corellation eventuelle
+	
+
+//__________________________________________________________________________________
+		// ----------  parametres generaux 
+	
+	int	depou_en_cours;			// la tache de fond est active
+	
+	int	trace_ouvert;			//  pour connaitre les fenetre de trace ouverte
+						//  1 -->  trace tout  ---  n'est plus utilise
+						//  2 -->  trace une periode
+						//  4 -->  trace detection synchrone
+						//  8 -->  trace ondelette
+						//  16 --> trace carte des lobes
+						//  32 ->  une synchro selectuionnée
+	
+	int	trace_tout[8];			//  numero des 8 fenetres trace_tout si elles sont ouvertes																	
+	int	fichier_dia2_ouvert;		//  pour connaitre les fichiers ouverts
+	int	fichier_arch_ouvert;		//  pour connaitre les fichiers ouverts
+	int 	flag_fou;			//  flag pour transformé de fourier
+	int 	flag_corel;			//  flag pour transformé de fourier
+	int 	flag_tc_reduite;		//  flag pour telecommandes reduites
+	int	scan_en_cours;			// scan en cours pour autoval, sauve fichier et bip de fin de scan
+	int	compte_subscan;			// compte les sub scan
+	int	compte_fichiers_th;		// compte les fichiers telescopr de type th sub scan
+	int	compte_fichiers_tp;		// compte les fichiers telescopr de type tp  sub scan
+	int	nb_trace;
+	double	temps_origine;			//  origine des temps en secondes pour trace
+
+
+
+//  ------  pour enregistrement d'une transitoire individuel
+
+
+//	int		transilut;											// un seul flag pour tous : la table a été lue
+//	int		transiindice;		le// indice pour ecriture de la table transi
+//	short 	transi[nb_max_bolo][max_nb_transi];// table une periode
+
+	}
+	stglob;
+
+
+
+extern  stglob  *gg;
+
+
+void	tache_rapide(void);
+
+
+void    emission_telecommande(int direction,void * tc);	// telecommande une chaine de 10 mots
+void	emission_tc_reduite(unsigned char mot1,unsigned char mot2,unsigned char mot3);
+
+void	param_reglage(void);
+
+void	montracen(int fen,int n,double x,double*y);
+int 	bolo_rouge(void);		//  l'indice du bolo rouge 
+
+void	rafraichis_fenetres(void);
+
+
+void	traite_block_journal		(block_type_journal*		blk);
+void	traite_block_reglage		(block_type_reglage*		blk);
+void	traite_block_dilution		(block_type_dilution*		blk);
+void	traite_block_gps		(block_type_gps*		blk);
+void	traite_block_une_periode	(block_type_une_periode*	blk);
+void	traite_block_bolo_comprime	(block_type_bolo_comprime*	blk);
+void	traite_block_bolo		(block_type_bolo*		blk);
+void	traite_block_sst		(block_type_sst*		blk);
+void	traite_block_synchro_sol	(block_type_synchro_sol*	blk);
+
+#ifdef	transmet_data_brute
+void	traite_block_data_brute		(block_type_data_brute*		blk);
+#endif
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/dilution.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/dilution.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/dilution.h	(revision 637)
@@ -0,0 +1,94 @@
+
+
+
+//debut_id=1450
+//----------------------------------  fenetre : dilution  -----------------------------------
+
+#define dilution_id  1450  //  le id de la fenetre dans la ressource
+
+void exec_dilution(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (64) items 
+
+#define  dil_switch_helium         2     //   controle 
+#define  dil_EVB                   3     //   controle 
+#define  dil_EVO                   4     //   controle 
+#define  dil_EVF                   5     //   controle 
+#define  dil_EVV                   6     //   controle 
+#define  dil_switch_1              7     //   controle 
+#define  dil_switch_2              8     //   controle 
+#define  dil_switch_3              9     //   controle 
+#define  dil_raz_modul             12     //   controle 
+#define  dil_trace_helium          13     //   controle 
+#define  dil_niveau_helium         14     //   controle 
+#define  dil_voyant_EVO            16     //   controle 
+#define  dil_voyant_EVF            17     //   controle 
+#define  dil_sortie_brute          18     //   controle 
+#define  dil_EVB_retour            19     //   controle 
+#define  dil_EVO_retour            20     //   controle 
+#define  dil_EVF_retour            21     //   controle 
+#define  dil_EVV_retour            22     //   controle 
+#define  dil_d_3He                 23     //   controle 
+#define  dil_d_4He                 24     //   controle 
+#define  dil_RP_He                 25     //   controle 
+#define  dil_p_d_3He               26     //   static texte 
+#define  dil_p_air                 27     //   static texte 
+#define  dil_erreur                28     //   controle 
+#define  dil_fet_raz               29     //   controle 
+#define  dil_p_d_4He               30     //   static texte 
+#define  dil_piles                 31     //   static texte 
+#define  dil_temperatures          32     //   static texte 
+#define  dil_p_10T                 33     //   controle 
+#define  dil_p_p18D                34     //   controle 
+#define  dil_p_m18D                35     //   controle 
+#define  dil_p_10B                 36     //   controle 
+#define  dil_p_p18B                37     //   controle 
+#define  dil_p_m18B                38     //   controle 
+#define  dil_p_Ch                  39     //   controle 
+#define  dil_sw_pp5                40     //   controle 
+#define  dil_sw_pp15               41     //   controle 
+#define  dil_voyant_pp5            42     //   controle 
+#define  dil_voyant_pp15           43     //   controle 
+#define  dil_pirani                44     //   controle 
+#define  dil_t_h1                  45     //   controle 
+#define  dil_t_h2                  46     //   controle 
+#define  dil_t_h3                  47     //   controle 
+#define  dil_t_h4                  48     //   controle 
+#define  dil_t_a1                  49     //   controle 
+#define  dil_t_a2                  50     //   controle 
+#define  dil_t_a3                  51     //   controle 
+#define  dil_t_a4                  52     //   controle 
+#define  dil_t_b1                  53     //   controle 
+#define  dil_t_b2                  54     //   controle 
+#define  dil_t_b3                  55     //   controle 
+#define  dil_t_b4                  56     //   controle 
+#define  dil_ch1                57     //   controle 
+#define  dil_ch2                58     //   controle 
+#define  dil_ch3                59     //   controle 
+#define  dil_ch4                60     //   controle 
+#define  dil_ch5                61     //   controle 
+#define  dil_ch6                62     //   controle 
+#define  dil_ch7                63     //   controle 
+#define  dil_extra              64     //   controle 
+
+//fin_id
+
+//debut_id=1480
+//----------------------------------  fenetre : dilution_calibrations  -----------------------------------
+
+#define dilution_calibrations_id  1480  //  le id de la fenetre dans la ressource
+
+void exec_dilution_calibrations(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (9) items 
+
+#define  dil_j_he1                 2     //   edit texte 
+#define  dil_j_he2                 3     //   edit texte 
+#define  dil_j_he3                 4     //   edit texte 
+#define  dil_j_he4                 5     //   edit texte 
+#define  dil_j_he5                 6     //   edit texte 
+#define  dil_j_he6                 7     //   edit texte 
+#define  dil_j_he7                 8     //   edit texte 
+#define  dil_j_he8                 9     //   edit texte 
+
+//fin_id
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/fenetres_diabolo.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/fenetres_diabolo.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/fenetres_diabolo.h	(revision 637)
@@ -0,0 +1,65 @@
+//  fenetres bolo  numero  1 à 36  pour l'affichage d'une periode de chaque bolometre
+
+#define tache_acqui				99
+#define fenetre_acquisition		100
+#define action_tache			101
+#define fenetre_synchro			102
+#define fenetre_fichier			103
+#define fenetre_trace_DS		105
+#define fenetre_trace_tout		106
+#define fenetre_trace_1_per		107
+#define fenetre_annexe	108
+
+#define fenetre_ondelette		110
+#define fenetre_auto			111
+
+#define fenetre_configuration	113
+#define fenetre_regul			114
+
+#define fenetre_choix_corel		116
+#define fenetre_mesures_bolo	117
+#define fenetre_fourier			118
+#define fenetre_liste_bolos		119
+#define fenetre_journal			120
+#define fenetre_GPS				121
+
+
+#define fichier_dia2_1				122
+#define fichier_dia2_2				123
+#define fichier_arch_1				124
+#define fichier_arch_2				125
+
+#define fenetre_enregistre_DS			127
+#define fenetre_alarme				128
+#define fenetre_controle			129
+
+#define fichier_sommaire_scan_0			130
+#define fichier_sommaire_scan_1			131
+#define fichier_sommaire_scan_2			132
+
+#define fenetre_dilution				133
+#define fenetre_dilution_lecture_brute			134
+#define fenetre_niveau_helium				135
+#define fenetre_dilution_calibration			136
+
+#define fenetre_automatismes				137
+
+#define fenetre_regulation				138
+
+#define fenetre_vitesse_block				139
+
+#define fenetre_senseur_stellaire			140
+#define fenetre_senseur_stellaire_lecture_brute		141
+
+#define fenetre_param_reglage				142
+#define fenetre_fichier_archeops_c			143
+
+
+//  de préférence, utiliser les indices suivants :		i= position dans la periode     
+//														j=numero de bolo ou de synchro
+//														k=numero de detection
+
+
+#define liste_bolos_id  1020   //  le id de la fenetre dans la ressource
+#define mesures_bolo_id  1040  //  le id de la fenetre dans la ressource
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/fichier.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/fichier.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/fichier.h	(revision 637)
@@ -0,0 +1,73 @@
+
+
+void	fich_new(int scan,int newdos);	// scan vaut 1 s'il faut créer un fichier de scan
+					// newdos vaut 1 s'il faut créer un nouveau dossier de jour 
+
+
+void	exec_DIA2(int fen,int item,double valeur,...);
+void	exec_ARCH(int fen,int item,double valeur,...);
+
+
+//  ----   ecrit et relit les fichiers  DIA2
+
+void	ecrit_fichier_dia2(F_donne  d,unsigned long temp_cntl,unsigned long temps_mac);
+void	fich_save_partiel(int change);		
+
+void	lit_fichier_DIA2(int fen);
+
+
+//  -----   ecrit les fichiers ARCH
+
+
+void	fabrique_block_type_param(void);
+void	fabrique_block_type_reglage(void);
+void	fabrique_block_type_une_periode(void);
+void	fabrique_block_type_bolo_synchro(void);
+
+
+
+void	ecrit_fichier_ARCH(block_type_modele * bktp);
+
+
+
+void exec_lit_fichier_ARCH(int fen,int item,double valeur,...);
+
+void	rejoue_un_block(block_type_modele  * bktp);
+
+//  -----   appel general et lecture données telescope
+
+void	debut_scan_fich(void);
+void	fin_scan_fich(void);
+
+
+void	lit_data_telescope(void);
+
+#define  ajoute_sommaire(ss)	{if(strlen(message_sommaire)>450) {if(strlen(message_sommaire)<490) strcat(message_sommaire,"*");}else	strcat(message_sommaire,ss);}
+#define  ajoute_sommaire2(ss)	{if(strlen(fichiers_perdus)>450) {if(strlen(fichiers_perdus)<490) strcat(fichiers_perdus,"*");}else	strcat(fichiers_perdus,ss);}
+
+
+//debut_id=1007
+//----------------------------------  fenetre : fichier  -----------------------------------
+
+#define fichier_id  1007  //  le id de la fenetre dans la ressource
+
+void exec_fichier(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (18) items 
+
+#define  f_nom                   1     //   static texte 
+#define  f_comment               3     //   edit texte 
+#define  f_d1                    6     //   edit texte 
+#define  f_d2                    8     //   edit texte 
+#define  f_voyant                9     //   controle 
+#define  f_ouvre                 10     //   controle 
+#define  f_bloc                  11     //   static texte 
+#define  f_new                   12     //   controle 
+#define  f_don_tele              14     //   edit texte 
+#define  f_a1                    16     //   edit texte 
+#define  f_a2                    18     //   edit texte 
+
+//fin_id
+
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/fourier.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/fourier.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/fourier.h	(revision 637)
@@ -0,0 +1,26 @@
+
+
+
+//debut_id=1270
+//----------------------------------  fenetre : fourier  -----------------------------------
+
+#define fourier_id  1270  //  le id de la fenetre dans la ressource
+
+void exec_fourier(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (14) items 
+
+#define  f_resu                  1     //   static texte 
+#define  f_bolo                  2     //   controle 
+#define  f_trace                 3     //   controle 
+#define  f_fourier               4     //   controle 
+#define  f_xmin                  6     //   edit texte 
+#define  f_message               7     //   edit texte 
+#define  f_xmax                  8     //   edit texte 
+#define  f_ymin                  9     //   edit texte 
+#define  f_ymax                  10     //   edit texte 
+#define  f_traceymax             12     //   edit texte 
+#define  f_calcule               13     //   controle 
+#define  f_nb_pts                14     //   edit texte 
+
+//fin_id
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/foyer.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/foyer.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/foyer.h	(revision 637)
@@ -0,0 +1,19 @@
+
+
+
+//debut_id=1420
+//----------------------------------  fenetre : foyer  -----------------------------------
+
+#define foyer_id  1420  //  le id de la fenetre dans la ressource
+
+void exec_foyer(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (4) items 
+
+#define  foy_pas                   1     //   edit texte 
+#define  foy_bolo                  3     //   controle 
+
+//fin_id
+
+
+void	trace_foyer(double *y);
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/menu.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/menu.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/menu.h	(revision 637)
@@ -0,0 +1,38 @@
+
+//----------------------------------  menu  diabolo  -----------------------------------
+#define diabolo_id  131  		//  le id du menu dans la ressource
+void  trace_annexe(double * y);
+
+
+void exec_menu_diabolo(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+#define  d_param_reglage	1
+#define  d_trace_tout		3
+#define  d_trace_DS		4
+#define  d_trace_1_per		5
+
+#define  d_fourier		7
+#define  d_courbeVI		8
+#define  d_ondelette		9
+
+#define  d_automatismes		11
+#define  d_regulation		12
+#define  d_dilution		13
+#define  d_senseur_stellaire	14
+
+#define  d_trace_carte		16
+#define  d_pointage		17
+#define  d_foyer		18
+
+
+
+
+//----------------------------------  menu  choix detection synchrone  -----------------------------------
+
+
+#define  choix_DS_sinus_1f	1
+#define  choix_DS_hacheur	3
+#define  choix_DS_secondaire	4
+#define  choix_DS_prisme	5
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/montimer.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/montimer.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/montimer.h	(revision 637)
@@ -0,0 +1,22 @@
+#include <Timer.h>
+
+typedef struct
+	{
+	TMTask		atmTask;			//Apples' time struct
+	long		tmRefCon;			//Used to stuff A4 for recommended method of re-establishing A4 at interrupt time
+	long 		A5;					// rajouté par moi pour sauver A5 : sans doute inutile
+	long		delai;				// delai entre interrupts
+	void 		(*execute)(void*);	// fonction d'interruption   
+	void*		mastructure;		// structure utilisateur
+	}	TMInfo, * TMInfoPtr;
+
+
+/*  lancement et arrêt des interruptions      */
+
+TMInfoPtr	setuptimer(long delai,void (*exec)(void*),void * mastructure);
+void		supprimetimer(TMInfoPtr  myTMInfopt);
+
+
+void 		stoptimer(TMInfoPtr  myTMInfopt);
+void		redemarretimer(TMInfoPtr  myTMInfopt,long delai);
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/onde.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/onde.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/onde.h	(revision 637)
@@ -0,0 +1,19 @@
+
+
+//debut_id=1060
+//----------------------------------  fenetre : ondelette  -----------------------------------
+
+#define ondelette_id  1060  //  le id de la fenetre dans la ressource
+
+void exec_ondelette(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (8) items 
+
+#define  ond_frequ                 3     //   edit texte 
+#define  ond_sigma                 5     //   edit texte 
+#define  ond_filtre                7     //   edit texte 
+#define  ond_raz                   8     //   controle 
+
+//fin_id
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/pointage.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/pointage.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/pointage.h	(revision 637)
@@ -0,0 +1,20 @@
+
+
+
+//debut_id=1390
+//----------------------------------  fenetre : pointage  -----------------------------------
+
+#define pointage_id  1390  //  le id de la fenetre dans la ressource
+
+void exec_pointage(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (6) items 
+
+#define  point_taille                1     //   edit texte 
+#define  point_largeur               4     //   edit texte 
+#define  point_bolo                  5     //   controle 
+
+//fin_id
+
+
+void	trace_pointage(double*y);
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/reglage.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/reglage.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/reglage.h	(revision 637)
@@ -0,0 +1,26 @@
+void	sauve_reglage(int num);
+
+
+
+
+//debut_id=1540
+//----------------------------------  fenetre : reglage  -----------------------------------
+
+#define reglage_id  1540  //  le id de la fenetre dans la ressource
+
+void exec_reglage(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (10) items 
+
+#define  pr_sauve_reglage         1     //   controle 
+#define  pr_num_reglage           2     //   controle 
+#define  pr_nom_reglage           3     //   edit texte 
+#define  pr_nom_reglage4          4     //   edit texte 
+#define  pr_nom_reglage5          5     //   edit texte 
+#define  pr_nom_reglage6          6     //   edit texte 
+#define  pr_nom_reglage7          7     //   edit texte 
+#define  pr_nom_reglage8          8     //   edit texte 
+#define  pr_nom_reglage9          9     //   edit texte 
+#define  pr_nom_reglage10         10     //   edit texte 
+
+//fin_id
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/regul.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/regul.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/regul.h	(revision 637)
@@ -0,0 +1,65 @@
+
+
+
+//debut_id=1180
+//----------------------------------  fenetre : regul  -----------------------------------
+
+#define regul_id  1180  //  le id de la fenetre dans la ressource
+
+void exec_regul(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (15) items 
+
+#define  rg_p                     2     //   edit texte 
+#define  rg_chauf                 4     //   controle 
+#define  rg_i                     6     //   edit texte 
+#define  rg_d                     8     //   edit texte 
+#define  rg_num_bolo              10     //   controle 
+#define  rg_nb_mes                12     //   controle 
+#define  rg_cc                    13     //   controle 
+#define  rg_periode_raz           15     //   edit texte 
+
+//fin_id
+
+
+
+
+//debut_id=1240
+//----------------------------------  fenetre : regulation  -----------------------------------
+
+#define regulation_id  1240  //  le id de la fenetre dans la ressource
+
+void exec_regulation(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (37) items 
+
+#define  regu_chauffage             10     //   controle 
+#define  regu_chauffage11           11     //   controle 
+#define  regu_chauffage12           12     //   controle 
+#define  regu_chauffage13           13     //   controle 
+#define  regu_bolo                  14     //   controle 
+#define  regu_bolo15                15     //   controle 
+#define  regu_bolo16                16     //   controle 
+#define  regu_bolo17                17     //   controle 
+#define  regu_voie_chauf            18     //   controle 
+#define  regu_voie_chauf19          19     //   controle 
+#define  regu_voie_chauf20          20     //   controle 
+#define  regu_voie_chauf21          21     //   controle 
+#define  regu_prop                  22     //   controle 
+#define  regu_prop23                23     //   controle 
+#define  regu_prop24                24     //   controle 
+#define  regu_prop25                25     //   controle 
+#define  regu_int                   26     //   controle 
+#define  regu_int27                 27     //   controle 
+#define  regu_int28                 28     //   controle 
+#define  regu_int29                 29     //   controle 
+#define  regu_deriv                 30     //   controle 
+#define  regu_deriv31               31     //   controle 
+#define  regu_deriv32               32     //   controle 
+#define  regu_deriv33               33     //   controle 
+#define  regu_mode                  34     //   controle 
+#define  regu_mode35                35     //   controle 
+#define  regu_mode36                36     //   controle 
+#define  regu_mode37                37     //   controle 
+
+//fin_id
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/senseur_stellaire.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/senseur_stellaire.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/senseur_stellaire.h	(revision 637)
@@ -0,0 +1,16 @@
+
+
+
+//debut_id=1510
+//----------------------------------  fenetre : senseur_stellaire  -----------------------------------
+
+#define senseur_stellaire_id  1510  //  le id de la fenetre dans la ressource
+
+void exec_senseur_stellaire(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (3) items 
+
+#define  sst_azer                  1     //   edit texte 
+#define  sst_sortie_brute          3     //   controle 
+
+//fin_id
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/structure.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/structure.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/structure.h	(revision 637)
@@ -0,0 +1,38 @@
+
+enum	{err_sync_repart,err_fifo_demi,err_fifo_pleine,err_sync_bebo,err_sync_ctrl,err_lect_pci,err_lect_ctrl,
+err_synchro_block,err_recut_un_block_ok,err_longueur_block,err_sauve_block,err_pile_pleine};
+
+
+
+
+typedef struct			//  table courante pour dialogue avec les interruptions  
+	{
+	
+	int			pos_ecrit;						// position dans la table d'erreur
+	int			pos_lit;
+	long		err[long_table_err];		
+	}
+	table_erreur;
+
+
+typedef struct			//  parametres de regul pour dialogue avec les interruptions  
+	{
+	char		code;										
+	char		num_bolo;										
+	char		nb_mes;						  	
+	char		chauf;
+	short		p;
+	short 		i;
+	short 		d;
+	}
+	regul_p_i_d;
+
+
+
+
+typedef struct	{
+				short	don_bolo[nb_max_bolo];			 
+				char	sync[nb_sync];					// les synchro en cara (6 signaux)
+				} F_donne;	  
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/structure_diabolo.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/structure_diabolo.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/structure_diabolo.h	(revision 637)
@@ -0,0 +1,121 @@
+//#define mode  taillesymbole
+/*
+Le fichier de données diabolo est un fichier mac de type 'DIA2' qui contient 
+	une suite d'enregistrements.
+	
+Il commence par une entete correspondant à la structure de type F_entete
+	- cette entete contient 
+
+On a ensuite une suite d'enregistrements comportant chacun:
+	- une entete partielle avec les parametres de mesure, y compris les parametres DAC
+		structure de type F_entete_part
+	- une suite de valeur correspondant à chaque point mesuré et contenant:
+			Le temps calculé
+			Les 6 signaux de synchro
+			Les voies 1 à 7 :  5 bolometre + 1 temperature + 1 chauffage regul
+
+*/
+
+
+enum		{bol,bolxx,chauf,pipo};			//  types de bolometres
+
+
+#define max_nb_donne	1000L				// nombre maxi de donne dans un bloc du fichier
+#define	temps_max_fichier	300				// durée maxi d'un fichier (5 minutes) 
+
+
+
+#define		max_nb_mesures		256			// maxi dans une periode de modulation electrique
+
+#define 	nb_ds_table			3			// 4  DS :	-	signal
+											//			-	chauffage
+											//			-	transitoire
+											//		pas de mesure de linéarité
+
+#define 	nb_max_bolo			9			//  5 bolo, 1 chauff  1 non util.  (MONTER À 11 maxi)
+#define		nb_sync				6			//	1 synchro diode + 5 synchro externes
+
+
+/*
+ long_entete 	  		= 272 
+ long_entete_part 		= 2128 
+ long_donne 	  		= 14 
+
+*/
+
+
+typedef struct			//  etat de l'ensemble de la manip , aussi pour entete partielle  
+	{
+	
+				long	duree;						// durée d'une periode (en µsec)
+				short	nb_mesures;					// nombre de mesures dans une periode
+				short	temp_mort;					// temps mort pour la detection synchrone numerique
+
+				short	diode_etat;					// etat des diodes
+				short	diode_dure;					// duree de periode des diodes
+
+				short	gainbrut[nb_max_bolo];				// valeur du gain codé : (0,1,2,...,15) 
+				short	gain[nb_max_bolo];					// valeur du gain en vraies valeurs(1,2,4,8,10,...,8000) 
+				short	dac[4][nb_max_bolo];				// les valeurs des DAC 4 voies en entier (0 à 4095)
+				short	phase[nb_max_bolo];					// valeur du dephasage individuel : valeur  0  à  4
+
+	}
+	etat_bolo;
+
+
+
+typedef struct	{
+				short	version;					// 1 pour cette version du programme
+						
+				short	long_entete;				// longueur de l'entete	
+				short	long_entete_part;			// longueur de l'entete partielle
+				short	long_donne;					// longueur d'une ligne de données
+
+				unsigned long tempsdebut;			// temps de debut de fichier	
+				unsigned long tempsfin;				// temps de fin de fichier
+				char commentaires[256];				// commentaires à la main
+				} F_entete;	  
+
+
+typedef struct	
+				{
+				short	n_ligne_don;				// Nombre de lignes de donné dans cet enregistrement
+													// ou    nombre d'octets du commentaire
+				short	n_blok;						// numero du blok dans le fichier
+				short	change;						// valeur 0 = bloc identique au precedent
+													// valeur 1 = bloc modifié
+													// valeur 2 = debut de prise de donnees
+													// valeur 10 = le block ne contient qu'un commentaire
+
+				short	bololut;					//  bit 0 à bit 3  ==1  si les courbes bolo ont ete lues
+				} F_block_desc;
+
+
+typedef struct	
+				{
+
+				unsigned long 	temps_controleur_debut;		// en micro/secondes :temps du premier point dans le bloc			
+				unsigned long 	temps_controleur_fin;		// en micro/secondes :temps du dernier point dans le bloc			
+				
+				etat_bolo	eb;
+				
+				short 	bolo[nb_max_bolo][max_nb_mesures];	//   courbe echantillon d'une mesure
+							
+				} F_block_param;	  
+
+
+typedef struct	{
+				short	bolo[nb_max_bolo];			 
+				char	sync[nb_sync];					// les synchro en cara (6 signaux)
+				} F_donne;	  
+
+
+//__________________________   calcul des valeurs  vraies en micro/volt  ou % de chauffage
+
+#define		xbol(j)		((1e5*(double)gg->don.bolo[j])/(65536.*((double)(gg->eb.gain[j]))))		// en µV
+#define		xsat(j)		((100.*(double)gg->sat[j])/32768.)										//  0  à  100% 
+#define		xchauf(j)	((100.*(double)gg->don.bolo[j])/32768.)									//  0  à  100% 
+#define		xtrans(j)	((1e5*(double)gg->trans[j])/(65536.*((double)(gg->eb.gain[j]))))										//  0  à  100% 
+
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/synchro.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/synchro.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/synchro.h	(revision 637)
@@ -0,0 +1,51 @@
+#define	max_points_DS		2000
+
+extern	double	synchro_periode;
+
+
+//debut_id=1005
+//----------------------------------  fenetre : synchro  -----------------------------------
+
+#define synchro_id  1005  //  le id de la fenetre dans la ressource
+
+void exec_synchro(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (12) items 
+
+#define  sy_voyant                1     //   controle 
+#define  sy_select                7     //   controle 
+#define  sy_phase                 8     //   controle 
+#define  sy_periode               9     //   static texte 
+#define  sy_fixe                  10     //   edit texte 
+#define  sy_force_scan            11     //   controle 
+#define  sy_force_subscan         12     //   controle 
+
+//fin_id
+
+
+
+//debut_id=1008
+//----------------------------------  fenetre : trace_DS  -----------------------------------
+
+#define trace_DS_id  1008  //  le id de la fenetre dans la ressource
+
+void exec_trace_DS(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (12) items 
+
+#define  ds_filtre                3     //   edit texte 
+#define  ds_raz                   4     //   bouton 
+#define  ds_periode               5     //   static texte 
+#define  ds_temps_mort            7     //   edit texte 
+#define  ds_choix_DS              8     //   controle 
+#define  ds_phase                 10     //   edit texte 
+#define  ds_raz_parasite          11     //   controle 
+#define  ds_enregistre            12     //   controle 
+
+//fin_id
+
+//------------  items supplémentaires créé par moi pour appel de trace
+
+#define			ds_debut	100
+#define			ds_suite	101
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/tache.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/tache.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/tache.h	(revision 637)
@@ -0,0 +1,14 @@
+void init_tache(void);
+
+void lecture_fifo(void* gq);
+
+void	regul(tmtc *tt);
+void	raz_periodique(tmtc* tt);
+
+void	decode_telecommande(tmtc* tt);
+
+
+void  	tache_regul(tmtc* tt);
+int		ecrit_commande_PCI(tmtc* tt);
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/tm.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/tm.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/tm.h	(revision 637)
@@ -0,0 +1,183 @@
+
+// Les données télémesure sont formées de blocks de type  block_tm
+// la table de transfert de ces blocks est la structure  table_tm
+// la longueur de table telemesure est    longueur_table_tm
+
+
+//#define   nb_per_block*2	24				// nombre de demi periodes dans un block télémesure
+//#define   longueur_table_tm		20		// nb de blocks dans la table pour transmettre les télémesures
+//#define   longueur_table_tc   100			// nb de datas dans la table de télécommandes
+
+//longueur definies dans choix_param
+
+
+	//  -----   pour detection synchrone
+typedef struct		
+	{	
+	int 	ii[nb_max_bolo];			// compteur position dans la periode
+	short 	dstable[nb_max_mes_per];		// table les différents ds
+	short	dsnorme;				// norme des detections synchrones
+	long	sommeA[nb_max_bolo];	
+	long	sommeB[nb_max_bolo];	
+	}	detec_sync;
+
+
+
+typedef struct			//  block telemesure pour dialogue avec les interruptions  
+	{
+	unsigned long		temps_cntl[nb_per_block*2];	// temps du controlleur en µsec  
+	unsigned long		temps_mac[nb_per_block*2];		// temps du mac en sec  
+	reglage_bolo		reglage;					// parametr de reglage des bolos
+	int			chauf_regul;						
+	
+	short 			flag_bolo[nb_max_bolo];			// flag de lecture detail de la forme de modulation
+	short 			bol_per[nb_max_bolo][nb_max_mes_per];	// table une periode detail de la forme de modulation
+	F_donne			don[nb_per_block*2];		// donnees bolo et synchro pour  "nb_per_block*2" periodes  
+//*****************************************************************************************
+#ifdef _archeops	//---------   pour  Archeops    ------------------------------	***
+//*****************************************************************************************
+	block_type_modele		tmtrx;
+//*****************************************************************************************
+#endif		//--------------------------------------------------------------------	***
+//*****************************************************************************************
+	}	block_tm;
+
+
+typedef struct			//  block telecommande pour dialogue avec les interruptions  
+	{
+	char 			mot[10];	// 10 mots de commande
+	}
+	block_tc;
+
+
+
+
+typedef struct			//  table courante telemesure pour dialogue avec les interruptions  
+	{
+	
+	int				pos_ecrit;						// position dans la table 
+	int				pos_lit;
+	block_tm		btm[longueur_table_tm];			// longueur_table_tm  blocks de telemesure
+	}
+	table_tm;
+
+typedef struct			//  table courante telemesure pour dialogue avec les interruptions  
+	{
+	
+	int				pos_ecrit;						// position dans la table 
+	int				pos_lit;
+	block_tc		btc[longueur_table_tc];			// longueur_table_tc  blocks de telecommande
+	}
+	table_tc;
+
+
+typedef struct			//  parametres de regul dans les interruptions  
+	{
+	regul_p_i_d	pid;
+
+	long		valeur;
+	long 		anc_ecart;
+	int		compteur;	
+	double		tint;
+	int		cc;
+//	int		per_raz;	// nombre de periode entre 2 raz (zero tension sur la modulation)
+//	int		nb_raz;		// nombre de periode courant
+	}
+	param_regul;
+
+
+//*****************************************************************************************
+//											***
+#ifdef _archeops	//---------   pour  Archeops    ------------------------------	***
+//											***
+//*****************************************************************************************
+
+
+
+typedef struct			//  variables internes du programme d'interruption pour Archeops  
+	{
+	unsigned long	temps_cntl;		// temps courant du controlleur en unite de 4.8 µsec ??? en demi periodes  
+
+	int		a;			//  compteur pour check debut et fin de block
+	int		b;			//  compteur de mot 32 bit dans un block
+	int		c;			//  compteur de bytes dans un mot 32 bit
+
+	block_type_modele	btt;			//  le plus gros des blocs telemesure transputer dans arc_com.h
+//*****************************************************************************************
+#ifdef _sans_transputer		//---------   pour  Archeops avec ctb    -------------	***
+	char		bkb[nb_per_block*nb_max_mes_per*5];	//  le block brut venant des bebo
+#endif		//--------------------------------------------------------------------	***
+//*****************************************************************************************
+	}
+	var_internes;
+
+//*****************************************************************************************
+//											***
+#else			//---------   pour  Diabolo    ------------------------------	***
+//											***
+//*****************************************************************************************
+
+typedef struct			//  variables internes du programme d'interruption pour diabolo  
+	{
+	int		aa;					//  pour deux lectures fifo par point
+	int 		a;					// compteur bit dans un mot
+	int 		i;					// compteur position générale dans la periode
+	long 		debut_per;				// flag debut de periode
+
+	int		numbol;					// le numero de bolo en cours de lecture par la bebo
+	long		mot[nb_max_bolo];			// mot pour lecture de chaque voie ADC (phase en bit 12)
+	long		motsauve[nb_max_bolo][nb_max_mes_per];	// mot pour sauve mot precedent
+		
+	char		synchro[nb_sync];			// pour calcul interne des synchro avant de les envoyer
+		
+		
+	int		flag_ecriture_data;			// flag pour ecrire les data sur le bus PCI
+	int		pos_block_tm;				// position pour ecriture des données dans un block tm
+		
+	unsigned long	temps_cntl;				// temps courant du controlleur en µsec ou demi-periodes  
+		
+	param_regul	reg;					//  ------  parametres de la regulation
+	
+	}
+	var_internes;
+
+//*****************************************************************************************
+//											***
+#endif		//--------------------------------------------------------------------	***
+//											***
+//*****************************************************************************************
+
+
+
+//----------------------  structure complete  tm  +  tc  +  interne  tache
+
+
+typedef struct			//  global connu de la tache et du prog principal  
+	{
+	int			PCI_actif;		//	le PCI est actif
+
+	
+	table_tm		tm;			//	table de telemesure  
+	table_tc		tc;			//	table de télécommande
+
+	table_erreur		te;			//	table courante pour gestion des erreurs de bus PCI
+
+	int			nb_lec_fofo_int;	//  nombre maxi de lectures dans la fifo en un coups d'interrupt
+	int			nb_lec_fofo_ext;	//  communication avec le prog principal: remis a zero apres lecture
+		
+	int 			signal_scan_immediat;	//  signal scan immediat pour savoir avant
+
+
+	param_bolo		param;			//	liste bolo dans le programme d'interruption
+	reglage_bolo		reglage;			//	etat bolo dans le programme interruption	
+	
+	detec_sync		ds;			//	registres pour detection synchrone numerique
+					//  -----   communication directe avec le  prog de lecture_fifo en interruption 
+
+
+	var_internes	vi;					//  variables internes du programme d'interruption
+	}
+	tmtc;
+
+extern  tmtc  *tt;
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/trace.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/trace.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/trace.h	(revision 637)
@@ -0,0 +1,69 @@
+
+
+
+//debut_id=1002
+//----------------------------------  fenetre : trace_tout  -----------------------------------
+
+#define trace_tout_id  1002  //  le id de la fenetre dans la ressource
+
+void exec_trace_tout(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (13) items 
+
+#define  t_raz                   1     //   bouton 
+#define  t_efface                3     //   bouton 
+#define  t_moyenne               5     //   edit texte 
+#define  t_corel                 7     //   edit texte 
+#define  t_retour                8     //   controle 
+#define  t_fmini                 10     //   edit texte 
+#define  t_fmaxi                 11     //   edit texte 
+
+//fin_id
+
+
+
+//debut_id=1009
+//----------------------------------  fenetre : trace_1_per  -----------------------------------
+
+#define trace_1_per_id  1009  //  le id de la fenetre dans la ressource
+
+void exec_trace_1_per(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (10) items 
+
+#define  tp_raz                   1     //   bouton 
+#define  tp_efface                3     //   bouton 
+#define  tp_sans_image            4     //   bouton 
+#define  tp_lissage               6     //   edit texte 
+#define  tp_moy                   7     //   controle 
+#define  tp_nb_moy                8     //   static texte 
+#define  tp_decale                10     //   edit texte 
+
+//fin_id
+
+
+
+
+
+
+
+//debut_id=1008
+//----------------------------------  fenetre : trace_DS  -----------------------------------
+
+#define trace_DS_id  1008  //  le id de la fenetre dans la ressource
+
+void exec_trace_DS(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (13) items 
+
+#define  ds_moyenne               3     //   edit texte 
+#define  ds_raz                   4     //   bouton 
+#define  ds_periode               5     //   static texte 
+#define  ds_temps_mort            7     //   edit texte 
+#define  ds_choix_DS              8     //   controle 
+#define  ds_phase                 10     //   edit texte 
+#define  ds_raz_parasite          11     //   controle 
+#define  ds_enregistre            12     //   controle 
+#define  ds_retour                13     //   controle 
+
+//fin_id
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/trace_tout.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/trace_tout.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/trace_tout.h	(revision 637)
@@ -0,0 +1,43 @@
+#define max_couleur 10
+typedef struct
+	{
+	double y[nb_max_bolo+1];
+	double f1[nb_max_bolo+1];
+	double f2[nb_max_bolo+1];
+	int moyenne,ipas;
+	double fmini,fmaxi;
+	int bolo_couleur[max_couleur];
+	}
+	util_trace_tout;
+
+
+//debut_id=1002
+//----------------------------------  fenetre : trace_tout  -----------------------------------
+
+#define trace_tout_id  1002  //  le id de la fenetre dans la ressource
+
+void exec_trace_tout(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (33) items 
+
+#define  t_raz                   1     //   bouton 
+#define  t_efface                3     //   bouton 
+#define  t_moyenne               5     //   edit texte 
+#define  t_corel                 7     //   edit texte 
+#define  t_retour                8     //   controle 
+#define  t_fmini                 10     //   edit texte 
+#define  t_fmaxi                 11     //   edit texte 
+#define  t_bolo_couleur          24     //   controle 
+#define  t_bolo_couleur25        25     //   controle 
+#define  t_bolo_couleur26        26     //   controle 
+#define  t_bolo_couleur27        27     //   controle 
+#define  t_bolo_couleur28        28     //   controle 
+#define  t_bolo_couleur29        29     //   controle 
+#define  t_bolo_couleur30        30     //   controle 
+#define  t_bolo_couleur31        31     //   controle 
+#define  t_bolo_couleur32        32     //   controle 
+#define  t_bolo_couleur33        33     //   controle 
+
+//fin_id
+
+
Index: /trunk/Poubelle/archediab.old/archediab.sources/h/version.h
===================================================================
--- /trunk/Poubelle/archediab.old/archediab.sources/h/version.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab.sources/h/version.h	(revision 637)
@@ -0,0 +1,8 @@
+
+//  diabolo-PCI-tm-11
+
+//  fonctionne avec table tc pour envoi des commandes
+
+//  la table tm est remplie par le programme tache mais n'est pas utilisée
+
+
Index: /trunk/Poubelle/archediab.old/archediab_24.rsrc
===================================================================
--- /trunk/Poubelle/archediab.old/archediab_24.rsrc	(revision 637)
+++ /trunk/Poubelle/archediab.old/archediab_24.rsrc	(revision 637)
@@ -0,0 +1,1216 @@
+(This file must be converted with BinHex 4.0)
+:%@&bBfKPC'PKBPmb0#jbFh*M!(*cFQ058d9%!3#3"J%4e01F!*!%!3!!!1-+!!$
+L#J!!,XS!!%k-$Q4TB@*[E'mZY5jbFh*MY3)!!!"bFh*M8P0&4"&KFQ0SC@4TB@*
+I-M3ZFR0bBf&X,Q0MF'PP)%4#+6FJ!!"bFh*M8P0&4!%!!$m!2`#3%UmAApF!N!8
+"%G3!N!`2!!!!6S`*CQPMD'PPFLjM!J!!!&4&@&4,38K-!3!!2!$!!*!%6T)!N!3
+'8!!!&J#3"3&q!!!@!+RY5FUUrpBY!*!@pV`!!3#3#2Dp!!%!N!mE!")!0!!N!'!
+!!!%!$k!!!"!3!!-!"!4MER4X!!!!'`!Q!$3!0`"J!!!"!!qJ!!!3%!!$!!3%Bfj
+dE!!!!"X!1J!d!%S!B!!!!3!2S!!!%"!!!`!%"'0ZG'`!!!!E!%`!0!"F!'!!!!%
+!$k!!!"!3!!-!"!4MER4X!!!!(!!%!!%!%!!K!!!"!!!"!!!5`#)#!!N&BA9dE`d
+!!!!H!!3!#!!8!&!!!!%!!!%!!",!%3)!#JGND@pNC6%0!!!!(3!8!!J!*!"3!!!
+"!!!"!!!5`"%#!!X'C'P[C'8b!!!!'`!"!)`!'J#X!!S"!!!J!!!3%!!!!!`%Bfj
+dE!!!!"X!!`!#!"!!$J!"!3!!#J!!%Y!!N!3%BfjdE!!!!"X!%!!#!"`!$J!!!3!
+!"3!!%Y!!N!3%BfjdE!!!!"X!(J!#!#S!$J!!!3!!#J!!%Y!!N!3%BfjdE!!!!"X
+!,!!#!$J!$J!!!3!!#J!!%Y!!N!3%BfjdE!!!!"X!1J!#!%B!$J!!!3!!#J!!%Y!
+!N!3%BfjdE!!!!"X!5!!#!&3!$J!!!3!!#J!!%Y!!N!3%BfjdE!!!!#d!!3"X!%B
+![!!!!3!!C!!!%1!i!!&X&R"SBA0P,$!X,5`Y,#dXZ5`V,#XX+b`!!!!A!!3!V!!
+S!03!$!%!!%!!!"!3!!!!$!#3""F!"!$B!#J!q!!8!3!!2`!!%"!!!!!-!*!%'J!
+F!)`!0!#X!!S"!!!J!!!3%!!!!!`$H(Ki!!!!(3!N!!J!-J")!!!"!!!"!!!5`"%
+$!!S'F(*TFfeP!!!!(`!#!$!!%3$'!!3"!!!&!!!3N!!!!!#"#'0SEfPi1L!0!!!
+!-!#3"`3!!1[pAAR3[`!"1T3A52H1!!,0S`)I!Km!!pMd33+6!J!%#bAa*5M'!!!
+!-!#3"`3!!)'crrmPUJ!")6i)Mk)E!!)%+`3BDc3!!r1qTGVGF3!%B(GJGf"h!!!
+!-!#3"`3!!04V@(%+l3!")6i)Mk)E!!)%+`3BDc3!!r1qTGVGF3!%B(GJGf"h!!!
+!-!#3"`3!!-c-rj!%!!%K2JL2SKX!!J3V""KV0!!$mlkPfYea!!4JGf"hB(F!!!!
+`!*!("!!!rj!%-c-!!5%q#)qL'`!#"#X%''Xd!!2c[UADhA%!"1lZ!*!(-!#3"`3
+!!-c-rj!%!!%K2JL2SKX!!J3V""KV0!!$mlkPfYea!!4JGf"hB(F!!!!`!*!("!!
+!e'YBF3VY!!%K2JL2SKX!!J3V""KV0!!$mlkPfYea!!4JGf"hB(F!!!!B!+-!d!%
+A!Td!#!!!!3#3"32S!5S!N!8B!'8"#J$P!I%!#!!!!3#3"32T!5S!N!8B!1B!Y!'
+e!Ui!#!!!!3#3"32U!5S!N!8B!-X!*`'+!F!!#!!!!3#3"32Y!5S!8J!!!"J!*`&
+'!08$03!)!!!"!*!&!qm"+J#3"4J!jJ"3!R-#R`!)!!!"!*!&!r!"+J#3"4J!A!"
+N!Ri$,3!)!!!"!*!&!r%"+J#3"4X!5!!8!&N!*!!!!3!!!`!!%"!!!!!*"'0ZG'`
+!!!!E!#J!$!!j!#3!!!%!!!m!!"!3!!!!#`4MER4X!!!!'`#%!!3!N3!R!!!"!!!
+"!!!5`#B$!!S%BQa[F3!!!"J!P`#F!GB#+`!)!!!"!*!&"!B"+Q9)!!!!-!#3"`3
+!N!3c-rrr!!%!N!F#!*!(!`#3"`6rN!B!!!!G!!%!!3!A!$%!!!%!!!%!!",!%3!
+!$!CYCA0eFQ8!!!!E!!%!0!!@!&`!!!%!!!%!!",!%3!!$!4cG'p`!!!!H!!$!!!
+!5!")!*!%!KS$$IrMrq%#0J-V!d8&H`2J!!)!!!")!%J!N!3#f!)S!!%!!!"N!!!
+!!3!$!`-!r`!"*`m!!3!"!*!-D!J!'3'3!!#3$`%!N")""!#3-%!N!*!'2r!!N!j
+!9S!!N!9!*!#3"kqMl!#3"'eP!*!(*!'[S[J!!!!"!!!!!3!!@!$rN!3!!3#3$43
+"Vk,irj!'@3#3#"!"Vk,iBfK[D3#3"b3"Vk,i!*!0!3#3$`)!!!!"!*!("J!!!!3
+!!!!)!!!$r`#3"`%!!!!*!!!!!3!!!!S!!!!$!!!!'!"`!!m"I`*X!!J!!!%!N!8
+%*!%UH(J!!!!`!*!("!!!3GTX-rrr!!(rraD`)ZJ!!J3V""KV0!!$mlkPfYea!!4
+JGf"hB(F!!!!K!!%!B!!@!*3!!!%!!!%!!",!%3!!#3TMB@aMG@`JEQ9`!!!!'J!
+%!!J!&J!d!!!"!!!"!!!5`"%!!!`$FQ&k!!!!PJ!(!*!&"!!i!"3!K)J*CR*PFA9
+PEQ0P!*!'(!!%!3S#@!#3"`F!L`!9!-%3!6%!N!B%!-J!&J%FL!YcD@GYB5K[EQ4
+P+3#3"JF")`!9!983!6B!N!B%!9`!&J'%L!CQD@adFQ8!N!8(!BF!&3'j%!)a-!#
+3"33!#!!@!$3(!LPS!!!"6[rq!!K[EQ4P,QJ!!,HJ!#`!0!!m!%#)!A3!!ELhR!"
+8!!3!!'pZC!"dFQ%!"!3!N!N-!&)!1)J%E'PZ,J'i!!!!%J"!,3!!H!F#*aX"Z,H
+)!#J!3!!m!(J!N!8"!!!5`!#3(3%!!",!!*!%CR*PFA8!N"3"!!!5`!#3"#d!N"J
+"!!!5`!#3"(0TCfeK!*!8!3!!%X!!N!3Y!*!B!3!!%X!!N!4QD@adFQ8!N!lrr`!
+!!!%!!",!%3!!$(*KHJ#3&KJ!+3)F!-S$L!!)!!!"!*!&"%)"+Jr`!!!!'J!%!53
+!)!&)!!%"!!!2!!!3%!!!!!`$H(Ki!!!!)3!%!1`!)J%F!!!"!!!"!!!5`"%!!!S
++CQPiC3eRB@PZF`!!!#B!8!#S!'`!i!!!!3!!!3!!%X!4!!!+$h4[GA-JBf&bFQ8
+0BA9dE`!!!#B!8!$S!'`")!!!!3!!!3!!%X!4!!!+$h*TC@iJBf&bFQ80BA9dE`!
+!!#3!*!"8!%)!T!!#!3!!!J!!%X!4!`!,$A0MB@i0Fh9LAh0MB@i!!!!`!*!("!#
+3",Zl!!!!!3#3"`)!N!F$!*!("2q3"J!!!"J!-J(0!M3#V!!)!!!"!*!&"(i"+J#
+3"6!!N!F%!!!K5@3Hrrm!!5%q#)qL'`!#"#X%''Xd!!2c[UADhA%!"'"hB(GJG`!
+!!#F!j!&m!2S#!3!!!3!!!3!!%X!4!!!-%(0KGACP)(9ZC5"MEfjQD@F!!!!G!#m
+!)J%a!@X!!!%!!3#3"3T1CAFJ9fPZC'ph!!!!(3!)!+J!&J$N!!!"!!!"!!!5`"%
+#!!X'G'KPFQe[!!!!'!!X!3N!ZJ*(!!J!!!%!N!8%R!%U!*!&-!#3"`3!!2rrBH%
+K9`!"QCRrrmc-!!+)L!#3"32c[UADhA%!"2rr!*!(&`"3!2`!D`%U!!-"!!!$!!!
+3%!!!!!`!N!3D!!3!R!!F!-!!"!%!!!N!!4!3)3!!$!0iH(J!!!!A!"3!r!![!5S
+!!J%!!'3!!"!3!!!!$!#3""F!4!(!!,-"d!I3!3!2S!!!%(#6)!#3"3)mrri!$h*
+PCh9X,QJ!!2,P!!$bjK!!N!8ZDE!")AB!!!S!!(*R!%8!iJ!!"!3!N!XZDC!!!5&
+f!*!1mZ8!N"3"!!!5`!#3"(!!E'9eFJ#3%`%!!",!!*!G!`!!%"!!!!!-BfKKG@B
+!N"&f!*!1mZ8!N"3"!!!5`!#3"'N!E'9eFJ#3%(B!N!lbj3#3&!%!!",!!*!%C!"
+XCA9b!*!6!3!!%X!!N"X"!!N!!4!3)3!!$'jeE9pLEfa[!*!4!3!!%X!!N"X8!'3
+!!"!3!!!!$'jLAfePF`#3%!I3$k!!!""`Nb!!!'0M!*!A!3!!%X!!N"d"!!!5`!#
+3"("PFQP[C'9IFQ&k!*!1'J%X!-J"6!$d!!!"!!!&!!!5d!!!!!-$H(Ki!!!!)J!
+%!!3!+!"-!!)"!!!#!!%5`'*6!!i,Eh9fFQ80CQ9bE@8!!!!E!!%"1!!F!9J!*J%
+!!#`!""!3!!!!#J4MER4X!!!!&`#X!*`![J#i!!F"!!!2!!!3%!!!!!`!N!3F!-J
+!"!$B!$`!!3%!!!%!!",!'3)!$!9fEfPP1!!!!"F!a!#F!0B!Z!!)!3!!$`!!%"!
+!!!!-!*!%(!$J!!3!m!!m!!%"!!!"!!!5`"S#!!`&GQpTC6N!!!!A!0`!R!$Z!,J
+!#3%!!!m!!"!3!!!!$!#3""S!P!!8!+%!)J!"!3!!$!!!%Y!!N!3$H(Ki!!!!-`$
+%!%!!eJ#B!!)"!!!%!!%3N!!!N!3FG(P`C3dJ)#m[)#!068a333eLC@*[33eLC@*
+[3J!!!$-!h!"!!1i!Q!!#!3!!"!!"%*!!!*!%((4jF'80)#![,b!J$8e-8%%0BQ9
+LEd%0BQ9LEd)!!!!E!!J#6!!F!S`!!!%!!!%!!",!%3)!$!4dEh9c!!!!(3!"!0J
+!%3%F!!!"!!!"!!!5`"%#!!`'F(*PBfPc!!!!Y!!+!*!&&!$B!#B",)J#56d!N!8
+S!!%"1J'+!*!(&!%i!#3"N!#)!PBp!*!&!3!"!"F!-3F#+$d!N!8"!$3!&J"F"`)
+S2J#3"3%!R!!9!0!(!LJr!*!&!`&6!"!"Ja!"-J#3"J%"(!!5!9L)"R4PEA"c1J#
+3"3%!B!!@!*3(!LJm!*!&#!*-!"`#M!F#+%!!N!8"!0J!%3%F"`)S33!!!E6rrJ!
+,BfpeFQ*P9NNZD!$l![`!N!J@S!-(!!#5VJ%!BhCT!!!!&J!%"!#3#TQd!*!&r3-
+S!*!)GQ&X53!!RK)!N!J@B+%H!*!&!3!!%X!!N"Mrr`!!!!%!!",!!*!%GQ&X9J#
+3&3%!!",!%3!!$'ePFh9bC3#3%`%!!",!%3!!$#S!N"Jr!!!3N!!!!J!!BQpXE`#
+3&3%!!",!!*!%GQPdCA0cC3#3%J%!!",!!*!G!3!!%X!4!!!*Bf&XBepZCA!!N"%
+"!!!5`"%#!!adEh9c!*!9!3!!%X!4!J!-F(*PBfPc!*!5!6!!$J#3"5)!$J!e!(1
+)$A"bEh"[FR4TEfjZC@`!N!B[!(X!23$0%!%i!*!'2!$S!%i"0)J*BfKKG@CQB@G
+P!*!'8!$m!'X"+JF#,KJ!N!9)!!`!@`"aL!KTER4PCh*KE!#3"8F!H`"9!-d3!c-
+`-!#3"Q!!$!"c!(')"Q4PFQPfMJ#3"9m!H`"Y!-d3!M8`!*!&#!!S!"J!N!#)$R*
+PCh9X)(0eFL"LEfa[!*!&"!#F!"`!`!F#,KN!N!8"!1`!%`%iL!TbCA"PG'PdD@p
+Z!*!&&!$m!#m"+JF#,KS!N!9%!F!!X`(3"`)Z'`#3"AJ!$!#'!'+)#h"PFQP[C'9
+IFQ&k!*!'G`"l!)8!c4!"-!#3""J!R3$T!L%$%3!)!!!"!*!&",S"+J#3"6!!N!F
+%!!$-c2q3"!!")6i)Mk)E!!)%+`3BDc3!!r1qTGVGF3!%B(GJGf"h!!!!&`!)!!J
+!(J!F!!%"!!!"!!!5`#)#!"3!N!3A!#3!#!!k!"`!!3%!!!%!!",!-`)!&!#3""F
+!3!!)!&B!(!!"!3!!!3!!%X"%!J!8!*!%&`"F!!J!FJ!F!!%"!!!"!!!5`&8#!"3
+!N!3A!(J!#!#1!"`!!3%!!!%!!",!CJ)!&!#3""F!P!!)!+S!(!!"!3!!!3!!%X"
+h!J!8!*!%&`#`!!J!aJ!F!!%"!!!"!!!5`)J#!"3!N!3A!-`!#!$L!"`!!!%!!!%
+!!",!Q3)!&!#3""F!k!!)!2i!(!!!!3!!!3!!%X#U!J!8!!!!!U,rrJ!5G(*KBf9
+IBfpbC@`ZD!#Q-!#3"5&AF!)8$eJ!#J!!BfKMFJ$LlJ!%"!#3#b&A8!)8$eJ#+DD
+!!*!&)@0SEfPiAf0[FQ9XAc%!IrpA-!)T!*!&!3!!%X!L!J!8BQpeG'pZAc%!N!i
+2@!)TTS!!N!8KBfK[DAKIBfpbC@aI-3"rreF`!LN!N!8"!!!5`$-#!"4LEh9dEfj
+I-3#3$JpB!LQQJ!#3"5&MD'pTH&pMEh*PE&ma!(rr9c!#+3#3"3%!!",!4!)!&'*
+[GA4[EPma!*!1$eJ#+DD!!*!&)@0SEfPiAf0[FQ9XAc%!IrpA-!)T!*!&!3!!%X"
+9!J!8BQpeG'pZAc%!N!i2@!)TTS!!N!8KBfK[DAKIBfpbC@aI-3"rreF`!LN!N!8
+"!!!5`'B#!"4LEh9dEfjI-3#3$JpB!LQQJ!#3"5&MD'pTH&pMEh*PE&ma!(rr9c!
+#+3#3"3%!!",!G`)!&'*[GA4[EPma!*!1$eJ#+DD!!*!&)@0SEfPiAf0[FQ9XAc%
+!IrpA-!)T!*!&!3!!%X#)!J!8BQpeG'pZAc%!N!i2@!)TTS!!N!8KBfK[DAKIBfp
+bC@aI-3"rreF`!LN!N!8"!!!5`*N#!"4LEh9dEfjI-3#3$JpB!LQQJ!#3"5&MD'p
+TH&pMEh*PE&ma!(rr9c!#+3#3"3%!!",!UJ)!&'*[GA4[EPma!*!4(3!"!&`!%J#
+V!!!"!!!"!!!5`"%!!!`'C@CQB@0P!!!!'J%i!)3"5J#c!!!"!!!"!!!5`"%!!!`
+$EQ9h!!!#S[rq!"*QD@0SD@9b,QJ!T,!!4kA`!*!&-m(`!(Z,B!#3"'B!B`#3"33
+%!*!44kA`!*!(3'j[E3#3#!3!!-c-!%HNX!#3$Ld!!%HR8!#3"b!!4kS!N!HCQFc
+-!!!!4kB`BfpYE@9ZG!#3"#!!4km3!*!)rrm!5!!!!%K,J#d!N!BJ!%K0i!!$mlk
+PfYea!!#q%!#3#Ld!!-LL!*!8!3!!%X!!N!4N-3#3&,i3!*!+,3!!b+)!N"3"!!!
+5`!#3"'3b!*!5rrm!!!!&!!!5d!!!!!0fEhPKER3!N"%"!!)!!4,!BP-!$QpeGR*
+P!*!54kA`!*!(3'*XEf-!N!F%!!$-c!"(T,!!N!8"!!!5`"%!!!aZCAF!N"1q%!#
+3#Ld!!-LL!*!8!3!!%X!!N!4NEfjIG'9XC3#3$Vi3!*!+,3!!b+)!N"3"!!!5`!#
+3"'%a!*!8[K!!N!SY!!$)SJ#3&!%!!",!!*!%B6)!N"FB!*J!A3'C!D)!#!!!!3#
+3"36f!5S!N!8`!*!("!!!c-crN!3!!5%q#)qL'`!#"#X%''Xd!!2c[UADhA%!"'"
+hB(GJG`!!!#d!&!!"!#B"3!!"!3!!'3!"%&!5!3!-&Q*[E'm0-3db$6-00!de$6B
+00`di$6N!!!!F!$`!Y!"4!1N!!!%!!!%!!",!%3!!$!9dFQ&MC3!!!"i!F!#d!)B
+!m!!!!3!!!3!!%X!4!!!-"fC[GA*TCA)!!!!I!!3!J!!8!0J!!!%!!!%!!",!%3)
+!$!KYEhPPEQjPF`!!!"d!!3!d!!m!G!!!!3!!!3!!%X!4!J!-"R*PG'peFJ!!!,`
+!#3#3"33!#!!@!$!%!h*KHJ#3"KJ!!3)G!X3!N!F%!$J!&J"`"!CPCQCKBf8!N!3
+#!!!F!K)!E!3+Ff&ZFb"TE@&RC3#3"33"$!!8!8L)"faTFh0KCf8!N!B$!8m!%!&
+f%!%`!*!'"!#!!"3!f!F#*fS!N!8%!1!!&!%%L!%`!*!'"!'F!")"i)J*C)jMB@a
+KCf8k!*!'!`(R!"%#0a!"-3!!!!'5rri!#R4bB@0P,QJ!!)#5i!#!P+!!N!8$4$!
+!ITTB!&F!!(4`!!-!@!!!"!3!N!Qd!&N!!J"C!)%(m!#3"d!U!!P!!*!("!!!c-`
+!J3@J!*!1,3!!HiG`!*!()!"lLI!!#!!!e'YBF3VY!!!K2J!!+J#3"#!!-AZ!!-%
+!!`(H!RJ!+J#3$LS!B@GP!*!)"!!!e'YBF3!!!*%!J3"a!!!ZB!!!,3#3"$!"b$-
+J!!%"%!!6!C3!!3!!!*%!J3"a!!!ZB!!!E'PcFf&RC3!c)!!"!4!!%`'8!!%!N!8
+"!!!5`"%#!!aYEhN!N"B"!!!5`!#3"'jLAfe[H3#3%`%!!",!!*!%,3#3'!%!!",
+!!*!%C'9MB@aP!*!6-!#3"`3!!2rrc-crr`!"!*!(!J!!-c2rr`!$!*!("1lZ!*!
+((3!f!#J#%J+d!!J!!!%!N!8+6Q9h)&GTEQ4[G`!!!#!!!3!d!"!!J!!!!3!!!J!
+!%X!$!J!-#3eTER4PFR9`G!!!!"X!!3')!"`"S!!*!3!!C!!!%"!!!!!*"'0ZG'`
+!!!!F!"J!U!!Q!0`!!!%!!!%!!",!%3)!#`9fEfPP-3!!!"`!+!#S!$B!h!!!!3!
+!!3!!%X!4!J!,"AC[D@8b!!!!(!!i!+J!4J$F!!!"!!!"!!!5`"%#!!X&GQpTC6-
+!!!!D!$S!!3"'!#8!!!%!!!%!!",!%3-!#30MEfd!!!()!"%!N!8,!#F!(3("%#)
+`,$!X-#``,$!X-#`V-5if0c)X,6!Z0M)c0#`Y-#ic-6)e!*!&#!!)!"i!(!F#,d3
+!N!8R!#F!13("%"FY-#if16Nc,#d`,MBe1$JX+c!Z0M8e-`#3"L3!#!!k!"`(!Lp
+&!*!&3`!R!&8"`4!A,6!Z0MNj-b`V-5ic-6Fe,#d`,M-b0cF!N!C!!!J!9J!F"`)
+[4J#3"9m!*`"a!F%3"c!X-#``,$%!N!CF!!J!FJ!F"`)[4`#3"AX!*`#0!F%3&bX
+a,M-j1$BX,6!Z0M8i1#`Y-#ic-MFh!*!'H!!)!)i!(!F#,dJ!N!@A!#F!U3("%#)
+`,$!X-#``,$!X-#`Y-#ii-cBX+c%Z-M3f15`Y-#ic-6)e!*!&P!!)!+S!(!F#,dN
+!N!@c!#F!a3("%#%`,$!X-#``,$!X-#`Y-#ii-cBX,6!Z0M)c0#``,MBb06!!N!D
+`!!J!aJ!F"`)[5J#3"Fm!*`$K!F%3!6!!N!E-!!J!iJ!F"`)[5`#3"HX!*`$p!F%
+3!*!'k!!)!2i!(!F#,d`!!!(!!"%!N!8-!&!!(J%3L"GK16KI-6"I-63Y-6KS-6C
+Y-$CIFf0KEJ#3"3%d!6J"4!'FL!aMEfeYC@jdB@PbCA-!N!8[!!F!93)&%!8Z,Lm
+Z,J#3"3%d!$3"3J"N"!0ZCAF!N!CG!!3!EJ"NL""QD@0SD@9b)'4TB5!a)$SJ!*!
+&A`"R!'d#"4!38h"KG'PKE&p"FQ0SC@p`F`#3"A!!"!##!'5)%'CTBfKTCA)JC'P
+K)$)J1L!!N!9c!'F!J3)&%!#3"3%X!-J"6!$d"`)R@!#3"33!"!!S!%`(!LGC!*!
+&$!%J!"i#!)J6BQa[Bb!f)$SJ-6!`)'aTCfjPF`#3"3%i!)3"5J#c"`)R9J#3"D`
+!"!#m!'5)#Q4[EPpdMQb11L!!N!@[!'F![3)&%!pcG@jIC'PKBQpXEcTbBAF!N!D
+%!!3!P3"NL""QD@0SD@9b)'&bBfJa)$SJ!*!&K`"R!*8#"4!38h"KG'PKE&p"FQ0
+SC@p`F`#3"CJ!"!#U!'5)%'CTBfKTCA)JBA*MD$)J1L!!N!@E!'F!U3)&%!#3"#3
+!+!$N!%B"&!!"!3!!!3!!%X!4!!!+$@CTH'80BfpeFQ&ZG(-!!!!D!#J"'!"%!9J
+$k!%!$k!!!"!3!!-!"!0iH(J!!!!R!&!"*!"X!9`!!!%!!!%!!",!%3!!#K"dFQ&
+ZFfPdEfPbC3eKGA4[!!!!(3!`!*`!QJ2I!!!"!!%!N!8+6Q9h)&GTEQ4[G`!!!%B
+!!3!5!'3!6!!(!3!!"`!!%X!4!`!+,f4TEf4P$A0MB@i0Fh9LFf0KEJeMEh9`Efa
+P$A0dBA4eF`eLE'&ZDfPZC`eQDAKP!!!!)3!*!D)!(!(I!!!"!!!"!!!5`'+3!!!
++#Q9ZFQ9RDA0dFQ8!!!!B!,8#'!)5"!N!#!!!!3#3"388!5S!N!8`!*!("!!!c-c
+rN!3!!5%q#)qL'`!#"#X%''Xd!!2c[UADhA%!"'"hB(GJG`!!!"`!"!!%!"S!2!!
+!!3!!!3!!%X!4!!!-"@4PBR9d!!!(-!"b!*!%)!-!N!3"LM,irj!'!!*!!*!1!N!
+!N!Irr`[`(i-!!N!!N!F5e$@ik'!!!N!!N!F6UZ3+lI3!!N!!N!F4lp+#$SJ!!N!
+!N!GHZ`EQXFS!!N!!N!IiiA$ad9d!!N!!N!Ih`iF2%5-!!N!!N!II$Yfh#I!!!N!
+!N!H1Bdbb#,d!!N!!N!H6NjQCMSi!!N!!N!F9&8e0k1J!"!#3##PJ"Qb2(J!#3!#
+3"bh("YH3!#B!!N!!N!Fb13G$N5m!!N!!N!FfY3H`NMF!!N!!N!Fl2JJINd!!!N!
+!N!Frc3L2P%N!!N!!N!G%C3N!P9%!!N!!N!G*#JPcPPS!!N!!N!G0Y!RRPf-!!N!
+!N!G5C`TFQ'X!!N!!N!GA*`V6QA3!!N!!N!GEl!Y,QR`!!N!!N!GJZJ[%Qi8!!N!
+!N!GPN!!-2jb1!!*!!*!(DR)-Zjf@!!*!!*!(EeN01*kI!!*!!*!(G%J0YjqS!!*
+!!*!(H8)10k#`!!*!!*!(IN%1ZD'j!!*!!*!(JdJ22+,"!!*!!*!(L&S2`+2+!!*
+!!*!(MA%34U66!!*!!*!(NSi3cDAE!!*!!*!(Pl-49DEN!!*!!*!(R134hkIY!!*
+!!*!(SKF5DUMe!!*!!*!(Te)5pkRq!!*!!*!(U`F6KDPh!!*!!*!(V!m8&+Br!!*
+!!*!(V4J8T+-#!!*!!*!(VL!90Tqj!!*!!*!(VbN9bCa[!!*!!*!(X$)@ATNH!!*
+!!*!(X6S@mjA'!!*!!*!(XN-ALj*P!!*!!*!(Xd`B)im#!!*!!*!(Y&3B[BZB!!*
+!!*!(Y9dC@BJP!!*!!*!(YQ8CpB5`!!*!!*!(YfiDNi%f!!*!!*!(Z(FE-hfb!!*
+!!*!(ZAmEdhSX!!*!!*!(ZSJFGRDL!!*!!*!(Zj%G'A-6!!*!!*!([*NG[Qpk!!*
+!!*!([D)HC'[K!!*!!*!([USI$'K$!!*!!*!([l-IY@5F!!*!!*!(`,`JAf$e!!*
+!!*!(`F3K#Pe)!!*!!*!(`XdKYeQ8!!*!!*!(`pBLCPAK!!*!!*!(a0iM&P)S!!*
+!!*!(aHFMadjX!!*!!*!(a[!NHNUS!!*!!*!(arJP,8EN!!*!!*!(b3%PiN-F!!*
+!!*!(bJNQQ6p0!!*!!*!(ba)R86Yr!!*!!*!(c"XS#MHY!!*!!*!(c5-Sa$28!!*
+!!*!(cL`TJ#rm!!*!!*!(cc8U2L`K!!*!!*!(d$dYY5Vm!!*!!*!(d8Bc'LZm!!*
+!!*!(dNiiIbap!!*!!*!(deFpkLe!!!*!!*!(e'"$ALi%!!*!!*!(e@K)dbl*!!*
+!!*!(eR&165q3!!!#3!#3"pGk8p!`@!!#3!#3"pL#@93a)J!#3!#3"pQ,AY`al3!
+#3!#3"pU6C'JbZ3!#3!#3"pZFDI`cKJ!#3!#3"pbPEj%d93!#3!#3"pfYG5Se*J!
+#3!#3"pkfHXXeq!!#3!#3"pqrJ'`fb`!#3!#3"q$(KK!hR`!#3!#3"q(3Ll`iG3!
+#3!#3"q,CN@Jj6!!#3!#3"q2KPaBk*!!#3!#3"q6UR-JkrJ!#3!#3"qAbSS%lf3!
+#3!#3"qElU$SmYJ!#3!#3"qJ%VI8pN`!#3!#3"qN-XlFqFJ!#3!#3"qS9ZAJr8`!
+#3!#3"qXH[cY!03!#3!#3"q`Qa39"'!!#3!#3"qd[bXe"r3!#3!#3"qihd*G#i`!
+#3!#3"qp!eQ4$bJ!#3!#3"r"*h$G%X`!#3!#3"r&4iJG&R3!#3!#3"r*DjpP'L!!
+#3!#3"r0MlE*(G3!#3!#3"r4VmiG)B`!#3!#3"r'+pA4*8J!#3!#3"qfppRe+3`!
+#3!#3#Ki!(!%S!#i"H!!!!3!!!3!!%X!4!!!-"h*PG(*KBf8!!!$m!!`!N!8(!%F
+!'J$!L"0dB@PXE'8JC'8JE'%JBf&bG'8k!*!'4!!i!9J"l!#3"`F!``!9!1d3!M)
+d!*!&"!!%!"S!2!F#-XJ!N!8%!4!!&J%dL!4`BA-k!*!&"`%c!"8"B4!$-5ie!*!
+'#!&`!"J"X)J)GQPdCA0cC6S!N!8(!DX!&3(C%!-`,M8!N!BJ!!J!,J"BL!TNH@j
+KE@PaG@8k!*!&(`"M!#X!R4!$-6!`!*!'(!#l!#`!j)J&BQpXEcS!N!BI!1X!,3%
+9%!%j!*!'(!%S!#i"H!F#-XN!!!(irri!$@0KFR4P,QJ!!BlBX!'1h1!!N!9(j3!
+"I4k)!*!%Bf&bG!#3"!3%!*!e!3!!%X!!N"d"!!!5`!#3"(4KD@aXC9pMBA*dC3#
+3$3%!!",!%3!!$'4PBR9d!*!f!3!!%X!!N!4`BA-!Fh0P!*!5!3!!%X!!N"d"!!!
+5`!#3"(CTG'9cFf8!N")"!!!5`!#3(3%!!",!!*!%C(PZB@eTFA9P!(4P!*!0!3!
+!%X!!N"d"!!!5`!#3"'*[E'm!C9pMBA*dC3#3$3%!!",!%3!!$(*PG(*KBf8!N"%
+"",r`!*!Q`#)!N!C!)J#3"N!3!*!'`#)!N!C!)J#3"N!3!*!(Vk2X!*!%E@8!N!F
+N!DqLq!!!!!%!!!!"!!"B!2q3"!!"!*!0&!'[S[MrN!CC!*!)%!'[S[KMD'pT!*!
+(*!'[S[J!N!d"!*!2!J!!!!%!N!F'!!!!"!!!!!J!!!2r!*!(!3!!!!N!!!!"!!!
+!"`!!!!-!!!"Y!)%!N!Mrrrrl"h4bB@0P,6%,4&-JFfPZGA-J-@B!N!3",3#3"!e
+%8c%J+'KKBfKPGA)T!*!%&%46-L!SFf9MEfjNB@PbC5!c-'dT!*!%%%46-b!SF(*
+TFfeP)&"265N!N!JS!!%!"!!J!%3!!!%!!!%!!",!)8!!#K&YEfjdFQ80E'9c)'*
+[E'pc$3!!!#B!!3"3!#!!M!!"!3!!!3!!%X!cN!!!#JpcBA9fC3eXB5"MEfjQD@F
+!!!!U!"8![!!P!6X!!!%!!!%!!",!%3-!#K0bBASJFfPREQ&X)("KFQ&cDA4P!!!
+!(3!8!!-!*3""!!!"!!!"!!!5`"%#!!`'FQ9dEh9b!!!!i!!-!*!&*`!#!BJ#5J#
+3"a8!6!!N!)f)#'e[H@9ZEQ8k!*!&&`#4!#-!Va!"-3#3"J%!!3!6!$%%!h*KHJ#
+3"J%!b!!2!8#)!LdY!*!&&`%r!#F"F)J'G'e[FR3k!*!&'!&e!#3"QK!"0!#3"J)
+!-!!4!-B(!LGL!*!&!J&$!")"ESJ&F'KKFf8!N!B&!A8!%3'E%!%`!*!'&3#m!#8
+"1`F#*f!!N!8*!D)!(!(I"`)RB3#3"43!!`!P!%%(!LGM!!!"q2rr!!ecH@jMD(*
+[,QJ!!-"TFL"fEh4bC5"MEfjdFQpXC5#)!'4c!*!)!@Bm`'Pb)(C[G(*P)'0[ER4
+bEfaP)!!!E#GKD3!!)'4e)("[F#eYC@je)'0[ER4brrpP$3e@Eh8!!("[GAB!!#"
+RMQk1FQ&XC@ePER3JBfKKEJ!!FL"XCA-J!!"eE'9eE@pjC@jZC3"ZG(*[E'8JBAC
+PBb!!!(-JG(*[D3!!Bf&cCA*KHJ!JBfpeE'9eFR-JC(8JC'PK!!"RG@8Z$8`!!'0
+SD@C`CA*TEf4P!'&eBfKP,#"cEh9c)!!!CQ0[EL"`!!"YCA3J!!!JBfKKEQGPFL"
+MCA*dB@PZFb!!!(*KE@9dFJ!!)'4e)(4PEA"cAfe[FR3!)(CKE'9eFL"N!!!!"!!
+&!!!3N!!!!!#"BfK[DAKI4&-!)'0PFb"aG@&dFQ8!!("KFQ&YC3!!CA-J+!!!)'0
+SD@CQFQ8JCA3J-b"MEh9X!!"bFbN0E@%!!(!JBh*`D'&cC3"[E@&dDA&eC@ePER3
+JG3#3"3%!N!34!`!+FQ&kAh"KFQ&cDA4P!#"`Eh9b)'-!N!8"!!!5`'+3!!!+C@j
+bC@GTFh4bC3#3$`%!!",!%3)!$(*PG'peFJ#3%aJ!,J-%!'-$VJ!)!!!"!*!&"6)
+"+J#3"6!!N!F%!!!UDJc0mc%!!5%q#)qL'`!#"#X%''Xd!!2c[UADhA%!"'"hB(G
+JG`!!!"m!&!!%!#B!T!!!!3!!!3!!%X!"!J!-#'CTEL"cBf&Z!!!!*`!N!!3!0J#
+N!!%"!!!"!!!5`!%#!!`3Ff&dGA*KG'P[EL"bC@GeE!!!!"N!8!!)!')!U!!!!3!
+!!3!!%X!4!J!-!RKi!!!!+`!%!!3!&J#S!!!"!!!"!!!5`!%#!!`8C'9LGA3JFf0
+KEL"cB@jc)'CTBfJ!!!"5!!3!N!9[!(-!J`#E%!&I!*!'"!!%!"B!U!F#-r3!N!8
+8!!3!*J#N"`)cp3#3"53!"!!f!+3(!M2f!*!&8!!)!')!U!F#-rF!!!$Srri!"@&
+XBA*YC5jS!-V6X!#3#2r$l[,r`qlN!FYP!'%!N!3#iJ!%"!#3#(rrIrpeF`(,CF!
+"bfB3!*!&!LS!!FjBJ!!1!""NBA4PG(*KB`(+!*!&!3!!%X!"!J!-C'9LGA4IFf0
+KEJ#3$`%!!",!!3)!$'CTEPpcBf&Z!*!2!3!"!!!5`!%#!!acBA4IFQ9RG@`!N"!
+"!!!5`"%#!!`!BA4IFQ9RG@`!N"!B!"J!%!#*!8N!#!!!!3#3"393!5S!N!8A!!%
+!"!"U!"!!!!%!$k!!!""`45!!N!BE!!-!'!!3!#3!!!%!!!S!!",3!*!%"'0ZG'`
+!!!!E!"%!'!!H!#3!!!%!!!S!!",3!*!%"'0ZG'`!!!!E!#!!'!!X!#3!!!%!!!S
+!!",3!*!%"'0ZG'`!!!!E!#d!'!!k!#3!!!%!!!S!!",3!*!%"'0ZG'`!!!!E!$X
+!'!"(!#3!!!%!!!S!!",3!*!%"'0ZG'`!!!!E!%N!'!"9!#3!!!%!!!S!!",3!*!
+%"'0ZG'`!!!!`!*!("!!!rj!%!!!!!3#3"`)!N!F$!*!("2q3"J!!!#d!1!!X!'J
+!C!!!!3!!C!!!%1!b!!&S&R"SBA0P,$!X,5`Y,#dXZ5`V,#XX+b`!!!!K!!J"#!!
+C!A)!!!%!!!%!!",!%3)!$!TQEh*MC5"cBf&Z!!!!*!!J!3J!-J&q!!!"!!!"!!!
+5`"%#!!`0CQpbBf8JFh9LFf0KEJ!!!0`!#`#3"3-!!J!3!!i(!LG%!*!&%!!#!"`
+!$JF#*d8!N!8H!!)!+J!1"`)R3J#3"5`!!J!i!!i(!LG$!*!&1J!#!%B!$JF#*dB
+!N!9)!!)!9!!1"`)R4`#3"3%!%J"N!%`(!LG)!*!&!3"X!%B![!F#*dN!N!9)!&!
+!GJ$NL"`JF$dJ,6%Z0M%0)'CbCA&e25dd05ia0$)h)%Kk!*!&C`!$!(8!44!#16J
+!N!8)!3J!'3&b"`)R5J#3"5!"#!!b!Ai(!LG,!!!"e[rq!!acH@jMD(*[!)!"Irp
+rr`(J!*!'!GJ!!Ka%G(*T!(0j!'8!N!3#"!#3#3J#E`-p!R$rN!B5d!!!!%KfEhP
+KER3!!!!J!%K!J!!!!!J!#!!!rj!%!%J5d!")13!Y!*!')!")3)!!N!8)!!J!!2q
+3"!")%Y!!5$N!,3!!5$N!N!JJ!%K!J!!)!!$rN!3!5",3!%JhB#d!13#3##!!5%#
+!!!J!#!!!rj!%!%J5d$GJ!%JY!*!))!")3)!!!!!)!!J!!2q3"!")%Y!!5$N!,3#
+3"L!!5%#!!*!&#!!)!*!&"`!!%X!4!`!+Ff9XC@0d!%K!J!!"!*!&#!!)!*!&C!!
+!%1!i!!&XF'KKFf8!HS!!#2q3"!!!+Ccrr`!!B$"PET!!G(*P"h0jER"PFQP[C'8
+!#f&MFA9TFfPdD@pZ!*!&!3!!%X!!N!4QDAKP!*!9!3!!%X!4!J!-CQpbBf9IFf0
+KEJ#3#[rr!!!!!3!!%X!4!J!-CQpbBf9IFh9LFf0KEJ#3$1!!$3#3"33!B!!@!*b
+)!6%!N!B"!!3!DJ!3"`)e)!#3"33!R!!@!-L)!6%!N!B$!"J!%!!N"`)e)3#3"4%
+!'!!H!#3(!M8L!*!&)!!B!#`!*!F#05-!N!8Y!"J!1J!N"`)e*!#3"6X!'!"(!#3
+(!M8P!*!&53!B!&8!*!F#05B!N!8I!#m!,`%a%!#3"MJ!,!"S!'3(!M8R!*!&9!"
+d!')!a)J$H(Ki!*!'"!!X!"B!B)J#,5d!N!8%!-J!&J%dL!!!!!)Drri!$Q0[ER4
+bEfaP,QJ!N!Vr`qlbrm2Zj!'V!J"MEfi!!#P'!!3%!*!)IrprrdD!!DX#8!'V!E!
+!N!8TFQ9dBA*N-3!#%!#3"5P'B!&k!*!%$k!!!""`45!!!'0SBA9Q!*!6kreGH3!
+!!!%kP(*PG'&bC$)!!Km#(`!$f24"!T-#!*!&#J!!%Y!!N!4fEhPKER3!!!!J!%K
+!J!!!!!J!#!#3"3S!!",3!*!%,3#3"L!!5%#!!*!&#!!)!*!&#J!!%Y!!N!3Y!!"
+)13#3##!!5%#!!!J!N!8+!!!5d!#3"#d!13#3##!!5%#!!!J!#!#3"3S!!",3!*!
+%,3#3##!!5%#!!!!!#!!)!*!&#J!!%Y!!N!3Y!*!')!")3)!!N!8)!!J!N!8"!!!
+5`!#3"'CTBfKTCA)!N"*N!!!3i$)!!@K`D'&cC3"kJ!!)rj!%!!!TR2rr!*!&!3!
+!%X!!N!4`CA*TEf4P!*!5!3!!%X!!N!4dD@eP!*!3rrm!!!!"!!!5`!#3"(0eBR0
+MB@i!N")B!(3!0J(J!R3!#!!!!3#3"39Z!5S!N!8`!*!("!!!c-crN!3!!5%q#)q
+L'`!#"#X%''Xd!!2c[UADhA%!"'"hB(GJG`!!!"J!-3*,!43$JJ!)!!!"!*!&"B`
+"+J#3"6!!N!F%!!$-c2q3"!!")6i)Mk)E!!)%+`3BDc3!!r1qTGVGF3!%B(GJGf"
+h!!!!'J!&!!-!'!"`!!%"!!!*!!%38")"!!N$H(Ki!!!!K!!&!*!&"`$h!"N"(4!
+$-6)`!*!'#!"d!"S!m)J5G'&TE'aP)'4e)("[D@jdB@GP!*!&#!%S!"N"XBJ6E'&
+bCf9eFL"RBA9cFfPPEQjP1J#3"JF"Y`!A!H%3!M)`!*!&"3!$!"J!F!F#0N`!N!8
+F!!3"C`)j!*!%!3VrrJ!'Bfp`D@8ZD!!"UC`3!Df@F!'YM#!!N!a`EfPZG!!!!!3
+%!*!+#J#3"!3!N!adB@PXE'8!UM%)!DY&@!'YPR!"V3#3"3%!!",!!*!G!3!!%X!
+!N"d"!!!5`!#3"'aKFQGPGA)!N")*!!%38")"!!PLEfa[!*!9!3!!%X!!N"dD!!%
+!"!!B!+!!#!%!!!N!!4"3%J%!$!0iH(J!!!"#!!-!N!8(!1F!&`%4%!%a!*!'"!#
+X!"B!f)J$F'&c!*!'!3!%!"J!S!F#0hJ!N!8F!!3!hJ%b!*!&a[rq!!4QEhPPFLj
+S!!'VRl!!["k3!)$%!!$rr`&9!DZN8!#3"'C[H3#3"33%!*!1-pJ!N!a`BA-!!!!
+"Uk4`!*!&)$mJ!A%!N!8"!!!5`!#3'`J!#3!"%&!5!3!!BQpXE`#3&3%!!",!!*!
+G'J)F!!`#1!!S!!!"!!$r!!!3%!!%!!)$H(Ki!!!!'J)F!#`#1!")!!!"!!$r!!!
+3%!!%!!)$H(Ki!!!!'J)F!%`#1!"S!!!"!!$r!!!3%!!%!!)$H(Ki!!!!'J)F!'`
+#1!#)!!!"!!$r!!!3%!!%!!)$H(Ki!!!!'J)F!)`#1!#S!!!"!!$r!!!3%!!%!!)
+$H(Ki!!!!'J)F!+`#1!$)!!!"!!$r!!!3%!!%!!)$H(Ki!!!!'J)F!-`#1!$S!!!
+"!!$r!!!3%!!%!!)$H(Ki!!!!'!!c!0-"D`,(!!J!!!%!N!8&UJ%U!*!&-!#3"`3
+!!-c-rj!%!!%K2JL2SKX!!J3V""KV0!!$mlkPfYea!!4JGf"hB(F!!!!B!3m"13(
+&!G8!#!!!!3#3"3A)!5S!N!8`!*!("!!!c-crN!3!!5%q#)qL'`!#"#X%''Xd!!2
+c[UADhA%!"'"hB(GJG`!!!+i!#!#3"33!#!!@!)5)$@TKG@GPFb"SC@aTG@d!N!B
+E!!X!*3!p%!3e,MBf!*!&+`!,!$8!24!%05if-`#3"6X!#`"&!$d3"$8Z0M)!N!9
+,!!X!93!p%!3e,MFd!*!&@`!,!'8!24!%05ie1!#3"@X!#`"e!$d3"$8Z0MB!N!9
+l!!X!K3!p%!3e,M8f!*!&L`!,!*8!24!%05if-J!!!A$rrJ!*C'PXGA4TEfiZD!$
+!![)I!*!()*!!![*,d!#3"'4TE!#3"33%!*!-)(!#mN[3!!404J!!!!m!N!3#mKl
+!!!%4N!B!!L+3"2rr!!!!!3!!%X!!N!4UAfKP-3#3&!%!!",!!*!%DPpSC6)!N"3
+"!!!5`!#3"'TID'8c!*!8!3!!%X!!N!4UAfKP0!#3&!%!!",!!*!%DPpSC68!N"3
+"!!!5`!#3"'TID'8f!*!8!3!!%X!!N!4UAfKP0`#3&!%!!",!!*!%DPpSC6J!N"4
+q"FJ![`%B!,B!R!!!!!J0DQ&eCf9c)'KPE'PeEA4b!!!!%!3e,MB`D@4P!!!!%!3
+e,M8dC@je!!!!%!3e,M8h$3e@!!!!%!3e,MBhHL"R!!!!%!3e,M8`ER3J!!!!%!3
+e,MBaCA-J!!!!%!3e,M8aC(8J!!!!%!3e,M8eBACP!!!!'J"i!!3!LJ!A!!%"!!!
+"!!!5d!!K!!!$H(Ki!!!!'J#-!!3!RJ!A!!%"!!!"!!!5d!!a!!!$H(Ki!!!!'J"
+i!&!!LJ"M!!%"!!!"!!!5d!""!!!$H(Ki!!!!'J#-!&!!RJ"M!!%"!!!"!!!5d!"
+4!!!$H(Ki!!!!'J"i!*`!LJ#[!!%"!!!"!!!5d!"K!!!$H(Ki!!!!'J#-!*`!RJ#
+[!!%"!!!"!!!5d!"a!!!$H(Ki!!!!'J"i!1J!LJ$l!!%"!!!"!!!5d!#"!!!$H(K
+i!!!!'J#-!1J!RJ$l!!%"!!!"!!!5d!#4!!!$H(Ki!!!!'J"i!6!!LJ&$!!%"!!!
+"!!!5d!#K!!!$H(Ki!!!!'J#-!6!!RJ&$!!%"!!!"!!!5d!#a!!!$H(Ki!!!!'J"
+i!"`!LJ!m!!)"!!"N!!!3%!!!!!`$H(Ki!!!!'J#-!"`!RJ!m!!J"!!"N!!!3%!!
+!!!`$H(Ki!!!!'J"i!'J!LJ#)!!!"!!"N!!!3%!!!!!`$H(Ki!!!!'J#-!'J!RJ#
+)!!!"!!"N!!!3%!!!!!`$H(Ki!!!!'J"i!,3!LJ$8!!!"!!"N!!!3%!!!!!`$H(K
+i!!!!'J#-!,3!RJ$8!!!"!!"N!!!3%!!!!!`$H(Ki!!!!'J"i!3!!LJ%J!!!"!!"
+N!!!3%!!!!!`$H(Ki!!!!'J#-!3!!RJ%J!!!"!!"N!!!3%!!!!!`$H(Ki!!!!'J"
+i!8J!LJ&S!!!"!!"N!!!3%!!!!!`$H(Ki!!!!'J#-!8J!RJ&S!!!"!!"N!!!3%!!
+!!!`$H(Ki!!!&E2rq!#GKGA4[,QJ!N!X1!@+k%!&LZT!!!*!'BA9dE`!!!3!%"!#
+3#3)!!!!-!!i!N!N3!9CKGA4[AhCKE!#3"!pX!!`Je%#%!*!&!3!!%X!4!!!+CQP
+iC9pRB@PZ!*!1#!!2!!!3%!#3"'GKD@i!N"-"!!%!!",!%3!!#R4[GA4IBA9dE`#
+3%!%!!",!%3!!#R*TC@jIBA9dE`#3%!%!!",!!*!%,3#3&J%!!3!!%X!K3!!+E@p
+ZG(*P!*!6!J!!%X!4!`!,GQ9bEh9TE'aP!*!3!3!!%X!!N"d"!!!5`!#3"'0[FR*
+PBh3!N"!"!!%!!",!%3)!#h4SCA*YE`#3%`%!!",!!*!E!3!"!!!5`"%#!!YfEfP
+P-3#3%J%!!3!!%X!4!J!,GQpTC6)!N"3"!!!5`"%#!!YfEfPP-`#3&!%!!",!%3!
+!#QCTH'9IBfpeFQ&ZG!#3#f32S!!!%"!!!`!%BfpeFQ&ZG!#3%!%!!3!!%X!4!!!
++G(*KER0TG'pTFQ9IBA9dE`#3#3%!!",!-j!!!!TcBA9fC3#3$rrr!!%!!3!!%Y!
+!)3#3'3%!!3!!%Y!!-3#3'3%!!3!!%Y!!33#3'3%!!3!!%Y!!83#3'3%!!3!!%Y!
+!B3#3'3%!!3!!%Y!!F3#3'3%!!3!!%Y!!J3#3'3%!!3!!%Y!!N3#3'3%!!3!!%Y!
+!S3#3'3%!!3!!%Y!!X3#3'3-!C!!!%"!!!!!-BQpXEepMEh9XCA9b!*!,"!"N!!!
+3%!!!!!aLEfa[Af0[G@aPGA)!N!eN!!!3%!!!!!aLEfa[Af0[G@aPGA)!N!eN!!!
+3%!!!!!aLEfa[Af0[G@aPGA)!N!eN!!!3%!!!!!aLEfa[Af0[G@aPGA)!N!eN!!!
+3%!!!!!aLEfa[Af0[G@aPGA)!N!eN!!!3%!!!!!aLEfa[Af0[G@aPGA)!N!eN!!!
+3%!!!!!aLEfa[Af0[G@aPGA)!N!eN!!!3%!!!!!aLEfa[Af0[G@aPGA)!N!eN!!!
+3%!!!!!aLEfa[Af0[G@aPGA)!N!dM!$`"2!"+!B3!!!%!!!%!!",!-3)!#3aMEh*
+bC@aKG'P[ER-!!!!I!$!"2!!q!A!!!!%!!!%!!",!-3)!#3KNC@GXDA4MD!!!!"m
+!-!'-!$i"b!!!!3!!!3!!%X!a!J!+#'&XD@eIC'PX!!!!'J"J!&3!F!"S!!%"!!!
+"!!!5d!!a!!!$H(Ki!!!!-J8b!$J#N3!e!+S!!!!3!9pTFJ!!!!F!N!F(!*!("`#
+3"`F!N!I+"*`!,J%0!)i"2J!!!!J0F(*[F'pbG'P[EQjPE(4b!!!!%!%iE#F!!!!
+)#@0SBA9QCQ&RC@je!!!!"`!!!!-!!!!)#'PZG'9RFQ&XHL"R!!!!%!-c-$"PEJ!
+!!!J'C'9bDAD1CA-J!!!!%!)e-(-JC!!!!!J1FQ9RG@`JFh9b)'*[E'mJG()!!!!
+(!!!!!3!!!!J+FQ9`CA4TG'P[ER8JC!!!!!F!N!F(!!!(d!!!!!J,F'9bD@pNC9p
+bBAT[G3!!!"!"-'pZ!!!"8J4#!#N#(!#K!@`!!!!3!c)`-#"f!!!!"`#3"`F!!!!
+"!!!!"`#3"`F!N!F)!'jdFJ!!!!F!N!F(!!!!!J!!!!J,GQ9bEh9TE'aKCf9KEJ!
+!!"!$-5ibBfm!!!!(!*!(#!,r`@pXC3!!!!F!N!F(!*!("`#3"`F!!!!"!!!!"`!
+!!qJ!!!!(!*!("`!!!!%!!!!(!!!!!3!!!!F!!!!"!!!!"`!!!!%!!!!(!!!!!3!
+!!!F!!!!"!!!!"`!!!!%!!!!(!!!!!3!!!!F!!!!"!!!!"`!!!!%!!!!(!!!!!3!
+!!!F!!!!#!!!!"`!!!!J!!!!(!*!("`#3"`F!N!F(!*!("`#3"`F!N!F(!*!("`#
+3"J2%!$%!N!8%!!J!&!$8L"jMB@4PEQ0P)'3RC@eTFh0TEfiJ+'jL)'*XEf0VFbN
+!N!AN!A`!qJ)""`)Xl!#3"4m!H`!Y!-X3!6!!N!Bh!(X!43$,%!%`!*!'6`"l!&d
+!ba!"-!#3"QF!H`"e!-X3!6%!N!Cr!(X!M3$,%!)a03#3"CF!H`#P!-X3!6%!N!D
+[!(X![3$,%!%`!*!'a`"l!08!ba!"-!#3"Ym!H`$Y!-X3!6!!N!Eh!(X""3$,%!%
+`!*!&!3m!H`%G!-X3!6!!N!8"*`"l!68!ba!"-!#3"3%r!(X"63$,%!)a-!#3"!&
+A!(X"C3$,%!%`!*!&!@m!H`&p!-X3!6!!N!8"K`"l!C8!ba!"-!#3"3'I!(X"V3$
+,%!%`!*!&!EF!H`(&!-X3!6!!N!8"c`"l!Gd!ba!"-!#3"3(R!(X"p3$,%!%`!*!
+'J!!3!)i!B)J$Ch"c!*!'Q3!4!+F!BBJ,G@jP)("PFQP[C'8!N!Da!"%![`"KL!G
+cH@jMD(*[!*!'b3!4!0J!B)J)F'pTER4KCf8!N!AJ!"!!lJ"JL!TLEfa[E@9dFQ9
+c!*!&q3!4!3F!BBJ*ChPbEh0MEh"P!*!&!4%!%3%I!'')$A0PER-JFh4PE'aKDA)
+!N!8"+3!4!6F!BBJ%FQPPEJ#3"!&"!"%"6`"KL!YLEfa[)'0[EA"bD3#3"3&D!")
+"D!"LL!PRHA*[)'0[EA!!N!8"FJ!5!B!!BSJ)Fh0d)'0[EA!!N!3"M!!8!CS!C)J
+-Bf&dB@a[)'CXBA0S!*!%!K`!$!)i!#J(!LcY!*!%!K`!,!)i!%J(!LcZ!*!%!K`
+!6!)i!'J(!Lc[!*!%!K`!E!)i!)J(!Lc`!*!%!K`!M!)i!+J(!Lca!*!%!K`!V!)
+i!-J(!Lcb!*!%!K`!c!)i!1J(!Lcc!*!&)!!-!#i!A)J&F'&bB@d!N!Bj!!d!4`"
+GL!GUEh9bEQ&X!*!'83!0!&m!ABJ(FQ9RE'&RC3#3"QN!$3"i!&b)#'4TE(9dD@p
+Z!*!%!D-!%`'a!'1)!fG`F`#3"3'm!"3"bJ"NL!YeEQ8JF'9bD@pNC3#3"3(8!"3
+"iJ"NL!GcH@jMD(*[!*!&!H`!&!(l!'1)#("[D@jdB@GP!*!%!F-!ZJ(4!3T!!K,
+!!!!'i[rq!$*MEfjQAh4bF#jS!+!"B3q`!*!&++0!!BRAm!!+!!"MG!!!!1#M!!3
+%!*!,++-J!BRAm!&K$k!!N!8S,3!"B3kJ!*!-!@%!N!8"!!!5`"%!!!`!BA9fC3#
+3&!%!!",!!*!%Bf&NC@jMC3#3%J%!!",!!*!&B@4PEQ0P!*!5!3!!%X!!N!9KC'9
+ZBf8!N")"!!!5`!#3"@&NC@jMC3#3%J%!!",!!*!&B@4PEQ0P!*!5!3!!%X!!N!9
+KC'9ZBf8!N")"!!!5`!#3"@&NC@jMC3#3%J%!!",!!*!&B@4PEQ0P!*!5!3!!%X!
+!N!9KC'9ZBf8!N")"!!!5`!#3"@&NC@jMC3#3%J%!!",!!*!&B@4PEQ0P!*!5!3!
+!%X!!N!9KC'9ZBf8!N")"!!!5`!#3"@&NC@jMC3#3%J%!!",!!*!&B@4PEQ0P!*!
+5!3!!%X!!N!9KC'9ZBf8!N")"!!!5`!#3"@&NC@jMC3#3%J%!!",!!*!G!3!!%X!
+!N"d"!!!5`!#3(3%!!",!!*!G!3!!%X!!N"d"!!!5`!#3(3%!!",!!*!G!3!!%X!
+!N"d"!!!5`!#3(3%!!",!!*!G!3!!%X!!N"d"!!!5`!#3(3%!!",!!*!G!3!!%X!
+!N"d"!!!5`!#3(3%!!",!!*!Gr`!!%"!!"!!#C'PX!*!@r`!!%"!!"!!#C'PX!*!
+@r`!!%"!!"!!#C'PX!*!@r`!!%"!!"!!#C'PX!*!@r`!!%"!!"!!#C'PX!*!@r`!
+!%"!!"!!#C'PX!*!@r`!!%"!!"!!#C'PX!*!@!3!!%X!!N"d"!!!5`!#3(3%!!",
+!!*!G!3!!%X!!N"d"!!!5`!#3(3%!!",!!*!G!3!!%X!!N"d"!!!5`!#3(3%!!",
+!!*!G'J"J!*3!F!#S!!%"!!!"!!!5d!"4!!!$H(Ki!!!!'`!5!!`!*J!N!!%"!!!
+'!!%3%!!!!!X%BfjdE!!!!@J!&3#3"43!+!!L!$5)!9B!N!BQ!#J!0J!dL!&*!*!
+'1J!S!%N!0!J"9!#3"N`!+!"E!$-)!8`!N!B5!$3!*!"J"`)R'`#3"5B!0!!h!'!
+(!LFF!*!&1J!d!%S!B!F#*ad!N!9-!$3!A!"J"`)R(J#3"4!!C!"l!1)!N!F%!!%
+!%!!K"`)R'J#3"8J!!3"B!"1)!R"S!*!&5!!8!&N!*!F#*b-!N!8S!!`!13!N"`)
+R*3#3"5J!!3!k!!b)!@F!N!B#!#3!$`'-L!SZ)#iJ,L!Z)#i0!*!&K!!%!*%!*`F
+#*b%!N!9J!!3!F!!8L!*523#3"@%!'`"[!&d3!6!!N!D8!"3!S3!L"`)R)!#3"6S
+!!3"'!#8(!LFL!*!&&J!"!#3!$)J"GJ#3"K)!$!!Q!#3(!LFI!!!$+[rq!"CLEfa
+[,QJ!!!"rmP!!Ir33!*!&!q6!!(kD@!#3"')!N!F%!J#3(#d!N"Crp"!!N!G!,3$
+f3!#3"`3!!-c-!(rb8!!!)6i)Mk)E!!!%+`3BBA9dEepdFQ&ZF`!%B(GJGf"h!(m
+!N!YrpN"KGA4[AfaTEJ!!!#!!IrC!!*!)$k!!!"!3!!-!"'0KFR*P!*!%-!"rpN$
+rR3!lEQd!N!32S!!!%"!!!`!%G(*T!'PMDdePe'K[!(rd%!#3#!qJ!!!3%!!$!!4
+dFQ&ZF`!!IrC!I(-!!hjMQhK,r`#3"!qJ!!!3%!!$!!4XD@i!!(rf3%+!!!-iB!"
+l5!#Jr3!!rl!!J!%J!*!',3!!J!83!!`!@!!U!+J$k!%!!(m!N!8"!!!5`#)#!!P
+KGA4[!!!")!#3"c!!J!9J!!"Qi$!6!N!!!'FD!!!Y!*!%-!""'i!!N!m$!!!3%!!
+!!!P`D'&cC3!EJ!!"6R8!N!F`!*!&$`!!%"!!!!!,Cf&TEJ!!3M3!!%9BN!!!G!`
+!!%)i!!!*c3#3#!8!,3!EJ!!6!%F@0!"'!"N!C3"I"!J!!!!"!E,hN!!!!!HJ!!"
+bCA-!!#!"XaY3!!!!#!!!!!4Q"!#3"3%!!",!*J-!#Q*XEh%!N"8"!!!5`!#3"#d
+!G'pI8J#3%`%!!",!!*!%BA9dEep5!*!4!3!-!!!5d!#3"(C[H3#3&J%!!",!%3-
+!#@0[E@d!N"8"!!!5`!#3'`%!"J!"%"!!!!!,GQpTC3!!3M3!!%9BN!!!G!`!!%)
+i!*!&'!!U!5F!ZJ*%!!J!!!%!N!8%B!%U!*!&-!#3"`3!!-aVrrm4l3!")6i)Mk)
+E!!)%+`3BDc3!!r1qTGVGF3!%B(GJGf"h!!!#IJ!Q!*!&4`"A!&8!P4!$-M!`!*!
+'"!$X!#)"(!F#+T3!N!8%!53!)!&)"`)UP3#3"9!!U!"X!1!(!LU@!*!&8!$S!'`
+")!F#+TF!N!9)!!3!@!"-L!#3"J%!"!!J!%3(!LUB!*!&*!"8!%)!T!F#+TN!N!8
+`!!3!3!"3L!YfCA*[G@PXE'&RC3#3"Pm!9`"Y!)N3!c%Z-J#3"JJ!U!!@!13(!LU
+D!*!&B!!%!'i!9)J#rm%!N!8B!+J!*J$F"`)UQ`#3"5J!U!!f!0`(!LUF!*!&1!#
+S!%B!h!F#+Td!N!8S!13!4J%8"`)URJ#3"5J"'!"%!9J(!LUI!*!&8!%N!'`"A!F
+#+U!!N!8"!&!!)!#-"`)US3#3"AJ!"!#+!"F(!LUL!*!&M!!%!*i!&`F#+U-!N!9
+i!&!!LJ"M"`)UT!#3"B`!8!#H!'-(!LUP!*!&H!#F!)S!V`F#+UB!N!@-!*`!RJ#
+["`)UT`#3"AJ!k!#+!2X(!LUS!*!&M!$S!*i!q`F#+UN!N!9i!6!!LJ&$"`)UUJ#
+3"B`"-!#H!8-(!LUV!*!&H!!F!)S!2!F#+U`!N!@-!"`!RJ!m"`)UV3#3"AJ!D!#
++!)J(!LUZ!*!&M!"S!*i!L!F#+Um!N!9i!,3!LJ$8"`)UX!#3"B`!Y!#H!03(!LU
+a!*!&H!%!!)S")!F#+V)!N!@-!3!!RJ%J"`)UX`#3"AJ"5!#+!@J(!LUd!*!&M!&
+)!*i"D!F#+V8!!!!B!$N"U3#U!cS!#!!!!3#3"36B!5S!N!8`!*!("!!!6!RpEre
+V!!%K2JL2SKX!!J3V""KV0!!$mlkPfYea!!4JGf"hB(F!!!*i!#3!N!88!!3!*!!
+dL!GbC@GeE#!a!*!',!!%!$`!0)J(FQ9RG@`J-J#3"N3!"!"8!$5)"h*PCh9X)$-
+!N!CF!!3!E!!dL!GbC@GeE#!d!*!'!3$)!!i!l)J%BQpXE`#3"3%!m!!2!4L)"@0
+SBA9Q!*!'!3%F!!i"3)J%F(*[F!#3"3%"5!!1!@5)!fPZG!#3"J%"D!!2!C!!L!9
+NCA*TGJ#3"K3!K!!N!-!(!M"`!*!&,!#%!$`!`!F#-(%!N!9%!)3!9!$!"`)`FJ#
+3"9`!K!"X!-!(!M"c!*!&&!$)!#3!l!F#-(3!N!8X!-J!2!$X"`)`G3#3"83!b!"
+8!1`(!M"f!*!&A!$)!'`!l!F#-(F!N!88!2!!*!%8"`)`H!#3"5`!m!!m!43(!M"
+j!*!&4!$`!&3"&!F#-(S!N!9F!2!!E!%8"`)`H`#3"43"'!!N!6`(!M"m!*!&,!%
+B!$`"2!F#-(d!N!9%!4J!9!%m"`)`IJ#3"9`"'!"X!6`(!M"r!*!&&!&!!#3"C!F
+#-)!!N!8X!8!!2!&N"`)`J3#3"83"3!"8!@3(!M##!*!&A!&!!'`"C!F#-)-!N!8
+8!@J!*!'-"`)`K!#3"5`"D!!m!B`(!M#&!*!&4!&S!&3"M!F#-)B!N!9F!@J!E!'
+-"`)`K`#3"43!0!!N!)!(!M#)!*!&,!!d!$`!J!F#-)N!N!9%!$3!9!#!"`)`LJ#
+3"9`!0!"X!)!(!M#,!!!&+2rq!#9bC@GeE#jS!!(EYi!!,3!q!#d!2`!Z!!B!,J!
+q!GZj!(*PCh8!%DN!"!3!N!X4UA!"lCIJ!*!-!GZhJ!#3%*IJ!*!-!GZhJ!#3%*I
+J!*!-!GZhJ!#3%*IJ!*!-!GZhJ!#3%`%!!",!!*!G!3!!%X!!N"d"!!!5`!#3(3%
+!!",!!*!G!3!!%X!!N"S"p!qJ!!!3F*)J!!"MD'&eCQCKCf8!N!d"p!qJ!!!3F*)
+J!!"MD'&eCQCKCf8!N!d"p!qJ!!!3F*)J!!"MD'&eCQCKCf8!N!d"p!qJ!!!3F*)
+J!!"MD'&eCQCKCf8!N!i$!#3!!4#3!!#3"'*[E'm!N"-#!#3!!4#3!!#3"'*[E'm
+!N"-#!#3!!4#3!!#3"'*[E'm!N"-#!#3!!4#3!!#3"'*[E'm!N"-+!#3!!4#3!!#
+3"(C[D@9IBfKKG@B!N!d"!#3!!4#3!!#3"(C[D@9IBfKKG@B!N!d+!#3!!4#3!!#
+3"(C[D@9IBfKKG@B!N!d+!#3!!4#3!!#3"(C[D@9IBfKKG@B!N!d0!$)!!"#3!!#
+3"("bEh!!BfKKG@B!N!d"!'-!!"#3!!!!!!a`FQp`!'0SBA9Q!*!0!3"M!!!3N!!
+!!!!-F(*[F!"MD'&eCJ#3$3%!B`!!%*!!!!!!$("bEh!!BfKKG@B!N!d"!$)!!4#
+3!!#3"'PZG!!!BfKKG@B!N!d"!$)!!4#3!!#3"'PZG!!!BfKKG@B!N!d"!$)!!4#
+3!!#3"'PZG!!!BfKKG@B!N!d"!'-!!4#3!!!!!!aTER3!!'0SBA9Q!*!0!3!b!!%
+3N!!!N!4NCA*TGJ"SBA9Q!*!0!3!b!!%3N!!!!!!-C'9bDAB!D'&eCJ#3$3%!-J!
+"%*!!!*!%C'9bDAB!D'&eCJ#3$3%!-J!"%*!!!*!%C'9bDAB!D'&eCJ#3$3)!"!!
+"%*!!!*!%E@pNC3#3%`%!"!!"%*!!!*!%E@pNC3#3%`%!"!!"%*!!!*!%E@pNC3#
+3%`%!"!!"%*!!!*!%E@pNC3#3&4S!&!#%!#3!`!qJ!3!2S!!!%(#5)!!!!hKiH!!
+!!"S!,!#%!$`!`!!!!3!2S!!!%(#5)!!!!hKiH!!!!"S!4!#%!&3!`!!!!3!2S!!
+!%(#5)!!!!hKiH!!!!"S!A!#%!'`!`!qJ!3!2S!!!%(#5)!!!!hKiH!!!!$%!&!!
+d!#3!J!!#!3!!"!!"%*!!!*!%'L!0EfCQ$ATPFQm0FfPYF'aP$@4PCfaTG'0S!!!
+!-3!X!$3!2!#!!!%"!!!%!!%3N!!!N!3D)!e[CQB0HQ9bE`ecD@e`E'80C'9RE'P
+dBfJ!!!!a!%3!0!"8!)!!!J%!!!3!!4#3!!#3""SJ$@pQCJekCA*[$A0TEA"XC3e
+NC@GXDA4MD!!!!$%!A!!d!'`!J!!"!3!!"!!"%*!!!*!%'L!0EfCQ$ATPFQm0FfP
+YF'aP$@4PCfaTG'0S!!!"A!6B!Mm"f3"a!C%!!!!)"h*PCh9X)$&bC3!!!!J(FQ9
+RG@`J-Q`R!!!!#!GbC@GeE#!cE@8!!!!)"h*PCh9X)$309J!!!!J%BQpXEhSJC`!
+!!!J&BfKKG@Cd)!!!!!J%F(*[F'9c)!!!!!J$D@jd)'3!!!!)"@4PFQPf)'%!!!!
+(!!!")`!!!!F!N!F(!*!("`#3"`F!!!!#!!!!"`!!!!%!!!!(!!!!!3!!!!F!!!!
+"!!!!"`!!!"!!!!!(!!!!!3!!!!F!!!!"!!!!"`!!!!%!!!!(!!!!'3!!!!F!!!"
+M!!!!"`#3"`F!N!F(!!!!%`!!!!F!!!!"!!!!"`!!!!%!!!!(!!!!!3!!!!F!!!!
+"!!!!"`!!!!%!!!!(!!!!!3!!!!F!!!!"!!!!"`!!!!-!!!!(!!!!!3!!!!F!!!!
+"!!!!"`!!!!%!!!"l!"3!b!!N!1`!!`%!!#3!!4#3!!#3"'3J$6%0-Jdc$63003d
+f$6F01!dj$6%`$6%a$6%b$6%c$6%d$6%e$6%f$6%h$6%i$6%j$6)`$6)a$6)b$6)
+c$6)d$6)e$6)f$6)h$6)i$6)j$6-`$6-a$6-b$6-c$6-d$6-e$6-f!!!!H`!X!-J
+!2!$X!!%"!!!N!!%3N!!!N!4N)!da$6)0-`dd$6800Jdh$6J013da-!da-3da-Jd
+a-`da0!da03da0Jda0`da1!da13db-!db-3db-Jdb-`db0!db03db0Jdb0`db1!d
+b13dc-!dc-3dc-Jdc-`dc0!dc03dc0J!!!(X!4!$)!&3!l!!"!3!!*!!"%*!!!*!
+%C#!0-3db$6-00!de$6B00`di$6N0-6!0-6%0-6)0-6-0-630-680-6B0-6F0-6J
+0-6N0-M!0-M%0-M)0-M-0-M30-M80-MB0-MF0-MJ0-MN0-c!0-c%0-c)0-c-0-c3
+0-c80-cB!!!"l!&`!b!"X!1`!!3%!!#3!!4#3!!#3"'3J$6%0-Jdc$63003df$6F
+01!dj$6%`$6%a$6%b$6%c$6%d$6%e$6%f$6%h$6%i$6%j$6)`$6)a$6)b$6)c$6)
+d$6)e$6)f$6)h$6)i$6)j$6-`$6-a$6-b$6-c$6-d$6-e$6-f!!!!H`!8!2!!*!%
+8!")"!!!N!!%3N!!!N!4N)!da$6)0-`dd$6800Jdh$6J013da-!da-3da-Jda-`d
+a0!da03da0Jda0`da1!da13db-!db-3db-Jdb-`db0!db03db0Jdb0`db1!db13d
+c-!dc-3dc-Jdc-`dc0!dc03dc0J!!!(X!,!$`!$`"&!!N!3!!*!!"%*!!!*!%C#!
+0-3db$6-00!de$6B00`di$6N0-6!0-6%0-6)0-6-0-630-680-6B0-6F0-6J0-6N
+0-M!0-M%0-M)0-M-0-M30-M80-MB0-MF0-MJ0-MN0-c!0-c%0-c)0-c-0-c30-c8
+0-cB!!!"l!%3!m!"8!43!!3%!!#3!!4#3!!#3"'3J$6%0-Jdc$63003df$6F01!d
+j$6%`$6%a$6%b$6%c$6%d$6%e$6%f$6%h$6%i$6%j$6)`$6)a$6)b$6)c$6)d$6)
+e$6)f$6)h$6)i$6)j$6-`$6-a$6-b$6-c$6-d$6-e$6-f!!!!H`"F!2!!E!%8!!%
+"!!!N!!%3N!!!N!4N)!da$6)0-`dd$6800Jdh$6J013da-!da-3da-Jda-`da0!d
+a03da0Jda0`da1!da13db-!db-3db-Jdb-`db0!db03db0Jdb0`db1!db13dc-!d
+c-3dc-Jdc-`dc0!dc03dc0J!!!+8!&!%B!#3"2!!#!3!!-J!!%*!!!*!%ML!0-3d
+b$6-00!de$6B00`di$6N0-6!0-6%0-6)0-6-0-630-680-6B0-6F0-6J0-6N0-M!
+0-M%0-M)0-M-0-M30-M80-MB0-MF0-MJ0-MN0-c!0-c%0-c)0-c-0-c30-c80-cB
+0-cF0-cJ0-cN00$!00$%00$)00$-00$300$800$B00$F00$J00$N006!!!!#P!#`
+"'!!m!6`!B`%!!'-!!"#3!!#3")iJ$6%0-Jdc$63003df$6F01!dj$6%`$6%a$6%
+b$6%c$6%d$6%e$6%f$6%h$6%i$6%j$6)`$6)a$6)b$6)c$6)d$6)e$6)f$6)h$6)
+i$6)j$6-`$6-a$6-b$6-c$6-d$6-e$6-f$6-h$6-i$6-j$63`$63a$63b$63c$63
+d$63e$63f$63h$63i$63j$68`!!!!T3"%!4J!9!%m!!!"!!"M!!!3N!!!N!51)!d
+a$6)0-`dd$6800Jdh$6J013da-!da-3da-Jda-`da0!da03da0Jda0`da1!da13d
+b-!db-3db-Jdb-`db0!db03db0Jdb0`db1!db13dc-!dc-3dc-Jdc-`dc0!dc03d
+c0Jdc0`dc1!dc13dd-!dd-3dd-Jdd-`dd0!dd03dd0Jdd0`dd1!dd13de-!!!!+8
+!A!%B!'`"2!!!!3!!B`!!%*!!!*!%ML!0-3db$6-00!de$6B00`di$6N0-6!0-6%
+0-6)0-6-0-630-680-6B0-6F0-6J0-6N0-M!0-M%0-M)0-M-0-M30-M80-MB0-MF
+0-MJ0-MN0-c!0-c%0-c)0-c-0-c30-c80-cB0-cF0-cJ0-cN00$!00$%00$)00$-
+00$300$800$B00$F00$J00$N006!!!!#R!"3"3!!N!@3!!3%!!$)!!4#3!!#3"*!
+!)!d`$6%0-Jdc$63003df$6F01!dj$6%`$6%a$6%b$6%c$6%d$6%e$6%f$6%h$6%
+i$6%j$6)`$6)a$6)b$6)c$6)d$6)e$6)f$6)h$6)i$6)j$6-`$6-a$6-b$6-c$6-
+d$6-e$6-f$6-h$6-i$6-j$63`$63a$63b$63c$63d$63e$63f$63h$63i$63j$68
+`!!!!T`!X!8!!2!&N!!%"!!!b!!%3N!!!N!53!#!0-!da$6)0-`dd$6800Jdh$6J
+013da-!da-3da-Jda-`da0!da03da0Jda0`da1!da13db-!db-3db-Jdb-`db0!d
+b03db0Jdb0`db1!db13dc-!dc-3dc-Jdc-`dc0!dc03dc0Jdc0`dc1!dc13dd-!d
+d-3dd-Jdd-`dd0!dd03dd0Jdd0`dd1!dd13de-!!!!+F!4!&!!&3"C!!"!3!!-J!
+"%*!!!*!%N!!J$6!0-3db$6-00!de$6B00`di$6N0-6!0-6%0-6)0-6-0-630-68
+0-6B0-6F0-6J0-6N0-M!0-M%0-M)0-M-0-M30-M80-MB0-MF0-MJ0-MN0-c!0-c%
+0-c)0-c-0-c30-c80-cB0-cF0-cJ0-cN00$!00$%00$)00$-00$300$800$B00$F
+00$J00$N006!!!!#R!&`"3!"X!@3!!3%!!'-!!4#3!!#3"*!!)!d`$6%0-Jdc$63
+003df$6F01!dj$6%`$6%a$6%b$6%c$6%d$6%e$6%f$6%h$6%i$6%j$6)`$6)a$6)
+b$6)c$6)d$6)e$6)f$6)h$6)i$6)j$6-`$6-a$6-b$6-c$6-d$6-e$6-f$6-h$6-
+i$6-j$63`$63a$63b$63c$63d$63e$63f$63h$63i$63j$68`!!!!T`!8!@J!*!'
+-!$)"!!!b!!%3N!!!N!53!#!0-!da$6)0-`dd$6800Jdh$6J013da-!da-3da-Jd
+a-`da0!da03da0Jda0`da1!da13db-!db-3db-Jdb-`db0!db03db0Jdb0`db1!d
+b13dc-!dc-3dc-Jdc-`dc0!dc03dc0Jdc0`dc1!dc13dd-!dd-3dd-Jdd-`dd0!d
+d03dd0Jdd0`dd1!dd13de-!!!!+F!,!&S!$`"M!!"!3!!-J!"%*!!!*!%N!!J$6!
+0-3db$6-00!de$6B00`di$6N0-6!0-6%0-6)0-6-0-630-680-6B0-6F0-6J0-6N
+0-M!0-M%0-M)0-M-0-M30-M80-MB0-MF0-MJ0-MN0-c!0-c%0-c)0-c-0-c30-c8
+0-cB0-cF0-cJ0-cN00$!00$%00$)00$-00$300$800$B00$F00$J00$N006!!!!#
+R!%3"D!"8!B`!!3%!!$)!!4#3!!#3"*!!)!d`$6%0-Jdc$63003df$6F01!dj$6%
+`$6%a$6%b$6%c$6%d$6%e$6%f$6%h$6%i$6%j$6)`$6)a$6)b$6)c$6)d$6)e$6)
+f$6)h$6)i$6)j$6-`$6-a$6-b$6-c$6-d$6-e$6-f$6-h$6-i$6-j$63`$63a$63
+b$63c$63d$63e$63f$63h$63i$63j$68`!!!!T`"F!@J!E!'-!!%"!!!b!!%3N!!
+!N!53!#!0-!da$6)0-`dd$6800Jdh$6J013da-!da-3da-Jda-`da0!da03da0Jd
+a0`da1!da13db-!db-3db-Jdb-`db0!db03db0Jdb0`db1!db13dc-!dc-3dc-Jd
+c-`dc0!dc03dc0Jdc0`dc1!dc13dd-!dd-3dd-Jdd-`dd0!dd03dd0Jdd0`dd1!d
+d13de-!!!!03$k3"$!PJ!A`$L!!!!#!&@DA)!!!!)!8NJB`!!!!J"9'8J!!!!#!&
+-C'8!!!!(!!!$B!!!!!F!!!qJ!!!!"`#3"`F!N!X(!!!!!3!!!!J#F'KZCf8!!!!
+(!*!("`!!!!)!!!!)!@GbE`!!!!JE-M-b,MNc5ldJ)$NZ-$8eEN%J)#!b,M%`1@e
+@GA)!!!!(!*!(#!*528aP)!!!!"!"-'8J!!!!"`!!!!%!!!!(!*!(#!&f)(!!!!!
+(!!!!!J!!!$J!I!!X!)`!N!!!!3%!!!-!!4#3!!#3"#%J$5#3##dY$5#3"@&eG'm
+0CA&eD@aTBR*P$3!!!"i!'!#3!!!U!,!!!`%!!!-!!4#3!!#3"!FJ$6!0-3db!!!
+!(J!X!*!!!$i!X!!%!3!!!`!"%*!!!*!%"b!0-!da$6)!!!!H!%!!N!!!8J#`!!3
+"!!!$!!%3N!!!N!3()!d`$6%0-J!!!"i!9!#3!!"Q!,!!"!%!!!-!!4#3!!#3"!F
+J$6!0-3db!!!!(J"S!*!!!(S!X!!%!3!!!`!"%*!!!*!%"b!0-!da$6)!!!!H!(`
+!N!!!MJ#`!!3"!!!$!!%3N!!!N!3()!d`$6%0-J!!!'`!'!#`!#S!j!!"!3!!'3!
+"%*!!!*!%95!0-!da$6)0-`dd$6B01!da-Jda0Jdb0!dc-Jdd1!df0!dj0Jda-MJ
+0-6Nb$6)e0Jdc1$3006!`$6Fe-!da-$!`$6%e-$!0-M!`-!dc-$!`$63`-$!!!!"
+X!#`!X!!q!13!!3%!!"N!!4#3!!#3"&8J$6!0-3db$6-00!df$6J0-6)0-6B0-M3
+0-c)00$J00M3016B0-6)i$6%j-Jdb06B0-cJd$68`-!dh06!0-6!`-!da06!`$6)
+`-$!0-c!`-!dd-$!`!!!!E!"!!,!!8J$N!!%"!!!C!!%3N!!!N!49)!d`$6%0-Jd
+c$6300Jdi$6%b$6%f$6)d$6-b$63i$6Bd$6Nf$6%b1!da16)0-M8f$6-i0!de-$!
+00c8`$6%`-$!0-68`-!db-$!`$6-`-$!00$!`-!!!!'`!9!#`!'B!j!!"!3!!'3!
+"%*!!!*!%95!0-!da$6)0-`dd$6B01!da-Jda0Jdb0!dc-Jdd1!df0!dj0Jda-MJ
+0-6Nb$6)e0Jdc1$3006!`$6Fe-!da-$!`$6%e-$!0-M!`-!dc-$!`$63`-$!!!!"
+X!'J!X!"k!13!!3%!!"N!!4#3!!#3"&8J$6!0-3db$6-00!df$6J0-6)0-6B0-M3
+0-c)00$J00M3016B0-6)i$6%j-Jdb06B0-cJd$68`-!dh06!0-6!`-!da06!`$6)
+`-$!0-c!`-!dd-$!`!!!!E!"m!,!!MJ$N!!%"!!!C!!%3N!!!N!49)!d`$6%0-Jd
+c$6300Jdi$6%b$6%f$6)d$6-b$63i$6Bd$6Nf$6%b1!da16)0-M8f$6-i0!de-$!
+00c8`$6%`-$!0-68`-!db-$!`$6-`-$!00$!`-!!!!'S!'!$N!#S"'!!"!3!!'3!
+"%*!!!*!%8b!0-3db$6-00!df$6J0-6)0-6B0-M30-c)00$J00M3016B0-6)i$6%
+j-Jdb06B0-cJd$68a-Jdh0MJ0-6!b0!da06-f$6)`0$J0-c!h-Jdd-$Ne!!!!DJ!
+X!13!2J%B!!%"!!!C!!%3N!!!N!46)!da$6)0-`dd$6B01!da-Jda0Jdb0!dc-Jd
+d1!df0!dj0Jda-MJ0-6Nb$6)e0Jdc1$3006%b$6Ff1!da-$)d$6%e-cB0-M!d1!d
+c-$Fb$63`168!!!"U!%!!j!"5!4J!!3%!!"N!!4#3!!#3"&-J$6%0-Jdc$6300Jd
+i$6%b$6%f$6)d$6-b$63i$6Bd$6Nf$6%b1!da16)0-M8f$6-i0!de-6)00cBi$6%
+`-M30-68c0Jdb-$3i$6-`0c)00$!j03!!!'S!9!$N!'B"'!!"!3!!'3!"%*!!!*!
+%8b!0-3db$6-00!df$6J0-6)0-6B0-M30-c)00$J00M3016B0-6)i$6%j-Jdb06B
+0-cJd$68a-Jdh0MJ0-6!b0!da06-f$6)`0$J0-c!h-Jdd-$Ne!!!!DJ"S!13!HJ%
+B!!%"!!!C!!%3N!!!N!46)!da$6)0-`dd$6B01!da-Jda0Jdb0!dc-Jdd1!df0!d
+j0Jda-MJ0-6Nb$6)e0Jdc1$3006%b$6Ff1!da-$)d$6%e-cB0-M!d1!dc-$Fb$63
+`168!!!"U!(`!j!#1!4J!!3%!!"N!!4#3!!#3"&-J$6%0-Jdc$6300Jdi$6%b$6%
+f$6)d$6-b$63i$6Bd$6Nf$6%b1!da16)0-M8f$6-i0!de-6)00cBi$6%`-M30-68
+c0Jdb-$3i$6-`0c)00$!j03!!!NJ!)3#3"4J!"!!U!#b)"AC[D@8a!*!',!!%!$i
+!,)J&GQpTC6)!N!C!!!3!8J!XL!9fEfPP-`#3"P3!"!"Q!#b)"AC[D@8d!*!'D!!
+%!(S!,)J&GQpTC68!N!Cm!!3!MJ!XL!9fEfPP0J#3"J3!1!!5!&b)"'&eG'm!N!8
+%!,3!%3$TL!GMEh9bB@jd!*!'"!#3!!!8!,#)"'GKD@i!N!8B!*!!!#S!X!F#+m8
+!N!8X!*!!!$i!X!F#+mB!N!9!!*!!!&)!X!F#+pi!N!98!*!!!'B!X!F#+m3!N!9
+S!*!!!(S!X!F#+p`!N!9m!*!!!)i!X!F#+pd!N!8B!,!!+J$N"`)V`!#3"5`!X!!
+q!13(!L["!*!&3!#`!&)!j!F#+m)!N!98!,!!CJ$N"`)V``#3"@J!X!"k!13(!L[
+(!*!&I!#`!)i!j!F#+mJ!N!8B!#`!+J#3!!F#+mN!N!8X!#`!2J#3!!F#+mS!N!9
+!!#`!8J#3!!F#+mX!N!98!#`!CJ#3!!F#+m`!N!9S!#`!HJ#3!!F#+md!N!9m!#`
+!M!#3!!F#+mi!N!8B!13!+J%B"`)Vc`#3"5`!j!!q!4J(!L[3!*!&3!$N!&)"'!F
+#+p%!N!98!13!CJ%B"`)VdJ#3"@J!j!"k!4J(!L[6!*!&I!$N!)i"'!F#+p3!N!8
+%!2!!%J%BL!9NC@aKD3!!!!6#rri!)Q&eG'mZD!!!!G10S!!Y!$i!,3!r!#i!"J!
+Z!$i"dj%!BA4Y!!!3d3!%"!#3#a$48!(NEU!!C`##!!!!i!"Y!!!"difJ!'i!G3"
+Z!1!!%0(!!H3!!'kJ!'F!JJ!!!1!!E3!!!G10S!"Z!(8!EJ$J!"$4`!(N!!"ZS!"
+R!))!!!$J!'d!!!(6MD!!EJ"e!'i!i!!3dF!"j!!!EU!!C`##!!!!i!"Y!!!"dif
+J!'i!G3"Z!1!!%0(!!H3!!'kJ!'F!JJ!!!1!!E3!!!G10S!"Z!(8!EJ$J!"$4`!(
+N!!"ZS!"R!))!!!$J!'d!!!(6MD!!EJ"e!'i!i!!3dF!"j!#3"3%!!",!!*!G!3!
+!%X!!N"d"!!!5`!#3'`3!!`!"%*!!!*!%Cf&TEJ#3%`3!!`!"%*!!!*!%Cf&TEJ#
+3%`3!!`!"%*!!!*!%Cf&TEJ#3%`3!!`!"%*!!!*!%Cf&TEJ#3%`3!!`!"%*!!!*!
+%Cf&TEJ#3%`3!!`!"%*!!!*!%Cf&TEJ#3%`%!'3!"%*!!!*!%BfpeFQ&ZG!#3%!%
+!'3!"%*!!!*!%BfpeFQ&ZG!#3%!%!'3!"%*!!!*!%BfpeFQ&ZG!#3%!%!'3!"%*!
+!!*!%BfpeFQ&ZG!#3%!%!'3!"%*!!!*!%BfpeFQ&ZG!#3%!%!'3!"%*!!!*!%Bfp
+eFQ&ZG!#3%!%!!`!"%*!!!*!%BA9dE`"ZG!#3%!%!!`!"%*!!!*!%BA9dE`"ZG!#
+3%!%!!`!"%*!!!*!%BA9dE`"ZG!#3%!%!!`!"%*!!!*!%BA9dE`"ZG!#3%!%!!`!
+"%*!!!*!%BA9dE`"ZG!#3%!%!!`!"%*!!!*!%BA9dE`"ZG!#3%!%!'3!"%*!!!*!
+%C'9XB@N!G!#3%!%!'3!"%*!!!*!%C'9XB@N!G!#3%!%!'3!"%*!!!*!%C'9XB@N
+!G!#3%!%!'3!"%*!!!*!%C'9XB@N!G!#3%!%!'3!"%*!!!*!%C'9XB@N!G!#3%!%
+!'3!"%*!!!*!%C'9XB@N!G!#3%J%!!",!!*!G'J"3!*3!B!#S!!%"!!!"!!!5d!"
+"!!!$H(Ki!!!!*!"F!+J!E!%3!!!"!!!"!!!5`"%#!!`0EQPfC@&e)'KPE'PeE3!
+!!#-!"!#S!"3"%!!!!3!!!3!!%X!4!J!-$(CKEQjP)'*bEfpVF`!!!#)!&!#S!#3
+"%!!!!3!!!3!!%X!4!J!-#hCKEQjP,@peGR*P!!!!)J!N!+J!0!%3!!!"!!!"!!!
+5`"%#!!`,GQ&ZEQ8YCQ9bE@8!!!!K!$3!U!"%!4!!!!%!!!%!!",!%3)!$!TfB@j
+ZC5efD@4P!!!!'J&E!!F"HJ!S!!!"!!$r!!!3%!!%!!)$H(Ki!!!!'J&F!#`"HJ"
+)!!!"!!$r!!!3%!!%!!)$H(Ki!!!!'J&F!%`"HJ"S!!!"!!$r!!!3%!!%!!)$H(K
+i!!!!-!&S!(!"H!%X!!!"!!!"!!!5`"%#!!`CFQ&k)("PFQP[C'PaG@8JE@pNG@a
+KG'P[EJ!!!"S!4!%8!)B"0!!!!3!!#!!!%(!!)!!!!hKiH!!!!"S!&!%`!#3"3!!
+"!3!!!3!!%Y!!)3!!!hKiH!!!!"S!*!%`!$3"3!!"!3!!!3!!%Y!!83!!!hKiH!!
+!!#d!*!!%!$3!L!!!!3!!!3!!%X!b!J!+&R0[FR4TC5"fB@aPGA*PFb"LFR9dCA-
+!!!!D!!3"'!!3!53!!!%!!!F!!",3!!!!$!0iH(J!!!!D!#3"'!!`!53!!!%!!!%
+!!",3%!!!!!0iH(J!!!!D!A!!L!&m!*3!!!%!!!%!!"$J%!!!!!0iH(J!!!!D!A!
+!"!&m!"!!!!%!!!%!!"$J%!!!!!0iH(J!!!!E!$3"'!"!!53!!!%!!!%!!",3%!!
+!!!4MER4X!!!!,J'J!5J"[!&B!!!"!#F3!!!3%"-!!!`A8#"SC@aTG@dX-#``,M8
+X-5`a,M8X-Jd!!!!G!"3"'!!J!53!!!%!!!%!!",3)`!!&JCPFR*PGA)!!!!G!!%
+!%!!L!'`!!!%!!qJ!!",!)`!!'3CPFR*PGA)!!!![!%3!!3"L!&!!!!%!*a!!!"$
+J)8%!TaKSC@aTG@dX-#if,$!Z1#`a,$%Z-L`a,M3!!!!i!"J!,!!U!*!!!!%"!!!
+$!!%3N!!!N!3K)!dJN!JY,3dJN!9KGA4[$@9aG@PXD@*bC3d!!!!i!#`!,!!q!*!
+!!!%"!!!$!!%3N!!!N!3K)!dJN!JY,3dJN!9KGA4[$@9aG@PXD@*bC3d!!!!i!%!
+!,!"5!*!!!!%"!!!$!!%3N!!!N!3K)!dJN!JY,3dJN!9KGA4[$@9aG@PXD@*bC3d
+!!!!i!&3!,!"Q!*!!!!%"!!!$!!%3N!!!N!3K)!dJN!JY,3dJN!9KGA4[$@9aG@P
+XD@*bC3d!!!!i!'J!,!"k!*!!!!%"!!!$!!%3N!!!N!3K)!dJN!JY,3dJN!9KGA4
+[$@9aG@PXD@*bC3d!!!&%"'!#9J"+!*!!!4d!!!!)"AC[D@8aEh3!!!!)"AC[D@8
+bC5!!!!!)"AC[D@8cG5!!!!!)"AC[D@8dEfi!!!!)"AC[D@8eFb!!!!!)"AC[D@8
+fMR)!!!!)"'&eG'pSB@i!!!!)"f0[GA*KER4PG3!!!!J%Cf&TER4bE`!!!!F!!!!
+$!!!!"`!!!!-!!!!(!!!!!3!!!!F!!!!"!!!!"`!!!!%!!!!(!!!!!3!!!!F!!!!
+9!!!!"`!!!"N!!!!(!!!!!3!!!!F!!!!"!!!!"`!!!!%!!!!(!!!!!3!!!!F!!!!
+"!!!!"`!!!!-!!!!(!!!!!3!!!!F!!!!"!!!!"`!!!!%!!!!(!!!!!3!!!!F!!!!
+"!!!!"`!!!!%!!!!(!!!!!3!!!!F!!!!"!!!!"`!!!!%!!!!(!!!!!3!!!!J&C'9
+XB@NJC3!!!"S!+!&)!&S"9!!8!3!!C!!!%("!B!!!!hKiH!!!!"S!+!&8!&S"A!!
+8!3!!C!!!%("!B!!!!hKiH!!!!"S!+!&F!&S"C!!8!3!!C!!!%("!B!!!!hKiH!!
+!!"S!+!&`!&S"I!!8!3!!C!!!%("!B!!!!hKiH!!!!"S!+!&m!&S"K!!8!3!!C!!
+!%("!B!!!!hKiH!!!!"S!+!'%!&S"M!!8!3!!C!!!%("!B!!!!hKiH!!!!"S!+!'
+B!&S"U!!8!3!!C!!!%("!B!!!!hKiH!!!!#8!B!&%!'i"R!!!!3!!!3!!%X!4!J!
+*$R0hDA4MD&p`D@aPAc9@!!!!*J"`!83!IJ'F!!!"!!!"!!!5`"%#!!N2FhGTG'0
+SAh"TE'9I-69@!!!"$!#$!*!)rrplZ`K"FQ0SC@p`F`e`BA*KE9pbC@GXB@GP!*!
+%!5d!N!3+G(*KBf8JG'peG!#3"!TdFQ&MC5"%,P-Z!*!%$h4bB@0P)$%JF'9bD@p
+NC3#3"!%Y!*!%"fC[GA*TCA)!N!3,BfpeFQ*P)&BS55N!N!3*EfjNC@aPG(4P!*!
+%!5d!N!3-BA9dEfeKG'PcE@9c!*!%#R*PCh9XBA4TEfi!N!3)C'PXGA4TEfi!N!3
+4Ff9ZFf9eFL"cG'9XE'&TFQ8!N!3",3#3"!pMBA*dC5"NCA-JE'pLCA-!N!3)F'p
+TER4KCf8!N!3&CQpjCA)!N!JD!&i"R3"Z!Dm!!3%!!!%!!",3!+%!!!0iH(J!!!!
+D!'i"R3"q!Dm!!3%!!!%!!",3!+%!!!0iH(J!!!!B!08!-3)p!RN!#!!!!3#3"3A
+Q!5S!N!@Nrri!!h0PER0PGA*IFh4PE'aKDA*P,QJ!!#i!"J!Z!$i"EKX!Fh0d!!"
+h!J!%"!#3#hF#d!(P9"!!N!SU!!&Z'6!!N"-"!!!5`!#3(3%!!",!!J)!$(0[FR4
+TC9pLFR9dC3#3$5-!"!!%!"3!H!!!!3!!!3!!%X!#!J!-$(0[FR4TC5"LFR9dC3!
+!!$)!!J#3"3F"j`!A!M83"'&kCA)!N!88!!3"B`*$!*!("!!%!"3!H!F#1[`!!!!
+`!*!("!#3"'CQc-`!!3#3"`)!N!F$!*!("2q3"J!!!#d!4!"8!')!T!!!!3!R%!!
+!%1!KN3#a&R"TFQ&ZD5`Z-$%X,M!c,#ia,#ic,$%!!!!D!*3"I!$'!BJ!&!%!!'3
+!!""`3#!!!!0iH(J!!!!D!*3"M!$'!CJ!&!%!!'3!!""`3#!!!!0iH(J!!!!D!*3
+"R!$'!DJ!&!%!!'3!!""`3#!!!!0iH(J!!!!D!-`"E!$q!AJ!&!%!!'3!!""`3#!
+!!!0iH(J!!!!D!-`"I!$q!BJ!&!%!!'3!!""`3#!!!!0iH(J!!!!D!-`"M!$q!CJ
+!&!%!!'3!!""`3#!!!!0iH(J!!!!D!-`"R!$q!DJ!&!%!!'3!!""`3#!!!!0iH(J
+!!!!D!33"E!%f!AJ!&!%!!'3!!""`3#!!!!0iH(J!!!!D!33"I!%f!BJ!&!%!!'3
+!!""`3#!!!!0iH(J!!!!D!33"M!%f!CJ!&!%!!'3!!""`3#!!!!0iH(J!!!!D!33
+"R!%f!DJ!&!%!!'3!!""`3#!!!!0iH(J!!!!M!'`!U!"m!4!!!!%!!!%!!",!%3)
+!$!adFQ&MC5"SC@aTG@d!!!!R!!%!R!!9!0!!!!%!!$m!!"#3!!!#!!!3GQpTC3d
+a$6)0-`dd$6800J!!!"S!8!$8!'!!k!!"!3!!!3!!%Y!!B3!!!hKiH!!!!"S!B!$
+8!'i!k!!"!3!!!3!!%Y!!F3!!!hKiH!!!!"S!8!%B!'!",!!"!3!!!3!!%Y!!J3!
+!!hKiH!!!!"S!B!%B!(!",!!"!3!!!3!!%Y!!N3!!!hKiH!!!!"S!8!&F!'!"F!!
+"!3!!!3!!%Y!!S3!!!hKiH!!!!"S!B!&F!(!"F!!"!3!!!3!!%Y!!X3!!!hKiH!!
+!!#-!-!!%!%!!I!!"!3!!"!!"%*!!!*!%$'0SBA9Q)!ebD@9Z$3!!!"F!8!"S!'!
+!L!!"!3!!'3!"%*!!!!!!K!#3""F!B!"S!(!!L!!"!3!!'3!"%*!!!!!!K!#3""F
+!8!#S!'!!b!!"!3!!'3!"%*!!!!!!K!#3""F!B!#S!(!!b!!"!3!!'3!"%*!!!!!
+!K!#3""F!8!%X!'!"6!!"!3!!'3!"%*!!!!!!K!#3""F!B!%X!(!"6!!"!3!!'3!
+"%*!!!!!!K!#3"$N!)!!%!$!!I!!"!3!!"!!"%*!!!*!%)RCKEQjP$A*TC@i0CQ9
+bE@9P$@peGQ9bG'80F(*PFh0TEfi!!!!F!!%!"!!3!#`!!3%!!!%!!",!#5!!#J9
+bCA0PG!!!!#!!2!'-!%S"d!!!!3!!!3!!%X!a!J!+#@&XD@eIBQ9LE`!!!#%!8!'
+8!&i"f!!"!3!!!3!!%X#4!J!+#R4MAh*PC(9TG'8!!!!D!&!!9!"J!'J!!3%!!!%
+!!",3!#%!!!0iH(J!!!!f!"!!"!!J!(`!!3%!!!3!!4#3!!#3""mJG(*KER-k$A*
+TC@i0EQpbE@&X$A*KF'PNC3eXC@jd!!!!'`!`!)J!3!$%!!%"!!!C!!!3N!!!!!#
+%"'*[E'm!!!!M!&3!"!"N!%X!!!%!!!%!!",!)8!!#JaYEfjdFQ8JBQpXEh-!!!!
+M!'3!"!"d!%`!!3%!!!%!!",!-j!!!!S-Ff&eGQ8JBfpZCQPR!!!!&`"J!1J!F!%
+)!!%"!!!C!!%3N!!!!!#%!*!%-!"S!"!!H!#!!!%"!!!$!!%3N!!!N!3CCQ9dAh*
+KHJeKFR*PG!ebBA"TC'80E'9ZG!!!!"S!P!&X!-B"H!!8!3!!C!!!%("!)!!!!hK
+iH!!!!03$k3!X!b!!6!$!!!!!#!&@DA)!!!!)!8NJB`!!!!J"9'8J!!!!#!&-C'8
+!!!!(!*!("`#3"`F!N!F(!*!,"`#3"`J#F'KZCf8!!!!(!*!("`#3"`J"Ch*[!!!
+!#"XJ)$!Z-$",[5!J-#i`-$"Z35!J)$!Z-$!`E9CeFJ!!!!F!N!F)!P)p6'8J!!!
+!%!%`C5!!!!!(!!!!!3!!!!F!N!F)!ABJF!!!!!F!!!!"!!!!e!2T!$-$,`"-!-!
+!!!!)!9CTFJ!!!!J"55"M!!!!#!&8C5!!!!!)!8aNC3!!!!F!N!F(!*!("`#3"`F
+!N!X(!*!(#!*`D'jRC3!!!!F!N!F(!*!(#!&RFQm!!!!)'b!J-#i`-%Zp)#!`,M!
+`-'j")#!J-#i`-$"Y9R9b!!!!"`#3"`J#8Me-C5!!!!!3!6"P)!!!!!F!!!!"!!!
+!"`#3"`J"GL"`!!!!"`!!!!B!!"-[,bmUN!NJ)'0[C@CQD@0TC@jdFb!JF'peFL!
+JE'9c)#"YCA0eFQ9c)#"LEfa[)*!%+T!I,bm0,bmJN"PdEh9dCA-JE'9c)("eDA0
+cB@jMCA-JC@iJF&FJN#![,`d[,`NY-5d*E'pT)'4P)(*PF'pZFf8JG'KPFQeTFA9
+P)'4PFb"LEfa[Fb!JBACPBb"5)'9Z)'pSEA-JCA3J9#"PEL",C@afD@iJ)'0[C@B
+J-#`a,$)*#5m[$5m[)*"8,bm0,bmJ#93J25!JBfpPCM)J)#SJ)#!S)#!JE'iJ+#!
+J8L![)'0[C@Ba+5!U+L!J+#!Y-5![)'0[C@B`)#NJN"X[,`d[,b#39#m[$5m[#5d
+b,3PQG@PdC5"dD'9bE@PaG@8JC(8JBQpXEb!J)'0[C@BJ-b`d)*!Y,bm0,bmJN&3
+[,`d[,`P3G'pd)$dJ)'0[C@Bc)#!U)#!S)#Ja-#T8BLNJ+LSJBfpPCM3JN!3Y)*!
+%+$%`+P4MFRP[+5!J+LSJ)'0[C@Bd)#NJN!m[,`d[,b#39#m[$5m[#5dc,3PMB@a
+MG@`JC@e`DA*TFA9P)'4P)&"MD@9X)'9d)'4P)#"dBA8*)#"MEf9Q)#!e,$BJN"m
+[,`d[,b#39#m[$5m[#3P3BfPPE!Np#@0[C@Be#5dJ8'9XC@-*#@0[C@Be25"*)#S
+J3@NJ+(4KBQaPFb"iBACTCA)T)*!H,bm0,bm*#A4KG3Np#5dJE'iJ+#!a)#XJ)&"
+MD@9X)#mJBfpPCMBJ+3PMEf9Q0MdJ55!U)%*T)#KdB@*XCA-JH'&fD@9b+5#3%bm
+[$5m[)*"8,bm0,bmUN&3[,`d0$5m[+T"8,bm0,bmJN&3[,`d[,b!J)("[GA)JE'9
+c)%e-8%%JN!Bk)#"RB@PZ)$dJ-6!`)#!JC'PfDA0PGA)J25!a-$%J)'pe)#!c-c!
+JN"F[,`d[,b!J)("[GA)JE'9c)'*PBQpND@CQ)#!k)#"RB@PZ)$dJC'PfDA0PGA)
+J25!a-$",EfKY)#mJ8L"`FQ9KEA"XD5#3&5m[$5m[)#!JF'peFL"XCA-JBQ9LEf4
+TCQBJ)$SJ)'aK)'0KF'%JCA0d)'0[FR*TCf9P)'3RG@iJCQ&MG'9eFL!`,MJf1##
+3&#m[$5m[)#!JF'peFL"XCA-JBf&bG'9c)'e[C'PQD@9PFb!k)'ePG(4bC5"NDAC
+TFf9eFMd`)*!N,bm0,bmJN"PPG#"MBA"K)$dJE'%JFQ9cDA0dB@jMC5"NC5"MD'&
+RC5"PEL"0C@G[D'dJN"%[,`d[,b#39#m[$5m[+T"8,bm0$3d[,b!JEQpY)#!X)#"
+[ELp[CQBJ)#`J)$!J25"06&"")*!(,#"1S5"LEfa[)#`J)'GKD@jIF'%J)#`JBf&
+`B5!X)'4TGQPcCA9b)#`JBfpPCM!J)#`JBfpPCM%J,#!ZN!F0,bmJN!FX)#!`)'p
+e)$%J)#`J)$)Z,MJJ25"#48*2)*!%,#!JD'&bC#!J)#`JN!XX)#!d,MFJ,#!J-c-
+c)*!&,#!0,bmJN"8a-#!p)%*PC'PQCL#3"#`JN!NX)*!,,#!0$5m[)("[GA)JE'9
+c)'*PC'PQCL!SBfpNC5!a-#NJ)'aP)'kK)'4P)'*[E'mJCA0d)#"1S5"NC5"LC@*
+[+MJJ)#XJ)'jeE@9bEb"NB@jc)'aK)'*PBQm0,bmJ)(0[DA3J1L!J-5!b)$-J0#!
+e)$BJ)#iZ)#!j)$%`)$%a)$%b)$%c)$%d)#iZ)$%h)$%i)$%j)$)`)$)a)$)b)#i
+Z)'9dB`d0$5m[)'*[E'pc)'0KEA"KCfjP)$%j16JY-6Nj13d[+JebC@GI6Q*6D5j
++,#!a,#!`,#!a,#!a-$!X)$3Z0b`J-c-c,!NZ03N*#5`e-6NZ0L!J,#!i,M)i0Je
+f-5db-c%Z,Lj-,#!a,#!`,#!b,#!a-$!X)$3Z0b`J-c-c,#!Z05!J)#`J-5ih)#!
+J,#!c-Lid-5!X)$!Z-c-c)#`J-6!J)#`J-M!Z-c!J)#`J)$%a,M3a)#!*#3ef-5d
+b-c)Z,Lj1,#!a,#!`,#!c,#!a-$!X)$3Z0b`J-c-c,!N*$ABa,6)c0biZ,N8X)$%
+X)$!X)$3X)$%`-#`J0#ih,#!c-c-X$3ebC@GI5Q&YD@92,#!a,#!`,#!e,#!a-$!
+X)$3Z0b`J-6!a,!d09M)Y6Q*6D5iZ5#`J-5`J-#`J0L`J-6!`,#!d,MFX)$%`-5`
+J,M8J)#!X0$-c,MJJ)#`J15ib03e@-Ldb-c!Z,Lj#,#!a,#!`,#!h,#!a-$!X)$3
+Z0b`J-c-c,#!Z05!J)#`J1#ib0L!J,#!b0Lif-5!X)$8Z-6!J)#`J)$FJ)#`J15i
+c063J)#!X)#!a,M!b0Je@-Ldb-$8Z,Lj4,#!a,#!`,#!i,#!a-$!X)$3Z0b`J-c-
+c,!NZ06%i)#`J1$%JN!3X)$)e,M)J$9Bb,6)`1#iZ,P!X)$%X)$!X)$NX)$%`-#`
+J0#ih,#!c-c-X)#ie)#!J,#!a-Lic-5!X)$-c,M3b)#`J-#if-MFJ,#!f,M8J,#!
+i,M%a-b!J)#`J)$)Z168i$3dU,`d[,f*[E'pc)'0KEA"KCfjP)$%j16FY-6Nj1!d
+[+Jd0GM%Y-M!i,LiZ5L`J-5`J-#`J-5`J-6!`,#!d,MFX)$-c-b`J,M8J)#!X)$%
+b,M-a)#`J-c-Z0$)J#3N0GM%Y-M-b,LiZ6#`J-5`J-#`J-L`J-6!`,#!d,MFX)$-
+c-b`*#3ef-5db-$8Z,Lj1,#!a,#!`,#!c,#!a-$!X)$3Z0b`J-c-c,!NZ06%i)#`
+J1$%JN!3X)$)e,M)*$ABa,8jL8fNZ,N8X)$%X)$!X)$3X)$%`-#`J0#ih,#!c-c-
+X#5ie#3N*,$8a15if)#!X)$JZ-MJf$8TKE@PP,T!%6b`J-5`J-#`J05`J-6!`,#!
+d,MFX)$%`-5`09M)Y6Q*6D5iZ5#`J-5`J-#`J0L`J-6!`,#!d,MFX)$%`-5`J,M8
+J)#!X0$-c,MJJ)#`J15ib03e@-Ldb-M3Z,Lj#,#!a,#!`,#!h,#!a-$!X)$3Z0b`
+J-c-c,#!Z05!J)#`c,M3c)#!J,#!b0Lif$9Bb,6)c-#iZ,P%X)$%X)$!X)$JX)$%
+`-#`J0#ih,#!c-c-X)#ie)#!J,#!i,M)f)#!X)$)f,MBa$9Bb,6)c-5iZ,P!X)$%
+X)$!X)$NX)$%`-#`J0#ih,#!c-c-X)#ie)#!J,#!a,MFJ)#!X)$-b,M3a$3dU,`f
+3"#m[)#"LEfa[Fb"`Eh9b)%&bBfKPEh"c)#!J$3d0GM%YBQ9ND@Ba)#!X)$%X-6!
+X-5!X)#!b-$!X)$)b,#!J-M!`,#!Z05!J)#`J-6)Z-c%J,#!c-bid-L!*#3ef-5e
+LC@4TCM)J)#`J-5`a-#`b)#`J)$)`-#`J-M)X)#!b-$!X)#ie)#!J,#!a-Lic-5!
+X)$-c,M3b)!N*$ABa,@*PC'PQ-b!J,#!a,$%`,$-J,#!J-M!`,#!b-L`J)$)`-#`
+J,M8J)#!X)$8`,M!J,#!a0#i`)!N*$ABa,@*PC'PQ0#!J,#!a,$%`,$3J,#!J-M!
+`,#!b-L`J)$)`-#`J,M8J)#!X)$%b,M-a)#`J-c-Z0$)J#3N0GM%YBQ9ND@Be)#!
+X)$%X-6!X05!X)$%`-$!X)$3Z0b`J-6!`-#`J,M8J)#!X)$%b,M-a)#`J-c-Z0$)
+J#3N0GM%YBQ9ND@Bf)#!X)$%X-6!X0L!X)$%`-$!X)$3Z0b`J-6!`-#`J,M8J)#!
+X)$%b,M-a)#`J-c-Z0$)J#3N0$ABa,@*PC'PQ0b!J,#!a,$%`,$NJ,#!a-$!`,#!
+d,MFX)$%`-$!X)#ie)#!J,#!a-Lic-5!X)$-c,M3b)!N*$ABa,@*PC'PQ1#!J,#!
+a,$%`,$%`,#!a-$!`,#!d,MFX)$%`-$!X)#ie)#!J,#!a-Lic-5!X)$-c,M3b)!N
+*$ABa,@*PC'PQ15!J,#!a,$%`,$%a,#!a-$!`,#!d,MFX)$%`-$!X)#ie)#!J,#!
+a-Lic-5!X)$-c,M3b)!N*$ABa,@*PC'PQ-6!J,#!a,$%`,$%b,#!a-$!`,#!d,MF
+X)$%`-$!X)#ie)#!J,#!a-Lic-5!X)$-c,M3b)!N*$ABa,@*PC'PQ-6%J,#!a,$%
+`,$%c,#!a-$!`,#!d,MFX)$%`-$!X)#ie)#!J,#!a-Lic-5!X)$-c,M3b)!N*$AB
+a,@*PC'PQ-6)J,#!a,$%`,$%d,#!a-$!`,#!d,MFX)$%`-$!X)#ie)#!J,#!a-Li
+c-5!X)$-c,M3b)!N*$3ef-5eLC@4TCM%c)#`J-5`a-#`a0b`J-6!`-#`J0#ih,#!
+a-$!`,#!Z05!J)#`J-6)Z-c%J,#!c-bid-L!*#3ef-5eLC@4TCM%d)#`J-5`a-#`
+a1#`J-6!`-#`J0#ih,#!a-$!`,#!Z05!J)#`J-6)Z-c%J,#!c-bid-L!*#3eRCA*
+YB@jTG@dJ)#`J-5`a-#`a15`J-6!`-#`J-M)J,##3"$!X)#ie)#!J,#!a-Lic-5!
+X)$-c,M3b)!N*$A4SCA*YAc4V)#!J,#!a,$%`,$)`,#!a-$!`,#!a)#!X)*!%-#`
+J,M8J)#!X)$%b,M-a)#`J-c-Z0$)J#3N0G'KPFQeI-5ifDb!X)$%X-6!X-M%X)$%
+`-$!X)$%J)#`JN!3`,#!Z05!J)#`J-6)Z-c%J,#!c-bid-L!*#3edD'9bE9ma-'X
+J)#`J-5`a-#`b-L`J-6!`-#`J-5!J,##3"$!X)#ie)#!J,#!a-Lic-5!X)$-c,M3
+b)!N*$3d!C3"0!I%#Y!!!!03$k3'l!8%!B!%*!!!!#!&@DA)!!!!)!8NJB`!!!!J
+"9'8J!!!!#!&-C'8!!!!(!*!("`#3"`F!N!F(!*!,"`#3"`J#F'KZCf8!!!!(!*!
+("`!!!!)!!!!)!@GbE`!!!!JE)#!`,M!`5ldJ)$!Z-$!`EN%J)#!`,M!`-'e@GA)
+!!!!(!*!(#!*528aP)!!!!"!"-'8J!!!!"`!!!!%!!!!(!*!(#!&f)(!!!!!(!!!
+!!3!!!03$k3$)!6i!A!%*!!!!#!&@DA)!!!!)!8NJB`!!!!J"9'8J!!!!#!&-C'8
+!!!!(!*!("`#3"`F!!!2J!!!!"`#3#`F!N!F)!R"SEQGP!!!!"`#3"`F!!!!#!!!
+!#!&RFQm!!!!)'b!J-#i`-%Zp)#!`,M!`-'j")#!J-#i`-$"Y9R9b!!!!"`#3"`J
+#8Me-C5!!!!!3!6"P)!!!!!F!!!!"!!!!"`#3"`J"GL"`!!!!"`!!!!%!!!$8!qN
+"3`&!!'!"#!!!!!J"9QPb!!!!#!&*)'-!!!!)!94P)!!!!!J"6'4P!!!!"`!!!b!
+!!!!(!!!2S!!!!!F!N!F(!*!,"`!!!!%!!!!)!R"SEQGP!!!!"`#3"`F!!!!#!!!
+!#!&RFQm!!!!)'c)a05if0dZp)#!j,M!e0@j")#!J-5ij060Y9R9b!!!!"`#3"`J
+#8Me-C5!!!!!3!6"P)!!!!!F!!!!"!!!!"`#3"`J"GL"`!!!!"`!!!!)!!!$8!qN
+"2J*@!'!!kJ!!!!J"9QPb!!!!#!&*)'-!!!!)!94P)!!!!!J"6'4P!!!!"`#3"`F
+!N!F(!*!("`#3#`F!N!F)!R"SEQGP!!!!"`#3"`F!!!!#!!!!#!&RFQm!!!!)'b!
+J-#i`-%Zp)#!`,M!`-'j")#!J-#i`-$"Y9R9b!!!!"`#3"`J#8Me-C5!!!!!3!6"
+P)!!!!!F!!!!"!!!!"`#3"`J"GL"`!!!!"`!!!!%!!!$8!qN"`3!P!'%!r`!!!!J
+"9QPb!!!!#!&*)'-!!!!)!94P)!!!!!J"6'4P!!!!"`#3"`F!N!F(!*!("`#3#`F
+!N!F)!R"SEQGP!!!!"`#3"`F!!!!#!!!!#!&RFQm!!!!)'b!J-#i`-%Zp)#!`,M!
+`-'j")#!J-#i`-$"Y9R9b!!!!"`#3"`J#8Me-C5!!!!!3!6"P)!!!!!F!!!!"!!!
+!"`#3"`J"GL"`!!!!"`!!!!%!!!$8!qN!5J!Q!'-!r`!!!!J"9QPb!!!!#!&*)'-
+!!!!)!94P)!!!!!J"6'4P!!!!"`#3"`F!N!F(!*!("`!!!'!!N!F(!*!(#!*`D'j
+RC3!!!!F!N!F(!!!!!J!!!!J"Ch*[!!!!#"XJ)$!Z-$",[5!J-#i`-$"Z35!J)$!
+Z-$!`E9CeFJ!!!!F!!!!"!!!!#!*528aP)!!!!"!"-'8J!!!!"`!!!!%!!!!(!*!
+(#!&f)(!!!!!(!!!!!3!!!03$k3"(!8%!C3%-!!!!#!&@DA)!!!!)!8NJB`!!!!J
+"9'8J!!!!#!&-C'8!!!!(!!!$3!!!!!F!!!qJ!!!!"`#3"`F!N!X(!!!!!3!!!!J
+#F'KZCf8!!!!(!*!("`!!!!)!!!!)!@GbE`!!!!JE-M)d,M-`5ldJ)$NZ-$8eEN%
+J)#!b,M!c-@e@GA)!!!!(!*!(#!*528aP)!!!!"!"-'8J!!!!"`!!!!%!!!!(!*!
+(#!&f)(!!!!!(!!!!!J!!!63$l`*F!F3!b!)1!!!!#"*K16PI-$9I-M3Y-6GS-c*
+Y-$FJL#!!!!!)$'0[E@ePER4KDA*PFh8JB`!!!"!&,Li[,Lj[G3!!!!3!!!!)%'C
+TBfKTCA)JC'PK)$%J1L"ZCf8!!!!3!#"ME`!!!!J3CQPMD'PPFL"ND@%J-L!k)'9
+M)!!!!"!!FQpT!!!!"`#3"`F!!!!#!!!!#!"e)'3!!!!(!!!!!3!!!!J+C'pZAh5
+1E)ik)'GKG3!!!"!!Ffpe!!!!#""QD@0SD@9b)'&bBfJa)$SJB@jR!!!!%#G6F'&
+dD@&XAd&bBfKPEh"c1N&bBfKPEh"c1QCTBfKTCA*cAf4KG'%JC!!!!!J3CQPMD'P
+PFL"KFQ0S-L!k)'9M)!!!!"!0,bpMD'9[F(0IC'&dBA4b!!!!eJ2T!Ei#@3"H!18
+!!!!)!9CTFJ!!!!J"55"M!!!!#!&8C5!!!!!)!8aNC3!!!!F!!!qJ!!!!"`!!!5!
+!!!!(!!!$B!!!!!F!N!X(!*!(#!*`D'jRC3!!!!F!N!F(!!!!!J!!!!J"Ch*[!!!
+!#"`J-63Z16Fh6EdJ)$!Z0M8bEN%J)#!j,MFf0'e@FR-J!!!!"`#3"`J#8MdJBfJ
+!!!!3!6#))!!!!!F!!!!"!!!!"`#3"`J"GQ9b!!!!"`!!!!%!!!$8!qN"M3,d!&X
+![`!!!!J"9QPb!!!!#!&*)'-!!!!)!94P)!!!!!J"6'4P!!!!"`#3"`F!N!F(!*!
+("`#3#`F!N!F)!R"SEQGP!!!!"`#3"`F!!!!#!!!!#!&RFQm!!!!)'L!J-#i`-,d
+J)$!Z-$!`EN%J)#d`,M)e0'e@CA9b!!!!"`#3"`J#8Me-C5!!!!!3!6"P)!!!!!F
+!!!!"!!!!"`#3"`J"GL"`!!!!"`!!!!%!!!!H!!J"`!!@!KJ!!!%!!!%!!",!%3)
+!#3GMD'&eCPma!!!!(J!B!F!!*J)B!!!"!!!"!!!5`"%#!!N(BfKKG@CI-J!!!"i
+!+!(!!$B#'!!!!3!!!3!!%X!4!J!*"f0SBA9QAc-!!!!H!$J"`!"'!KJ!!!%!!!%
+!!",!%3)!#3GMD'&eCPmd!!!!(J")!F!!9J)B!!!"!!!"!!!5`"%#!!N(BfKKG@C
+I03!!!"i!@!(!!'B#'!!!!3!!!3!!%X!4!J!*"f0SBA9QAcB!!!!H!'J"`!"f!KJ
+!!!%!!!%!!",!%3)!#3GMD'&eCPmh!!!!(!#%!F!!NJ)B!!!"!!!"!!!5`"%#!!N
+&CAKdFQ%!!!3d!$m!N!8%!8J!*!'XL"dJN!C`D@aPF`eND@`J)#mJ)'*PBQmJ,b!
+J63#3"P`!U!"X!4!(!MLN!*!&"!#S!"3"%!F#1+8!N!88!+J!*!%3"`)iTJ#3"53
+!U!!d!4!(!MLR!*!&0!#S!%3"%!F#1+J!N!3"@`!(!AS!+!F#1+N!N!3"A!!X!AS
+!5!F#1+S!N!3"A!"-!AS!D!F#1+X!N!3"S!%S!E`"@!F#1+`!N!3"I`#$!Bd!da!
+*FQ&kAfe[C(9X!*!&!@J!F!&i!5`(!MLY!*!&E!#S!(`"%!F#1+i!N!9%!43!KJ%
+d"`)iV`#3"8J"0!#'!8#)"9m0A`eI!*!'&!%`!#3"3!F#1,!!N!8N!6!!0!&!"`)
+iX3#3"53!"!!d!)J(!MLb!*!&"!%B!"!"*!F#1,-!N!88!4J!)!%N"`)iY!#3"53
+"'!!`!53(!MLe!*!&0!%B!%!"*!F#1,B!N!3"F!#)!C`"!!F#1,F!N!3"F!!%!C`
+!I!F#1,J!N!9%!!%!BJ"3"`)iZ3#3"CJ!!3#U!@5)!bdY,3#3"X3!!3$@!@5)!bd
+Y,3#3"J%!%!!L!'`(!MLk!*!&D!!3!(J!J!F#1,X!N!@X!!%![J&NL!-Y,5d!N!E
+B!!%"!!&NL!-Y,5d!N!8""!!"!5`"C)J$,5dY!*!'+!&)!&S"9!F#1,`!N!8S!93
+!@J&F"`)i[3#3"5J"A!"D!@3(!MLq!*!&+!&`!&S"I!F#1,m!N!8S!A`!@J'%"`)
+i`!#3"5J"K!"D!B`(!MM"!*!&+!'B!&S"U!F#1-)!N!9J!83!EJ'F"`)i``#3"A!
+"4!"q!C`(!MM%!*!&AJ'G!'i"V`F#1-8!N!9Z!Cd!IJ'["`)iaJ#3"83!9!"L!+3
+(!MM(!*!&P!&X!-B"H!F#103!N!@8!A`!aJ')"`)ib!#3"C3"M!$'!CJ(!MM*!*!
+&P!'F!-B"U!F#1-S!N!A-!@`!rJ&i"`)ib`#3"F`"I!$q!BJ(!MM-!*!&c!'-!2i
+"Q!F#1-d!N!A-!C`!rJ'S"`)icJ#3"!%%!@`"0J&i"`)ic`#3"!%%!A`"0J')"`)
+id!#3"!%%!B`"0J'B"`)id3#3"!%%!C`"0J'S"`)idJ#3"3J"`!!@!KJ(!MM6!*!
+&'!(!!#B#'!F#108!N!8S!F!!0J)B"`)ieJ#3"6J"`!"'!KJ(!MMA!*!&5!(!!&B
+#'!F#10J!N!9B!F!!CJ)B"`)if3#3"@J"`!"f!KJ(!MMD!*!&K!(!!*)#'!F#10X
+!!!Lqrri!3'4TE(9dD@pZ,QJ!3!!"%C!'!!)LN!B!!c-!C'PX!!!%4!!%"!#3#&9
+9!!CQN!B!"hGh!!"hG`!)!'9dAh*KHJ#CN!B!#UU3"!#3"3%!!",!%3)!$(0hDA4
+MD&pSC@aTG@d!N!`"!!!5`"%#!!a&9N)!BfKID'9XDA9Y!*!-!3!!%X!4!J!-49C
+2!'0SAfKPE'PeE3#3$!%!!",!%3)!$%9@4J"MD&pSC@aTG@d!N!`"!!!5`"%#!!a
+&9PB!BfKID'9XDA9Y!*!-r`!!%"!!"!!#FhGTG'0SAc%!N"(r!!!3%!!%!!*cGfP
+dBfKI-J#3%Im!!"!3!!3!!R0hDA4MD&mc!*!3*a!!!"!3%`!!$!"PG&pbBAS!N")
+"!!!5`!#3(3%!!",!%3)!$(*KHPpYEf4eE!#3%!%!!",!%3)!$(4bB@0PAfKPE'P
+eE3#3$3J!!""`!#!!!'jTGQ9KG9pSC@aTG@d!N!`"!!!5`!#3'`%!!3!!%Y!!)3!
+!GQpjB@jdAd9@6`#3$3%!!3!!%Y!!83!!GQpjB@jdAd9@4J#3$`%!!",!-J)!#R0
+[FR4TC9pLFR9dC3#3$3%!!",3%!!!!%9@3PpbCA4[GA)!N!m"!!!5d"!!!!"&9Np
+IFQ9dEh9b!*!2!3!!%Y!3!!!!49C'Ah*PG'peFJ#3$`%!!",3%!!!!%9@9PpbCA4
+[GA)!N!i$k!!!%1##!3#dC&mc5'8!N"-$k!!!%1#$!3#cC&md5'8!N"-R%!!!%1!
+K33#R8P"I5'8!N"3"!!!5`!#3"("IC&mc5'8!N")"!!!5`!#3"("IB@Pb!'8!N"%
+$k!!!%X!M!!!CCA*bCA9b!*!4!3!$!!%3N!!!N!4QCA4IFQ&k!*!5!3!!%X!!N!4
+`Af4I0%KP!*!5!3!!%X!!N!4`D@aPF`#3&!%!!",!!*!%G'9YF'9bBA4eFQ9c!*!
+,&!"N!!!3F%"J!!"`Ac%`9!"ID'9XDA9Y!*!+&!"N!!!3F%"J!!"`Ah!a1%3!D'9
+XDA9Y!*!+&!"N!!!3F%"J!!"`Afda1%3!D'9XDA9Y!*!+&!"N!!!3F%"J!!"`Ac%
+`3J"ID'9XDA9Y!*!+&!"N!!!3F%"J!!"`Ah!a1%)!D'9XDA9Y!*!+&!"N!!!3F%"
+J!!"`Afda1%)!D'9XDA9Y!*!+&!"N!!!3F%"J!!"`Ad0S!%)!D'9XDA9Y!*!-!3!
+!%X!4!J!*FhGIF(!e!!"TE'9IF'&bAc8!N!J"!!!5`"%#!!PcGep`F$%e!'PXC9p
+`BA*I03#3"J%!!3!!%Y!!S3!!GQpjB@jdAh"`03#3$3%!!3!!%Y!!S3!!GQpjB@j
+dAh"`-68!N!dR%!!!%1!KN3#aF'PbB@jT!*!4&!"N!!!3F%!J!!"dAfJa!%)!D'9
+XDA9Y!*!+&!"N!!!3F%!J!!"dAfJb!%)!D'9XDA9Y!*!+&!"N!!!3F%!J!!"dAfJ
+c!%)!D'9XDA9Y!*!+&!"N!!!3F%!J!!"dAfJd!%)!D'9XDA9Y!*!+&!"N!!!3F%!
+J!!"dAf%a!%)!D'9XDA9Y!*!+&!"N!!!3F%!J!!"dAf%b!%)!D'9XDA9Y!*!+&!"
+N!!!3F%!J!!"dAf%c!%)!D'9XDA9Y!*!+&!"N!!!3F%!J!!"dAf%d!%)!D'9XDA9
+Y!*!+&!"N!!!3F%!J!!"dAf)a!%)!D'9XDA9Y!*!+&!"N!!!3F%!J!!"dAf)b!%)
+!D'9XDA9Y!*!+&!"N!!!3F%!J!!"dAf)c!%)!D'9XDA9Y!*!+&!"N!!!3F%!J!!"
+dAf)d!%)!D'9XDA9Y!*!-!3!!%X!4!J!*BfKIBfJa!!"TE'9IF'&bAc8!N!J"!!!
+5`"%#!!PcGepMD$)!BfJb!&p`BA*I03#3#!%!!",!%3)!#@0SAf0S-`!!D@aPAh"
+KFPme!*!)!3!!%X!4!J!*FhGIBfJd!'0S-J"IF'&bAc8!N!J"!!!5`"%#!!PMD&p
+MD$8!!'PXC9p`BA*I03#3#!%!!",!%3)!#A0hAf0S0J"MD$)!Ah"KFPme!*!)!3!
+!%X!4!J!*BfKIBfJh!!"TE'9IF'&bAc8!N!J"!!!5`"%#!!PcGepPH(4bB3!b!&p
+`BA*I03#3#"i!!3!"!")!23!!!3!!!3!!%X!bN!!!$!GMB@aMG@aP!!!!q!!0!*!
+&+!!"!B`!X)J!N!B8!!%!*J&!"`)aR!#3"6`!Y!"4!1N(!M'G!*!&F!#d!)B!m!F
+#-Ci!N!@)!,3!bJ$JL"0iE@PZ)(KYBAJJH@eTEL"jE@&i!*!'L`$[!*F"24!%-#i
+`-3#3"3-!G`!2!5N3!*!'Q`$[!+F"24!#-c!!N!@V!1m!Y`%p%!%a!*!'Z`$[!-F
+"24!%-6!`-!#3"9J!Y!"S!15)"(PYBAJ!N!9E!1m!C`%p%!%a!*!'!3!"!")!23F
+#-Cm!N!8$!%F!$`"Y%!3a-6!`!!!#'[rq!!jQEh9bD@9b,QJ!SP!$,D1!!*!&)YY
+3!e#KS!!+!!"Q!!&e!1)!!!3%!*!,)YX`!e#KS!#3#R*PFh8!8!#3%3%!'3!"%&!
+5!3!-BQpXE`#3&3%!!",!%3!!$(4bB@0P!*!8!3!!%X!4!!!-CQpeFQPPFJ#3%J%
+!!",!!*!G!3!!%X!!N!4iE@PZ!*!9!3!!%X!!N!4YCA0cB@GP!*!0rrm!!!!"!!!
+5`!#3"(KYBAJ!N"8"!!!5`!#3"(PYD@i!N"8"!!!5`!#3"(PYBAJ!N"8"!!!5`!#
+3(3%!!",!!*!%G(*KBf9jE@&i!*!3!3!!%X!bN!!!$'0KE'0eE'8!N")"!!!5`!#
+3"'jLAh"dF`#3%p3$k3$"!PS!A!$K!!!!#!&@DA)!!!!)!8NJB`!!!!J"9'8J!!!
+!#!&-C'8!!!!(!!!'3!!!!!F!!!qJ!!!!"`!!!q!!!!!(!*!,"`!!!!%!!!!)!R"
+SEQGP!!!!"`#3"`F!!!!#!!!!#!&RFQm!!!!)'c3c-5ic0%Zp)#!j,M!e0@j")#!
+J-bij-$CY9R9b!!!!"`#3"`J#8Me-C5!!!!!3!6"P)!!!!!F!!!!"!!!!"`#3"`J
+"GL"`!!!!"`!!!!)!!!$@!qN"4J!V!&m!r`!!!!J"9QPb!!!!#!&*)'-!!!!)!94
+P)!!!!!J"6'4P!!!!"`!!#H!!!!!(!!!$i!!!!!F!!!0J!!!!"`#3#`F!N!F)!R"
+SEQGP!!!!"`#3"`F!!!!#!!!!#!&RFQm!!!!)(#!J-Lij-c90[5!a-#ie-6&Z35!
+J-c!Z1$8dE9CbFb!!!!!(!!!!!3!!!!J#8MdJBfJ!!!!3!6#))!!!!!F!!!!"!!!
+!"`#3"`J"GQ9b!!!!"`!!!!%!!!$@!qN!c!!S!'!!rJ!!!!J"9QPb!!!!#!&*)'-
+!!!!)!94P)!!!!!J"6'4P!!!!"`!!"X!!!!!(!!!$i!!!!!F!!!-J!!!!"`#3#`F
+!N!F)!R"SEQGP!!!!"`#3"`F!!!!#!!!!#!&RFQm!!!!)(#!J-Li`-$G0[5!a-#i
+e-6&Z35!J-M%Z-$N`E9CbFb!!!!!(!*!(#!*525"MD!!!!"!"-)JJ!!!!"`!!!!%
+!!!!(!*!(#!&fCA)!!!!(!!!!!3!!!0B$k3#6![-!@`$#!!!!#!&@DA)!!!!)!8N
+JB`!!!!J"9'8J!!!!#!&-C'8!!!!(!!!!*!!!!!F!N!F(!*!("`#3#`F!N!F)!R"
+SEQGP!!!!"`#3"`F!!!!#!!!!#!&RFQm!!!!)(5de0$-f-bih0VdJ)$-Z16NdEN%
+J)#d`,M)a0fe@Fb!!!!!(!*!(#!*525"MD!!!!"!"-)JJ!!!!"`!!!!%!!!!(!*!
+(#!&fCA)!!!!(!!!!!3!!!0B$k3%1![8!A`#q!!!!#!&@DA)!!!!)!8NJB`!!!!J
+"9'8J!!!!#!&-C'8!!!!(!!!!B!!!!!F!N!F(!*!("`!!!5!!N!F(!*!(#!*`D'j
+RC3!!!!F!N!F(!!!!!J!!!!J"Ch*[!!!!#"dY-6!h0Li`-EdJ-M-d,M-c0Qj")#!
+Y-#ib06*Y9R-J!!!!"`#3"`J#8MdJBfJ!!!!3!6#))!!!!!F!!!!"!!!!"`#3"`J
+"GQ9b!!!!"`!!!!B!!!!B!*%!i!'L!QF!#!!!!3#3"3B%!5S!N!8`!*!("!!!c-c
+rN!3!!5%q#)qL'`!#"#X%''Xd!!2c[UADhA%!"'"hB(GJG`!!!$!!$!!m!%!"1!!
+!!3!!!3!!%X!c!!!6'A0KGACP)'aP)(*PCfaKCf80BfpeFQ&ZG!d!!!!D!%m!#`%
+2!#-!!!%!!!J!!",!%J-!&!-0$3d!!!#b!!N!N!8-!$`!3!%i"`)m+`#3"8m!#`%
+2!#-(!M`S!*!&8`![!'!"D4!$H(Ki!*!'D`![!(J"D4!$H(Ki!*!'J`![!*!!!@N
+3!hKiH!#3"TX!,`#S!@N3!hKiH!#3"V-!,`$!!@N3!hKiH!#3"XX!,`$B!@N3!hK
+iH!#3"Z-!,`$`!@N3!hKiH!#3"[X!,`%)!@N3!hKiH!!!!!'5rri!#R*PCfaKCf8
+ZD!"KCf8ZD!!!,3!r!#i!"J!Z!$i"GYd!F()!!!"`&!!%"!#3#h!8F!(R!!!!!3!
+!%X!c!!!6Ff&eGQ9IFQ9RE'&RC3#3$!J!!",!%J-!&'jeE9pbC@GXB@GP!*!1!3!
+!%X!!N!4ZEfeIFQ9RE'&RC3#3$J%!!",!!*!%EQpYAh*PCfaKCf8!N!i"!!!5`!#
+3"'j[E9pbC@GXB@GP!*!1!3!!%X!!N!4ZEfeIFQ9RE'&RC3#3$J%!!",!!*!%EQp
+YAh*PCfaKCf8!N!i"!!!5`!#3"'j[E9pbC@GXB@GP!*!1!3!!%X!!N!4ZEfeIFQ9
+RE'&RC3#3$J%!!",!!*!%EQpYAh*PCfaKCf8!N!iD!!3![!!8!0!!!3%!!!%!!",
+3!#%!!!0iH(J!!!!D!"3![!!N!0!!!3%!!!%!!",3!$%!!!0iH(J!!!!D!!3!r!!
+8!4!!!3%!!!%!!",3!%%!!!0iH(J!!!!D!"3!r!!N!4!!!3%!!!%!!",3!&%!!!0
+iH(J!!!!D!!3"2!!8!9!!!3%!!!%!!",3!'%!!!0iH(J!!!!D!"3"2!!L!9!!!3%
+!!!%!!",3!(%!!!0iH(J!!!!D!!3"J!!8!C3!!3%!!!%!!",3!)%!!!0iH(J!!!!
+D!"3"J!!N!C3!!3%!!!%!!",3!*%!!!0iH(J!!!!D!!3"a!!8!GJ!!3%!!!%!!",
+3!+%!!!0iH(J!!!!D!"3"a!!N!GJ!!3%!!!%!!",3!,%!!!0iH(J!!!!A!&!!k!"
+J!3J!!3%!!"N!!4#3!!!!!)3!N!3A!&!"F!"J!C!!!!%"!!!C!!%3N!!!!!#%!!!
+!!cS!+`#3"3%!i!!N!65)&fePFh9bCA-JF'&b$6%[-L"`MR*TEf4P!*!'!3%i!"`
+"@!F#*a8!N!8$!)X!%!#p%!BJ)#!f,M)!N!8%!-!!%J$BL!+eF`#3"5!!L!!`!H5
+)0fCbCA%k)$%f-5ic)'Y)HL!J,5dJ)#!f,MFb)'Y)HL`JN!4YEf4eE'&dD@pZ1L!
+J1$JZ0#")HJ#3"Y3!)!$N!*1)%QC[GA*TCA)k)#!JF'pTER4c23#3"GF!N`$P!,d
+3!M%`!*!&e!$-!13"!)J%-6!b-!#3"6`"2!"+!B3(!LFQ!*!&!3!d!"!!J!F#*a%
+!N!8`!-3!3!%`L!jL06dY-M!j,MJb-L#e9J#3"6!"2!!q!A!(!LF6!*!&!3&F!#-
+"L)J,G'9YF(-0E@pbG$S!N!B`!B`!2J()"`)R&J#3"3%"L!!F!D!(!LFB!*!&!3!
+%!"!!,!F#*e!!N!8m!B`!5J(3"`)R'3#3"9!"P!"H!GJ(!LG4!*!&8!"8!'!!D!F
+#*e)!N!9J!&3!F!"S"`)R%!#3"9!!P!"J!+J(!LF5!*!&B!#8!(!!U!F#*a3!N!9
+3!03!B!$S"`)R&`#3"@!!e!"Z!1J(!LFR!*!&8!%B!'!",!F#*bJ!N!9J!4J!F!%
+X"`)R+3#3"9!"A!"J!A!(!LFU!*!&B!&F!(!"F!F#*bX!N!83!!3!)!"m"`)R,!#
+3"6!!L!"!!-3(!LFY!*!&9!!%!'3!5`F#*c-!N!9N!!3!G!"-"`)R0!#3"5!!"!!
+`!(`(!LFe!*!&-!!%!%!!I!F#*cB!N!93!'J!B!#)"`)R0`#3"@!!D!"`!)J(!LF
+j!*!&8!#S!'!!b!F#*cS!N!9J!+J!F!$)"`)R1`#3"9!!k!"J!3J(!LFm!*!&B!$
+S!(!"#!F#*cd!N!93!5`!B!&-"`)R2J#3"@!",!"`!8`(!LFr!*!&8!&`!'!"N!!
+(!LGV!*!&B!&`!(!"N!!(!LGX!!!!&`"J!A!!F!'3!!!"!3!!'3!"%*!!!!!!K!#
+3"%N!K!#3#2q3"!eMEfjQD@GeFQ&dD@pZ"A0KGACP!*!%$@0SBA*RC9pNDA0aG@8
+!N!3,BfKKFQGPAf9NDA3!N!Lp!)3!N!MrN!3)ER9YAf*[E'm")!#3"!%a!*!%!6)
+!N!3"-`#3"!%d!*!%!68!N!3"0J#3"!%h!*!%!6J!N!3"13#3"!)a-!#3"!)a-3#
+3"!)a-J#3"!)a-`#3"!)a0!#3"!)a03#3"!)a0J#3"!)a0`#3"!)a1!#3"!)a13#
+3"!)b-!#3"!)b-3#3"!)b-J#3"!)b-`#3"!)b0!#3"`*Q"(i!,3)F!J)!h`!!!!J
+HBf&NC@jMC5"N*f9YDA0cD@pZ)#KZBL"LE'pMDh-T)("[!!!!"`#3"a!"-'80!!!
+!%!-Y-64eGJ!!!"!$,6-aB@`!!!!3!bdf-f&Z!!!!%!-Y1$0ME`!!!"!%,6%`-b"
+ME`!!!"!%,6%b-Q9M)!!!!"!$-6)hFb!!!!!3!6&NC3!!!"!#16GbFb!!!!!3!M%
+`EfGe!!!!%!3Y-6)iCQCb!!!!%!-Y160MD!!!!"!$,6JhFQ8!!!!3!6"PFJ!!!"!
+"-#"M!!!!%!%`)'-!!!!3!6"c)!!!!"!"-(4b!!!!%!%`Bfm!!!!)!fG`Ff%J!!!
+!#!YeEQ8JF'9bD@pNC5"P!!!!#!GcH@jMD(*[Bb!!!!!)#("[D@jdB@GPBA*K!!!
+!#!TLEfa[E@9dFQ9cCR*P!!!!#!PRHA*[Ff0[F'8T$3!!!!J0Ff9ZFb"cG'9XE'&
+TFQPa!!!!#!4bD@9ZC5"b!!!!#!YLEfa[)'0[EA"bD5!R!!!!#!PRHA*[)'0[EA"
+aG3!!!!J)Fh0d)'0[EA"XC5!!!!!)$'0KG'&XEb"QE'&cD#"ME`!!!!F!N!F(!*!
+("`#3"`F!N!F(!*!("`#3"`F!N!F)"A"KFQ&YE'8!!!!)"fT[GA*ZB@ac)!!!!!J
+(FQ9RE'&RC@0[!!!!#!KND@aeG'P[EL"NC3!!!!J$Ch"cFb`!!!!)#h9ZC5"`CA*
+TEf4PG'8!!!!)"h0jEQ0SFQpdB3!!!!J)F'pTER4KCf8JCA-!!!"!!!!'&[rr!#a
+KBh&eD5jS!!"S!0!!I2(!!*!&"6q3!!"lXYJ!k3!!C3!!&3'Y!!!%"!!S!!-!S!(
+P!*!&"6q3!!!!!(c`d!!!mF!!!#d!N!3J!(chd!#3"dJ!N!8X!#`!""!3!!!!#Qj
+LAfePF`!!!2!m!!!-`!!!!`"r!!!!Ip[`!*!(3("PFQP[C'8!2!!!$-!!!!-!Ip+
+!!!$F-"!3!*!%EQ*YC5d!N!6`2!!!$-!!!!-!I`!!!(m!!0``%"!!N!4ZBQePCR*
+PF3!!2!!!$-!!!!-!I`!!!(m!!(0KE8)"X3#3"Ld!!#!"XBd!!!MrN!3!!#Z%rrm
+!!)G`!E'+N!!!N!CZBPp`G(-!N!8",3#3"!%"X3#3"(3-!!!5`(k!!!"`G&pMEh9
+bB@jd!"`!!(3-!!"#I!#3"3%!N!3a!J!*+J!!-!'9+p!"N65S!C%aa!!!,c3!N!8
+#!!!5`!-#!!adB@0SC9pTER4PFJ!!!%*m!!!!I`!!*6`!N!B"&!"3GQ&XCA9b!&-
+05!!%!&3!'!"dr`#3"J%!N!3a!J!*+J!!8+P8!&%NK!"6$8J!Q!"-!+S!!2m!N!K
+4)6!Y!'e`Afe[FR3!!!!%BfjdE'9c!*!'!3#3"$%#!!TQE'&R-3#3"$`!8+P8!*!
+*"J"N!!!3%!!!!!PdC@e`Afe[FR3!N!ST!!!!!3!"!!!5`!NJ!!TbCA0PG!#3&!%
+!!",!-3)!#QCXB@Fb!*!5!3!"!!!5`*%#!!TdBepbC@4eDA4P!*!0!3!"!!!5d!!
+K!*!C!3!"!!!5d!!a!*!C!3!"!!!5d!""!*!C!3!"!!!5d!"4!*!C!3!"!!!5d!"
+K!*!C!3!"!!!5d!"a!*!C!3!"!!!5d!#"!*!C!3!"!!!5d!#4!*!C!3!"!!!5d!#
+K!*!C!3!"!!!5d!#a!*!C!3!%!!%3N!!!N!4dFQ&ZFfeTFh0TEfi!N!X"!"N!!"#
+3!!!!!)4LEfa[!*!9!3!!%X!K3!!+E@pZG(*P!*!6!3!!%X!cN!!!#R0KGACP!*!
+5!3!%!!%3N!!!N!4fB@jZC3#3%J%!"!!"%*!!!*!%BfKKG@B!N")"!"N!!4#3!!!
+!!)4LEfa[Af0[G@aPGA)!N!Mrr`!"!"N!!4#3!!!!!)4LEfa[Af0[G@aPGA)!N!X
+"!"N!!4#3!!!!!)4LEfa[Af0[G@aPGA)!N!X"!"N!!4#3!!!!!)4LEfa[Af0[G@a
+PGA)!N!X"!"N!!4#3!!!!!)4LEfa[Af0[G@aPGA)!N!X"!"N!!4#3!!!!!)4LEfa
+[Af0[G@aPGA)!N!X"!"N!!4#3!!!!!)4LEfa[Af0[G@aPGA)!N!X"!"N!!4#3!!!
+!!)4LEfa[Af0[G@aPGA)!N!X"!"N!!4#3!!!!!)4LEfa[Af0[G@aPGA)!N!X"!"N
+!!4#3!!!!!)4LEfa[Af0[G@aPGA)!N!dA!!3!d!!8!2!!!3%!!"N!!4#3!!!!!)3
+!N!3A!"3!d!!N!2!!!3%!!"N!!4#3!!!!!)3!N!3A!!3"%!!8!6!!!3%!!"N!!4#
+3!!!!!)3!N!3A!"3"%!!N!6!!!3%!!"N!!4#3!!!!!)3!N!3A!!3"8!!8!A!!!3%
+!!"N!!4#3!!!!!)3!N!3A!"3"8!!N!A!!!3%!!"N!!4#3!!!!!)3!N!3A!!3"P!!
+8!E3!!3%!!"N!!4#3!!!!!)3!N!3A!"3"P!!N!E3!!3%!!"N!!4#3!!!!!)3!N!3
+A!!3"f!!8!IJ!!3%!!"N!!4#3!!!!!)3!N!3A!"3"f!!N!IJ!!3%!!"N!!4#3!!!
+!!)3!!!!#+J!J!*!&!3!)!"-!-!3$FQ&k!*!'*!!%!-S"p3#3"`%$U!!6!p`%"Q9
+QCQ&MC3#3"3%!G!!4!*5)!fe[H3#3"J-!P`!4!,%3!c8`-!#3"J3#r!!5!db)$'0
+[FR*PE'&dD@pZ1J#3"3-$8`!4!k-3!c!Z-`#3"J%!0!!2!(3(!LFN!*!&&!!"!#)
+!-)J'BQ&ZC'8k!*!&%`!b!#%!9"!"-!#3"K-!DJ!K!)`3!6%!N!B8!&X!)J"RL!%
+Y!*!'&!#A!#)!ViJ#5(S!N!8%!,`!&!$3"`)R3!#3"43![!!N!0!(!LG"!*!&"!$
+m!"3"%!F#*di!N!88!2`!*!%3"`)R6`#3"33"2!!8!9!(!LG6!*!&&!%m!#)"8!F
+#*e3!N!8%!B!!&!'8"`)R93#3"43"J!!N!C3(!LGA!*!&"!(%!"3"f!F#*eS!N!8
+8!F3!*!(B"`)R@`#3"33!d!!8!2!(!LGF!*!&&!$3!#3!m!F#*ed!N!8%!4!!&!%
+`"`)RAJ#3"43"%!!N!6!(!LGI!*!&"!&3!"3"F!F#*f3!N!88!9!!*!&`"`)RC3#
+3"33"P!!8!E3(!LGQ!*!&&!'8!#3"Y!F#*fF!N!8%!GJ!&!(i"`)RD!#3"43"f!!
+N!IJ(!LGT!!!%S2rq!#&dFQ&MC9pdEh9d,QJ!J*5J!*!&!d3`!(kD@!"A!!"d!!!
+$!&J!!!3%!*!*Y!"C!!)!@3#""r!!N!G!+J!*3!#3"`3!!-c-!)%&S!#3$Ld!!(Z
+(F!#3"b!!HiR`!!J!!04V@(%+l3!!)6i!!#S!N!3J!$&lJ!$"!!-"hJ*i!#S!!!#
+4!)%!F3!!,Q!!!#d!N!3`!FJc)!!"!4!!%`'8!!%!!!#4!)%!F3!!,Q!!!'e[H@9
+ZEQ8!-b!!!3%3!"-"P!!"!*!&!3!!%X!!N!3Y!*!B!3!!%X!!N!4MEh*PE!#3&!%
+!!",!%3)!$(*PG'peFJ#3%C%!J3"a!!!ZB!!!,3#3"$!"b$-J!!%"%!!6!C3!!3!
+!!*%!J3"a!!!ZB!!!CQeTEQN!F`!c)!!"!4!!%`'8!!%!N!8"!!!5`!#3"'CYBAK
+T!*!5N3#"!(%!!#jJ!!!Y!*!%-!()-b!!!3%3!"-"P!!"!!!!N3#"!(%!!#jJ!!!
+Y!*!%-!()-b!!!3%3!"-"P!!"!!!!!3!"!!!5d!!K!*!C!3!"!!!5d!!a!*!C!3!
+"!!!5d!""!*!C!3!"!!!5d!"4!*!C!3!"!!!5d!"K!*!C!3!"!!!5d!"a!*!C!3!
+"!!!5d!#"!*!C!3!"!!!5d!#4!*!C!3!"!!!5d!#K!*!C!3!"!!!5d!#a!*!C!3!
+C!!%3N!!!!!#%BQpXEepMEh9XCA9b!*!,!3!C!!%3N!!!!!#%BQpXEepMEh9XCA9
+b!*!,!3!C!!%3N!!!!!#%BQpXEepMEh9XCA9b!*!,!3!C!!%3N!!!!!#%BQpXEep
+MEh9XCA9b!*!,!3!C!!%3N!!!!!#%BQpXEepMEh9XCA9b!*!,!3!C!!%3N!!!!!#
+%BQpXEepMEh9XCA9b!*!,!3!C!!%3N!!!!!#%BQpXEepMEh9XCA9b!*!,!3!C!!%
+3N!!!!!#%BQpXEepMEh9XCA9b!*!,!3!C!!%3N!!!!!#%BQpXEepMEh9XCA9b!*!
+,!3!C!!%3N!!!!!#%BQpXEepMEh9XCA9b!*!0eJ2T!J!#pJ"E!,i!!!!)!9CTFJ!
+!!!J"55"M!!!!#!&8C5!!!!!)!8aNC3!!!!F!!!"J!!!!"`#3"`F!N!F(!*!,"`#
+3"`J#F'KZCf8!!!!(!*!("`!!!!)!!!!)!@GbE`!!!!JG)#!a,M%a-8Zp)$)c0#i
+c-cCZ35!J)$!Z-MB`E9Cc)!!!!!F!N!F)!P)p)'0S!!!!%!%`L#!!!!!(!!!!!3!
+!!!F!N!F)!ACPFJ!!!!F!!!!"!!!"!!!!i`S!!1)+!!!ZbJ&2`CJQ-J!!!"`8aJ!
+-3dj86!%N!'TNBh4L!"J1*N4*9%`!'!p54%P8@!!B%(j%6%p(!"J4UNe&6P8!!a,
+@F(*)C!!!%`CRFQ&`!!%6%PG*6N3!!K-U4%a2*!!C%djhBh4L!!!8KPG*6L3!!"5
+5F'adG!!!&*iR'`!4!*!%!@jm$#FF!#)!!!!I!@jlr#FG!$-!!!!q!@jll#FH!%3
+!!!"G!@jlh#FD!&8!!!"m!@jr(#FZ!'F!!!#F!*!%*bm!H!!!!,i!N!3R-!#*!!!
+!h`#3"#G%!*S!!!$q!@f0C#G&!+X!!!%G!@f08#G#!,`!!!%m!@f03#G$!-d!!!&
+E!@f0-#G'!0i!!!&k!@f0)#G(!1m!!!'C!@f0%#G)!3!!!#-c!@f0!#G*!4%!!!'
+i!@f-m#G-!5)!!!(T!*!%*dd"-`!!!J3!N!3R-3&%!!!#(`#3"#Fb!98!!!)p!*!
+%*f)"CJ!!!Pi!N!3RB!&h!!!`-`#3"#FM!F-!!!5a!@jr##FP!G8!!!63!@jqq#F
+K!HF!!!6[!@jqi#Jp!J)!!!9H!*!%+$i#%`!!"Am!N!3S2`)N!!#4A!#3"#Jm!NX
+!!!Gb!*!%+@J#CJ!!"jF!N!3UP!+,!!!*f`#3"#U9!T`!!!Qp!*!%+TB#V3!!#J#
+3"5UA!Vi!!!SU!*!%+TJ#c`!!,pd!N!3UQ3,J!!!+9!#3"#F3![%!!%bq!@f,C#c
+X!`i!!!X!!@jl[#UD!c8!!!Y-!*!%,KJ$63!!#ld!N!3Z'30H!!!,f!#3"#iD!h!
+!!![f!*!%,KX$JJ!!$"%!N!3R@!18!!!1E!&YMe!R@31P!!!1LJ&YMd!R&31h!!!
+1X!&YL'3Va32)!!"j13#3"#['!pS!!(PE!*!%+p8$l!!!$Xm!N!3VeJ2q!!!1kJ#
+3"#[A""!!!!pq!*!%+pJ%)J!!$`S!N!3Vf33d!!!2*3#3"#[D"%B!!!qe!*!%+pX
+%@!!!$d8!N!3R)!4U!!!2B!&ZIXJS3!4m!!!2l!#3"#K"")i!!"!,!*!%,d3%Z!!
+!&#!!N!3[436*!!!81`#3"#p'"0S!!"4@!*!%,dF%k`!!&(%!N!3[5!6m!!!8M!#
+3"#p*"3i!!"5R!*!%,dS&)!!!&-)!N!3[5`8b!!!8h3#3"#p-"83!!"6i!*!%*cJ
+&9J!!&lN!N!3R9J9R!!!AfJ&YNR`aR!9r!!!DlJ#3"$'G"C!!!!!E(`#3"$'H"D%
+!!"Xr!*!%*fS&XJ!!'f%!N!3R*!A$!!!EK!#3"#F4"MF!!"j3!@f),#FB"NN!!"j
+d!@f,Y#FC"PX!!*0K!@f,P#UE"Qd!!"k6!*!%+T`'I`!!(V-!N!3UR3D4!!!Hd`#
+3"#FL"U-!!"lc!@jqZ#UH"Xd!!#+K!*!%+Tm'h`!!)XN!N!3US!Ea!!!Lj`#3"#G
+K"a!!!#0p!*!%-XJ(+!!!)r)!N!3bb3G(!!!V4J#3"#UK"f3!!$!*!*!%*f-(GJ!
+!-'%!N!3cp!H1!!!d(3&K#c`cp3HI!!!cXJ&K#b`cpJH`!!!ce3&K#`Jcp`I"!!!
+d!!&K$33e)!IR!!!eUJ&K#p`e)3Ii!!!ea3&K#-!e)JJ*!!!ej!&K#1!e)`JD!!!
+f!`&K$(!e*!JV!!!f)J&K$'!e*3Jm!!!f33&K$&!e*JK0!!!fB!&K$%!e*`KQ!!!
+fX`&K$#`R5JL!!!!fj!&YN!!S*dX)NJ!!0`N"EC!!'$C-#-!!!$f0!*!%0hJ)d3!
+!2d%!N!3Xl3N-!!"!E`&ZHb`XlJNH!!"!M3&ZHa`Xl`N`!!"!U`&ZH``Xm!P#!!"
+!b3&ZH[`Xm3P8!!"!j`&ZHZ`XmJPQ!!"""3&ZHY`Xm`Pi!!"")`&ZHX`USJRR!!"
+%L3#3"#UM#IN!!%5R!*!%+U3+#`!!4-8!N!3UT3SG!!"%i`#3"#UQ#Lm!!%8"!*!
+%+UF+33!!44m!N!3UU!T6!!"&23#3"#UT#Q8!!%9E!*!%+US+G`!!4AN!N!3UU`U
+*!!"&P`#3"#UX#TX!!%@e!*!%+Ud+V3!!4G-!N!3UVJUr!!"&m3#3"#U[#Y%!!%B
+2!*!%+V!+i`!!4Ld!N!3UX3Ve!!"'5`#3"#Ub#`F!!%CT!*!%+V-,'3!!4SF!N!3
+UY!XV!!"'T3#3"#Ue#cd!!%E$!*!%*bB,6`!!6&%"EBJm*a-,B!!!6(J"EBJB*aB
+,FJ!!6*X"EBJ%*a)-G`!!KNX"EBY8*a3-d3!!@H3"EBY%*am-i`!!@J)"ERkN+pi
+-q`!!HAd!N!3`G!d6!!"X-3#3"$"e$58!!'b`!*!%-(B00`!!E5m!N!3`G`e*!!"
+YVJ#3"$"i$9X!!'iY!*!%-(N0E3!!EU`!N!3`HJer!!"[+`#3"$"l$C%!!'qU!*!
+%-(`0S`!!F#N!N!3`I3fe!!"`dJ#3"$"q$FF!!(&l!*!%-(m0f3!!FL3!N!3`J!h
+V!!"bc3#3"$#"$Id!!(0i!*!%-))1$`!!G#-!N!3`J`iK!!"dcJ#3"$#%$M-!!(9
+j!*!%-)8143!!GL3!N!3`KJjA!!"fc`#3"$#($QN!!(Gk!*!%-)J1H`!!DId!N!3
+`L3k0!!"U-J#3"$#+$Tm!!'TR!*!%-)X1X3!!DT`!N!3`F!l$!!"TK3#3"$"a$Y8
+!!'QM!*!%-()1j`!!DF%!N!3`F`lj!!"Th`#3"#[!$aB!!(S&!*!%+m%2+!!!HR8
+!N!3V`Jmk!!"kj3#3"#[$$d`!!(Y9!*!%+mF2AJ!!Hm8!N!3Vb!p`!!"m03#3"#[
+*$i)!!)Q!!*!%+mS2P!!!LE`!N!3Vb`qQ!!#*q!#3"#[-$lJ!!)Sd!*!%+md2bJ!
+!LR!!N!3VcJrF!!"ir3#3"#[%$qi!!(QI!*!%+p`3!!!!HF%!N!3Vh4!5!!"ji`#
+3"#[2%#3!!(bP!*!%+p!30J!!I4-!N!3Vd4")!!"pJ3#3"#[5%&S!!(h[!*!%+p-
+3E!!!IPd!N!3Ve""q!!"qb`#3"$LN%+X!!)CT!*!%1+83[!!!KT%!N!3iTK$0!!#
+'Z!#3"$LR%0i!!)EH!*!%1+J3l`!!K`3!N!3iU4%!!!#(+3#3"$LU%4%!!)G(!*!
+%1+X4)J!!Kf8!N!3iV"%c!!#)f3#3"$LY%88!!)H$!*!%1+i49`!!N68!N!3iVa&
+T!!#(Y`#3"$L`%AX!!)I9!*!%1,%4M3!!Kr-!N!3iXK'I!!#)%3#3"$Lc%E%!!)K
+#!*!%1,34``!!L3X!N!3iY4(9!!#)B!#3"$Lf%HF!!)Lk!*!%1,F4q3!!L(i!N!3
+iZ"),!!#)R!#3"$Lj%Kd!!)P0!*!%1,S5,`!!L5`!N!3iZa*"!!#8LJ#3"$Lm%US
+!!)[d!*!%1,d5[!!!M")!N!3i[K,1!!#--!#3"$Lr%Z!!!)a1!*!%1-!5mJ!!M'`
+!N!3i`4-%!!#-LJ#3"$M#%aB!!)bS!*!%1--6+!!!M-B!N!3ia"-k!!#-l`#3"$M
+&%d`!!)iT!*!%1-B6AJ!!MNF!N!3kr"0`!!#2+3#3"$M(%mm!!)qk!*!%1-J6i3!
+!MqX!N!3ib42c!!#3!!N!N!3ibK3&!!#3!#F!N!3iba3A!!#3!%8!N!3ic"3T!!#
+3!'-!N!3ic43l!!#3!)%!N!3icK40!!#3!*m!N!3ica4I!!#3!,d!N!3id"4a!!#
+3!0X!N!3id45$!!#3!2N!N!3idK59!!#4&`#3"#FA&-)!!*'(!@f,0#FR&03!!*'
+P!@f,*#FS&1B!!*($!@f,&#FT&2J!!*(K!@f,"#FU&3S!!*(r!@f+p#FV&4`!!*)
+G!@f+j#FX&5i!!*2)!@f+e#FY&8!!!*3#!@f+a#Fc&9)!!*3K!@f-a#Fd&@3!!*4
+)!@f-X#Fe&AB!!*-%!@f-S#Ff&BJ!!*)l!@f-N!!R0a@D!!#5BJ&YM)!R14@X!!#
+5I3&YM(!R1K@q!!#5Q!&YM'!R1aA3!!#5X`&YM&!R2"AL!!$-,`&YM%!R24Ad!!#
+8E`&YM$!R2KB'!!#5cJ&YM#!R2aBB!!#5k3&YM"!R8"B[!!#633&YLk3R84C"!!#
+6K3&YLi3R8KC6!!#6UJ&YLh3ie"C[!!#8[J#3"$M6&`F!!,+4!*!%108A'3!!XV-
+!N!3ieKFV!!#be3#3"$MA&cd!!,,h!*!%10JA6`!!XaN!N!3if4GK!!#c1`#3"$M
+D&h-!!,0G!*!%10XAK3!!Xhm!N!3aRaHb!!$!Q3#3"$`S&q)!!-LC!*!%2#XAm`!
+!b'8!N!3R3"JF!!$,!`#3"#G"'#i!!-XK!*!%*diB3!!!bcm!N!3R6aK5!!$,A3#
+3"#G6''3!!-Yl!*!%*e3BGJ!!bjN!N!3R94L)!!$,Y`#3"#GA'*S!!-[9!*!%*eS
+BV!!!br-!N!3R@aLq!!$-%3#3"#GV'0!!!-a+!@f-!#GX'1)!!-qM!@f,m#GF'4F
+!!0P3!*!%*edC+3!!f@X!N!3RAKNl!!$CKJ#3"#GI'8d!!0QK!*!%*f3CA`!!fE`
+!N!3RC4Pa!!$Ce`#3"#GQ'B-!!0Rb!*!%*fFCP3!!fJd!N!3RD"QR!!$D+!#3"#G
+T'EN!!0T$!*!%!qJ"L3!!!S%"EBMX!qN"P!!!!V8"ERbN!qS"QJ!!!ZN!N!3$l3'
+J!!!$(3&YMG`$l`'Q!!!$83&YMr3$m!'X!!!$K3#3"!2a!E)!!!1j!*!%"!B"q3!
+!"5S!N!3%*!*&!!!(2J#3"!4#!`-!!!Tm!*!%"(i$#!!!#X`"EC(i"*`$4`!!#iN
+!N!3%ZJ5b!!!6l!#3"!6f"AN!!"Uk!*!%"43()J!!)li!N!3&-JH)!!!cIJ&K#3!
+&8!KH!!!fI`&K$03&EJLd!!!p#3#3"!@-#,S!!$eC!*!%"DS*LJ!!39d!N!3%B!c
+e!!"He`#3"!6B$3d!!''T!*!%"FJ6Y`!!3Dd!N!3&jK1p!!#2KJ#3"!B%&p`!!-J
+a!*!%!qJCe`!!c'8"EBMd!qNA!J!!@L%"ERbS!qSCq3!!fPi!N!3$l3LX!!!h-3&
+YLp`$l`E&!!!Jh3&YN!!%!r!,PJ!!-))!N!3$m3AX!!!ET3#3"!3'&,N!!"!X!*!
+%"#3#J3!!"l8!N!3%3KCU!!"I#`#3"!4q$+d!!%mf!@f5#!5F"+`!!"+F!*!%",S
+,Y`!!(a%!N!3%pKI8!!$!Z`#3"!88#3B!!#YS!*!%"6)(i!!!0%`"B3PJ"9!5P!!
+!1HX"B3cJ"@i3SJ!!2DX!N!3&M!MZ!!!rA`#3"!@U&kN!!,1I!*!%"FJ*[!!!3H%
+!N!3%B"*Y!!"r13#3"!6B&Y%!!'(G!*!%"HB6T3!!Me!!N!3'""J8!!$)Y`#3"!2
+S'3X!!0-f!@f,i!2T&[J!!&Z0!@jqP!2U'H-!!0b-!*!%!qd)H!!!1"%"EC!!#!2
+["V8!!"Ii!@f59!2`#i3!!$&Q!*!%!r%&e!!!('8!N!3%"K5R!!!3j!#3"!3N!P`
+!!!K2!*!%"%)@+J!!4Z%!N!3%IJb*!!"5rJ&ZI+`%R!5J!!!-,!#3"!5k#jm!!"8
+6!*!%"2BAa!!!`EF!N!3&&!Md!!!XD!#3"!8b"p)!!$5L!@%-l!93%S)!!$V2!@f
+)r!9Z%*!!!!!q-`#3"!@-#1)!!$qP!*!%"DSAP`!!YpF!N!3&b!Q3!!!!3T-!N!3
+%B"*6!!#"K3#3"!6B&VX!!'4C!*!%"HB6J3!!MS%!N!3'""J%!!$*E3#3"!2S'FX
+!!!2Y!@f)q!2T&[d!!!3*!@jmS!2U'Hi!!!3P!*!%!qd)T!!!"%%"EB[3!qm'[3!
+!"&d"EBrm!r!,M3!!"(N!N!3$m3AJ!!!%P3#3"!3'&,!!!!81!*!%"#3#G`!!"b)
+!N!3%3KCP!!!*S3#3"!4q$*X!!!U`!@f5!!5F"+B!!!YY!*!%",S,U`!!%p!!N!3
+%pKI-!!!DRJ#3"!88#3!!!#1L!*!%"6)(f3!!-f)"B3PN"9!5L`!!0Bi"B3cN"@i
+3Q3!!21d!N!3&M!MS!!!p23#3"!@U&k!!!%&"!*!%"FJ*TJ!!3C%!N!3%B"*J!!"
+HZ`#3"!6B&XB!!''0!*!%"HB6N`!!MQ8!N!3'""J-!!$)&3#3"B%!N!3[E!#3"B-
+!#3!!M4N!N!@%"K!!!0!,!@f-`!#!'23!!-qq!*!%!qJ#03!!"Ci!N!8"!MS!!!B
+D!@%*&!2S"eN!!#jN!*!%!qJ$(`!!#bX!N!3$r!Ai!!!H,`&YNNJ%%!F$!!!M%J&
+ZIS`%*!R5!!"%"`#3"!2S#m-!!%cF!@%)l!3'#mS!!+hh!*!%"%),e`!!aBF!N!3
+%B![N!!$%V3#3"!4q#r%!!+dI!*!%"*`,rJ!!VXm!N!3%ZJ`,!!"0%J#3"!8b$"%
+!!%hJ!*!%"9!-&J!!UTF!N!3&EJ`M!!#VE`#3"!@-$$!!!+Qr!*!%"DS-23!!H#8
+!N!3&b!a+!!$$e3#3"!AQ$&N!!+a(!*!%"J3-D!!!X0m!N!3%pJbr!!$3c!#3"!C
+!$`X!!'V4!*!%"0J5HJ!!VkF!N!3'AK+G!!#+V!#3"!88&S%!!*6F!*!%"R`@N!!
+!!*@d!*!%"c!@R`!!aQ%!N!3(LKDY!!$K-!#3"!HS&Y`!!-Fl!*!%"mB@k3!!XEN
+!N!3$r!B%!!!Gq`&YNL`$k!BR!!#@M!#3"!2S"cN!!#35!*!%#'0SEfPiAd46"f4
+TB@*[E'm3C'a[Cema-$!aAfPdC@eI04"NE'pRAc%`-$&IDA4PE9mf%'4XEfGI-6!
+`-9pTG'9YAcF3C'a[Cema-$!aAfPdC@eI1"&NE'pRAc%`-$&IDA4PE9ma-""NE'p
+RAc%`-$0IDA4PE9mb%'4XEfGI-6!`-epTG'9YAc-3C'a[Cema-$!cAfPdC@eI0""
+NE'pRAc%`-$9IDA4PE9ma%'4XEfGI-6!`09pTG'9YAc)3C'a[Cema-$!eAfPdC@e
+I-a"NE'pRAc%`-$9IDA4PE9md%'4XEfGI-6!`09pTG'9YAc83C'a[Cema-$!eAfP
+dC@eI0K"NE'pRAc%`-$9IDA4PE9mh%'4XEfGI-6!`09pTG'9YAcJ3C'a[Cema-$!
+fAfPdC@eI-K"NE'pRAc%`-$CIDA4PE9mc%'4XEfGI-6!`-epTG'9YAcB3C'a[Cem
+a-$!cAfPdC@eI0a"NE'pRAc%`-$KIDA4PE9mi%@4XEfGI-6!`1&pTG'9YAc%a#R*
+[Ff9IBfp`D@8&Bfp`D@8&Bfp`D@8&Bfp`D@8&Bfp`D@8&Bfp`D@83G(*KBf9IG'p
+eG&pMEh"TC4&NE'pRAc%`-$&IDA4PE9ma-K&NE'pRAc%`-$&IDA4PE9ma-a&NE'p
+RAc%`-$&IDA4PE9ma0JKMEh9bBQ9@54"NE'pRAc%`-c"IDA4PE9md%'4XEfGI-6!
+c-&pTG'9YAc83C'a[Cema-$-`AfPdC@eI0J4`FNKN#QeKEQP`1#e`F'-&Bfp`D@8
+3C'a[Cema-$-`AfPdC@eI13P[EQ4PE'9dG'83C'a[Cema-$B`AfPdC@eI1!P[EQ4
+PE'9dG'8*EfjNC@aPG(4P%'4XEfGI-6!j-&pTG'9YAc)3C'a[Cema-$N`AfPdC@e
+I-a"NE'pRAc%`16"IDA4PE9md%'4XEfGI-6!j-&pTG'9YAc83C'a[Cema-$N`AfP
+dC@eI0a"NE'pRAc%`16"IDA4PE9mi%@4XEfGI-6!`-&pTG'9YAc)`"'&eG'm&Bfp
+`D@83C'a[Cema-68`AfPdC@eI-K9QC@jPG(*PAf0[EQCTCh9bBA4TEfi4C'a[Cem
+a-$N`AfPdC@eI-6%&Bfp`D@83C'a[Cema-6J`AfPdC@eI0"&NE'pRAc%a1$"IDA4
+PE9ma-"&NE'pRAc%a1$"IDA4PE9ma-K&NE'pRAc%a1$"IDA4PE9ma-a"NE'pRAc%
+`-$GIDA4PE9mj%@4XEfGI-6!`0epTG'9YAc%`%'4XEfGI-6!`-&pTG'9YAc)4C'a
+[Cema-6)`AfPdC@eI-6!4C'a[Cema-6)`AfPdC@eI-6%4C'a[Cema-6)`AfPdC@e
+I0$%4C'a[Cema-6)`AfPdC@eI0$84C'a[Cema-6)`AfPdC@eI0$B4C'a[Cema-6)
+`AfPdC@eI0$F4C'a[Cema-6)`AfPdC@eI06%4C'a[Cema-6)`AfPdC@eI06)4C'a
+[Cema-6)`AfPdC@eI06-4C'a[Cema-$!aAfPdC@eI-6N4C'a[Cema-$-`AfPdC@e
+I-6!4C'a[Cema-$-`AfPdC@eI-6%&FQ9RG@`&FQ9RG@`&FQ9RG@`&Bfp`D@83C'a
+[Cema-M%`AfPdC@eI-K"NE'pRAc%b-6"IDA4PE9md%'4XEfGI-6)a-&pTG'9YAcB
+3C'a[Cema-M%`AfPdC@eI1"&NE'pRAc%b-6"IDA4PE9ma-"&NE'pRAc%b-6"IDA4
+PE9ma-K&NE'pRAc%b-6"IDA4PE9ma0"&NE'pRAc%b-6"IDA4PE9ma0K&NE'pRAc%
+b-6"IDA4PE9ma1""NE'pRAc%`-$4IDA4PE9mc%@4XEfGI-6!`0epTG'9YAc%b"@0
+[F'PP%'4XEfGI-6)h-&pTG'9YAc)3C'a[Cema-MF`AfPdC@eI-a"NE'pRAc%b0c"
+IDA4PE9md%'4XEfGI-6!`19pTG'9YAcF3C'a[Cema-$!bAfPdC@eI1!YdFQ&MC9m
+aAh"PFJYdFQ&MC9maAh"PFJYdFQ&MC9maAh"PFJYXDA0dC9pLEfa[F`YXDA0dC9p
+LEfa[FaCcG@*IE@9ZG5"MEfjQD@GeFQ&dD@pZ$faTFh4PAf4PFepLEfa[Fa&NE'p
+RAc%`-$"IDA4PE9ma-"&NE'pRAc%`-$"IDA4PE9ma04&NE'pRAc%`-$"IDA4PE9m
+a0a&NE'pRAc%`16"IDA4PE9ma-a&NE'pRAc%`16"IDA4PE9ma0"&NE'pRAc%`16"
+IDA4PE9ma04&NE'pRAc%`-$&IDA4PE9mb-!GQD@0SD@9b"fCTBfKTCA)(CQPMD'P
+PFK&NE'pRAc%`16"IDA4PE9ma0K&NE'pRAc%`16"IDA4PE9ma0a&NE'pRAc%`16"
+IDA4PE9ma1!aYCA0eFQ9cAf*[E'm4C'a[Cema-$!iAfPdC@eI-6)&Bfp`D@83C'a
+[Cema-c!`AfPdC@eI0!e`B@aPG(4PAfeKEQP`%@4XEfGI-6-`-&pTG'9YAc%c#Qe
+KEQP`1#e`F'-4C'a[Cema-$N`AfPdC@eI-6N4C'a[Cema-$!iAfPdC@eI-6-&Bfp
+`D@83C'a[Cema-c-`AfPdC@eI-K"NE'pRAc%c-c"IDA4PE9mc%'4XEfGI-6-c-&p
+TG'9YAc33C'a[Cema-c-`AfPdC@eI03CKE'&bE@8'B@aKFQeP"Q&XBA*YC4"NE'p
+RAc%c0M"IDA4PE9mb%'4XEfGI-6-f-&pTG'9YAc33C'a[Cema-cB`AfPdC@eI04"
+NE'pRAc%c0M"IDA4PE9mf%'4XEfGI-6-f-&pTG'9YAcF3C'a[Cema-cB`AfPdC@e
+I1""NE'pRAc%c0M"IDA4PE9mj"fGPEQ9bB@`4C'a[Cema-cB`AfPdC@eI-6%(FhP
+ZBfKbEa&NE'pRAc%`-$9IDA4PE9ma-4&NE'pRAc%`-$9IDA4PE9ma-JGcH@jMD(*
+["h0jEQ0SFQm&Bfp`D@8&Bfp`D@83C'a[Cema-cN`AfPdC@eI04"NE'pRAc%d-M"
+IDA4PE9mc"@C[H@9b"@C[H@9b"@C[H@9b#h4bB@0PAf0KFR4P"@0KFR4P"@0KFR4
+P%@4XEfGI-6%e-&pTG'9YAc-e%@4XEfGI-6%e-&pTG'9YAc-f%@4XEfGI-6%e-&p
+TG'9YAc-h%@4XEfGI-6%e-&pTG'9YAc-i%@4XEfGI-6%e-&pTG'9YAc-j%@4XEfG
+I-6%e-&pTG'9YAc3`%@4XEfGI-6%e-&pTG'9YAc3a"@0[F'PP&@4TE(9dD@pZAf0
+KE'PLFQ&dD@pZFa9ND@aeG'P[EPpMB@aTBR*KG'P[ER-9C'PXGA4TEfjIBf&XD@*
+bBA4TEfjc&'4TE(9dD@pZAf0KE'PLFQ&dD@pZ%@4XEfGI-6!j-&pTG'9YAc)`%@4
+XEfGI-6!j-&pTG'9YAc)a%@4XEfGI-6!j-&pTG'9YAc)b%@4XEfGI-6!j-&pTG'9
+YAc)c%@4XEfGI-6!j-&pTG'9YAc)d%@4XEfGI-6!j-&pTG'9YAc)e%@4XEfGI-6!
+j-&pTG'9YAc)f%@4XEfGI-6!j-&pTG'9YAc)h%@4XEfGI-6!j-&pTG'9YAc)i%@4
+XEfGI-6!j-&pTG'9YAc)j%@4XEfGI-6!j-&pTG'9YAc-`%@4XEfGI-6!j-&pTG'9
+YAc-a%@4XEfGI-6!j-&pTG'9YAc-b%@4XEfGI-6!j-&pTG'9YAc-c%@4XEfGI-6!
+j-&pTG'9YAc-d%@4XEfGI-6!j-&pTG'9YAc-e%@4XEfGI-6!j-&pTG'9YAc-f%@4
+XEfGI-6!j-&pTG'9YAc-h%@4XEfGI-6!j-&pTG'9YAc-i%@4XEfGI-6!j-&pTG'9
+YAc-j%'4XEfGI-6!`-&pTG'9YAcN4C'a[Cema-$!`AfPdC@eI-6)4C'a[Cema-$!
+`AfPdC@eI-63)G(*KBf9I4&-)G(*KBf9I4&-)G(*KBf9I4&-,BfK[DAKIBfpbC@`
+,BfK[DAKIBfpbC@`,BfK[DAKIBfpbC@`'B@aKFQeP$$%k)(Ba,@*PC'PQ-3`b1L"
+f-5eLC@4TCM)--cSJGM%YBQ9ND@Bc$$3k)(Ba,@*PC'PQ0!`e1L"f-5eLC@4TCM8
+&FQ9RG@`%BA9dE``f1L"f-5eLC@4TCMB-0cSJGM%YBQ9ND@Bh$$Jk)(Ba,@*PC'P
+Q1!`j1L"f-5eLC@4TCMN1-6!k)(Ba,@*PC'PQ-6!1-6%k)(Ba,@*PC'PQ-6%1-6)
+k)(Ba,@*PC'PQ-6)4C'a[Cema-$!`AfPdC@eI-M%4BfpZCQPRAh4bB@jcF(9dCA)
+4BfpZCQPRAh4bB@jcF(9dCA)4BfpZCQPRAh4bB@jcF(9dCA)4BfpZCQPRAh4bB@j
+cF(9dCA)4C'a[Cema-$!`AfPdC@eI-M)4C'a[Cema-$!aAfPdC@eI-M)&Bfp`D@8
+4C'a[Cema-6)`AfPdC@eI-6)&Bfp`D@84C'a[Cema-M3`AfPdC@eI-634C'a[Cem
+a-M3`AfPdC@eI-684C'a[Cema-M3`AfPdC@eI-6B4C'a[Cema-M3`AfPdC@eI-6F
+4C'a[Cema-M3`AfPdC@eI-6J4C'a[Cema-M3`AfPdC@eI-6N4C'a[Cema-M3`AfP
+dC@eI-M!4C'a[Cema-M3`AfPdC@eI-M%4C'a[Cema-M3`AfPdC@eI-M)4C'a[Cem
+a-M3`AfPdC@eI-M-4C'a[Cema-M3`AfPdC@eI-M34C'a[Cema-M3`AfPdC@eI-M8
+4C'a[Cema-M3`AfPdC@eI-MB4C'a[Cema-M3`AfPdC@eI-MF4C'a[Cema-M3`AfP
+dC@eI-MJ4C'a[Cema-M3`AfPdC@eI-MN4C'a[Cema-M3`AfPdC@eI-c!4C'a[Cem
+a-M3`AfPdC@eI-c%4C'a[Cema-M3`AfPdC@eI-c)4C'a[Cema-M3`AfPdC@eI-c-
+4C'a[Cema-M3`AfPdC@eI-c34C'a[Cema-M3`AfPdC@eI-c84C'a[Cema-M3`AfP
+dC@eI-cB4C'a[Cema-M3`AfPdC@eI-cF4C'a[Cema-M3`AfPdC@eI-6!4C'a[Cem
+a-M3`AfPdC@eI-6%4C'a[Cema-M3`AfPdC@eI-6)4C'a[Cema-M3`AfPdC@eI-6-
++FQ9RG@aKG'P[EK&NE'pRAc%a-M"IDA4PE9ma0K&NE'pRAc%a-M"IDA4PE9ma0a&
+NE'pRAc%a-M"IDA4PE9ma1"&NE'pRAc%a-M"IDA4PE9ma14&NE'pRAc%a-M"IDA4
+PE9mb-"&NE'pRAc%a-M"IDA4PE9mb-4&NE'pRAc%a-M"IDA4PE9mb-K&NE'pRAc%
+a-M"IDA4PE9mb-a&NE'pRAc%a-M"IDA4PE9mb0"&NE'pRAc%a-M"IDA4PE9mb04&
+NE'pRAc%a-M"IDA4PE9mb0K&NE'pRAc%a-M"IDA4PE9mb0a&NE'pRAc%a-M"IDA4
+PE9ma-a&NE'pRAc%a-M"IDA4PE9ma0"&NE'pRAc%a-M"IDA4PE9ma04&NE'pRAc%
+a-M"IDA4PE9mb1"&NE'pRAc%a-M"IDA4PE9mb14&NE'pRAc%a-M"IDA4PE9mc-"&
+NE'pRAc%a-M"IDA4PE9mc-4&NE'pRAc%a-M"IDA4PE9mc-K&NE'pRAc%a-M"IDA4
+PE9mc-`K`EfPZG'&RC3K`EfPZG'&RC3K`EfPZG'&RC4"NE'pRAc%d06"IDA4PE9m
+b%'4XEfGI-63e-&pTG'9YAc-3C'a[Cema0$8`AfPdC@eI0""NE'pRAc%d06"IDA4
+PE9me%'4XEfGI-63e-&pTG'9YAcB3C'a[Cema0$8`AfPdC@eI0a"NE'pRAc%d06"
+IDA4PE9mi%'4XEfGI-63e-&pTG'9YAcN4C'a[Cema0$8`AfPdC@eI-6!4C'a[Cem
+a0$8`AfPdC@eI-6)4C'a[Cema0$8`AfPdC@eI-6-4C'a[Cema0$8`AfPdC@eI-63
+4C'a[Cema0$8`AfPdC@eI-6B4C'a[Cema0$8`AfPdC@eI-6F4C'a[Cema0$8`AfP
+dC@eI-6J4C'a[Cema0$8`AfPdC@eI-6N4C'a[Cema0$8`AfPdC@eI-M!4C'a[Cem
+a0$8`AfPdC@eI-M%4C'a[Cema0$8`AfPdC@eI-M)4C'a[Cema0$8`AfPdC@eI-M-
+4C'a[Cema0$8`AfPdC@eI-M34C'a[Cema0$8`AfPdC@eI-M84C'a[Cema0$8`AfP
+dC@eI-MJ4C'a[Cema0$8`AfPdC@eI-MN-BA9dEfeKG'PcE@9c$'&eG'pYBA4TFfe
+PF`aKGA4[E@&dDA0YCA-(CQPMD'PPFJKMEfjdFQpXC3KMEfjdFQpXC3KMEfjdFQp
+XC3aKGA4[E@&dDA0YCA-4C'a[Cema0$8`AfPdC@eI-c-4C'a[Cema0$8`AfPdC@e
+I-c34C'a[Cema0$8`AfPdC@eI-c84C'a[Cema0$8`AfPdC@eI-cB4C'a[Cema0$8
+`AfPdC@eI-cF4C'a[Cema0$8`AfPdC@eI-cJ4C'a[Cema0$8`AfPdC@eI-cN4C'a
+[Cema0$8`AfPdC@eI0$!4C'a[Cema0$8`AfPdC@eI0$%4C'a[Cema0$8`AfPdC@e
+I0$)4C'a[Cema0$8`AfPdC@eI0$-3C'a[Cema06%`AfPdC@eI-a&cC@jcCA9bAh0
+dC@aXB@PbC4&cC@jcCA9bAh0dC@aXB@PbC4&cC@jcCA9bAh0dC@aXB@PbC39MEh"
+TC4&cC@jcCA9bAh0dC@aXB@PbC4&NE'pRAc%d06"IDA4PE9md0"&NE'pRAc%d06"
+IDA4PE9md0K&NE'pRAc%d06"IDA4PE9md0a&NE'pRAc%d06"IDA4PE9md1"&NE'p
+RAc%d06"IDA4PE9md14&NE'pRAc%d06"IDA4PE9me-"&NE'pRAc%d06"IDA4PE9m
+e-4&NE'pRAc%d06"IDA4PE9me-K&NE'pRAc%d06"IDA4PE9me-a&NE'pRAc%d06"
+IDA4PE9me0"&NE'pRAc%d06"IDA4PE9me04&NE'pRAc%d06"IDA4PE9me0JKMEh9
+bBQ9@53KMEh9bBQ9@53KMEh9bBQ9@54&NE'pRAc%`-$"IDA4PE9mb-a&NE'pRAc%
+`-$"IDA4PE9mb0"&NE'pRAc%`-$"IDA4PE9mb04&NE'pRAc%`-$"IDA4PE9mb0K&
+NE'pRAc%`-$"IDA4PE9mb0a&NE'pRAc%`-$"IDA4PE9mb1"&NE'pRAc%`-$"IDA4
+PE9mb14&NE'pRAc%`-$"IDA4PE9mc-"&NE'pRAc%`-$"IDA4PE9mc-4&NE'pRAc%
+`-$"IDA4PE9mc-K&NE'pRAc%`-$"IDA4PE9mc-a&NE'pRAc%`-$"IDA4PE9mc0"&
+NE'pRAc%`-$"IDA4PE9mc04&NE'pRAc%`-$"IDA4PE9mc0K&NE'pRAc%`-$"IDA4
+PE9mc0a&NE'pRAc%`-$"IDA4PE9mc1"&NE'pRAc%`-$"IDA4PE9mc14&NE'pRAc%
+`-$"IDA4PE9md-"&NE'pRAc%`-$"IDA4PE9md-4&NE'pRAc%`-$"IDA4PE9md-J4
+KGA4[%@4XEfGI-6!`-&pTG'9YAc%f%@4XEfGI-6!`-&pTG'9YAc%i%@4XEfGI-6!
+`-&pTG'9YAc%j"'&eG'm%BA9dEa&NE'pRAc%d06"IDA4PE9md03ia-cSJGM%YBQ9
+ND@Ba-`ia0$SJGM%YBQ9ND@Ba0!da06SJCf9bE@&ZDA9Y$6%i1L"dD'9bE9ma-'X
++FQ9RG@aKG'P[EJTbC@GeE'&dD@pZ#R*PCh9XBA4TEfi--6Bk)(4SCA*YAc4V$M%
+h1L"dD'9bE9ma,MCV"'*[E'm%BQpXE`4LEfa[%@4XEfGI-63e-&pTG'9YAc8h%@4
+XEfGI-63e-&pTG'9YAc8i%@4XEfGI-63e-&pTG'9YAc8j%@4XEfGI-63e-&pTG'9
+YAcB`%@4XEfGI-63e-&pTG'9YAcBa%@4XEfGI-63e-&pTG'9YAcBb%@4XEfGI-63
+e-&pTG'9YAcBc%@4XEfGI-63e-&pTG'9YAcBd#'4TE(9dD@pZ#'4TE(9dD@pZ#'4
+TE(9dD@pZ%@4XEfGI-6)h-&pTG'9YAc%c"fC[GA*TCA)(CQpeFQPPFJGQEh9bD@9
+b"@0[F'PP%'4XEfGI-68d-&pTG'9YAc)3C'a[Cema063`AfPdC@eI-3GbC@GXB@G
+P"h*PCfaKCf8(FQ9RE'&RC4&NE'pRAc%`-$*IDA4PE9ma0"&NE'pRAc%`-$*IDA4
+PE9ma04&NE'pRAc%`-$*IDA4PE9ma0K&NE'pRAc%`-$*IDA4PE9ma0a&NE'pRAc%
+`-$*IDA4PE9ma1"&NE'pRAc%`-$*IDA4PE9ma14&NE'pRAc%`-$*IDA4PE9mb-"&
+NE'pRAc%`-$*IDA4PE9mb-4&NE'pRAc%`-$*IDA4PE9mb-K&NE'pRAc%`-$*IDA4
+PE9mb-a&NE'pRAc%`-$"IDA4PE9md-a&NE'pRAc%`-$"IDA4PE9md0"CcG@*IE@9
+ZG5"MEfjQD@GeFQ&dD@pZ#f&MFA9TFfPdD@pZ%@4XEfGI-6!`-PpTG'9YAc)d%@4
+XEfGI-6!`-PpTG'9YAc)e%@4XEfGI-6!`-PpTG'9YAc)f%@4XEfGI-6!`-PpTG'9
+YAc)h%@4XEfGI-6!`-PpTG'9YAc)i%@4XEfGI-6!`-PpTG'9YAc)j%@4XEfGI-6!
+`-PpTG'9YAc-`%@4XEfGI-6!`-PpTG'9YAc-a%@4XEfGI-6!`-PpTG'9YAc-b%@4
+XEfGI-6!`-PpTG'9YAc-c#f&MFA9TFfPdD@pZ#f&MFA9TFfPdD@pZ#R4bB@0PAh4
+[GA3+G(*KBf9IG'peG!TdFQ&MC9pdEh9d4M):
Index: /trunk/Poubelle/archediab.old/archeops.c
===================================================================
--- /trunk/Poubelle/archediab.old/archeops.c	(revision 637)
+++ /trunk/Poubelle/archediab.old/archeops.c	(revision 637)
@@ -0,0 +1,642 @@
+#include "manip.h"
+#include "archeops.h"
+
+
+/**********  coefficients  pour  les  mesures  bolo    ********************************/
+/*                         toutes les puissances en pW                                */
+/*	-1-	loi de reponse thermique des bolos  avec R en ohms et T en Kelvin     */
+/*                                                                                    */
+/* 	T =  coef2  *   (   ln (  R / coef1) **  ( -1 / coef0 )                       */
+/*                                                                                    */
+/*	-2-	fuite thermique du bolo   coef 3,4                                    */
+/*                                                                                    */
+/*	Ptot =  coef3  *  ( (10*Tb) ** coef4    -    (10*Tcryo)  **  coef4 )          */
+/*                                                                                    */
+/*	-3-	calcul empirique de Pciel et de  tau	  coef  5,6                   */
+/*                                                                                    */
+/*	Pciel	=	coef5	- Pelec		coef5= I * Ai (tables xavier) 	      */
+/*	tau	=	- ln ( 1 +  Pciel / coef6 )	coef6= I * Bi (tables xavier) */
+/*                                                                                    */
+/**************************************************************************************/
+
+
+/**************************************************************************************/
+/*                                                                                    */
+/*   pour les MLPA      :  gain = 100   diviseur = 101  ou  330                       */
+/*   pour les bebodiff  :  gain = diviseur = 100Kohm / R preampli                     */
+/*   pour les bebodiff  :  la capa est corrigee d'un facteur 0.868                    */
+/*   pour les cartes modifiees : mettre diviseur=0                                    */
+/*                         et capa = la resistance de chage en Megohm                 */
+/*                                                                                    */
+/**************************************************************************************/
+
+
+/*  nom  ,  on/off  ,  0 = MLPA       , N° bolo ,  gain_pa  , capa*1000 , diviseur , coef*10000
+/*       ,  0 ou 1  ,  2..8 = BEBO    ,  hard   ,           ,  4700     ,  333     , 
+/*                     10 = Bediff    ,         ,           , 
+
+/* pour les bediff (code 10)  le n° de bolo est  N° de bebo*8  +  numero dans la bebo
+/*  soit :  1 2 3 4 5 6  ..  9 10 11 12 13 14 .. 17 18 19 20 21 22 .. etc
+
+
+/*debut_param*/
+/*----------------------------------  fenetre :  -----------------------------------*/
+
+param_bolo  parametr={24,24,36,88,18,
+
+{
+{ "v1-bedif1"  , 1,10,1 ,  200, 22000,  200, { 5000   , 123100 , 334200 } },		
+{ "v1-bedif2"  , 1,10,2 ,  200, 22000,  200, { 5000    , 12.31 , 33.42 		} },
+{ "v1-bedif3"  , 1,10,3 ,  200, 22000,  200, { 5000    , 50.0 , 14.0 		} },
+{ "v1-bedif4"  , 1,10,4 ,  200, 22000,  200,  { 5000    , 12.31 , 33.42 	} },
+{ "v1-bedif5"  , 1,10,5 , 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 	} },
+{ "v1-bedif6"  , 1,10,6 , 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 	} },
+
+{ "v1-bedif7"  , 1,10,9 , 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 		 } },
+{ "v1-bedif8"  , 1,10,10, 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 		 } },
+{ "v1-bedif9"  , 1,10,11, 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 		 } },
+{ "v1-bedif10" , 1,10,12, 1000, 4700, 1000,  { 5000     , 12.31 , 33.42 		 } },
+{ "v1-bedif11" , 1,10,13, 1000, 4700, 1000, { 5000     , 12.31 , 33.42 		 } },
+{ "v1-bedif12" , 1,10,14, 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 		 } },
+
+{ "v1-bedif13" , 1,10,17, 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 		 } },
+{ "v1-bedif14" , 1,10,18, 1000, 4700, 1000,  { 5000     , 12.31 , 33.42 		 } },
+{ "germanium"  , 3,10,19, 1000, 22000 ,    0,  { 5000      , 12.31 , 33.42 		 } },
+{ "therm_4k"   , 3,10,20, 1000, 1000  ,    0,  { 5000      , 12.31 , 33.42 		 } },
+{ "therm_1.6k" , 3,10,21, 1000, 1000  ,    0,  { 5000      , 12.31 , 33.42 		 } },
+{ "therm_10k"  , 3,10,22, 1000, 1000  ,    0,  { 5000     , 12.31 , 33.42 		 } },
+
+{ "v1-bedif19"  , 2,10,25 , 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 		 } },
+{ "v1-bedif20"  , 2,10,26, 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 		 } },
+{ "v1-bedif21"  , 2,10,27, 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 		 } },
+{ "v1-bedif22"  , 2,10,28, 1000, 4700, 1000,  { 5000     , 12.31 , 33.42 		 } },
+{ "v1-bedif23"  , 2,10,29, 1000, 4700, 1000,  { 5000     , 12.31 , 33.42 		 } },
+{ "v1-bedif24"  , 2,10,30, 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 		 } }
+
+}
+};
+/*fin_param*/
+
+
+
+/* bolos campagne 1998-1999	*/
+/*
+reg_NbSi.J, 1, 0, 1, 100, 4.7, 333,	.5			,519.6  , 8.286
+v1-231...L, 1, 0, 2, 100, 4.7, 333, .5   , 1.7   , 32.41 , 0.333 , 10  , 20.30  ,  11.41  		
+v1-232...N, 1, 0, 3, 100, 4.7, 333,		
+v1-237...E, 1, 0, 4, 100, 4.7, 333,
+
+reg_JamieO, 1, 0, 5, 100, 4.7, 101,
+
+V2-NbSi..H, 1, 0, 6, 100, 4.7, 101, .5   ,433.8  , 9.25
+V2-230...B, 1, 0, 7, 100, 4.7, 333, .5   , 8.26  , 26.61 , 5.10  ,  7  , 9.354   ,  1.026
+V2-205...Q, 1, 0, 8, 100, 4.7, 333,	.518 , 81    , 25.2 
+V2-208...P, 1, 0, 9, 100, 4.7, 333, .5   , 12.31 , 33.42 , 0.627 , 6.5 , 8.113   ,  2.958
+
+*/
+/*bolos campagne 1997-1998	*/
+/*
+
+v1-208...J, 1, 0, 1, 100, 4.7, 333, .5   , 12.31 , 33.42 		
+v1-232...L, 1, 0, 2, 100, 4.7, 333,		
+v1-205...N, 1, 0, 3, 100, 4.7, 333,	.518 , 81    , 25.2	
+v1-NbSi..E, 1, 0, 4, 100, 4.7, 333,	.5			,519.6  , 8.286
+Jamie....O, 1, 0, 5, 100, 4.7, 101,
+V2-NbSi..H, 1, 0, 6, 100, 4.7, 101, .5   ,433.8  , 9.25
+V2-224...B, 1, 0, 7, 100, 4.7, 333, .5   ,3.43   , 26.6
+V2-230...Q, 1, 0, 8, 100, 4.7, 333, .5   , 8.26  , 26.61
+V2-231...P, 1, 0, 9, 100, 4.7, 333, .5   , 1.7   , 32.41
+
+*/
+
+
+
+
+
+/*debut_nom_reglage*/
+/* 0->aa*/
+/* 1->bb*/
+/* 2->cc*/
+/* 3->reglage 3  */
+/* 4->reglage 4  */
+/* 5->reglage 5  */
+/* 6->reglage 6  */
+/* 7->reglage 7  */
+/*fin_nom_reglage*/
+
+
+
+
+
+
+
+reglage_bolo  reglage_standard[8]={{
+
+
+/*debut reglage 0 */
+{30,76,9,1},
+{0
+,10
+,1
+,3
+,10
+,2
+,0
+,0
+,1
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+},{
+{22,100663296}
+,{-100646890,1}
+,{-100646890,1}
+,{22,0}
+,{-100638698,1}
+,{22,253952}
+,{-100646890,1}
+,{22,0}
+,{-100646890,1}
+,{-100646890,1}
+,{22,0}
+,{235388950,221185}
+,{20,0}
+,{20,0}
+,{16406,0}
+,{24598,0}
+,{22,0}
+,{24598,0}
+},{
+{1,22,0,1}
+,{0,20,0,1}
+,{0,20,0,1}
+,{0,20,0,1}
+,{0,20,0,1}
+,{0,20,0,1}
+},{
+{0,1,9,1,0,0,0}
+,{0,1,9,1,0,0,0}
+,{0,1,9,1,0,0,0}
+,{0,1,9,1,0,0,0}
+},{0,0,0,0,0,0,0,0} 
+/*fin_reglage*/
+
+},{
+
+/*debut reglage 1 */
+{30,76,9,1},
+{0
+,10
+,1
+,3
+,10
+,2
+,0
+,0
+,1
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+},{
+{22,100663296}
+,{-100646890,1}
+,{-100646890,1}
+,{22,0}
+,{-100638698,1}
+,{22,253952}
+,{-100646890,1}
+,{22,0}
+,{-100646890,1}
+,{-100646890,1}
+,{22,0}
+,{235388950,221185}
+,{20,0}
+,{20,0}
+,{16406,0}
+,{24598,0}
+,{22,0}
+,{24598,0}
+},{
+{1,22,0,1}
+,{0,20,0,1}
+,{0,20,0,1}
+,{0,20,0,1}
+,{0,20,0,1}
+,{0,20,0,1}
+},{
+{0,1,9,1,0,0,0}
+,{0,1,9,1,0,0,0}
+,{0,1,9,1,0,0,0}
+,{0,1,9,1,0,0,0}
+},{0,0,0,0,0,0,0,0} 
+/*fin_reglage*/
+
+},{
+
+/*debut reglage 2 */
+{31,76,9,0},
+{0
+,-14
+,-31
+,-63
+,-83
+,-103
+,-122
+,127
+,1
+,97
+,14
+,-32
+,-93
+,-87
+,-72
+,-80
+,-101
+,-112
+,-113
+,-121
+},{
+{22,100663296}
+,{1040629782,204800}
+,{1040834582,221184}
+,{22,0}
+,{-100450282,2}
+,{22,253952}
+,{-100458474,2}
+,{22,0}
+,{-100442090,2}
+,{-100253674,253954}
+,{22,0}
+,{303013910,221184}
+,{20,0}
+,{20,0}
+,{9238,0}
+,{24598,301989888}
+,{22,0}
+,{24598,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+},{
+{-15,-9,-13,-38}
+,{-83,-109,-90,-68}
+,{-99,-101,-67,-61}
+,{-64,-60,-38,-19}
+,{-28,-57,-77,-75}
+,{-66,-55,-51,-68}
+},{
+{31,76,9,0,0,-35,-4643}
+,{-55,-77,-69,-55,-44,-43,-12336}
+,{-56,-85,-128,99,111,-116,-28030}
+,{105,107,101,101,106,111,31615}
+},{-102,-88,-94,-113,-126,101,73,70} 
+/*fin_reglage*/
+
+},{
+
+/*debut reglage 3 */
+{31,76,9,0},
+{0
+,-14
+,-31
+,-63
+,-83
+,-103
+,-122
+,127
+,1
+,99
+,13
+,96
+,-93
+,-87
+,-72
+,-80
+,-101
+,-112
+,-113
+,-121
+},{
+{22,100663296}
+,{1040629782,204800}
+,{1040834582,221184}
+,{22,0}
+,{-100450282,2}
+,{22,253952}
+,{-100458474,2}
+,{22,0}
+,{-100442090,2}
+,{-100253674,253954}
+,{22,0}
+,{303013910,221184}
+,{20,0}
+,{20,0}
+,{9238,0}
+,{24598,301989888}
+,{22,0}
+,{24598,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+},{
+{-15,-9,-13,-38}
+,{-83,-109,-90,-68}
+,{-99,-101,-67,-61}
+,{-64,-60,-38,-19}
+,{-28,-57,-77,-75}
+,{-66,-55,-51,-68}
+},{
+{31,76,9,0,0,-35,-4643}
+,{-55,-77,-69,-55,-44,-43,-12336}
+,{-56,-85,-128,99,111,-116,-28030}
+,{105,107,101,101,106,111,31615}
+},{-102,-88,-94,-113,-126,101,73,70} 
+/*fin_reglage*/
+
+},{
+
+/*debut reglage 4 */
+{31,76,9,0},
+{0
+,-14
+,-31
+,-63
+,-83
+,-103
+,-122
+,127
+,1
+,99
+,13
+,112
+,-93
+,-87
+,-72
+,-80
+,-101
+,-112
+,-113
+,-121
+},{
+{22,100663296}
+,{1040629782,204800}
+,{1040834582,221184}
+,{22,0}
+,{-100450282,2}
+,{22,253952}
+,{-100458474,2}
+,{22,0}
+,{-100442090,2}
+,{-100253674,253954}
+,{22,0}
+,{303013910,221184}
+,{20,0}
+,{20,0}
+,{9238,0}
+,{24598,301989888}
+,{22,0}
+,{24598,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+},{
+{-15,-9,-13,-38}
+,{-83,-109,-90,-68}
+,{-99,-101,-67,-61}
+,{-64,-60,-38,-19}
+,{-28,-57,-77,-75}
+,{-66,-55,-51,-68}
+},{
+{31,76,9,0,0,-35,-4643}
+,{-55,-77,-69,-55,-44,-43,-12336}
+,{-56,-85,-128,99,111,-116,-28030}
+,{105,107,101,101,106,111,31615}
+},{-102,-88,-94,-113,-126,101,73,70} 
+/*fin_reglage*/
+
+},{
+
+/*debut reglage 5 */
+{31,76,9,0},
+{0
+,-14
+,-31
+,-63
+,-83
+,-103
+,-122
+,127
+,1
+,97
+,14
+,-80
+,-93
+,-87
+,-72
+,-80
+,-101
+,-112
+,-113
+,-121
+},{
+{22,100663296}
+,{1040629782,204800}
+,{1040834582,221184}
+,{22,0}
+,{-100450282,2}
+,{22,253952}
+,{-100458474,2}
+,{22,0}
+,{-100442090,2}
+,{-100253674,253954}
+,{22,0}
+,{303013910,221184}
+,{20,0}
+,{20,0}
+,{9238,0}
+,{24598,301989888}
+,{22,0}
+,{24598,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+},{
+{-15,-9,-13,-38}
+,{-83,-109,-90,-68}
+,{-99,-101,-67,-61}
+,{-64,-60,-38,-19}
+,{-28,-57,-77,-75}
+,{-66,-55,-51,-68}
+},{
+{31,76,9,0,0,-35,-4643}
+,{-55,-77,-69,-55,-44,-43,-12336}
+,{-56,-85,-128,99,111,-116,-28030}
+,{105,107,101,101,106,111,31615}
+},{-102,-88,-94,-113,-126,101,73,70} 
+/*fin_reglage*/
+
+},{
+
+/*debut reglage 6 */
+/*fin_reglage*/
+
+},{
+
+/*debut reglage 7 */
+/*fin_reglage*/
+
+} };
+
+/* ------------------------------------   corps  des fonctions	 ------------------------------ */
+/* -------------------------------------------------------------------------------------------- */
+
+
+
+unsigned long	val_long(char x)
+{
+unsigned long a,xl;
+a=x-2;	if(x<3)  xl=x;	else	xl=((a&1) + 2)<<(a>>1);
+return(xl);
+}
+
+
+double	val_double(char x)
+{
+unsigned long a,xl;
+if(x<0) x=-x;	a=x;	if(!a)  xl=0;	else	xl=((a&1) + 2)<<(a>>1);
+if(x>0)	return(1e-4*(double)xl);	else	return(-1e-4*(double)xl);
+}
+
+int	new_val_dac(int a,char  code)
+{
+if(code&0x80)	a=(code&0x7f) <<5 ;
+else	{
+	if(code&0x40)	a+=code&0x3f;	
+	else		a-=code&0x3f;	
+	}
+return(a);
+}
+
+
+
+
+int	calcul_somme_block(block_type_modele* blk,int longueur)
+{
+int i,so=0;;
+for(i=0;i<(longueur/4-4);i++)  so^=(int)blk->mot[i];
+/* somme sur tous les mots internes	: on exclus le dbut, les codes et la fin	*/
+return((so^(so>>16))&0xffff);
+}
+
+
+
+
+void  valide_block(block_type_modele* blk,int type,int block_num)
+{
+int somme,longueur;
+def_long_block
+longueur=long_block[type];
+/*printf("valide block adresse %x  type %d  numblock %d  longueur=%d \n" */
+/* 		,(unsigned)blk,type,block_num,longueur);*/
+blk->debut		=	debut_block_mesure;
+blk->code2		=	(((long)block_num) & 0xffffff ) | ( (((long)type)<<24)&0xff000000 );
+
+blk->mot[longueur/4-4]  =	fin_block_mesure;
+somme=calcul_somme_block(blk,longueur);
+blk->code1		=	(((long)longueur)<<16)	|	somme;
+}
+
+
+
+
+int  verifie_block(block_type_modele* blk)
+{
+int type,lg,som;
+def_long_block
+if(blk->debut != debut_block_mesure)					return(block_debut_erreur);
+type=type_block(blk);		if( (type<0) ||(type>=nb_type_blocks) )	return(block_type_inconnu);	
+lg=longueur_block(blk);		if( lg != long_block[type] )		return(block_longueur_erreur);	
+if( blk->mot[(lg/4)-4]  !=	fin_block_mesure)			return(block_fin_erreur);	
+som=calcul_somme_block(blk,lg); if( som!= somme_block(blk))		return(block_somme_erreur);
+return(block_correct);
+}
+
+
+int  verifie_block_printf(block_type_modele* blk)
+{
+int type,lg,som;
+def_long_block
+def_nom_block
+if(blk->debut != debut_block_mesure)
+	{
+	printf(" erreur dans le code debut de block	 \n");
+	return(block_debut_erreur);
+	}	
+
+type=type_block(blk);
+if( (type<0) || (type>nb_type_blocks) )	
+	{
+	printf(" block de type %d  inconnu\n",type);
+	return(block_type_inconnu);
+	}
+
+lg=longueur_block(blk);
+if( lg!=long_block[type] )	
+	{
+	printf(" block type %s  erreur de longueur (nominal=%d , dans le block=%d \n"
+			,nom_block[type],long_block[type],lg);
+	return(block_longueur_erreur);
+	}
+
+som=calcul_somme_block(blk,lg);
+if( som!=somme_block(blk) )	
+	{
+	printf(" block type %s   :  erreur de somme (calculee=%d , dans le block=%d \n"
+			,nom_block[type],som,somme_block(blk) );
+	return(block_somme_erreur);
+	}
+	
+if(blk->mot[(lg/4)-4]	!= fin_block_mesure)	
+	{
+	printf(" block type %s  erreur de code fin de block : trouve %x au lieu de %x \n"
+			,nom_block[type],(int)blk->mot[(lg/4)-4],fin_block_mesure);
+	return(block_fin_erreur);
+	}
+
+return(block_correct);
+}
+
+
+
+
+
+
+
Index: /trunk/Poubelle/archediab.old/archeops.h
===================================================================
--- /trunk/Poubelle/archediab.old/archeops.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/archeops.h	(revision 637)
@@ -0,0 +1,900 @@
+
+/*======================================================================*/
+/*                                                                      */
+/* 		 archeops.h  :	structure de données            	*/
+/*                                                                      */
+/*======================================================================*/
+
+#define		_archeops
+#define		version_num		24
+
+
+/*======================================================================*/
+/*                                                                      */
+/* 			historique des modifications            	*/
+/*                                                                      */
+/*                                                                      */
+/*  VERSION 24:                                                         */
+/*                                                                      */
+/*	- utilise le fichier archeops.c					*/
+/*	- nb_max_bolo=24  avec nb_bolo_util=18				*/
+/*	- change la structure du block dilution				*/
+/*									*/
+/*									*/
+/*									*/
+/*									*/
+/*======================================================================*/
+
+
+/*======================================================================*/
+/*  ---------------  parametres generaux de definition   -------------  */
+/*======================================================================*/
+
+#ifdef	_planck
+#define	_archeops
+#define _trapani
+#define _sans_transputer
+#endif
+
+#ifdef	_archeops
+/*#define _test_diabolo	 relecture des blocks fabriques avec diabolo	*/
+#define _trapani		/*  configuration  prevue pour Trapani	*/
+/*#define _kiruna		  block standard prevu pour kiruna	*/ 
+#endif
+
+
+
+/*======================================================================*/
+/*  --------------	valeurs des parametres dans	-------------   */
+/*  --------------	les différentes configurations	-------------   */
+/*======================================================================*/
+/*									*/
+/*  configuration pour Trapani : 3 bebos  /  12 bolos			*/
+/*									*/
+/*  bebo1 :   voies  1  à  6	-->  bolo  1 a  6			*/
+/*  bebo2 :   voies  9  à  14	-->  bolo  7 à 12			*/
+/*									*/
+/*  bebo6 :								*/
+/*  	voies  41 42 43 44	=  carte simplifiee avec AMP01		*/
+/*  	voies  45 et 46		= chauffage pour regulation		*/    
+/*	on ecrira plus tard le stockage des donnees simplifiees		*/
+/*									*/
+/*									*/
+/*======================================================================*/
+
+/*	nb_per_block	doit etre divisible par 2						*/
+/*	nb_max_bolo	doit etre divisible par 2 pour archeops   (impair pour diabolo ?? )	*/
+/*	nb_bolo_util	doit etre divisible par 2 pour archeops   (impair pour diabolo ?? )	*/
+
+
+#ifdef	_trapani
+#define nb_max_bolo 		24	/*  nombre maxi de bolos 				*/
+#define nb_bolo_util 		18	/*  nombre de bolos réellement transmis			*/
+#define	nb_per_block		36	/*  nombre de periodes entieres dans un block		*/
+#define	nb_max_mes_per		88	/*  nb de points maxi dans une periode complete		*/
+#define	nb_photo_diodes		46	/*  nb de canaux de mesure du senseur stellaire		*/
+#endif
+
+#ifdef	_kiruna
+#define nb_max_bolo 		36	/*  nombre maxi de bolos 				*/
+#define nb_bolo_util 		32	/*  nombre de bolos réellement transmis			*/
+#define	nb_per_block		36	/*  nombre de periodes entieres dans un block		*/
+#define	nb_max_mes_per		88	/*  nb de points maxi dans une periode complete		*/
+#define	nb_photo_diodes		46	/*  nb de canaux de mesure du senseur stellaire		*/
+#endif
+
+
+#ifdef	_diabolo
+#define nb_max_bolo 		9	/*  nombre maxi de bolos 				*/
+#define nb_bolo_util 		9	/*  nombre de bolos réellement transmis			*/
+#define	nb_per_block		20	/*  nombre de periodes entieres dans un block		*/
+#define	nb_max_mes_per		128	/*  nb de points maxi dans une periode complete		*/
+#define	nb_photo_diodes		0	/*  nb de canaux de mesure du senseur stellaire		*/
+#endif
+
+#ifdef	_test_diabolo
+#define nb_max_bolo 		9	/*  nombre maxi de bolos 				*/
+#define nb_bolo_util 		9	/*  nombre de bolos réellement transmis			*/
+#define	nb_per_block		20	/*  nombre de periodes entieres dans un block		*/
+#define	nb_max_mes_per		128	/*  nb de points maxi dans une periode complete		*/
+#define	nb_photo_diodes		0	/*  nb de canaux de mesure du senseur stellaire		*/
+#endif
+
+
+#ifdef	_sans_transputer
+#define nb_byte_mot		5	/*  nombre d'octets dans un mot d'acquisition planck	*/
+#else
+#define nb_byte_mot		8	/*  nombre d'octets dans un mot d'acquisition archeops	*/
+#endif
+
+#define nb_sync			6	/*  nombre de signaux de synchro			*/
+#define	nb_element_catalog	256	/* nombre d'éléments catalog par reponse enregistreur	*/
+
+
+#ifdef	transmet_data_brute
+#define		taille_maxi_block_archeops	sizeof(block_type_data_brute)
+#else					/* 	le plus gros des différents blocks de télémesure*/
+#define		taille_maxi_block_archeops	sizeof(block_type_bolo)
+#endif
+
+#define		nombre_de_regul		4
+#define		nombre_de_voies		6
+#define 	nb_type_blocks		20	/*  nombre de type de blocks (multiple de 4)	*/
+
+
+/*======================================================================*/
+/*  -------     codes  de  controle  pour  la  transmission    -----    */
+/*=======================   télécommande      ==========================*/
+/*======================================================================*/
+
+
+/*   --------------   codes de reconnaissance des paquets de télécommande	--------------   */   
+
+#define		debut_telecommande		0x23456789
+#define		fin_telecommande		0x98765432
+
+/*   ------------ codes de direction des commandes envoyées a l'EPLD Archeops	--------------   */   
+
+#define 	tc_dir_transputer		1
+#define 	tc_dir_reset_epld		3
+
+/*  -------------  codes  des  prefix des  telecommandes traités le transputer	--------------   */
+
+#define		tc_horloge			255	/* (-1)	*/
+#define		tc_cadence1			128
+#define		tc_cadence2			129
+#define		tc_cadence3			130
+#define		tc_regul			251	/* (-5)	*/
+#define		tc_switch_dil			250
+#define		tc_dac_dil			249
+
+/*======================================================================*/
+/*	telecommande reduite  sur 18 bit				*/
+/*======================================================================*/
+
+/*______________________________________________________________________________________________*/
+/*	1er mot	:	code de debut de telecommande reduite					*/
+#define		tc_reduite			248	
+/*______________________________________________________________________________________________*/
+/*	2eme mot:	4bit:	16 codes  de direction  tc2					*/
+enum{tc2_reset_epld,tc2_bolo_dacV,tc2_bolo_dacI,tc2_bolo_dacT
+	,tc2_bolo_dacL,tc2_bolo_gain,tc2_bolo_voie,tc2_horloge
+	,tc2_regul,tc2_auto_bolo,tc2_auto_dilu,tc2_dilution};			/* 11 codes: reste 5 disponibles*/
+
+
+/*______________________________________________________________________________________________*/
+/*	3eme mot:	6bit:									*/
+
+/*	code2=dac-gain-voie  	:	numero de bolo						*/
+
+/*	code2=tc2_horloge	:								*/
+/*		soit un code defini								*/
+/*		soit le code tc3_vitesse+i avec i=0.. nb_type_block				*/
+enum{tc3_periode,tc3_nb_mesures,tc3_temp_mort,tc3_flag,tc3_vitesse};
+#define	tc3_suite	tc3_vitesse+nb_type_block
+
+
+/*	code2=tc2_regul	:									*/
+
+
+/*	code2=tc2_auto_bolo	:						*/
+
+
+/*	code2=tc2_auto_dilu	:						*/
+/* 	les valeurs des parametres d'auto_dilu ne depassent pas 128 		*/
+
+
+/*	code2=tc2_dilution	:						*/
+
+
+/*______________________________________________________________________________*/
+/*	4eme mot:	8bit:	valeur a ecrire			*/		
+
+
+/*======================================================================*/
+/*  -------     codes  de  controle  pour  la  transmission    -----    */
+/*=========================   télémesure    ============================*/
+/*======================================================================*/
+
+/*   -------   codes de reconnaissance des paquets de télémesure        */   
+
+#define		debut_block_mesure		0x45627491	
+#define		fin_block_mesure		0x83260432	
+
+
+
+
+
+/*======================================================================*/
+/*  ------------------------------------------------------------------  */
+/*  ---------  	Les  formats  des  blocks  type   ARCHEOPS   	-------	*/
+/*  ------------------------------------------------------------------  */
+/*======================================================================*/
+
+
+
+/*==============================================================================================*/
+
+/*	Le tableau est lut dans le desordre par le mac en lecture de la carte pci :		*/
+
+/*	Les entiers long sont ecrits tels quels							*/
+/*	Les short sont ecrits permuté 2 a 2 par le tansputer					*/
+/*	Les tables char sont ecrits permuté 4 / 4 par le transputer				*/
+/*	A la lecture dans le mac, tout est bon							*/
+
+
+/*  ---------  	 structures N° 0 :   parametres de mesure des bolometres        -------------	*/
+/*  -----------------------------------------------------------------------------------------	*/
+
+typedef struct	
+	{
+	char		bolo_nom[32];		/*  le nom de chaque bolometre			*/
+	long		bolo_code_util;		/*  le code d'utilisation du bolo		*/
+	long		bolo_bebo;		/*  le type d'acquisition:  0 pour MLPA 10 pour BEBODIFF */
+	long		bolo_num;		/*  l'adresse hard du bolo			*/
+	long		bolo_gain;		/*  le gain du preampli				*/
+	long		bolo_capa;		/*  la valeur capa du modulateur		*/
+	long 		bolo_diviseur;		/*  le diviseur de la compensation		*/
+	long	  	coef[7];		/*  les coef pour le calcul de la température	*/
+	}
+	param_un_bolo;
+/* code_util des bolos  */
+enum{bolo_hors_service,bolo_normal_transmis,bolo_normal_non_transmis,bolo_thermo_simplifie};
+
+	
+typedef struct		/*  		table des parametres de mesure bolometre 		*/
+			/*	cette table ne change pas (en principe) en cours de mesure	*/
+	{
+	long		numero_version;			/*  numero de version du header archeops.h	*/
+	long		n_max_bolo;			/*  nombre maxi de bolos  (divisible par 4)	*/
+	long		n_per_block;			/*  nombre de periodes entieres dans un block	*/
+	long		n_max_mes_per;			/*  nb de points maxi dans une periode complete	*/
+
+	long		nb_bolo;			/*  nombre de bolometres effectivement lut	*/
+	param_un_bolo	bolo[nb_max_bolo];
+	}
+	param_bolo;
+	
+	
+	
+	
+/*	
+	long		bolo_code_util[nb_max_bolo];	
+	char		bolo_nom[nb_max_bolo][32];	
+
+	long		bolo_bebo[nb_max_bolo];		
+	long		bolo_num[nb_max_bolo];		
+	long		bolo_gain[nb_max_bolo];		
+
+	long		bolo_capa[nb_max_bolo];		
+	long 		bolo_diviseur[nb_max_bolo];	
+	
+	long	  	coef[nb_max_bolo][7];		
+
+	long		presence_bebo;			
+	}
+	param_bolo;
+*/
+
+typedef struct				/*	La structure de transfert transputer vers mac	*/  
+	{
+	long		debut;		/*	code de reconnaissance de debut de block	*/
+	long		code1;		/*	code1 du block					*/
+	long		code2;		/*	code2 du block					*/
+
+	param_bolo	param;		/*	les parametres de mesure des bolometres		*/
+
+	long		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_param;			
+	
+
+
+
+/*  -------------------   structures N° 1 :   journal de bord        ---------------------	*/
+/*  -----------------------------------------------------------------------------------------	*/
+#define long_page	10
+typedef struct				  
+	{
+	long		code2;		/* 	code de la ligne du journal			*/
+					/* 	code idem code2 debut de block : 		*/
+					/*  	contient un code de commande			*/
+					/*	et le numero du block lors de la télécommande	*/
+	char		mot[8];		/* 	contenu de la ligne du  journal			*/
+	}
+	ligne_journal;			
+
+
+typedef struct				  
+	{
+	long		debut;		/*	code de reconnaissance de debut de block	*/
+	long		code1;		/*	code1 du block					*/
+	long		code2;		/*	code2 du block					*/
+
+	ligne_journal	jj[long_page];	/*	block de 10 lignes de journal			*/
+
+	long		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_journal;			
+	
+
+/*  ---------   structures N° 2 :  reglage_bolo , regul etc..   --------	*/
+/*  ------------------------------------------------------------------------------------------	*/
+#define	bol_micro_volt(val,gain)	((1e7*(double)val)/(65536.*gain))
+/*  avec  gain = param.bolo_gain[bolo]*gain_ampli(reglage.bolo[bolo])				*/
+		
+
+/* gains 0 .. 15 pour MLPA  ///   gain 16..19  pour BEBO   ///   gain 20..22  pour BEDIF	*/		
+#define	def_gains	double gains_reels[32]={1,2,4,8,10,20,40,80,100,200,400,800,1000,2000,4000,8000,0.5,2.5,10,50,0.93,3.777,18.974};
+		/*			gain bediff    10->9.3    40->37.77     200->189.74		*/
+
+
+/*  les definitions suivantes s'appliquent a une variable de type    reglage.bolo[bol]		*/
+#define		gainbrut(aa)	((char)(((aa).mot1&0x1f)))		
+#define		gain_ampli(aa)	gains_reels[gainbrut(aa)]		
+#define		phase(aa)	((char)(((aa).mot1&0x60)>>5))		
+#define		comm(aa)	((char)(((aa).mot1&0x80)>>7))		
+#define		dac_V(aa)	((int)(((aa).mot1&0xfff00)>>8)	)	
+#define		dac_I(aa)	((int)(((aa).mot1&0xfff00000)>>20))		
+
+#define		voie(aa)	((char)(((aa).mot2&0xff)))		
+#define		dac_T(aa)	((int)(((aa).mot2&0xfff00)>>8))		
+#define		dac_L(aa)	((int)(((aa).mot2&0xfff00000)>>20))		
+
+/*
+#define		bolo_mot1(dacV,dacI,gainbrut,phase,comm)	((gainbrut)&0x1f) | (((phase)&3)<<5) | (((comm)&1)<<7) | (((dacV)&0xfff)<<8) | (((dacI)&0xfff)<<20) 
+#define		bolo_mot2(dacT,dacL,voie)			((voie)&0xff) 	  | (((dacT)&0xfff)<<8) | (((dacL)&0xfff)<<20)
+*/
+
+#define		bolo_mot1(dacV,dacI,gainbrut,phase,comm)	(((long)(gainbrut))&0x1f) | ((((long)(phase))&3)<<5) | ((((long)(comm))&1)<<7) | ((((long)(dacV))&0xfff)<<8) | ((((long)(dacI))&0xfff)<<20) 
+#define		bolo_mot2(dacT,dacL,voie)			(((long)(voie))&0xff) 	  | ((((long)(dacT))&0xfff)<<8) | ((((long)(dacL))&0xfff)<<20)
+
+
+typedef struct	
+	{
+	long	mot1;		/*  dac1 = mot[11..0]; dac2=mot1[23..12]	*/
+				/*  gain = mot1[27..24]; phase = mot1[31..28];	*/
+	long	mot2;		/*  dac3 = mot[11..0]; dac4=mot1[23..12]	*/
+				/*  voie pour reglages auto  = mot2[31..24];	*/
+	}
+	reglage_un_bolo;
+
+
+
+#ifdef programme	/***********   structure normale pour le mac   ****************/
+
+typedef struct	
+	{
+	char	periode;
+	char	nb_mesures;
+	char	temp_mort;
+	char	flag;
+	}
+	horloge;
+
+typedef struct
+	{
+	char	mode;			/*   on_off et deglitch				*/
+	char	num_bolo;		/*   numero du bolo utilisé,	*/
+	char	voie_chauf;		/*   la voie de sortie chauffage		*/
+	char	prop;			/*   zero dans prop -> chauffage=0;		*/
+	char	integ;
+	char 	deriv;
+	short	chauffage;		/* 	valeur effective du chauffage		*/	
+	}
+	regul_bolo;			/*  longueur 2 entiers long			*/
+
+typedef struct
+	{
+	char	mode;
+	char	gain;
+	char	courant;
+	char	delai;
+	}
+	auto_bolo;			/*  longueur 1 entiers long			*/
+
+typedef struct
+	{
+	char	vanne;
+	char	helium;
+	char	chauffage;
+	char	piles;
+	char	transmission;
+	char	temps_max_vanne;
+	char	xx7;
+	char	xx8;
+	}
+	auto_dilu;			/*  longueur 1 entiers long		*/
+
+
+
+#else		/***********  structure swappée pour le transputer   ****************/
+
+typedef struct	
+	{
+	char	flag;
+	char	temp_mort;
+	char	nb_mesures;
+	char	periode;
+	}
+	horloge;
+	
+
+typedef struct
+	{
+	char	prop;			/*   zero dans prop -> chauffage=0;		*/
+	char	voie_chauf;		/*   la voie de sortie chauffage		*/
+	char	num_bolo;		/*   numero du bolo utilisé,	*/
+	char	mode;			/*   on_off et deglitch				*/
+	short	chauffage;		/* 	valeur effective du chauffage		*/	
+	char 	deriv;
+	char	integ;
+	}
+	regul_bolo;			/*  longueur 2 entiers long		*/
+
+
+typedef struct
+	{
+	char	delai;
+	char	courant;
+	char	gain;
+	char	mode;
+	}
+	auto_bolo;			/*  longueur 1 entiers long		*/
+
+typedef struct
+	{
+	char	piles;
+	char	chauffage;
+	char	helium;			/* periode de mesure		*/
+	char	vanne;		
+	char	xx8;
+	char	xx7;
+	char	temps_max_vanne;
+	char	transmission;
+	}
+	auto_dilu;			/*  longueur 1 entiers long		*/
+
+
+#endif		/***********   fin des structures swappées       ****************/
+
+enum{regul_stop,regul_chauffage_null,regul_sans_deglitch,regul_avec_deglitch};
+
+#define bit_piles_5V	1
+#define bit_piles_15V	2
+#define bit_piles_auto	4
+
+enum{vanne_rien,vanne_ferme,vanne_ouvre,vanne_auto_pression,vanne_auto_pression_piles,vanne_auto_pression_piles_temps};
+enum{trans_rien,trans_normal,trans_rapide,trans_lent};
+
+
+typedef struct							/*  long en mot de 32 bit   	*/
+	{
+	horloge			horloge;			/*			1	*/
+	char			vitesse[nb_type_blocks];	/*			5	*/
+	reglage_un_bolo		bolo[nb_max_bolo]; 		/*	18 * 2	= 	36	*/
+	auto_bolo		autom[nombre_de_voies];		/*	6  * 1		6	*/								
+	regul_bolo		regul[nombre_de_regul];		/*	4  * 2	=	8	*/									
+	auto_dilu		dilu;				/*			2	*/
+	}
+	reglage_bolo;						/*	total 58		*/
+
+
+typedef struct				  
+	{
+	long		debut;		/*	code de reconnaissance de debut de block	*/
+	long		code1;		/*	code1 du block					*/
+	long		code2;		/*	code2 du block					*/
+	reglage_bolo	reglage;											
+	long		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_reglage;			
+	
+/*  ---------------------   structures N° 3 :    etat de la dilution	-----------------------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+typedef struct				  
+	{
+	long		debut;		/*	code de reconnaissance de debut de block	*/
+	long		code1;		/*	code1 du block					*/
+	long		code2;		/*	code2 du block					*/
+/*	long		data_dil[50];	 data brutes de la dilution				*/
+	long		switch_dil;
+	long		ADC_dil[48];	/*	la lecture des 48 ADC de la carte DIL		*/
+	long		DAC_dil[4];	/*	les 4 dac de la carte dilution			*/
+	long		DAC_sst[4];	/*	les 4 dac de la carte sst			*/
+	long		gyro_dil[3][nb_per_block*2];	/* les gyros a supprimer		*/
+	long		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_dilution;			
+
+
+/*      signification des bit lus dans switch_dil	*/
+#define	switch_EVF		0x00000080	/*	contact fin de course vanne fermee	*/
+#define	switch_EVO		0x00000040	/*	contact fin de course vanne ouverte	*/
+
+/* les bit suivants sont envoyés par telecommande et relus dans switch_dil	*/
+#define	switch_helium		0x00200000	/*  13: commande sond niveau helium	*/
+#define switch_pile_par_5	0x00100000	/*  12: mise en parallele des piles pour le 5V	*/
+#define switch_pile_par_15	0x00080000	/*  11: mise en parallele des piles pour le 15V	*/
+#define vanne_EVB		0x00008000	/*  7: commande vanne brooks	*/
+#define vanne_EVO		0x00010000	/*  8: commande vanne EVO	*/
+#define vanne_EVV		0x00020000	/*  9: commande vanne EVV	*/
+#define vanne_EVF		0x00040000	/*  10: commande vanne EVF	*/
+#define chauffage1		0x00004000	/*  6: chauffage 1	*/
+#define chauffage2		0x00002000	/*  6: chauffage 1	*/
+#define chauffage3		0x00001000	/*  6: chauffage 1	*/
+#define chauffage4		0x00000800	/*  6: chauffage 1	*/
+#define chauffage5		0x00000400	/*  6: chauffage 1	*/
+#define chauffage6		0x00000200	/*  6: chauffage 1	*/
+#define chauffage7		0x00000100	/*  0: chauffage 7	*/
+
+/*  position des mesures sur les multiplexeurs		*/
+
+enum{
+/* multiplex11..18:*/	mul11_	,mul12_	,p_haut	,p_memb	,t_h1	,t_h4	,t_h3	,t_h2	
+/* multiplex21..28:*/,	mul21_	,mul22	,p_charb,p_R4	,mul25_	,p_C3	,p_R3	,mul28	
+/* multiplex31..38:*/,	mul31_	,p_C4	,p_air	,t_a3	,t_b4	,t_b1	,t_b2	,t_a2	
+/* multiplex41..48:*/,	t_b3	,d_4He	,RP_He	,mul44	,d_3He	,j_he3	,j_he7	,j_he4	
+/* multiplex51..58:*/,	j_he5	,j_he1	,j_he8	,j_he2	,j_he6	,pirani	,mul57	,mul58	
+/* multiplex61..68:*/,	p_m18B	,p_10B	,p_m18D	,mul64	,p_p18B	,p_10T	,p_Ch	,p_p18D		
+	};
+enum{t_a1,t_a4};	/* en attendant de trouver leurs places	*/
+/* reste libres :  mul  11 - 12 - 21 - 22 - 25 - 28 - 31 - 44 - 57 - 58 - 64	*/
+
+
+
+/*  ---------------------   structures N° 4 :     gps           -------------------------------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+
+typedef struct				  
+	{
+	long		debut;		/*	code de reconnaissance de debut de block	*/
+	long		code1;		/*	code1 du block					*/
+	long		code2;		/*	code2 du block					*/
+
+	char		gps[80];	/*      les données GPS (une chaine maxi 80 cara)	*/
+
+	long		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_gps;			
+	
+
+
+/*  ---------------------   structures N° 5 :   tous les bolos 1 periode     	---------------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+typedef struct				  
+	{
+	long		debut;		/*	code de reconnaissance de debut de block	*/
+	long		code1;		/*	code1 du block					*/
+	long		code2;		/*	code2 du block					*/
+	
+	short 		bol_per[nb_max_bolo][nb_max_mes_per];		
+
+	long		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_une_periode;			
+
+/*  ----------------   structures N° 6 :  signals de synchro (pour test au sol)	---------------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+typedef struct				  
+	{
+	long		debut;		/*	code de reconnaissance de debut de block	*/
+	long		code1;		/*	code1 du block					*/
+	long		code2;		/*	code2 du block					*/
+	char		synchro[nb_sync][nb_per_block*2];	
+
+	long		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_synchro_sol;			
+
+/*  ---------------------   structures N° 7 : block de données de pointage sol      -----------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+typedef struct	  
+	{
+	long		debut;		/*	code de reconnaissance de debut de block	*/
+	long		code1;		/*	code1 du block					*/
+	long		code2;		/*	code2 du block					*/
+	char		comment[1024];
+	long		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_pointage_sol;			
+
+
+
+/*  -------------   structures N° 8 :   données brutes des bolometres    ----------------------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+typedef struct				  
+	{
+	long		debut;		/*	code de reconnaissance de debut de block	*/
+	long		code1;		/*	code1 du block					*/
+	long		code2;		/*	code2 du block					*/
+					/*	pour chaque bolo, un vecteur 72 points		*/
+	long		data_bolo[nb_max_bolo][nb_per_block*2];	
+					/*	data D.S.	(en mots de 32 bits)		*/
+	long		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_bolo;			
+
+/*  ---------------------   structures N° 9 :   données des gyroscopes et du magnétometre	*/
+/*  -----------------------------------------------------------------------------------------	*/
+typedef struct				  
+	{
+	long		debut;		/*	code de reconnaissance de debut de block	*/
+	long		code1;		/*	code1 du block					*/
+	long		code2;		/*	code2 du block					*/
+					/* chaque gyro: un vecteur tde 72 valeurs		*/
+	long		gyros[3][nb_per_block*2];
+	long		magneto[3];	/*	1 bit par echantillonage soit 3*32bit>72	*/
+	long		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_gyro;			
+
+/*  ---------------------   structures N° 10 :   données senseur stellaire	  -----------	*/
+/*  -----------------------------------------------------------------------------------------	*/
+typedef struct				  
+	{
+	long		debut;		/*	code de reconnaissance de debut de block	*/
+	long		code1;		/*	code1 du block					*/
+	long		code2;		/*	code2 du block					*/
+	long		sst[nb_per_block*2][18];
+					/* chaque mesure: un paquet de 18 mots de 32 bits	*/
+	long		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_sst;			
+
+/*  ---------------------   structures N° 11 :    rien		          -----------		*/
+/*  -----------------------------------------------------------------------------------------	*/
+typedef struct				  
+	{
+	long		debut;		/*	code de reconnaissance de debut de block	*/
+	long		code1;		/*	code1 du block					*/
+	long		code2;		/*	code2 du block					*/
+	long		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type11;			
+
+/*  ---------------------   structures N° 12 :  data bolo apres compression sur 7 bit	 ------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+typedef struct				  
+	{
+	long		debut;		/*	code de reconnaissance de debut de block	*/
+	long		code1;		/*	code1 du block					*/
+	long		code2;		/*	code2 du block					*/
+					/*  	nombre de mots = nb valeurs/4 +1		*/
+					/*	pour chaque bolo, un vecteur  19 mots		*/
+	long		data_bolo[nb_bolo_util][ (nb_per_block/2) +1 ];
+
+	long		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_bolo_comprime;			
+
+/*  ---------------------   structures N° 13 :    block_type_gyro_comprime	-----------	*/
+/*  -----------------------------------------------------------------------------------------	*/
+typedef struct				  
+	{
+	long		debut;		/*	code de reconnaissance de debut de block	*/
+	long		code1;		/*	code1 du block					*/
+	long		code2;		/*	code2 du block					*/
+					/*  	nombre de mots = nb valeurs/4 +1		*/
+	long		gyro[3][ (nb_per_block/2) +1 ];
+	long		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_gyro_comprime;			
+
+/*  ---------------------   structures N° 14 :    block_type_sst_comprime	-----------	*/
+/*  -----------------------------------------------------------------------------------------	*/
+typedef struct				  
+	{
+	long		debut;		/*	code de reconnaissance de debut de block	*/
+	long		code1;		/*	code1 du block					*/
+	long		code2;		/*	code2 du block					*/
+					/*	pour chaque diode, un vecteur  11 mots		*/
+	long		sst[nb_photo_diodes] [(nb_per_block*2/7) +1 ];
+	long		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_sst_comprime;			
+
+
+
+/*  ---------------------   structures N° 15 : catalog_flash      -------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+
+typedef struct	  			/*	etat de l'enregistreur				*/
+	{
+	long		nb_total_catalog;
+	long		memoire_libre;
+	long		nb_block_erreur;
+	}status_flash;
+
+typedef struct	  
+	{
+	long		debut;		/*	code de reconnaissance de debut de block	*/
+	long		code1;		/*	code1 du block					*/
+	long		code2;		/*	code2 du block					*/
+	
+	long		commande;	/*	la commande a laquelle ce catalog repond	*/
+	status_flash	status;		/*	etat de l'enregistreur				*/
+	long		nombre;		/*							*/
+	long		code[nb_element_catalog];	/* code type et numero			*/
+	long		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_catalog_flash;			
+
+
+/*  ---------------------   structures N° 16 :    cmd_flash		    -----------		*/
+/*  -----------------------------------------------------------------------------------------	*/
+typedef struct				  
+	{
+	long		debut;		/*	code de reconnaissance de debut de block	*/
+	long		code1;		/*	code1 du block					*/
+	long		code2;		/*	code2 du block					*/
+	long		commande;	/*	type de commande a l'enregistreur flash		*/
+	long		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_cmd_flash;			
+
+enum	{flash_catalog_auto,flash_catalog_debut,flash_catalog_fin,flash_catalog_precedent,flash_catalog_suivant
+		,flash_efface_tout1,flash_efface_tout2,flash_efface_tout3
+		,flash_efface_util1,flash_efface_util2,flash_efface_util3};
+
+
+/*  ---------------------   structures N° 17 : block brut de données ctb pour test      -------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+typedef struct	  
+	{
+	long		debut;		/*	code de reconnaissance de debut de block	*/
+	long		code1;		/*	code1 du block					*/
+	long		code2;		/*	code2 du block					*/
+#ifdef	transmet_data_brute
+	char		data[nb_per_block*nb_max_mes_per*nb_byte_mot];
+#endif
+	long		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_data_brute;			
+
+/*  ---------------------   structures N° 18 : block  vide pour l'instant	      -------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+typedef struct	  
+	{
+	long		debut;		/*	code de reconnaissance de debut de block	*/
+	long		code1;		/*	code1 du block					*/
+	long		code2;		/*	code2 du block					*/
+	long		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_18;			
+
+/*  ---------------------   structures N° 19 : block  vide pour l'instant	      -------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+typedef struct	  
+	{
+	long		debut;		/*	code de reconnaissance de debut de block	*/
+	long		code1;		/*	code1 du block					*/
+	long		code2;		/*	code2 du block					*/
+	long		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_19;			
+
+
+
+/*  ---------   block  modele  (plus gros que tous les autres pour reservation memoire)   ----  */
+/*  -----------------------------------------------------------------------------------------	*/
+
+typedef struct				/*	La structure de transfert transputer vers mac	*/  
+	{
+	long		debut;		/*	code de reconnaissance de debut de block	*/
+	long		code1;		/*	code1 du block					*/
+	long		code2;		/*	code2 du block					*/
+	long		mot[(taille_maxi_block_archeops)/4];
+	long		fin;		/* code de reconnaissance de fin de block		*/
+	}
+	block_type_modele;			
+
+
+
+
+
+/*==============================================================================================*/
+/*==============================================================================================*/
+/*  --------------  définitions permettant de travailler sur les blocks Archeops   -----------  */
+/*==============================================================================================*/
+/*==============================================================================================*/
+
+
+
+enum	{block_param,block_journal,block_reglage,block_dilution,
+	block_gps,block_une_periode,block_synchro_sol,block_pointage_sol,
+	block_bolo,block_gyro,block_sst,block_11,
+	block_bolo_comprime,block_gyro_comprime,block_sst_comprime,block_catalog_flash,
+	block_cmd_flash,block_data_brute,block_18,block_19};
+
+
+#define	def_nom_block	char nom_block[nb_type_blocks][32]={"block_param","block_journal","block_reglage","block_dilution",\
+					"block_gps","block_une_periode","block_synchro_sol","block_pointage_sol",\
+					"block_bolo","block_gyro","block_sst","block_11",\
+					"block_bolo_comprime","block_gyro_comprime","block_sst_comprime","block_catalog_flash",\
+					"block_cmd_flash","block_data_brute","",""};
+
+
+#define	def_long_block	int long_block[nb_type_blocks]={sizeof(block_type_param),sizeof(block_type_journal),sizeof(block_type_reglage),sizeof(block_type_dilution),\
+					sizeof(block_type_gps),sizeof(block_type_une_periode),sizeof(block_type_synchro_sol),sizeof(block_type_pointage_sol),\
+					sizeof(block_type_bolo),sizeof(block_type_gyro),sizeof(block_type_sst),sizeof(block_type11),\
+					sizeof(block_type_bolo_comprime),sizeof(block_type_gyro_comprime),sizeof(block_type_sst_comprime),sizeof(block_type_catalog_flash),\
+					sizeof(block_type_cmd_flash),sizeof(block_type_data_brute),sizeof(block_type_18),sizeof(block_type_19)};
+
+
+
+
+
+/*   le code du block contient  8  bit de type							*/
+/*				24 bit pour le numero du block(horloge locale)			*/
+/*				12 bit pour la longueur du block  (en octet)			*/
+/*				16 bit pour la somme de test de la validité du block		*/
+
+/*  les define suivants doivent etre utilisés pour tester le type des blocks et les verifier	*/
+
+
+#define longueur_block(_bk)	( (int) ((_bk)->code1>>16) 	& 0xffff )	
+#define somme_block(_bk)	( (int)  (_bk)->code1		& 0xffff )
+
+#define type_block(_bk)		( (int) ((_bk)->code2>>24)	& 0xff )
+#define numero_block(_bk)	( (int)  (_bk)->code2		& 0xffffff )
+
+/* ce define cree le mot de controle de somme des blocks et de les verifier a la reception	*/
+
+
+/*==============================================================================================*/
+/*==============================================================================================*/
+/*  -----------------  fonctions utilitaires de gestion des blocks Archeops   ----------------  */
+/*==============================================================================================*/
+/*==============================================================================================*/
+
+
+/* -------------------------------------------------------------------------------------------- */
+/* les fonctions suivantes sont des utilitaires permettant la gestion des blocks archeops	*/
+/* il faut inclure une seule fois le header archeops.h précéde de :				*/
+/*			 #define utilitaires_de_block_archeops 					*/
+/* -------------------------------------------------------------------------------------------- */
+
+
+/* ----------------------------   prototypes des fonctions	 ------------------------------ */
+/* -------------------------------------------------------------------------------------------- */
+
+
+/* 	cette fonction calcule le code de somme pour le controle de parité des blocks		*/
+
+int	calcul_somme_block(block_type_modele* blk,int longueur);
+
+
+
+
+
+/* 	cette fonction est a apeller lors de la création d'un block apres l'avoir rempli	*/
+/*	elle permet de creer tous les mots de controle du block					*/
+
+void	valide_block(block_type_modele* blk,int type,int block_num);
+
+
+
+/* 	cette fonction est a apeller pour vérifier la validité d'un block			*/
+/*	elle retourne 0 si le block est correct et sinon, un code d'erreur			*/
+/*	la seconde fonction sort les erreurs a l'ecran						*/
+
+int	verifie_block(block_type_modele* blk);
+int	verifie_block_printf(block_type_modele* blk);
+
+enum	{block_correct,block_type_inconnu,block_longueur_erreur,block_somme_erreur
+		,block_debut_erreur,block_fin_erreur};
+
+/* 	cette fonction transforme un char (sur 8 bit) en double avec une echelle logarythmique	*/
+/*	elle est en particulier utilisée pour calculer les coef de la regul			*/
+
+double	val_double(char x);
+
+/* 	cette fonction transforme un char (sur 8 bit) en entier long (echelle logarythmique)	*/
+/*	elle est en particulier utilisée pour fixer le courant sur les bolometres		*/
+
+unsigned long	val_long(char x);
+
+int	new_val_dac(int a,char  code); 
+
+
Index: /trunk/Poubelle/archediab.old/choix_acquisition.h
===================================================================
--- /trunk/Poubelle/archediab.old/choix_acquisition.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/choix_acquisition.h	(revision 637)
@@ -0,0 +1,44 @@
+//---------------------       chemins d'acces à la ressource    -------------------------
+//---------------------------------------------------------------------------------------
+#define chemin_ressource	""
+//#define chemin_ressource	"Aude_et_Alain:archediab_23"
+
+//-------------------------   type d'acquisition         --------------------------------
+//---------------------------------------------------------------------------------------
+
+
+//#define _planck  		//  Acquisition Planck  (carte CTB )
+#define _archeops		//  Acquisition Archeops (avec transputer) 
+//#define _diabolo		//  Acquisition Diabolo 
+
+//#define	transmet_data_brute	// pour test en mode planck					
+
+//---------------------   lecture des data du telescope     -----------------------------
+//---------------------------------------------------------------------------------------
+
+//#define lire_les_donnees_POM2    		
+//#define lire_le_numero_de_scan_iram
+//#define lire_les_noms_sources_IRAM
+//#define lire_les_data_telescope_IRAM
+
+//---------------------         adresse de la carte PCI     -----------------------------
+//---------------------------------------------------------------------------------------
+
+
+#ifdef _archeops	//---------   pour  Archeops    ---------------------------------
+#define Adresse_base_PCI	0x83000000	// G3 Archeops optique
+#endif
+
+
+
+#ifdef _planck		//---------   pour  Planck    -----------------------------------
+//#define Adresse_base_PCI	0x83000000	// G3 Archeops optique
+#define Adresse_base_PCI	0x81000000	// G3 Archeops optique
+#endif
+
+
+#ifdef _diabolo		//---------   pour  Diabolo    ----------------------------------
+#define Adresse_base_PCI	0x81000000	// power diabolo
+//#define Adresse_base_PCI	0x83000000	// G3 Archeops sans optique
+//#define Adresse_base_PCI	0x84000000	// diabolo dans G3 Archeops avec optique
+#endif		
Index: /trunk/Poubelle/archediab.old/choix_param.h
===================================================================
--- /trunk/Poubelle/archediab.old/choix_param.h	(revision 637)
+++ /trunk/Poubelle/archediab.old/choix_param.h	(revision 637)
@@ -0,0 +1,48 @@
+
+#define	 bitmot			24		// nb de bit horloge dans un mot ADC
+
+#define max_nb_donne		1000L		// nombre maxi de donne dans un bloc du fichier DIA
+#define	temps_max_fichier	300		// durée maxi d'un fichier (5 minutes) 
+
+#define	long_table_err		1000		// longueur de la table d'erreur de dialogue avec les interruptions		
+
+//   le define de nb_sync  dans le fichier archeops.h
+//#define  nb_sync		6		//  1 synchro diode + 5 synchro externes
+enum {sync_diode,sync_scan,sync_subscan,sync_coupole,sync_status,sync_blanking};
+
+//  mit 50 et 10  au lieu de  500  et  100
+#define   longueur_table_tm	50		// nb de blocks dans la table pour transmettre les télémesures
+#define   longueur_table_tc	10		// nb de datas dans la table de télécommandes
+
+
+//------------   longueur buffer et longueur des blocs dans le fichier    ---------------
+//---------------------------------------------------------------------------------------
+
+
+//*****************************************************************************************
+//											***
+#ifdef _archeops	//---------   pour  Archeops    ------------------------------	***
+//											***
+//*****************************************************************************************
+
+#endif		//--------------------------------------------------------------------	***
+
+//*****************************************************************************************
+//											***
+#ifdef _diabolo			//---------   pour  Diabolo    ------------------------------	***
+//											***
+//*****************************************************************************************
+
+//----------------------------   frequence d'horloge  --------
+//---------------------------------------------------------------------------------------
+
+#define  ofset_periode 0			// pas d'offset
+#define  frequ_horloge_interne	15.		// (quartz 60 MHz divisé par 4)
+#define  frequ_horloge_externe	15.		// mettre le géné à 15 MHz
+#define  frequ_divise		3.		// diviseur par 3
+
+//*****************************************************************************************
+//											***
+#endif		//--------------------------------------------------------------------	***
+//											***
+//*****************************************************************************************
