Index: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/acqui_util.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/acqui_util.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/acqui_util.c	(revision 646)
@@ -0,0 +1,420 @@
+#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" 
+#include "bit_block.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;}
+
+gg->reglage=reglage_standard[0];
+
+for(j=0;j<nb_max_bolo;j++) 
+		{
+//		parametr.bolo[j].bolo_code_util=0;
+//		strcpy(parametr.nom_coef[parametr.bolo[j].numero_nom_coef].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	920+erreur_bit_erreur	: printf(" bit_erreur");break;
+			case	920+erreur_bit_vide	: printf(" bit_vide");break;
+			case	920+erreur_type		: printf(" bit_type_erreur");break;
+			case	920+erreur_longueur	: printf(" bit_erreur_longueur");break;
+			case	920+erreur_somme	: printf(" bit_erreur_somme");break;
+			case	920+erreur_fin		: printf(" bit_erreur_fin");break;
+			case	920+cherche_debut	: printf(" bit_cherche_debut");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 ou (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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/acquisition_archeops.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/acquisition_archeops.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/acquisition_archeops.c	(revision 646)
@@ -0,0 +1,387 @@
+#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
+	static int mon_num_block;
+	if(mon_num_block!=numero_block(blk_tm))
+		{
+		mon_num_block=numero_block(blk_tm);
+		printf("\n%d ->",mon_num_block);
+		}
+	printf(" %s  ",nom_block[type_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 :		traite_block_bolo((block_type_bolo*)blk_tm);			break;
+	case block_bolo_comprime :	traite_block_bolo_comprime((block_type_bolo_comprime*)blk_tm);	break;	
+	
+	case block_sst :		traite_block_sst((block_type_sst*)blk_tm);			break;
+	case block_sst_comprime  :	traite_block_sst_comprime((block_type_sst_comprime*)blk_tm);	break;
+
+	case block_gyro :		traite_block_gyro((block_type_gyro*)blk_tm);			break;
+	case block_gyro_comprime  :	traite_block_gyro_comprime((block_type_gyro_comprime*)blk_tm);	break;
+	
+	case block_synchro_sol :	traite_block_synchro_sol((block_type_synchro_sol*)blk_tm);	break;
+	
+	case block_status_flash :	printf("******************status flash recut  ********************* \n");son(133);			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;
+// 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,jc;
+#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((long *)blk->data_bolo[j],blk2->data_bolo[j],nb_per_block*2);
+		}
+*/
+jc=0;for(j=0;j<nb_max_bolo;j++)	 // jc = bolo_comprime  //   j=bolo normal
+		{
+		if( (parametr.bolo[j].bolo_code_util==bolo_normal_transmis) &&  (jc<nb_bolo_util)  )
+			{
+			decompress_7_2((long *)blk->data_bolo[jc],blk2->data_bolo[j],nb_per_block*2);
+			jc++;
+			}
+		}
+/*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)&1)
+
+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]=blk_sync2.synchro[i][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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/acquisition_diabolo.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/acquisition_diabolo.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/acquisition_diabolo.c	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/acquisition_general.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/acquisition_general.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/acquisition_general.c	(revision 646)
@@ -0,0 +1,251 @@
+#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_flash :	
+	case e_telemesure :	{
+				long ll=(long)(&(gg->reglage.dilu.transmission))-(long)(&(gg->reglage.dilu));
+    				int a=(int) (litD(fenetre_acquisition,e_flash,0)-1);
+    				a=a<<4;
+    				a=a + (int) (litD(fenetre_acquisition,e_telemesure,0)-1);
+    				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_helium	: 	{
+				long ll=(long)(&(gg->reglage.dilu.helium))-(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_cmd	:	emission_tc_reduite(tc2_horloge,tc3_commande,(int) valeur);
+    				ecritD(fen,e_cmd,0);
+    				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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/auto.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/auto.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/auto.c	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/bit_block.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/bit_block.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/bit_block.c	(revision 646)
@@ -0,0 +1,197 @@
+#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"
+#include "choix_param.h"
+#include "structure.h"
+#include "tm.h"
+#include "tache.h"
+#include "bolo.h"
+#include "carte_acqui.h"
+#include "carte_pci.h"
+ 
+
+#define	cadence_taux	16
+#define mode_acquisition	0x00	//0xff en mode inverse, 0x00 en mode normal
+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;
+unsigned long	taux;
+unsigned long	Nvide, Nplein;
+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()^mode_acquisition;
+	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);
+								
+								
+							}
+							*/
+							
+//							else	ecrit_erreur_bit(bloc_correct);	
+								
+							deb=0;
+							Nplein=compteur+1;
+							compteur=0;
+							//Calcul du taux de remplissage
+							taux=taux+(((0xffff-taux)*Nplein)>>cadence_taux);
+							tt->nb_lec_fofo_ext=((taux*1000)>>cadence_taux);
+							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(compteur>1000)
+			{
+				Nvide=compteur;
+				compteur=0;
+				taux=taux-((taux*Nvide)>>cadence_taux);
+				tt->nb_lec_fofo_ext=((taux*1000)>>cadence_taux);
+			}	
+			if(buffer==debut_block_mesure)
+			{
+				deb=1;
+				Nvide=compteur-32;
+				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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/bolo.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/bolo.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/bolo.c	(revision 646)
@@ -0,0 +1,289 @@
+#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->aspect=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;
+//				printf(" nb mesure = %d \n",n);
+					{
+					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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/carte.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/carte.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/carte.c	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/compress.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/compress.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/compress.c	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/config_transputer.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/config_transputer.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/config_transputer.c	(revision 646)
@@ -0,0 +1,55 @@
+SUPPRIME DU PROGRAMME
+
+#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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/corel.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/corel.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/corel.c	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/courbeVI.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/courbeVI.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/courbeVI.c	(revision 646)
@@ -0,0 +1,195 @@
+#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];
+def_gains
+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;
+				printf(" posi=%d \n",posi);
+				if(posi>=25) {son(133);posi=0;tachedefond(fen,-1);} 						 
+
+				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)-xbolbrut(j))*1e-3;
+					//  corrigée du déséquilibre  en  µV puis transformé en 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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/decompress.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/decompress.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/decompress.c	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/diabolo.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/diabolo.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/diabolo.c	(revision 646)
@@ -0,0 +1,168 @@
+#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.nom_coef[parametr.bolo[j].numero_nom_coef].bolo_nom);
+			if(parametr.bolo[j].bolo_code_util)
+				{
+				sprintf(ss,"%d: %s",j+1,parametr.nom_coef[parametr.bolo[j].numero_nom_coef].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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/dilution.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/dilution.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/dilution.c	(revision 646)
@@ -0,0 +1,401 @@
+#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  cnt_temperature(i)	(20+(int)val_temperature(blk->ADC_dil[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_moteur_dilution(int valeur);	// valeur sur 10 bit: poid fort=on/off
+
+void  ecrit_moteur_dilution(int valeur)
+{
+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
+i=i& 0x003fffff;
+i = i| ( (valeur & 0x3ff)<<22);
+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);
+}
+
+
+//   fonction ecrit un bit des switch dilution
+//  c'est une telecommande normale 64 bit  a supprimer
+// la telecommande passe a travers le transputer sans etre traitee par lui
+//  elle arrive directement sur l'EPLD
+
+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);
+}
+
+//   fonction ecrit un  des dac dilution
+//  c'est une telecommande normale 64 bit  a supprimer
+// la telecommande passe a travers le transputer sans etre traitee par lui
+//  elle arrive directement sur l'EPLD
+
+void  ecrit_dac_dilution(void);
+
+void  ecrit_dac_dilution(void)
+{
+char mot_tc[10];
+int k;
+unsigned long i,j;
+i=litD(fenetre_dilution,dil_dac_1,0); // les 2 bits adresse du dac
+i=i<<14; i+=litD(fenetre_dilution,dil_dac_2,0);	// les 12 bits valeur du dac
+// ranger les bits a l'envers;
+j=0; for(k=0;k<16;k++)	{j=(j<<1) | (i&1);i=i>>1;}
+mot_tc[0]=tc_dac_dil;
+mot_tc[1]=(j)&0xff;
+mot_tc[2]=(j>>8)&0xff;
+mot_tc[3]=0;
+mot_tc[4]=0;
+mot_tc[5]=0;
+mot_tc[6]=0;
+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;
+    
+//    case dil_dac_1 :
+//   case dil_dac_2 :
+//   case dil_envoi_dac :	ecrit_dac_dilution(); 	break;
+   	case dil_envoi_dac :	ecrit_moteur_dilution((int)litD(fenetre_dilution,dil_dac_2,0));	// les 12 bits
+				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));
+
+
+#define	c(j,i)		(1e-4*(double)parametr.nom_coef[parametr.bolo[j].numero_nom_coef].coef[i])	
+
+// les temperatures sur les cartes modifiées
+{
+double I,V,R[8],llR;
+int j,k;
+def_gains;
+k=0;
+
+for(j=0;(j<nb_max_bolo) && (k<4);j++)
+	{
+	if(parametr.bolo[j].bolo_code_util==bolo_thermo_simplifie)
+		{
+		I = 1e-3 * (double)dac_V(gg->reglage.bolo[j]) * 2441. / parametr.bolo[j].bolo_capa;	//	I en µA
+		V=0.001*bol_micro_volt(blk->temperature[k],(double)parametr.bolo[j].bolo_gain*gain_ampli(gg->reglage.bolo[j]));
+		if(I>0.0000001)		R[k]=V/I;	else	R[k]=0;				//	R  en 
+ //------  calcul de l'etalonnage en temperature des cartes temperature simplifiées  
+ // j=numero de bebo	T[k] = R[k+4] en Kelvin
+		if ((R[k]-c(j,6))>1.) 
+			{if((log(R[k]-c(j,6))-c(j,0))>0.001) llR= log(log(R[k]-c(j,6))-c(j,0)) ; else llR=0;} 
+		else llR=0;
+		R[k+4]	= exp( 	c(j,1) + c(j,2)* llR + c(j,3)* llR* llR + c(j,4)* llR* llR* llR + c(j,5)* llR* llR* llR* llR) ; 
+		if(R[k+4]>9999) R[k+4]=9999;
+		k++;		
+		}
+	}
+
+
+if(R[0]<90.)	ecritD(fenetre_dilution,dil_temp
+	, "ge=%6.2f 4K=%6.2f 1.6K=%6.2f 10K=%6.2f\rge= %6.3fK  4K=%6.2fK 1.6K=%6.2fK 10K=%6.2fK "
+		,R[0],R[1],R[2],R[3],R[4],R[5],R[6],R[7]);
+else	ecritD(fenetre_dilution,dil_temp
+	,"ge=%6.3fk 4K=%6.2f 1.6K=%6.2f 10K=%6.2f\rge= %6.3fmK 4K=%6.2fK 1.6K=%6.2fK 10K=%6.2fK "
+	,R[0]*0.001,R[1],R[2],R[3],R[4]*1000.,R[5],R[6],R[7]);
+
+
+if(litD(fenetre_dilution,dil_trace_tempe,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_temperature_dil)) 
+			{
+			nouveauD(fenetre_temperature_dil,0,"temperature_dil",0);
+			selectgra(fenetre_temperature_dil);
+			strcpy(graph->xtitre,"minutes");
+			}
+	tracen(fenetre_temperature_dil,8,minutes,R);
+	}
+}
+
+// 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(blk->ADC_dil[ p_R3])  -1.6	//	200 bars pour 5V et 1.6 bar d'offset
+	,2. 	* 	val_multiplex(blk->ADC_dil[ d_3He])		//  10 MICRO MOLES  pour  5V
+	,20. 	*	val_multiplex(blk->ADC_dil[ 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(blk->ADC_dil[ p_R4])		//	200 bars pour 5V
+	,8. 	* 	val_multiplex(blk->ADC_dil[ d_4He])		//  40 MICRO MOLES  pour  5V
+//	,4. 	* 	val_multiplex(blk->ADC_dil[ d_4He])		//  20 MICRO MOLES  pour  5V
+	,20. 	*	val_multiplex(blk->ADC_dil[ 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(blk->ADC_dil[ p_air]),20.*val_multiplex(blk->ADC_dil[ p_charb])
+	,0.2*val_multiplex(blk->ADC_dil[ p_memb]),0.2*val_multiplex(blk->ADC_dil[ 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(blk->ADC_dil[ p_10T]),3.90*val_multiplex(blk->ADC_dil[ p_p18D]),3.90*val_multiplex(blk->ADC_dil[ p_m18D])
+	,2.03*val_multiplex(blk->ADC_dil[ p_10B]),3.90*val_multiplex(blk->ADC_dil[ p_p18B]),3.90*val_multiplex(blk->ADC_dil[ p_m18B])
+	,3.8*val_multiplex(blk->ADC_dil[ 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(blk->ADC_dil[ p_10T])-5.3)));
+ecritD(fenetre_dilution,dil_p_p18D,(int)(17*(3.90*val_multiplex(blk->ADC_dil[ p_p18D])-15.3)));
+ecritD(fenetre_dilution,dil_p_m18D,(int)(17*(-3.90*val_multiplex(blk->ADC_dil[ p_m18D])-15.3)));
+ecritD(fenetre_dilution,dil_p_10B,(int)(17*(2.03*val_multiplex(blk->ADC_dil[ p_10B])-5.3)));
+ecritD(fenetre_dilution,dil_p_p18B,(int)(17*(3.93*val_multiplex(blk->ADC_dil[ p_p18B])-15.3)));
+ecritD(fenetre_dilution,dil_p_m18B,(int)(17*(-3.93*val_multiplex(blk->ADC_dil[ p_m18B])-15.3)));
+ecritD(fenetre_dilution,dil_p_Ch,(int)(10*(3.8*val_multiplex(blk->ADC_dil[ 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(blk->ADC_dil[ t_h1]),val_temperature(blk->ADC_dil[ t_h2]),val_temperature(blk->ADC_dil[ t_h3]),val_temperature(blk->ADC_dil[ t_h4])
+	,val_temperature(blk->ADC_dil[ t_b1]),val_temperature(blk->ADC_dil[ t_b2]),val_temperature(blk->ADC_dil[ t_b3]),val_temperature(blk->ADC_dil[ 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(blk->ADC_dil[ 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(blk->ADC_dil[ 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(blk->ADC_dil[ 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(blk->ADC_dil[ 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(blk->ADC_dil[ i]));
+	ecritT(fenetre_dilution_lecture_brute,fin_f,"\n");
+	}
+// lecture des sondes de niveau helium
+
+
+	{
+	double y[8];
+	static int niveau_pre;
+	int niveau,fin;
+//	printf("dilution :  numero de block = %d  \n",numero_block(blk));
+	changecontrole(fenetre_dilution,dil_niveau_helium,idem,idem,idem,idem,calrefcon(0,0,rouge,blanc,blanc),"");
+	y[0]=val_multiplex(blk->ADC_dil[ j_he1])-calib(dil_j_he1);
+	y[1]=val_multiplex(blk->ADC_dil[ j_he2])-calib(dil_j_he2);
+	y[2]=val_multiplex(blk->ADC_dil[ j_he3])-calib(dil_j_he3);
+	y[3]=val_multiplex(blk->ADC_dil[ j_he4])-calib(dil_j_he4);
+	y[4]=val_multiplex(blk->ADC_dil[ j_he5])-calib(dil_j_he5);
+	y[5]=val_multiplex(blk->ADC_dil[ j_he6])-calib(dil_j_he6);
+	y[6]=val_multiplex(blk->ADC_dil[ j_he7])-calib(dil_j_he7);
+	y[7]=val_multiplex(blk->ADC_dil[ j_he8])-calib(dil_j_he8);
+	if(blk->switch_dil & switch_helium)
+		{
+		changecontrole(fenetre_dilution,dil_niveau_helium,idem,idem,idem,idem,calrefcon(0,0,rouge,blanc,blanc),"");
+		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),"");
+		if(niveau<niveau_pre)	niveau_pre=0;
+		else	{niveau_pre=niveau;	ecritD(fenetre_dilution,dil_niveau_helium,niveau);}
+//		printf("niveau=%d \n",niveau);
+		}
+	else	changecontrole(fenetre_dilution,dil_niveau_helium,idem,idem,idem,idem,calrefcon(0,0,vert,blanc,blanc),"");
+
+	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);
+		}
+	}
+
+}
+
+
Index: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/fichier.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/fichier.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/fichier.c	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/fichier_archeops.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/fichier_archeops.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/fichier_archeops.c	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/fichier_diabolo.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/fichier_diabolo.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/fichier_diabolo.c	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/fichier_relit_ARCH.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/fichier_relit_ARCH.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/fichier_relit_ARCH.c	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/fichier_relit_DIA2.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/fichier_relit_DIA2.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/fichier_relit_DIA2.c	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/fichier_telescope.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/fichier_telescope.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/fichier_telescope.c	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/fourier.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/fourier.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/fourier.c	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/fourier_diabolo.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/fourier_diabolo.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/fourier_diabolo.c	(revision 646)
@@ -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.nom_coef[parametr.bolo[j].numero_nom_coef].bolo_nom,mm);
+		if(strlen(ss)<200)	sprintf(ss+strlen(ss),"%s: %5.1f nV\r",parametr.nom_coef[parametr.bolo[j].numero_nom_coef].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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/foyer.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/foyer.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/foyer.c	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/gyroscope.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/gyroscope.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/gyroscope.c	(revision 646)
@@ -0,0 +1,67 @@
+#include "diabolo.h" 
+#include "gyroscope.h" 
+#include "compress.h" 
+
+
+
+//--------------------  fonction  exec  de  la  fenetre : gyroscope  -------------------------------
+
+
+void exec_gyroscope(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;
+    default  :   break;
+    }
+}
+
+
+
+
+
+void	traite_block_gyro_comprime(block_type_gyro_comprime* blk)
+{
+int i;
+block_type_gyro  bk_gyro;
+block_type_gyro* blk2=& bk_gyro;
+if(!fenetre(fenetre_gyroscope)) return;
+//printf("***************   decompress data gyro \n");
+for(i=0;i<3;i++)	decompress_7_2((long *)blk->gyro[i],blk2->gyro[i],nb_per_block*2);
+blk2->code1=blk->code1;
+blk2->code2=blk->code2;
+traite_block_gyro(blk2);
+}
+
+
+void	traite_block_gyro(block_type_gyro* blk)
+{
+int k;
+double	y[15];
+
+int temps_cntl;
+double secondes;
+
+if(!fenetre(fenetre_gyroscope)) return;
+
+for(k=0;k<72;k++)
+	{
+	y[0]=blk->gyro[0][k];
+	y[1]=blk->gyro[1][k];
+	y[2]=blk->gyro[2][k];
+		
+//	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_gyroscope,3,secondes,y);
+//	printf("secondes=%g\n",secondes);
+	}
+}
+
+
Index: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/menu.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/menu.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/menu.c	(revision 646)
@@ -0,0 +1,128 @@
+#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"
+#include "gyroscope.h"
+
+
+void ferme_annexe(void);
+
+int j,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	:	for(j=0;j<8;j++) printf(" tracetout %d = %d \n",j,gg->trace_tout[j]);
+								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);
+								if(fenetre(fenetre_gyroscope)) select(fenetre_gyroscope);
+								else	ouvreD(fenetre_gyroscope,0,"fenetre_gyroscope",exec_gyroscope);
+								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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/mesures_bolo.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/mesures_bolo.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/mesures_bolo.c	(revision 646)
@@ -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.nom_coef[parametr.bolo[fen-1].numero_nom_coef].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.nom_coef[parametr.bolo[fen-1].numero_nom_coef].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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/onde.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/onde.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/onde.c	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/parametres.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/parametres.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/parametres.c	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/pointage.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/pointage.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/pointage.c	(revision 646)
@@ -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.nom_coef[parametr.bolo[bolo-1].numero_nom_coef].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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/rafraichis_fenetre.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/rafraichis_fenetre.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/rafraichis_fenetre.c	(revision 646)
@@ -0,0 +1,90 @@
+#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_telemesure,1+(0x0f & (int)gg->reglage.dilu.transmission));
+	ecritD(fenetre_acquisition,e_flash,1+((0x30 & (int)gg->reglage.dilu.transmission)>>4));
+
+	// 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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/reglage.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/reglage.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/reglage.c	(revision 646)
@@ -0,0 +1,236 @@
+#include "diabolo.h"
+#include "reglage.h"
+
+#define uc(iii)   (((long)(iii))&0xff)
+#define us(iii)   (((long)(iii))&0xffff)
+
+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);
+
+/***********   structure normale pour le mac   ****************/
+ecritT(fenetre_fichier_archeops_c,insert_f,"#ifdef programme\n");
+
+/*  ecrit horloge    */
+ecritT(fenetre_fichier_archeops_c,insert_f,"{%d,%d,%d,%d},{\n",uc(gg->reglage.horloge.periode),uc(gg->reglage.horloge.nb_mesures)
+		,uc(gg->reglage.horloge.temp_mort),uc(gg->reglage.horloge.flag));
+
+
+/* ecrit 	reglage_un_bolo  : 2 mots long */
+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");
+
+/* ecrit auto_bolo  4 char */	
+for(i=0;i<nombre_de_voies;i++)
+	{if(i>0) ecritT(fenetre_fichier_archeops_c,insert_f,",{%d,%d,%d,%d}\n",uc(gg->reglage.autom[i].mode),uc(gg->reglage.autom[i].gain),uc(gg->reglage.autom[i].courant),uc(gg->reglage.autom[i].delai)); 
+			else	ecritT(fenetre_fichier_archeops_c,insert_f,"{%d,%d,%d,%d}\n",uc(gg->reglage.autom[i].mode),uc(gg->reglage.autom[i].gain),uc(gg->reglage.autom[i].courant),uc(gg->reglage.autom[i].delai));
+	}
+
+ecritT(fenetre_fichier_archeops_c,insert_f,"},{\n");
+
+/* ecrit  regul_bolo   */
+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"
+				,uc(gg->reglage.regul[i].mode),uc(gg->reglage.regul[i].num_bolo),uc(gg->reglage.regul[i].voie_chauf),uc(gg->reglage.regul[i].prop)
+				,uc(gg->reglage.regul[i].integ),uc(gg->reglage.regul[i].deriv),us(gg->reglage.regul[i].chauffage)); 
+	else	ecritT(fenetre_fichier_archeops_c,insert_f,"{%d,%d,%d,%d,%d,%d,%d}\n"
+				,uc(gg->reglage.regul[i].mode),uc(gg->reglage.regul[i].num_bolo),uc(gg->reglage.regul[i].voie_chauf),uc(gg->reglage.regul[i].prop)
+				,uc(gg->reglage.regul[i].integ),uc(gg->reglage.regul[i].deriv),us(gg->reglage.regul[i].chauffage)); 
+	}
+
+/*  ecrit  auto_dilu   */
+ecritT(fenetre_fichier_archeops_c,insert_f,"},{%d,%d,%d,%d,%d,%d,%d,%d} \n"
+		,uc(gg->reglage.dilu.vanne),uc(gg->reglage.dilu.helium),uc(gg->reglage.dilu.chauffage),uc(gg->reglage.dilu.piles)
+		,uc(gg->reglage.dilu.transmission),uc(gg->reglage.dilu.temps_max_vanne),uc(gg->reglage.dilu.xx7),uc(gg->reglage.dilu.xx8));
+
+
+/***********  structure swappée pour le transputer   ****************/
+ecritT(fenetre_fichier_archeops_c,insert_f,"#else\n");
+
+/*  ecrit horloge    */
+ecritT(fenetre_fichier_archeops_c,insert_f,"{%d,%d,%d,%d},{\n",uc(gg->reglage.horloge.flag),uc(gg->reglage.horloge.temp_mort)
+		,uc(gg->reglage.horloge.nb_mesures),uc(gg->reglage.horloge.periode));
+
+
+/* ecrit 	reglage_un_bolo  : 2 mots long */
+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");
+
+/* ecrit auto_bolo  4 char */	
+for(i=0;i<nombre_de_voies;i++)
+	{if(i>0) ecritT(fenetre_fichier_archeops_c,insert_f,",{%d,%d,%d,%d}\n"
+				,uc(gg->reglage.autom[i].delai),uc(gg->reglage.autom[i].courant),uc(gg->reglage.autom[i].gain),uc(gg->reglage.autom[i].mode)); 
+			else	ecritT(fenetre_fichier_archeops_c,insert_f,"{%d,%d,%d,%d}\n"
+				,uc(gg->reglage.autom[i].delai),uc(gg->reglage.autom[i].courant),uc(gg->reglage.autom[i].gain),uc(gg->reglage.autom[i].mode)); 
+	}
+
+ecritT(fenetre_fichier_archeops_c,insert_f,"},{\n");
+
+/* ecrit  regul_bolo   */
+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"
+				,uc(gg->reglage.regul[i].prop),uc(gg->reglage.regul[i].voie_chauf),uc(gg->reglage.regul[i].num_bolo),uc(gg->reglage.regul[i].mode)
+				,us(gg->reglage.regul[i].chauffage),uc(gg->reglage.regul[i].deriv),uc(gg->reglage.regul[i].integ)); 
+	else	ecritT(fenetre_fichier_archeops_c,insert_f,"{%d,%d,%d,%d,%d,%d,%d}\n"
+				,uc(gg->reglage.regul[i].prop),uc(gg->reglage.regul[i].voie_chauf),uc(gg->reglage.regul[i].num_bolo),uc(gg->reglage.regul[i].mode)
+				,us(gg->reglage.regul[i].chauffage),uc(gg->reglage.regul[i].deriv),uc(gg->reglage.regul[i].integ)); 
+	}
+
+/*  ecrit  auto_dilu   */
+ecritT(fenetre_fichier_archeops_c,insert_f,"},{%d,%d,%d,%d,%d,%d,%d,%d} \n"
+		,uc(gg->reglage.dilu.piles),uc(gg->reglage.dilu.chauffage),uc(gg->reglage.dilu.helium),uc(gg->reglage.dilu.vanne)
+		,uc(gg->reglage.dilu.xx8),uc(gg->reglage.dilu.xx7),uc(gg->reglage.dilu.temps_max_vanne),uc(gg->reglage.dilu.transmission));
+
+
+
+
+/***********   fin des structures swappées       ****************/
+ecritT(fenetre_fichier_archeops_c,insert_f,"#endif\n");
+
+ecritT(fenetre_fichier_archeops_c,insert_f,"/*fin_reglage*/\n");
+
+
+if(enregistrer(fenetre_fichier_archeops_c)) 		alerte(1,"atention : erreur dans engeristrer");
+}
+
+
Index: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/regul.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/regul.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/regul.c	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/senseur_stellaire.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/senseur_stellaire.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/senseur_stellaire.c	(revision 646)
@@ -0,0 +1,178 @@
+#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_comprime	(block_type_sst_comprime*	blk){}
+
+
+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;
+int prem_d;
+
+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;
+prem_d=litD(fenetre_senseur_stellaire,sst_prem_diode,0L);
+for(k=0;k<72;k++)
+	{
+	 for(i=0;i<12;i++)		//  seulement 12 diodes 
+		{
+		int q;
+		q=i+prem_d-1;
+				
+		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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/synchro.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/synchro.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/synchro.c	(revision 646)
@@ -0,0 +1,173 @@
+#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;
+static long ancien_temps;
+if(select_synchro==7)	// selection  valeur fixe
+	{
+	if((gg->temps_cntl%(int)synchro_periode)==0)
+//	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
+		{
+		if(gg->temps_cntl!=ancien_temps+1)
+			{
+			sy_per+=gg->temps_cntl-ancien_temps;
+			printf("erreur synchro corrigée\n");
+			}
+		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);
+		}
+	ancien_temps=gg->temps_cntl;
+	}
+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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/tache_PCI.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/tache_PCI.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/tache_PCI.c	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/tache_archeops.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/tache_archeops.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/tache_archeops.c	(revision 646)
@@ -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 _archeopsXX		//---------   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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/tache_archeops_bit2.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/tache_archeops_bit2.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/tache_archeops_bit2.c	(revision 646)
@@ -0,0 +1,206 @@
+#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 _archeops		//---------   pour  Archeops    -----------------------	***
+#ifndef _sans_transputer	//---------   pour  Archeops avec transputer    -------------	***
+//											***
+//*****************************************************************************************
+//
+//
+//   lit directement les blocks recus 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);
+
+	
+
+//*****************************************************************************************
+unsigned long	N_total_bits,M;
+unsigned short	Max,Min;
+
+void init_tache(void)
+{
+tt->vi.a=0;
+tt->vi.b=0;
+tt->vi.c=0;
+//init_lit_bit();
+}
+
+
+#define	max_fifo  4000
+
+
+//		un bit pour 8 bit en parallele dans la fifo		
+/*
+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);
+}
+
+*/
+
+//		un bit pour  fifo avec un seul bit (bit0) et la valeur de la periode en bit 1..6  (37 ou 38)		
+
+
+
+char	un_bit()
+{
+static int i;
+static unsigned long RR;
+unsigned short	Val;
+
+lit_carte;	if(rien_a_lire)		return(bit_vide);	//  fifo vide  ->  retour  ->  sort du while
+
+N_total_bits++;
+Val=((RR>>1) & 0x3f);	//permet de lire les bits de temps dans RR
+
+//Calcul de la nouvelle moyenne glissee du temps
+M=M-(M>>16)+(Val<<8);
+
+	
+//Calcul du Max
+if(N_total_bits==0) Max=Val;	//initialisation au premier passage
+if(Val>Max) Max=Val;	//changement de maximum
+if((N_total_bits%60000)==0)
+{
+	Max=Max-1;	//Diminution tous les 60000 bits
+	N_total_bits=0;
+}
+	
+//Calcul du Min
+if(N_total_bits==0) Min=Val;	//initialisation au premier passage
+if(Val<Min) Min=Val;	//changement de minimum
+if((N_total_bits%60000)==0) Min=Min+1;	//Augmentation tous les 60000 bits
+//tt->nb_lec_fofo_ext=M;
+
+
+	
+//if( RR & 1 )  	return(bit_un);
+//else		return(bit_zero);
+if( RR & 1 )  	return(bit_zero);
+else		return(bit_un);
+
+}
+
+
+
+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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/tache_diabolo.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/tache_diabolo.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/tache_diabolo.c	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/tache_regul.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/tache_regul.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/tache_regul.c	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/tache_transputer.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/tache_transputer.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/tache_transputer.c	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/telecommande.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/telecommande.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/telecommande.c	(revision 646)
@@ -0,0 +1,281 @@
+#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;
+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);
+			for(j=0;j<15;j++) tc_char(j);	// reset epld+transputer
+			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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/timer.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/timer.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/timer.c	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/trace-DS.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/trace-DS.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/trace-DS.c	(revision 646)
@@ -0,0 +1,471 @@
+#include "diabolo.h"
+#include "bolo.h"
+#include "synchro.h"
+#include "fichier.h"
+#include "trace.h"
+#include "menu.h"
+#define max_couleur 10
+
+static int	ds_bolo_coul[2*nb_max_bolo];
+
+	
+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	montracen_ds(int fen,int n,double x,double *y);
+
+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;
+int i;
+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 :
+                 			
+                 			
+    case ds_bolo_couleur :
+    case ds_bolo_couleur+1 :
+    case ds_bolo_couleur+2 :
+    case ds_bolo_couleur+3 :
+    case ds_bolo_couleur+4 :
+    case ds_bolo_couleur+5 :
+    case ds_bolo_couleur+6 :
+    case ds_bolo_couleur+7 :
+    case ds_bolo_couleur+8 :
+    case ds_bolo_couleur+9 :
+    
+    				for(i=0;i<max_couleur;i+=2)	
+    					{
+    					ds_bolo_coul[i]=litD(fen,ds_bolo_couleur+i,0L)-1; // 0=rien : 1=bolo0 // 2=bolo1
+    					if( (ds_bolo_coul[i]<1) ou (ds_bolo_coul[i]>nb_max_bolo) )   ds_bolo_coul[i]=0;
+    					if (ds_bolo_coul[i]<=24) ds_bolo_coul[i+1]=ds_bolo_coul[i]+24;
+    					printf(" i=%d bolo=%d    ",i,ds_bolo_coul[i]);
+    					}
+    				printf("\n");				    
+ 
+    				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[2*nb_max_bolo],y1[2*nb_max_bolo],y2[2*nb_max_bolo],bb[2*nb_max_bolo];
+int j;
+static double  phase_mesure[nb_max_bolo],confiance[nb_max_bolo],phase_memoire;
+//printf("suite avec u=%d \n");
+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]=bb[j]*bb[j];
+				if(confiance[j]) 	confiance[j]=log((y1[j]*y1[j]+y2[j]*y2[j])/(bb[j]*bb[j]));
+				}
+			j=5;	// bolo pur mesurer la phase
+			phase_memoire=0.95*phase_memoire+0.05*phase_mesure[j];
+			ecritD(fenetre_trace_DS,ds_phase,"%d°",degre(phase_memoire));
+			printf(" phase=%d°(%2.1f)  \n",degre(phase_mesure[j]),confiance[j]);
+//			printf(": phase memoire=%g  \n",phase_memoire);
+//			printf(" trace y1= %g , %g , %g , %g , %g \n",y1[0],y1[1],y1[2],y1[3],y1[4]); 
+			for(j=0;j<nb_max_bolo;j++)
+				{
+				y1[j+nb_max_bolo]=y2[j];
+				}
+
+/*				
+			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 [2*nb_max_bolo]
+{
+double x;
+static double yraz[2*nb_max_bolo];
+static double yt[2*nb_max_bolo];
+int j,k,moy;
+static double yfiltre[2*nb_max_bolo][10];
+static int uf=0;
+static int scan_ds=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<2*nb_max_bolo;j++)	yt[j]=y[j];
+for(j=0;j<2*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<2*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);
+if(scan_ds != ( (gg->don.sync[sync_subscan]!=0) et (gg->don.sync[sync_scan]!=0) ) )
+	{
+	if(scan_ds)	rectangle(fenetre_trace_DS,x,graph->ymin,x,graph->ymax,rouge);		// trace le segment x1,y1 - x2,y2		
+	  else	rectangle(fenetre_trace_DS,x,graph->ymin,x,graph->ymax,bleu);		// trace le segment x1,y1 - x2,y2		
+
+	scan_ds = ( (gg->don.sync[sync_subscan]!=0) et (gg->don.sync[sync_scan]!=0) ) ;
+	}
+
+
+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<2*nb_max_bolo;j++) 					 
+		{
+		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_ds(fenetre_trace_DS,2*nb_max_bolo,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");
+*/
+}
+
+
+
+void	montracen_ds(int fen,int n,double x,double *y)
+{
+int i,cc;
+double yy[max_couleur];   // 0=rien : 1 2=bolo0 // 3 4 =bolo
+for(i=0;i<max_couleur;i++)
+	{
+	cc=ds_bolo_coul[i];
+	if(cc && (cc<=2*nb_max_bolo) ) 	yy[i]=y[cc-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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/trace.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/trace.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/trace.c	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/trace_1p.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/trace_1p.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/trace_1p.c	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/trace_tout.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/trace_tout.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/c/trace_tout.c	(revision 646)
@@ -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;
+static int scan_tt;
+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;	if(c1>0)	c1=c1/(1+c1);	
+							c2=2*3.14*SS->fmaxi*gg->periode_echantillonage;	if(c2>0)	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;
+								if(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");
+
+								x=gg->periode_echantillonage*(double)gg->temps_cntl-gg->temps_origine;
+								
+if(scan_tt != ( (gg->don.sync[sync_subscan]!=0) et (gg->don.sync[sync_scan]!=0) ) )
+	{
+	if(scan_tt)	rectangle(fen,x,graph->ymin,x,graph->ymax,rouge);		// trace le segment x1,y1 - x2,y2		
+	  else	rectangle(fen,x,graph->ymin,x,graph->ymax,bleu);		// trace le segment x1,y1 - x2,y2		
+
+	scan_tt = ( (gg->don.sync[sync_subscan]!=0) et (gg->don.sync[sync_scan]!=0) ) ;
+	}
+
+   								montracen_tout(fen,nb_max_bolo,x,SS);
+
+
+								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]>=1) && (SS->bolo_couleur[i]<nb_max_bolo+1) ) 	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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/choix_acquisition.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/choix_acquisition.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/choix_acquisition.h	(revision 646)
@@ -0,0 +1,46 @@
+//---------------------       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
+//#define Adresse_base_PCI	0x84000000	// G3 Archeops optique avec carte video
+//#define Adresse_base_PCI	0x82000000	// G3 Archeops_2 optique avec carte video
+#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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/choix_param.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/choix_param.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/choix_param.h	(revision 646)
@@ -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	500		// 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		//--------------------------------------------------------------------	***
+//											***
+//*****************************************************************************************
Index: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/acqui.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/acqui.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/acqui.h	(revision 646)
@@ -0,0 +1,88 @@
+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 (47) 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_flash                 29     //   controle 
+#define  e_bolo                  30     //   controle 
+#define  e_montre                31     //   controle 
+#define  e_sauve                 32     //   controle 
+#define  e_vanne                 33     //   controle 
+#define  e_helium                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 
+#define  e_chauf                 45     //   controle 
+#define  e_cmd                   46     //   controle 
+#define  e_telemesure            47     //   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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/alarme.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/alarme.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/alarme.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/auto.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/auto.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/auto.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/bit_block.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/bit_block.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/bit_block.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/bolo.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/bolo.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/bolo.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/carte.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/carte.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/carte.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/carte_acqui.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/carte_acqui.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/carte_acqui.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/carte_pci.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/carte_pci.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/carte_pci.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/comment.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/comment.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/comment.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/compress.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/compress.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/compress.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/config_transputer.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/config_transputer.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/config_transputer.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/controle.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/controle.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/controle.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/corel.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/corel.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/corel.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/courbeVI.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/courbeVI.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/courbeVI.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/diabolo.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/diabolo.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/diabolo.h	(revision 646)
@@ -0,0 +1,207 @@
+#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
+extern   reglage_bolo	reglage_standard[8];		// 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_sst_comprime	(block_type_sst_comprime*	blk);
+void	traite_block_gyro		(block_type_gyro*		blk);
+void	traite_block_gyro_comprime	(block_type_gyro_comprime*	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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/dilution.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/dilution.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/dilution.h	(revision 646)
@@ -0,0 +1,98 @@
+
+
+
+//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 (69) 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_envoi_dac             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_sw_extra              64     //   controle 
+#define  dil_temp                  66     //   static texte 
+#define  dil_trace_tempe           67     //   controle 
+#define  dil_dac_1                 68     //   controle 
+#define  dil_dac_2                 69     //   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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/fenetres_diabolo.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/fenetres_diabolo.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/fenetres_diabolo.h	(revision 646)
@@ -0,0 +1,68 @@
+//  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_senseur_stellaire			140
+#define fenetre_senseur_stellaire_lecture_brute		141
+
+#define fenetre_param_reglage				142
+#define fenetre_fichier_archeops_c			143
+#define fenetre_temperature_dil				144
+
+#define fenetre_gyroscope				145
+#define fenetre_gyroscope_lecture_brute			146
+
+
+//  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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/fichier.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/fichier.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/fichier.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/fourier.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/fourier.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/fourier.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/foyer.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/foyer.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/foyer.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/gyroscope.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/gyroscope.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/gyroscope.h	(revision 646)
@@ -0,0 +1,17 @@
+
+
+
+//debut_id=1510
+//----------------------------------  fenetre : senseur_stellaire  -----------------------------------
+
+#define senseur_stellaire_id  1510  //  le id de la fenetre dans la ressource
+
+void exec_gyroscope(int fen,int item,double valeur,...);   //  prototype de la fonction
+
+// liste des items de la fenetre (4) items 
+
+#define  sst_azer                  1     //   edit texte 
+#define  sst_sortie_brute          3     //   controle 
+#define  sst_prem_diode            4     //   controle 
+
+//fin_id
Index: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/menu.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/menu.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/menu.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/montimer.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/montimer.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/montimer.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/onde.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/onde.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/onde.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/pointage.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/pointage.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/pointage.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/reglage.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/reglage.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/reglage.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/regul.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/regul.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/regul.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/senseur_stellaire.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/senseur_stellaire.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/senseur_stellaire.h	(revision 646)
@@ -0,0 +1,17 @@
+
+
+
+//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 (4) items 
+
+#define  sst_azer                  1     //   edit texte 
+#define  sst_sortie_brute          3     //   controle 
+#define  sst_prem_diode            4     //   controle 
+
+//fin_id
Index: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/structure.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/structure.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/structure.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/structure_diabolo.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/structure_diabolo.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/structure_diabolo.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/synchro.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/synchro.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/synchro.h	(revision 646)
@@ -0,0 +1,60 @@
+#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 (31) 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 
+#define  ds_bolo_couleur          24     //   controle 
+#define  ds_bolo_couleur25        25     //   controle 
+#define  ds_bolo_couleur26        26     //   controle 
+#define  ds_bolo_couleur27        27     //   controle 
+#define  ds_bolo_couleur28        28     //   controle 
+#define  ds_bolo_couleur29        29     //   controle 
+#define  ds_bolo_couleur30        30     //   controle 
+#define  ds_bolo_couleur31        31     //   controle 
+
+//fin_id
+
+//------------  items supplémentaires créé par moi pour appel de trace
+
+#define			ds_debut	100
+#define			ds_suite	101
+
Index: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/tache.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/tache.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/tache.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/tm.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/tm.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/tm.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/trace.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/trace.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/trace.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/trace_tout.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/trace_tout.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/trace_tout.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/version.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/version.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab.sources/h/version.h	(revision 646)
@@ -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: /tags/archediab_27/Poubelle/archediab.old/archediab_27.rsrc
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archediab_27.rsrc	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archediab_27.rsrc	(revision 646)
@@ -0,0 +1,1277 @@
+(This file must be converted with BinHex 4.0)
+:%@&bBfKPC'PKBPmb0bjbFh*M!(*cFQ058d9%!3#3"J%GE@lI!*!%!3!!!1XS!!$
+U+!!!-N8!!%k-$Q4TB@*[E'mZY5jbFh*MY3)!!!"bFh*M8P0&4"&KFQ0SC@4TB@*
+I-MFZFR0bB`)!!!!rN!J!N!3rN!J!N"L[&erA!*!&!4f"!*!-$`!!!%k-#@CTBfK
+TCA)ZB`)!!!"849K85d&)6!%!!$`!`!#3"%k5!*!%"P!!!"B!N!8"IJ!!&J#Tl8R
++U[r@,3#3&[Dm!!%!N!Mf[3!"!*!2'`!5!$3!*!"J!!!"!!qJ!!!3%!!$!!3%Bfj
+dE!!!!"X!*J!d!$F!B!!!!3!2S!!!%"!!!`!%"'0ZG'`!!!!E!$S!0!"+!'!!!!%
+!$k!!!"!3!!-!"!4MER4X!!!!'`"-!$3!A!"J!!!"!!qJ!!!3%!!$!!3%BfjdE!!
+!!"`!"!!"!"!!)3!!!3!!!3!!%X!L!J!*"@&eG'm0!!!!(J!%!!J!&!"3!!!"!!!
+"!!!5`"%#!!S(C'P[C'8a$3!!!"d!&!!)!#3!8!!!!3!!!3!!%X!4!J!,"Q4TEf4
+P-J!!!"X!!3#-!"S!V!!+!3!!)!!!%"!!!!!-"'0ZG'`!!!!E!!-!!J!3!!i!!3%
+!!!S!!",3!*!%"'0ZG'`!!!!E!"!!!J!F!!i!!!%!!!8!!",3!*!%"'0ZG'`!!!!
+E!"i!!J!U!!i!!!%!!!S!!",3!*!%"'0ZG'`!!!!E!#`!!J!i!!i!!!%!!!S!!",
+3!*!%"'0ZG'`!!!!E!$S!!J"'!!i!!!%!!!S!!",3!*!%"'0ZG'`!!!!E!%J!!J"
+8!!i!!!%!!!S!!",3!*!%"'0ZG'`!!!!Y!!%!E!"'!,`!!!%!!'3!!"$J1!!"E"C
+`D'&cC5``,#dX,5`Y,,NX+b`V,#XX!!!!&`!%!+`!+!$8!!`"!!"!!!!3%!!!!!`
+!N!3A!!3!f!!S!2J!&!%!!$m!!"!3!!!!$!#3""S!(!#-!$3!V!!+!3!!)!!!%"!
+!!!!-!hKiH!!!!"d!*!!)!$)!5!!!!3!!!3!!%X!4!`!+"R"bDA0YC3!!!"m!!J!
+a!"%!a`!%!3!!"3!!%*!!!!!!J3KMD'pTH$SJ$3!!!$!!N!F%!!$Vr9ejd,m!!6U
+8&dMhMJ!#cD-#(`)I!!2Bp%%#N`)!"!XPm58SaJ!!!$!!N!F%!!#"Xrrr*DS!!5%
+q#)qL'`!#"#X%''Xd!!2c[UADhA%!"'"hB(GJG`!!!$!!N!F%!!$8DeKa#Zd!!5%
+q#)qL'`!#"#X%''Xd!!2c[UADhA%!"'"hB(GJG`!!!$!!N!F%!!$-c2q3"!!")6i
+)Mk)E!!)%+`3BDc3!!r1qTGVGF3!%B(GJGf"h!!!!-!#3"`3!!2q3"$-c!!%K2JL
+2SKX!!J3V""KV0!!$mlkPfYea!!6ZlJ#3"c!!N!F%!!$-c2q3"!!")6i)Mk)E!!)
+%+`3BDc3!!r1qTGVGF3!%B(GJGf"h!!!!-!#3"`3!!04V@(%+l3!")6i)Mk)E!!)
+%+`3BDc3!!r1qTGVGF3!%B(GJGf"h!!!!'!#'!+)!q`*e!!J!!!%!N!8$k!%U!*!
+&'!"A!3`!X`(F!!J!!!%!N!8$k3%U!*!&'!$a!8i"pJ1d!!J!!!%!N!8$kJ%U!*!
+&'!$,!#F"LJ(!!!J!!!%!N!8$l3%U!&)!!!!B!cN"f!3"!qB!#!!!!3#3"32[!5S
+!N!8B!0d!-`*U!S)!#!!!!3#3"32`!5S!N!8B!&`!C!*q!bd!#!!!!3#3"32a!5S
+!N!8E!%J!&!"C!#3!!!%!!!-!!"!3!!!!#34MER4X!!!!'`!S!!`!13!N!!!"!!!
+2!!!3%!!!!!X%BfjdE!!!!"X!K!!%!*%!*`!!!3!!!3!!%X!Q!`!+"'*XEh%!!!!
+B!*F!R!(@!LX!#!!!!3#3"33'!5TP5!!!!$!!N!F%!*!%-c2rr`!"!*!(!J#3"`-
+!N!F%rj!'!!!!(3!"!!%!&`!a!!!"!!!"!!!5`"%!!!`'E@9cGA*P!!!!'`!"!$3
+!&J"F!!!"!!!"!!!5`"%!!!`%Fh4[F!!!!(J!!`!!!%J!5!#3"!)D!`hrirrK!MB
+$+`0&"AX$i!!#!!!!5!")!*!%!YJ#+!!"!!!!C!!!!!%!!`-$!2m!!5F2!!%!!3#
+3$'J)!"N"N!!!N!m"!*!6'!"`!!m"I`*X!!J!!!%!N!8%*!%UH(J!!!!`!*!("!!
+!3GTX-rrr!!(rraD`)ZJ!!J3V""KV0!!$mlkPfYea!!4JGf"hB(F!!!!K!!%!B!!
+@!*3!!!%!!!%!!",!%3!!#3TMB@aMG@`JEQ9`!!!!'J!%!!J!&J!d!!!"!!!"!!!
+5`"%!!!`$FQ&k!!!!PJ!(!*!&"!!i!"3!K)J*CR*PFA9PEQ0P!*!'(!!%!3S#@!#
+3"`F!L`!9!-%3!6%!N!B%!-J!&J%FL!YcD@GYB5K[EQ4P+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&bFQ80BA9dE`!!!#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"3T
+1CAFJ9fPZC'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!!!!#J4MER4
+X!!!!&`#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%%0BQ9LEd%0BQ9LEd)!!!!E!!J
+#6!!F!S`!!!%!!!%!!",!%3)!$!4dEh9c!!!!(3!"!0J!%3%F!!!"!!!"!!!5`"%
+#!!`'F(*PBfPc!!!!Y!!+!*!&&!$B!#B",)J#56d!N!8S!!%"1J'+!*!(&!%i!#3
+"N!#)!PBp!*!&!3!"!"F!-3F#+$d!N!8"!$3!&J"F"`)S2J#3"3%!R!!9!0!(!LJ
+r!*!&!`&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!!$'ePFh9
+bC3#3%`%!!",!%3!!$#S!N"Jr!!!3N!!!!J!!BQpXE`#3&3%!!",!!*!%GQPdCA0
+cC3#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@GP!*!'8!$m!'X"+JF#,KJ
+!N!9)!!`!@`"aL!KTER4PCh*KE!#3"8F!H`"9!-d3!c-`-!#3"Q!!$!"c!(')"Q4
+PFQPfMJ#3"9m!H`"Y!-d3!M8`!*!&#!!S!"J!N!#)$R*PCh9X)(0eFL"LEfa[!*!
+&"!#F!"`!`!F#,KN!N!8"!1`!%`%iL!TbCA"PG'PdD@pZ!*!&&!$m!#m"+JF#,KS
+!N!9%!F!!X`(3"`)Z'`#3"AJ!$!#'!'+)#h"PFQP[C'9IFQ&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(*KBf9IBfpbC@`ZD!#Q-!#3"5&
+AF!)8$eJ!#J!!BfKMFJ$LlJ!%"!#3#b&A8!)8$eJ#+DD!!*!&)@0SEfPiAf0[FQ9
+XAc%!IrpA-!)T!*!&!3!!%X!L!J!8BQpeG'pZAc%!N!i2@!)TTS!!N!8KBfK[DAK
+IBfpbC@aI-3"rreF`!LN!N!8"!!!5`$-#!"4LEh9dEfjI-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!i
+2@!)TTS!!N!8KBfK[DAKIBfpbC@aI-3"rreF`!LN!N!8"!!!5`'B#!"4LEh9dEfj
+I-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[DAKIBfpbC@aI-3"rreF`!LN!N!8
+"!!!5`*N#!"4LEh9dEfjI-3#3$JpB!LQQJ!#3"5&MD'pTH&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@0
+SD@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!!$mlkPfYea!!#q%!#3#Ld!!-L
+L!*!8!3!!%X!!N!4N-3#3&,i3!*!+,3!!b+)!N"3"!!!5`!#3"'3b!*!A"3!!%Y!
+!!!!$GQpjB@jd!*!4!3!#!!%5`'*6!!j[GACbC3#3%NHPm!#3"d"LE'pM!*!("!!
+!c-`!4k5`!*!&!3!!%X!4!!!-EQ9h!*!6[K!!N!SY!!$)SJ#3&!%!!",!!*!%C'p
+ZAh4PE'8!N!kq%!#3#Ld!!-LL!*!8!3!!%X!!N!4K-3#3&,i3!*!+,3!!b+)!N"3
+"!!!5`!#3"'%b!*!A'!#B!&d"Q3'L!!J!!!%!N!8%pJ%U!*!&-!#3"`3!!-c-rj!
+%!!%K2JL2SKX!!J3V""KV0!!$mlkPfYea!!4JGf"hB(F!!!!Y!"3!!3!Q!8!!!3%
+!!"N!!4"3%J%!$"CLEfa[$6%0-Jdc$63003df$6F01!dj!!!!(!!m!,3!83$T!!!
+"!!!"!!!5`"%!!!`&G(*KBf8!!!!H!(!!Y!#'!2!!!!%!!!%!!",!%3!!$!GQEh9
+bD@9b!!!!(`!%!)!!&!$B!!!"!!!"!!!5`"%#!!`)E@pjC@jZCA-!!!!G!!%!0!!
+2!(3!!!%!!!%!!",!%3)!$!CbCA4[GA)!!!#m!!N!N!8%!!J!&J!`"!0bBAS!N!B
+B!!%#(3,%!*!("!!i!"B!F!3'C@CQB@0P!*!%!J!!(!)5!'`%#R0KER-JD@eKCf8
+!N!8%!3`!&!&)L!GXDA0cB@GP!*!'!`&2!"!"GK!"-!#3"J3!J!!8!0J(!LGU!*!
+&"!$J!"3"")J"-!#3"J3"R!!5!H#)#@51Bf&XB@GP1J#3"J-"j`!4!MF3!6%!!!!
+"N[rq!!TdFQ&MC5jS!!#!NZ!!J*5J!*!&!d3`!(kD@!"A!!"dF!!$!&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!N!iU!'&RC3#3#!3
+!!04V@(%!!!#4!)%!F3!!,Q!!!#d!N!3`!FJc)!!"!4!!%`'8!!%!!!#4!)%!F3!
+!,Q!!!'aTFh0KCf8!-b!!!3%3!"-"P!!"!*!&!3!!%X!4!J!-E@pj!*!@!3!!%X!
+!N!4ZBPpYEhN!N"-"!!!5`!#3"#d!N"J"!!!5`!#3"'4PBf&XC3#3%c!!N!F%!!$
+rrmc-rrm!!3#3"`)!!$-crrm!!`#3"`6ZlJ#3"ad!0J!S!K)#Y!!)!!!"!*!&#Nj
+PGb"AD@jNEhF!!!!J!!%!0!!3!)!!!3%!!!)!!",!!`)!$!N0D@jdCA*eF(3!!!!
+E!!%"L!!F!D!!#3%!!'3!!"!3!!!!#34MER4X!!!!(!!B!+J!*J$F!!!"!!!"!!!
+5`"%#!!X&GQpTC6%!!!!F!#J!U!!f!0`!!!%!!!%!!",!%3)!#`9fEfPP-J!!!"`
+!1!#S!%B!h!!!!3!!!3!!%X!4!J!,"AC[D@8c!!!!'J!k!!%!4J!P!!!"!!!"!!!
+5`"%$!!N$BfpY!!!"b!!4!*!&#`!R!"d"`4!L-#``,$!X-#``,$!X+c%Z0MFb,#d
+`,MBb-c3X,6!Z-c%b03#3"3J!#!!H!"`(!Lp%!*!&*`!R!$N"`4!A,6!Z0MNj-b`
+Y-#if06Ji,#X`,MBe06-!N!BN!!J!1J!F"`)[43#3"8-!*`"9!F%3&bd`,MBj16-
+X+c%Z-c%h05`Y-#ic-MFh!*!'3!!)!&B!(!F#,dB!N!9I!#F!F3("%!F`,$!X-#`
+a!*!'A!!)!()!(!F#,dF!N!9l!#F!M3("%"FV-5ic16Jf,#d`,MBe1$JX,6!Z-c)
+h0`#3"RJ!#!#1!"`(!Lp)!*!&P`!R!+N"`4!L-#``,$!X-#``,$!X,6!Z1$-f,#X
+a,M)d0MNX,6!Z-c%b03#3"C3!#!#U!"`(!Lp*!*!&X`!R!-8"`4!K-#``,$!X-#`
+`,$!X,6!Z1$-f,#d`,MBb-c3X-#if-M8`!*!'X!!)!-B!(!F#,dS!N!A2!#F!i3(
+"%!%`!*!'c!!)!1)!(!F#,dX!N!AV!#F!r3("%!#3"ZJ!#!$q!"`(!Lp-!!!"UJ!
+4!*!&$!"3!"i"%)J5B6NjAc!fAc)i,6%hD$%jE6%a!*!%!63"1!&%!Cb)$'0[E@e
+PER4KDA*PF`#3"5m!"`"9!J83"5iZ,biZ!*!&!63!0!&#!'3%!fjPG`#3"Pd!"!"
+Z!'5)%'CTBfKTCA)JC'PK)$%J1L!!N!9I!'F!E3)&%!#3"R!!"!##!'5)%'CTBfK
+TCA)JC'PK)$)J1L!!N!9c!'F!J3)&%!#3"3%X!-J"6!$d"`)R@!#3"33!"!!S!%`
+(!LGC!*!&$!%J!"i#!)J!N!8"1!#%!8S!X`F#*eB!N!@X!!3![!"NL!TNEfjIG)j
+XMMSJ!*!&V`"R!,d#"4!!N!D%!!3!P3"NL""QD@0SD@9b)'&bBfJa)$SJ!*!&K`"
+R!*8#"4!P4c0I3A*MD'9[F(-b1N&bBfKPEh"cAc)kCQPMD'PPFR0IC'&dB3#3"TJ
+!"!#U!'5)%'CTBfKTCA)JBA*MD$)J1L!!N!@E!'F!U3)&%!jMD'9[F(0IE@&MC'&
+dB3!!!#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@i0Fh9LFf0KEJe
+MEh9`EfaP$A0dBA4eF`eLE'&ZDfPZC`eQDAKP!!!!)3!*!D)!(!(I!!!"!!!"!!!
+5`'+3!!!+#Q9ZFQ9RDA0dFQ8!!!!B!,8#'!)5"!N!#!!!!3#3"388!5S!N!8`!*!
+("!!!c-crN!3!!5%q#)qL'`!#"#X%''Xd!!2c[UADhA%!"'"hB(GJG`!!!"`!"!!
+%!"S!2!!!!3!!!3!!%X!4!!!-"@4PBR9d!!!!(J!F!5J!,J&i!!!"!!!"!!!5`"%
+!!!`(FQ9dFQ&MC3!!!2`!$!#3"3F!4`!D!-#)%h4KD@aXC5"NC5"XB5"MBA*dC6S
+!N!C%!$J"@!(X!*!("`$$!"8!l4!#-M3!N!8%!!3!'J!m"`)bb!#3"33"%!!@!65
+)"("KFcS!N!8(!6-!&3&K%!-a,M8!N!B)!A!!'!'`L!KfDA4PFh0P1J#3"3F"U`!
+9!GN3!c!Z03#3"L!!#!!Z!&L)#Q4jEQ&YDA&eC6S!N!8I!'-!+`#G%!-a-$!!N!B
+F!,X!,!$NL!9LEfa[1J#3"Km!k`!Y!483!6N!N!BF!5J!,J&i"`)bb3!!!IMrrJ!
+0Bf&bG'8ZD!!"MYL`!BlFi!#3"8IP!!&p(SJ!N!4MBA*d!*!%"!3!N$8"!!!5`!#
+3(3%!!",!!*!%G'&TE'aPAf0KFR4P!*!0!3!!%X!4!!!-C'9LGA3!N$B"!!!5`!#
+3"("KF`"cFf8!N")"!!!5`!#3(3%!!",!!*!%GQPdCA0cC3#3%J%!!",!!*!G!3!
+!%X!!N!4NH@jKE@PaG@8!G'8!N!d"!!!5`!#3(3%!!",!!*!%BQpXE`"PAf0KFR4
+P!*!0!3!!%X!4!!!-FQ9dFQ&MC3#3%Qd!J3#3#2rrrrX(G(*KBf8Y-3Y%8b"cD@j
+eFb!aCJ#3"!%Y!*!%$846-5!SD'&MD'9eFLN!N!384&-b)#KcC@0[EQ4KDA*P)$-
+`E5N!N!334&-c)#K`FQPcE@8J8%p0+3#3##J!!3!%!#!!4!!!!3!!!3!!%X!K3!!
++%@e[ER4bC3eXCA-JBQpXEh-0!!!!*J!"!&!!)!#-!!%"!!!"!!!5`$13!!!+$h0
+KGACP$@aK)'0[EQCTC`!!!#S!&3#m!#8"1`!!!3!!!3!!%X!4!`!+%h*KHL"cD@G
+ZB@`JF'&bBA0TG'8!!!!G!"3!!`!P!%%!!!%!!!%!!",!%3)!$!CbCA4[GA)!!!!
+B!#i$"!"M!ki!#!!!!3#3"38b!5S!N!8`!*!("!!!+QS-cI-a!!%K2JL2SKX!!J3
+V""KV0!!$mlkPfYea!!4JGf"hB(F!!!!I!"3!"!!Q!+3!!!%!!!%!!",!!3)!$!K
+QD@iJFf0KEJ!!!#F!*!!%!$B!T!!"!3!!!3!!%X!"!J!-%(0KG(9bBA4TEfiJFQ9
+RG@`!!!!C!&!!#!"L!+J!!!%!!!%!!",!%3)!$!*iH!!!!#X!"!!%!"B!U!!!!3!
+!!3!!%X!"!J!-&'4PBR9d)(0MB@iJFf&ZFb"QD@0S!!!!8J!%!*!&E`"c!)-!Qa!
+"A`#3"J3!"!!@!+J(!M2d!*!&&!!%!#B!T!F#-r8!N!8N!!3!0J#N"`)cpJ#3"9!
+!#!"L!+J(!M2h!!!!k2rq!!9KE'&bE@8ZD!$+dl!!N!Mr`qlbrm2Zj!(,C3"K!*!
+%!Z)!"!3!N!KrrhrrGA-"bfA!!FYQ%!#3"3)U!!(1@)!!$J!3C'&dCA4bB@-"bJ#
+3"3%!!",!!3)!$'4PBR9dAh0MB@i!N!m"!!!5`!%#!!aQD@jIFf0KEJ#3$`%!!3!
+!%X!"!J!-Ff&dAh*PCh9X!*!3!3!!%X!4!J!-!'&dAh*PCh9X!*!3'!!B!"!!L3&
+*!!J!!!%!N!8&8!%U!*!&&`!"!!3!DJ!3!!!"!!qJ!!!3F%8J!*!''`!$!"J!%!!
+N!!!"!!!+!!!5d!#3"!4MER4X!!!!'`!4!"J!(J!N!!!"!!!+!!!5d!#3"!4MER4
+X!!!!'`!J!"J!,!!N!!!"!!!+!!!5d!#3"!4MER4X!!!!'`!Y!"J!1J!N!!!"!!!
++!!!5d!#3"!4MER4X!!!!'`!l!"J!4`!N!!!"!!!+!!!5d!#3"!4MER4X!!!!'`"
+*!"J!93!N!!!"!!!+!!!5d!#3"!4MER4X!!!!-!#3"`3!!2q3"!!!!!%!N!F#!*!
+(!`#3"`6rN!B!!!!Y!$J!,!"S!'3!!!%!!'3!!"$J-J!"D"C`D'&cC5``,#dX,5`
+Y,,NX+b`V,#XX!!!!)3!)!3J!'3&b!!!"!!!"!!!5`"%#!!`+CQpbBf8JFf0KEJ!
+!!#3!)!%)!$)"IJ!!!3!!!3!!%X!4!J!-$@C[FQ0P)(0eBR0MB@i!!!$F!!X!N!8
+$!!)!%!!1"`)R4!#3"4!!!J!F!!i(!LG&!*!&(J!#!#S!$JF#*d)!N!8X!!)!1!!
+1"`)R3`#3"6S!!J"'!!i(!LG'!*!&5!!#!&3!$JF#*dF!N!8"!")!C!"-"`)R5!#
+3"3%!E!"'!,`(!LG*!*!&5!"3!(B!j)JF)(!p)#da,MBa$5"QFQ9aG6dY0$8Z-63
+b0b")HJ#3"@F!!`"e!%83!MNi!*!&#!%)!"N"FJF#*dS!N!8J!3J!-J&q"`)R5`!
+!!GErrJ!-FhPZBfKbE`#!!ArrIrm"i!#3"J(B!!)F4(4bD3"cH3"P!*!%!J3!N!N
+)!Qm$23*`rj!'%Y!!!!")GQpjB@jd!!!!)!")3)!!!!!)!!J!!2q3"!")%Y!!5$N
+!,3#3"L!!5%#!!*!&#!!)!!$rN!3!5",3!%Jj!#d!!%Jj!*!))!")3)!!#!!!rj!
+%!%J5d!")0f!Y!$N!N!JJ!%K!J!!)!!J!!2q3"!")%Y!hB!"),3#3##!!5%#!!!!
+!#!!)!!$rN!3!5",3!%Jj!#d!N!BJ!%K!J!#3"3J!#!#3"3F!!",!%3-!#R0PE'9
+MG!")3)!!!3#3"3J!#!#3"@3!!"$J1!!"E("SBA0P!(U!!!MrN!3!!#QFrrm!!'!
+`C@k3!(4bC3GcH@j`CA*TEf4P!!YKBh&eDA0TG'P[EJ#3"3%!!",!!*!%CQPiC3#
+3&3%!!",!%3)!$'C[FQ0PAh0MB@i!N!Vrr`!!!!%!!",!%3)!$'C[FQ0PAh0eBR0
+MB@i!N!cJ!!d!N!8%!'!!&J#FL!%a!*!'!3!%!'S!%!F#05!!N!8%!*`!&J$)L!%
+a!*!'!`!B!"!!*!F#05%!N!84!"J!(J!N"`)e)J#3"5!!'!!X!#3(!M8M!*!&,3!
+B!$S!*!F#053!N!8l!"J!4`!N"`)e*3#3"8N!'!"9!#3(!M8Q!*!&(`![!#m"-4!
+!N!Bi!#`!D!"N"`)e*`#3"93!G!"L!-5)!hKiH!#3"J3!,!!@!'#)!LdY!*!&"!$
+)!"B"0)J!!!!#'[rq!!jMEfjdFQpXC5jS!*!+rm2Zm[r$lZ3"U`)!BfpZ!!!T4J!
+%"!#3#(rrIrp'J!'V!P!"U`'`!*!&+A*PG'&bC$%!!K!!N!8T4Q!"HJ#3"!qJ!!!
+3F%8J!!"MD'&eCJ#3%q[pAAN!!!!"1T4bCA4KFQ3b!!)I!Km!!pMd33+6!J#3"3S
+!!",3!*!%GQpjB@jd!!!!)!")3)!!!!!)!!J!N!8+!!!5d!#3"#d!N!BJ!%K!J!#
+3"3J!#!#3"3S!!",3!*!%,3!!5$N!N!JJ!%K!J!!)!*!&#J!!%Y!!N!3Y!$N!N!J
+J!%K!J!!)!!J!N!8+!!!5d!#3"#d!N!JJ!%K!J!!!!!J!#!#3"3S!!",3!*!%,3#
+3"L!!5%#!!*!&#!!)!*!&!3!!%X!!N!4QD@0SD@9b!*!5C!!!%1!b!!&SF'KKFf8
+!HS!!#2q3"!!!+Ccrr`#3"3%!!",!!*!%F'9bD@pNC3#3%J%!!",!!*!%G'PYC3#
+3%2rr!!!!!3!!%X!!N!4cG@*cBf&Z!*!5'!"d!$B"i!*d!!J!!!%!N!8&EJ%U!*!
+&-!#3"`3!!-c-rj!%!!%K2JL2SKX!!J3V""KV0!!$mlkPfYea!!4JGf"hB(F!!!!
+B!$%#5`%8!i)!#!!!!3#3"3@-!5S!N!8`!*!("!!!c-crN!3!!5%q#)qL'`!#"#X
+%''Xd!!2c[UADhA%!"'"hB(GJG`!!!"S!"3!$!"J!F!!"!3!!#3!"%&!5!3!*!hK
+iH!!!!)3!"3#3"3F!p`!C!4d3!c%b-!#3"JJ!G!!D!2#)%R4KD@aXC5"NG5"`EfP
+ZG'&RC3#3"3J"+!!C!E')%faKFQGPGA)JCf&eFh0TC@jZC6S!N!B(!EF!&`(K%!)
+b-!#3"38!!`!B!(!(!MC-!*!&(!!%!@F#13#3"!%+rri!"Q0[F'PP,QJ!!DQF%!'
+YPR!"VB`J!*!-F'pTER3!!!!%"!#3#JS!N!3%!*!-G'&TE'aP!+Sa#!'V49J"VCC
+`!Dd!N!8"!!!5`!#3(3%!!",!!*!G!3!!%X!!N!4XBA*RCA9b!*!5#3!"%&!5!3!
+*BQpXE`#3&3%!!",!!*!G'J!"!!3!'!#J!!J"!!!*!!%38")"!!`$H(Ki!!!!3J!
+$!*!&"`$R!"F"%4!"-3#3"J3!V!!@!0L)!h"KF`#3"J%!"!!B!+!(!MGi!*!&(!!
+%!0i"-J#3"FErrJ!%CQpjCA)ZD!!"Ujq`!,`HN!#!a!!!rrm"93'VT&!!N!4QEhN
+!N!8%"!#3$M2B!*!-F'&c!!!!!DZNF!#3"5!r)!&a!*!&!3!!%X!!N"X)!!N!!4"
+3%J%!!'*[E'm!N"8"!!!5`!#3(4S#(!!-!MJ!+!!!!3!!r`!!%"!!"!!#!hKiH!!
+!!"S#(!!X!MJ!5!!!!3!!r`!!%"!!"!!#!hKiH!!!!"S#(!"-!MJ!D!!!!3!!r`!
+!%"!!"!!#!hKiH!!!!"S#(!"X!MJ!L!!!!3!!r`!!%"!!"!!#!hKiH!!!!"S#(!#
+-!MJ!U!!!!3!!r`!!%"!!"!!#!hKiH!!!!"S#(!#X!MJ!b!!!!3!!r`!!%"!!"!!
+#!hKiH!!!!"S#(!$-!MJ!k!!!!3!!r`!!%"!!"!!#!hKiH!!!!"J"J`%#!Y%#pJ!
+)!!!"!*!&"DS"+J#3"6!!N!F%!!$-c2q3"!!")6i)Mk)E!!)%+`3BDc3!!r1qTGV
+GF3!%B(GJGf"h!!!!'!%2!6N"a3(9!!J!!!%!N!8&b!%U!*!&-!#3"`3!!-c-rj!
+%!!%K2JL2SKX!!J3V""KV0!!$mlkPfYea!!4JGf"hB(F!!!#Z!!J!N!8%!!J!&J#
+%L!eUBA9RCA-JD'9XDA9Y!*!''`!,!#8!24!%05if0J#3"5X!#`!e!$d3"$8Z0M-
+!N!8l!!X!43!p%!3e,MBb!*!&5`!,!&8!24!%05ih0!#3"9X!#`"P!$d3"$8Z06J
+!N!9V!!X!G3!p%!3e,MBf!*!&H`!,!)8!24!%05ie0J#3"BX!#`#9!$d3"$8Z0M)
+!!!&`rri!#@4TE(9dD@pZ,QJ!`!,b(`#3"b#3!!,b5p!!N!4ND@`!N!8%"!#3$#"
+`![*,d!!%68B!!!!2!*!%![)H`!!"%C!'!!)LN!6rr`!!!!%!!",!!*!%DPpSC6%
+!N"3"!!!5`!#3"'TID'8b!*!8!3!!%X!!N!4UAfKP-`#3&!%!!",!!*!%DPpSC63
+!N"3"!!!5`!#3"'TID'8e!*!8!3!!%X!!N!4UAfKP0J#3&!%!!",!!*!%DPpSC6F
+!N"3"!!!5`!#3"'TID'8i!*!8IJA)!'%"!`#f!*`!!!!)$@TKG@GPFb"SC@aTG@e
+P$3!!!"!%05if-(CPHJ!!!"!%05ie0(C[G!!!!"!%05ie0faP)!!!!"!%05if0f4
+e)!!!!"!%05ie-'0[EJ!!!"!%05if-A9c)!!!!"!%05ie-@k1FJ!!!"!%05ie0@K
+KEJ!!!"S!H!!%!)S!&`!"!3!!!3!!%Y!!)3!!!hKiH!!!!"S!M!!%!*i!&`!"!3!
+!!3!!%Y!!-3!!!hKiH!!!!"S!H!"3!)S!B`!"!3!!!3!!%Y!!33!!!hKiH!!!!"S
+!M!"3!*i!B`!"!3!!!3!!%Y!!83!!!hKiH!!!!"S!H!#F!)S!V`!"!3!!!3!!%Y!
+!B3!!!hKiH!!!!"S!M!#F!*i!V`!"!3!!!3!!%Y!!F3!!!hKiH!!!!"S!H!$S!)S
+!q`!"!3!!!3!!%Y!!J3!!!hKiH!!!!"S!M!$S!*i!q`!"!3!!!3!!%Y!!N3!!!hK
+iH!!!!"S!H!%`!)S"3`!"!3!!!3!!%Y!!S3!!!hKiH!!!!"S!M!%`!*i"3`!"!3!
+!!3!!%Y!!X3!!!hKiH!!!!"S!H!!F!)S!2!!#!3!!C!!!%"!!!!!-!hKiH!!!!"S
+!M!!F!*i!2!!)!3!!C!!!%"!!!!!-!hKiH!!!!"S!H!"S!)S!L!!!!3!!C!!!%"!
+!!!!-!hKiH!!!!"S!M!"S!*i!L!!!!3!!C!!!%"!!!!!-!hKiH!!!!"S!H!#d!)S
+!e!!!!3!!C!!!%"!!!!!-!hKiH!!!!"S!M!#d!*i!e!!!!3!!C!!!%"!!!!!-!hK
+iH!!!!"S!H!%!!)S")!!!!3!!C!!!%"!!!!!-!hKiH!!!!"S!M!%!!*i")!!!!3!
+!C!!!%"!!!!!-!hKiH!!!!"S!H!&)!)S"D!!!!3!!C!!!%"!!!!!-!hKiH!!!!"S
+!M!&)!*i"D!!!!3!!C!!!%"!!!!!-!hKiH!!!"@crrJ!RBA9dEbjS!*!,$J&LZK!
+"BVU3!!#3"Q&eG'm!!!%!"!3!N!N#!!!!$!!1!*!*%!&@BA9dEepfB@`!N!32E!!
+-)04!K!#3"3%!!",!%3!!#QCTH'9ICf&TEJ#3$JJ!$`!!%"!!N!4RB@PZ!*!6!3!
+"!!!5`"%!!!TdEh9dAf&eG'm!N"!"!!!5`"%!!!TbD@9ZAf&eG'm!N"!"!!!5`!#
+3"#d!N"B"!!%!!",!)8!!#Qe[ER4bC3#3%`)!!",!%3-!#hCPFQpeD@aXC3#3%!%
+!!",!!*!G!3!!%X!!N!4MEh*bC@0d!*!3!3!"!!!5`"%#!!YdD'9bE@m!N"-"!!!
+5`!#3'`%!!3!!%X!4!J!,GQpTC6%!N")"!!%!!",!%3)!#hC[D@8b!*!8!3!!%X!
+4!J!,GQpTC6-!N"3"!!!5`"%!!!TQDAKPAf0[GA*KER3!N!YN$k!!!"!3!!-!"'0
+[GA*KER3!N"!"!!%!!",!%3!!#R4bB@jcDA4[DA*PAf&eG'm!N!N"!!!5`$13!!!
++Ff&eGQ8!N!rrr`!"!!%!!",3!#%!N"N"!!%!!",3!$%!N"N"!!%!!",3!%%!N"N
+"!!%!!",3!&%!N"N"!!%!!",3!'%!N"N"!!%!!",3!(%!N"N"!!%!!",3!)%!N"N
+"!!%!!",3!*%!N"N"!!%!!",3!+%!N"N"!!%!!",3!,%!N"N$!'3!!"!3!!!!$'*
+[E'pIBfpeE'9eFJ#3#`3!C!!!%"!!!!!-BQpXEepMEh9XCA9b!*!0C!!!%"!!!!!
+-BQpXEepMEh9XCA9b!*!0C!!!%"!!!!!-BQpXEepMEh9XCA9b!*!0C!!!%"!!!!!
+-BQpXEepMEh9XCA9b!*!0C!!!%"!!!!!-BQpXEepMEh9XCA9b!*!0C!!!%"!!!!!
+-BQpXEepMEh9XCA9b!*!0C!!!%"!!!!!-BQpXEepMEh9XCA9b!*!0C!!!%"!!!!!
+-BQpXEepMEh9XCA9b!*!0C!!!%"!!!!!-BQpXEepMEh9XCA9b!*!0)`!m!6`!5J'
+%!!!"!!!"!!!5`$%#!!N-BfpbFQ9XBA4TEfjc!!!!(`!`!6`!2J&`!!!"!!!"!!!
+5`$%#!!N)C'9RE'PdBfJ!!!!I!$!"M!!q!FJ!!!%!!!%!!",!-3)!#JKKE'PYAf4
+TE!!!!"S!B!#3!!"`!+3!!3%!!!%!!",3!$%!!!0iH(J!!!!b"6)!1!+4!$8!UJ!
+!!"!"Af3R!!!!"`#3"`F!N!F(!*!("`#3"mS%R!!Z!3d!MJ%q!!!!#!e`FQp`Eh*
+dD@pZEQ9XG()!!!!3!6KX*`!!!!J*BfKKG@CQB@GPER8!!!!(!!!!!`!!!!J)D@j
+dC@GbB@ak)'F!!!!3!c-`-'9Z!!!!#!CNCA*TGSjPFb!!!!!3!M8`Fb"N!!!!#!j
+bC@GeE#"cGA)JBQpXEb"dFJ!!!!F!!!!"!!!!#!TbCA"PG'PdD@pZG5"N!!!!"`#
+3"`F!!!I3!!!!#!Y`CA*TEf4PAh*KHQpe!!!!%!%`Efi!!!&5"%)!+3)F!+%"E!!
+!!"!$-M!`)(B!!!!(!*!("`!!!!%!!!!(!*!("`#3"`J!ER4b!!!!"`#3"`F!!!!
+#!!!!#!YfCA*[G@PXE'&RC@&Z!!!!%!-a,M*ME`!!!!F!N!F)![r"EfaP!!!!"`#
+3"`F!N!F(!*!("`!!!!%!!!!(!!!$k!!!!!F!N!F(!!!!!3!!!!F!!!!"!!!!"`!
+!!!%!!!!(!!!!!3!!!!F!!!!"!!!!"`!!!!%!!!!(!!!!!3!!!!F!!!!"!!!!"`!
+!!!%!!!!(!!!!!3!!!!F!!!!"!!!!"`!!!!)!!!!(!!!!#!!!!!F!N!F(!*!("`#
+3"`F!N!F(!*!("`#3"`F!N!F(!*!'!m3!-3#3"33!#!!8!05)(Q0KC'9ZBf8JC#G
+PE@PcFfP[EL!SEQ)JBQa[BfYc+3#3"H3"I!$k!J%(!LcX!*!&(`"l!#d!ba!"-!#
+3"MF!H`"&!-X3!6!!N!C2!(X!A3$,%!%`!*!'C`"l!(8!ba!"-3#3"Rm!H`#0!-X
+3!M%e!*!&P`"l!+8!ba!"-3#3"Um!H`#p!-X3!6!!N!E(!(X!e3$,%!%`!*!'h`"
+l!1d!ba!"-!#3"[F!H`%&!-X3!6!!N!8"$`"l!4d!ba!"-!#3"3%R!(X"03$,%!%
+`!*!&!6m!H`&0!-X3!M%`!*!%!9F!H`&P!-X3!6!!N!8"E`"l!Ad!ba!"-!#3"3'
+(!(X"P3$,%!%`!*!&!Cm!H`'Y!-X3!6!!N!8"Y`"l!F8!ba!"-!#3"3(2!(X"h3$
+,%!%`!*!&!HF!H`(e!-X3!6!!N!D!!"!!MJ"JL!0RF(-!N!DC!"%!T`"KL!YeEQ8
+JF'9bD@pNC3#3"V%!%3#r!'')"h0jEQ0SFQm!N!E*!"%!f!"JL!K`EfPZG'&RC3#
+3"H!!%!$Z!'#)#Q*[E'pYCA4bCA-!N!Aj!"%""`"KL!PRHA*[Ff0[F'8!N!8"%3!
+4!4m!BBJ0Ff9ZFb"cG'9XE'&TFJ#3"3%T!"%"0`"KL!4bD@9Z!*!%!8%!%3&2!''
+)#f*[E'mJBfpYF(*T!*!&!9S!%J&S!'+)#@GjFQmJBfpYF!#3"3&b!")"J!"LL!K
+cFh3JBfpYF!#3"!'-!"3"QJ"NL!aMBA4KE'mJCQaKFfJ!N!3#(!!-!MJ!+!F#,1d
+!N!3#(!!X!MJ!5!F#,1i!N!3#(!"-!MJ!D!F#,1m!N!3#(!"X!MJ!L!F#,2!!N!3
+#(!#-!MJ!U!F#,2%!N!3#(!#X!MJ!b!F#,2)!N!3#(!$-!MJ!k!F#,2-!N!8J!!`
+!,J"FL!9`BA*KE3#3"MN!$3"(!&f)"fT[GA*ZB@`!N!C4!!d!A`"GL!GbC@GXB@G
+P!*!'D3!0!(J!A)J)C'PXGA4TEfi!N!3"S`!6!E%!BiJ$Ch"c!*!&!E`!&!(+!'5
+)#h9ZC5"`CA*TEf4P!*!&!G3!&!(L!'5)"h0jEQ0SFQm!N!8"l!!8!IX!BiJ)F'p
+TER4KCf8!N!3"``#k!G%"#N!#%X!!!!ELrri!-Q0[EQCIG(*`,QJ!S!&K$l!!N!8
+SSd!"LGI`!!S!!'0d!!!!i+-!"!3!N!XSSb!"LGI`!@%2S!#3"5JY!!&K$U!!N!`
+"B3#3"3%!!",!%3!!$!"KGACP!*!8!3!!%X!!N!4MB@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%!!",!!*!&B@4PEQ0
+P!*!5!3!!%X!!N!9KC'9ZBf8!N")"!!!5`!#3"@&NC@jMC3#3%J%!!",!!*!&B@4
+PEQ0P!*!5!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%!!",!!*!G!3!!%X!!N"hr!!!3%!!%!!*
+ND@`!N"Er!!!3%!!%!!*ND@`!N"Er!!!3%!!%!!*ND@`!N"Er!!!3%!!%!!*ND@`
+!N"Er!!!3%!!%!!*ND@`!N"Er!!!3%!!%!!*ND@`!N"Er!!!3%!!%!!*ND@`!N"B
+"!!!5`!#3(3%!!",!!*!G!3!!%X!!N"d"!!!5`!#3(3%!!",!!*!G!3!!%X!!N"d
+"!!!5`!#3(3%!!",!!*!G!3!!%X!!N"dD!'!!d!"`!13!!3%!!!%!!",3!&%!!!0
+iH(J!!!!E!")!$!!Q!#3!!3%!!!B!!4!3!!!!#`4MER4X!!!"D!!9!*!&&!!S!#)
+!0)J"9J#3"LB!+!!f!$5)!8N!N!Bk!#J!53!d#!&8!*!'6!!S!&X!-`J"6!#3"K)
+!0!!N!'!(!LFE!*!&*J!d!$F!B!F#*a`!N!8k!$3!5J"J"`)R(3#3"8`!0!"F!'!
+(!LFH!*!&%!"N!&F!b`#3"`3!!3!3!#%(!LFD!*!&5!!"!&J!%iJ#F'J!N!9)!"3
+!@3!N"`)R)`#3"5J!$!!j!#3(!LFP!*!&+!!"!$S!$)J"C`#3"J)!*!!2!Bb)#Li
+J,L!Z)#iJ,Jd!N!@%!!3!N3!R"`)R)3#3"@!!"!"`!"5)!P)p!*!&B3!E!'m!A4!
+"-!#3"T3!&!#K!#)(!LFJ!*!&1J!"!%B!*3F#*b)!N!8@!!%!*!!-L!&f!*!'%J!
+-!#B!*!F#*am!!!-Urri!&Q*[E'mZD!!!!(rb8!"rp"!!N!8$j-!!ITTB!*!%BJ#
+3"`3#!*!F,3#3&Rrd%!#3"d!Y!2C!!*!("!!!c-`!Ir*3!!!K2JL2SKX!!!3V""K
+KGA4[Ah4bB@jc!!4JGf"hB(F!I`#3#hrf3'&eG'pIE'PZ!!!!)!"rpN!!N!J2S!!
+!%"!!!`!%Bf&bFQ8!N!3`!(rf32qG!$YZE3#3"!qJ!!!3%!!$!!4dFQN!D@0V6@A
+8D'm!Ir33!*!)$k!!!"!3!!-!"(4bB@jc!!"rpN"mF`!$IQ1EH%[r!*!%$k!!!"!
+3!!-!"'aTEJ!!IrC!3S!!!cKJ!(Y)!+$p!!$rX!#!!5!!N!BY!!#!"4!!$!"B!#S
+!U!2S!3!!I`#3"3%!!",!)J)!#@&eG'm!!!%J!*!(-!#!"@!!!'EJ-"-#3!!!CaS
+!!#d!N!3`!%%EJ!#3$`-!!"!3!!!!#A"SBA0P!"Z!!!&1G3#3"c!!N!82!!!3%!!
+!!!YRB@PZ!!"#0!!!49L3!!"d$!!!3MJ!!!R0!*!)"3!Y!"Z!!"-!4aBd!%B!'3"
+P!&m%#!!!!!%"X[H3!!!!"k!!!(*PF`!!)!'c'e!!!!!)!!!!"'B%!*!&!3!!%X!
+Q!`!+BQa[F3#3&3%!!",!!*!%,3"dEep5!*!6!3!!%X!!N!4KGA4[Ae)!N"%"!!`
+!!",3!*!%GQpj!*!@!3!!%X!4!`!*BfpYE3#3&3%!!",!!*!E!3!'!!%3%!!!!!Y
+fEfPP!!"#0!!!49L3!!"d$!!!3MJ!N!8B!#S"*`#k!N3!#!!!!3#3"34J!5S!N!8
+`!*!("!!!c'[rra(Y!!%K2JL2SKX!!J3V""KV0!!$mlkPfYea!!4JGf"hB(F!!!*
+q!#B!N!9(!&F!93#9%!-b-$!!N!B%!1`!)J%F"`)UP!#3"33"*!!J!8J(!LU9!*!
+&8!#S!'`!i!F#+TB!N!93!1J!E!%J"`)UP`#3"8J!"!"B!%b)!*!'!3!%!#!!4!F
+#+TJ!N!8N!&3!3J#N"`)UQ3#3"6!!"!"!!&#)#hCPFQpeD@aXB@GP!*!'A`"A!'d
+!L4!$-5ib!*!'#!#S!"B!j!F#+TS!N!9J!!3!EJ"8L!,r`3#3"4J!U!!Q!0`(!LU
+E!*!&+!#S!$B!h!F#+T`!N!8i!+J!4J$F"`)UR3#3"5J!j!"'!43(!LUH!*!&+!%
+B!%3"@!F#+Tm!N!93!53!E!&F"`)US!#3"3%!8!!J!)`(!LUK!*!&H!!%!)S!&`F
+#+U)!N!@-!!3!RJ!A"`)US`#3"AJ!8!#+!'-(!LUN!*!&M!"3!*i!B`F#+U8!N!9
+i!*`!LJ#["`)UTJ#3"B`!R!#H!+m(!LUR!*!&H!$S!)S!q`F#+UJ!N!@-!1J!RJ$
+l"`)UU3#3"AJ"-!#+!8-(!LUU!*!&M!%`!*i"3`F#+UX!N!9i!"`!LJ!m"`)UV!#
+3"B`!(!#H!$`(!LUY!*!&H!"S!)S!L!F#+Ui!N!@-!'J!RJ#)"`)UV`#3"AJ!Y!#
++!03(!LU`!*!&M!#d!*i!e!F#+V%!N!9i!3!!LJ%J"`)UXJ#3"B`"!!#H!5!(!LU
+c!*!&H!&)!)S"D!F#+V3!N!@-!8J!RJ&S"`)UY3!!!"J!13'T!+S$1J!)!!!"!*!
+&"0J"+J#3"6!!N!F%!!"-#Ie[r@X!!5%q#)qL'`!#"#X%''Xd!!2c[UADhA%!"'"
+hB(GJG`!!!RJ!*!#3"43!"!!N!$5)"h*PCh9X)$%!N!BX!!3!2!!dL!GbC@GeE#!
+b!*!'4!!%!&3!0)J(FQ9RG@`J-`#3"P`!"!"X!$5)"h*PCh9X)$3!N!B"!-J!$J$
+XL!4LEfa[!*!&!3$`!!m"')J&BfKKG@B!N!B"!4`!$J&!L!4`FQp`!*!&!3&)!!i
+"C)J$D@jd!*!'!3&S!!m"N!#)"@4PFQPf!*!'&!#%!#3!`!F#-(!!N!8X!)3!2!$
+!"`)`F3#3"83!K!"8!-!(!M"b!*!&A!#%!'`!`!F#-(-!N!88!-J!*!$X"`)`G!#
+3"5`!b!!m!1`(!M"e!*!&4!$)!&3!l!F#-(B!N!9F!-J!E!$X"`)`G`#3"43!m!!
+N!43(!M"i!*!&,!$`!$`"&!F#-(N!N!9%!2!!9!%8"`)`HJ#3"9`!m!"X!43(!M"
+l!*!&&!%B!#3"2!F#-(`!N!8X!4J!2!%m"`)`I3#3"83"'!"8!6`(!M"q!*!&A!%
+B!'`"2!F#-(m!N!88!8!!*!&N"`)`J!#3"5`"3!!m!@3(!M#"!*!&4!&!!&3"C!F
+#-))!N!9F!8!!E!&N"`)`J`#3"43"D!!N!B`(!M#%!*!&,!&S!$`"M!F#-)8!N!9
+%!@J!9!'-"`)`KJ#3"9`"D!"X!B`(!M#(!*!&&!!d!#3!J!F#-)J!N!8X!$3!2!#
+!"`)`L3#3"83!0!"8!)!(!M#+!*!&A!!d!'`!J!F#-)X!!!8Srri!*A*PCh9X,QJ
+!!GZhJ!!Y!$i!,3!r!#i!"J!Z!$i"flN!FQ9RG3!4U3!%"!#3#a'TF!(YPq!!N!`
+"flH!!*!3Pq!!N!`"flH!!*!3Pq!!N!`"flH!!*!3Pq!!N!`"flH!!*!6!3!!%X!
+!N"d"!!!5`!#3(3%!!",!!*!G!3!!%X!!N"d"!!!5`!#3'J(d$k!!!""`NL!!!'0
+SBA9QCQ&RC3#3$3(d$k!!!""`NL!!!'0SBA9QCQ&RC3#3$3(d$k!!!""`NL!!!'0
+SBA9QCQ&RC3#3$3(d$k!!!""`NL!!!'0SBA9QCQ&RC3#3$J-!*!!"%*!!!*!%BQp
+XE`#3%`)!*!!"%*!!!*!%BQpXE`#3%`)!*!!"%*!!!*!%BQpXE`#3%`)!*!!"%*!
+!!*!%BQpXE`#3%`S!*!!"%*!!!*!%GQpTC9pMD'&eCJ#3$3%!*!!"%*!!!*!%GQp
+TC9pMD'&eCJ#3$3S!*!!"%*!!!*!%GQpTC9pMD'&eCJ#3$3S!*!!"%*!!!*!%GQp
+TC9pMD'&eCJ#3$3d!-J!!%*!!!*!%F(*[F!"MD'&eCJ#3$3%!B`!!%*!!!!!!$("
+bEh!!BfKKG@B!N!d"!'-!!"#3!!!!!!a`FQp`!'0SBA9Q!*!0!3"M!!!3N!!!!!!
+-F(*[F!"MD'&eCJ#3$3%!-J!"%*!!!*!%D@jd!!"MD'&eCJ#3$3%!-J!"%*!!!*!
+%D@jd!!"MD'&eCJ#3$3%!-J!"%*!!!*!%D@jd!!"MD'&eCJ#3$3%!B`!"%*!!!!!
+!$'PZG!!!BfKKG@B!N!d"!$)!!4#3!!#3"'4PFQPf!'KKG@B!N!d"!$)!!4#3!!!
+!!!aNCA*TGJ"SBA9Q!*!0!3!b!!%3N!!!N!4NCA*TGJ"SBA9Q!*!0!3!b!!%3N!!
+!N!4NCA*TGJ"SBA9Q!*!0!J!%!!%3N!!!N!4YEf4P!*!6!3!%!!%3N!!!N!4YEf4
+P!*!6!3!%!!%3N!!!N!4YEf4P!*!6!3!%!!%3N!!!N!4YEf4P!*!9'J!8!)3!*!$
+!$k!"!!qJ!!!3F*)J!!!$H(Ki!!!!'J!X!)3!2!$!!!!"!!qJ!!!3F*)J!!!$H(K
+i!!!!'J"%!)3!9!$!!!!"!!qJ!!!3F*)J!!!$H(Ki!!!!'J"F!)3!E!$!$k!"!!q
+J!!!3F*)J!!!$H(Ki!!!!-3!8!$3!*!#!!!)"!!!%!!%3N!!!N!3D)!e[CQB0HQ9
+bE`ecD@e`E'80C'9RE'PdBfJ!!!!a!#`!0!!m!)!!!3%!!!3!!4#3!!#3""SJ$@p
+QCJekCA*[$A0TEA"XC3eNC@GXDA4MD!!!!$%!4!!d!&3!J!!#!3!!"!!"%*!!!*!
+%'L!0EfCQ$ATPFQm0FfPYF'aP$@4PCfaTG'0S!!!!-3"F!$3!E!#!!!%"!!!%!!%
+3N!!!N!3D)!e[CQB0HQ9bE`ecD@e`E'80C'9RE'PdBfJ!!!&F"0J"E2e,!(%"N3!
+!!!J(FQ9RG@`J-@pZ!!!!#!GbC@GeE#!bF'm!!!!)"h*PCh9X)$-JGJ!!!!J(FQ9
+RG@`J0'8J!!!!#!4LEfa[C(8J!!!!#!9MD'&eCQpZ!!!!#!4`FQp`GA-J!!!!#!0
+TER51EJ!!!!J&C'9bDACMD!!!!!F!!!&Z!!!!"`!!!6J!!!!(!*!("`#3"`F!!!!
+#!!!!"`!!!!-!!!!(!!!!!J!!!!F!!!!#!!!!"`!!!"B!!!!(!!!!&3!!!!F!!!!
++!!!!"`!!!!S!!!!(!!!!'!!!!!F!!!!D!!!!"`!!!!%!!!!(!!!!!3!!!!F!!!!
+@!!!!"`!!!"N!!!!(!!!!!3!!!!F!!!!"!!!!"`!!!"N!!!!(!!!!(3!!!!F!!!!
+"!!!!"`!!!!%!!!!(!!!!!J!!!!F!!!!#!!!!"`!!!!%!!!!(!!!!!3!!!(X!&!$
+)!#3!l!!$!3!!*!!"%*!!!*!%C#!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-MF0-MJ
+0-MN0-c!0-c%0-c)0-c-0-c30-c80-cB!!!"l!#`!b!!m!1`!!3%!!#3!!4#3!!#
+3"'3J$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!!!!H`"%!-J!9!$X!!%"!!!N!!%3N!!!N!4N)!da$6)0-`dd$6800Jd
+h$6J013da-!da-3da-Jda-`da0!da03da0Jda0`da1!da13db-!db-3db-Jdb-`d
+b0!db03db0Jdb0`db1!db13dc-!dc-3dc-Jdc-`dc0!dc03dc0J!!!(X!A!$)!'`
+!l!!"!3!!*!!"%*!!!*!%C#!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-MF0-MJ0-MN
+0-c!0-c%0-c)0-c-0-c30-c80-cB!!!"l!"3!m!!N!43!%J%!!#3!!4#3!!#3"'3
+J$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!!!!H`!X!2!!2!%8!#3"!!!N!!%3N!!!N!4N)!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!dc03dc0J!!!(X!4!$`!&3"&!!
+"!3!!*!!"%*!!!*!%C#!0-3db$6-00!de$6B00`di$6N0-6!0-6%0-6)0-6-0-63
+0-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!!!"l!&`!m!"X!43!!3%!!#3!!4#3!!#3"'3J$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!!!!T3!8!4J!*!%m!!)"!!!b!!!3N!!!N!51)!da$6)0-`dd$6800Jdh$6J013d
+a-!da-3da-Jda-`da0!da03da0Jda0`da1!da13db-!db-3db-Jdb-`db0!db03d
+b0Jdb0`db1!db13dc-!dc-3dc-Jdc-`dc0!dc03dc0Jdc0`dc1!dc13dd-!dd-3d
+d-Jdd-`dd0!dd03dd0Jdd0`dd1!dd13de-!!!!+8!,!%B!$`"2!"M!3!!B`!!%*!
+!!*!%ML!0-3db$6-00!de$6B00`di$6N0-6!0-6%0-6)0-6-0-630-680-6B0-6F
+0-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$F00$J00$N
+006!!!!#P!%3"'!"8!6`!!!%!!'-!!"#3!!#3")iJ$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$6-h$6-i$6-j$63`$63
+a$63b$63c$63d$63e$63f$63h$63i$63j$68`!!!!T3"F!4J!E!%m!!!"!!"M!!!
+3N!!!N!51)!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-!!!!+F!&!&!!#3"C!!"!3!!-J!"%*!!!*!%N!!J$6!0-3db$6-00!de$6B
+00`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-cB0-cF0-cJ0-cN
+00$!00$%00$)00$-00$300$800$B00$F00$J00$N006!!!!#R!#`"3!!m!@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$63
+f$63h$63i$63j$68`!!!!T`"%!8!!9!&N!!%"!!!b!!%3N!!!N!53!#!0-!da$6)
+0-`dd$6800Jdh$6J013da-!da-3da-Jda-`da0!da03da0Jda0`da1!da13db-!d
+b-3db-Jdb-`db0!db03db0Jdb0`db1!db13dc-!dc-3dc-Jdc-`dc0!dc03dc0Jd
+c0`dc1!dc13dd-!dd-3dd-Jdd-`dd0!dd03dd0Jdd0`dd1!dd13de-!!!!+F!A!&
+!!'`"C!!"!3!!B`!"%*!!!*!%N!!J$6!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"D!!N!B`!-J%!!$)!!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!@J!2!'-!!%"!!!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!&S!&3"M!!"!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!&`"D!"X!B`!!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`!!!!1!"m!#`!M!#
+3!!!"!3!!!`!"%*!!!*!%)5!0)*!),5d0)*!&BA9dE`ePFA9TE'PLFQ80!!!!(J!
+B!*!!!#S!X!!$!3!!!`!"%*!!!*!%"b!0-!da$6)!!!!H!#`!N!!!2J#`!!3"!!!
+$!!%3N!!!N!3()!d`$6%0-J!!!"i!3!#3!!"5!,!!"!%!!!-!!4#3!!#3"!FJ$6!
+0-3db!!!!(J"8!*!!!'B!X!!%!3!!!`!"%*!!!*!%"b!0-!da$6)!!!!H!'J!N!!
+!HJ#`!!3"!!!$!!%3N!!!N!3()!d`$6%0-J!!!"i!I!#3!!#1!,!!"!%!!!-!!4#
+3!!#3"!FJ$6!0-3db!!!!E!!B!,!!+J$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$!`-!!!!'`!,!#`!$i!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!"5!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!"8!,!!CJ$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$!`-!!!!'`!D!#`!(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!#1!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-$!`!!!!DJ!B!13!+J%B!!%"!!!C!!%3N!!!N!46)!da$6)0-`d
+d$6B01!da-Jda0Jdb0!dc-Jdd1!df0!dj0Jda-MJ0-6Nb$6)e0Jdc1$3006%b$6F
+f1!da-$)d$6%e-cB0-M!d1!dc-$Fb$63`168!!!"U!#`!j!!q!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-68c0Jdb-$3i$6-`0c)00$!j03!!!'S!3!$
+N!&)"'!!"!3!!'3!"%*!!!*!%8b!0-3db$6-00!df$6J0-6)0-6B0-M30-c)00$J
+00M3016B0-6)i$6%j-Jdb06B0-cJd$68a-Jdh0MJ0-6!b0!da06-f$6)`0$J0-c!
+h-Jdd-$Ne!!!!DJ"8!13!CJ%B!!%"!!!C!!%3N!!!N!46)!da$6)0-`dd$6B01!d
+a-Jda0Jdb0!dc-Jdd1!df0!dj0Jda-MJ0-6Nb$6)e0Jdc1$3006%b$6Ff1!da-$)
+d$6%e-cB0-M!d1!dc-$Fb$63`168!!!"U!'J!j!"k!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-68c0Jdb-$3i$6-`0c)00$!j03!!!'S!I!$N!)i"'!!
+"!3!!'3!"%*!!!*!%8b!0-3db$6-00!df$6J0-6)0-6B0-M30-c)00$J00M3016B
+0-6)i$6%j-Jdb06B0-cJd$68a-Jdh0MJ0-6!b0!da06-f$6)`0$J0-c!h-Jdd-$N
+e!!!#5!!K!*!&'!!%!#S!,)J&GQpTC6%!N!BX!!3!2J!XL!9fEfPP-J#3"N!!"!"
+5!#b)"AC[D@8c!*!'9!!%!'B!,)J&GQpTC63!N!CS!!3!HJ!XL!9fEfPP03#3"R`
+!"!#1!#b)"AC[D@8f!*!'"!!i!")!A)J%BA9dE`#3"33!Y!!4!1Q)"f0[GA*KER3
+!N!B%!*!!!"3!X)J%Cf&TEJ#3"4J!N!!!+J#`"`)Va3#3"5`!N!!!2J#`"`)VaJ#
+3"8!!N!!!8J#`"`)VhJ#3"93!N!!!CJ#`"`)Va!#3"@J!N!!!HJ#`"`)Vh!#3"A`
+!N!!!MJ#`"`)Vh3#3"4J!X!!U!13(!L[!!*!&,!#`!$i!j!F#+m%!N!9!!,!!8J$
+N"`)V`J#3"93!X!"Q!13(!L[$!*!&D!#`!(S!j!F#+mF!N!9m!,!!MJ$N"`)Vb!#
+3"4J!,!!U!*!!"`)Vb3#3"5`!,!!q!*!!"`)VbJ#3"8!!,!"5!*!!"`)Vb`#3"93
+!,!"Q!*!!"`)Vc!#3"@J!,!"k!*!!"`)Vc3#3"A`!,!#-!*!!"`)VcJ#3"4J!j!!
+U!4J(!L[2!*!&,!$N!$i"'!F#+p!!N!9!!13!8J%B"`)Vd3#3"93!j!"Q!4J(!L[
+5!*!&D!$N!(S"'!F#+p-!N!9m!13!MJ%B"`)Ve!#3"33!m!!5!4L)"@4PE'&T!!!
+!"-,rrJ!LBA9dEbjS!!!"difJ!#d!2J!Y!$m!,J!'!#i!2J(6N3"KG'd!!"$4!!3
+%!*!,%0&3!H4ZS!"R!))!!!$J!'d!!!(6MD!!EJ"e!'i!i!!3dF!"j!!!EU!!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!!!"difJ!'i!G3"Z!1!!%0(!!H3!!'kJ!'F!JJ!!!1!!E3!
+!!G10S!"Z!(8!EJ$J!"$4`!(N!*!&!3!!%X!!N"d"!!!5`!#3(3%!!",!!*!E"!!
+$!!%3N!!!N!4RB@PZ!*!6"!!$!!%3N!!!N!4RB@PZ!*!6"!!$!!%3N!!!N!4RB@P
+Z!*!6"!!$!!%3N!!!N!4RB@PZ!*!6"!!$!!%3N!!!N!4RB@PZ!*!6"!!$!!%3N!!
+!N!4RB@PZ!*!6!3!C!!%3N!!!N!4MEh9bB@jd!*!3!3!C!!%3N!!!N!4MEh9bB@j
+d!*!3!3!C!!%3N!!!N!4MEh9bB@jd!*!3!3!C!!%3N!!!N!4MEh9bB@jd!*!3!3!
+C!!%3N!!!N!4MEh9bB@jd!*!3!3!C!!%3N!!!N!4MEh9bB@jd!*!3!3!$!!%3N!!
+!N!4KGA4[!'jd!*!3!3!$!!%3N!!!N!4KGA4[!'jd!*!3!3!$!!%3N!!!N!4KGA4
+[!'jd!*!3!3!$!!%3N!!!N!4KGA4[!'jd!*!3!3!$!!%3N!!!N!4KGA4[!'jd!*!
+3!3!$!!%3N!!!N!4KGA4[!'jd!*!3!3!C!!%3N!!!N!4NC@aKD3"d!*!3!3!C!!%
+3N!!!N!4NC@aKD3"d!*!3!3!C!!%3N!!!N!4NC@aKD3"d!*!3!3!C!!%3N!!!N!4
+NC@aKD3"d!*!3!3!C!!%3N!!!N!4NC@aKD3"d!*!3!3!C!!%3N!!!N!4NC@aKD3"
+d!*!5!3!!%X!!N"dD!&!!d!"J!13!!3%!!!%!!",3!%%!!!0iH(J!!!!N!*3"`!#
+N!LJ!!!%!!!%!!",!%3)!#3eZDACPBA8JD'9XDA9Y!!!!)`#`!F!!`!)S!!!"!!!
+"!!!5`"%#!!N-GQ&ZEQ8JBR*[EfYc!!!!)J$!!F!!d!)S!!!"!!!"!!!5`"%#!!N
+,GQ&ZEQ8YEh9fFQ8!!!!L!0!"`!$J!LJ!!!%!!!%!!",!%3)!#3YfB@jZC5eQCA*
+YC3!!!#%!i!(!!2!#+!!!!3!!!3!!%X!4!J!*#RCKEQjP,ACTC'8!!!!D!9X!"`&
+k!#J!!!%!!2m!!"!3!!3!!J0iH(J!!!!D!9`!,!&k!%J!!!%!!2m!!"!3!!3!!J0
+iH(J!!!!D!9`!6!&k!'J!!!%!!2m!!"!3!!3!!J0iH(J!!!!`!@J!F!&i!5`!!!%
+!!!%!!",!%3)!$"PbBASJF'9bD@pNDA&eC5"YEf4eE'&dD@pZ!!!!'J!X!,!!EJ$
+3!!!"!!!)!!!3F!!J!!!$H(Ki!!!!'J!"!03!%3$N!!%"!!!"!!!5d!!K!!!$H(K
+i!!!!'J!5!03!)J$N!!%"!!!"!!!5d!"4!!!$H(Ki!!!!,3!N!!3!0!#)!!!"!!!
+"!!!5`$)#!!S@FfpbG'PP)(CKE'9eFQ9c)'*bGA4PF`!!!"S!#J#i!"J!a!!!!3!
+!"`!!%Y!!!!!-!hKiH!!!!"S!%`$%!"m!d!!!!3!!!3!!%Y!3!!!!!hKiH!!!!"S
+"P!"J!DB!e!!!!3!!!3!!%X!b!!!-!hKiH!!!!"X!i!)S!1`#0!!!!3!!!3!!%Y!
+3!!!!"'0ZG'`!!!!Z!B`!'!'S!%J!!!%!*a!!!"!3%`!!$"G3)'KPE'PeE5``,$!
+Z05`a,$%Z05`b$3!!!"d!!`$%!!m!d!!!!3!!!3!!%Y!M!!!@"Q9bFQ9eFJ!!!"d
+!!3!3!#)!E!!!!3!$k!!!%X!M!!!C"Q9bFQ9eFJ!!!#m!4!!"!')!8!!!!3!R%!!
+!%1!K33#R''KPE'PeE5``,MBX-#ii,$%X-5ib,$%Z0!!!!$J!'!!X!#S!N!!!!3%
+!!!-!!4#3!!#3"#%J$5#3##dY$5#3"@&eG'm0CA&eD@aTBR*P$3!!!$J!,!!X!$i
+!N!!!!3%!!!-!!4#3!!#3"#%J$5#3##dY$5#3"@&eG'm0CA&eD@aTBR*P$3!!!$J
+!3!!X!&)!N!!!!3%!!!-!!4#3!!#3"#%J$5#3##dY$5#3"@&eG'm0CA&eD@aTBR*
+P$3!!!$J!9!!X!'B!N!!!!3%!!!-!!4#3!!#3"#%J$5#3##dY$5#3"@&eG'm0CA&
+eD@aTBR*P$3!!!$J!D!!X!(S!N!!!!3%!!!-!!4#3!!#3"#%J$5#3##dY$5#3"@&
+eG'm0CA&eD@aTBR*P$3!!!83%B!)1!C!!!*B"(!!!!!J&GQpTC6%JB`!!!!J&GQp
+TC6*[G3!!!!J&GQpTC60SE`!!!!J&GQpTC63JB`!!!!J&GQpTC69X*`!!!!J&GQp
+TC6C`,3!!!!J%BA9dEh*[E!!!!!J(BfpeFQ&ZG'9k!!!!#!4RB@PZE@9Z!!!!"`!
+!!!%!!!!(!!!!!3!!!!F!!!!"!!!!"`!!!!%!!!!(!!!!!3!!!!F!!!!"!!!!"`!
+!!!%!!!!(!!!!!3!!!!F!!!!"!!!!"`!!!!%!!!!(!!!!!3!!!!F!!!!"!!!!"`!
+!!!%!!!!(!!!!!3!!!!F!!!!"!!!!"`!!!!%!!!!(!!!!!3!!!!F!!!!"!!!!"`!
+!!!%!!!!(!!!!"!!!!!F!!!!%!!!!"`!!!!-!!!!(!!!!"!!!!!F!!!!%!!!!#!9
+NC@aKDA-J!!!!'J!J!23!8J%!!"3"!!"N!!!3F%"J!!!$H(Ki!!!!'J!J!3!!8J%
+)!"3"!!"N!!!3F%"J!!!$H(Ki!!!!'J!J!3J!8J%3!"3"!!"N!!!3F%"J!!!$H(K
+i!!!!'J!J!4`!8J%S!"3"!!"N!!!3F%"J!!!$H(Ki!!!!'J!J!5J!8J%`!"3"!!"
+N!!!3F%"J!!!$H(Ki!!!!'J!J!6!!8J%i!"3"!!"N!!!3F%"J!!!$H(Ki!!!!'J!
+J!83!8J&8!"3"!!"N!!!3F%"J!!!$H(Ki!!!!*3"8!23!BJ&-!!!"!!!"!!!5`"%
+#!!N1FhGTG'0SAh"TE'9I09B!!!!Q!'!!p!"Z!8`!!!%!!!%!!",!%3)!#3pcGfP
+dBfKIF'PXC9ma09B!!!%-!)-!N!MrrhZl#%&bBfKPEh"c$A"KFQ&YAh*PCfaKCf8
+!N!3",3#3"!TdFQ&MC5"dEh9d!*!%#R4bB@0P)%3Z8bi!N!32G(*KBf8J-5"`CA*
+TEf4P!*!%!5d!N!3(CQpeFQPPFJ#3"!YMEh9bBQ8J9LK*+3#3"!P[EQ4PE'9dG'8
+!N!3",3#3"!aKGA4[E@&dDA0YCA-!N!3+FQ9RG@aKG'P[EJ#3"!KND@aeG'P[EJ#
+3""&cC@jcCA9b)(0dC@aXB@PbC3#3"!%Y!*!%$f0KFR4P)'4PFb"XEf*PF`#3"!K
+`EfPZG'&RC3#3"!9QEhPPFJ#3#"S!9!&-!'!"@!!"!3!!!3!!%Y!!S3!!!hKiH!!
+!!"S!B!&-!'`"@!!"!3!!!3!!%Y!!S3!!!hKiH!!!!"J!e3!a!Md#H3!)!!!"!*!
+&"HB"+J#3"5-!"!!%!"3!H!!!!3!!!3!!%X!#!J!-$(0[FR4TC5"LFR9dC3!!!$!
+!N!F%!*!%CQE-c!!"!*!(!J#3"`-!N!F%rj!'!!!!,3"%!&3!BJ#N!!!"!#F3!!!
+3i#'4!,%@F'PbB@jT,#i`-5`Z-$-X,M%X,M-X-3!!!"S!P!&m!-B"L!!8!3!!C!!
+!%("!)!!!!hKiH!!!!"S!P!'-!-B"Q!!8!3!!C!!!%("!)!!!!hKiH!!!!"S!P!'
+F!-B"U!!8!3!!C!!!%("!)!!!!hKiH!!!!"S!c!&X!2i"H!!8!3!!C!!!%("!)!!
+!!hKiH!!!!"S!c!&m!2i"L!!8!3!!C!!!%("!)!!!!hKiH!!!!"S!c!'-!2i"Q!!
+8!3!!C!!!%("!)!!!!hKiH!!!!"S!c!'F!2i"U!!8!3!!C!!!%("!)!!!!hKiH!!
+!!"S""!&X!6B"H!!8!3!!C!!!%("!)!!!!hKiH!!!!"S""!&m!6B"L!!8!3!!C!!
+!%("!)!!!!hKiH!!!!"S""!'-!6B"Q!!8!3!!C!!!%("!)!!!!hKiH!!!!"S""!'
+F!6B"U!!8!3!!C!!!%("!)!!!!hKiH!!!!#-!F!#-!(i!e!!!!3!!!3!!%X!4!J!
+*$(4bB@0P)'KPE'PeE3!!!#F!!3#F!"8!d!!!!3!!2`!!%*!!!!)!!""fEfPP$6%
+0-Jdc$63003df!!!!'J"3!4!!B!%N!!%"!!!"!!!5d!"K!!!$H(Ki!!!!'J"J!4!
+!EJ%N!!%"!!!"!!!5d!"a!!!$H(Ki!!!!'J"3!93!B!&S!!%"!!!"!!!5d!#"!!!
+$H(Ki!!!!'J"J!93!F!&S!!%"!!!"!!!5d!#4!!!$H(Ki!!!!'J"3!CJ!B!'X!!%
+"!!!"!!!5d!#K!!!$H(Ki!!!!'J"J!CJ!F!'X!!%"!!!"!!!5d!#a!!!$H(Ki!!!
+!&`"3!+3!B!$%!!B"!!!C!!%3N!!!!!#%!*!%&`"J!+3!F!$%!!J"!!!C!!%3N!!
+!!!#%!*!%&`"3!13!B!%%!!m"!!!C!!%3N!!!!!#%!*!%&`"J!13!F!%%!!%"!!!
+C!!%3N!!!!!#%!*!%&`"3!@J!B!')!!%"!!!C!!%3N!!!!!#%!*!%&`"J!@J!F!'
+)!!%"!!!C!!%3N!!!!!#%!*!%(!!"!!3!%!!X!!!"!!!"!!!5`!NJ!!S&FQ9cCA3
+!!!!J!$`"M!"+!G!!!!%!!!%!!",!-3)!#JPKE'PYAf*PBQm!!!!K!!3"U!!5!H`
+!!3%!!!%!!",!N3)!#JTdBepbC@4eDA4P!!!!'J"3!*!!!'!!T!!"!3!!!3!!%Y!
+!)3!!!hKiH!!!!"X!-!#)!%!!a!!8!3!!'3!!%*!!!!!!K!4LEfa[!!!!)`"N!!%
+!G!")!!%"!!!"!!!5`#&!!!S-E@pZG(*P)'*[E'pc!!!!)`"N!%`!G!#-!!%"!!!
+"!!!5`$13!!!+$(0KGACP)'0[EQCTC`!!!"F!B!%N!(!"4!!"!3!!'3!"%*!!!!!
+!K!#3"$!!D!!3!(J!J!!"!3!!!`!"%*!!!*!%'@CPG&pbBAS0BA*bCA30FQ&`D@4
+P$@aPER3!!!!D!*3"E!$'!AJ!&!%!!'3!!""`3#!!!!0iH(J!!"-[,bmUN!NJ)'0
+[C@CQD@0TC@jdFb!JF'peFL!JE'9c)#"YCA0eFQ9c)#"LEfa[)*!%+T!I,bm0,bm
+JN"PdEh9dCA-JE'9c)("eDA0cB@jMCA-JC@iJF&FJN#![,`d[,`NY-5d*E'pT)'4
+P)(*PF'pZFf8JG'KPFQeTFA9P)'4PFb"LEfa[Fb!JBACPBb"5)'9Z)'pSEA-JCA3
+J9#"PEL",C@afD@iJ)'0[C@BJ-#`a,$)*#5m[$5m[)*"8,bm0,bmJ#93J25!JBfp
+PCM)J)#SJ)#!S)#!JE'iJ+#!J8L![)'0[C@Ba+5!U+L!J+#!Y-5![)'0[C@B`)#N
+JN"X[,`d[,b#39#m[$5m[#5db,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-#T
+8BLNJ+LSJBfpPCM3JN!3Y)*!%+$%`+P4MFRP[+5!J+LSJ)'0[C@Bd)#NJN!m[,`d
+[,b#39#m[$5m[#5dc,3PMB@aMG@`JC@e`DA*TFA9P)'4P)&"MD@9X)'9d)'4P)#"
+dBA8*)#"MEf9Q)#!e,$BJN"m[,`d[,b#39#m[$5m[#3P3BfPPE!Np#@0[C@Be#5d
+J8'9XC@-*#@0[C@Be25"*)#SJ3@NJ+(4KBQaPFb"iBACTCA)T)*!H,bm0,bm*#A4
+KG3Np#5dJE'iJ+#!a)#XJ)&"MD@9X)#mJBfpPCMBJ+3PMEf9Q0MdJ55!U)%*T)#K
+dB@*XCA-JH'&fD@9b+5#3%bm[$5m[)*"8,bm0,bmUN&3[,`d0$5m[+T"8,bm0,bm
+JN&3[,`d[,b!J)("[GA)JE'9c)%e-8%%JN!Bk)#"RB@PZ)$dJ-6!`)#!JC'PfDA0
+PGA)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-JBQ9LEf4TCQBJ)$SJ)'aK)'0KF'%JCA0d)'0[FR*TCf9P)'3
+RG@iJCQ&MG'9eFL!`,MJf1##3&#m[$5m[)#!JF'peFL"XCA-JBf&bG'9c)'e[C'P
+QD@9PFb!k)'ePG(4bC5"NDACTFf9eFMd`)*!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)#!`)'pe)$%J)#`J)$)Z,MJJ25"#48*2)*!%,#!JD'&bC#!
+J)#`JN!XX)#!d,MFJ,#!J-c-c)*!&,#!0,bmJN"8a-#!p)%*PC'PQCL#3"#`JN!N
+X)*!,,#!0$5m[)("[GA)JE'9c)'*PC'PQCL!SBfpNC5!a-#NJ)'aP)'kK)'4P)'*
+[E'mJCA0d)#"1S5"NC5"LC@*[+MJJ)#XJ)'jeE@9bEb"NB@jc)'aK)'*PBQm0,bm
+J)(0[DA3J1L!J-5!b)$-J0#!e)$BJ)#iZ)#!j)$%`)$%a)$%b)$%c)$%d)#iZ)$%
+h)$%i)$%j)$)`)$)a)$)b)#iZ)'9dB`d0$5m[)'*[E'pc)'0KEA"KCfjP)$%j16J
+Y-6Nj13d[+JebC@GI6Q*6D5j+,#!a,#!`,#!a,#!a-$!X)$3Z0b`J-c-c,!NZ03N
+*#5`e-6NZ0L!J,#!i,M)i0Jef-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-5db-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)$3Z0b`J-c-c,#!Z05!J)#`J1#ib0L!J,#!b0Lif-5!
+X)$8Z-6!J)#`J)$FJ)#`J15ic063J)#!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#i
+Z,P!X)$%X)$!X)$NX)$%`-#`J0#ih,#!c-c-X)#ie)#!J,#!a-Lic-5!X)$-c,M3
+b)#`J-#if-MFJ,#!f,M8J,#!i,M%a-b!J)#`J)$)Z168i$3dU,`d[,f*[E'pc)'0
+KEA"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,M8J)#!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,`f3"#m[)#"LEfa[Fb"`Eh9b)%&bBfKPEh"c)#!J$3d
+0GM%YBQ9ND@Ba)#!X)$%X-6!X-5!X)#!b-$!X)$)b,#!J-M!`,#!Z05!J)#`J-6)
+Z-c%J,#!c-bid-L!*#3ef-5eLC@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'P
+Q0#!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,M8
+J)#!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,M3
+b)!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,MFX)$%`-$!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*$ABa,@*PC'PQ-6)J,#!a,$%`,$%d,#!a-$!`,#!d,MF
+X)$%`-$!X)#ie)#!J,#!a-Lic-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!*#3e
+f-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'KPFQe
+I-5ifDb!X)$%X-6!X-M%X)$%`-$!X)$%J)#`JN!3`,#!Z05!J)#`J-6)Z-c%J,#!
+c-bid-L!*#3edD'9bE9ma-'XJ)#`J-5`a-#`b-L`J-6!`-#`J-5!J,##3"$!X)#i
+e)#!J,#!a-Lic-5!X)$-c,M3b)!N*$3d!C3"0!I%#Y!!!!"i!#!(!!"B#'!!!!3!
+!!3!!%X!4!J!*"f0SBA9QAc%!!!!H!"J"`!!Q!KJ!!!%!!!%!!",!%3)!#3GMD'&
+eCPmb!!!!(J!S!F!!0J)B!!!"!!!"!!!5`"%#!!N(BfKKG@CI-`!!!"i!1!(!!%B
+#'!!!!3!!!3!!%X!4!J!*"f0SBA9QAc3!!!!H!%J"`!"@!KJ!!!%!!!%!!",!%3)
+!#3GMD'&eCPme!!!!(J"B!F!!CJ)B!!!"!!!"!!!5`"%#!!N(BfKKG@CI0J!!!"i
+!D!(!!(B#'!!!!3!!!3!!%X!4!J!*"f0SBA9QAcF!!!!F!)3"`!#5!KJ!!!%!!!%
+!!",!%3)!#39PH(4bB3!!!"i!!3!"!")!23!!!3!!!3!!%X!bN!!!$!GMB@aMG@a
+P!!!!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!!*!&)YY3!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!!!-CQp
+eFQPPFJ#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%aJ!N3$J!D)#C`!)!!!"!*!&"J3"+J#3"6!!N!F
+%!!$-c2q3"!!")6i)Mk)E!!)%+`3BDc3!!r1qTGVGF3!%B(GJGf"h!!!!-!!-!$`
+!3!%i!!!"!!!"!!!5`$-!!"-CFf&eGQ8JE'8JFQ9RE'&RC3eMEh9bB@jd$3!!!"S
+!6`!,!3m!)`!!!3!!#!!!%X!5!`!8!`d0$3!!!,)!#3#3"3`!2!"!!6J(!M`V!*!
+&6`!,!3m!)`F#2#J!N!96!#m!B!&T%!0iH(J!N!CV!#m!H!&T%!0iH(J!N!D$!#m
+!N!!"D4!$H(Ki!*!'Q`![!+J"D4!$H(Ki!*!'X`![!-!"D4!$H(Ki!*!'b`![!0J
+"D4!$H(Ki!*!'i`![!2!"D4!$H(Ki!*!'q`![!3J"D4!$H(Ki!!!!!C,rrJ!+FQ9
+RE'&RC5jS!'&RC5jS!!!Y!$m!,J!'!#i!2J&fh3"`FJ!!!(!8!!3%!*!,F"4`!HF
+!!!!"!!!5`$-!!"0cBA9fC9pbC@GXB@GP!*!-#!!!%X!5!`!8ER9YAh*PCfaKCf8
+!N!i"!!!5`!#3"'j[E9pbC@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%!!",!!*!%EQpYAh*PCfaKCf8!N!i"!!!5`!#3"'j
+[E9pbC@GXB@GP!*!1!3!!%X!!N!4ZEfeIFQ9RE'&RC3#3$KS!"!#m!"3!d!!"!3!
+!!3!!%Y!!)3!!!hKiH!!!!"S!&!#m!#3!d!!"!3!!!3!!%Y!!-3!!!hKiH!!!!"S
+!"!$m!"3"%!!"!3!!!3!!%Y!!33!!!hKiH!!!!"S!&!$m!#3"%!!"!3!!!3!!%Y!
+!83!!!hKiH!!!!"S!"!%m!"3"8!!"!3!!!3!!%Y!!B3!!!hKiH!!!!"S!&!%m!#)
+"8!!"!3!!!3!!%Y!!F3!!!hKiH!!!!"S!"!'!!"3"P!!"!3!!!3!!%Y!!J3!!!hK
+iH!!!!"S!&!'!!#3"P!!"!3!!!3!!%Y!!N3!!!hKiH!!!!"S!"!(%!"3"f!!"!3!
+!!3!!%Y!!S3!!!hKiH!!!!"S!&!(%!#3"f!!"!3!!!3!!%Y!!X3!!!hKiH!!!!"F
+!8!%N!'!"4!!"!3!!'3!"%*!!!!!!K!#3""F!8!'X!'!"c!!"!3!!'3!"%*!!!!!
+!K!#3""F!B!'X!(!"c!!C!3!!'3!"%*!!!!!!K!#3"%N!K!#3#2q3"!eMEfjQD@G
+eFQ&dD@pZ"A0KGACP!*!%$@0SBA*RC9pNDA0aG@8!N!3,BfKKFQGPAf9NDA3!N!L
+p!)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#"F!"!$3!"3!m!!"!3!!'3!"%*!!!!!!K!#3""F!&!$3!#3
+!m!!"!3!!'3!"%*!!!!!!K!#3""F!"!%3!"3"-!!"!3!!'3!"%*!!!!!!K!#3""F
+!&!%3!#3"-!!"!3!!'3!"%*!!!!!!K!#3""F!"!&3!"3"F!!"!3!!'3!"%*!!!!!
+!K!#3""F!&!&3!#3"F!!"!3!!'3!"%*!!!!!!K!#3""F!"!'8!"3"Y!!"!3!!'3!
+"%*!!!!!!K!#3""F!&!'8!#3"Y!!"!3!!'3!"%*!!!!!!K!#3""F!"!(B!"3"q!!
+"!3!!'3!"%*!!!!!!K!#3""F!&!(B!#3"q!!"!3!!'3!"%*!!!!!!K!!!!!)U!#!
+!N!8"!!J!%`!`"!0bBAS!N!BN!!3"!!*K!*!(!31S!"-$h!3'C@CQB@0P!*!&!3"
+d!"%!P)J$E@pj!*!'!`#A!"%!X4!$06!`!*!'"!,m!")$6)J-BfpbFQ9XBA4TEfi
+k!*!&!`06!"%$Sa!$-#ic!*!'!3!d!!m!G!F#*b3!N!88!!%!)J!`L!CLB@jNC6S
+!N!86!$)!)3"8%!%`!*!'%`"U!#%!M"!"-3#3"K3!@`!L!'H)!5d!N!B8!*F!)J#
+[L!*)HJ#3"33![!!8!0!(!LG!!*!&&!#m!#3!d!F#*d%!N!8%!2`!&!%3"`)R6J#
+3"43!r!!N!4!(!LG2!*!&"!%m!"3"8!F#*e-!N!88!6`!)J&3"`)R9!#3"33"J!!
+8!C3(!LG9!*!&&!'!!#3"P!F#*eF!N!8%!F3!&!(B"`)R@J#3"43"a!!N!GJ(!LG
+E!*!&"!$3!"3!m!F#*e`!N!88!0!!*!$`"`)RA3#3"33"%!!8!6!(!LGH!*!&&!%
+3!#3"-!F#*em!N!8%!9!!&!&`"`)RC!#3"43"8!!N!A!(!LGP!*!&"!'8!"3"Y!F
+#*fB!N!88!C3!*!'d"`)RC`#3"33"f!!8!IJ(!LGS!*!&&!(B!#3"q!F#*fN!!!5
+Jrri!)A4bB@0PAh4[GA3ZD!#!P+!!N!8$4$!!ITTB!&F!!(3!!!-!@!!!"!3!N!Q
+d!&N!!J"C!)%(m!#3"d!U!!P!!*!("!!!c-`!J3@J!*!1,3!!HiG`!*!()!"lLI!
+!#!!!e'YBF3VY!!!K2J!!+J#3"#!!-AZ!!-%!!`(H!RJ!+J!!!*%!J3"a!!!ZB!!
+!,3#3"$!"b$-J!!%"%!!6!C3!!3!!!*%!J3"a!!!ZB!!!E@pjC@jZC3!c)!!"!4!
+!%`'8!!%!N!8"!!!5`!#3"#d!N"J"!!!5`!#3"'0[FQ9X!*!8!3!!%X!4!J!-FQ9
+dEh9b!*!4N3#"!(%!!#jJ!!!Y!*!%-!()-b!!!3%3!"-"P!!"!!!!N3#"!(%!!#j
+J!!"QE@PZD3"c!$-J!!%"%!!6!C3!!3#3"3%!!",!!*!%CQeKH'N!N"+4!)%!F3!
+!,Q!!!#d!N!3`!FJc)!!"!4!!%`'8!!%!!!#4!)%!F3!!,Q!!!#d!N!3`!FJc)!!
+"!4!!%`'8!!%!!!!"!!%!!",3!#%!N"N"!!%!!",3!$%!N"N"!!%!!",3!%%!N"N
+"!!%!!",3!&%!N"N"!!%!!",3!'%!N"N"!!%!!",3!(%!N"N"!!%!!",3!)%!N"N
+"!!%!!",3!*%!N"N"!!%!!",3!+%!N"N"!!%!!",3!,%!N"N"!"N!!4#3!!!!!)4
+LEfa[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@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!!!!!)4
+LEfa[Af0[G@aPGA)!N!X"!"N!!4#3!!!!!)4LEfa[Af0[G@aPGA)!N!X"!"N!!4#
+3!!!!!)4LEfa[Af0[G@aPGA)!N!da!&!!!3"J!(N!!`%!!!3!!4#3!!#3""TSC@a
+TG@d0BfpZG'PZG3dd-#"c$63`-#"c$3!!!#8!K!"-!*3!a!!"!3!!"!!"%*!!!*!
+%$L!JBfKKG@BJ$A*TC@i0!!!!-3!`!!%!3!"j!!%"!!!$!!%3N!!!N!3DCQaKFfJ
+0EQpYD@jKE!eYD@jTEA9Y$A*TC@i!!!!T!(!!f!"q!8!!!!%!!!%!!",!%3)!#4*
+dFQ&MC5"dC@e`CA*KG(9bCA-!!!PSrri!4@4TE(9dD@pZ,QJ!3!!"%C!'!!)LN!B
+!!c-!C'PX!!!%4!!%"!#3#&99!!CQN!B!"hGh!!"hG`!)!'9dAh*KHJ#CN!B!#UU
+3"!#3"3%!!",!%3)!#A0hDA4MD&pSC@aTG@d!N!`"!!!5`"%#!!P&9N)!BfKID'9
+XDA9Y!*!-!3!!%X!4!J!*49C2!'0SAfKPE'PeE3#3$!%!!",!%3)!#89@4J"MD&p
+SC@aTG@d!N!`"!!!5`"%#!!P&9PB!BfKID'9XDA9Y!*!-r`!!%"!!"!!#FhGTG'0
+SAc%!N"(r!!!3%!!%!!*cGfPdBfKI-J#3%Im!!"!3!!3!!R0hDA4MD&mc!*!3*a!
+!!"!3%`!!$!"PG&pbBAS!N")"!!!5`!#3(3%!!",!%3)!$(*KHPpYEf4eE!#3%!%
+!!",!%3)!#A4bB@0PAfKPE'PeE3#3$3J!!""`!#!!!'jTGQ9KG9pSC@aTG@d!N!`
+"!!!5`!#3'`%!!3!!%Y!!)3!!GQpjB@jdAd9@6`#3$3%!!3!!%Y!!83!!GQpjB@j
+dAd9@4J#3$`%!!",!-J)!#R0[FR4TC9pLFR9dC3#3$3%!!",3%!!!!%9@3PpbCA4
+[GA)!N!m"!!!5d"!!!!"&9NpIFQ9dEh9b!*!2!3!!%Y!3!!!!49C'Ah*PG'peFJ#
+3$`%!!",3%!!!!%9@9PpbCA4[GA)!N!m"!!!5`$)!!!"NAc0)C3#3&!%!!",!)3!
+!$'9ZGQpTAf4KB`#3$bF3!!!3i#&"!+G58&p)C3#3&!%!!",!!*!%F&pNAc0)C3#
+3$Irr!!!!!3!!%X!!N!4`Af&TFJ"P!*!0rrm!!!2S!!!5`#-!!"PPFR*PGA)!N"%
+"!!-!!4#3!!#3"'CPG&pbBAS!N")"!!!5`!#3"("IC&md5'8!N!hrr`!!!!%!!",
+!!*!%F'PXCA-!N!rrr`!!!!%!!",!!*!%G'9YF'9bBA4eFQ9c!*!)rrm!&!"N!!!
+3F%"J!!"`Ac%`9!"ID'9XDA9Y!*!+&!"N!!!3F%"J!!"`Ah!a1%3!D'9XDA9Y!*!
++&!"N!!!3F%"J!!"`Afda1%3!D'9XDA9Y!*!+&!"N!!!3F%"J!!"`Ac%`3J"ID'9
+XDA9Y!*!+&!"N!!!3F%"J!!"`Ah!a1%)!D'9XDA9Y!*!+&!"N!!!3F%"J!!"`Afd
+a1%)!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@jdAh"`-68
+!N!dR%!!!%1!KN3#aF'PbB@jT!*!4&!"N!!!3F%!J!!"dAfJa!%)!D'9XDA9Y!*!
++&!"N!!!3F%!J!!"dAfJb!%)!D'9XDA9Y!*!+&!"N!!!3F%!J!!"dAfJc!%)!D'9
+XDA9Y!*!+&!"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'9XDA9Y!*!+&!"
+N!!!3F%!J!!"dAf)a!%)!D'9XDA9Y!*!+&!"N!!!3F%!J!!"dAf)b!%)!D'9XDA9
+Y!*!+&!"N!!!3F%!J!!"dAf)c!%)!D'9XDA9Y!*!+&!"N!!!3F%!J!!"dAf)d!%)
+!D'9XDA9Y!*!-!3!!%X!4!J!*BfJa!*!&D@aPAh"KFPme!*!)!3!!%X!4!J!*BfJ
+b!*!%BfJb!&p`BA*I03#3#!%!!",!%3)!#@0S-`#3"@PXC9p`BA*I03#3#!%!!",
+!%3)!#@0S0!#3"'0S-J"IF'&bAc8!N!J"!!!5`"%#!!PMD$8!N!9TE'9IF'&bAc8
+!N!J"!!!5`"%#!!PMD$B!N!4MD$)!Ah"KFPme!*!)!3!!%X!4!J!*BfJh!*!&D@a
+PAh"KFPme!*!)!3!!%X!4!J!*FhGICAKdFQ%!-J"IF'&bAc8!N!J"!!!5`!#3(3%
+!!",!!*!%G'9YF!")C3#3%J%!!",!%3)!#A4bB@0PAh4PEA"P!*!1!`!!%"!!"!!
+"C'&MAc%!C'&M!*!2$rm!!"!3!!3!!f4KBemb!&mb!*!4L!2Y!%S!%J#!!2`!!!!
+(!*!("`#3"`F!N!F(!*!("`#3"`F!N!F(!!!!"`!!!!F!N!F)(#"`25!Y-5if-3d
+JCR*PFA8p,63e,M%d-MFJ5(Tk)'F!!!!3!M)`E@9Z!!!!"`#3"`F!N!FD!"`"G!!
+k!B3!!!%!!!-!!"!3!!3!!30iH(J!!!!D!"`"L!!k!E3!!!%!$rm!!"!3!!3!!`0
+iH(J!!!!F!$`"H!"-!E!!!!%!!!%!!",!)3!!$!9PERC[D3!!")B!4!#3"3%!p!!
+J!9L))*!+F'PXCA-0C'PX)#![)#"LC@*[)#mJ)%d!N!@8!F!!T!)S"`)iT!#3"E!
+"`!$!!LJ(!MLP!*!&`!(!!0!#+!F#1+B!N!A3!F!!i!)S"`)iT`#3"H!"`!$`!LJ
+(!MLS!*!%!9X!"`&k!#J(!MLT!*!%!9`!,!&k!%J(!MLU!*!%!9`!6!&k!'J(!ML
+V!*!%!B`!'!'S!%J(!MLX!*!&#!&m!"F"RBJ$C'&M!*!&!@J!F!&i!5`(!MLY!*!
+&F!#-!(i!e!F#1+i!N!8X!,!!EJ$3"`)iV`#3"6!!d!"Z!0b)"9m0A`eI!*!'!3$
+8!"%!j!F#1,!!N!85!03!)J$N"`)iX3#3"53!"!!d!)J(!MLb!*!&#J#i!"J!a!F
+#1,-!N!8$!-3!$`$3"`)iY!#3"4-!a!!I!0!(!MLe!*!&i!)S!1`#0!F#1,B!N!3
+"P!"J!DB!e!F#1,F!N!8m!AJ!6!'`"`)iZ!#3"83!!3"L!&!(!MLj!*!&Y!!"!-B
+"C)J$,5dY!*!'i!!"!2)"C)J$,5dY!*!'!3!3!#)!E!F#1,S!N!9S!"!!H!#!"`)
+iZ`#3"FJ!!3$D!@5)!bdY,3#3"[3!!3%F!@5)!bdY,3#3"3%J!!%"5!&NL!-Y,5d
+!N!BJ!23!8J%!"`)i[!#3"5!"!!"5!3J(!MLp!*!&)!%)!&)"%!F#1,i!N!8J!4`
+!8J%S"`)i[`#3"5!"+!"5!6!(!MM!!*!&)!%`!&)"1!F#1-%!N!8J!83!8J&8"`)
+i`J#3"93!p!"L!8`(!MM$!*!&B!$d!'i"6!F#1-3!N!98!8`!B!&B"`)ia3#3"@!
+"6!"X!9J(!MM'!*!&4!"8!')!T!F#1-F!N!@8!@`!aJ&i"`)ie!#3"C3"I!$'!BJ
+(!MM)!*!&P!'-!-B"Q!F#1-N!N!@8!C`!aJ'S"`)ibJ#3"F`"E!$q!AJ(!MM,!*!
+&c!&m!2i"L!F#1-`!N!A-!B`!rJ'B"`)ic3#3"F`"R!$q!DJ(!MM1!*!%!33"E!%
+f!AJ(!MM2!*!%!33"I!%f!BJ(!MM3!*!%!33"M!%f!CJ(!MM4!*!%!33"R!%f!DJ
+(!MM5!*!&#!(!!"B#'!F#10-!N!8B!F!!*J)B"`)ie3#3"5J"`!!f!KJ(!MM@!*!
+&1!(!!%B#'!F#10F!N!9)!F!!9J)B"`)if!#3"9J"`!"Q!KJ(!MMC!*!&D!(!!(B
+#'!F#10S!N!@%!F!!NJ)B"`)if`#3"3`!G!!F!+b)"RCKEQjPF`#3"B3!!3#X!@5
+)!bdY,3#3"R!!f!"q!8!(!MMF!*!&(!&d!$S"K!F#10d!N!8F!BJ!1J'd"`)ihJ!
+!!*`!%!!%!#!!I!!"!3!!#`!"%*!!!*!%K@0[E@eKEQ4P)#!J$A"bEfGbB@eYC5"
+#48*2$A*KHL"MD'&eCQCKCf9c$5dY$A0dB@jNBA*NAc%0Fh4KEQ4KFQ4I-JecG'&
+ZC'&bC&mc$A0dB@jNBA*NAc30Fh4KEQ4KFQ4I03ecG'&ZC'&bC&mf$A0dB@jNBA*
+NAcF0Fh4KEQ4KFQ4I1!d!!!!D!!%!K!!F!,3!!3%!!#)!!4!3!!!!$!0iH(J!!!"
+#!!-!N!8(!HF!&`)e%!4KHQ9b!*!&(!!%!@-#3`#3"`3!"!!8!(J(!MVm!*!&!3#
+%!"`!Y!F#1[d!!!$'rri!"(0PER0PGA*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[FR4TC9pLFR9dC3#3$5)!!4!3!*!%F(*PE9pND@pNC3#3$aS!*`!$!$F!&`!
+"!3!!!3!!%Y!!)3!!!hKiH!!!!"S!0`!$!%F!&`!"!3!!!3!!%Y!!-3!!!hKiH!!
+!!"S!*`"$!$F!9`!"!3!!!3!!%Y!!33!!!hKiH!!!!"S!0`"$!%F!9`!"!3!!!3!
+!%Y!!83!!!hKiH!!!!"S!*`#$!$F!P`!"!3!!!3!!%Y!!B3!!!hKiH!!!!"S!0`#
+$!%8!P`!"!3!!!3!!%Y!!F3!!!hKiH!!!!"S!*`$(!$F!f`!"!3!!!3!!%Y!!J3!
+!!hKiH!!!!"S!0`$(!%F!f`!"!3!!!3!!%Y!!N3!!!hKiH!!!!"S!*`%,!$F"(`!
+"!3!!!3!!%Y!!S3!!!hKiH!!!!"S!0`%,!%F"(`!"!3!!!3!!%Y!!X3!!!hKiH!!
+!!"F!*J!B!$B!1!!"!3!!'3!"%*!!!!!!K!#3""F!0J!B!%B!1!!"!3!!'3!"%*!
+!!!!!K!#3""F!*`"B!$F!H!!"!3!!'3!"%*!!!!!!K!#3""F!0`"B!%F!H!!"!3!
+!'3!"%*!!!!!!K!#3""F!*`#A!$F!Y`!"!3!!'3!"%*!!!!!!K!#3""F!0`#A!%F
+!Y`!"!3!!'3!"%*!!!!!!K!#3""F!*`$G!$F!r3!"!3!!'3!"%*!!!!!!K!#3""F
+!0`$G!%F!r3!"!3!!'3!"%*!!!!!!K!#3""F!*J%I!$B"2`!"!3!!'3!"%*!!!!!
+!K!#3""F!0J%I!%B"2`!"!3!!'3!"%*!!!!!!K!!!!!)J!#!!N!9A!!%"L!*+!*!
+(&3"-!#3!MBJ)E@pjC@jZC6S!N!8A!*%!)`#[%!%a!*!'!3!"!"-!-33$FQ&k!*!
+'!3$)!!m"3)J#,5d!N!8A!6m!*`&`L!CdE@pbG$S!N!8B!A8!*!'D%!%d!*!'!J!
+a!"%!a`F#*f)!N!8#!8-!%J&ZL!9`D'&cC3#3"J8"G3!4!CX3!6!!N!B9!,`!*3%
+l"`)RB!#3"3N"SJ!F!Gm(!LGK!*!&&!!$!#8!33F#*f-!N!8R!!-!0`!A"`)RE`#
+3"6F!!`"(!"F(!LG`!*!&*`"$!$F!9`F#*h%!N!8h!%-!4`"A"`)RFJ#3"5F!J`!
+h!*F(!LGc!*!&0`#$!%8!P`F#*h3!N!8R!-F!0`$E"`)RG3#3"6F!a`"(!0X(!LG
+f!*!&*`%,!$F"(`F#*hF!N!8h!3X!4`%I"`)RH!#3"5B!'!!f!$J(!LGj!*!&0J!
+B!%B!1!F#*hS!N!8R!&J!0`"i"`)RH`#3"6F!@!"(!(J(!LGm!*!&*`#A!$F!Y`F
+#*hd!N!8h!*F!4`#h"`)RIJ#3"5F!h3!h!2d(!LGr!*!&0`$G!%F!r3F#*i!!N!8
+Q!4m!0J%r"`)RJ3#3"6B"(`"'!6m(!LH#!!!%S2rr!#&cH@jMD(*[,QJ!!-"TFL"
+fEh4bC5"MEfjdFQpXC5#)!'4c!*!)!@Bm`'Pb)(C[G(*P)'0[ER4bEfaP)!!!E#G
+KD3!!)'4e)("[F#eYC@je)'0[ER4b!!"P$3e@Eh8!!("[GAB!!#"RMQk1FQ&XC@e
+PER3JBfKKEJ!!FL"XCA-J!!"eE'9eE@pjC@jZC3"ZG(*[E'8JBACPBb!!!(-JG(*
+[D3!!Bf&cCA*KHJ!JBfpeE'9eFR-JC(8JC'PK!!"RG@8Z$8`!!'0SD@C`CA*TEf4
+P!'&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+!!!)'0SD@CQFQ8JCA3
+J-b"MEh9X!!"bFbN0E@%!!(!JBh*`D'&cC3"[E@&dDA&eC@ePER3JG3#3"3%!N!3
+4!`!+FQ&kAh"KFQ&cDA4P!#"`Eh9b)'-!N!8"!!!5`'+3!!!+C@jbC@GTFh4bC3#
+3$`%!!",!%3)!$(*PG'peFJ#3%3%!!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%!'3!
+"%*!!!!!!K'*[E'pIBfpeE'9eFJ#3#2rr!!%!'3!"%*!!!!!!K'*[E'pIBfpeE'9
+eFJ#3#2rr!!%!'3!"%*!!!!!!K'*[E'pIBfpeE'9eFJ#3#`%!'3!"%*!!!!!!K'*
+[E'pIBfpeE'9eFJ#3#`%!'3!"%*!!!!!!K'*[E'pIBfpeE'9eFJ#3#`%!'3!"%*!
+!!!!!K'*[E'pIBfpeE'9eFJ#3#`%!'3!"%*!!!!!!K'*[E'pIBfpeE'9eFJ#3#`%
+!'3!"%*!!!!!!K'*[E'pIBfpeE'9eFJ#3#`%!'3!"%*!!!!!!K'*[E'pIBfpeE'9
+eFJ#3#`%!'3!"%*!!!!!!K'*[E'pIBfpeE'9eFJ#3$!*-"(i"(`*!!J8!mJ!!!!J
+HBf&NC@jMC5"N*f9YDA0cD@pZ)#KZBL"LE'pMDh-T$3e@!!!!"`#3"a!"-'Pc!!!
+!%!)a-'8JB`!!!"!"-@8J!!!!%!%aC'8!!!!3!M%`,@eP!!!!%!%aG()!!!!3!6&
+[G3!!!"!"-'9k!!!!%!%`B@`!!!!3!6"MD!!!!"!"-'aP!!!!%!%`CA8!!!!3!6&
+ME`!!!"!"-#"K!!!!%!%aFb!!!!!3!6"MB3!!!"!"-#"M!!!!%!%`Fb!!!!!3!6"
+XE`!!!"!"-'8J!!!!#!0RF(1))!!!!!J,G@jP)("PFQP[C'9QB`!!!!J(FhPZBfK
+bEb"M!!!!#!K`EfPZG'&RC@jc)!!!!!J+BQpXEfePG(*PFfpZG!!!!!J*ChPbEh0
+MEh"P)'3!!!!)$A0PER-JFh4PE'aKDA)JB3!!!!J%FQPPER9KG!!!!!J,BQpXEb"
+MEfe`FQPeEJ!!!!J*ChPbEb"MEfe`Bfm!!!!)#(0cG#"MEfe`)'0b!!!!#!aMBA4
+KE'mJCQaKFfKd)(8!!!!(!*!("`#3"`F!N!F(!*!("`#3"`F!N!F(!*!(#!9`BA*
+KE@80!!!!#!GUEh9bEQ&XFb!!!!!)"h*PCfaKCf9ZD3!!!!J)C'PXGA4TEfjTGQ%
+!!!!)!fG`Fd*2!!!!#!YeEQ8JF'9bD@pNC@pe!!!!#!GcH@jMD(*[B@i!!!!)#("
+[D@jdB@GP)'0[!!!!3!!!!$i!3!!%!&!!I!!"!3!!"3!"%*!!!*!%*b"fB@jZC3e
+bD@9Z$@CPFQePC3e[GACPFR4P$A"bCA0cD@pZ$9!V9!!!!*i!)!!"!$!!H3!"!3!
+!#J!"%*!!!*!%Kh4Y$A"XB@C[EQ3JFh4KEQ4KFQ30E@pZG)jP$A*PCfaKCf8JC'P
+X$A*PCfaKCf8JBQpXE`edCA0d)'*[E'mJBR*eG!edCA0d)(0cG#"LFR9d$A4PFh3
+JChPbEb"LFR9d$A0[E#"`EfPZG'&RC3eYCA-JBR*eDA30FQ9QFQpTC'PcFf9YC@j
+d$3!!!f`!,J#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)$%f0Lih)'Y)HL!J,5dJ)#!f,MNd)'Y)HL`JN!4YEf4eE'&dD@p
+Z1L!J16%Z0#")HJ#3"Y3!)!$N!*1)%QC[GA*TCA)k)#!JF'pTER4c23#3"GF!N`$
+P!,d3!M%`!*!&e!$-!13"!)J%-6!b-!#3"6`"2!"+!B3(!LFQ!*!&!3!d!"!!J!F
+#*a%!N!8`!-3!3!%`L""L-M!p,6!Z-c)i-63f),9@!*!&-!%m!$i"F!F#*a-!N!8
+"!9`!)`')L!YdC@e`F`eYEh*d1J#3"M!"M!!q!FJ(!LF@!*!&!3')!"`"S!F#*aJ
+!N!8"!!3!%!!X"`)R8!#3"6`"M!"+!G!(!LFC!*!&"!'S!")"l!F#*e%!N!93!*!
+!!'!!T!F#*e)!N!9J!*!!!(!!T!F#*a!!N!93!0!!B!$N"`)R%J#3"@!!d!"`!13
+(!LF8!*!&8!%3!'!"*!F#*aF!N!9J!4!!EJ%N"`)R*`#3"9!"9!"J!@J(!LFS!*!
+&B!&8!(!"D!F#*bN!N!93!CJ!B!'X"`)R+J#3"@!"Q!"`!D`(!LFV!*!&-!!"!%!
+!H3F#*b`!N!8`!)J!3!$%"`)R,3#3"@3!!3"d!%J(!LFc!*!&C!"-!(3!M!F#*c3
+!N!9!!!3!8!"m"`)R03#3"9!!!3"J!(N(!LFf!*!&8!#N!'!!a!F#*cF!N!9J!+3
+!F!$%"`)R13#3"9!!j!"J!33(!LFk!*!&B!$N!(!""!F#*cX!N!93!53!B!&%"`)
+R2!#3"@!"*!"`!83(!LFp!*!&8!&S!'!"L!F#*ci!N!9J!@J!F!')"`)R2`#3"9!
+"V!"J!F`(!LGV!*!&B!'X!(!"c!F#*f`!N!@%!%`!P!$%"`)RE3#3"4!!"!!J!(`
+(!LGZ!*!&)!!"!$!!H3F#*i-!!!Cmrrm!,f&MFA9T,QJ!!'J!d!"mmF!!N!8&2j!
+!!(Zbf!$T!!"P!!!9!Dd!!!3%!#J!!`#J!H8!N!8&2j!!!!!!I2$3!!$a`!!!,3#
+3"#!!I2I3!*!(5!#3"5`!,!!%%"!!!!!+EQ*IE@9c!!!!m$`!!!c!!!!$!(m!!!"
+rfr!!N!G!F'9bD@pNC3!m!!!-`!!!!`"rdS!!!0``%"!!N!4ZBQeP,3#3"2!m!!!
+-`!!!!`"r!!!!I`!!h$!3%!#3"'jLE@9QFQ9a!!!m!!!-`!!!!`"r!!!!I`!!Ff&
+Y3J'a!*!',3!!)!'aM3!!#2q3"!!!+i6rr`!!Kh!"XBU3!!#3"QjLAh"dF`#3"3%
+Y!*!%!3'a!*!%G!`!!",!IS!!!("dAf0[GA*KER3!(!!!G!`!!%*m!*!&!3#3"$%
+#!!NU!!!`!C8Vd!'40+J"N6(%!!![0!#3"3)!!",!!`)!$(4KBfKPAfPZG'9b!!!
+!3R`!!!"r!!!P2!#3"J%8!&"fB@aPGA)!8`e)!!3!9!!B!(6r!*!'!3#3"$%#!!N
+U!!"3U93!855%!&-05!#B!%`!UJ!!r`#3#&%K-#d!EA"IE@pbG!!!!!4MER4XCA-
+!N!B"!*!%-3)!#QCXB@Fa!*!%2!"3U93!N!N'!'3!!"!3!!!!#A4PEA"IE@pbG!#
+3#LN!!!!"!!%!!",!#5!!#R*PFf9d!*!8!3!!%X!a!J!+CQaKCc)!N")"!!%!!",
+!N3)!#R4MAh*PC(9TG'8!N!d"!!%!!",3!#%!N"N"!!%!!",3!$%!N"N"!!%!!",
+3!%%!N"N"!!%!!",3!&%!N"N"!!%!!",3!'%!N"N"!!%!!",3!(%!N"N"!!%!!",
+3!)%!N"N"!!%!!",3!*%!N"N"!!%!!",3!+%!N"N"!!%!!",3!,%!N"N"!!-!!4#
+3!!#3"'CXBA0S!'PcFfP[EJ#3#`%!'3!!%*!!!!!!K'*[E'm!N"8"!!!5`#&!!!T
+YEfjdFQ8!N"-"!!!5`$13!!!+Ff&eGQ8!N")"!!8!!4#3!!#3"(CKEQjP!*!5!3!
+%!!%3N!!!N!4SC@aTG@d!N"%"!"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!X"!"N!!4#3!!!!!)4
+LEfa[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
+"!!3!!4#3!!#3"'0SBA9Q!*!5!3!,!!%3N!!!N!4ME@3!CJ#3%J%!#J!"%*!!!*!
+%G'9XC@ePFh9bC3"Z!*!-!63$l`-j!GJ!b!)1!!!!#"*K16PI-$GI-$BY-6&S-$K
+Y-69eFb!!!!!)$'0[E@ePER4KDA*PFh4bC3!!!"!&,Li[,Lk))!!!!!3!!!!)%'C
+TBfKTCA)JC'PK)$%J1L"XC3d!!!!3!#"`E`!!!!J3CQPMD'PPFL"ND@%J-L!k)'j
+RC3!!!"!!)'0[!!!!"`#3"`F!!!!#!!!!#!"PBb!!!!!(!!!!!3!!!!J+C'pZAh5
+1E)ik)'9eFJ!!!"!!C'PK!!!!#""QD@0SD@9b)'&bBfJa)$SJCf&e!!!!%#9(-ep
+"FQ0SC@p`Fc)k3A*MD'9[F(0I-MTQD@0SD@9bFepNBA4KFb!!!!!)%'CTBfKTCA)
+JBA*MD$)J1L"P$8`!!!!3$Q0SC@p`FepYB@0NBA4KCA0d!!!!eJ2T!2X!I3"F!0!
+!!!!)!9CN*`!!!!J"5A4b!!!!#!&8Eh8!!!!)!8aPHJ!!!!F!!!pJ!!!!"`!!#k!
+!!!!(!!!$J!!!!!F!N!X(!!!!!3!!!!J#F'KXC3d!!!!(!*!("`#3"`J"Cf9Z!!!
+!#"`J)$%Z06)c6EdJ-c%Z06-cEN%J)$3i,M!c1@e@C5"K!!!!"`#3"`J#8MeKFf8
+!!!!3!6"[G3!!!!F!!!!"!!!!"`#3"`J"GQ0S!!!!"`!!!!)!!!$@!qN"F3"q!&`
+!d!!!!!J"9Q3R!!!!#!&*G()!!!!)!94[G3!!!!J"6'9k!!!!"`!!$8!!!!!(!!!
+,S!!!!!F!!!5!!!!!"`#3#`F!!!!"!!!!#!*`D'aP$3!!!!F!N!F(!*!(#!&RC@i
+!!!!)(#!J-5ic-600[5!c-5ie-c0Z35!J0$%Z-cNjE9CP)'%!!!!(!*!(#!*52@&
+cC3!!!"!"-'pe!!!!"`!!!!%!!!!(!*!(#!&fBfJ!!!!(!!!!!J!!!03$k3*P!(i
+!A!$3!!!!#!&@C#F!!!!)!8PdFJ!!!!J"9'pe!!!!#!&-CAS!!!!(!!!!S!!!!!F
+!!!qJ!!!!"`!!!f!!!!!(!*!,"`!!!!%!!!!)!R"SE'80!!!!"`#3"`F!!!!#!!!
+!#!&RC@i!!!!)'b!d-bia-dZp)#!j,M!e0@j")#!J-#ic16&Y9QaP!!!!"`#3"`J
+#8MdJBf%!!!!3!6!JB`!!!!F!!!!"!!!!"`#3"`J"GQ8J!!!!"`!!!!%!!!$8!qN
+!K3&M!&`!d!!!!!J"9Q3R!!!!#!&*G()!!!!)!94[G3!!!!J"6'9k!!!!"`#3"`F
+!N!F(!!!$`!!!!!F!N!X(!!!!!3!!!!J#F'KXC3d!!!!(!*!("`!!!!)!!!!)!@G
+PEJ!!!!JE)#!`,M!`5ldJ)$!Z-$!`EN%J)#!`,M!`-'e@E'8!!!!(!*!(#!*525"
+MB3!!!"!"-#"M!!!!"`!!!!%!!!!(!*!(#!&fC5!!!!!(!!!!!3!!!03$k3&a!9i
+!A!$3!!!!#!&@C#F!!!!)!8PdFJ!!!!J"9'pe!!!!#!&-CAS!!!!(!!!%i!!!!!F
+!!!qJ!!!!"`!!!m!!!!!(!*!,"`!!!!%!!!!)!R"SE'80!!!!"`#3"`F!!!!#!!!
+!#!&RC@i!!!!)'c-c0Lid08Zp)#!j,M!e0@j")#!J-bi`0$CY9QaP!!!!"`#3"`J
+#8MdJBf%!!!!3!6!JB`!!!!F!!!!"!!!!"`#3"`J"GQ8J!!!!"`!!!!-!!!$8!qN
+"l3&H!&`!d!!!!!J"9Q3R!!!!#!&*G()!!!!)!94[G3!!!!J"6'9k!!!!"`!!!Z!
+!!!!(!!!2S!!!!!F!!!2J!!!!"`#3#`F!!!!"!!!!#!*`D'aP$3!!!!F!N!F(!!!
+!!J!!!!J"Cf9Z!!!!#"Xa16JZ0$*,[5!J15i`069Z35!J)$%Z0cNhE9CXC3!!!!F
+!N!F)!P)p)'0K!!!!%!%`)'-!!!!(!!!!!3!!!!F!N!F)!ACP)!!!!!F!!!!$!!!
+!e!2T!QB"AJ"F!0!!!!!)!9CN*`!!!!J"5A4b!!!!#!&8Eh8!!!!)!8aPHJ!!!!F
+!N!F(!*!("`#3"`F!N!X(!*!(#!*`D'aP$3!!!!F!N!F(!*!(#!&RC@i!!!!)'b!
+J-#i`-%Zp)#!`,M!`-'j")#!J-#i`-$"Y9QaP!!!!"`#3"`J#8MdJBf%!!!!3!6!
+JB`!!!!F!!!!"!!!!"`#3"`J"GQ8J!!!!"`!!!!%!!!$8!qN#i!&G!&`!d!!!!!J
+"9Q3R!!!!#!&*G()!!!!)!94[G3!!!!J"6'9k!!!!"`#3"`F!N!F(!!!$)!!!!!F
+!N!X(!!!!!3!!!!J#F'KXC3d!!!!(!*!("`#3"`J"Cf9Z!!!!#"XJ)$!Z-$",[5!
+J-#i`-$"Z35!J)$!Z-$!`E9CXC3!!!!F!N!F)!P)p)'0K!!!!%!%`)'-!!!!(!!!
+!!3!!!!F!N!F)!ACP)!!!!!F!!!!%!!!!e!2T!A8#33"F!0!!!!!)!9CN*`!!!!J
+"5A4b!!!!#!&8Eh8!!!!)!8aPHJ!!!!F!!!$!!!!!"`!!$k!!!!!(!!!!3!!!!!F
+!N!X(!!!!!3!!!!J#F'KXC3d!!!!(!*!("`!!!!)!!!!)!@GPEJ!!!!JE)$8a,MF
+f5ldJ)$NZ-$8eEN%J)#!`,M3f1@e@E'8!!!!(!*!(#!*525"MB3!!!"!"-#"M!!!
+!"`!!!!%!!!!(!*!(#!&fC5!!!!!(!!!!!3!!!03$k3(Y!N)!A!$3!!!!#!&@C#F
+!!!!)!8PdFJ!!!!J"9'pe!!!!#!&-CAS!!!!(!*!("`#3"`F!N!F(!*!,"`!!!!%
+!!!!)!R"SE'80!!!!"`#3"`F!N!F)!@GPEJ!!!!JE)#!`,M!`5ldJ)$!Z-$!`EN%
+J)#!`,M!`-'e@E'8!!!!(!*!(#!*525"MB3!!!"!"-#"M!!!!"`!!!!%!!!!(!*!
+(#!&fC5!!!!!(!!!!"!!!!03$k3#"!b3!A!$3!!!!#!&@C#F!!!!)!8PdFJ!!!!J
+"9'pe!!!!#!&-CAS!!!!(!!!$!*!%"`#3"`F!N!F(!*!,"`!!!!%!!!!)!R"SE'8
+0!!!!"`#3"`F!N!F)!@GPEJ!!!!JE)#!`,M!`5ldJ)$!Z-$!`EN%J)#!c,MFd1@e
+@E'8!!!!(!*!(#!*525"MB3!!!"!"-#"M!!!!"`!!!!%!!!!(!*!(#!&fC5!!!!!
+(!!!!"J!!!03$k3$j!b3!A!$3!!!!#!&@C#F!!!!)!8PdFJ!!!!J"9'pe!!!!#!&
+-CAS!!!!(!!!%3!!!!!F!N!F(!*!("`#3#`F!!!!"!!!!#!*`D'aP$3!!!!F!N!F
+(!*!(#!&RC@i!!!!)'b!J-#i`-%Zp)#!`,M!`-'j")#!J05ic-6*Y9QaP!!!!"`#
+3"`J#8MdJBf%!!!!3!6!JB`!!!!F!!!!"!!!!"`#3"`J"GQ8J!!!!"`!!!!B!!!$
+8!qN!I`"j!&`!d!!!!!J"9Q3R!!!!#!&*G()!!!!)!94[G3!!!!J"6'9k!!!!"`#
+3"`F!N!F(!*!("`#3#`F!N!F)!R"SE'80!!!!"`#3"`F!N!F)!@GPEJ!!!!JE)#!
+`,M!`5ldJ)$!Z-$!`EN%J)#!`,M!`-'e@E'8!!!!(!*!(#!*525"MB3!!!"!"-#"
+M!!!!"`!!!!%!!!!(!*!(#!&fC5!!!!!(!!!!!3!!!03$k3(U!)%!A!$3!!!!#!&
+@C#F!!!!)!8PdFJ!!!!J"9'pe!!!!#!&-CAS!!!!(!*!("`#3"`F!N!F(!*!,"`#
+3"`J#F'KXC3d!!!!(!*!("`#3"`J"Cf9Z!!!!#"XJ)$!Z-$",[5!J-#i`-$"Z35!
+J)$!Z-$!`E9CXC3!!!!F!N!F)!P)p)'0K!!!!%!%`)'-!!!!(!!!!!3!!!!F!N!F
+)!ACP)!!!!!F!!!!"!!!!e!2T!Ym!IJ"F!0!!!!!)!9CN*`!!!!J"5A4b!!!!#!&
+8Eh8!!!!)!8aPHJ!!!!F!N!F(!*!("`#3"`F!N!X(!*!(#!*`D'aP$3!!!!F!N!F
+(!!!!!3!!!!J"Cf9Z!!!!#"XJ)$!Z-$",[5!J-#i`-$"Z35!J)$!Z-$!`E9CXC3!
+!!!F!N!F)!P)p)'0K!!!!%!%`)'-!!!!(!!!!!3!!!!F!N!F)!ACP)!!!!!F!!!!
+"!!!!e!2T!2X"AJ"F!0!!!!!)!9CN*`!!!!J"5A4b!!!!#!&8Eh8!!!!)!8aPHJ!
+!!!F!N!F(!*!("`#3"`F!N!X(!*!(#!*`D'aP$3!!!!F!N!F(!*!(#!&RC@i!!!!
+)'b!J-#i`-%Zp)#!`,M!`-'j")#!J-#i`-$"Y9QaP!!!!"`#3"`J#8MdJBf%!!!!
+3!6!JB`!!!!F!!!!"!!!!"`#3"`J"GQ8J!!!!"`!!!!%!!!$8!qN!q`*"!&`!d!!
+!!!J"9Q3R!!!!#!&*G()!!!!)!94[G3!!!!J"6'9k!!!!"`!!!-!!!!!(!!!2S!!
+!!!F!N!F(!*!,"`!!!!%!!!!)!R"SE'80!!!!"`#3"`F!!!!#!!!!#!&RC@i!!!!
+)'b!e-5ih0NZp)#!j,M!e0@j")#!J-#id0MPY9QaP!!!!"`#3"`J#8MdJBf%!!!!
+3!6!JB`!!!!F!!!!"!!!!"`#3"`J"GQ8J!!!!"`!!!!%!!!$8!qN!I`*"!&`!d!!
+!!!J"9Q3R!!!!#!&*G()!!!!)!94[G3!!!!J"6'9k!!!!"`!!!+!!!!!(!!!2S!!
+!!!F!!!"!!!!!"`#3#`F!!!!"!!!!#!*`D'aP$3!!!!F!N!F(!!!!!J!!!!J"Cf9
+Z!!!!#"XJ0$-Z-60,[5!J15i`069Z35!J)$!Z-cNaE9CXC3!!!!F!N!F)!P)p)'0
+K!!!!%!%`)'-!!!!(!!!!!3!!!!F!N!F)!ACP)!!!!!F!!!!"!!!#"J2S!*B#&3"
+e!G-!!!!)&fePFh9bCA-JF'&b$6%[-L"`MR*TEf4PGAB!!!!(!!!!)J!!!"!')#!
+J0biiER4b!!!!#!+eFbGKD3!!!!JhCR*PF6SJ-6)i,M)JDdKk)#!Y,5!J)$8Z-c3
+JDdKk,##3"'e[C(9XBA4TEfik)#!h1#if)%KkFb!!!!!)%QC[GA*TCA)k)#!JF'p
+TER4c2@9M)!!!!"!#-6"TFb!!!!!)"$%`-M"MEh8!!!!(!*!("`#3"`J1BM)`268
+c0c-Z-$BJY9CeBfJ!!!!(!*!(#!YdC@e`F`eYEh*d1L"M!!!!"`#3"`F!!!!*!!!
+!"`!!!!%!!!!(!*!("`!!!!%!!!!(!!!!!3!!!!F!!!!"!!!!"`!!!!%!!!!(!!!
+!!3!!!!F!!!!"!!!!"`!!!!%!!!!(!!!!!3!!!!F!!!!"!!!!"`!!!!%!!!!(!!!
+!!3!!!!F!!!!"!!!!"`!!!"3!!!!(!!!!!3!!!!F!N!F(!!!!!3!!!!F!!!!$!!!
+!"`!!!!B!!!!(!!!!#!!!!!F!!!!2!!!!"`!!!!%!!!!(!!!!!3!!!!F!!!!"!!!
+!"`!!!!%!!!!(!!!!!3!!!!F!!!!"!!!!"`!!!"N!!!!(!!!!!3!!!!F!!!!"!!!
+!"`!!!!B!!!$@!qN#CJ-Q!&`!d!!!!!J"9Q3R!!!!#!&*G()!!!!)!94[G3!!!!J
+"6'9k!!!!"`!!$k!!!!!(!!!2S!!!!!F!N!F(!*!,"`#3"`J#F'KXC3d!!!!(!*!
+("`!!!!%!!!!)!@GPEJ!!!!JF)$Ni,MJj[5!j0cBd,M!`-'j")#!J-#ij0MCY9Q8
+JB3!!!!F!N!F)!P)pBA0P!!!!%!%`Eh8!!!!(!!!!!3!!!!F!N!F)!ACMD!!!!!F
+!!!!"!!!!e!2T!A)$*3"F!0!!!!!)!9CN*`!!!!J"5A4b!!!!#!&8Eh8!!!!)!8a
+PHJ!!!!F!!!qJ!!!!"`#3"`F!N!F(!*!,"`#3"`J#F'KXC3d!!!!(!*!("`!!!!)
+!!!!)!@GPEJ!!!!JE-cNa,M-e[5!d0$-Z1$%iEN%J)#!`,M%h0'e@E'8!!!!(!*!
+(#!*525"MB3!!!"!"-#"M!!!!"`!!!!%!!!!(!*!(#!&fC5!!!!!(!!!!!3!!!0B
+$k3,I!N-!A!$3!!!!#!&@C#F!!!!)!8PdFJ!!!!J"9'pe!!!!#!&-CAS!!!!(!!!
+)3!!!!!F!!!$!!!!!"`#3"`F!N!X(!!!!!3!!!!J#F'KXC3d!!!!(!*!("`!!!!%
+!!!!)!@GPEJ!!!!JF)#!e,M!f1%fp)#!b,M!c0'j")#!a-#ic-6&Y9Q8JB3!!!!F
+!N!F)!P)pBA0P!!!!%!%`Eh8!!!!(!!!!!3!!!!F!N!F)!ACMD!!!!!F!!!!&!!!
+!eJ2T!QF#3J"F!0!!!!!)!9CN*`!!!!J"5A4b!!!!#!&8Eh8!!!!)!8aPHJ!!!!F
+!!!U!!!!!"`!!!-!!!!!(!*!("`#3#`F!!!!"!!!!#!*`D'aP$3!!!!F!N!F(!!!
+!!3!!!!J"Cf9Z!!!!#"`J)$BZ0$8a6EdJ)$)Z-$-dEN%J)$%c,M%b-fe@C5"K!!!
+!"`#3"`J#8MeKFf8!!!!3!6"[G3!!!!F!!!!"!!!!"`#3"`J"GQ0S!!!!"`!!!!8
+!!!$@!qN"l!-Q!&`!d!!!!!J"9Q3R!!!!#!&*G()!!!!)!94[G3!!!!J"6'9k!!!
+!"`!!$k!!!!!(!*!("`#3"`F!N!X(!*!(#!*`D'aP$3!!!!F!N!F(!!!!!J!!!!J
+"Cf9Z!!!!#"`J-M!Z0c5p)$Nh0M3Z-$!`EN%J)#!`,M)`-fe@C5"K!!!!"`#3"`J
+#8MeKFf8!!!!3!6"[G3!!!!F!!!!"!!!!"`#3"`J"GQ0S!!!!"`!!!!%!!!$@!qN
+#i!-Q!&`!d!!!!!J"9Q3R!!!!#!&*G()!!!!)!94[G3!!!!J"6'9k!!!!"`!!$k!
+!!!!(!*!("`#3"`F!N!X(!*!(#!*`D'aP$3!!!!F!N!F(!!!!!J!!!!J"Cf9Z!!!
+!#"`J-6NZ-$@p)$Nh0M3Z-$!`EN%J)#!`,M%i0Qe@C5"K!!!!"`#3"`J#8MeKFf8
+!!!!3!6"[G3!!!!F!!!!"!!!!"`#3"`J"GQ0S!!!!"`!!!!%!!!%!!!$V+!!!kLJ
+!!$*&#$&#1%BN!!!!("Bf!!T$6P4-!6m!@Q4MG')!'!pD4%P86!!B%)C%594B!"J
+4XN4-6dF!'",H689193!$&!T`FNKN!!!81PG*6N3!!K4'4%a2*!!K&'ThBh4L!!!
+@!PG*6L3!!"B1*aX!%3#3"!M$cU3R(!!L!!!!(`M$cT3R(3!c!!!!2JM$cS3R(J"
+%!!!!A3M$cR3R'J"9!!!!I!M$cQ3R,J"R!!!!R!#3"#F[!(J!!!#q!*!%*c!!L3!
+!!0m!N!3R4!#D!!!!rJM#k"JR43#V!!!"(3M#k!3R3J#m!!!"2!M#jr3R3`$0!!!
+"@`M#jq3R4J$H!!!"HJM#jp3R4`$[!!!"Q3M#jm3R5!%!!!!L&3M#k`3R53%4!!!
+"Z!M#k[3R6!%L!!!"k3#3"#G0!6-!!!)%!*!%*c%"4!!!!Km!N!3R-J&9!!!#23#
+3"#GL!@B!!!*H!*!%*f!"G`!!*YN!N!3R)`($!!!%X3M$cP!R*3(9!!!%d!M$cN!
+R)3(R!!!%l`M$cLJS23)#!!!&AJ#3"#Jq!K-!!!9r!*!%+$m#*!!!Jdi!N!3S2!*
+!!!!'DJ#3"#PS!PX!!!D2!*!%+T3#J!!!#0-!N!3UP3+4!!!)Y3#3"#U@!U)!!!M
+i!*!%+TF#X`!!#5)!N!3UQ!,%!!!QJ`#3"#UC!Y8!!!P-!*!%*a!#jJ!!3)3)`ZC
+),1`$!`!!#IJ!N!3UQJ-U!!!+4!#3"#iB!d)!!!Ue!*!%,KN$8`!!#Y!!N!3Z'J0
+P!!!+lJ#3"#iE!hF!!!X*!*!%*eJ$L3!!$@3)`ZeN*eN$QJ!!$B))`Ze8*a8$V!!
+!$DJ)`Z0)+m8$[3!!E#F!N!3VaJ22!!"X53#3"#[9!q%!!!h(!*!%+pB$m`!!$H)
+!N!3Ve`3&!!!1GJ#3"#[B""F!!!i#!*!%+pN%+3!!$Kd!N!3VfJ3l!!!1V3#3"#[
+E"%d!!!ip!*!%*b!%A`!!$PJ)`mi3+%!%F3!!$Z3!N!3S335$!!!2!`#3"#p%"+d
+!!"-B!*!%,d8%[J!!%c-!N!3[4J62!!!66J#3"#p("1!!!"0T!*!%,dJ%m3!!%i3
+!N!3[538$!!!6R`#3"#p+"48!!"1k!*!%,dX&*`!!%p8!N!3[6!8j!!!6m!#3"#F
+i"8X!!"Da!*!%*eB&A!!!&Y))`Ze!-C`&G!!!'HB!N!3aR3@&!!!D&`#3"$'H"CB
+!!"Sh!*!%*fS&T`!!'PN!N!3R*!@i!!!DI!#3"#F4"L`!!"e)#-,M%#FB"Mi!!"e
+X#-,QQ#FC"P!!!)6[#-,QH#UE"Q)!!"f,!*!%+T`'G!!!(DX!N!3UR3D'!!!Gb`#
+3"#FL"TJ!!"hV#-21!#UH"US!!#'$!*!%+Tm'[!!!)DX!N!3US!E1!!!Kb3#3"#G
+K"Zd!!#*I!*!%-XJ("3!!)Y3!N!3bb3F@!!!Lp!#3"#UK"bJ!!#D[!*!%*f-(1J!
+!*`F!N!3cp!G5!!!Ri`K#XG3cp3GM!!!RH!K#XF!cpJGd!!!RQ`K#XD!cp`H&!!!
+RaJK#XjJe)!HV!!!TF!K#XQJe)3Hm!!!TL`K#XS!e)JI0!!!TUJK#Vf`e)`IH!!!
+Tb3K#X`3e*!I[!!!Tk!K#X[3e*3J!!!!U"`K#XZ3e*JJ4!!!U*JK#XY3e*`JU!!!
+UH3K#XX!R5JK%!!!UUJM#kY`R5`K@!!!Uc`M#kX`f6!L%!!!a8`#3"$Gi#*8!!$-
+(!*!%,1d)d!!!0$8!N!3XlJML!!!d8`#3"#c[#23!!$4a!*!%,2!*"J!!0)m!N!3
+Xm3NB!!!dV3#3"#cb#5S!!$6,!*!%,2-*2!!!01N!N!3USJQV!!!i6`#3"#UM#Ed
+!!$KY!*!%+U3*c`!!1)X!N!3UT3RK!!!iU3#3"#UQ#I-!!$M(!*!%+UF+"3!!118
+!N!3UU!SA!!!j!`#3"#UT#LN!!$NK!*!%+US+1`!!16m!N!3UU`T0!!!jA3#3"#U
+X#Pm!!$Pl!*!%+Ud+F3!!1CN!N!3UVJU$!!!jY`#3"#U[#T8!!$R9!*!%+V!+T`!
+!1I-!N!3UX3Uj!!!k%3#3"#Ub#XX!!$S[!*!%+V-+h3!!1Nd!N!3UY!V[!!!kD`#
+3"#Ue#`%!!$U*!*!%*bB,%`!!3"F)`Z-J*a-,*!!!3$i)`Z,m*aB,0J!!3'%)`Z,
+S*a),IJ!!H6N)`ZBi*a3,f!!!6DS)`ZBS*am,kJ!!6FJ)`mhX+pi-!J!!E'X!N!3
+`G!`D!!"Ip`#3"$"e$#`!!'"f!*!%-(B-2J!!B28!N!3`G`a3!!"KG!#3"$"i$')
+!!'(c!*!%-(N-G!!!BR)!N!3`HJb'!!"Lm3#3"$"l$*J!!'0`!*!%-(`-UJ!!Bqm
+!N!3`I3bm!!"NQ!#3"$"q$-i!!'9"!*!%-(m-i!!!CHS!N!3`J!cb!!"QN`#3"$#
+"$33!!'Fq!*!%-))0&J!!CqN!N!3`J`dS!!"SP!#3"$#%$6S!!'Nr!*!%-)806!!
+!DHS!N!3`KJeH!!"UP3#3"$#($A!!!'Y!!*!%-)J0JJ!!AF-!N!3`L3f8!!"Gq!#
+3"$#+$DB!!&iY!*!%-)X0Z!!!AQ)!N!3`F!h+!!"G5`#3"$"a$G`!!&eT!*!%-()
+0lJ!!ABF!N!3`F`i!!!"GT3#3"#[!$Kd!!'cc!*!%+m%1,`!!E@-!N!3V`Jj"!!"
+Yd`#3"#[$$P-!!'j$!*!%+mF1C3!!EV-!N!3Vb!jh!!"[)`#3"#[*$SN!!(a3!*!
+%+mS1Q`!!I)`!N!3Vb`kY!!"mb!#3"#[-$Vm!!(d%!*!%+md1d3!!I8!!N!3VcJl
+M!!"Vk`#3"#[%$[8!!'b0!*!%+p`2"`!!E+m!N!3Vh3mC!!"Xd3#3"#[2$bX!!'q
+6!*!%+p!223!!F!%!N!3Vd3p2!!"`E`#3"#[5$f%!!($G!*!%+p-2F`!!F8X!N!3
+Ve!q&!!"aZ3#3"$LN$l)!!(PA!*!%1+82``!!HAm!N!3iTJr8!!"jTJ#3"$LR$q8
+!!(R-!*!%1+J2pJ!!HI)!N!3iU4!(!!"k&`#3"$LU%"J!!(Se!*!%1+X3+3!!HP-
+!N!3iV"!k!!"lU3#3"$LY%%`!!(Ta!*!%1+i3AJ!!JbF!N!3iVa"`!!"kT3#3"$L
+`%))!!(V$!*!%1,%3P!!!HZ%!N!3iXK#Q!!"kr`#3"$Lc%,J!!(X`!*!%1,33bJ!
+!HpX!N!3iY4$F!!"l6J#3"$Lf%1i!!(Z+!*!%1,F4!!!!Hf`!N!3iZ"%5!!#eqJ#
+3"$Lj%53!!(`G!*!%1,S40J!!Hr`!N!3iZa&)!!#&hJ#3"$Lm%E%!!(l%!*!%1,d
+4``!!IZ)!N!3i[K(9!!"r!*!&1,m4j`!!Iai!N!3i`"(j!!"r2!#3"$M"%JX!!(p
+D!*!%1-)5(3!!IhJ!N!3i`a)[!!"rPJ#3"$M%%N%!!(qr!*!%1-858`!!J2N!N!3
+iaK*P!!#"&`#3"$Vm%RF!!)&4#-5!m$M(%U!!!)'X!*!%1-J5XJ!!JGd!N!3ib4,
+%!!#"q`#3"$M+%YB!!))C!*!%1-X5k!!!JMF!N!3ic",k!!##93#3"$M0%``!!)*
+c!*!%1-i6(J!!JT%!N!3ica-`!!##V`#3"$M3%d)!!),0!*!%10%69!!!JZX!N!3
+idK0Q!!#$#3#3"#FA%j-!!)0j#-,Q'#FR%k8!!)1A#-,Q##FS%lF!!)1e#-,Pq#F
+T%mN!!)26#-,Pk#FU%pX!!)2a#-,Pf#FV%qd!!)32#-,Pb#FX%rm!!+YN#-,PZ#F
+Y&"%!!)9@#-,PU#Fc&#-!!)9e#-,RU#Fd&$8!!)@F#-,RP#Fe&%F!!-I%#-,RK#F
+f&&N!!+X'#-,RG#Fh&'X!!)3Y#-,RC#Fj&(d!!)4)#-,R9#Fk&)m!!)4M#-,R4#F
+l&+%!!)4q#-,R0#Fm&,-!!+((#-,R*#Fp&-8!!)A$#-,R&#Fq&0F!!)5C#-,R"#F
+r&1N!!)5d#-,Qp#G3&3!!!)62#-,QL#G4&4)!!)86#-,QD#G5&53!!)8i#-,Q@$M
+8&8!!!)B5!*!%10-9F`!!Q@-!N!3ie4@&!!#CK3#3"$M@&CF!!*QR!*!%10F9U3!
+!QFN!N!3if"@l!!#Ck`#3"$MC&Fd!!*S0!*!%10S9h`!!QLm!N!3ifaAa!!#D83#
+3"$'I&J-!!*Ta!*!%2#J@-`!!RM%!N!3m+aC%!!#Gr3#3"#G!&Qd!!+#E!*!%*d%
+@I`!!S,N!N!3R6KD4!!#Je`#3"#G2&U-!!+$e!*!%*e-@Y3!!S4-!N!3R9"E(!!#
+K-3#3"#G9&YN!!+&2!*!%*eF@k`!!S@d!N!3R@KEp!!#KL`#3"#GE&`m!!+'T!*!
+%*fXA)3!!SH))`ZEN*f`A-`!!SId)`ZE8*e`AA!!!SbB!N!3RA4GZ!!#M33#3"#G
+H&i!!!+0F!*!%*emANJ!!ShF!N!3RC"HN!!#MNJ#3"#GP&lB!!+1Y!*!%*fBAb!!
+!SmJ!N!3RCaID!!#Mi`#3"#GS&q`!!+2q!*!%*fNArJ!!T"N!N!3RE4J3!!#V1`M
+#jX3ih"JL!!#VQ3#3"#GZ'$`!!,UN#-,QY$MG'%i!!,@q!*!%10iBB!!!YG`!N!3
+kr4Kb!!#l4!M%J1!REaLj!!#mFJ#3"#G`'-X!!,b3!!#3"#Ga'0d!!,bZ!*!%*h)
+Bl`!![-`!N!3RFaN"!!#mkJ#3"#Gd'4-!!,d)!*!%*h8C*3!![5B!N!3RGKNh!!#
+p4!#3"#Gh'8N!!,eL!*!%*hJC@`!![B!!N!3RH4Q"!!#pRJ#3"#Gk'C-!!,fj!*!
+%*hXCT3!![G3!N!3RI"Qh!!#pl`#3"#Gp'FN!!,i+!*!%*hiCf`!![L8!N!3RIaR
+Y!!#q3!#3"#H!'Im!!,jE!*!%*i%D%3!![RB!N!3RJKSM!!#qN3#3"#H$'QN!!-J
+'#-,SY!2S!BN!!!+"#-,Md!2T!C3!!!+e#-,Xd!2U!CS!!!,T!*!%!qd"S!!!!ad
+)`ZL3!!2[!DB!!!04#-,UU!2`!D`!!!1&!*!%!r%"XJ!!!lN!N!3%"J(j!!!&+J#
+3"!3N!MS!!!Bf!*!%"%)#q!!!#A3!N!3%IJ,p!!!*a!#3"!5F!c`!!!U"!*!%",S
+%T`!!%Z3!N!3%pJ9Z!!!CXJ#3"!88"[m!!#+J!*!%"6)(6!!!*d3)3Urd"9!))J!
+!+N8)3V0X"@i)H!!!--m!N!3&M!Kq!!!a(`#3"!@U#8i!!$8M!*!%"'!,r!!!8Td
+!N!3%f!`8!!"9E`#3"!A)%SJ!!$9c#-581!AQ%Si!!)&i#-5",!B%&Ld!!*h*!*!
+%!qJDK`!!b+J)`Z2B!qNDR3!!6HF)`Zc-!qSD8J!!T$3!N!3$l3K`!!!Up`M#k*J
+$la`(!!!Ie3M#kVJ$m"Sq!!#qV!#3"!2a"H%!!"UG!*!%"!B6LJ!!$b3!N!3%*!*
+f!!!'V3#3"!4#&6X!!&,4!*!%"(i,Y!!!3[`!N!3%R!5K!!!4P!#3"!5k#f!!!"i
+*!*!%"2B@*3!!QT-!N!3&&!M+!!!M&J#3"!8b"k3!!#J5#%+[i!93%CX!!#fa#%+
+cG!9Z$kN!!$&a!*!%"B`)XJ!!-b8!N!3&UK[Z!!#f'J#3"!A)#B!!!$@R#-582!4
+J%A3!!()R!*!%"0J9D!!!9D-!N!3&jKLR!!#lBJM%J,J'""CP!!#H6`#3"!2S'Pd
+!!-`B#-,ST!2T'T-!!%p6#-22l!2U'AB!!+CL!*!%!qd)2!!!+pF)`ZUm!qmEp`!
+!&[!)`ZdB!r!CE3!!`0!!N!3$m3A*!!!EA3#3"!3'%hJ!!!rF!*!%"#3#83!!"dF
+!N!3%3K6l!!!kT`#3"!4q#j!!!!"'a!#3"!5F"*8!!!XN!*!%",S,5!!!&!X!N!3
+%pKB9!!#EM`#3"!88#,J!!#3@!*!%"6)(PJ!!+'J)3V1!"9!4L3!!,T8)3V+J"@i
+2P`!!-IN!N!3&M!LQ!!!cD`#3"!@U'p`!!+['!*!%"FJ*9!!!0PN)a*bF"'!4@J!
+!G(-!N!3%f"95!!"B(`#3"!AQ')-!!,ZS#-5![!B%&P8!!*m&!*!%!qJDH`!!!qd
+)`Z2F!qNDQ!!!"!N)`Zc%!qSD4`!!"#8!N!3$l3KS!!!%33M#k*3$la[r!!!%A3M
+#kV!$m"Se!!!%H3#3"!2a"G8!!!59!*!%"!B6J3!!"3i!N!3%*!*X!!!''J#3"!4
+#&6B!!!LC!*!%"(i,SJ!!#DJ!N!3%R!5E!!!+C3#3"!5k#e3!!",)!*!%"2B@(3!
+!'CB!N!3&&!M%!!!LK!#3"!8b"jd!!#FS#%+[m!93%C)!!#P8#%+cI!9Z$k!!!$#
+c!*!%"B`)V!!!-3-!N!3&UK[P!!!e"`#3"!A)#@S!!$9A#-580!4J%@F!!&+"!*!
+%"0J9A3!!99-!N!3&jKL9!!#"03M%J,3'""CG!!#GV3#3"B%!N!3Q%J#3"B-!#3!
+!IqN!N!@%"J8!!+*P#-,RT!#!&d8!!+)B!*!%!qJ#03!!"Ci!N!3$k!-8!!!+)`#
+3"!2m"Hd!!"dR#-,Y$!33"Z!!!#(d#-22j!3N#CB!!$I0!*!%!qJ,E!!!3+))3Uq
+%",S,F`!!30J!N!3&-JYj!!""TJ#3"!6f#mB!!-9d!*!%"N!1%J!!ATF!N!3%f"'
+"!!$5Q!#3"!CH%D3!!(em!*!%#,BB0!!!Y6)!N!3%"KUL!!$6d!#3"!4#'Um!!05
+U!*!%"'!D[!!!eB3!N!3%IKV*!!$@A!#3"!5F'YB!!0Fd!*!%"43Di`!!f!`!N!3
+&8"Va!!$Bj!#3"!9Z'[`!!0Qm!*!%"B`E#!!!iL`!N!3&UKX@!!$K9!#3"!A)'b3
+!!0U8!*!%"HBE-J!!ff`!N!3'""Xp!!$RQJ#3"!BL'dS!!1E!!*!%"R`E9`!!h%3
+!N!3'QKYM!!$G(!#3"!Di'fm!!1AS!*!%"YBEI3!!k(3!N!3'p"Z+!!$P$J#3"!F
+5'jN!!1P1!*!%"c!EU!!!i`3!N!3(6KZd!!$Gp!#3"!GX'li!!0l-!*!%"iSEb!!
+!hk3!N!3(U"[5!!$JI!#3"!2m"IN!!"cc#-,Xm!2S"K`!!)B`!*!%#'0SEfPiAd4
+6"f4TB@*[E'm3C'a[Cema-$!aAfPdC@eI04"NE'pRAc%`-$&IDA4PE9mf%'4XEfG
+I-6!`-9pTG'9YAcF3C'a[Cema-$!aAfPdC@eI1"&NE'pRAc%`-$&IDA4PE9ma-""
+NE'pRAc%`-$0IDA4PE9mb%'4XEfGI-6!`-epTG'9YAc-3C'a[Cema-$!cAfPdC@e
+I0""NE'pRAc%`-$9IDA4PE9ma%'4XEfGI-6!`09pTG'9YAc)3C'a[Cema-$!eAfP
+dC@eI-a"NE'pRAc%`-$9IDA4PE9md%'4XEfGI-6!`09pTG'9YAc83C'a[Cema-$!
+eAfPdC@eI0K"NE'pRAc%`-$9IDA4PE9mh%'4XEfGI-6!`09pTG'9YAcJ3C'a[Cem
+a-$!fAfPdC@eI-K"NE'pRAc%`-$CIDA4PE9mc%'4XEfGI-6!`-epTG'9YAcB3C'a
+[Cema-$!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(*KBf9
+IG'peG&pMEh"TC4&NE'pRAc%`-$&IDA4PE9ma-K&NE'pRAc%`-$&IDA4PE9ma-a&
+NE'pRAc%`-$&IDA4PE9ma0JKMEh9bBQ9@54"NE'pRAc%`-c"IDA4PE9md%'4XEfG
+I-6!c-&pTG'9YAc83C'a[Cema-$-`AfPdC@eI0J4`FNKN"@0[F'PP%'4XEfGI-6!
+c-&pTG'9YAcN*EfjNC@aPG(4P%'4XEfGI-6!f-&pTG'9YAcJ*EfjNC@aPG(4P#@p
+ZC'9XCA4dC4"NE'pRAc%`16"IDA4PE9mb%'4XEfGI-6!j-&pTG'9YAc-3C'a[Cem
+a-$N`AfPdC@eI0""NE'pRAc%`16"IDA4PE9me%'4XEfGI-6!j-&pTG'9YAcF3C'a
+[Cema-$N`AfPdC@eI1"&NE'pRAc%`-$"IDA4PE9mb-!4KGA4["@0[F'PP%'4XEfG
+I-6%e-&pTG'9YAc)9CQ9ZCA4bC9pMEfjQD@GeFQ&dD@pZ%@4XEfGI-6!j-&pTG'9
+YAc%a"@0[F'PP%'4XEfGI-6%i-&pTG'9YAc34C'a[Cema-6J`AfPdC@eI-6!4C'a
+[Cema-6J`AfPdC@eI-6)4C'a[Cema-6J`AfPdC@eI-6-3C'a[Cema-$!hAfPdC@e
+I14&NE'pRAc%`-$GIDA4PE9ma-""NE'pRAc%`-$"IDA4PE9mb%@4XEfGI-6%b-&p
+TG'9YAc%`%@4XEfGI-6%b-&pTG'9YAc%a%@4XEfGI-6%b-&pTG'9YAc3a%@4XEfG
+I-6%b-&pTG'9YAc3e%@4XEfGI-6%b-&pTG'9YAc3f%@4XEfGI-6%b-&pTG'9YAc3
+h%@4XEfGI-6%b-&pTG'9YAc8a%@4XEfGI-6%b-&pTG'9YAc8b%@4XEfGI-6%b-&p
+TG'9YAc8c%@4XEfGI-6!`-9pTG'9YAc%j%@4XEfGI-6!c-&pTG'9YAc%`%@4XEfG
+I-6!c-&pTG'9YAc%a"A*PCh9X"A*PCh9X"A*PCh9X"@0[F'PP%'4XEfGI-6)a-&p
+TG'9YAc)3C'a[Cema-M%`AfPdC@eI0""NE'pRAc%b-6"IDA4PE9mf%'4XEfGI-6)
+a-&pTG'9YAcJ4C'a[Cema-M%`AfPdC@eI-6!4C'a[Cema-M%`AfPdC@eI-6)4C'a
+[Cema-M%`AfPdC@eI-634C'a[Cema-M%`AfPdC@eI-6B4C'a[Cema-M%`AfPdC@e
+I-6J3C'a[Cema-$!dAfPdC@eI-a&NE'pRAc%`-$GIDA4PE9ma-J9MEh"TC4"NE'p
+RAc%b0c"IDA4PE9mb%'4XEfGI-6)h-&pTG'9YAc-3C'a[Cema-MF`AfPdC@eI0""
+NE'pRAc%`-$PIDA4PE9mh%'4XEfGI-6!`-PpTG'9YAcJ,G(*KBf9I-9p`CA),G(*
+KBf9I-9p`CA),G(*KBf9I-9p`CA),E'PcG'9IBQpXEh-,E'PcG'9IBQpXEh-@Fh9
+LAfePER8JBfpZCQPRGA*KG'P[EJpXDA0dC9pNCA0IBQpXEh-4C'a[Cema-$!`AfP
+dC@eI-6!4C'a[Cema-$!`AfPdC@eI-684C'a[Cema-$!`AfPdC@eI-6F4C'a[Cem
+a-$N`AfPdC@eI-6-4C'a[Cema-$N`AfPdC@eI-634C'a[Cema-$N`AfPdC@eI-68
+4C'a[Cema-$!aAfPdC@eI-M!4C'a[Cema-$N`AfPdC@eI-6B4C'a[Cema-$N`AfP
+dC@eI-6F4C'a[Cema-$N`AfPdC@eI-6J-E@9cGA*PFepLEfa[%@4XEfGI-6!`1&p
+TG'9YAc%b"@0[F'PP%'4XEfGI-6-`-&pTG'9YAc34C'a[Cema-c!`AfPdC@eI-6-
+4C'a[Cema-$N`AfPdC@eI-6N4C'a[Cema-$!iAfPdC@eI-6-&Bfp`D@83C'a[Cem
+a-c-`AfPdC@eI-K"NE'pRAc%c-c"IDA4PE9mc%'4XEfGI-6-c-&pTG'9YAc33C'a
+[Cema-c-`AfPdC@eI03CKE'&bE@8'B@aKFQeP"Q&XBA*YC4"NE'pRAc%c0M"IDA4
+PE9mb%'4XEfGI-6-f-&pTG'9YAc33C'a[Cema-cB`AfPdC@eI04"NE'pRAc%c0M"
+IDA4PE9mf%'4XEfGI-6-f-&pTG'9YAcF3C'a[Cema-cB`AfPdC@eI1""NE'pRAc%
+c0M"IDA4PE9mj"fGPEQ9bB@`4C'a[Cema-cB`AfPdC@eI-6%(FhPZBfKbEa&NE'p
+RAc%`-$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"@0KFR4P%@4XEfGI-6%
+e-&pTG'9YAc-e%@4XEfGI-6%e-&pTG'9YAc-f%@4XEfGI-6%e-&pTG'9YAc-h%@4
+XEfGI-6%e-&pTG'9YAc-i%@4XEfGI-6%e-&pTG'9YAc-j%@4XEfGI-6%e-&pTG'9
+YAc3`%@4XEfGI-6%e-&pTG'9YAc3a"@0[F'PP&@4TE(9dD@pZAf0KE'PLFQ&dD@p
+ZFa9ND@aeG'P[EPpMB@aTBR*KG'P[ER-9C'PXGA4TEfjIBf&XD@*bBA4TEfjc&'4
+TE(9dD@pZAf0KE'PLFQ&dD@pZ%@4XEfGI-6!j-&pTG'9YAc)`%@4XEfGI-6!j-&p
+TG'9YAc)a%@4XEfGI-6!j-&pTG'9YAc)b%@4XEfGI-6!j-&pTG'9YAc)c%@4XEfG
+I-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%@4XEfGI-6!j-&p
+TG'9YAc)j%@4XEfGI-6!j-&pTG'9YAc-`%@4XEfGI-6!j-&pTG'9YAc-a%@4XEfG
+I-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%@4XEfGI-6!j-&p
+TG'9YAc-h%@4XEfGI-6!j-&pTG'9YAc-i%@4XEfGI-6!j-&pTG'9YAc-j%'4XEfG
+I-6!`-&pTG'9YAcN4C'a[Cema-$!`AfPdC@eI-6)4C'a[Cema-$!`AfPdC@eI-63
+,BfK[DAKIBfpbC@`,BfK[DAKIBfpbC@`,BfK[DAKIBfpbC@`'B@aKFQeP"A*PCh9
+X"'&eG'm4C'a[Cema-$!`AfPdC@eI-M%4BfpZCQPRAh4bB@jcF(9dCA)4BfpZCQP
+RAh4bB@jcF(9dCA)4BfpZCQPRAh4bB@jcF(9dCA)4BfpZCQPRAh4bB@jcF(9dCA)
+4C'a[Cema-$!`AfPdC@eI-M)4C'a[Cema-$!aAfPdC@eI-M)&Bfp`D@84C'a[Cem
+a-6)`AfPdC@eI-6)&Bfp`D@84C'a[Cema-M3`AfPdC@eI-634C'a[Cema-M3`AfP
+dC@eI-684C'a[Cema-M3`AfPdC@eI-6B4C'a[Cema-M3`AfPdC@eI-6F4C'a[Cem
+a-M3`AfPdC@eI-6J4C'a[Cema-M3`AfPdC@eI-6N4C'a[Cema-M3`AfPdC@eI-M!
+4C'a[Cema-M3`AfPdC@eI-M%4C'a[Cema-M3`AfPdC@eI-M)4C'a[Cema-M3`AfP
+dC@eI-M-4C'a[Cema-M3`AfPdC@eI-M34C'a[Cema-M3`AfPdC@eI-M84C'a[Cem
+a-M3`AfPdC@eI-MB4C'a[Cema-M3`AfPdC@eI-MF4C'a[Cema-M3`AfPdC@eI-MJ
+4C'a[Cema-M3`AfPdC@eI-MN4C'a[Cema-M3`AfPdC@eI-c!4C'a[Cema-M3`AfP
+dC@eI-c%4C'a[Cema-M3`AfPdC@eI-c)4C'a[Cema-M3`AfPdC@eI-c-4C'a[Cem
+a-M3`AfPdC@eI-c34C'a[Cema-M3`AfPdC@eI-c84C'a[Cema-M3`AfPdC@eI-cB
+4C'a[Cema-M3`AfPdC@eI-cF4C'a[Cema-M3`AfPdC@eI-6!4C'a[Cema-M3`AfP
+dC@eI-6%4C'a[Cema-M3`AfPdC@eI-6)4C'a[Cema-M3`AfPdC@eI-6-+FQ9RG@a
+KG'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"IDA4PE9mb-"&
+NE'pRAc%a-M"IDA4PE9mb-4&NE'pRAc%a-M"IDA4PE9mb-K&NE'pRAc%a-M"IDA4
+PE9mb-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"IDA4PE9ma-a&
+NE'pRAc%a-M"IDA4PE9ma0"&NE'pRAc%a-M"IDA4PE9ma04&NE'pRAc%a-M"IDA4
+PE9mb1"&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"IDA4PE9mc-`K
+`EfPZG'&RC3K`EfPZG'&RC3K`EfPZG'&RC4"NE'pRAc%d06"IDA4PE9mb%'4XEfG
+I-63e-&pTG'9YAc-3C'a[Cema0$8`AfPdC@eI0""NE'pRAc%d06"IDA4PE9me%'4
+XEfGI-63e-&pTG'9YAcB3C'a[Cema0$8`AfPdC@eI0a"NE'pRAc%d06"IDA4PE9m
+i%'4XEfGI-63e-&pTG'9YAcN4C'a[Cema0$8`AfPdC@eI-6!4C'a[Cema0$8`AfP
+dC@eI-6)4C'a[Cema0$8`AfPdC@eI-6-4C'a[Cema0$8`AfPdC@eI-634C'a[Cem
+a0$8`AfPdC@eI-6B4C'a[Cema0$8`AfPdC@eI-6F4C'a[Cema0$8`AfPdC@eI-6J
+4C'a[Cema0$8`AfPdC@eI-6N4C'a[Cema0$8`AfPdC@eI-M!4C'a[Cema0$8`AfP
+dC@eI-M%4C'a[Cema0$8`AfPdC@eI-M)4C'a[Cema0$8`AfPdC@eI-M-4C'a[Cem
+a0$8`AfPdC@eI-M34C'a[Cema0$8`AfPdC@eI-M84C'a[Cema0$8`AfPdC@eI-MJ
+4C'a[Cema0$8`AfPdC@eI-MN-BA9dEfeKG'PcE@9c$'&eG'pYBA4TFfePF`aKGA4
+[E@&dDA0YCA-(CQPMD'PPFJKMEfjdFQpXC3KMEfjdFQpXC3KMEfjdFQpXC3aKGA4
+[E@&dDA0YCA-4C'a[Cema0$8`AfPdC@eI-c-4C'a[Cema0$8`AfPdC@eI-c34C'a
+[Cema0$8`AfPdC@eI-c84C'a[Cema0$8`AfPdC@eI-cB4C'a[Cema0$8`AfPdC@e
+I-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@eI0$)4C'a
+[Cema0$8`AfPdC@eI0$-3C'a[Cema06%`AfPdC@eI-`9MEh"TC4&cC@jcCA9bAh0
+dC@aXB@PbC4&NE'pRAc%d06"IDA4PE9md0"&NE'pRAc%d06"IDA4PE9md0K&NE'p
+RAc%d06"IDA4PE9md0a&NE'pRAc%d06"IDA4PE9md1"&NE'pRAc%d06"IDA4PE9m
+d14&NE'pRAc%d06"IDA4PE9me-"&NE'pRAc%d06"IDA4PE9me-4&NE'pRAc%d06"
+IDA4PE9me-K&NE'pRAc%d06"IDA4PE9me-a&NE'pRAc%d06"IDA4PE9me0"&NE'p
+RAc%d06"IDA4PE9me04&NE'pRAc%d06"IDA4PE9me0JKMEh9bBQ9@53KMEh9bBQ9
+@53KMEh9bBQ9@54&NE'pRAc%`-$"IDA4PE9mb-a&NE'pRAc%`-$"IDA4PE9mb0"&
+NE'pRAc%`-$"IDA4PE9mb04&NE'pRAc%`-$"IDA4PE9mb0K&NE'pRAc%`-$"IDA4
+PE9mb0a&NE'pRAc%`-$"IDA4PE9mb1"&NE'pRAc%`-$"IDA4PE9mb14&NE'pRAc%
+`-$"IDA4PE9mc-"&NE'pRAc%`-$"IDA4PE9mc-4&NE'pRAc%`-$"IDA4PE9mc-K&
+NE'pRAc%`-$"IDA4PE9mc-a&NE'pRAc%`-$"IDA4PE9mc0"&NE'pRAc%`-$"IDA4
+PE9mc04&NE'pRAc%`-$"IDA4PE9mc0K&NE'pRAc%`-$"IDA4PE9mc0a&NE'pRAc%
+`-$"IDA4PE9mc1"&NE'pRAc%`-$"IDA4PE9mc14&NE'pRAc%`-$"IDA4PE9md-"&
+NE'pRAc%`-$"IDA4PE9md-4&NE'pRAc%`-$"IDA4PE9md-J4KGA4[%@4XEfGI-6!
+`-&pTG'9YAc%f%@4XEfGI-6!`-&pTG'9YAc%i%@4XEfGI-6!`-&pTG'9YAc%j"'&
+eG'm%BA9dEa&NE'pRAc%d06"IDA4PE9md03TbC@GeE'&dD@pZ#R*PCh9XBA4TEfi
++FQ9RG@aKG'P[EK&NE'pRAc%d06"IDA4PE9me0a&NE'pRAc%d06"IDA4PE9me1"&
+NE'pRAc%d06"IDA4PE9me14&NE'pRAc%d06"IDA4PE9mf-"&NE'pRAc%d06"IDA4
+PE9mf-4&NE'pRAc%d06"IDA4PE9mf-K&NE'pRAc%d06"IDA4PE9mf-a&NE'pRAc%
+d06"IDA4PE9mf0"&NE'pRAc%b0c"IDA4PE9ma-`GQEh9bD@9b"fC[GA*TCA)(CQp
+eFQPPFJ9MEh"TC4"NE'pRAc%e0$"IDA4PE9mb%'4XEfGI-68d-&pTG'9YAc%(FQ9
+RE'&RC3GbC@GXB@GP"h*PCfaKCf84C'a[Cema-$!bAfPdC@eI-634C'a[Cema-$!
+bAfPdC@eI-684C'a[Cema-$!bAfPdC@eI-6B4C'a[Cema-$!bAfPdC@eI-6F4C'a
+[Cema-$!bAfPdC@eI-6J4C'a[Cema-$!bAfPdC@eI-6N4C'a[Cema-$!bAfPdC@e
+I-M!4C'a[Cema-$!bAfPdC@eI-M%4C'a[Cema-$!bAfPdC@eI-M)4C'a[Cema-$!
+bAfPdC@eI-M-4C'a[Cema-$!`AfPdC@eI0$-4C'a[Cema-$!`AfPdC@eI0$3@Fh9
+LAfePER8JBfpZCQPRGA*KG'P[EK&NE'pRAc%`-$*IDA4PE9mb0"&NE'pRAc%`-$*
+IDA4PE9mb04&NE'pRAc%`-$*IDA4PE9mb0K&NE'pRAc%`-$*IDA4PE9mb0a&NE'p
+RAc%`-$*IDA4PE9mb1"&NE'pRAc%`-$*IDA4PE9mb14&NE'pRAc%`-$*IDA4PE9m
+c-"&NE'pRAc%`-$*IDA4PE9mc-4&NE'pRAc%`-$*IDA4PE9mc-K&NE'pRAc%`-$*
+IDA4PE9mc-a&NE'pRAc%`-$"IDA4PE9md04&NE'pRAc%d06"IDA4PE9mf0`GcH@j
+MD(*[%@4XEfGI-6!`-&pTG'9YAc3f%@4XEfGI-63e-&pTG'9YAcBi%@4XEfGI-63
+e-&pTG'9YAcBj%'4XEfGI-68a-&pTG'9YAc34Ff9ZFf9eFPpcG'9XE'&TFQ84Ff9
+ZFf9eFPpcG'9XE'&TFQ84Ff9ZFf9eFPpcG'9XE'&TFQ84C'a[Cema-$!iAfPdC@e
+I-634C'a[Cema-$!iAfPdC@eI-684C'a[Cema-$!iAfPdC@eI-6B4C'a[Cema-$!
+iAfPdC@eI-6F4C'a[Cema-$!iAfPdC@eI-6J4C'a[Cema-$!iAfPdC@eI-6N4C'a
+[Cema-$!iAfPdC@eI-M!4C'a[Cema-$!iAfPdC@eI-M%4C'a[Cema-$!iAfPdC@e
+I-M)4C'a[Cema-$!iAfPdC@eI-M-)G(*KBf9I4&-+G(*KBf9IG'peG"&NE'pRAc%
+`-$KIDA4PE9mb0"&NE'pRAc%`-$KIDA4PE9mb04&NE'pRAc%`-$KIDA4PE9mb0K&
+NE'pRAc%`-$KIDA4PE9mb0a&NE'pRAc%`-$KIDA4PE9mb1"&NE'pRAc%`-$KIDA4
+PE9mb14&NE'pRAc%`-$KIDA4PE9mc-"&NE'pRAc%`-$KIDA4PE9mc-4&NE'pRAc%
+`-$KIDA4PE9mc-K&NE'pRAc%`-$KIDA4PE9mc-`KdFQ&MC9p%8`KdFQ&MC9p%8`T
+dFQ&MC9pdEh9d#R4bB@0PAh4[GA3,B@0aG@PcDA4TEfi4C'a[Cema-$!`AfPdC@e
+I0$F,B@0aG@PcDA4TEfi,B@0aG@PcDA4TEfi%BQpXE`4LEfa["'*[E'm--MSJ4(9
+Y-6!`E8Xd$$-k)%4eE6%`-'e,-J`e1L"MD$%YBQpXEc)-0cSJBfJb,@*[E'md$$N
+k)%4eE6%`-'e,0!da-$SJ4(9Y-6!`E8Xa#M%a1L"1D@9ZG'8,-6)k)&)a-%e2D'd
+0-6-k)'0S-5eLEfa[-`da0$SJBfJa,@*[E'ma$6%e1L"MD$)YBQpXEc8+-6Bk)%j
+TC@jdC3`a0cSJ6'pe-5if5c8--6Jk)%a[G6%Z0NXf#c%j1L"-Eh8a-%Xh#c)`1L"
+-Eh8a-%Xi$6)a1L"RCA*YB@jTG@d--M)k)(4SCA*YAc4V$M)c1L"dD'9bE9ma,MC
+V$M)d1L"f-5eLC@4TCM%j#f&MFA9TFfPdD@pZ#6%k)%jTC@jdC3Nd1L"1D@9ZG'8
+*0MSJ6QPPER4P#6Jk)%jTC@jdC3KND@aeG'P[EJKND@aeG'P[EJKND@aeG'P[EJG
+QD@0SD@9b"fCTBfKTCA)(CQPMD'PPFVjJ:
Index: /tags/archediab_27/Poubelle/archediab.old/archeops.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archeops.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archeops.c	(revision 646)
@@ -0,0 +1,1105 @@
+#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 thermometres 1 à 4 (germanium et carbone Allan-Bradley) 		      */
+/* les coefficients sont utilisés differemment, ills permettent de convertir	      */
+/* R vers T								              */
+/*   llR= log(log(R)-c(0))  						              */
+/*    T	= exp(c(1) + c(2)* llR + c(3)* llR* llR + c(4)* llR* llR* llR +               */
+/*            c(5)* llR* llR* llR* llR)                                               */
+/*										      */
+/**************************************************************************************/
+
+
+/**************************************************************************************/
+/*                                                                                    */
+/*   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                 */
+/*                                                                                    */
+/**************************************************************************************/
+
+
+/*  numero_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={27,24,36,88,18,
+
+{ 
+{  0 	, 2,10,1 ,  200, 22000	,  200 },	
+{ 10 	, 1,10,2 ,  200, 22000	,  200 },
+{  8 	, 1,10,3 ,  200, 22000	,  200 },
+{  0 	, 2,10,4 ,  200, 22000	,  200 },
+
+{  2 	, 1,10,5 , 1000, 4700	, 1000 },
+{  0 	, 2,10,6 , 1000, 4700	, 1000 },
+{  4 	, 1,10,9 , 1000, 4700	, 1000 },
+{  0 	, 2,10,10, 1000, 4700	, 1000 },
+
+{ 10 	, 1,10,11, 1000, 4700	, 1000 },
+{  7	, 1,10,12, 1000, 4700	, 1000 },
+{  0 	, 1,10,13, 1000, 4700	, 1000 },
+{ 17 	, 1,10,14, 1000, 4700	, 1000 },
+
+{  3	, 1,10,17, 1000, 4700	, 1000 },
+{  1	, 1,10,18, 1000, 4700	, 1000 },
+{  5  	, 1,10,19, 1000, 4700	, 1000 },
+{  0	, 1,10,20, 1000, 4700	, 1000 },
+
+{ 13	, 1,10,21,  500, 22000	,  500 },
+{ 14	, 1,10,22,  500, 22000	,  500 },
+{ 15	, 1,10,25,  500, 22000  ,  500 },
+{ 16	, 1,10,26,  500, 22000  ,  500 },
+
+{ 21	, 3,10,27, 1000, 22000	,    0 },
+{ 22	, 3,10,28, 1000, 1000	,    0 },
+{ 23	, 3,10,29, 1000, 1000	,    0 },
+{ 19	, 3,10,30, 1000, 1000	,    0 },
+
+},
+{ 
+{ "Niente"    , { 5000  ,  0 , 0,   0,0,0,0} },			
+{ "ch1-bolo1"  , { 5000  ,  600000 , 140000,  80000, 25000, 0, 0}  },		
+{ "ch1-bolo2"  , { 5000  ,  600000 , 140000,  60000, 25000, 0, 0}  },
+{ "ch1-bolo3"  , { 5000  ,  600000 , 140000,  65000, 25000, 0, 0}  },
+{ "ch2-bolo4"  , { 5000  ,  600000 , 140000,  90000, 25000, 0, 0}  },
+
+{ "ch2-bolo5"  , { 5000  ,  600000 , 140000, 100000, 25000, 0, 0}  },	
+{ "ch2-bolo6"  , { 5000  ,  600000 , 140000, 110000, 25000, 0, 0}  },
+{ "Dum100mK1"  , { 5000  ,  588000 , 125000,  0,0,0,0} },
+{ "Dum100mK2"  , { 5000  ,  588000 , 125000,  0,0,0,0} },
+
+{ "Dum100mK3"  , { 5000  , 1361800 , 125000,  0,0,0,0} },		
+{ "Dum100mK4"  , { 5000  , 1361800 , 125000,  0,0,0,0} },		
+{ "Lou100mK1"  , { 5000  , 5680000 , 560000,  0,0,0,0} },
+{ "Lou100mK2"  , { 5000  , 5680000 , 560000,  0,0,0,0} },
+
+{ "Lou1.6K5"   , { 5000  ,  0 , 0,   0,0,0,0} },  
+{ "Lou1.6K6"   , { 5000  ,  0 , 0,   0,0,0,0} },  
+{ "Lou10K7"    , { 5000  ,  0 , 0,   0,0,0,0} },  
+{ "Lou10K8"    , { 5000  ,  0 , 0,   0,0,0,0} }, 
+
+{ "R10MOhm"    , { 5000  ,  0 , 0,   0,0,0,0} },  
+{ "bedif18"	, { 5000  , 123100 , 334200,  0,0,0,0} },
+{ "v1-bedif19"	, { 5000  , 123100 , 334200,  0,0,0,0} },
+{ "therm_10k"	, { 45000 ,  28907 , 16028 , -1327 , 1472 , 872, 0} },		
+
+{ "germanium"	, {     0 ,  30719 ,  -910 ,-16389 , 2927 ,   0, 0} },	  
+{ "therm_4k"	, { 45000 ,  28907 , 16028 , -1327 , 1472 , 872, 0} },
+{ "therm_1.6k"	, { 45000 ,  28907 , 16028 , -1327 , 1472 , 872, 0} },
+
+}
+
+};
+/*fin_param*/
+
+/* Definition Mai-Juin 1999
+{ 
+{ "v1-bedif1"  , 1,10,1 ,  200, 22000	,  200,  { 5000  , 123100 , 334200,0,0,0,0} },		
+{ "v1-bedif2"  , 1,10,2 ,  200, 22000	,  200,  {  500  , 136180 ,   9010,0,0,0,0} },
+{ "v1-bedif3"  , 1,10,3 ,  200, 22000	,  200,  {  500  , 136180 ,   9010,0,0,0,0} },
+{ "v1-bedif4"  , 1,10,4 ,  200, 22000	,  200,  { 5000  , 123100 , 334200,0,0,0,0} },
+{ "v1-bedif5"  , 1,10,5 , 1000, 4700	, 1000,  { 5000  , 123100 , 334200,0,0,0,0} },
+{ "v1-bedif6"  , 1,10,6 , 1000, 4700	, 1000,  { 5000  , 123100 , 334200,0,0,0,0} },
+
+{ "v1-bedif7"  , 1,10,9 , 1000, 4700	, 1000,  { 5000  , 123100 , 334200,0,0,0,0} },
+{ "v1-bedif8"  , 1,10,10, 1000, 4700	, 1000,  { 5000  , 123100 , 334200,0,0,0,0} },
+{ "v1-bedif9"  , 1,10,11, 1000, 4700	, 1000,  { 5000  , 123100 , 334200,0,0,0,0} },
+{ "v1-bedif10" , 1,10,12, 1000, 4700	, 1000,  { 5000  , 123100 , 334200,0,0,0,0} },
+{ "v1-bedif11" , 1,10,13, 1000, 4700	, 1000,  { 5000  , 123100 , 334200,0,0,0,0} },
+{ "v1-bedif12" , 1,10,14, 1000, 4700	, 1000,  { 5000  , 123100 , 334200,0,0,0,0} },
+
+{ "v1-bedif13"	, 1,10,17, 1000, 100000	, 1000,  { 5000  , 123100 , 334200,0,0,0,0} },
+{ "v1-bedif14"	, 1,10,18, 1000, 470000	, 1000,  { 5000  , 123100 , 334200,0,0,0,0} },
+{ "bedif15"  	, 1,10,19, 1000, 470000	, 1000,  {  500  ,  58800 ,  12500,0,0,0,0} },
+{ "bedif16"	, 1,10,20, 1000,2200000	, 1000,  { 5000  , 123100 , 334200,0,0,0,0} },
+{ "bedif17"	, 1,10,21, 1000, 4700	, 1000,  { 5000  , 123100 , 334200,0,0,0,0} },
+{ "bedif18"	, 1,10,22, 1000, 4700	, 1000,  { 5000  , 123100 , 334200,0,0,0,0} },
+
+{ "v1-bedif19"	, 2,10,25, 1000, 4700  	, 1000,  { 5000  , 123100 , 334200,0,0,0,0} },
+{ "v1-bedif20"	, 2,10,26, 1000, 4700  	, 1000,  { 5000  , 123100 , 334200,0,0,0,0} },
+{ "germanium"	, 3,10,27, 1000, 22000	,    0,  { 3500  ,  17100 , 646500,0,0,0,0} },
+{ "therm_4k"	, 3,10,28, 1000, 1000	,    0,  {12000  ,1804000 ,  72800,0,0,0,0} },
+{ "therm_1.6k"	, 3,10,29, 1000, 1000	,    0,  {12000  ,1804000 ,  72800,0,0,0,0} },
+{ "therm_10k"	, 3,10,30, 1000, 1000	,    0,  {12000  ,1804000 ,  72800,0,0,0,0} },
+
+}*/
+
+/* 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
+
+*/
+
+
+int mode_transmission_telemesure[nb_modes_telemesure][nb_type_blocks]= {
+
+/* enregisteur de bord flash :  plafond standard nominal	*/
+/* 0*/	{ 0,10,15,50, 10,50, 0, 0, 0, 0, 0, 0, 1, 1, 1,2500, 0, 0, 0, 0},
+
+/* 1*/	{ 0,10,10, 1, 10, 3, 0, 0, 0, 0, 0, 0, 1, 1, 4,2500, 0, 0, 0, 0},
+
+/* 2*/	{ 0,10,05,01, 10,06, 0, 0, 0, 0, 0, 0, 1, 1, 2,2500, 0, 0, 0, 0},
+
+/* 3*/	{ 0,10, 1,25, 10, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0,2500, 0, 0, 0, 0},
+
+/* 4*/	{ 0,10,15,50, 10,25, 0, 0, 1, 0, 0, 0, 0, 0, 0,2500, 0, 0, 0, 0},
+
+/* 5*/	{ 0,10,15,50, 10,25, 0, 0, 0, 0, 1, 0, 0, 0, 0,2500, 0, 0, 0, 0},
+
+/* 6*/	{ 0,10,15,50, 10,50, 0, 0, 0, 1, 0, 0, 1, 0, 2,2500, 0, 0, 0, 0},
+
+/* 7*/	{ 0,10,15,50,100,50,1, 1, 0, 0, 0, 0, 1, 1, 1,2500, 0, 0, 0, 0},
+
+/* 8*/	{ 0,10,15,50,100,50,1, 1, 1, 0, 0, 0, 0, 0, 0,2500, 0, 0, 0, 0},
+
+/* 9*/	{ 0,10, 1, 1,100, 1,0, 0, 0, 0, 0, 0, 1, 0, 0,2500, 0, 0, 0, 0}
+
+ };
+
+
+
+int mode_transmission_flash[nb_modes_flash][nb_type_blocks]= {
+
+
+/* enregisteur de bord flash : nominal	*/
+/* 0*/	{ 0,50,15,25, 10,25, 0, 0, 0, 1, 0, 0, 1, 0, 1,2500, 0, 0, 0, 0} ,
+
+/* enregisteur de bord flash : minimum	*/
+/* 1*/	{ 0,50,50,50,50,100, 0, 0, 0, 0, 0, 0, 0, 0, 0,2500, 0, 0, 0, 0} ,
+
+/* enregisteur de bord flash :  rien	*/
+/* 2*/	{ 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0} };
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/*debut_nom_reglage*/
+/* 0->a chaud complet*/
+/* 1->a froid pour V(I)*/
+/* 2->cc*/
+/* 3->a chaud complet*/
+/* 4->chaud avec synchro*/
+/* 5->reglage 5  */
+/* 6->reglage 6  */
+/* 7->reglage 7  */
+/*fin_nom_reglage*/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+reglage_bolo  reglage_standard[8]={{
+
+
+/*debut reglage 0 */
+#ifdef programme
+{30,76,9,1},{
+{20,0}
+,{-1148225771,229380}
+,{-1148367339,294916}
+,{20,0}
+,{21,221185}
+,{21,0}
+,{21,245761}
+,{20,0}
+,{21,245761}
+,{277,253953}
+,{20,0}
+,{21,204801}
+,{21,19457}
+,{21,1}
+,{11501589,8708}
+,{20,0}
+,{-100647916,0}
+,{1015828,0}
+,{20,0}
+,{20,0}
+,{1024022,0}
+,{25622,0}
+,{-100395499,0}
+,{25622,0}
+},{
+{0,0,128,1}
+,{0,0,128,4}
+,{0,0,128,4}
+,{0,0,128,3}
+,{0,0,128,4}
+,{0,0,128,4}
+},{
+{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}
+},{1,3,129,108,3,126,104,88} 
+#else
+{1,9,76,30},{
+{20,0}
+,{-1148225771,229380}
+,{-1148367339,294916}
+,{20,0}
+,{21,221185}
+,{21,0}
+,{21,245761}
+,{20,0}
+,{21,245761}
+,{277,253953}
+,{20,0}
+,{21,204801}
+,{21,19457}
+,{21,1}
+,{11501589,8708}
+,{20,0}
+,{-100647916,0}
+,{1015828,0}
+,{20,0}
+,{20,0}
+,{1024022,0}
+,{25622,0}
+,{-100395499,0}
+,{25622,0}
+},{
+{1,128,0,0}
+,{4,128,0,0}
+,{4,128,0,0}
+,{3,128,0,0}
+,{4,128,0,0}
+,{4,128,0,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}
+},{108,129,3,1,88,104,126,3} 
+#endif
+/*fin_reglage*/
+
+},{
+
+/*debut reglage 1 */
+#ifdef programme
+{31,76,9,1},{
+{20,0}
+,{-1148225771,229380}
+,{-1148367339,294916}
+,{20,0}
+,{2127959573,221185}
+,{21,0}
+,{2127892757,245761}
+,{20,0}
+,{2127991317,245761}
+,{2127996181,253953}
+,{20,0}
+,{2128584725,204801}
+,{2127780885,19457}
+,{2127795221,1}
+,{11501589,8708}
+,{20,0}
+,{-100647916,0}
+,{1015828,0}
+,{20,0}
+,{20,0}
+,{12822,0}
+,{25622,0}
+,{-100660714,0}
+,{25622,0}
+},{
+{2,21,25,1}
+,{0,20,0,4}
+,{0,20,0,4}
+,{0,21,23,3}
+,{0,20,0,4}
+,{0,20,0,4}
+},{
+{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}
+},{129,3,129,108,3,126,104,88} 
+#else
+{1,9,76,31},{
+{20,0}
+,{-1148225771,229380}
+,{-1148367339,294916}
+,{20,0}
+,{2127959573,221185}
+,{21,0}
+,{2127892757,245761}
+,{20,0}
+,{2127991317,245761}
+,{2127996181,253953}
+,{20,0}
+,{2128584725,204801}
+,{2127780885,19457}
+,{2127795221,1}
+,{11501589,8708}
+,{20,0}
+,{-100647916,0}
+,{1015828,0}
+,{20,0}
+,{20,0}
+,{12822,0}
+,{25622,0}
+,{-100660714,0}
+,{25622,0}
+},{
+{1,25,21,2}
+,{4,0,20,0}
+,{4,0,20,0}
+,{3,23,21,0}
+,{4,0,20,0}
+,{4,0,20,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}
+},{108,129,3,129,88,104,126,3} 
+#endif
+/*fin_reglage*/
+
+},{
+
+/*debut reglage 2 */
+#ifdef programme
+{197,191,175,185},{
+{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+},{
+{106,98,93,71}
+,{66,74,87,66}
+,{48,46,38,33}
+,{40,41,33,26}
+,{25,29,40,57}
+,{63,62,71,80}
+},{
+{83,79,75,75,92,112,31100}
+,{125,126,117,113,107,94,20315}
+,{108,116,122,124,117,120,32117}
+,{110,99,94,98,107,93,17217}
+},{88,82,94,108,111,126,104,88} 
+#else
+{185,175,191,197},{
+{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+},{
+{71,93,98,106}
+,{66,87,74,66}
+,{33,38,46,48}
+,{26,33,41,40}
+,{57,40,29,25}
+,{80,71,62,63}
+},{
+{75,75,79,83,31100,112,92}
+,{113,117,126,125,20315,94,107}
+,{124,122,116,108,32117,120,117}
+,{98,94,99,110,17217,93,107}
+},{108,94,82,88,88,104,126,111} 
+#endif
+/*fin_reglage*/
+
+},{
+
+/*debut reglage 3 */
+#ifdef programme
+{30,76,9,1},{
+{20,0}
+,{-1149239274,229380}
+,{-1149239275,294916}
+,{20,0}
+,{20,221185}
+,{21,0}
+,{20,245761}
+,{20,0}
+,{20,245761}
+,{276,253953}
+,{20,0}
+,{20,204801}
+,{20,19457}
+,{20,1}
+,{10486037,8708}
+,{20,0}
+,{-100647916,0}
+,{1015828,0}
+,{20,0}
+,{20,0}
+,{1024022,0}
+,{25622,0}
+,{-100660714,0}
+,{25622,0}
+},{
+{0,20,0,1}
+,{0,20,0,4}
+,{0,20,0,4}
+,{2,20,0,3}
+,{0,20,0,4}
+,{0,20,0,4}
+},{
+{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}
+},{1,3,129,108,3,126,104,88} 
+#else
+{1,9,76,30},{
+{20,0}
+,{-1149239274,229380}
+,{-1149239275,294916}
+,{20,0}
+,{20,221185}
+,{21,0}
+,{20,245761}
+,{20,0}
+,{20,245761}
+,{276,253953}
+,{20,0}
+,{20,204801}
+,{20,19457}
+,{20,1}
+,{10486037,8708}
+,{20,0}
+,{-100647916,0}
+,{1015828,0}
+,{20,0}
+,{20,0}
+,{1024022,0}
+,{25622,0}
+,{-100660714,0}
+,{25622,0}
+},{
+{1,0,20,0}
+,{4,0,20,0}
+,{4,0,20,0}
+,{3,0,20,2}
+,{4,0,20,0}
+,{4,0,20,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}
+},{108,129,3,1,88,104,126,3} 
+#endif
+/*fin_reglage*/
+
+},{
+
+/*debut reglage 4 */
+#ifdef programme
+{30,76,9,1},{
+{20,0}
+,{-1148225771,229380}
+,{-1148367339,294916}
+,{20,0}
+,{21,221185}
+,{21,0}
+,{21,245761}
+,{20,0}
+,{21,245761}
+,{277,253953}
+,{20,0}
+,{21,204801}
+,{21,19457}
+,{21,1}
+,{11501589,8708}
+,{20,0}
+,{-100647916,0}
+,{1015828,0}
+,{20,0}
+,{20,0}
+,{1024022,0}
+,{25622,0}
+,{-100395499,0}
+,{25622,0}
+},{
+{0,0,128,1}
+,{0,0,128,4}
+,{0,0,128,4}
+,{0,0,128,3}
+,{0,0,128,4}
+,{0,0,128,4}
+},{
+{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}
+},{1,3,129,108,3,126,104,88} 
+#else
+{1,9,76,30},{
+{20,0}
+,{-1148225771,229380}
+,{-1148367339,294916}
+,{20,0}
+,{21,221185}
+,{21,0}
+,{21,245761}
+,{20,0}
+,{21,245761}
+,{277,253953}
+,{20,0}
+,{21,204801}
+,{21,19457}
+,{21,1}
+,{11501589,8708}
+,{20,0}
+,{-100647916,0}
+,{1015828,0}
+,{20,0}
+,{20,0}
+,{1024022,0}
+,{25622,0}
+,{-100395499,0}
+,{25622,0}
+},{
+{1,128,0,0}
+,{4,128,0,0}
+,{4,128,0,0}
+,{3,128,0,0}
+,{4,128,0,0}
+,{4,128,0,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}
+},{108,129,3,1,88,104,126,3} 
+#endif
+/*fin_reglage*/
+
+},{
+
+/*debut reglage 5 */
+#ifdef programme
+{197,191,175,185},{
+{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+},{
+{106,98,93,71}
+,{66,74,87,66}
+,{48,46,38,33}
+,{40,41,33,26}
+,{25,29,40,57}
+,{63,62,71,80}
+},{
+{83,79,75,75,92,112,31100}
+,{125,126,117,113,107,94,20315}
+,{108,116,122,124,117,120,32117}
+,{110,99,94,98,107,93,17217}
+},{88,82,94,108,111,126,104,88} 
+#else
+{185,175,191,197},{
+{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+},{
+{71,93,98,106}
+,{66,87,74,66}
+,{33,38,46,48}
+,{26,33,41,40}
+,{57,40,29,25}
+,{80,71,62,63}
+},{
+{75,75,79,83,31100,112,92}
+,{113,117,126,125,20315,94,107}
+,{124,122,116,108,32117,120,117}
+,{98,94,99,110,17217,93,107}
+},{108,94,82,88,88,104,126,111} 
+#endif
+/*fin_reglage*/
+
+},{
+
+/*debut reglage 6 */
+#ifdef programme
+{197,191,175,185},{
+{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+},{
+{106,98,93,71}
+,{66,74,87,66}
+,{48,46,38,33}
+,{40,41,33,26}
+,{25,29,40,57}
+,{63,62,71,80}
+},{
+{83,79,75,75,92,112,31100}
+,{125,126,117,113,107,94,20315}
+,{108,116,122,124,117,120,32117}
+,{110,99,94,98,107,93,17217}
+},{88,82,94,108,111,126,104,88} 
+#else
+{185,175,191,197},{
+{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+},{
+{71,93,98,106}
+,{66,87,74,66}
+,{33,38,46,48}
+,{26,33,41,40}
+,{57,40,29,25}
+,{80,71,62,63}
+},{
+{75,75,79,83,31100,112,92}
+,{113,117,126,125,20315,94,107}
+,{124,122,116,108,32117,120,117}
+,{98,94,99,110,17217,93,107}
+},{108,94,82,88,88,104,126,111} 
+#endif
+/*fin_reglage*/
+
+},{
+
+/*debut reglage 7 */
+#ifdef programme
+{197,191,175,185},{
+{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+},{
+{106,98,93,71}
+,{66,74,87,66}
+,{48,46,38,33}
+,{40,41,33,26}
+,{25,29,40,57}
+,{63,62,71,80}
+},{
+{83,79,75,75,92,112,31100}
+,{125,126,117,113,107,94,20315}
+,{108,116,122,124,117,120,32117}
+,{110,99,94,98,107,93,17217}
+},{88,82,94,108,111,126,104,88} 
+#else
+{185,175,191,197},{
+{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+},{
+{71,93,98,106}
+,{66,87,74,66}
+,{33,38,46,48}
+,{26,33,41,40}
+,{57,40,29,25}
+,{80,71,62,63}
+},{
+{75,75,79,83,31100,112,92}
+,{113,117,126,125,20315,94,107}
+,{124,122,116,108,32117,120,117}
+,{98,94,99,110,17217,93,107}
+},{108,94,82,88,88,104,126,111} 
+#endif
+/*fin_reglage*/
+
+} };
+
+/* ------------------------------------   corps  des fonctions	 ------------------------------ */
+/* -------------------------------------------------------------------------------------------- */
+
+
+
+unsigned long	val_long(char x)
+{
+unsigned long a,xl;
+char aa;
+aa=x-2;
+a=aa;
+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: /tags/archediab_27/Poubelle/archediab.old/archeops.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/archeops.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/archeops.h	(revision 646)
@@ -0,0 +1,1006 @@
+
+/*======================================================================*/
+/*                                                                      */
+/* 		 archeops.h  :	structure de données            	*/
+/*                                                                      */
+/*======================================================================*/
+
+#define		_archeops
+#define		version_num		27
+
+#if version_num>=27
+#define ECC_TOTAL 255
+#define ECC_DATA 239       /* Nb de bytes de data encodes */
+#define ECC_SIZE (ECC_TOTAL-ECC_DATA) /* Nb de bytes encodeurs */
+#define SIZE_HEAD sizeof(int4)*3  /* 3 mots d'entete de blocs */
+#endif
+/*======================================================================*/
+/*                                                                      */
+/* 			historique des modifications            	*/
+/*                                                                      */
+/*                                                                      */
+/*  VERSION 24:                                                         */
+/*                                                                      */
+/*	- utilise le fichier archeops.c					*/
+/*	- nb_max_bolo=24  avec nb_bolo_util=18				*/
+/*	- change la structure du block param				*/
+/*	- change la structure du block dilution				*/
+/*									*/
+/*  VERSION 25:                                                         */
+/*                                                                      */
+/*	- la compression marche						*/
+/*	- 4 signaux synchro O.K.					*/
+/*	- change la structure dil : contient les temperatures		*/
+/*									*/
+/*  VERSION 26:                                                         */
+/*                                                                      */
+/*	- int4 pour compatibilité toutes machines			*/
+/*								        */
+/*  VERSION 27:                                                         */
+/*	- ajout dans chaque block-type d'une structure "ecc" dont la    */
+/*	taille est adaptee a la taille du bloc: 		        */
+/*		on ajoute 16 bytes servant a la correction d'erreur     */
+/*		pour chaque paquet de 241 bytes	de donnees.	        */
+/*	les bytes d'ECC sont calcules avant envoi sur la ligne	        */
+/*	telemesure.					                */
+/*	Ils peuvent servir a l'arrivee pour verifier et corriger quand  */
+/*	c'est possible les donnees. On peut corriger au maximu 7 bytes  */
+/*	erronnes.						        */
+/*								        */
+/*======================================================================*/
+
+
+/*======================================================================*/
+/*  ---------------  parametres generaux de definition   -------------  */
+/*======================================================================*/
+#ifndef int4
+#ifdef __alpha
+#define int4 int
+#undef programme
+#else
+#define int4 long
+#endif
+#endif
+
+#ifdef linux
+#undef programme
+#endif
+
+
+#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_max_nom_bolo		24	/*  nombre maxi de noms et coef bolo dans la table	*/
+
+#define nb_sync			4	/*  nombre de signaux de synchro			*/
+					/*  6 pour diabolo 					*/
+					/* toujours multiple de 4 pour archeops			*/
+#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)	*/
+#define		nb_modes_telemesure	10
+#define		nb_modes_flash		 3
+
+/*======================================================================*/
+/*  -------     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};	/* 12 codes: reste 4 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_commande,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	
+	{
+	int4		numero_nom_coef;	/*  le numero pour retrouver le nom et les coef	*/
+	int4		bolo_code_util;		/*  le code d'utilisation du bolo		*/
+	int4		bolo_bebo;		/*  l'acquisition:  0 pour MLPA 10 pour BEBODIFF*/
+	int4		bolo_num;		/*  l'adresse hard du bolo			*/
+	int4		bolo_gain;		/*  le gain du preampli				*/
+	int4		bolo_capa;		/*  la valeur capa du modulateur		*/
+	int4 		bolo_diviseur;		/*  le diviseur de la compensation		*/
+	}
+	param_un_bolo;
+	
+	
+typedef struct	
+	{
+	char		bolo_nom[32];		/*  le nom de chaque bolometre			*/
+	int4	  	coef[7];		/*  les coef pour le calcul de la température	*/
+	}
+	nom_et_coef_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	*/
+	{
+	int4		numero_version;			/*  numero de version du header archeops.h	*/
+	int4		n_max_bolo;			/*  nombre maxi de bolos  (divisible par 4)	*/
+	int4		n_per_block;			/*  nombre de periodes entieres dans un block	*/
+	int4		n_max_mes_per;			/*  nb de points maxi dans une periode complete	*/
+
+	int4		nb_bolo;			/*  nombre de bolometres effectivement lut	*/
+	param_un_bolo	bolo[nb_max_bolo];
+	nom_et_coef_bolo nom_coef[nb_max_nom_bolo];	/*  nombre de nom et coef bolo			*/
+	}
+	param_bolo;
+	
+	
+	
+	
+/*	
+	int4		bolo_code_util[nb_max_bolo];	
+	char		bolo_nom[nb_max_bolo][32];	
+
+	int4		bolo_bebo[nb_max_bolo];		
+	int4		bolo_num[nb_max_bolo];		
+	int4		bolo_gain[nb_max_bolo];		
+
+	int4		bolo_capa[nb_max_bolo];		
+	int4 		bolo_diviseur[nb_max_bolo];	
+	
+	int4	  	coef[nb_max_bolo][7];		
+
+	int4		presence_bebo;			
+	}
+	param_bolo;
+*/
+
+typedef struct				/*	La structure de transfert transputer vers mac	*/  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+
+	param_bolo	param;		/*	les parametres de mesure des bolometres		*/
+	unsigned char ecc[((((sizeof( param_bolo)+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+	int4		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_param;			
+	
+
+
+
+/*  -------------------   structures N° 1 :   journal de bord        ---------------------	*/
+/*  -----------------------------------------------------------------------------------------	*/
+#define long_page	10
+typedef struct				  
+	{
+	int4		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				  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+
+	ligne_journal	jj[long_page];	/*	block de 10 lignes de journal			*/
+	unsigned char ecc[((((sizeof(ligne_journal)*long_page+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+
+	int4		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 = (double)parametr.bolo[bolo].bolo_gain*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	
+	{
+	int4	mot1;		/*  dac1 = mot[11..0]; dac2=mot1[23..12]	*/
+				/*  gain = mot1[27..24]; phase = mot1[31..28];	*/
+	int4	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 int4			*/
+
+typedef struct
+	{
+	char	mode;
+	char	gain;
+	char	courant;
+	char	delai;
+	}
+	auto_bolo;			/*  longueur 1 entiers int4			*/
+
+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 int4		*/
+
+
+
+#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 int4		*/
+
+
+typedef struct
+	{
+	char	delai;
+	char	courant;
+	char	gain;
+	char	mode;
+	}
+	auto_bolo;			/*  longueur 1 entiers int4		*/
+
+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 int4		*/
+
+
+#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_zero,vanne_rien,vanne_ferme,vanne_ouvre,vanne_auto_pression,vanne_auto_P_T};
+/*enum{trans_zero,trans_rien,trans_normal,trans_rapide,trans_lent};*/
+enum{helium_zero,helium_continu,helium_40s,helium_400s};
+
+
+typedef struct							/*  int4 en mot de 32 bit   	*/
+	{
+	horloge			horloge;			/*			1	*/
+	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				  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+	reglage_bolo	reglage;											
+	unsigned char ecc[((((sizeof(reglage_bolo)+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+	int4		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_reglage;			
+	
+/*  ---------------------   structures N° 3 :    etat de la dilution	-----------------------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+typedef struct				  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+	int4		switch_dil;
+	int4		ADC_dil[48];	/*	la lecture des 48 ADC de la carte DIL		*/
+	int4		DAC_dil[4];	/*	les 4 dac de la carte dilution			*/
+	int4		DAC_sst[4];	/*	les 4 dac de la carte sst			*/
+	int4		temperature[4];	/*	valeurs lues sur cartes BEDIFF modifiees	*/
+/*	int4		gyro_dil[3][nb_per_block*2];	les gyros  (block gyros)		*/
+/*	int4		data_dil[50];	 data brutes de la dilution				*/
+	unsigned char ecc[((((sizeof(int4)*64+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+	int4		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		*/
+/* J10A  ->  temperatures basses t_b1 t_b2,t_b3 t_b4 36 37 41 35	*/ 
+/* J10B  ->  temperatures basses t_a1 t_a2,t_a3 t_a4 38 11 34 28	*/ 
+/* J1??	 ->  temperatures hautes t_h1 t_h2,t_h3 t_h4	*/ 
+
+enum{
+/* multiplex11..18:*/	t_a2	,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	,t_a4	
+/* multiplex31..38:*/,	mul31_	,p_C4	,p_air	,t_a3	,t_b4	,t_b1	,t_b2	,t_a1	
+/* 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		
+	};
+/* reste libres :  mul   12 - 21 - 22 - 25 -  31 - 44 - 57 - 58 - 64	*/
+
+#define  val_multiplex(qq)	(0.0003052*(double)((qq)-0x8000))	
+#define  val_temperature(qq)	((val_multiplex(qq)<0.2)?-99:((1146.3/(val_multiplex(qq)-0.1)) - 245.13))
+
+
+/*  ---------------------   structures N° 4 :     gps           -------------------------------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+
+#define GPS_DATA 80
+typedef struct				  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+
+	char		gps[GPS_DATA];	/*      les données GPS (une chaine maxi 80 cara)	*/
+	unsigned char ecc[((((GPS_DATA+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+
+	int4		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_gps;			
+	
+
+
+/*  ---------------------   structures N° 5 :   tous les bolos 1 periode     	---------------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+typedef struct				  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+	
+	short 		bol_per[nb_max_bolo][nb_max_mes_per];		
+	unsigned char ecc[((((sizeof(short)*nb_max_bolo*nb_max_mes_per+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+
+	int4		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_une_periode;			
+
+/*  ----------------   structures N° 6 :  signals de synchro (pour test au sol)	---------------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+typedef struct				  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+	char		synchro[nb_per_block*2][nb_sync];	
+	unsigned char ecc[((((nb_per_block*nb_sync*2+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+
+	int4		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_synchro_sol;			
+
+/*  ---------------------   structures N° 7 : block de données de pointage sol      -----------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+typedef struct	  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+	char		comment[1024];
+	unsigned char ecc[((((1024+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+	int4		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_pointage_sol;			
+
+
+
+/*  -------------   structures N° 8 :   données brutes des bolometres    ----------------------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+typedef struct				  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+					/*	pour chaque bolo, un vecteur 72 points		*/
+	int4		data_bolo[nb_max_bolo][nb_per_block*2];	
+					/*	data D.S.	(en mots de 32 bits)		*/
+	unsigned char ecc[((((sizeof(int4)*nb_max_bolo*nb_per_block*2+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+	int4		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_bolo;			
+
+/*  ---------------------   structures N° 9 :   données des gyroscopes et du magnétometre	*/
+/*  -----------------------------------------------------------------------------------------	*/
+typedef struct				  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+					/* chaque gyro: un vecteur tde 72 valeurs		*/
+	int4		gyro[3][nb_per_block*2];
+	int4		magneto[3];	/*	1 bit par echantillonage soit 3*32bit>72	*/
+	unsigned char ecc[((((sizeof(int4)*3*nb_per_block*2*3+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+	int4		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_gyro;			
+
+/*  ---------------------   structures N° 10 :   données senseur stellaire	  -----------	*/
+/*  -----------------------------------------------------------------------------------------	*/
+typedef struct				  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+	int4		sst[nb_per_block*2][18];
+					/* chaque mesure: un paquet de 18 mots de 32 bits	*/
+	unsigned char ecc[((((sizeof(int4)*nb_per_block*2*18+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+	int4		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_sst;			
+
+/*  ---------------------   structures N° 11 :    rien		          -----------		*/
+/*  -----------------------------------------------------------------------------------------	*/
+typedef struct				  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+	unsigned char ecc[((((SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+	int4		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type11;			
+
+/*  ---------------------   structures N° 12 :  data bolo apres compression sur 7 bit	 ------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+typedef struct				  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+					/*  	nombre de mots = nb valeurs/4 +1		*/
+					/*	pour chaque bolo, un vecteur  19 mots		*/
+	unsigned int4	data_bolo[nb_bolo_util][ (nb_per_block/2) +1 ];
+	unsigned char ecc[((((sizeof(int4)*nb_bolo_util*((nb_per_block/2) +1)+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+
+	int4		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_bolo_comprime;			
+
+/*  ---------------------   structures N° 13 :    block_type_gyro_comprime	-----------	*/
+/*  -----------------------------------------------------------------------------------------	*/
+typedef struct				  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+					/*  	nombre de mots = nb valeurs/4 +1		*/
+	unsigned int4	gyro[3][ (nb_per_block/2) +1 ];
+	unsigned char ecc[((((sizeof(int4)*3*((nb_per_block/2) +1)+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+	int4		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_gyro_comprime;			
+
+/*  ---------------------   structures N° 14 :    block_type_sst_comprime	-----------	*/
+/*  -----------------------------------------------------------------------------------------	*/
+typedef struct				  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+					/*	pour chaque diode, un vecteur  11 mots		*/
+	unsigned int4	sst[nb_photo_diodes] [(nb_per_block*2/7) +1 ];
+	unsigned char ecc[((((sizeof(int4)*nb_photo_diodes*((nb_per_block*2/7) +1)+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+	int4		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_sst_comprime;			
+
+
+/*  ---------------------   structures N° 15 : block_type_status_flash -------*/
+/*  ----------------------------------------------------------------	*/
+
+/*
+** Quelque soit la commande, l'enregistreur renvoie toujours le meme type
+de bloc comprenant la commande, un mot d'erreur eventuel et le status.
+
+** L'enregistreur ne prend jamais l'initiative d'envoyer un bloc de status
+(sauf dans le cas ci-dessous).
+
+** Au reset, le controleur est un peu lent a demarrer (quelques secondes).
+Pour que tu puisse savoir quand il est pret, je propose de t'envoyer un 
+bloc de type "block_type_status_flash" des que je suis pret (comme si tu
+avais envoye un bloc "block_type_cmd_flash" avec la commande
+"FLASH_STATUS_REQUEST"
+
+*/
+
+typedef struct {/* etat de l'enregistreur */
+  int4 nb_total_blocks ;
+  int4 memoire_libre ;
+  int4 nb_block_erreur ;
+} status_flash;
+
+typedef struct {
+  unsigned int4 debut ;
+  unsigned int4 code1 ;
+  unsigned int4 code2 ;
+
+  int4	commande; /* la commande a laquelle ce bloc repond	*/
+  int4 erreur ;   /* Si la commande a induit une erreur */
+  status_flash status ; /* etat de l'enregistreur */
+  unsigned char ecc[((((sizeof(int4)*2 + sizeof(status_flash)+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+  
+  unsigned int4 fin ; /* code de reconnaissance de fin de block	*/
+} block_type_status_flash ;
+
+/*  ---------------------   structures N° 16 :    block_type_cmd_flash    ---------*/
+/*  ------------------------------------------------------------------	*/
+typedef struct {
+  unsigned int4 debut ;
+  unsigned int4 code1 ;
+  unsigned int4 code2 ;
+
+  int4	commande; /* type de commande a l'enregistreur flash */
+  unsigned char ecc[((((sizeof(int4)+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+
+  int4	fin;      /* code de reconnaissance de fin de block */
+} block_type_cmd_flash;			
+
+/* Commands from Transputer to Recorder */
+enum {
+  FLASH_STATUS_REQUEST,
+  FLASH_EFFACE_TOUT1, FLASH_EFFACE_TOUT2, FLASH_EFFACE_TOUT3,
+  FLASH_EFFACE_UTIL1, FLASH_EFFACE_UTIL2, FLASH_EFFACE_UTIL3
+} ;
+
+/* Errors from Recorder to Transputer.
+   Pending question: what to do in case of FLASH_ERASE_END_ERROR ?
+*/
+
+enum {
+  FLASH_STATUS_OK,      /* Pas d'erreur */
+  FLASH_BAD_SEQUENCE,   /* Mauvaise sequence d'effacement */
+  FLASH_ERASE_START,    /* Debut d'effacement */
+  FLASH_ERASE_END_OK,   /* Fin d'effacement OK */
+  FLASH_ERASE_END_ERROR /* Erreur pendant l'effacement */
+} ;
+
+
+/*  ---------------------   structures N° 17 : block brut de données ctb pour test      -------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+typedef struct	  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+#ifdef	transmet_data_brute
+	char		data[nb_per_block*nb_max_mes_per*nb_byte_mot];
+	unsigned char ecc[((((nb_per_block*nb_max_mes_per*nb_byte_mot+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+#else
+	unsigned char ecc[((((SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+#endif
+	int4		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_data_brute;			
+
+/*  ---------------------   structures N° 18 : block  vide pour l'instant	      -------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+typedef struct	  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+	unsigned char ecc[((((SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+	int4		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_18;			
+
+/*  ---------------------   structures N° 19 : block  vide pour l'instant	      -------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+typedef struct	  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+	unsigned char ecc[((((SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+	int4		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	*/  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+	int4		mot[(taille_maxi_block_archeops)/4];
+	unsigned char ecc[((((sizeof(int4)*(taille_maxi_block_archeops/4)+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+	int4		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_status_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_status_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_status_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 int4 (echelle logarythmique)	*/
+/*	elle est en particulier utilisée pour fixer le courant sur les bolometres		*/
+
+unsigned int4	val_long(char x);
+
+int	new_val_dac(int a,char  code); 
+
+
Index: /tags/archediab_27/Poubelle/archediab.old/prog_compression_unsigned/compress.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/prog_compression_unsigned/compress.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/prog_compression_unsigned/compress.c	(revision 646)
@@ -0,0 +1,429 @@
+#include "manip.h"
+#include "compress.h"
+
+
+/*******************************************************************************************/
+/****************   			 					************/
+/****************   			 		compress_3		************/
+/****************   			 					************/
+/*******************************************************************************************/
+
+int filtre[16]={0xfffffff,0xffffffe,0xffffffc,0xffffff8,
+		0xffffff0,0xfffffe0,0xfffffc0,0xfffff80,
+		0xfffff00,0xffffe00,0xffffc00,0xffff800,
+		0xffff000,0xfffe000,0xfffc000,0xfff8000};
+int test[16]=  {0x00000000,0x00000001,0x00000002,0x00000004,
+		0x00000008,0x00000010,0x00000020,0x00000040,
+		0x00000080,0x00000100,0x00000200,0x00000400,
+		0x00000800,0x00001000,0x00002000,0x00004000};
+
+
+void  com_3(unsigned long val,unsigned long* in,unsigned long*out,int n,int pasin);
+
+#define	data_mask	0xffff	/* masque pour les données en entree	*/
+#define	ecart_(i,n,val)		(( (in[(i*9+n)*pasin]&data_mask) | ecart_bit )-val);
+
+#define	ecart_mask		0x7	/*	masque pour 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(unsigned long* in,unsigned long*out,int n,int pasin)
+{
+unsigned long val;
+val=in[0]; out[0]=val;
+com_3(val,in,out+1,n/9,pasin);
+}
+
+
+
+
+void  com_3(unsigned long val,unsigned long* in,unsigned long*out,int n,int pasin)
+{
+unsigned long val1;
+unsigned long ec1,ec2,ec3,ec4,ec5,ec6,ec7,ec8,ec9;
+int i,k,k1;unsigned long q;
+
+
+for(i=0;i<n;i++)
+	{
+	k=0;q=3;	/* 3 bit = 7 = +-3	*/
+
+	ec1=ecart_(i,0,val);
+	shif(ec1,k,q);
+	val1=new_val(val,ec1,k);
+	
+	k1=k;
+	ec2=ecart_(i,1,val1);
+	shif(ec2,k,q);
+	
+	if(k>k1)	{k1=k;val1=new_val(val,ec1,k);}
+	val1=new_val(val1,ec2,k);
+
+	ec3=ecart_(i,2,val1);
+	shif(ec3,k,q);
+
+	if(k>k1)	{k1=k;val1=(val + arrondi(ec1,k) + arrondi(ec2,k))&data_mask;}
+	val1=new_val(val1,ec3,k);
+
+	ec4=ecart_(i,3,val1);
+	shif(ec4,k,q);
+
+	if(k>k1)	{k1=k;val1=(val + arrondi(ec1,k) + arrondi(ec2,k) + arrondi(ec3,k))&data_mask;}
+	val1=new_val(val1,ec4,k);
+
+	ec5=ecart_(i,4,val1);
+	shif(ec5,k,q);
+
+	if(k>k1)	{k1=k;val1=(val + arrondi(ec1,k) + arrondi(ec2,k) + arrondi(ec3,k) 
+				+ arrondi(ec4,k))&data_mask;}
+	val1=new_val(val1,ec5,k);
+	
+	ec6=ecart_(i,5,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))&data_mask;}
+	val1=new_val(val1,ec6,k);
+	
+	ec7=ecart_(i,6,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))&data_mask;}
+	val1=new_val(val1,ec7,k);
+	
+	ec8=ecart_(i,7,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))&data_mask;}
+	val1=new_val(val1,ec8,k);
+	
+	ec9=ecart_(i,8,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&ecart_mask)<<29) | ((ec2&ecart_mask)<<26) | ((ec3&ecart_mask)<<23) 
+		| ((ec4&ecart_mask)<<20) | ((ec5&ecart_mask)<<17) | ((ec6&ecart_mask)<<14)
+		| ((ec7&ecart_mask)<<11)  | ((ec8&ecart_mask)<<8) | ((ec9&ecart_mask)<<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=(val + ( (ec1 + ec2 + ec3 + ec4 + ec5 + ec6 + ec7 + ec8 + ec9 ) << k )) & data_mask;
+	}
+}
+
+
+
+/*******************************************************************************************/
+/****************   			 											*****************/
+/****************   			 		compress_4							*****************/
+/****************   			 											*****************/
+/*******************************************************************************************/
+
+void  com_4(unsigned long val,unsigned long* in,unsigned long*out,int n,int pasin);
+void  com_4_paire(unsigned long val1,unsigned long val2,unsigned long* in,unsigned long*out,int n,int pasin);
+
+
+#undef	ecart_mask		
+#define	ecart_mask	0xf		/*	masque pour l'ecart		*/		
+
+#undef	data_mask
+#define	data_mask	0xffff	/* masque pour les données en entree	*/
+#undef	ecart_
+#define	ecart_(i,n,val)		(( (in[(i*7+n)*pasin]&data_mask) | ecart_bit )-val);
+
+
+/*  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(unsigned long* in,unsigned long*out,int n,int pasin)
+{
+unsigned 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(unsigned long val,unsigned long* in,unsigned long*out,int n,int pasin)
+{
+unsigned long val1;
+unsigned long ec1,ec2,ec3,ec4,ec5,ec6,ec7;
+int i,k,k1;unsigned long q;
+
+
+for(i=0;i<n;i++)
+	{
+	k=0;q=7;	/* 4 bit = 15 = +-7	*/
+
+	ec1=ecart_(i,0,val);
+	shif(ec1,k,q);
+	val1=new_val(val,ec1,k);
+	
+	k1=k;
+	ec2=ecart_(i,1,val1);
+	shif(ec2,k,q);
+	
+	if(k>k1)	{k1=k;val1=(val + arrondi(ec1,k))&data_mask;}
+	val1=new_val(val1,ec2,k);
+
+	ec3=ecart_(i,2,val1);
+	shif(ec3,k,q);
+
+	if(k>k1)	{k1=k;val1=(val + arrondi(ec1,k) + arrondi(ec2,k))&data_mask;}
+	val1=new_val(val1,ec3,k);
+
+	ec4=ecart_(i,3,val1);
+	shif(ec4,k,q);
+
+	if(k>k1)	{k1=k;val1=(val + arrondi(ec1,k) + arrondi(ec2,k) + arrondi(ec3,k))&data_mask;}
+	val1=new_val(val1,ec4,k);
+
+	ec5=ecart_(i,4,val1);
+	shif(ec5,k,q);
+
+	if(k>k1)	{k1=k;val1=(val + arrondi(ec1,k) + arrondi(ec2,k) + arrondi(ec3,k) + arrondi(ec4,k))&data_mask;}
+	val1=new_val(val1,ec5,k);
+	
+	ec6=ecart_(i,5,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))&data_mask;}
+	val1=new_val(val1,ec6,k);
+	
+	ec7=ecart_(i,6,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&ecart_mask)<<28) | ((ec2&ecart_mask)<<24) | ((ec3&ecart_mask)<<20) 
+				| ((ec4&ecart_mask)<<16) | ((ec5&ecart_mask)<<12) | ((ec6&ecart_mask)<<8) | ((ec7&ecart_mask)<<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=(val+ ( (ec1 + ec2 + ec3 + ec4 + ec5 + ec6 + ec7 ) << k ))&data_mask;
+	}
+}
+
+/********************************************************************************************/
+
+/*  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								*/
+
+#undef	data_mask
+#define	data_mask	0x1fffff	/* masque pour les données en entree 21 bit	*/
+#undef	ecart_
+#define	ecart_(i,n,val)		(( (in[(i*7+n)*pasin]&data_mask) | ecart_bit )-val);
+
+void compress_4_2(unsigned long* in,unsigned long*out,int n,int pasin)
+{
+unsigned long val1,val2;
+val1=in[0]&data_mask;		val2=in[1]&data_mask;
+out[0]=val1;	out[1]=val2;
+com_4_paire(val1,val2,in+2,out+2,n/7,pasin);
+}
+
+
+void  com_4_paire(unsigned long val1,unsigned long val2,unsigned long* in,unsigned long*out,int n,int pasin)
+{
+unsigned long val1p,val2p;
+unsigned long ec1,ec2,ec3,ec4,ec5,ec6,ec7;
+int i,k,k1;unsigned long q;
+
+
+for(i=0;i<n;i++)
+	{
+	k=0;q=7;	/* 4 bit = 15 = +-7	*/
+
+	ec1=ecart_(i,0,val1);
+	shif(ec1,k,q);
+	
+	ec2=ecart_(i,1,val2);
+	shif(ec2,k,q);
+	
+	k1=k;
+	val1p=new_val(val1,ec1,k);
+
+
+	ec3=ecart_(i,2,val1p);
+	shif(ec3,k,q);
+
+	val2p=new_val(val2,ec2,k);
+
+	ec4=ecart_(i,3,val2p);
+	shif(ec4,k,q);
+
+	if(k>k1)	{k1=k;val1p=new_val(val1,ec1,k);val2p=new_val(val2,ec2,k);}
+	
+	val1p=new_val(val1p,ec3,k);		
+
+	ec5=ecart_(i,4,val1p);
+	shif(ec5,k,q);
+
+	if(k>k1)	{	k1=k;
+				val1p=(val1 + arrondi(ec1,k) + arrondi(ec3,k))&data_mask;
+				val2p=(val2 + arrondi(ec2,k))&data_mask;
+				}
+	val2p=new_val(val2p,ec4,k);		
+	
+	ec6=ecart_(i,5,val2p);
+	shif(ec6,k,q);
+
+	if(k>k1)	{	k1=k;
+				val1p=(val1 + arrondi(ec1,k) + arrondi(ec3,k))&data_mask;
+				val2p=(val2 + arrondi(ec2,k) + arrondi(ec4,k))&data_mask;
+				}
+	val1p=new_val(val1p,ec5,k);		
+	
+	ec7=ecart_(i,6,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&ecart_mask)<<28) | ((ec2&ecart_mask)<<24) | ((ec3&ecart_mask)<<20) 
+				| ((ec4&ecart_mask)<<16) | ((ec5&ecart_mask)<<12) | ((ec6&ecart_mask)<<8) | ((ec7&ecart_mask)<<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 ))&data_mask;
+	val1= (val2 + ( (ec2 + ec4	+ ec6 ) << k ))&data_mask;
+	val2 = val1p;
+	}
+}
+
+
+
+
+
+/*******************************************************************************************/
+/****************   			 											*****************/
+/****************   			 		compress_7							*****************/
+/****************   			 											*****************/
+/*******************************************************************************************/
+
+/*******************************************************************************************/
+
+/*  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	*/
+
+
+
+void  compress_7_paire(unsigned long val1,unsigned long val2,unsigned long* in,unsigned long*out,int n,int pasin);
+
+#undef	data_mask
+#define	data_mask	0x1fffff	/* masque pour les données en entree 21 bit	*/
+#undef	ecart_mask		
+#define	ecart_mask		0x7f		/*	masque pour l'ecart 7 bits		*/		
+
+#undef	 ecart_
+#define	ecart_(i,n,val)		(( (in[(i*4+n)*pasin]&data_mask) | ecart_bit )-val);
+
+
+void compress_7_2(unsigned long* in,unsigned long*out,int n,int pasin)
+{
+unsigned long val1,val2;
+val1=in[0]&0x1fffe0;val2=in[pasin]&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(unsigned long val1,unsigned long val2,unsigned long* in,unsigned long*out,int n,int pasin)
+{
+
+unsigned long val1p,val2p;
+unsigned long ec1,ec2,ec3,ec4;
+int i,k;unsigned long q;
+
+
+for(i=0;i<n;i++)
+	{
+	k=0;q=63;		/* 7 bit ->  127  ->   +-63	*/
+
+	ec1=ecart_(i,0,val1);	shif(ec1,k,q);	
+	
+	ec2=ecart_(i,1,val2);	shif(ec2,k,q);
+	val1p =new_val(val1,ec1,k);
+
+	ec3=ecart_(i,2,val1p);	shif(ec3,k,q);
+	val2p=new_val(val2,ec2,k);
+
+	ec4=ecart_(i,3,val2p);	shif(ec4,k,q);
+	
+	ec1 =  arrondi(ec1,k) >> k;
+	ec2 =  arrondi(ec2,k) >> k;
+	ec3 =  arrondi(ec3,k) >> k;
+	ec4 =  arrondi(ec4,k) >> k;
+
+	out[i]= ((ec1&ecart_mask)<<25) | ((ec2&ecart_mask)<<18) | ((ec3&ecart_mask)<<11) | ((ec4&ecart_mask)<<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=(val1+ ( (ec1 + ec3 ) << k ))&data_mask;
+	val2=(val2+ ( (ec2 + ec4 ) << k ))&data_mask;
+	}
+}
+
+
+
+
Index: /tags/archediab_27/Poubelle/archediab.old/prog_compression_unsigned/compress.h
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/prog_compression_unsigned/compress.h	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/prog_compression_unsigned/compress.h	(revision 646)
@@ -0,0 +1,105 @@
+
+/************************************************************************/
+/*******   							*********/
+/*******   	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(unsigned long* in,unsigned 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(unsigned long* in,unsigned 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(unsigned long* in,unsigned 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(unsigned long* in,unsigned 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(unsigned long* in,unsigned long*out,int n,int pasin);
+void decompress_4_2(long* in,long*out,int n);
+
+
+																						
+/************************************************************************/
+/***********   							*********/
+/***********   	definitions communes pour les compresseurs	*********/
+/***********   			 				*********/
+/************************************************************************/
+
+/*	tous les nombres sont des entiers unsigned long pour compress				*/
+/*Les valeures de la table d'entree sont consideres comme toujours positives et sur 21 bits	*/
+/*  les valeurs de reference pour le calcul des ecarts sont augmentees de ecart_bit=0x10000000	*/
+/*	LES ECARTS SONT DES ENTIERS POSITIFS (ecart_bit +  valeur courante - valeur precedente) */
+
+/*  pour tous les compresseurs	*/
+#define kmax_	15		/*  valeur maximum de l'exposant	*/
+#define	ecart_bit	0x10000000
+#define	shif(ec,k,q)	{while(ec>(q|ecart_bit))if(k<kmax_){k++;q<<=1;}else ec=(q|ecart_bit);while(ec<ecart_bit-q)if(k<kmax_){k++;q<<=1;}else ec=ecart_bit-q;}
+#define	arrondi(ec,k)	((ec &  filtre[k]) +( (ec & test[k]) <<1 ) ) /* resultat sur 28 bit  */	
+#define new_val(val,ec,k)	((val + arrondi(ec,k))&data_mask);
+
+/* pour les decompresseurs	*/
+#define	recup(ec,sss,k) {ec=((R>>sss)&ecart_mask);if(ec & sgbi_ ) ec|= sign_ ; ec<<=k;}
+
Index: /tags/archediab_27/Poubelle/archediab.old/prog_compression_unsigned/decompress.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/prog_compression_unsigned/decompress.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/prog_compression_unsigned/decompress.c	(revision 646)
@@ -0,0 +1,291 @@
+#include <manip.h>
+#include "compress.h"
+
+
+//*******************************************************************************************
+//****************   			 											*****************
+//****************   			 		decompress_3							*****************
+//****************   			 											*****************
+//*******************************************************************************************
+
+#define	ecart_mask		0x7	/*	masque pour l'ecart		*/		
+
+void  decom_3(long val,long* in,long*out,int n);
+
+#define	k_mask	0xf		/*	masque pour l'exposant		*/
+#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&k_mask;
+	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	ecart_mask		
+#define	ecart_mask	0xf		/*	masque pour l'ecart		*/		
+#undef	sgbi_
+#undef	sign_
+
+
+
+#define	k_mask	0xf		/*	masque pour l'exposant		*/
+#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&k_mask;
+	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&k_mask;
+	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	sgbi_
+#undef	sign_
+
+
+#undef	ecart_mask		
+#define	ecart_mask		0x7f		/*	masque pour l'ecart 7 bits		*/		
+#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&k_mask;
+	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&k_mask;
+	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: /tags/archediab_27/Poubelle/archediab.old/prog_compression_unsigned/test_compress.c
===================================================================
--- /tags/archediab_27/Poubelle/archediab.old/prog_compression_unsigned/test_compress.c	(revision 646)
+++ /tags/archediab_27/Poubelle/archediab.old/prog_compression_unsigned/test_compress.c	(revision 646)
@@ -0,0 +1,105 @@
+#include <manip.h>
+#include "compress.h"
+
+
+#define lg	72
+
+void exec_fen(int fen,int item,double valeur,...);
+
+long *entree,*comp,*rec;
+
+
+main()
+{
+nouveauD(1,0,"compress",exec_fen);
+return(1);
+}
+
+
+//--------------------  fonction  exec  de  la  fenetre : copie  -------------------------------
+
+
+void exec_fen(int fen,int item,double valeur,...) 
+{
+int i;
+long t;
+double x,y;
+double bruit=0;
+
+switch(item)
+    {
+    case ouverture               :
+
+
+random(0.2);
+entree=malloc(lg*4);
+comp=malloc(lg*4);
+rec=malloc(lg*4);
+
+for(i=0;i<lg;i++) 
+	{
+	bruit=bruit*0.8 + 0.2*random(0);
+	entree[i]=200000.*cos(i*0.005) + 100000.*bruit;
+//	entree[i]=200000.*cos(i*0.005) + 100000.*bruit + (i%2)*80000;
+	if(i>40)	entree[i]+=500000.*exp(- 0.05*(i-40));
+//	if(i>40)	entree[i]+=200000.*exp(- 0.05*(i-40));
+//	entree[i]/=16;	//  entre 0 et 50 000  soit 16 bits
+	entree[i]*=2;	// de 0 a 15 e6  soit 21 bits
+	}
+
+
+for(i=0;i<lg;i++) trace(1,i,entree[i]);
+graph->couleur_trace=bleu;
+style(1);
+
+
+/*
+printf("comprime : ");
+t=TickCount();
+for(i=0;i<1000;i++)	  compress_4_1((unsigned long*)entree,(unsigned long*)comp,lg,1);
+			decompress_4_1(comp,rec,lg);
+y=0;for(i=0;i<lg;i++) {x=entree[i]-rec[i];y+=x*x;} y=sqrt(y/(double)lg);
+printf("fin de comprime 4_1  : t=%d   ecart total = %g  \n\n",TickCount()-t,y);
+*/
+
+
+printf("comprime : ");
+t=TickCount();
+for(i=0;i<1000;i++)	  compress_4_2((unsigned long*)entree,(unsigned long*)comp,lg,1);
+			decompress_4_2(comp,rec,lg);
+y=0;for(i=0;i<lg;i++) {x=entree[i]-rec[i];y+=x*x;} y=sqrt(y/(double)lg);
+printf("fin de comprime 4_2  : t=%d   ecart total = %g  \n\n",TickCount()-t,y);
+
+
+/*
+printf("comprime : ");
+t=TickCount();
+for(i=0;i<1000;i++)	  compress_7_1((unsigned long*)entree,(unsigned long*)comp,lg,1);
+			decompress_7_1(comp,rec,lg);
+y=0;for(i=0;i<lg;i++) {x=entree[i]-rec[i];y+=x*x;} y=sqrt(y/(double)lg);
+printf("fin de comprime 7_1  : t=%d   ecart total = %g  \n\n",TickCount()-t,y);
+
+
+
+printf("comprime : ");
+t=TickCount();
+for(i=0;i<1;i++)	  compress_7_2((unsigned long*)entree,(unsigned long*)comp,lg,1);
+			decompress_7_2(comp,rec,lg);
+y=0;for(i=0;i<lg;i++) {x=entree[i]-rec[i];y+=x*x;} y=sqrt(y/(double)lg);
+printf("fin de comprime 7_2  : t=%d   ecart total = %g  \n\n",TickCount()-t,y);
+*/
+
+for(i=0;i<lg;i++) trace(1,i,rec[i]);
+graph->couleur_trace=vert;
+style(1);
+for(i=0;i<lg;i++) trace(1,i,entree[i]-rec[i]);
+
+
+                 break;
+    case fermeture               :
+                 break;
+    default  :   break;
+    }
+}
+
+
