Index: trunk/Poubelle/archTOI.old/Makefile
===================================================================
--- trunk/Poubelle/archTOI.old/Makefile	(revision 342)
+++ trunk/Poubelle/archTOI.old/Makefile	(revision 342)
@@ -0,0 +1,27 @@
+CXX=cxx
+CPPFLAGS=-O
+archtoi: archtoimain.o archtoi.o archeopsfile.o decompress.o toiiter.o toisvr.o archeops.o \
+         ssthandler.o toiinterpolator.o gpsparser.o
+	$(LINK.cc) $^ $(LOADLIBES) $(LDLIBS) -o $@ -lm
+archdump: archtoidump.o archeopsfile.o decompress.o archeops.o ssthandler.o
+	$(LINK.cc) $^ $(LOADLIBES) $(LDLIBS) -o $@ -lm
+
+archeops.o: archeops.c  archeops.h 
+decompress.o: decompress.c archeops.h  compress.h
+archeopsfile.o: archeopsfile.cc archeopsfile.h archeops.h \
+  ssthandler.h compress.h
+archtoi.o: archtoi.cc archeopsfile.h archeops.h  \
+ ssthandler.h toisvr.h toiiter.h archtoi.h
+archtoidump.o: archtoidump.cc archeopsfile.h archeops.h  \
+ ssthandler.h archtoi.h toisvr.h toiiter.h
+archtoimain.o: archtoimain.cc archeopsfile.h archeops.h  \
+ ssthandler.h archtoi.h toisvr.h toiiter.h
+ssthandler.o: ssthandler.cc ssthandler.h archeops.h 
+test.o: test.cc archeopsfile.h archeops.h  ssthandler.h \
+ archtoi.h toisvr.h toiiter.h
+toiinterpolator.o: toiinterpolator.cc toiinterpolator.h
+toiiter.o: toiiter.cc toiiter.h archeopsfile.h archeops.h \
+  ssthandler.h toiinterpolator.h
+toisvr.o: toisvr.cc toisvr.h toiiter.h archeopsfile.h archeops.h \
+  ssthandler.h
+gpsparser.o: gpsparser.cc gpsparser.h archeops.h
Index: trunk/Poubelle/archTOI.old/archeops.c
===================================================================
--- trunk/Poubelle/archTOI.old/archeops.c	(revision 319)
+++ trunk/Poubelle/archTOI.old/archeops.c	(revision 342)
@@ -1,653 +1,1 @@
-//#include "manip.h"
-#include <stdio.h>
-#include "archeops.h"
-
-
-/**********  coefficients  pour  les  mesures  bolo    ********************************/
-/*                         toutes les puissances en pW                                */
-/*	-1-	loi de reponse thermique des bolos  avec R en ohms et T en Kelvin     */
-/*                                                                                    */
-/* 	T =  coef2  *   (   ln (  R / coef1) **  ( -1 / coef0 )                       */
-/*                                                                                    */
-/*	-2-	fuite thermique du bolo   coef 3,4                                    */
-/*                                                                                    */
-/*	Ptot =  coef3  *  ( (10*Tb) ** coef4    -    (10*Tcryo)  **  coef4 )          */
-/*                                                                                    */
-/*	-3-	calcul empirique de Pciel et de  tau	  coef  5,6                   */
-/*                                                                                    */
-/*	Pciel	=	coef5	- Pelec		coef5= I * Ai (tables xavier) 	      */
-/*	tau	=	- ln ( 1 +  Pciel / coef6 )	coef6= I * Bi (tables xavier) */
-/*                                                                                    */
-/**************************************************************************************/
-
-
-/**************************************************************************************/
-/*                                                                                    */
-/*   pour les MLPA      :  gain = 100   diviseur = 101  ou  330                       */
-/*   pour les bebodiff  :  gain = diviseur = 100Kohm / R preampli                     */
-/*   pour les bebodiff  :  la capa est corrigee d'un facteur 0.868                    */
-/*   pour les cartes modifiees : mettre diviseur=0                                    */
-/*                         et capa = la resistance de chage en Megohm                 */
-/*                                                                                    */
-/**************************************************************************************/
-
-
-/*  nom  ,  on/off  ,  0 = MLPA       , N° bolo ,  gain_pa  , capa*1000 , diviseur , coef*10000
-/*       ,  0 ou 1  ,  2..8 = BEBO    ,  hard   ,           ,  4700     ,  333     , 
-/*                     10 = Bediff    ,         ,           , 
-
-/* pour les bediff (code 10)  le n° de bolo est  N° de bebo*8  +  numero dans la bebo
-/*  soit :  1 2 3 4 5 6  ..  9 10 11 12 13 14 .. 17 18 19 20 21 22 .. etc
-
-
-/*debut_param*/
-/*----------------------------------  fenetre :  -----------------------------------*/
-
-param_bolo  parametr={24,24,36,88,18,
-
-{
-{ "v1-bedif1"  , 1,10,1 ,  200, 22000,  200, { 5000   , 123100 , 334200 } },		
-{ "v1-bedif2"  , 1,10,2 ,  200, 22000,  200, { 5000    , 12.31 , 33.42 		} },
-{ "v1-bedif3"  , 1,10,3 ,  200, 22000,  200, { 5000    , 50.0 , 14.0 		} },
-{ "v1-bedif4"  , 1,10,4 ,  200, 22000,  200,  { 5000    , 12.31 , 33.42 	} },
-{ "v1-bedif5"  , 1,10,5 , 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 	} },
-{ "v1-bedif6"  , 1,10,6 , 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 	} },
-
-{ "v1-bedif7"  , 1,10,9 , 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 		 } },
-{ "v1-bedif8"  , 1,10,10, 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 		 } },
-{ "v1-bedif9"  , 1,10,11, 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 		 } },
-{ "v1-bedif10" , 1,10,12, 1000, 4700, 1000,  { 5000     , 12.31 , 33.42 		 } },
-{ "v1-bedif11" , 1,10,13, 1000, 4700, 1000, { 5000     , 12.31 , 33.42 		 } },
-{ "v1-bedif12" , 1,10,14, 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 		 } },
-
-{ "v1-bedif13" , 1,10,17, 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 		 } },
-{ "v1-bedif14" , 1,10,18, 1000, 4700, 1000,  { 5000     , 12.31 , 33.42 		 } },
-{ "germanium"  , 3,10,19, 1000, 22000 ,    0,  { 5000      , 12.31 , 33.42 		 } },
-{ "therm_4k"   , 3,10,20, 1000, 1000  ,    0,  { 5000      , 12.31 , 33.42 		 } },
-{ "therm_1.6k" , 3,10,21, 1000, 1000  ,    0,  { 5000      , 12.31 , 33.42 		 } },
-{ "therm_10k"  , 3,10,22, 1000, 1000  ,    0,  { 5000     , 12.31 , 33.42 		 } },
-
-{ "v1-bedif19"  , 2,10,25 , 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 		 } },
-{ "v1-bedif20"  , 2,10,26, 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 		 } },
-{ "v1-bedif21"  , 2,10,27, 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 		 } },
-{ "v1-bedif22"  , 2,10,28, 1000, 4700, 1000,  { 5000     , 12.31 , 33.42 		 } },
-{ "v1-bedif23"  , 2,10,29, 1000, 4700, 1000,  { 5000     , 12.31 , 33.42 		 } },
-{ "v1-bedif24"  , 2,10,30, 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 		 } }
-
-}
-};
-/*fin_param*/
-
-
-
-/* bolos campagne 1998-1999	*/
-/*
-reg_NbSi.J, 1, 0, 1, 100, 4.7, 333,	.5			,519.6  , 8.286
-v1-231...L, 1, 0, 2, 100, 4.7, 333, .5   , 1.7   , 32.41 , 0.333 , 10  , 20.30  ,  11.41  		
-v1-232...N, 1, 0, 3, 100, 4.7, 333,		
-v1-237...E, 1, 0, 4, 100, 4.7, 333,
-
-reg_JamieO, 1, 0, 5, 100, 4.7, 101,
-
-V2-NbSi..H, 1, 0, 6, 100, 4.7, 101, .5   ,433.8  , 9.25
-V2-230...B, 1, 0, 7, 100, 4.7, 333, .5   , 8.26  , 26.61 , 5.10  ,  7  , 9.354   ,  1.026
-V2-205...Q, 1, 0, 8, 100, 4.7, 333,	.518 , 81    , 25.2 
-V2-208...P, 1, 0, 9, 100, 4.7, 333, .5   , 12.31 , 33.42 , 0.627 , 6.5 , 8.113   ,  2.958
-
-*/
-/*bolos campagne 1997-1998	*/
-/*
-
-v1-208...J, 1, 0, 1, 100, 4.7, 333, .5   , 12.31 , 33.42 		
-v1-232...L, 1, 0, 2, 100, 4.7, 333,		
-v1-205...N, 1, 0, 3, 100, 4.7, 333,	.518 , 81    , 25.2	
-v1-NbSi..E, 1, 0, 4, 100, 4.7, 333,	.5			,519.6  , 8.286
-Jamie....O, 1, 0, 5, 100, 4.7, 101,
-V2-NbSi..H, 1, 0, 6, 100, 4.7, 101, .5   ,433.8  , 9.25
-V2-224...B, 1, 0, 7, 100, 4.7, 333, .5   ,3.43   , 26.6
-V2-230...Q, 1, 0, 8, 100, 4.7, 333, .5   , 8.26  , 26.61
-V2-231...P, 1, 0, 9, 100, 4.7, 333, .5   , 1.7   , 32.41
-
-*/
-
-
-
-
-
-/*debut_nom_reglage*/
-/* 0->aa*/
-/* 1->bb*/
-/* 2->cc*/
-/* 3->reglage 3  */
-/* 4->reglage 4  */
-/* 5->reglage 5  */
-/* 6->reglage 6  */
-/* 7->reglage 7  */
-/*fin_nom_reglage*/
-
-
-
-
-
-
-
-reglage_bolo  reglage_standard[8]={{
-
-
-/*debut reglage 0 */
-{30,76,9,1},
-{0
-,10
-,1
-,3
-,10
-,2
-,0
-,0
-,1
-,0
-,0
-,0
-,0
-,0
-,0
-,0
-,0
-,0
-,0
-,0
-},{
-{22,100663296}
-,{-100646890,1}
-,{-100646890,1}
-,{22,0}
-,{-100638698,1}
-,{22,253952}
-,{-100646890,1}
-,{22,0}
-,{-100646890,1}
-,{-100646890,1}
-,{22,0}
-,{235388950,221185}
-,{20,0}
-,{20,0}
-,{16406,0}
-,{24598,0}
-,{22,0}
-,{24598,0}
-},{
-{1,22,0,1}
-,{0,20,0,1}
-,{0,20,0,1}
-,{0,20,0,1}
-,{0,20,0,1}
-,{0,20,0,1}
-},{
-{0,1,9,1,0,0,0}
-,{0,1,9,1,0,0,0}
-,{0,1,9,1,0,0,0}
-,{0,1,9,1,0,0,0}
-},{0,0,0,0,0,0,0,0} 
-/*fin_reglage*/
-
-},{
-
-/*debut reglage 1 */
-{30,76,9,1},
-{0
-,10
-,1
-,3
-,10
-,2
-,0
-,0
-,1
-,0
-,0
-,0
-,0
-,0
-,0
-,0
-,0
-,0
-,0
-,0
-},{
-{22,100663296}
-,{-100646890,1}
-,{-100646890,1}
-,{22,0}
-,{-100638698,1}
-,{22,253952}
-,{-100646890,1}
-,{22,0}
-,{-100646890,1}
-,{-100646890,1}
-,{22,0}
-,{235388950,221185}
-,{20,0}
-,{20,0}
-,{16406,0}
-,{24598,0}
-,{22,0}
-,{24598,0}
-},{
-{1,22,0,1}
-,{0,20,0,1}
-,{0,20,0,1}
-,{0,20,0,1}
-,{0,20,0,1}
-,{0,20,0,1}
-},{
-{0,1,9,1,0,0,0}
-,{0,1,9,1,0,0,0}
-,{0,1,9,1,0,0,0}
-,{0,1,9,1,0,0,0}
-},{0,0,0,0,0,0,0,0} 
-/*fin_reglage*/
-
-},{
-
-/*debut reglage 2 */
-{31,76,9,0},
-{0
-,-14
-,-31
-,-63
-,-83
-,-103
-,-122
-,127
-,1
-,97
-,14
-,-32
-,-93
-,-87
-,-72
-,-80
-,-101
-,-112
-,-113
-,-121
-},{
-{22,100663296}
-,{1040629782,204800}
-,{1040834582,221184}
-,{22,0}
-,{-100450282,2}
-,{22,253952}
-,{-100458474,2}
-,{22,0}
-,{-100442090,2}
-,{-100253674,253954}
-,{22,0}
-,{303013910,221184}
-,{20,0}
-,{20,0}
-,{9238,0}
-,{24598,301989888}
-,{22,0}
-,{24598,0}
-,{0,0}
-,{0,0}
-,{0,0}
-,{0,0}
-,{0,0}
-,{0,0}
-},{
-{-15,-9,-13,-38}
-,{-83,-109,-90,-68}
-,{-99,-101,-67,-61}
-,{-64,-60,-38,-19}
-,{-28,-57,-77,-75}
-,{-66,-55,-51,-68}
-},{
-{31,76,9,0,0,-35,-4643}
-,{-55,-77,-69,-55,-44,-43,-12336}
-,{-56,-85,-128,99,111,-116,-28030}
-,{105,107,101,101,106,111,31615}
-},{-102,-88,-94,-113,-126,101,73,70} 
-/*fin_reglage*/
-
-},{
-
-/*debut reglage 3 */
-{31,76,9,0},
-{0
-,-14
-,-31
-,-63
-,-83
-,-103
-,-122
-,127
-,1
-,99
-,13
-,96
-,-93
-,-87
-,-72
-,-80
-,-101
-,-112
-,-113
-,-121
-},{
-{22,100663296}
-,{1040629782,204800}
-,{1040834582,221184}
-,{22,0}
-,{-100450282,2}
-,{22,253952}
-,{-100458474,2}
-,{22,0}
-,{-100442090,2}
-,{-100253674,253954}
-,{22,0}
-,{303013910,221184}
-,{20,0}
-,{20,0}
-,{9238,0}
-,{24598,301989888}
-,{22,0}
-,{24598,0}
-,{0,0}
-,{0,0}
-,{0,0}
-,{0,0}
-,{0,0}
-,{0,0}
-},{
-{-15,-9,-13,-38}
-,{-83,-109,-90,-68}
-,{-99,-101,-67,-61}
-,{-64,-60,-38,-19}
-,{-28,-57,-77,-75}
-,{-66,-55,-51,-68}
-},{
-{31,76,9,0,0,-35,-4643}
-,{-55,-77,-69,-55,-44,-43,-12336}
-,{-56,-85,-128,99,111,-116,-28030}
-,{105,107,101,101,106,111,31615}
-},{-102,-88,-94,-113,-126,101,73,70} 
-/*fin_reglage*/
-
-},{
-
-/*debut reglage 4 */
-{31,76,9,0},
-{0
-,-14
-,-31
-,-63
-,-83
-,-103
-,-122
-,127
-,1
-,99
-,13
-,112
-,-93
-,-87
-,-72
-,-80
-,-101
-,-112
-,-113
-,-121
-},{
-{22,100663296}
-,{1040629782,204800}
-,{1040834582,221184}
-,{22,0}
-,{-100450282,2}
-,{22,253952}
-,{-100458474,2}
-,{22,0}
-,{-100442090,2}
-,{-100253674,253954}
-,{22,0}
-,{303013910,221184}
-,{20,0}
-,{20,0}
-,{9238,0}
-,{24598,301989888}
-,{22,0}
-,{24598,0}
-,{0,0}
-,{0,0}
-,{0,0}
-,{0,0}
-,{0,0}
-,{0,0}
-},{
-{-15,-9,-13,-38}
-,{-83,-109,-90,-68}
-,{-99,-101,-67,-61}
-,{-64,-60,-38,-19}
-,{-28,-57,-77,-75}
-,{-66,-55,-51,-68}
-},{
-{31,76,9,0,0,-35,-4643}
-,{-55,-77,-69,-55,-44,-43,-12336}
-,{-56,-85,-128,99,111,-116,-28030}
-,{105,107,101,101,106,111,31615}
-},{-102,-88,-94,-113,-126,101,73,70} 
-/*fin_reglage*/
-
-},{
-
-/*debut reglage 5 */
-{31,76,9,0},
-{0
-,-14
-,-31
-,-63
-,-83
-,-103
-,-122
-,127
-,1
-,97
-,14
-,-80
-,-93
-,-87
-,-72
-,-80
-,-101
-,-112
-,-113
-,-121
-},{
-{22,100663296}
-,{1040629782,204800}
-,{1040834582,221184}
-,{22,0}
-,{-100450282,2}
-,{22,253952}
-,{-100458474,2}
-,{22,0}
-,{-100442090,2}
-,{-100253674,253954}
-,{22,0}
-,{303013910,221184}
-,{20,0}
-,{20,0}
-,{9238,0}
-,{24598,301989888}
-,{22,0}
-,{24598,0}
-,{0,0}
-,{0,0}
-,{0,0}
-,{0,0}
-,{0,0}
-,{0,0}
-},{
-{-15,-9,-13,-38}
-,{-83,-109,-90,-68}
-,{-99,-101,-67,-61}
-,{-64,-60,-38,-19}
-,{-28,-57,-77,-75}
-,{-66,-55,-51,-68}
-},{
-{31,76,9,0,0,-35,-4643}
-,{-55,-77,-69,-55,-44,-43,-12336}
-,{-56,-85,-128,99,111,-116,-28030}
-,{105,107,101,101,106,111,31615}
-},{-102,-88,-94,-113,-126,101,73,70} 
-/*fin_reglage*/
-
-},{0
-
-/*debut reglage 6 */
-/*fin_reglage*/
-
-},{0
-
-/*debut reglage 7 */
-/*fin_reglage*/
-
-} };
-
-/* ------------------------------------   corps  des fonctions	 ------------------------------ */
-/* -------------------------------------------------------------------------------------------- */
-
-
-
-unsigned long	val_long(char x)
-{
-unsigned long a,xl;
-a=x-2;	if(x<3)  xl=x;	else	xl=((a&1) + 2)<<(a>>1);
-return(xl);
-}
-
-
-double	val_double(char x)
-{
-unsigned long a,xl;
-if(x<0) x=-x;	a=x;	if(!a)  xl=0;	else	xl=((a&1) + 2)<<(a>>1);
-if(x>0)	return(1e-4*(double)xl);	else	return(-1e-4*(double)xl);
-}
-
-int	new_val_dac(int a,char  code)
-{
-if(code&0x80)	a=(code&0x7f) <<5 ;
-else	{
-	if(code&0x40)	a+=code&0x3f;	
-	else		a-=code&0x3f;	
-	}
-return(a);
-}
-
-
-
-
-int	calcul_somme_block(block_type_modele* blk,int longueur)
-{
-int i,so=0;;
-for(i=0;i<(longueur/4-4);i++)  so^=(int)blk->mot[i];
-/* somme sur tous les mots internes	: on exclus le dbut, les codes et la fin	*/
-return((so^(so>>16))&0xffff);
-}
-
-
-
-
-void  valide_block(block_type_modele* blk,int type,int block_num)
-{
-int somme,longueur;
-def_long_block
-longueur=long_block[type];
-/*printf("valide block adresse %x  type %d  numblock %d  longueur=%d \n" */
-/* 		,(unsigned)blk,type,block_num,longueur);*/
-blk->debut		=	debut_block_mesure;
-blk->code2		=	(((long)block_num) & 0xffffff ) | ( (((long)type)<<24)&0xff000000 );
-
-blk->mot[longueur/4-4]  =	fin_block_mesure;
-somme=calcul_somme_block(blk,longueur);
-blk->code1		=	(((long)longueur)<<16)	|	somme;
-}
-
-
-/* Quand on est sur une machine swappee, on ne cherche pas a verifier */
-/* le checksum, puisqu'on a modifie les blocs, sans swapper par exemple */
-/* les chars des noms de bolometres et des chaines GPS... */
-#ifdef __alpha
-#define SWAP
-#endif
-#if defined(Linux)  || defined(linux)
-#define SWAP
-#endif
-
-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);	
-#ifndef SWAP
-som=calcul_somme_block(blk,lg); if( som!= somme_block(blk))		return(block_somme_erreur);
-#endif
-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);
-}
-
-
-
-
-
-
-
+#include "archeops_28.c"
Index: trunk/Poubelle/archTOI.old/archeops.h
===================================================================
--- trunk/Poubelle/archTOI.old/archeops.h	(revision 319)
+++ trunk/Poubelle/archTOI.old/archeops.h	(revision 342)
@@ -1,914 +1,1 @@
-
-/*======================================================================*/
-/*                                                                      */
-/* 		 archeops.h  :	structure de données            	*/
-/*                                                                      */
-/*======================================================================*/
-
-#define		_archeops
-#define		version_num		24
-
-
-/*======================================================================*/
-/*                                                                      */
-/* 			historique des modifications            	*/
-/*                                                                      */
-/*                                                                      */
-/*  VERSION 24:                                                         */
-/*                                                                      */
-/*	- utilise le fichier archeops.c					*/
-/*	- nb_max_bolo=24  avec nb_bolo_util=18				*/
-/*	- change la structure du block dilution				*/
-/*									*/
-/*									*/
-/*									*/
-/*									*/
-/*======================================================================*/
-
-
-/*======================================================================*/
-/*  ---------------  parametres generaux de definition   -------------  */
-/*======================================================================*/
-
-#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_sync			6	/*  nombre de signaux de synchro			*/
-#define	nb_element_catalog	256	/* nombre d'éléments catalog par reponse enregistreur	*/
-
-
-#ifdef	transmet_data_brute
-#define		taille_maxi_block_archeops	sizeof(block_type_data_brute)
-#else					/* 	le plus gros des différents blocks de télémesure*/
-#define		taille_maxi_block_archeops	sizeof(block_type_bolo)
-#endif
-
-#define		nombre_de_regul		4
-#define		nombre_de_voies		6
-#define 	nb_type_blocks		20	/*  nombre de type de blocks (multiple de 4)	*/
-
-
-/*======================================================================*/
-/*  -------     codes  de  controle  pour  la  transmission    -----    */
-/*=======================   télécommande      ==========================*/
-/*======================================================================*/
-
-
-/*   --------------   codes de reconnaissance des paquets de télécommande	--------------   */   
-
-#define		debut_telecommande		0x23456789
-#define		fin_telecommande		0x98765432
-
-/*   ------------ codes de direction des commandes envoyées a l'EPLD Archeops	--------------   */   
-
-#define 	tc_dir_transputer		1
-#define 	tc_dir_reset_epld		3
-
-/*  -------------  codes  des  prefix des  telecommandes traités le transputer	--------------   */
-
-#define		tc_horloge			255	/* (-1)	*/
-#define		tc_cadence1			128
-#define		tc_cadence2			129
-#define		tc_cadence3			130
-#define		tc_regul			251	/* (-5)	*/
-#define		tc_switch_dil			250
-#define		tc_dac_dil			249
-
-/*======================================================================*/
-/*	telecommande reduite  sur 18 bit				*/
-/*======================================================================*/
-
-/*______________________________________________________________________________________________*/
-/*	1er mot	:	code de debut de telecommande reduite					*/
-#define		tc_reduite			248	
-/*______________________________________________________________________________________________*/
-/*	2eme mot:	4bit:	16 codes  de direction  tc2					*/
-enum{tc2_reset_epld,tc2_bolo_dacV,tc2_bolo_dacI,tc2_bolo_dacT
-	,tc2_bolo_dacL,tc2_bolo_gain,tc2_bolo_voie,tc2_horloge
-	,tc2_regul,tc2_auto_bolo,tc2_auto_dilu,tc2_dilution};			/* 11 codes: reste 5 disponibles*/
-
-
-/*______________________________________________________________________________________________*/
-/*	3eme mot:	6bit:									*/
-
-/*	code2=dac-gain-voie  	:	numero de bolo						*/
-
-/*	code2=tc2_horloge	:								*/
-/*		soit un code defini								*/
-/*		soit le code tc3_vitesse+i avec i=0.. nb_type_block				*/
-enum{tc3_periode,tc3_nb_mesures,tc3_temp_mort,tc3_flag,tc3_vitesse};
-#define	tc3_suite	tc3_vitesse+nb_type_block
-
-
-/*	code2=tc2_regul	:									*/
-
-
-/*	code2=tc2_auto_bolo	:						*/
-
-
-/*	code2=tc2_auto_dilu	:						*/
-/* 	les valeurs des parametres d'auto_dilu ne depassent pas 128 		*/
-
-
-/*	code2=tc2_dilution	:						*/
-
-
-/*______________________________________________________________________________*/
-/*	4eme mot:	8bit:	valeur a ecrire			*/		
-
-
-/*======================================================================*/
-/*  -------     codes  de  controle  pour  la  transmission    -----    */
-/*=========================   télémesure    ============================*/
-/*======================================================================*/
-
-/*   -------   codes de reconnaissance des paquets de télémesure        */   
-
-#define		debut_block_mesure		((int4)0x45627491)
-#define		fin_block_mesure		((int4)0x83260432)
-
-
-
-
-
-/*======================================================================*/
-/*  ------------------------------------------------------------------  */
-/*  ---------  	Les  formats  des  blocks  type   ARCHEOPS   	-------	*/
-/*  ------------------------------------------------------------------  */
-/*======================================================================*/
-
-
-
-/*==============================================================================================*/
-
-/*	Le tableau est lut dans le desordre par le mac en lecture de la carte pci :		*/
-
-/*	Les entiers long sont ecrits tels quels							*/
-/*	Les short sont ecrits permuté 2 a 2 par le tansputer					*/
-/*	Les tables char sont ecrits permuté 4 / 4 par le transputer				*/
-/*	A la lecture dans le mac, tout est bon							*/
-
-
-/*  ---------  	 structures N° 0 :   parametres de mesure des bolometres        -------------	*/
-/*  -----------------------------------------------------------------------------------------	*/
-
-typedef struct	
-	{
-	char		bolo_nom[32];		/*  le nom de chaque bolometre			*/
-	int4		bolo_code_util;		/*  le code d'utilisation du bolo		*/
-	int4		bolo_bebo;		/*  le type d'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		*/
-	int4	  	coef[7];		/*  les coef pour le calcul de la température	*/
-	}
-	param_un_bolo;
-/* code_util des bolos  */
-enum{bolo_hors_service,bolo_normal_transmis,bolo_normal_non_transmis,bolo_thermo_simplifie};
-
-	
-typedef struct		/*  		table des parametres de mesure bolometre 		*/
-			/*	cette table ne change pas (en principe) en cours de mesure	*/
-	{
-	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];
-	}
-	param_bolo;
-	
-	
-	
-	
-/*	
-	long		bolo_code_util[nb_max_bolo];	
-	char		bolo_nom[nb_max_bolo][32];	
-
-	long		bolo_bebo[nb_max_bolo];		
-	long		bolo_num[nb_max_bolo];		
-	long		bolo_gain[nb_max_bolo];		
-
-	long		bolo_capa[nb_max_bolo];		
-	long 		bolo_diviseur[nb_max_bolo];	
-	
-	long	  	coef[nb_max_bolo][7];		
-
-	long		presence_bebo;			
-	}
-	param_bolo;
-*/
-
-typedef struct				/*	La structure de transfert transputer vers mac	*/  
-	{
-	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		*/
-
-	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			*/
-
-	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 = param.bolo_gain[bolo]*gain_ampli(reglage.bolo[bolo])				*/
-		
-
-/* gains 0 .. 15 pour MLPA  ///   gain 16..19  pour BEBO   ///   gain 20..22  pour BEDIF	*/		
-#define	def_gains	double gains_reels[32]={1,2,4,8,10,20,40,80,100,200,400,800,1000,2000,4000,8000,0.5,2.5,10,50,0.93,3.777,18.974};
-		/*			gain bediff    10->9.3    40->37.77     200->189.74		*/
-
-
-/*  les definitions suivantes s'appliquent a une variable de type    reglage.bolo[bol]		*/
-#define		gainbrut(aa)	((char)(((aa).mot1&0x1f)))		
-#define		gain_ampli(aa)	gains_reels[gainbrut(aa)]		
-#define		phase(aa)	((char)(((aa).mot1&0x60)>>5))		
-#define		comm(aa)	((char)(((aa).mot1&0x80)>>7))		
-#define		dac_V(aa)	((int)(((aa).mot1&0xfff00)>>8)	)	
-#define		dac_I(aa)	((int)(((aa).mot1&0xfff00000)>>20))		
-
-#define		voie(aa)	((char)(((aa).mot2&0xff)))		
-#define		dac_T(aa)	((int)(((aa).mot2&0xfff00)>>8))		
-#define		dac_L(aa)	((int)(((aa).mot2&0xfff00000)>>20))		
-
-/*
-#define		bolo_mot1(dacV,dacI,gainbrut,phase,comm)	((gainbrut)&0x1f) | (((phase)&3)<<5) | (((comm)&1)<<7) | (((dacV)&0xfff)<<8) | (((dacI)&0xfff)<<20) 
-#define		bolo_mot2(dacT,dacL,voie)			((voie)&0xff) 	  | (((dacT)&0xfff)<<8) | (((dacL)&0xfff)<<20)
-*/
-
-#define		bolo_mot1(dacV,dacI,gainbrut,phase,comm)	(((long)(gainbrut))&0x1f) | ((((long)(phase))&3)<<5) | ((((long)(comm))&1)<<7) | ((((long)(dacV))&0xfff)<<8) | ((((long)(dacI))&0xfff)<<20) 
-#define		bolo_mot2(dacT,dacL,voie)			(((long)(voie))&0xff) 	  | ((((long)(dacT))&0xfff)<<8) | ((((long)(dacL))&0xfff)<<20)
-
-
-typedef struct	
-	{
-	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 long			*/
-
-typedef struct
-	{
-	char	mode;
-	char	gain;
-	char	courant;
-	char	delai;
-	}
-	auto_bolo;			/*  longueur 1 entiers long			*/
-
-typedef struct
-	{
-	char	vanne;
-	char	helium;
-	char	chauffage;
-	char	piles;
-	char	transmission;
-	char	temps_max_vanne;
-	char	xx7;
-	char	xx8;
-	}
-	auto_dilu;			/*  longueur 1 entiers long		*/
-
-
-
-#else		/***********  structure swappée pour le transputer   ****************/
-
-typedef struct	
-	{
-	char	flag;
-	char	temp_mort;
-	char	nb_mesures;
-	char	periode;
-	}
-	horloge;
-	
-
-typedef struct
-	{
-	char	prop;			/*   zero dans prop -> chauffage=0;		*/
-	char	voie_chauf;		/*   la voie de sortie chauffage		*/
-	char	num_bolo;		/*   numero du bolo utilisé,	*/
-	char	mode;			/*   on_off et deglitch				*/
-	short	chauffage;		/* 	valeur effective du chauffage		*/	
-	char 	deriv;
-	char	integ;
-	}
-	regul_bolo;			/*  longueur 2 entiers long		*/
-
-
-typedef struct
-	{
-	char	delai;
-	char	courant;
-	char	gain;
-	char	mode;
-	}
-	auto_bolo;			/*  longueur 1 entiers long		*/
-
-typedef struct
-	{
-	char	piles;
-	char	chauffage;
-	char	helium;			/* periode de mesure		*/
-	char	vanne;		
-	char	xx8;
-	char	xx7;
-	char	temps_max_vanne;
-	char	transmission;
-	}
-	auto_dilu;			/*  longueur 1 entiers long		*/
-
-
-#endif		/***********   fin des structures swappées       ****************/
-
-enum{regul_stop,regul_chauffage_null,regul_sans_deglitch,regul_avec_deglitch};
-
-#define bit_piles_5V	1
-#define bit_piles_15V	2
-#define bit_piles_auto	4
-
-enum{vanne_rien,vanne_ferme,vanne_ouvre,vanne_auto_pression,vanne_auto_pression_piles,vanne_auto_pression_piles_temps};
-enum{trans_rien,trans_normal,trans_rapide,trans_lent};
-
-
-typedef struct							/*  long en mot de 32 bit   	*/
-	{
-	horloge			horloge;			/*			1	*/
-	char			vitesse[nb_type_blocks];	/*			5	*/
-	reglage_un_bolo		bolo[nb_max_bolo]; 		/*	18 * 2	= 	36	*/
-	auto_bolo		autom[nombre_de_voies];		/*	6  * 1		6	*/								
-	regul_bolo		regul[nombre_de_regul];		/*	4  * 2	=	8	*/									
-	auto_dilu		dilu;				/*			2	*/
-	}
-	reglage_bolo;						/*	total 58		*/
-
-
-typedef struct				  
-	{
-	int4		debut;		/*	code de reconnaissance de debut de block	*/
-	int4		code1;		/*	code1 du block					*/
-	int4		code2;		/*	code2 du block					*/
-	reglage_bolo	reglage;											
-	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		data_dil[50];	 data brutes de la dilution				*/
-	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		gyro_dil[3][nb_per_block*2];	/* les gyros a supprimer		*/
-	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		*/
-
-enum{
-/* multiplex11..18:*/	mul11_	,mul12_	,p_haut	,p_memb	,t_h1	,t_h4	,t_h3	,t_h2	
-/* multiplex21..28:*/,	mul21_	,mul22	,p_charb,p_R4	,mul25_	,p_C3	,p_R3	,mul28	
-/* multiplex31..38:*/,	mul31_	,p_C4	,p_air	,t_a3	,t_b4	,t_b1	,t_b2	,t_a2	
-/* multiplex41..48:*/,	t_b3	,d_4He	,RP_He	,mul44	,d_3He	,j_he3	,j_he7	,j_he4	
-/* multiplex51..58:*/,	j_he5	,j_he1	,j_he8	,j_he2	,j_he6	,pirani	,mul57	,mul58	
-/* multiplex61..68:*/,	p_m18B	,p_10B	,p_m18D	,mul64	,p_p18B	,p_10T	,p_Ch	,p_p18D		
-	};
-enum{t_a1,t_a4};	/* en attendant de trouver leurs places	*/
-/* reste libres :  mul  11 - 12 - 21 - 22 - 25 - 28 - 31 - 44 - 57 - 58 - 64	*/
-
-
-
-/*  ---------------------   structures N° 4 :     gps           -------------------------------	*/
-/*  -------------------------------------------------------------------------------------------	*/
-
-typedef struct				  
-	{
-	int4		debut;		/*	code de reconnaissance de debut de block	*/
-	int4		code1;		/*	code1 du block					*/
-	int4		code2;		/*	code2 du block					*/
-
-	char		gps[80];	/*      les données GPS (une chaine maxi 80 cara)	*/
-
-	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];		
-
-	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_sync][nb_per_block*2];	
-
-	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];
-	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)		*/
-	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		gyros[3][nb_per_block*2];
-	int4		magneto[3];	/*	1 bit par echantillonage soit 3*32bit>72	*/
-	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	*/
-	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					*/
-	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		*/
-	int4		data_bolo[nb_bolo_util][ (nb_per_block/2) +1 ];
-
-	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		*/
-	int4		gyro[3][ (nb_per_block/2) +1 ];
-	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		*/
-	int4		sst[nb_photo_diodes] [(nb_per_block*2/7) +1 ];
-	int4		fin;		/* 	code de reconnaissance de fin de block		*/
-	}
-	block_type_sst_comprime;			
-
-
-
-/*  ---------------------   structures N° 15 : catalog_flash      -------	*/
-/*  -------------------------------------------------------------------------------------------	*/
-
-typedef struct	  			/*	etat de l'enregistreur				*/
-	{
-	int4		nb_total_catalog;
-	int4		memoire_libre;
-	int4		nb_block_erreur;
-	}status_flash;
-
-typedef struct	  
-	{
-	int4		debut;		/*	code de reconnaissance de debut de block	*/
-	int4		code1;		/*	code1 du block					*/
-	int4		code2;		/*	code2 du block					*/
-	
-	int4		commande;	/*	la commande a laquelle ce catalog repond	*/
-	status_flash	status;		/*	etat de l'enregistreur				*/
-	int4		nombre;		/*							*/
-	int4		code[nb_element_catalog];	/* code type et numero			*/
-	int4		fin;		/* 	code de reconnaissance de fin de block		*/
-	}
-	block_type_catalog_flash;			
-
-
-/*  ---------------------   structures N° 16 :    cmd_flash		    -----------		*/
-/*  -----------------------------------------------------------------------------------------	*/
-typedef struct				  
-	{
-	int4		debut;		/*	code de reconnaissance de debut de block	*/
-	int4		code1;		/*	code1 du block					*/
-	int4		code2;		/*	code2 du block					*/
-	int4		commande;	/*	type de commande a l'enregistreur flash		*/
-	int4		fin;		/* 	code de reconnaissance de fin de block		*/
-	}
-	block_type_cmd_flash;			
-
-enum	{flash_catalog_auto,flash_catalog_debut,flash_catalog_fin,flash_catalog_precedent,flash_catalog_suivant
-		,flash_efface_tout1,flash_efface_tout2,flash_efface_tout3
-		,flash_efface_util1,flash_efface_util2,flash_efface_util3};
-
-
-/*  ---------------------   structures N° 17 : block brut de données ctb pour test      -------	*/
-/*  -------------------------------------------------------------------------------------------	*/
-typedef struct	  
-	{
-	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];
-#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					*/
-	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					*/
-	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];
-	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_catalog_flash,
-	block_cmd_flash,block_data_brute,block_18,block_19};
-
-
-#define	def_nom_block	char nom_block[nb_type_blocks][32]={"block_param","block_journal","block_reglage","block_dilution",\
-					"block_gps","block_une_periode","block_synchro_sol","block_pointage_sol",\
-					"block_bolo","block_gyro","block_sst","block_11",\
-					"block_bolo_comprime","block_gyro_comprime","block_sst_comprime","block_catalog_flash",\
-					"block_cmd_flash","block_data_brute","",""};
-
-
-#define	def_long_block	int long_block[nb_type_blocks]={sizeof(block_type_param),sizeof(block_type_journal),sizeof(block_type_reglage),sizeof(block_type_dilution),\
-					sizeof(block_type_gps),sizeof(block_type_une_periode),sizeof(block_type_synchro_sol),sizeof(block_type_pointage_sol),\
-					sizeof(block_type_bolo),sizeof(block_type_gyro),sizeof(block_type_sst),sizeof(block_type11),\
-					sizeof(block_type_bolo_comprime),sizeof(block_type_gyro_comprime),sizeof(block_type_sst_comprime),sizeof(block_type_catalog_flash),\
-					sizeof(block_type_cmd_flash),sizeof(block_type_data_brute),sizeof(block_type_18),sizeof(block_type_19)};
-
-
-
-
-
-/*   le code du block contient  8  bit de type							*/
-/*				24 bit pour le numero du block(horloge locale)			*/
-/*				12 bit pour la longueur du block  (en octet)			*/
-/*				16 bit pour la somme de test de la validité du block		*/
-
-/*  les define suivants doivent etre utilisés pour tester le type des blocks et les verifier	*/
-
-
-#define longueur_block(_bk)	( (int) ((_bk)->code1>>16) 	& 0xffff )	
-#define somme_block(_bk)	( (int)  (_bk)->code1		& 0xffff )
-
-#define type_block(_bk)		( (int) ((_bk)->code2>>24)	& 0xff )
-#define numero_block(_bk)	( (int)  (_bk)->code2		& 0xffffff )
-
-/* ce define cree le mot de controle de somme des blocks et de les verifier a la reception	*/
-
-
-/*==============================================================================================*/
-/*==============================================================================================*/
-/*  -----------------  fonctions utilitaires de gestion des blocks Archeops   ----------------  */
-/*==============================================================================================*/
-/*==============================================================================================*/
-
-
-/* -------------------------------------------------------------------------------------------- */
-/* les fonctions suivantes sont des utilitaires permettant la gestion des blocks archeops	*/
-/* il faut inclure une seule fois le header archeops.h précéde de :				*/
-/*			 #define utilitaires_de_block_archeops 					*/
-/* -------------------------------------------------------------------------------------------- */
-
-
-/* ----------------------------   prototypes des fonctions	 ------------------------------ */
-/* -------------------------------------------------------------------------------------------- */
-
-
-/* 	cette fonction calcule le code de somme pour le controle de parité des blocks		*/
-
-int	calcul_somme_block(block_type_modele* blk,int longueur);
-
-
-
-
-
-/* 	cette fonction est a apeller lors de la création d'un block apres l'avoir rempli	*/
-/*	elle permet de creer tous les mots de controle du block					*/
-
-void	valide_block(block_type_modele* blk,int type,int block_num);
-
-
-
-/* 	cette fonction est a apeller pour vérifier la validité d'un block			*/
-/*	elle retourne 0 si le block est correct et sinon, un code d'erreur			*/
-/*	la seconde fonction sort les erreurs a l'ecran						*/
-
-int	verifie_block(block_type_modele* blk);
-int	verifie_block_printf(block_type_modele* blk);
-
-enum	{block_correct,block_type_inconnu,block_longueur_erreur,block_somme_erreur
-		,block_debut_erreur,block_fin_erreur};
-
-/* 	cette fonction transforme un char (sur 8 bit) en double avec une echelle logarythmique	*/
-/*	elle est en particulier utilisée pour calculer les coef de la regul			*/
-
-double	val_double(char x);
-
-/* 	cette fonction transforme un char (sur 8 bit) en entier long (echelle logarythmique)	*/
-/*	elle est en particulier utilisée pour fixer le courant sur les bolometres		*/
-
-unsigned long	val_long(char x);
-
-int	new_val_dac(int a,char  code); 
-
-
-
+#include "archeops_28.h"
Index: trunk/Poubelle/archTOI.old/archeops_24.c
===================================================================
--- trunk/Poubelle/archTOI.old/archeops_24.c	(revision 342)
+++ trunk/Poubelle/archTOI.old/archeops_24.c	(revision 342)
@@ -0,0 +1,655 @@
+//for archediab
+//#include "manip.h"
+//for archTOI
+#include <stdio.h>
+#include "archeops.h"
+
+
+/**********  coefficients  pour  les  mesures  bolo    ********************************/
+/*                         toutes les puissances en pW                                */
+/*	-1-	loi de reponse thermique des bolos  avec R en ohms et T en Kelvin     */
+/*                                                                                    */
+/* 	T =  coef2  *   (   ln (  R / coef1) **  ( -1 / coef0 )                       */
+/*                                                                                    */
+/*	-2-	fuite thermique du bolo   coef 3,4                                    */
+/*                                                                                    */
+/*	Ptot =  coef3  *  ( (10*Tb) ** coef4    -    (10*Tcryo)  **  coef4 )          */
+/*                                                                                    */
+/*	-3-	calcul empirique de Pciel et de  tau	  coef  5,6                   */
+/*                                                                                    */
+/*	Pciel	=	coef5	- Pelec		coef5= I * Ai (tables xavier) 	      */
+/*	tau	=	- ln ( 1 +  Pciel / coef6 )	coef6= I * Bi (tables xavier) */
+/*                                                                                    */
+/**************************************************************************************/
+
+
+/**************************************************************************************/
+/*                                                                                    */
+/*   pour les MLPA      :  gain = 100   diviseur = 101  ou  330                       */
+/*   pour les bebodiff  :  gain = diviseur = 100Kohm / R preampli                     */
+/*   pour les bebodiff  :  la capa est corrigee d'un facteur 0.868                    */
+/*   pour les cartes modifiees : mettre diviseur=0                                    */
+/*                         et capa = la resistance de chage en Megohm                 */
+/*                                                                                    */
+/**************************************************************************************/
+
+
+/*  nom  ,  on/off  ,  0 = MLPA       , N° bolo ,  gain_pa  , capa*1000 , diviseur , coef*10000
+/*       ,  0 ou 1  ,  2..8 = BEBO    ,  hard   ,           ,  4700     ,  333     , 
+/*                     10 = Bediff    ,         ,           , 
+
+/* pour les bediff (code 10)  le n° de bolo est  N° de bebo*8  +  numero dans la bebo
+/*  soit :  1 2 3 4 5 6  ..  9 10 11 12 13 14 .. 17 18 19 20 21 22 .. etc
+
+
+/*debut_param*/
+/*----------------------------------  fenetre :  -----------------------------------*/
+
+param_bolo  parametr={24,24,36,88,18,
+
+{
+{ "v1-bedif1"  , 1,10,1 ,  200, 22000,  200, { 5000   , 123100 , 334200 } },		
+{ "v1-bedif2"  , 1,10,2 ,  200, 22000,  200, { 5000    , 12.31 , 33.42 		} },
+{ "v1-bedif3"  , 1,10,3 ,  200, 22000,  200, { 5000    , 50.0 , 14.0 		} },
+{ "v1-bedif4"  , 1,10,4 ,  200, 22000,  200,  { 5000    , 12.31 , 33.42 	} },
+{ "v1-bedif5"  , 1,10,5 , 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 	} },
+{ "v1-bedif6"  , 1,10,6 , 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 	} },
+
+{ "v1-bedif7"  , 1,10,9 , 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 		 } },
+{ "v1-bedif8"  , 1,10,10, 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 		 } },
+{ "v1-bedif9"  , 1,10,11, 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 		 } },
+{ "v1-bedif10" , 1,10,12, 1000, 4700, 1000,  { 5000     , 12.31 , 33.42 		 } },
+{ "v1-bedif11" , 1,10,13, 1000, 4700, 1000, { 5000     , 12.31 , 33.42 		 } },
+{ "v1-bedif12" , 1,10,14, 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 		 } },
+
+{ "v1-bedif13" , 1,10,17, 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 		 } },
+{ "v1-bedif14" , 1,10,18, 1000, 4700, 1000,  { 5000     , 12.31 , 33.42 		 } },
+{ "germanium"  , 3,10,19, 1000, 22000 ,    0,  { 5000      , 12.31 , 33.42 		 } },
+{ "therm_4k"   , 3,10,20, 1000, 1000  ,    0,  { 5000      , 12.31 , 33.42 		 } },
+{ "therm_1.6k" , 3,10,21, 1000, 1000  ,    0,  { 5000      , 12.31 , 33.42 		 } },
+{ "therm_10k"  , 3,10,22, 1000, 1000  ,    0,  { 5000     , 12.31 , 33.42 		 } },
+
+{ "v1-bedif19"  , 2,10,25 , 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 		 } },
+{ "v1-bedif20"  , 2,10,26, 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 		 } },
+{ "v1-bedif21"  , 2,10,27, 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 		 } },
+{ "v1-bedif22"  , 2,10,28, 1000, 4700, 1000,  { 5000     , 12.31 , 33.42 		 } },
+{ "v1-bedif23"  , 2,10,29, 1000, 4700, 1000,  { 5000     , 12.31 , 33.42 		 } },
+{ "v1-bedif24"  , 2,10,30, 1000, 4700, 1000,  { 5000      , 12.31 , 33.42 		 } }
+
+}
+};
+/*fin_param*/
+
+
+
+/* bolos campagne 1998-1999	*/
+/*
+reg_NbSi.J, 1, 0, 1, 100, 4.7, 333,	.5			,519.6  , 8.286
+v1-231...L, 1, 0, 2, 100, 4.7, 333, .5   , 1.7   , 32.41 , 0.333 , 10  , 20.30  ,  11.41  		
+v1-232...N, 1, 0, 3, 100, 4.7, 333,		
+v1-237...E, 1, 0, 4, 100, 4.7, 333,
+
+reg_JamieO, 1, 0, 5, 100, 4.7, 101,
+
+V2-NbSi..H, 1, 0, 6, 100, 4.7, 101, .5   ,433.8  , 9.25
+V2-230...B, 1, 0, 7, 100, 4.7, 333, .5   , 8.26  , 26.61 , 5.10  ,  7  , 9.354   ,  1.026
+V2-205...Q, 1, 0, 8, 100, 4.7, 333,	.518 , 81    , 25.2 
+V2-208...P, 1, 0, 9, 100, 4.7, 333, .5   , 12.31 , 33.42 , 0.627 , 6.5 , 8.113   ,  2.958
+
+*/
+/*bolos campagne 1997-1998	*/
+/*
+
+v1-208...J, 1, 0, 1, 100, 4.7, 333, .5   , 12.31 , 33.42 		
+v1-232...L, 1, 0, 2, 100, 4.7, 333,		
+v1-205...N, 1, 0, 3, 100, 4.7, 333,	.518 , 81    , 25.2	
+v1-NbSi..E, 1, 0, 4, 100, 4.7, 333,	.5			,519.6  , 8.286
+Jamie....O, 1, 0, 5, 100, 4.7, 101,
+V2-NbSi..H, 1, 0, 6, 100, 4.7, 101, .5   ,433.8  , 9.25
+V2-224...B, 1, 0, 7, 100, 4.7, 333, .5   ,3.43   , 26.6
+V2-230...Q, 1, 0, 8, 100, 4.7, 333, .5   , 8.26  , 26.61
+V2-231...P, 1, 0, 9, 100, 4.7, 333, .5   , 1.7   , 32.41
+
+*/
+
+
+
+
+
+/*debut_nom_reglage*/
+/* 0->aa*/
+/* 1->bb*/
+/* 2->cc*/
+/* 3->reglage 3  */
+/* 4->reglage 4  */
+/* 5->reglage 5  */
+/* 6->reglage 6  */
+/* 7->reglage 7  */
+/*fin_nom_reglage*/
+
+
+
+
+
+
+
+reglage_bolo  reglage_standard[8]={{
+
+
+/*debut reglage 0 */
+{30,76,9,1},
+{0
+,10
+,1
+,3
+,10
+,2
+,0
+,0
+,1
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+},{
+{22,100663296}
+,{-100646890,1}
+,{-100646890,1}
+,{22,0}
+,{-100638698,1}
+,{22,253952}
+,{-100646890,1}
+,{22,0}
+,{-100646890,1}
+,{-100646890,1}
+,{22,0}
+,{235388950,221185}
+,{20,0}
+,{20,0}
+,{16406,0}
+,{24598,0}
+,{22,0}
+,{24598,0}
+},{
+{1,22,0,1}
+,{0,20,0,1}
+,{0,20,0,1}
+,{0,20,0,1}
+,{0,20,0,1}
+,{0,20,0,1}
+},{
+{0,1,9,1,0,0,0}
+,{0,1,9,1,0,0,0}
+,{0,1,9,1,0,0,0}
+,{0,1,9,1,0,0,0}
+},{0,0,0,0,0,0,0,0} 
+/*fin_reglage*/
+
+},{
+
+/*debut reglage 1 */
+{30,76,9,1},
+{0
+,10
+,1
+,3
+,10
+,2
+,0
+,0
+,1
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+},{
+{22,100663296}
+,{-100646890,1}
+,{-100646890,1}
+,{22,0}
+,{-100638698,1}
+,{22,253952}
+,{-100646890,1}
+,{22,0}
+,{-100646890,1}
+,{-100646890,1}
+,{22,0}
+,{235388950,221185}
+,{20,0}
+,{20,0}
+,{16406,0}
+,{24598,0}
+,{22,0}
+,{24598,0}
+},{
+{1,22,0,1}
+,{0,20,0,1}
+,{0,20,0,1}
+,{0,20,0,1}
+,{0,20,0,1}
+,{0,20,0,1}
+},{
+{0,1,9,1,0,0,0}
+,{0,1,9,1,0,0,0}
+,{0,1,9,1,0,0,0}
+,{0,1,9,1,0,0,0}
+},{0,0,0,0,0,0,0,0} 
+/*fin_reglage*/
+
+},{
+
+/*debut reglage 2 */
+{31,76,9,0},
+{0
+,-14
+,-31
+,-63
+,-83
+,-103
+,-122
+,127
+,1
+,97
+,14
+,-32
+,-93
+,-87
+,-72
+,-80
+,-101
+,-112
+,-113
+,-121
+},{
+{22,100663296}
+,{1040629782,204800}
+,{1040834582,221184}
+,{22,0}
+,{-100450282,2}
+,{22,253952}
+,{-100458474,2}
+,{22,0}
+,{-100442090,2}
+,{-100253674,253954}
+,{22,0}
+,{303013910,221184}
+,{20,0}
+,{20,0}
+,{9238,0}
+,{24598,301989888}
+,{22,0}
+,{24598,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+},{
+{-15,-9,-13,-38}
+,{-83,-109,-90,-68}
+,{-99,-101,-67,-61}
+,{-64,-60,-38,-19}
+,{-28,-57,-77,-75}
+,{-66,-55,-51,-68}
+},{
+{31,76,9,0,0,-35,-4643}
+,{-55,-77,-69,-55,-44,-43,-12336}
+,{-56,-85,-128,99,111,-116,-28030}
+,{105,107,101,101,106,111,31615}
+},{-102,-88,-94,-113,-126,101,73,70} 
+/*fin_reglage*/
+
+},{
+
+/*debut reglage 3 */
+{31,76,9,0},
+{0
+,-14
+,-31
+,-63
+,-83
+,-103
+,-122
+,127
+,1
+,99
+,13
+,96
+,-93
+,-87
+,-72
+,-80
+,-101
+,-112
+,-113
+,-121
+},{
+{22,100663296}
+,{1040629782,204800}
+,{1040834582,221184}
+,{22,0}
+,{-100450282,2}
+,{22,253952}
+,{-100458474,2}
+,{22,0}
+,{-100442090,2}
+,{-100253674,253954}
+,{22,0}
+,{303013910,221184}
+,{20,0}
+,{20,0}
+,{9238,0}
+,{24598,301989888}
+,{22,0}
+,{24598,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+},{
+{-15,-9,-13,-38}
+,{-83,-109,-90,-68}
+,{-99,-101,-67,-61}
+,{-64,-60,-38,-19}
+,{-28,-57,-77,-75}
+,{-66,-55,-51,-68}
+},{
+{31,76,9,0,0,-35,-4643}
+,{-55,-77,-69,-55,-44,-43,-12336}
+,{-56,-85,-128,99,111,-116,-28030}
+,{105,107,101,101,106,111,31615}
+},{-102,-88,-94,-113,-126,101,73,70} 
+/*fin_reglage*/
+
+},{
+
+/*debut reglage 4 */
+{31,76,9,0},
+{0
+,-14
+,-31
+,-63
+,-83
+,-103
+,-122
+,127
+,1
+,99
+,13
+,112
+,-93
+,-87
+,-72
+,-80
+,-101
+,-112
+,-113
+,-121
+},{
+{22,100663296}
+,{1040629782,204800}
+,{1040834582,221184}
+,{22,0}
+,{-100450282,2}
+,{22,253952}
+,{-100458474,2}
+,{22,0}
+,{-100442090,2}
+,{-100253674,253954}
+,{22,0}
+,{303013910,221184}
+,{20,0}
+,{20,0}
+,{9238,0}
+,{24598,301989888}
+,{22,0}
+,{24598,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+},{
+{-15,-9,-13,-38}
+,{-83,-109,-90,-68}
+,{-99,-101,-67,-61}
+,{-64,-60,-38,-19}
+,{-28,-57,-77,-75}
+,{-66,-55,-51,-68}
+},{
+{31,76,9,0,0,-35,-4643}
+,{-55,-77,-69,-55,-44,-43,-12336}
+,{-56,-85,-128,99,111,-116,-28030}
+,{105,107,101,101,106,111,31615}
+},{-102,-88,-94,-113,-126,101,73,70} 
+/*fin_reglage*/
+
+},{
+
+/*debut reglage 5 */
+{31,76,9,0},
+{0
+,-14
+,-31
+,-63
+,-83
+,-103
+,-122
+,127
+,1
+,97
+,14
+,-80
+,-93
+,-87
+,-72
+,-80
+,-101
+,-112
+,-113
+,-121
+},{
+{22,100663296}
+,{1040629782,204800}
+,{1040834582,221184}
+,{22,0}
+,{-100450282,2}
+,{22,253952}
+,{-100458474,2}
+,{22,0}
+,{-100442090,2}
+,{-100253674,253954}
+,{22,0}
+,{303013910,221184}
+,{20,0}
+,{20,0}
+,{9238,0}
+,{24598,301989888}
+,{22,0}
+,{24598,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+,{0,0}
+},{
+{-15,-9,-13,-38}
+,{-83,-109,-90,-68}
+,{-99,-101,-67,-61}
+,{-64,-60,-38,-19}
+,{-28,-57,-77,-75}
+,{-66,-55,-51,-68}
+},{
+{31,76,9,0,0,-35,-4643}
+,{-55,-77,-69,-55,-44,-43,-12336}
+,{-56,-85,-128,99,111,-116,-28030}
+,{105,107,101,101,106,111,31615}
+},{-102,-88,-94,-113,-126,101,73,70} 
+/*fin_reglage*/
+
+},{0
+
+/*debut reglage 6 */
+/*fin_reglage*/
+
+},{0
+
+/*debut reglage 7 */
+/*fin_reglage*/
+
+} };
+
+/* ------------------------------------   corps  des fonctions	 ------------------------------ */
+/* -------------------------------------------------------------------------------------------- */
+
+
+
+unsigned long	val_long(char x)
+{
+unsigned long a,xl;
+a=x-2;	if(x<3)  xl=x;	else	xl=((a&1) + 2)<<(a>>1);
+return(xl);
+}
+
+
+double	val_double(char x)
+{
+unsigned long a,xl;
+if(x<0) x=-x;	a=x;	if(!a)  xl=0;	else	xl=((a&1) + 2)<<(a>>1);
+if(x>0)	return(1e-4*(double)xl);	else	return(-1e-4*(double)xl);
+}
+
+int	new_val_dac(int a,char  code)
+{
+if(code&0x80)	a=(code&0x7f) <<5 ;
+else	{
+	if(code&0x40)	a+=code&0x3f;	
+	else		a-=code&0x3f;	
+	}
+return(a);
+}
+
+
+
+
+int	calcul_somme_block(block_type_modele* blk,int longueur)
+{
+int i,so=0;;
+for(i=0;i<(longueur/4-4);i++)  so^=(int)blk->mot[i];
+/* somme sur tous les mots internes	: on exclus le dbut, les codes et la fin	*/
+return((so^(so>>16))&0xffff);
+}
+
+
+
+
+void  valide_block(block_type_modele* blk,int type,int block_num)
+{
+int somme,longueur;
+def_long_block
+longueur=long_block[type];
+/*printf("valide block adresse %x  type %d  numblock %d  longueur=%d \n" */
+/* 		,(unsigned)blk,type,block_num,longueur);*/
+blk->debut		=	debut_block_mesure;
+blk->code2		=	(((long)block_num) & 0xffffff ) | ( (((long)type)<<24)&0xff000000 );
+
+blk->mot[longueur/4-4]  =	fin_block_mesure;
+somme=calcul_somme_block(blk,longueur);
+blk->code1		=	(((long)longueur)<<16)	|	somme;
+}
+
+
+/* Quand on est sur une machine swappee, on ne cherche pas a verifier */
+/* le checksum, puisqu'on a modifie les blocs, sans swapper par exemple */
+/* les chars des noms de bolometres et des chaines GPS... */
+#ifdef __alpha
+#define SWAP
+#endif
+#if defined(Linux)  || defined(linux)
+#define SWAP
+#endif
+
+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);	
+#ifndef SWAP
+som=calcul_somme_block(blk,lg); if( som!= somme_block(blk))		return(block_somme_erreur);
+#endif
+return(block_correct);
+}
+
+
+int  verifie_block_printf(block_type_modele* blk)
+{
+int type,lg,som;
+def_long_block
+def_nom_block
+if(blk->debut != debut_block_mesure)
+	{
+	printf(" erreur dans le code debut de block	 \n");
+	return(block_debut_erreur);
+	}	
+
+type=type_block(blk);
+if( (type<0) || (type>nb_type_blocks) )	
+	{
+	printf(" block de type %d  inconnu\n",type);
+	return(block_type_inconnu);
+	}
+
+lg=longueur_block(blk);
+if( lg!=long_block[type] )	
+	{
+	printf(" block type %s  erreur de longueur (nominal=%d , dans le block=%d \n"
+			,nom_block[type],long_block[type],lg);
+	return(block_longueur_erreur);
+	}
+
+som=calcul_somme_block(blk,lg);
+if( som!=somme_block(blk) )	
+	{
+	printf(" block type %s   :  erreur de somme (calculee=%d , dans le block=%d \n"
+			,nom_block[type],som,somme_block(blk) );
+	return(block_somme_erreur);
+	}
+	
+if(blk->mot[(lg/4)-4]	!= fin_block_mesure)	
+	{
+	printf(" block type %s  erreur de code fin de block : trouve %x au lieu de %x \n"
+			,nom_block[type],(int)blk->mot[(lg/4)-4],fin_block_mesure);
+	return(block_fin_erreur);
+	}
+
+return(block_correct);
+}
+
+
+
+
+
+
+
Index: trunk/Poubelle/archTOI.old/archeops_24.h
===================================================================
--- trunk/Poubelle/archTOI.old/archeops_24.h	(revision 342)
+++ trunk/Poubelle/archTOI.old/archeops_24.h	(revision 342)
@@ -0,0 +1,914 @@
+
+/*======================================================================*/
+/*                                                                      */
+/* 		 archeops.h  :	structure de données            	*/
+/*                                                                      */
+/*======================================================================*/
+
+#define		_archeops
+#define		version_num		24
+
+
+/*======================================================================*/
+/*                                                                      */
+/* 			historique des modifications            	*/
+/*                                                                      */
+/*                                                                      */
+/*  VERSION 24:                                                         */
+/*                                                                      */
+/*	- utilise le fichier archeops.c					*/
+/*	- nb_max_bolo=24  avec nb_bolo_util=18				*/
+/*	- change la structure du block dilution				*/
+/*									*/
+/*									*/
+/*									*/
+/*									*/
+/*======================================================================*/
+
+
+/*======================================================================*/
+/*  ---------------  parametres generaux de definition   -------------  */
+/*======================================================================*/
+
+#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_sync			6	/*  nombre de signaux de synchro			*/
+#define	nb_element_catalog	256	/* nombre d'éléments catalog par reponse enregistreur	*/
+
+
+#ifdef	transmet_data_brute
+#define		taille_maxi_block_archeops	sizeof(block_type_data_brute)
+#else					/* 	le plus gros des différents blocks de télémesure*/
+#define		taille_maxi_block_archeops	sizeof(block_type_bolo)
+#endif
+
+#define		nombre_de_regul		4
+#define		nombre_de_voies		6
+#define 	nb_type_blocks		20	/*  nombre de type de blocks (multiple de 4)	*/
+
+
+/*======================================================================*/
+/*  -------     codes  de  controle  pour  la  transmission    -----    */
+/*=======================   télécommande      ==========================*/
+/*======================================================================*/
+
+
+/*   --------------   codes de reconnaissance des paquets de télécommande	--------------   */   
+
+#define		debut_telecommande		0x23456789
+#define		fin_telecommande		0x98765432
+
+/*   ------------ codes de direction des commandes envoyées a l'EPLD Archeops	--------------   */   
+
+#define 	tc_dir_transputer		1
+#define 	tc_dir_reset_epld		3
+
+/*  -------------  codes  des  prefix des  telecommandes traités le transputer	--------------   */
+
+#define		tc_horloge			255	/* (-1)	*/
+#define		tc_cadence1			128
+#define		tc_cadence2			129
+#define		tc_cadence3			130
+#define		tc_regul			251	/* (-5)	*/
+#define		tc_switch_dil			250
+#define		tc_dac_dil			249
+
+/*======================================================================*/
+/*	telecommande reduite  sur 18 bit				*/
+/*======================================================================*/
+
+/*______________________________________________________________________________________________*/
+/*	1er mot	:	code de debut de telecommande reduite					*/
+#define		tc_reduite			248	
+/*______________________________________________________________________________________________*/
+/*	2eme mot:	4bit:	16 codes  de direction  tc2					*/
+enum{tc2_reset_epld,tc2_bolo_dacV,tc2_bolo_dacI,tc2_bolo_dacT
+	,tc2_bolo_dacL,tc2_bolo_gain,tc2_bolo_voie,tc2_horloge
+	,tc2_regul,tc2_auto_bolo,tc2_auto_dilu,tc2_dilution};			/* 11 codes: reste 5 disponibles*/
+
+
+/*______________________________________________________________________________________________*/
+/*	3eme mot:	6bit:									*/
+
+/*	code2=dac-gain-voie  	:	numero de bolo						*/
+
+/*	code2=tc2_horloge	:								*/
+/*		soit un code defini								*/
+/*		soit le code tc3_vitesse+i avec i=0.. nb_type_block				*/
+enum{tc3_periode,tc3_nb_mesures,tc3_temp_mort,tc3_flag,tc3_vitesse};
+#define	tc3_suite	tc3_vitesse+nb_type_block
+
+
+/*	code2=tc2_regul	:									*/
+
+
+/*	code2=tc2_auto_bolo	:						*/
+
+
+/*	code2=tc2_auto_dilu	:						*/
+/* 	les valeurs des parametres d'auto_dilu ne depassent pas 128 		*/
+
+
+/*	code2=tc2_dilution	:						*/
+
+
+/*______________________________________________________________________________*/
+/*	4eme mot:	8bit:	valeur a ecrire			*/		
+
+
+/*======================================================================*/
+/*  -------     codes  de  controle  pour  la  transmission    -----    */
+/*=========================   télémesure    ============================*/
+/*======================================================================*/
+
+/*   -------   codes de reconnaissance des paquets de télémesure        */   
+
+#define		debut_block_mesure		((int4)0x45627491)
+#define		fin_block_mesure		((int4)0x83260432)
+
+
+
+
+
+/*======================================================================*/
+/*  ------------------------------------------------------------------  */
+/*  ---------  	Les  formats  des  blocks  type   ARCHEOPS   	-------	*/
+/*  ------------------------------------------------------------------  */
+/*======================================================================*/
+
+
+
+/*==============================================================================================*/
+
+/*	Le tableau est lut dans le desordre par le mac en lecture de la carte pci :		*/
+
+/*	Les entiers long sont ecrits tels quels							*/
+/*	Les short sont ecrits permuté 2 a 2 par le tansputer					*/
+/*	Les tables char sont ecrits permuté 4 / 4 par le transputer				*/
+/*	A la lecture dans le mac, tout est bon							*/
+
+
+/*  ---------  	 structures N° 0 :   parametres de mesure des bolometres        -------------	*/
+/*  -----------------------------------------------------------------------------------------	*/
+
+typedef struct	
+	{
+	char		bolo_nom[32];		/*  le nom de chaque bolometre			*/
+	int4		bolo_code_util;		/*  le code d'utilisation du bolo		*/
+	int4		bolo_bebo;		/*  le type d'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		*/
+	int4	  	coef[7];		/*  les coef pour le calcul de la température	*/
+	}
+	param_un_bolo;
+/* code_util des bolos  */
+enum{bolo_hors_service,bolo_normal_transmis,bolo_normal_non_transmis,bolo_thermo_simplifie};
+
+	
+typedef struct		/*  		table des parametres de mesure bolometre 		*/
+			/*	cette table ne change pas (en principe) en cours de mesure	*/
+	{
+	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];
+	}
+	param_bolo;
+	
+	
+	
+	
+/*	
+	long		bolo_code_util[nb_max_bolo];	
+	char		bolo_nom[nb_max_bolo][32];	
+
+	long		bolo_bebo[nb_max_bolo];		
+	long		bolo_num[nb_max_bolo];		
+	long		bolo_gain[nb_max_bolo];		
+
+	long		bolo_capa[nb_max_bolo];		
+	long 		bolo_diviseur[nb_max_bolo];	
+	
+	long	  	coef[nb_max_bolo][7];		
+
+	long		presence_bebo;			
+	}
+	param_bolo;
+*/
+
+typedef struct				/*	La structure de transfert transputer vers mac	*/  
+	{
+	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		*/
+
+	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			*/
+
+	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 = param.bolo_gain[bolo]*gain_ampli(reglage.bolo[bolo])				*/
+		
+
+/* gains 0 .. 15 pour MLPA  ///   gain 16..19  pour BEBO   ///   gain 20..22  pour BEDIF	*/		
+#define	def_gains	double gains_reels[32]={1,2,4,8,10,20,40,80,100,200,400,800,1000,2000,4000,8000,0.5,2.5,10,50,0.93,3.777,18.974};
+		/*			gain bediff    10->9.3    40->37.77     200->189.74		*/
+
+
+/*  les definitions suivantes s'appliquent a une variable de type    reglage.bolo[bol]		*/
+#define		gainbrut(aa)	((char)(((aa).mot1&0x1f)))		
+#define		gain_ampli(aa)	gains_reels[gainbrut(aa)]		
+#define		phase(aa)	((char)(((aa).mot1&0x60)>>5))		
+#define		comm(aa)	((char)(((aa).mot1&0x80)>>7))		
+#define		dac_V(aa)	((int)(((aa).mot1&0xfff00)>>8)	)	
+#define		dac_I(aa)	((int)(((aa).mot1&0xfff00000)>>20))		
+
+#define		voie(aa)	((char)(((aa).mot2&0xff)))		
+#define		dac_T(aa)	((int)(((aa).mot2&0xfff00)>>8))		
+#define		dac_L(aa)	((int)(((aa).mot2&0xfff00000)>>20))		
+
+/*
+#define		bolo_mot1(dacV,dacI,gainbrut,phase,comm)	((gainbrut)&0x1f) | (((phase)&3)<<5) | (((comm)&1)<<7) | (((dacV)&0xfff)<<8) | (((dacI)&0xfff)<<20) 
+#define		bolo_mot2(dacT,dacL,voie)			((voie)&0xff) 	  | (((dacT)&0xfff)<<8) | (((dacL)&0xfff)<<20)
+*/
+
+#define		bolo_mot1(dacV,dacI,gainbrut,phase,comm)	(((long)(gainbrut))&0x1f) | ((((long)(phase))&3)<<5) | ((((long)(comm))&1)<<7) | ((((long)(dacV))&0xfff)<<8) | ((((long)(dacI))&0xfff)<<20) 
+#define		bolo_mot2(dacT,dacL,voie)			(((long)(voie))&0xff) 	  | ((((long)(dacT))&0xfff)<<8) | ((((long)(dacL))&0xfff)<<20)
+
+
+typedef struct	
+	{
+	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 long			*/
+
+typedef struct
+	{
+	char	mode;
+	char	gain;
+	char	courant;
+	char	delai;
+	}
+	auto_bolo;			/*  longueur 1 entiers long			*/
+
+typedef struct
+	{
+	char	vanne;
+	char	helium;
+	char	chauffage;
+	char	piles;
+	char	transmission;
+	char	temps_max_vanne;
+	char	xx7;
+	char	xx8;
+	}
+	auto_dilu;			/*  longueur 1 entiers long		*/
+
+
+
+#else		/***********  structure swappée pour le transputer   ****************/
+
+typedef struct	
+	{
+	char	flag;
+	char	temp_mort;
+	char	nb_mesures;
+	char	periode;
+	}
+	horloge;
+	
+
+typedef struct
+	{
+	char	prop;			/*   zero dans prop -> chauffage=0;		*/
+	char	voie_chauf;		/*   la voie de sortie chauffage		*/
+	char	num_bolo;		/*   numero du bolo utilisé,	*/
+	char	mode;			/*   on_off et deglitch				*/
+	short	chauffage;		/* 	valeur effective du chauffage		*/	
+	char 	deriv;
+	char	integ;
+	}
+	regul_bolo;			/*  longueur 2 entiers long		*/
+
+
+typedef struct
+	{
+	char	delai;
+	char	courant;
+	char	gain;
+	char	mode;
+	}
+	auto_bolo;			/*  longueur 1 entiers long		*/
+
+typedef struct
+	{
+	char	piles;
+	char	chauffage;
+	char	helium;			/* periode de mesure		*/
+	char	vanne;		
+	char	xx8;
+	char	xx7;
+	char	temps_max_vanne;
+	char	transmission;
+	}
+	auto_dilu;			/*  longueur 1 entiers long		*/
+
+
+#endif		/***********   fin des structures swappées       ****************/
+
+enum{regul_stop,regul_chauffage_null,regul_sans_deglitch,regul_avec_deglitch};
+
+#define bit_piles_5V	1
+#define bit_piles_15V	2
+#define bit_piles_auto	4
+
+enum{vanne_rien,vanne_ferme,vanne_ouvre,vanne_auto_pression,vanne_auto_pression_piles,vanne_auto_pression_piles_temps};
+enum{trans_rien,trans_normal,trans_rapide,trans_lent};
+
+
+typedef struct							/*  long en mot de 32 bit   	*/
+	{
+	horloge			horloge;			/*			1	*/
+	char			vitesse[nb_type_blocks];	/*			5	*/
+	reglage_un_bolo		bolo[nb_max_bolo]; 		/*	18 * 2	= 	36	*/
+	auto_bolo		autom[nombre_de_voies];		/*	6  * 1		6	*/								
+	regul_bolo		regul[nombre_de_regul];		/*	4  * 2	=	8	*/									
+	auto_dilu		dilu;				/*			2	*/
+	}
+	reglage_bolo;						/*	total 58		*/
+
+
+typedef struct				  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+	reglage_bolo	reglage;											
+	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		data_dil[50];	 data brutes de la dilution				*/
+	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		gyro_dil[3][nb_per_block*2];	/* les gyros a supprimer		*/
+	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		*/
+
+enum{
+/* multiplex11..18:*/	mul11_	,mul12_	,p_haut	,p_memb	,t_h1	,t_h4	,t_h3	,t_h2	
+/* multiplex21..28:*/,	mul21_	,mul22	,p_charb,p_R4	,mul25_	,p_C3	,p_R3	,mul28	
+/* multiplex31..38:*/,	mul31_	,p_C4	,p_air	,t_a3	,t_b4	,t_b1	,t_b2	,t_a2	
+/* multiplex41..48:*/,	t_b3	,d_4He	,RP_He	,mul44	,d_3He	,j_he3	,j_he7	,j_he4	
+/* multiplex51..58:*/,	j_he5	,j_he1	,j_he8	,j_he2	,j_he6	,pirani	,mul57	,mul58	
+/* multiplex61..68:*/,	p_m18B	,p_10B	,p_m18D	,mul64	,p_p18B	,p_10T	,p_Ch	,p_p18D		
+	};
+enum{t_a1,t_a4};	/* en attendant de trouver leurs places	*/
+/* reste libres :  mul  11 - 12 - 21 - 22 - 25 - 28 - 31 - 44 - 57 - 58 - 64	*/
+
+
+
+/*  ---------------------   structures N° 4 :     gps           -------------------------------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+
+typedef struct				  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+
+	char		gps[80];	/*      les données GPS (une chaine maxi 80 cara)	*/
+
+	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];		
+
+	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_sync][nb_per_block*2];	
+
+	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];
+	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)		*/
+	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		gyros[3][nb_per_block*2];
+	int4		magneto[3];	/*	1 bit par echantillonage soit 3*32bit>72	*/
+	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	*/
+	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					*/
+	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		*/
+	int4		data_bolo[nb_bolo_util][ (nb_per_block/2) +1 ];
+
+	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		*/
+	int4		gyro[3][ (nb_per_block/2) +1 ];
+	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		*/
+	int4		sst[nb_photo_diodes] [(nb_per_block*2/7) +1 ];
+	int4		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_sst_comprime;			
+
+
+
+/*  ---------------------   structures N° 15 : catalog_flash      -------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+
+typedef struct	  			/*	etat de l'enregistreur				*/
+	{
+	int4		nb_total_catalog;
+	int4		memoire_libre;
+	int4		nb_block_erreur;
+	}status_flash;
+
+typedef struct	  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+	
+	int4		commande;	/*	la commande a laquelle ce catalog repond	*/
+	status_flash	status;		/*	etat de l'enregistreur				*/
+	int4		nombre;		/*							*/
+	int4		code[nb_element_catalog];	/* code type et numero			*/
+	int4		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_catalog_flash;			
+
+
+/*  ---------------------   structures N° 16 :    cmd_flash		    -----------		*/
+/*  -----------------------------------------------------------------------------------------	*/
+typedef struct				  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+	int4		commande;	/*	type de commande a l'enregistreur flash		*/
+	int4		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_cmd_flash;			
+
+enum	{flash_catalog_auto,flash_catalog_debut,flash_catalog_fin,flash_catalog_precedent,flash_catalog_suivant
+		,flash_efface_tout1,flash_efface_tout2,flash_efface_tout3
+		,flash_efface_util1,flash_efface_util2,flash_efface_util3};
+
+
+/*  ---------------------   structures N° 17 : block brut de données ctb pour test      -------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+typedef struct	  
+	{
+	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];
+#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					*/
+	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					*/
+	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];
+	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_catalog_flash,
+	block_cmd_flash,block_data_brute,block_18,block_19};
+
+
+#define	def_nom_block	char nom_block[nb_type_blocks][32]={"block_param","block_journal","block_reglage","block_dilution",\
+					"block_gps","block_une_periode","block_synchro_sol","block_pointage_sol",\
+					"block_bolo","block_gyro","block_sst","block_11",\
+					"block_bolo_comprime","block_gyro_comprime","block_sst_comprime","block_catalog_flash",\
+					"block_cmd_flash","block_data_brute","",""};
+
+
+#define	def_long_block	int long_block[nb_type_blocks]={sizeof(block_type_param),sizeof(block_type_journal),sizeof(block_type_reglage),sizeof(block_type_dilution),\
+					sizeof(block_type_gps),sizeof(block_type_une_periode),sizeof(block_type_synchro_sol),sizeof(block_type_pointage_sol),\
+					sizeof(block_type_bolo),sizeof(block_type_gyro),sizeof(block_type_sst),sizeof(block_type11),\
+					sizeof(block_type_bolo_comprime),sizeof(block_type_gyro_comprime),sizeof(block_type_sst_comprime),sizeof(block_type_catalog_flash),\
+					sizeof(block_type_cmd_flash),sizeof(block_type_data_brute),sizeof(block_type_18),sizeof(block_type_19)};
+
+
+
+
+
+/*   le code du block contient  8  bit de type							*/
+/*				24 bit pour le numero du block(horloge locale)			*/
+/*				12 bit pour la longueur du block  (en octet)			*/
+/*				16 bit pour la somme de test de la validité du block		*/
+
+/*  les define suivants doivent etre utilisés pour tester le type des blocks et les verifier	*/
+
+
+#define longueur_block(_bk)	( (int) ((_bk)->code1>>16) 	& 0xffff )	
+#define somme_block(_bk)	( (int)  (_bk)->code1		& 0xffff )
+
+#define type_block(_bk)		( (int) ((_bk)->code2>>24)	& 0xff )
+#define numero_block(_bk)	( (int)  (_bk)->code2		& 0xffffff )
+
+/* ce define cree le mot de controle de somme des blocks et de les verifier a la reception	*/
+
+
+/*==============================================================================================*/
+/*==============================================================================================*/
+/*  -----------------  fonctions utilitaires de gestion des blocks Archeops   ----------------  */
+/*==============================================================================================*/
+/*==============================================================================================*/
+
+
+/* -------------------------------------------------------------------------------------------- */
+/* les fonctions suivantes sont des utilitaires permettant la gestion des blocks archeops	*/
+/* il faut inclure une seule fois le header archeops.h précéde de :				*/
+/*			 #define utilitaires_de_block_archeops 					*/
+/* -------------------------------------------------------------------------------------------- */
+
+
+/* ----------------------------   prototypes des fonctions	 ------------------------------ */
+/* -------------------------------------------------------------------------------------------- */
+
+
+/* 	cette fonction calcule le code de somme pour le controle de parité des blocks		*/
+
+int	calcul_somme_block(block_type_modele* blk,int longueur);
+
+
+
+
+
+/* 	cette fonction est a apeller lors de la création d'un block apres l'avoir rempli	*/
+/*	elle permet de creer tous les mots de controle du block					*/
+
+void	valide_block(block_type_modele* blk,int type,int block_num);
+
+
+
+/* 	cette fonction est a apeller pour vérifier la validité d'un block			*/
+/*	elle retourne 0 si le block est correct et sinon, un code d'erreur			*/
+/*	la seconde fonction sort les erreurs a l'ecran						*/
+
+int	verifie_block(block_type_modele* blk);
+int	verifie_block_printf(block_type_modele* blk);
+
+enum	{block_correct,block_type_inconnu,block_longueur_erreur,block_somme_erreur
+		,block_debut_erreur,block_fin_erreur};
+
+/* 	cette fonction transforme un char (sur 8 bit) en double avec une echelle logarythmique	*/
+/*	elle est en particulier utilisée pour calculer les coef de la regul			*/
+
+double	val_double(char x);
+
+/* 	cette fonction transforme un char (sur 8 bit) en entier long (echelle logarythmique)	*/
+/*	elle est en particulier utilisée pour fixer le courant sur les bolometres		*/
+
+unsigned long	val_long(char x);
+
+int	new_val_dac(int a,char  code); 
+
+
+
Index: trunk/Poubelle/archTOI.old/archeops_25.c
===================================================================
--- trunk/Poubelle/archTOI.old/archeops_25.c	(revision 342)
+++ trunk/Poubelle/archTOI.old/archeops_25.c	(revision 342)
@@ -0,0 +1,1329 @@
+//for archediab
+//#include "manip.h"
+//for archTOI
+#include <stdio.h>
+#include "archeops.h"
+
+
+
+/**********  coefficients  pour  les  mesures  bolo    ********************************/
+/*                         toutes les puissances en pW                                */
+/*	-1-	loi de reponse thermique des bolos  avec R en ohms et T en Kelvin     */
+/*                                                                                    */
+/* 	T =  coef2  *   (   ln (  R / coef1) **  ( -1 / coef0 )                       */
+/*                                                                                    */
+/*	-2-	fuite thermique du bolo   coef 3,4                                    */
+/*                                                                                    */
+/*	Ptot =  coef3  *  ( (10*Tb) ** coef4    -    (10*Tcryo)  **  coef4 )          */
+/*                                                                                    */
+/*	-3-	calcul empirique de Pciel et de  tau	  coef  5,6                   */
+/*                                                                                    */
+/*	Pciel	=	coef5	- Pelec		coef5= I * Ai (tables xavier) 	      */
+/*	tau	=	- ln ( 1 +  Pciel / coef6 )	coef6= I * Bi (tables xavier) */
+/*                                                                                    */
+/**************************************************************************************/
+
+
+/**************************************************************************************/
+/*                                                                                    */
+/*   pour les MLPA      :  gain = 100   diviseur = 101  ou  330                       */
+/*   pour les bebodiff  :  gain = diviseur = 100Kohm / R preampli                     */
+/*   pour les bebodiff  :  la capa est corrigee d'un facteur 0.868                    */
+/*   pour les cartes modifiees : mettre diviseur=0                                    */
+/*                         et capa = la resistance de chage en Megohm                 */
+/*                                                                                    */
+/**************************************************************************************/
+
+
+/*  nom  ,  on/off  ,  0 = MLPA       , N° bolo ,  gain_pa  , capa*1000 , diviseur , coef*10000 */
+/*       ,  0 ou 1  ,  2..8 = BEBO    ,  hard   ,           ,  4700     ,  333     , 		*/
+/*                     10 = Bediff    ,         ,           , 					*/
+
+/* pour les bediff (code 10)  le n° de bolo est  N° de bebo*8  +  numero dans la bebo		*/
+/*  soit :  1 2 3 4 5 6  ..  9 10 11 12 13 14 .. 17 18 19 20 21 22 .. etc			*/
+
+
+/*debut_param*/
+/*----------------------------------  fenetre :  -----------------------------------*/
+
+param_bolo  parametr={25,24,36,88,18,
+
+{ 
+{ "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} },
+
+}
+};
+/*fin_param*/
+
+
+
+/* bolos campagne 1998-1999	*/
+/*
+reg_NbSi.J, 1, 0, 1, 100, 4.7, 333,	.5			,519.6  , 8.286
+v1-231...L, 1, 0, 2, 100, 4.7, 333, .5   , 1.7   , 32.41 , 0.333 , 10  , 20.30  ,  11.41  		
+v1-232...N, 1, 0, 3, 100, 4.7, 333,		
+v1-237...E, 1, 0, 4, 100, 4.7, 333,
+
+reg_JamieO, 1, 0, 5, 100, 4.7, 101,
+
+V2-NbSi..H, 1, 0, 6, 100, 4.7, 101, .5   ,433.8  , 9.25
+V2-230...B, 1, 0, 7, 100, 4.7, 333, .5   , 8.26  , 26.61 , 5.10  ,  7  , 9.354   ,  1.026
+V2-205...Q, 1, 0, 8, 100, 4.7, 333,	.518 , 81    , 25.2 
+V2-208...P, 1, 0, 9, 100, 4.7, 333, .5   , 12.31 , 33.42 , 0.627 , 6.5 , 8.113   ,  2.958
+
+*/
+/*bolos campagne 1997-1998	*/
+/*
+
+v1-208...J, 1, 0, 1, 100, 4.7, 333, .5   , 12.31 , 33.42 		
+v1-232...L, 1, 0, 2, 100, 4.7, 333,		
+v1-205...N, 1, 0, 3, 100, 4.7, 333,	.518 , 81    , 25.2	
+v1-NbSi..E, 1, 0, 4, 100, 4.7, 333,	.5			,519.6  , 8.286
+Jamie....O, 1, 0, 5, 100, 4.7, 101,
+V2-NbSi..H, 1, 0, 6, 100, 4.7, 101, .5   ,433.8  , 9.25
+V2-224...B, 1, 0, 7, 100, 4.7, 333, .5   ,3.43   , 26.6
+V2-230...Q, 1, 0, 8, 100, 4.7, 333, .5   , 8.26  , 26.61
+V2-231...P, 1, 0, 9, 100, 4.7, 333, .5   , 1.7   , 32.41
+
+*/
+
+
+
+
+
+/*debut_nom_reglage*/
+/* 0->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},
+{0
+,10
+,1
+,1
+,10
+,1
+,1
+,0
+,0
+,0
+,0
+,0
+,1
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+},{
+{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},
+{1
+,1
+,10
+,0
+,0
+,1
+,1
+,10
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,1
+,0
+,0
+,0
+,0
+},{
+{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},
+{0
+,10
+,1
+,1
+,10
+,1
+,0
+,0
+,1
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+},{
+{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},
+{1
+,1
+,10
+,0
+,0
+,0
+,1
+,10
+,0
+,0
+,0
+,1
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+},{
+{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
+,255
+,254
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,83
+,92
+,94
+,98
+,65
+,53
+,53
+,36
+},{
+{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
+,254
+,255
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,98
+,94
+,92
+,83
+,36
+,53
+,53
+,65
+},{
+{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},
+{0
+,10
+,1
+,1
+,10
+,1
+,0
+,0
+,0
+,0
+,0
+,0
+,1
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+},{
+{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},
+{1
+,1
+,10
+,0
+,0
+,0
+,1
+,10
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,1
+,0
+,0
+,0
+,0
+},{
+{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},
+{0
+,10
+,1
+,1
+,10
+,1
+,1
+,0
+,0
+,0
+,0
+,0
+,1
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+},{
+{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},
+{1
+,1
+,10
+,0
+,0
+,1
+,1
+,10
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,1
+,0
+,0
+,0
+,0
+},{
+{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
+,255
+,254
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,83
+,92
+,94
+,98
+,65
+,53
+,53
+,36
+},{
+{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
+,254
+,255
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,98
+,94
+,92
+,83
+,36
+,53
+,53
+,65
+},{
+{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
+,255
+,254
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,83
+,92
+,94
+,98
+,65
+,53
+,53
+,36
+},{
+{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
+,254
+,255
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,98
+,94
+,92
+,83
+,36
+,53
+,53
+,65
+},{
+{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
+,255
+,254
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,83
+,92
+,94
+,98
+,65
+,53
+,53
+,36
+},{
+{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
+,254
+,255
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,0
+,98
+,94
+,92
+,83
+,36
+,53
+,53
+,65
+},{
+{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;
+}
+
+
+/* Quand on est sur une machine swappee, on ne cherche pas a verifier */
+/* le checksum, puisqu'on a modifie les blocs, sans swapper par exemple */
+/* les chars des noms de bolometres et des chaines GPS... */
+#ifdef __alpha
+#define SWAP
+#endif
+#if defined(Linux)  || defined(linux)
+#define SWAP
+#endif
+
+
+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);	
+#ifndef SWAP
+som=calcul_somme_block(blk,lg); if( som!= somme_block(blk))		return(block_somme_erreur);
+#endif
+return(block_correct);
+}
+
+
+int  verifie_block_printf(block_type_modele* blk)
+{
+int type,lg,som;
+def_long_block
+def_nom_block
+if(blk->debut != debut_block_mesure)
+	{
+	printf(" erreur dans le code debut de block	 \n");
+	return(block_debut_erreur);
+	}	
+
+type=type_block(blk);
+if( (type<0) || (type>nb_type_blocks) )	
+	{
+	printf(" block de type %d  inconnu\n",type);
+	return(block_type_inconnu);
+	}
+
+lg=longueur_block(blk);
+if( lg!=long_block[type] )	
+	{
+	printf(" block type %s  erreur de longueur (nominal=%d , dans le block=%d \n"
+			,nom_block[type],long_block[type],lg);
+	return(block_longueur_erreur);
+	}
+
+som=calcul_somme_block(blk,lg);
+if( som!=somme_block(blk) )	
+	{
+	printf(" block type %s   :  erreur de somme (calculee=%d , dans le block=%d \n"
+			,nom_block[type],som,somme_block(blk) );
+	return(block_somme_erreur);
+	}
+	
+if(blk->mot[(lg/4)-4]	!= fin_block_mesure)	
+	{
+	printf(" block type %s  erreur de code fin de block : trouve %x au lieu de %x \n"
+			,nom_block[type],(int)blk->mot[(lg/4)-4],fin_block_mesure);
+	return(block_fin_erreur);
+	}
+
+return(block_correct);
+}
+
+
+
+
+
Index: trunk/Poubelle/archTOI.old/archeops_25.h
===================================================================
--- trunk/Poubelle/archTOI.old/archeops_25.h	(revision 342)
+++ trunk/Poubelle/archTOI.old/archeops_25.h	(revision 342)
@@ -0,0 +1,924 @@
+
+/*======================================================================*/
+/*                                                                      */
+/* 		 archeops.h  :	structure de données            	*/
+/*                                                                      */
+/*======================================================================*/
+
+#define		_archeops
+#define		version_num		25
+
+
+/*======================================================================*/
+/*                                                                      */
+/* 			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		*/
+/*									*/
+/*									*/
+/*======================================================================*/
+
+
+/*======================================================================*/
+/*  ---------------  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_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)	*/
+
+
+/*======================================================================*/
+/*  -------     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		((int4)0x45627491)
+#define		fin_block_mesure		((int4)0x83260432)
+
+
+
+
+
+/*======================================================================*/
+/*  ------------------------------------------------------------------  */
+/*  ---------  	Les  formats  des  blocks  type   ARCHEOPS   	-------	*/
+/*  ------------------------------------------------------------------  */
+/*======================================================================*/
+
+
+
+/*==============================================================================================*/
+
+/*	Le tableau est lut dans le desordre par le mac en lecture de la carte pci :		*/
+
+/*	Les entiers long sont ecrits tels quels							*/
+/*	Les short sont ecrits permuté 2 a 2 par le tansputer					*/
+/*	Les tables char sont ecrits permuté 4 / 4 par le transputer				*/
+/*	A la lecture dans le mac, tout est bon							*/
+
+
+/*  ---------  	 structures N° 0 :   parametres de mesure des bolometres        -------------	*/
+/*  -----------------------------------------------------------------------------------------	*/
+
+typedef struct	
+	{
+	char		bolo_nom[32];		/*  le nom de chaque bolometre			*/
+	int4		bolo_code_util;		/*  le code d'utilisation du bolo		*/
+	int4		bolo_bebo;		/*  le type d'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		*/
+	int4	  	coef[7];		/*  les coef pour le calcul de la température	*/
+	}
+	param_un_bolo;
+/* code_util des bolos  */
+enum{bolo_hors_service,bolo_normal_transmis,bolo_normal_non_transmis,bolo_thermo_simplifie};
+
+	
+typedef struct		/*  		table des parametres de mesure bolometre 		*/
+			/*	cette table ne change pas (en principe) en cours de mesure	*/
+	{
+	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];
+	}
+	param_bolo;
+	
+	
+	
+	
+/*	
+	long		bolo_code_util[nb_max_bolo];	
+	char		bolo_nom[nb_max_bolo][32];	
+
+	long		bolo_bebo[nb_max_bolo];		
+	long		bolo_num[nb_max_bolo];		
+	long		bolo_gain[nb_max_bolo];		
+
+	long		bolo_capa[nb_max_bolo];		
+	long 		bolo_diviseur[nb_max_bolo];	
+	
+	long	  	coef[nb_max_bolo][7];		
+
+	long		presence_bebo;			
+	}
+	param_bolo;
+*/
+
+typedef struct				/*	La structure de transfert transputer vers mac	*/  
+	{
+	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		*/
+
+	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			*/
+
+	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 long			*/
+
+typedef struct
+	{
+	char	mode;
+	char	gain;
+	char	courant;
+	char	delai;
+	}
+	auto_bolo;			/*  longueur 1 entiers long			*/
+
+typedef struct
+	{
+	char	vanne;
+	char	helium;
+	char	chauffage;
+	char	piles;
+	char	transmission;
+	char	temps_max_vanne;
+	char	xx7;
+	char	xx8;
+	}
+	auto_dilu;			/*  longueur 1 entiers long		*/
+
+
+
+#else		/***********  structure swappée pour le transputer   ****************/
+
+typedef struct	
+	{
+	char	flag;
+	char	temp_mort;
+	char	nb_mesures;
+	char	periode;
+	}
+	horloge;
+	
+
+typedef struct
+	{
+	char	prop;			/*   zero dans prop -> chauffage=0;		*/
+	char	voie_chauf;		/*   la voie de sortie chauffage		*/
+	char	num_bolo;		/*   numero du bolo utilisé,	*/
+	char	mode;			/*   on_off et deglitch				*/
+	short	chauffage;		/* 	valeur effective du chauffage		*/	
+	char 	deriv;
+	char	integ;
+	}
+	regul_bolo;			/*  longueur 2 entiers long		*/
+
+
+typedef struct
+	{
+	char	delai;
+	char	courant;
+	char	gain;
+	char	mode;
+	}
+	auto_bolo;			/*  longueur 1 entiers long		*/
+
+typedef struct
+	{
+	char	piles;
+	char	chauffage;
+	char	helium;			/* periode de mesure		*/
+	char	vanne;		
+	char	xx8;
+	char	xx7;
+	char	temps_max_vanne;
+	char	transmission;
+	}
+	auto_dilu;			/*  longueur 1 entiers long		*/
+
+
+#endif		/***********   fin des structures swappées       ****************/
+
+enum{regul_stop,regul_chauffage_null,regul_sans_deglitch,regul_avec_deglitch};
+
+#define bit_piles_5V	1
+#define bit_piles_15V	2
+#define bit_piles_auto	4
+
+enum{vanne_zero,vanne_rien,vanne_ferme,vanne_ouvre,vanne_auto_pression,vanne_auto_pression_piles,vanne_auto_pression_piles_temps};
+enum{trans_zero,trans_rien,trans_normal,trans_rapide,trans_lent};
+enum{helium_zero,helium_continu,helium_40s,helium_400s};
+
+
+typedef struct							/*  long en mot de 32 bit   	*/
+	{
+	horloge			horloge;			/*			1	*/
+	char			vitesse[nb_type_blocks];	/*			5	*/
+	reglage_un_bolo		bolo[nb_max_bolo]; 		/*	18 * 2	= 	36	*/
+	auto_bolo		autom[nombre_de_voies];		/*	6  * 1		6	*/								
+	regul_bolo		regul[nombre_de_regul];		/*	4  * 2	=	8	*/									
+	auto_dilu		dilu;				/*			2	*/
+	}
+	reglage_bolo;						/*	total 58		*/
+
+
+typedef struct				  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+	reglage_bolo	reglage;											
+	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				*/
+	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	*/
+
+
+
+/*  ---------------------   structures N° 4 :     gps           -------------------------------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+
+typedef struct				  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+
+	char		gps[80];	/*      les données GPS (une chaine maxi 80 cara)	*/
+
+	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];		
+
+	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];	
+
+	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];
+	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)		*/
+	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		gyros[3][nb_per_block*2];
+	int4		magneto[3];	/*	1 bit par echantillonage soit 3*32bit>72	*/
+	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	*/
+	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					*/
+	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 ];
+
+	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 ];
+	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 ];
+	int4		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_sst_comprime;			
+
+
+
+/*  ---------------------   structures N° 15 : catalog_flash      -------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+
+typedef struct	  			/*	etat de l'enregistreur				*/
+	{
+	int4		nb_total_catalog;
+	int4		memoire_libre;
+	int4		nb_block_erreur;
+	}status_flash;
+
+typedef struct	  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+	
+	int4		commande;	/*	la commande a laquelle ce catalog repond	*/
+	status_flash	status;		/*	etat de l'enregistreur				*/
+	int4		nombre;		/*							*/
+	int4		code[nb_element_catalog];	/* code type et numero			*/
+	int4		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_catalog_flash;			
+
+
+/*  ---------------------   structures N° 16 :    cmd_flash		    -----------		*/
+/*  -----------------------------------------------------------------------------------------	*/
+typedef struct				  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+	int4		commande;	/*	type de commande a l'enregistreur flash		*/
+	int4		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_cmd_flash;			
+
+enum	{flash_catalog_auto,flash_catalog_debut,flash_catalog_fin,flash_catalog_precedent,flash_catalog_suivant
+		,flash_efface_tout1,flash_efface_tout2,flash_efface_tout3
+		,flash_efface_util1,flash_efface_util2,flash_efface_util3};
+
+
+/*  ---------------------   structures N° 17 : block brut de données ctb pour test      -------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+typedef struct	  
+	{
+	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];
+#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					*/
+	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					*/
+	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];
+	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_catalog_flash,
+	block_cmd_flash,block_data_brute,block_18,block_19};
+
+
+#define	def_nom_block	char nom_block[nb_type_blocks][32]={"block_param","block_journal","block_reglage","block_dilution",\
+					"block_gps","block_une_periode","block_synchro_sol","block_pointage_sol",\
+					"block_bolo","block_gyro","block_sst","block_11",\
+					"block_bolo_comprime","block_gyro_comprime","block_sst_comprime","block_catalog_flash",\
+					"block_cmd_flash","block_data_brute","",""};
+
+
+#define	def_long_block	int long_block[nb_type_blocks]={sizeof(block_type_param),sizeof(block_type_journal),sizeof(block_type_reglage),sizeof(block_type_dilution),\
+					sizeof(block_type_gps),sizeof(block_type_une_periode),sizeof(block_type_synchro_sol),sizeof(block_type_pointage_sol),\
+					sizeof(block_type_bolo),sizeof(block_type_gyro),sizeof(block_type_sst),sizeof(block_type11),\
+					sizeof(block_type_bolo_comprime),sizeof(block_type_gyro_comprime),sizeof(block_type_sst_comprime),sizeof(block_type_catalog_flash),\
+					sizeof(block_type_cmd_flash),sizeof(block_type_data_brute),sizeof(block_type_18),sizeof(block_type_19)};
+
+
+
+
+
+/*   le code du block contient  8  bit de type							*/
+/*				24 bit pour le numero du block(horloge locale)			*/
+/*				12 bit pour la longueur du block  (en octet)			*/
+/*				16 bit pour la somme de test de la validité du block		*/
+
+/*  les define suivants doivent etre utilisés pour tester le type des blocks et les verifier	*/
+
+
+#define longueur_block(_bk)	( (int) ((_bk)->code1>>16) 	& 0xffff )	
+#define somme_block(_bk)	( (int)  (_bk)->code1		& 0xffff )
+
+#define type_block(_bk)		( (int) ((_bk)->code2>>24)	& 0xff )
+#define numero_block(_bk)	( (int)  (_bk)->code2		& 0xffffff )
+
+/* ce define cree le mot de controle de somme des blocks et de les verifier a la reception	*/
+
+
+/*==============================================================================================*/
+/*==============================================================================================*/
+/*  -----------------  fonctions utilitaires de gestion des blocks Archeops   ----------------  */
+/*==============================================================================================*/
+/*==============================================================================================*/
+
+
+/* -------------------------------------------------------------------------------------------- */
+/* les fonctions suivantes sont des utilitaires permettant la gestion des blocks archeops	*/
+/* il faut inclure une seule fois le header archeops.h précéde de :				*/
+/*			 #define utilitaires_de_block_archeops 					*/
+/* -------------------------------------------------------------------------------------------- */
+
+
+/* ----------------------------   prototypes des fonctions	 ------------------------------ */
+/* -------------------------------------------------------------------------------------------- */
+
+
+/* 	cette fonction calcule le code de somme pour le controle de parité des blocks		*/
+
+int	calcul_somme_block(block_type_modele* blk,int longueur);
+
+
+
+
+
+/* 	cette fonction est a apeller lors de la création d'un block apres l'avoir rempli	*/
+/*	elle permet de creer tous les mots de controle du block					*/
+
+void	valide_block(block_type_modele* blk,int type,int block_num);
+
+
+
+/* 	cette fonction est a apeller pour vérifier la validité d'un block			*/
+/*	elle retourne 0 si le block est correct et sinon, un code d'erreur			*/
+/*	la seconde fonction sort les erreurs a l'ecran						*/
+
+int	verifie_block(block_type_modele* blk);
+int	verifie_block_printf(block_type_modele* blk);
+
+enum	{block_correct,block_type_inconnu,block_longueur_erreur,block_somme_erreur
+		,block_debut_erreur,block_fin_erreur};
+
+/* 	cette fonction transforme un char (sur 8 bit) en double avec une echelle logarythmique	*/
+/*	elle est en particulier utilisée pour calculer les coef de la regul			*/
+
+double	val_double(char x);
+
+/* 	cette fonction transforme un char (sur 8 bit) en entier long (echelle logarythmique)	*/
+/*	elle est en particulier utilisée pour fixer le courant sur les bolometres		*/
+
+unsigned long	val_long(char x);
+
+int	new_val_dac(int a,char  code); 
+
+
Index: trunk/Poubelle/archTOI.old/archeops_26.c
===================================================================
--- trunk/Poubelle/archTOI.old/archeops_26.c	(revision 342)
+++ trunk/Poubelle/archTOI.old/archeops_26.c	(revision 342)
@@ -0,0 +1,1084 @@
+//for archediab
+//#include "manip.h"
+//for archTOI
+#include <stdio.h>
+#include "archeops.h"
+
+
+
+/**********  coefficients  pour  les  mesures  bolo    ********************************/
+/*                         toutes les puissances en pW                                */
+/*	-1-	loi de reponse thermique des bolos  avec R en ohms et T en Kelvin     */
+/*                                                                                    */
+/* 	T =  coef2  *   (   ln (  R / coef1) **  ( -1 / coef0 )                       */
+/*                                                                                    */
+/*	-2-	fuite thermique du bolo   coef 3,4                                    */
+/*                                                                                    */
+/*	Ptot =  coef3  *  ( (10*Tb) ** coef4    -    (10*Tcryo)  **  coef4 )          */
+/*                                                                                    */
+/*	-3-	calcul empirique de Pciel et de  tau	  coef  5,6                   */
+/*                                                                                    */
+/*	Pciel	=	coef5	- Pelec		coef5= I * Ai (tables xavier) 	      */
+/*	tau	=	- ln ( 1 +  Pciel / coef6 )	coef6= I * Bi (tables xavier) */
+/*                                                                                    */
+/**************************************************************************************/
+
+
+/**************************************************************************************/
+/*                                                                                    */
+/*   pour les MLPA      :  gain = 100   diviseur = 101  ou  330                       */
+/*   pour les bebodiff  :  gain = diviseur = 100Kohm / R preampli                     */
+/*   pour les bebodiff  :  la capa est corrigee d'un facteur 0.868                    */
+/*   pour les cartes modifiees : mettre diviseur=0                                    */
+/*                         et capa = la resistance de chage en Megohm                 */
+/*                                                                                    */
+/**************************************************************************************/
+
+
+/*  nom  ,  on/off  ,  0 = MLPA       , N° bolo ,  gain_pa  , capa*1000 , diviseur , coef*10000 */
+/*       ,  0 ou 1  ,  2..8 = BEBO    ,  hard   ,           ,  4700     ,  333     , 		*/
+/*                     10 = Bediff    ,         ,           , 					*/
+
+/* pour les bediff (code 10)  le n° de bolo est  N° de bebo*8  +  numero dans la bebo		*/
+/*  soit :  1 2 3 4 5 6  ..  9 10 11 12 13 14 .. 17 18 19 20 21 22 .. etc			*/
+
+
+/*debut_param*/
+/*----------------------------------  fenetre :  -----------------------------------*/
+
+param_bolo  parametr={26,24,36,88,18,
+
+{ 
+{ 1  , 0,10,1 ,  200, 22000	,  200 },		
+{ 2  , 1,10,2 ,  200, 22000	,  200 },
+{ 3  , 1,10,3 ,  200, 22000	,  200 },
+{ 4  , 0,10,4 ,  200, 22000	,  200 },
+
+{ 5  , 1,10,5 , 1000, 4700	, 1000 },
+{ 6  , 0,10,6 , 1000, 4700	, 1000 },
+{ 7  , 1,10,9 , 1000, 4700	, 1000 },
+{ 8  , 0,10,10, 1000, 4700	, 1000 },
+
+{ 9  , 1,10,11, 1000, 4700	, 1000 },
+{ 10 , 1,10,12, 1000, 4700	, 1000 },
+{ 11 , 1,10,13, 1000, 4700	, 1000 },
+{ 12 , 1,10,14, 1000, 4700	, 1000 },
+
+{ 13	, 1,10,17, 1000, 4700	, 1000 },
+{ 14	, 1,10,18, 1000, 4700	, 1000 },
+{ 15  	, 1,10,19, 1000, 4700	, 1000 },
+{ 16	, 1,10,20, 1000, 4700	, 1000 },
+
+{ 17	, 1,10,21, 500, 22000	,  500 },
+{ 18	, 1,10,22, 500, 22000	,  500 },
+{ 19	, 1,10,25, 500, 22000  	,  500 },
+{ 20	, 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 },
+{ 0	, 3,10,30, 1000, 1000	,    0 },
+
+},
+{ 
+{ "therm_10k"	, {12000  ,1804000 ,  72800,0,0,0,0} },
+{ "v1-bedif1"  , { 5000  , 123100 , 334200,0,0,0,0}  },		
+{ "v1-bedif2"  , { 5000  , 123100 , 334200,0,0,0,0}  },
+{ "v1-bedif3"  , { 5000  , 123100 , 334200,0,0,0,0}  },
+{ "v1-bedif4"  , { 5000  , 123100 , 334200,0,0,0,0}  },
+
+{ "v1-bedif5"  , { 5000  , 123100 , 334200,0,0,0,0}  },
+{ "v1-bedif6"  , { 5000  , 123100 , 334200,0,0,0,0} },
+{ "v1-bedif7"  , { 5000  , 123100 , 334200,0,0,0,0} },
+{ "v1-bedif8"  , { 5000  , 123100 , 334200,0,0,0,0} },
+
+{ "v1-bedif9"  , { 5000  , 123100 , 334200,0,0,0,0} },
+{ "v1-bedif10" , { 5000  , 123100 , 334200,0,0,0,0} },
+{ "v1-bedif11" , { 5000  , 123100 , 334200,0,0,0,0} },
+{ "v1-bedif12" , { 5000  , 123100 , 334200,0,0,0,0} },
+
+{ "v1-bedif13"	, { 5000  , 123100 , 334200,0,0,0,0} },
+{ "v1-bedif14"	, { 5000  , 123100 , 334200,0,0,0,0} },
+{ "bedif15"  	, {  500  ,  58800 ,  12500,0,0,0,0} },
+{ "bedif16"	, { 5000  , 123100 , 334200,0,0,0,0} },
+
+{ "bedif17"	, { 5000  , 123100 , 334200,0,0,0,0} },
+{ "bedif18"	, { 5000  , 123100 , 334200,0,0,0,0} },
+{ "v1-bedif19"	, { 5000  , 123100 , 334200,0,0,0,0} },
+{ "v1-bedif20"	, { 5000  , 123100 , 334200,0,0,0,0} },
+
+{ "germanium"	, { 3500  ,  17100 , 646500,0,0,0,0} },
+{ "therm_4k"	, {12000  ,1804000 ,  72800,0,0,0,0} },
+{ "therm_1.6k"	, {12000  ,1804000 ,  72800,0,0,0,0} },
+
+}
+
+};
+/*fin_param*/
+
+
+
+/* bolos campagne 1998-1999	*/
+/*
+reg_NbSi.J, 1, 0, 1, 100, 4.7, 333,	.5			,519.6  , 8.286
+v1-231...L, 1, 0, 2, 100, 4.7, 333, .5   , 1.7   , 32.41 , 0.333 , 10  , 20.30  ,  11.41  		
+v1-232...N, 1, 0, 3, 100, 4.7, 333,		
+v1-237...E, 1, 0, 4, 100, 4.7, 333,
+
+reg_JamieO, 1, 0, 5, 100, 4.7, 101,
+
+V2-NbSi..H, 1, 0, 6, 100, 4.7, 101, .5   ,433.8  , 9.25
+V2-230...B, 1, 0, 7, 100, 4.7, 333, .5   , 8.26  , 26.61 , 5.10  ,  7  , 9.354   ,  1.026
+V2-205...Q, 1, 0, 8, 100, 4.7, 333,	.518 , 81    , 25.2 
+V2-208...P, 1, 0, 9, 100, 4.7, 333, .5   , 12.31 , 33.42 , 0.627 , 6.5 , 8.113   ,  2.958
+
+*/
+/*bolos campagne 1997-1998	*/
+/*
+
+v1-208...J, 1, 0, 1, 100, 4.7, 333, .5   , 12.31 , 33.42 		
+v1-232...L, 1, 0, 2, 100, 4.7, 333,		
+v1-205...N, 1, 0, 3, 100, 4.7, 333,	.518 , 81    , 25.2	
+v1-NbSi..E, 1, 0, 4, 100, 4.7, 333,	.5			,519.6  , 8.286
+Jamie....O, 1, 0, 5, 100, 4.7, 101,
+V2-NbSi..H, 1, 0, 6, 100, 4.7, 101, .5   ,433.8  , 9.25
+V2-224...B, 1, 0, 7, 100, 4.7, 333, .5   ,3.43   , 26.6
+V2-230...Q, 1, 0, 8, 100, 4.7, 333, .5   , 8.26  , 26.61
+V2-231...P, 1, 0, 9, 100, 4.7, 333, .5   , 1.7   , 32.41
+
+*/
+
+
+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 int4	val_long(char x)
+{
+unsigned int4 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;
+}
+
+/* Quand on est sur une machine swappee, on ne cherche pas a verifier */
+/* le checksum, puisqu'on a modifie les blocs, sans swapper par exemple */
+/* les chars des noms de bolometres et des chaines GPS... */
+#ifdef __alpha
+#define SWAP
+#endif
+#if defined(Linux)  || defined(linux)
+#define SWAP
+#endif
+
+
+
+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);	
+#ifndef SWAP
+som=calcul_somme_block(blk,lg); if( som!= somme_block(blk))		return(block_somme_erreur);
+#endif
+return(block_correct);
+}
+
+
+int  verifie_block_printf(block_type_modele* blk)
+{
+int type,lg,som;
+def_long_block
+def_nom_block
+if(blk->debut != debut_block_mesure)
+	{
+	printf(" erreur dans le code debut de block	 \n");
+	return(block_debut_erreur);
+	}	
+
+type=type_block(blk);
+if( (type<0) || (type>nb_type_blocks) )	
+	{
+	printf(" block de type %d  inconnu\n",type);
+	return(block_type_inconnu);
+	}
+
+lg=longueur_block(blk);
+if( lg!=long_block[type] )	
+	{
+	printf(" block type %s  erreur de longueur (nominal=%d , dans le block=%d \n"
+			,nom_block[type],long_block[type],lg);
+	return(block_longueur_erreur);
+	}
+
+som=calcul_somme_block(blk,lg);
+if( som!=somme_block(blk) )	
+	{
+	printf(" block type %s   :  erreur de somme (calculee=%d , dans le block=%d \n"
+			,nom_block[type],som,somme_block(blk) );
+	return(block_somme_erreur);
+	}
+	
+if(blk->mot[(lg/4)-4]	!= fin_block_mesure)	
+	{
+	printf(" block type %s  erreur de code fin de block : trouve %x au lieu de %x \n"
+			,nom_block[type],(int)blk->mot[(lg/4)-4],fin_block_mesure);
+	return(block_fin_erreur);
+	}
+
+return(block_correct);
+}
+
+
+
+
+
+
+
Index: trunk/Poubelle/archTOI.old/archeops_26.h
===================================================================
--- trunk/Poubelle/archTOI.old/archeops_26.h	(revision 342)
+++ trunk/Poubelle/archTOI.old/archeops_26.h	(revision 342)
@@ -0,0 +1,967 @@
+
+/*======================================================================*/
+/*                                                                      */
+/* 		 archeops.h  :	structure de données            	*/
+/*                                                                      */
+/*======================================================================*/
+
+#define		_archeops
+#define		version_num		26
+
+
+/*======================================================================*/
+/*                                                                      */
+/* 			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			*/
+/*									*/
+/*======================================================================*/
+
+
+/*======================================================================*/
+/*  ---------------  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		*/
+
+	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			*/
+
+	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;											
+	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				*/
+	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           -------------------------------	*/
+/*  -------------------------------------------------------------------------------------------	*/
+
+typedef struct				  
+	{
+	int4		debut;		/*	code de reconnaissance de debut de block	*/
+	int4		code1;		/*	code1 du block					*/
+	int4		code2;		/*	code2 du block					*/
+
+	char		gps[80];	/*      les données GPS (une chaine maxi 80 cara)	*/
+
+	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];		
+
+	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];	
+
+	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];
+	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)		*/
+	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	*/
+	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	*/
+	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					*/
+	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 ];
+
+	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 ];
+	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 ];
+	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 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 */
+
+  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];
+#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					*/
+	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					*/
+	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];
+	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: trunk/Poubelle/archTOI.old/archeops_27.c
===================================================================
--- trunk/Poubelle/archTOI.old/archeops_27.c	(revision 342)
+++ trunk/Poubelle/archTOI.old/archeops_27.c	(revision 342)
@@ -0,0 +1,1108 @@
+//for archediab
+//#include "manip.h"
+//for archTOI
+#include <stdio.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 int4	val_long(char x)
+{
+unsigned int4 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: trunk/Poubelle/archTOI.old/archeops_27.h
===================================================================
--- trunk/Poubelle/archTOI.old/archeops_27.h	(revision 342)
+++ trunk/Poubelle/archTOI.old/archeops_27.h	(revision 342)
@@ -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: trunk/Poubelle/archTOI.old/archeops_28.c
===================================================================
--- trunk/Poubelle/archTOI.old/archeops_28.c	(revision 342)
+++ trunk/Poubelle/archTOI.old/archeops_28.c	(revision 342)
@@ -0,0 +1,1107 @@
+//for archediab
+//#include "manip.h"
+//for archTOI
+#include <stdio.h>
+#include "archeops.h"
+
+/* sauve vol trapani 2eme config de vol   */
+
+/**********  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, ils permettent de convertir	            */
+/* R vers T		( c(6) est un offset sur la mesure de R par rapport  aux mesures 4 fils)*/
+/*   llR= log(log(R - c(6))-c(0))  						                                */
+/*    T	= exp(c(1) + c(2)* llR + c(3)* llR* llR + c(4)* llR* llR* llR +                 */
+/*            c(5)* llR* llR* llR* llR)                                                 */
+/*										                                                */
+/*	version vol Trapani									                                */
+/*	on corrige le biais de temperature coef2=1.1 old,  coef3=old/1.1^coef4	            */
+/*										                                                */
+/*										                                                */
+/*										                                                */
+/*										                                                */
+/*										                                                */
+/****************************************************************************************/
+
+
+/**************************************************************************************/
+/*                                                                                    */
+/*   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 :  -----------------------------------*/
+
+/* ------------------------ configuration de vol 5 juillet 99-----------------------------*/
+param_bolo  parametr={28,24,36,88,18,
+
+{ 
+{ 11 	, 2,10, 1 , 200, 22000	,  200 },	/*	1	*/
+{  9	, 1,10, 2 , 200, 22000	,  200 },
+{  8 	, 1,10, 3 , 200, 22000	,  200 },
+{ 14 	, 2,10, 4 , 200, 22000	,  200 },
+
+{  5	, 1,10, 5 ,1000,  4700	, 1000 },	/*	5	*/
+{  0 	, 2,10, 6 ,1000,  4700	, 1000 },
+{ 10	, 1,10, 9 ,1000,  4700	, 1000 },
+{  0 	, 2,10,10, 1000,  4700	, 1000 },
+
+{  2 	, 1,10,11, 1000,  4700	, 1000 },	/*	9	*/
+{  4	, 1,10,12, 1000,  4700	, 1000 },
+{  7 	, 2,10,13, 1000,  4700	, 1000 },
+{  1 	, 1,10,14, 1000,  4700	, 1000 },
+
+{ 13	, 1,10,17, 1000,  4700	, 1000 },	/*	13	*/
+{  3	, 1,10,18, 1000,  4700	, 1000 },
+{ 12    	, 1,10,19, 1000,  4700	, 1000 },
+{  6	, 1,10,20, 1000,  4700	, 1000 },
+
+{ 15	, 1,10,21,  200, 22000	,  200 },	/*	17	*/
+{ 16	, 1,10,22,  200, 22000	,  200 },
+{ 17	, 1,10,25,  500, 22000  ,  500 },
+{ 18	, 2,10,26,  500, 22000  ,  500 },
+
+{ 20	, 3,10,27, 1000, 22000	,    0 },	/*	21	*/
+{ 21	, 3,10,28, 1000,  1000	,    0 },
+{ 22	, 3,10,29, 1000,  1000	,    0 },
+{ 23	, 3,10,30, 1000,  1000	,    0 },
+
+},
+{ 
+{ "Niente   "    , { 5000  ,  0 , 0,   0,0,0,0} },			/*	0	*/
+{ "ch1-bolo1"  , { 5000  ,  600000 , 154000,  63039, 25000, 0, 0}  },		/*	1	*/	
+{ "ch1-bolo2"  , { 5000  ,  600000 , 154000,  47279, 25000, 0, 0}  },
+{ "ch1-bolo3"  , { 5000  ,  600000 , 154000,  51219, 25000, 0, 0}  },
+{ "ch2-bolo4"  , { 5000  ,  600000 , 154000,  70919, 25000, 0, 0}  },
+{ "ch2-bolo5"  , { 5000  ,  600000 , 154000,  78799, 25000, 0, 0}  },	
+{ "ch3-bolo6"  , { 5000  ,  600000 , 154000,  86678, 25000, 0, 0}  },
+
+{ "Dum100mK1"  , { 5000  ,  588000 , 125000,  0,0,0,0} },			        /*	7	*/
+{ "Dum100mK2"  , { 5000  ,  588000 , 125000,  0,0,0,0} },
+/*{ "Dum100mK3"  , { 5000  , 1361800 , 125000,  0,0,0,0} },		*/
+{ "Dum100mK4"  , { 5000  , 1361800 , 125000,  0,0,0,0} },		            /* 9 */
+/*{ "Dum100mK5"  , { 5000  , 1361800 , 125000,  0,0,0,0} },		*/
+{ "Dum100mK6"  , { 5000  , 1361800 , 125000,  0,0,0,0} },		
+
+{ "Lou100mK1"  , { 5000  , 5680000 , 560000,  0,0,0,0} },                   /* 11 */
+{ "Lou100mK2"  , { 5000  , 5680000 , 560000,  0,0,0,0} },
+{ "Lou100mK3"  , { 5000  , 5680000 , 560000,  0,0,0,0} },
+{ "Lou100mK4"  , { 5000  , 5680000 , 560000,  0,0,0,0} },
+
+{ "Lou1.6K5 "  , { 5000  ,  0 , 0,   0,0,0,0} },        					/*	15	*/
+{ "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} },  							/*	19	*/
+
+/* La germanium doit toujours etre en premier par rapport aux autres thermos absolus */
+{ "germanium"  , {     0 ,  30719 ,   -910 , -16389 , 2927 ,   0,      0} }, /*	20	*/
+{ "therm_4k"   , { 45000 ,  28907 , -16028 ,  -1327 , 1472 , 872,  52500} },
+{ "therm_1.6k" , { 45000 ,  28907 , -16028 ,  -1327 , 1472 , 872, 566700} },
+{ "therm_10k"  , { 45000 ,  28907 , -16028 ,  -1327 , 1472 , 872, 138100} },
+
+}
+
+};
+/*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, 1, 0, 0, 1, 0, 1,2500, 0, 0, 0, 0},
+
+/* 1*/	{ 0,10,10, 1, 10, 3, 0, 0, 0, 1, 0, 0, 1, 0, 4,2500, 0, 0, 0, 0},
+
+/* 2*/	{ 0,10,05,01, 10,06, 0, 0, 0, 1, 0, 0, 1, 0, 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, 1, 0, 0, 1, 0, 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->1 - demarrage par defaut - Nominal*/
+/* 1->2 - idem*/
+/* 2->3 - faible courant*/
+/* 3->4 - fort courant*/
+/* 4->5 - non fffdéfini*/
+/* 5->6 - non défini*/
+/* 6->7 - non défini*/
+/* 7->8 - non défini*/
+/*fin_nom_reglage*/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+reglage_bolo  reglage_standard[8]={{
+
+
+/*debut reglage 0 */
+#ifdef programme
+{32,76,8,1},{
+{20,0}
+,{1311522837,256000}
+,{1048576021,256004}
+,{20,0}
+,{1048576021,256001}
+,{20,0}
+,{262144021,128003}
+,{20,0}
+,{262144021,128001}
+,{262144021,128001}
+,{20,0}
+,{1048576021,256257}
+,{1048576021,256003}
+,{262144021,128001}
+,{262144789,128001}
+,{262144021,128001}
+,{100663317,256002}
+,{100716053,155650}
+,{1048576277,256003}
+,{20,0}
+,{1024021,0}
+,{262165,0}
+,{65557,0}
+,{1024020,0}
+},{
+{1,21,16,4}
+,{1,21,13,4}
+,{1,21,20,4}
+,{1,21,20,4}
+,{0,21,0,4}
+,{0,21,0,4}
+},{
+{3,1,21,24,21,24,0}
+,{0,1,9,1,0,0,0}
+,{0,1,9,1,0,0,0}
+,{6,1,9,34,30,0,65326}
+},{5,3,129,108,0,126,104,88} 
+#else
+{1,8,76,32},{
+{20,0}
+,{1311522837,256000}
+,{1048576021,256004}
+,{20,0}
+,{1048576021,256001}
+,{20,0}
+,{262144021,128003}
+,{20,0}
+,{262144021,128001}
+,{262144021,128001}
+,{20,0}
+,{1048576021,256257}
+,{1048576021,256003}
+,{262144021,128001}
+,{262144789,128001}
+,{262144021,128001}
+,{100663317,256002}
+,{100716053,155650}
+,{1048576277,256003}
+,{20,0}
+,{1024021,0}
+,{262165,0}
+,{65557,0}
+,{1024020,0}
+},{
+{4,16,21,1}
+,{4,13,21,1}
+,{4,20,21,1}
+,{4,20,21,1}
+,{4,0,21,0}
+,{4,0,21,0}
+},{
+{24,21,1,3,0,24,21}
+,{1,9,1,0,0,0,0}
+,{1,9,1,0,0,0,0}
+,{34,9,1,6,65326,0,30}
+},{108,129,3,5,88,104,126,0} 
+#endif
+/*fin_reglage*/
+
+
+},{
+
+/*debut reglage 1 */
+#ifdef programme
+{32,76,8,1},{
+{20,0}
+,{1311522837,256000}
+,{1048576021,256004}
+,{20,0}
+,{1048576021,256001}
+,{20,0}
+,{262144021,128003}
+,{20,0}
+,{262144021,128001}
+,{262144021,128001}
+,{20,0}
+,{1048576021,256257}
+,{1048576021,256003}
+,{262144021,128001}
+,{262144789,128001}
+,{262144021,128001}
+,{100663317,256002}
+,{100716053,155650}
+,{1048576277,256003}
+,{20,0}
+,{1024021,0}
+,{262165,0}
+,{65557,0}
+,{1024020,0}
+},{
+{1,21,16,4}
+,{1,21,13,4}
+,{1,21,20,4}
+,{1,21,20,4}
+,{0,21,0,4}
+,{0,21,0,4}
+},{
+{3,1,21,24,21,24,0}
+,{0,1,9,1,0,0,0}
+,{0,1,9,1,0,0,0}
+,{6,1,9,34,30,0,65326}
+},{5,3,129,108,0,126,104,88} 
+#else
+{1,8,76,32},{
+{20,0}
+,{1311522837,256000}
+,{1048576021,256004}
+,{20,0}
+,{1048576021,256001}
+,{20,0}
+,{262144021,128003}
+,{20,0}
+,{262144021,128001}
+,{262144021,128001}
+,{20,0}
+,{1048576021,256257}
+,{1048576021,256003}
+,{262144021,128001}
+,{262144789,128001}
+,{262144021,128001}
+,{100663317,256002}
+,{100716053,155650}
+,{1048576277,256003}
+,{20,0}
+,{1024021,0}
+,{262165,0}
+,{65557,0}
+,{1024020,0}
+},{
+{4,16,21,1}
+,{4,13,21,1}
+,{4,20,21,1}
+,{4,20,21,1}
+,{4,0,21,0}
+,{4,0,21,0}
+},{
+{24,21,1,3,0,24,21}
+,{1,9,1,0,0,0,0}
+,{1,9,1,0,0,0,0}
+,{34,9,1,6,65326,0,30}
+},{108,129,3,5,88,104,126,0} 
+#endif
+/*fin_reglage*/
+
+},{
+
+/*debut reglage 2 */
+#ifdef programme
+{32,76,8,1},{
+{20,0}
+,{100721941,256000}
+,{1048607509,256004}
+,{20,0}
+,{1048586773,256003}
+,{20,0}
+,{50335509,128001}
+,{20,0}
+,{50331669,128001}
+,{50336789,128001}
+,{20,0}
+,{1048622101,256259}
+,{1048635413,256003}
+,{50331669,128001}
+,{50352661,128001}
+,{50337813,128001}
+,{100665109,256002}
+,{100664597,155650}
+,{1048600341,256003}
+,{20,0}
+,{1024021,0}
+,{65557,0}
+,{65557,0}
+,{262165,0}
+},{
+{1,21,11,4}
+,{1,21,13,4}
+,{1,21,20,4}
+,{1,21,20,4}
+,{0,20,0,1}
+,{0,20,0,1}
+},{
+{3,1,21,24,21,24,0}
+,{0,1,9,1,0,0,0}
+,{0,1,9,1,0,0,0}
+,{6,17,0,34,30,0,65386}
+},{5,3,129,108,0,126,104,88} 
+#else
+{1,8,76,32},{
+{20,0}
+,{100721941,256000}
+,{1048607509,256004}
+,{20,0}
+,{1048586773,256003}
+,{20,0}
+,{50335509,128001}
+,{20,0}
+,{50331669,128001}
+,{50336789,128001}
+,{20,0}
+,{1048622101,256259}
+,{1048635413,256003}
+,{50331669,128001}
+,{50352661,128001}
+,{50337813,128001}
+,{100665109,256002}
+,{100664597,155650}
+,{1048600341,256003}
+,{20,0}
+,{1024021,0}
+,{65557,0}
+,{65557,0}
+,{262165,0}
+},{
+{4,11,21,1}
+,{4,13,21,1}
+,{4,20,21,1}
+,{4,20,21,1}
+,{1,0,20,0}
+,{1,0,20,0}
+},{
+{24,21,1,3,0,24,21}
+,{1,9,1,0,0,0,0}
+,{1,9,1,0,0,0,0}
+,{34,0,17,6,65386,0,30}
+},{108,129,3,5,88,104,126,0} 
+#endif
+/*fin_reglage*/
+
+},{
+
+/*debut reglage 3 */
+#ifdef programme
+{32,76,8,1},{
+{20,0}
+,{100721941,256000}
+,{1048607509,256004}
+,{20,0}
+,{1048586773,256003}
+,{20,0}
+,{524291861,128001}
+,{20,0}
+,{524288021,128001}
+,{524293141,128001}
+,{20,0}
+,{1048622101,256259}
+,{1048635413,256003}
+,{524288021,128001}
+,{524309013,128001}
+,{524294165,128001}
+,{100665109,256002}
+,{100664597,155650}
+,{1048600341,256003}
+,{20,0}
+,{1024021,0}
+,{65557,0}
+,{65557,0}
+,{65557,0}
+},{
+{1,21,18,4}
+,{1,21,13,4}
+,{1,21,20,4}
+,{1,21,20,4}
+,{0,20,0,1}
+,{0,20,0,1}
+},{
+{3,1,21,24,21,24,0}
+,{0,1,9,1,0,0,0}
+,{0,1,9,1,0,0,0}
+,{6,17,0,34,30,0,65386}
+},{5,3,129,108,0,126,104,88} 
+#else
+{1,8,76,32},{
+{20,0}
+,{100721941,256000}
+,{1048607509,256004}
+,{20,0}
+,{1048586773,256003}
+,{20,0}
+,{524291861,128001}
+,{20,0}
+,{524288021,128001}
+,{524293141,128001}
+,{20,0}
+,{1048622101,256259}
+,{1048635413,256003}
+,{524288021,128001}
+,{524309013,128001}
+,{524294165,128001}
+,{100665109,256002}
+,{100664597,155650}
+,{1048600341,256003}
+,{20,0}
+,{1024021,0}
+,{65557,0}
+,{65557,0}
+,{65557,0}
+},{
+{4,18,21,1}
+,{4,13,21,1}
+,{4,20,21,1}
+,{4,20,21,1}
+,{1,0,20,0}
+,{1,0,20,0}
+},{
+{24,21,1,3,0,24,21}
+,{1,9,1,0,0,0,0}
+,{1,9,1,0,0,0,0}
+,{34,0,17,6,65386,0,30}
+},{108,129,3,5,88,104,126,0} 
+#endif
+/*fin_reglage*/
+
+},{
+
+/*debut reglage 4 */
+#ifdef programme
+{39,62,9,1},{
+{20,0}
+,{-100659180,229382}
+,{-100659436,294918}
+,{20,0}
+,{-100663276,221189}
+,{-100663276,5}
+,{-100659436,245762}
+,{-100663276,5}
+,{-100658154,245761}
+,{-100658156,253954}
+,{20,0}
+,{-100663276,204805}
+,{-100663276,16389}
+,{-100656874,1}
+,{-100656874,16385}
+,{-100663276,3}
+,{-100506347,6}
+,{-100509675,6}
+,{-100372972,6}
+,{2097174,0}
+,{1024022,0}
+,{16406,0}
+,{4117,0}
+,{262164,0}
+},{
+{2,22,24,1}
+,{1,20,24,4}
+,{0,20,24,4}
+,{0,20,24,3}
+,{0,20,24,4}
+,{0,20,24,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}
+},{2,3,129,108,2,126,104,88} 
+#else
+{1,9,62,39},{
+{20,0}
+,{-100659180,229382}
+,{-100659436,294918}
+,{20,0}
+,{-100663276,221189}
+,{-100663276,5}
+,{-100659436,245762}
+,{-100663276,5}
+,{-100658154,245761}
+,{-100658156,253954}
+,{20,0}
+,{-100663276,204805}
+,{-100663276,16389}
+,{-100656874,1}
+,{-100656874,16385}
+,{-100663276,3}
+,{-100506347,6}
+,{-100509675,6}
+,{-100372972,6}
+,{2097174,0}
+,{1024022,0}
+,{16406,0}
+,{4117,0}
+,{262164,0}
+},{
+{1,24,22,2}
+,{4,24,20,1}
+,{4,24,20,0}
+,{3,24,20,0}
+,{4,24,20,0}
+,{4,24,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,2,88,104,126,2} 
+#endif
+/*fin_reglage*/
+
+},{
+
+/*debut reglage 5 */
+#ifdef programme
+{39,68,9,1},{
+{20,0}
+,{1048982293,229382}
+,{1049128469,253958}
+,{20,0}
+,{1048966677,245765}
+,{20,0}
+,{262157846,245762}
+,{1048919829,5}
+,{262156054,245761}
+,{262154006,253954}
+,{20,0}
+,{1049123349,229381}
+,{1049157141,237573}
+,{262154262,1}
+,{262158614,16385}
+,{262149654,3}
+,{262750740,237572}
+,{262606612,122884}
+,{-1174095083,139270}
+,{20,0}
+,{16406,0}
+,{16406,0}
+,{4117,0}
+,{262164,0}
+},{
+{1,22,16,1}
+,{1,22,16,4}
+,{1,22,16,4}
+,{1,20,16,3}
+,{1,21,20,4}
+,{1,21,20,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}
+},{2,3,129,108,3,126,104,88} 
+#else
+{1,9,68,39},{
+{20,0}
+,{1048982293,229382}
+,{1049128469,253958}
+,{20,0}
+,{1048966677,245765}
+,{20,0}
+,{262157846,245762}
+,{1048919829,5}
+,{262156054,245761}
+,{262154006,253954}
+,{20,0}
+,{1049123349,229381}
+,{1049157141,237573}
+,{262154262,1}
+,{262158614,16385}
+,{262149654,3}
+,{262750740,237572}
+,{262606612,122884}
+,{-1174095083,139270}
+,{20,0}
+,{16406,0}
+,{16406,0}
+,{4117,0}
+,{262164,0}
+},{
+{1,16,22,1}
+,{4,16,22,1}
+,{4,16,22,1}
+,{3,16,20,1}
+,{4,20,21,1}
+,{4,20,21,1}
+},{
+{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,2,88,104,126,3} 
+#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 int4	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;
+somme=0;blk->code1		=	(((long)longueur)<<16)	|	somme;
+blk->code2		=	(((long)block_num) & 0xffffff ) | ( (((long)type)<<24)&0xff000000 );
+
+blk->mot[longueur/4-4]  =	fin_block_mesure;
+
+#if defined(_ECC_LIB_H_)
+{
+int place_ecc;
+place_ecc=(longueur-4-ECC_SIZE-SIZE_HEAD-((longueur-4-SIZE_HEAD)/ECC_TOTAL)*ECC_SIZE)/4;
+SetEcc( blk, (unsigned char *) &(blk->mot[place_ecc] ) ) ;
+}
+#endif
+
+somme=calcul_somme_block(blk,longueur);
+blk->code1		=	(((long)longueur)<<16)	|	somme;
+/* l'ecc est faux car on a change la somme: mettre la somme a zero avant de tester ecc  */
+}
+
+/* Quand on est sur une machine swappee, on ne cherche pas a verifier */
+/* le checksum, puisqu'on a modifie les blocs, sans swapper par exemple */
+/* les chars des noms de bolometres et des chaines GPS... */
+#ifdef __alpha
+#define SWAP
+#endif
+#if defined(Linux)  || defined(linux)
+#define SWAP
+#endif
+
+
+
+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);	
+#ifndef SWAP
+som=calcul_somme_block(blk,lg); if( som!= somme_block(blk))		return(block_somme_erreur);
+#endif
+return(block_correct);
+}
+
+
+int  verifie_block_printf(block_type_modele* blk)
+{
+int type,lg,som;
+def_long_block
+def_nom_block
+if(blk->debut != debut_block_mesure)
+	{
+	printf(" erreur dans le code debut de block	 \n");
+	return(block_debut_erreur);
+	}	
+
+type=type_block(blk);
+if( (type<0) || (type>nb_type_blocks) )	
+	{
+	printf(" block de type %d  inconnu\n",type);
+	return(block_type_inconnu);
+	}
+
+lg=longueur_block(blk);
+if( lg!=long_block[type] )	
+	{
+	printf(" block type %s  erreur de longueur (nominal=%d , dans le block=%d \n"
+			,nom_block[type],long_block[type],lg);
+	return(block_longueur_erreur);
+	}
+
+som=calcul_somme_block(blk,lg);
+if( som!=somme_block(blk) )	
+	{
+	printf(" block type %s   :  erreur de somme (calculee=%d , dans le block=%d \n"
+			,nom_block[type],som,somme_block(blk) );
+	return(block_somme_erreur);
+	}
+	
+if(blk->mot[(lg/4)-4]	!= fin_block_mesure)	
+	{
+	printf(" block type %s  erreur de code fin de block : trouve %x au lieu de %x \n"
+			,nom_block[type],(int)blk->mot[(lg/4)-4],fin_block_mesure);
+	return(block_fin_erreur);
+	}
+
+return(block_correct);
+}
+
+
+
+
+
Index: trunk/Poubelle/archTOI.old/archeops_28.h
===================================================================
--- trunk/Poubelle/archTOI.old/archeops_28.h	(revision 342)
+++ trunk/Poubelle/archTOI.old/archeops_28.h	(revision 342)
@@ -0,0 +1,1065 @@
+
+/*======================================================================*/
+/*                                                                      */
+/* 		 archeops.h  :	structure de données            	*/
+/*                                                                      */
+/*======================================================================*/
+
+#define		_archeops
+#define		version_num		28
+
+/*  defini ici que si l'on n'a pas inclu ecclib.h qui contient les memes definitions */
+#ifndef _ECC_LIB_H_
+#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.						        */
+/*								        */
+/*  VERSION 28:                                                         */
+/*	- corrigée la taille du block gyroscope avec ecc		*/
+/*	- compatible avec la generation de l'ecc dans le transputer     */
+/*	- mais sans ecc: trops long a calculer			        */
+
+/*======================================================================*/
+
+
+/*======================================================================*/
+/*  ---------------  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
+#define 	tc_dir_reset_trp		4
+
+/*  -------------  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
+	,tc2_raz_fet,tc2_reset};	/* 13 codes: reste 3 disponibles*/
+
+
+/*______________________________________________________________________________________________*/
+/*	3eme mot:	6bit:									*/
+
+/*	code2=dac-gain-voie  	:	numero de bolo						*/
+
+/*	code2=tc2_horloge	:								*/
+/*		soit un code defini								*/
+enum{tc3_commande,tc3_periode,tc3_nb_mesures,tc3_temp_mort,tc3_flag};
+
+
+/*	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	:	commandes setbit,clrbit 						*/
+enum{tc3_clr_bit_dil,tc3_set_bit_dil,tc3_fet_raz};
+
+/*	code2=tc2_reset	:	commandes setbit,clrbit 						*/
+#define	tc3_reset	13
+#define	tc4_reset	73
+
+/*______________________________________________________________________________*/
+/*	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		*/
+#ifdef _ECC_LIB_H_
+	unsigned char ecc[((((sizeof( param_bolo)+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+#endif
+	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			*/
+#ifdef _ECC_LIB_H_
+	unsigned char ecc[((((sizeof(ligne_journal)*long_page+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+#endif
+
+	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,stop_moteur,moteur_direct_p,moteur_regul_p,moteur_direct_m,moteur_regul_m};
+
+#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;											
+#ifdef _ECC_LIB_H_
+	unsigned char ecc[((((sizeof(reglage_bolo)+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+#endif
+	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				*/
+#ifdef _ECC_LIB_H_
+	unsigned char ecc[((((sizeof(int4)*64+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+#endif
+	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	/*  5: chauffage 1	*/
+#define chauffage3		0x00001000	/*  4: chauffage 1	*/
+#define chauffage4		0x00000800	/*  3: chauffage 1	*/
+#define chauffage5		0x00000400	/*  2: chauffage 1	*/
+#define chauffage6		0x00000200	/*  1: chauffage 1	*/
+#define chauffage7		0x00000100	/*  0: chauffage 7	*/
+
+enum{nbit_chauffage7,nbit_chauffage6,nbit_chauffage5,nbit_chauffage4,nbit_chauffage3
+	,nbit_chauffage2,nbit_chauffage1,nbit_vanne_EVB,nbit_vanne_EVO
+	,nbit_vanne_EVV,nbit_vanne_EVF,nbit_switch_pile_par_15,nbit_switch_pile_par_5,nbit_switch_helium};
+
+/*  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	,t_pile	,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	*/
+/* T_A1 EST AUSSI LE DRIVER DU MOTEUR DE PIVOT   */
+
+#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)	*/
+#ifdef _ECC_LIB_H_
+	unsigned char ecc[((((GPS_DATA+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+#endif
+
+	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];		
+#ifdef _ECC_LIB_H_
+	unsigned char ecc[((((sizeof(short)*nb_max_bolo*nb_max_mes_per+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+#endif
+
+	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];	
+#ifdef _ECC_LIB_H_
+	unsigned char ecc[((((nb_per_block*nb_sync*2+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+#endif
+
+	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];
+#ifdef _ECC_LIB_H_
+	unsigned char ecc[((((1024+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+#endif
+	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)		*/
+#ifdef _ECC_LIB_H_
+	unsigned char ecc[((((sizeof(int4)*nb_max_bolo*nb_per_block*2+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+#endif
+	int4		fin;		/* 	code de reconnaissance de fin de block		*/
+	}
+	block_type_bolo;			
+
+/*  ---------------------   structures N° 9 :   données des gyroscopes 	*/
+/*  -----------------------------------------------------------------------------------------	*/
+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];
+#ifdef _ECC_LIB_H_
+	unsigned char ecc[((((sizeof(int4)*3*nb_per_block*2+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+#endif
+	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	*/
+#ifdef _ECC_LIB_H_
+	unsigned char ecc[((((sizeof(int4)*nb_per_block*2*18+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+#endif
+	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					*/
+#ifdef _ECC_LIB_H_
+	unsigned char ecc[((((SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+#endif
+	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 ];
+#ifdef _ECC_LIB_H_
+	unsigned char ecc[((((sizeof(int4)*nb_bolo_util*((nb_per_block/2) +1)+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+#endif
+
+	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 ];
+#ifdef _ECC_LIB_H_
+	unsigned char ecc[((((sizeof(int4)*3*((nb_per_block/2) +1)+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+#endif
+	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 ];
+#ifdef _ECC_LIB_H_
+	unsigned char ecc[((((sizeof(int4)*nb_photo_diodes*((nb_per_block*2/7) +1)+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+#endif
+	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 */
+#ifdef _ECC_LIB_H_
+  unsigned char ecc[((((sizeof(int4)*2 + sizeof(status_flash)+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+#endif
+  
+  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 */
+#ifdef _ECC_LIB_H_
+  unsigned char ecc[((((sizeof(int4)+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+#endif
+
+  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];
+#ifdef _ECC_LIB_H_
+	unsigned char ecc[((((nb_per_block*nb_max_mes_per*nb_byte_mot+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+#endif
+#else
+#ifdef _ECC_LIB_H_
+	unsigned char ecc[((((SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+#endif
+#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					*/
+#ifdef _ECC_LIB_H_
+	unsigned char ecc[((((SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+#endif
+	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					*/
+#ifdef _ECC_LIB_H_
+	unsigned char ecc[((((SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+#endif
+	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];
+#ifdef _ECC_LIB_H_
+	unsigned char ecc[((((sizeof(int4)*(taille_maxi_block_archeops/4)+SIZE_HEAD)/ECC_DATA)+1)*ECC_SIZE)] ;
+#endif
+	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: trunk/Poubelle/archTOI.old/archeopsfile.cc
===================================================================
--- trunk/Poubelle/archTOI.old/archeopsfile.cc	(revision 319)
+++ trunk/Poubelle/archTOI.old/archeopsfile.cc	(revision 342)
@@ -38,4 +38,5 @@
   
   SSTHandler sstHandler;
+  GPSParser  gpsParser;
 };
 
@@ -211,4 +212,6 @@
       else if (!llastBolo) {
         llastBolo = new block_type_bolo;
+      }
+      if (llastBolo) {
         memcpy(llastBolo, lastBolo, sizeof(block_type_bolo));
       }
@@ -286,4 +289,8 @@
   fn         = x.fn;
   f = fopen(fn.c_str(), "rb");
+
+  rawMJD     = x.rawMJD;
+  startMJD   = x.startMJD;
+  utcOffset  = x.utcOffset;
 }
 
@@ -300,5 +307,5 @@
   //curBlock = oldFile.curBlock;
   //peekBlock = oldFile.peekBlock;
-  peekPos = 0;
+  if (peekPos>0) peekPos = 0;
   setUTCOffset(oldFile.utcOffset);
 }
@@ -306,4 +313,6 @@
 
 def_nom_block
+
+def_long_block
 
 bool ArcheopsFile::nextBlock() {
@@ -316,23 +325,46 @@
   
   memcpy(curBlock, peekBlock, sizeof(block_type_modele));
-  
-  if (peekPos+12 > fLen) return false;
-  fseek(f,peekPos,SEEK_SET);
-  size_t read = fread(peekBlock,1,sizeof(block_type_modele),f);
-  swapEntete(peekBlock);
-  if (read < longueur_block(peekBlock)) return false;
-  swapContent(peekBlock);
-  if (verifie_block(peekBlock) != block_correct) {
-  printf("block invalide\n"); throw ArchExc("invalid block");
-  }
-  peekPos += longueur_block(peekBlock);
+  curPos = peekPos;
+  
+  while (true) {
+    if (peekPos+12 > fLen) return false;  // fin de fichier
+    fseek(f,peekPos,SEEK_SET);            // aller en peekPos
+    size_t read = fread(peekBlock,1,sizeof(block_type_modele),f);
+    swapEntete(peekBlock);
+    if (read < longueur_block(peekBlock) || 
+        type_block(peekBlock) < 0 || type_block(peekBlock) > 19 ||
+        longueur_block(peekBlock) != long_block[type_block(peekBlock)]) {
+      cout << "block de type/longueur invalide" << endl;
+      memset(peekBlock, 0, sizeof(block_type_modele)); // don't keep trash...
+      peekPos = searchNextBlock(peekPos);
+      if (peekPos<0) return false;
+      continue;
+    }
+    swapContent(peekBlock);
+    if (verifie_block(peekBlock) != block_correct) {
+      cout << "block invalide " << numero_block(peekBlock);
+      if (!fixBlock(peekBlock)) {
+        cout << " -- skipped" << endl;
+        peekPos += longueur_block(peekBlock);  // la longueur doit etre ok...
+        continue;
+      } else {
+        cout << " -- fixed" << endl;
+        break;
+      }
+    }
+    break; // tout semble bon pour ce bloc...
+  }
+  
+  peekPos += longueur_block(peekBlock); // on suppose que longueur OK...
   if (curPos < 0) {
     curPos = 0; return true;
   }
-  curPos += longueur_block(curBlock);
-  curRawKind = curKind = type_block(curBlock);
-  //printf("block %d  :  %s \n",numero_block(&curBlock),nom_block[curKind]);
-  postProcessBlock();
-  saveCurBlock();
+  if (curBlock->debut != 0) {
+    curRawKind = curKind = type_block(curBlock);
+    postProcessBlock();
+    saveCurBlock();
+  } else {
+    curRawKind = curKind = -1;
+  }
   return true;
 }
@@ -346,4 +378,9 @@
 }
 
+bool ArcheopsFile::fixBlock(block_type_modele* blk) {
+  return false;
+}
+
+
 int  ArcheopsFile::blockKind() {
   return curKind;
@@ -363,4 +400,5 @@
   double p,f1,f2,f3;
   int pp;
+  if (!lastReglage()) return -1;
   pp=lastReglage()->reglage.horloge.periode;
   p=pp/5.;
@@ -374,5 +412,5 @@
 
 int ArcheopsFile::nEchBlock() {  // Nb d'echantillons dans un bloc
-  return lastParam()->param.n_per_block*2.;
+  return lastParam()->param.n_per_block*2;
 }
 
@@ -448,4 +486,10 @@
 }
 
+void ArcheopsFile::forceBlock(block_type_modele* blk) {
+  blockSet->setBloc(*blk);
+}
+
+#define place_paquet(i,j)	 ((i/8) * 24  + j*8 + (i%8) )
+
 void ArcheopsFile::postProcessBlock() {
   switch (curKind) {
@@ -454,8 +498,24 @@
        block_type_bolo blk2;
        block_type_bolo_comprime* blk = (block_type_bolo_comprime*) &blockSet->curBlock;
+       #if version_num <= 25
        for(int j=0;j<nb_bolo_util;j++)	
-		{
-		   decompress_7_2(blk->data_bolo[j],blk2.data_bolo[j],nb_per_block*2);
+	   {
+		   decompress_7_2((int4*)blk->data_bolo[j],blk2.data_bolo[j],nb_per_block*2);
+	   }
+	   #else
+	   block_type_param* param = lastParam();
+	   int jc=0;for(int j=0;j<nb_max_bolo;j++)	 // jc = bolo_comprime  //   j=bolo normal
+	   {
+		if( (param->param.bolo[j].bolo_code_util==bolo_normal_transmis) &&  (jc<nb_bolo_util)  )
+			{
+			decompress_7_2((int4 *)blk->data_bolo[jc],blk2.data_bolo[j],nb_per_block*2);
+			jc++;
+			}
+		else {
+		  memset(blk2.data_bolo[j], 0, nb_per_block*2*sizeof(int4));
 		}
+		}
+
+	   #endif
        valide_block((block_type_modele*)&blk2,block_bolo,numero_block(blk));	
        memcpy(&blockSet->curBlock,&blk2,sizeof(blk2));
@@ -464,7 +524,43 @@
      }
      case block_sst_comprime: {  // $CHECK$ TBD
+       blockSet->setRawBloc(blockSet->curBlock);
+       block_type_sst blk2;
+       block_type_sst_comprime* blk = (block_type_sst_comprime*) &blockSet->curBlock;
+       for (int j=0; j<18; j++)
+         for (int i=0; i<nb_per_block*2; i++)
+           blk2.sst[i][j] = 0;
+
+       int jc=0;
+       for( int j=0;j<48;j++) {
+         if ((j!=0) && (j!=4)) 
+         {
+           unsigned int4 sst_vrai[nb_per_block*2];
+           decompress_4_1((int4*)blk->sst[jc],(int4*)sst_vrai,nb_per_block*2);
+           for (int k=0;k<nb_per_block*2;k++) {
+             unsigned int4 a,b0,b1,b2;
+             b2 = sst_vrai[k] & 0xf;
+             b1 = (sst_vrai[k] >> 4) & 0xf;
+             b0 = (sst_vrai[k] >> 8) & 0xf;
+	         a=place_paquet(j,0);
+	         blk2.sst[k][a/8] |= (b0 << (a%8)*4);
+	         a=place_paquet(j,1);
+	         blk2.sst[k][a/8] |= (b1 << (a%8)*4);
+	         a=place_paquet(j,2);
+	         blk2.sst[k][a/8] |= (b2 << (a%8)*4);
+           }
+           jc++;
+         }
+       }       
+       valide_block((block_type_modele*)&blk2,block_sst,numero_block(blk));	
+       memcpy(&blockSet->curBlock,&blk2,sizeof(blk2));
+       curKind = block_sst;
+       blockSet->sstHandler.ProcessBlock((block_type_sst*)&blockSet->curBlock);
+       break;
      }
      case block_sst : {
        blockSet->sstHandler.ProcessBlock((block_type_sst*)&blockSet->curBlock);
+     }
+     case block_gps : {
+       blockSet->gpsParser.ProcessBlock((block_type_gps*)&blockSet->curBlock);
      }
   }
@@ -519,16 +615,20 @@
 #endif
 
+#ifdef SWAP
 void ArcheopsFile::swapEntete(block_type_modele* blk) {
-#ifdef SWAP
   bswap4(&(blk->debut));
   bswap4(&(blk->code1));
   bswap4(&(blk->code2));
   long lg = longueur_block(blk);
-  bswap4(((char*)blk) + lg - 4);
+  if (lg < taille_maxi_block_archeops)
+    bswap4(((char*)blk) + lg - 4);
+}
+#else
+void ArcheopsFile::swapEntete(block_type_modele* ) {
+}
 #endif
-}
-
+
+#ifdef SWAP
 void ArcheopsFile::swapContent(block_type_modele* blk) {
-#ifdef SWAP
   int typ = type_block(blk);
 
@@ -550,11 +650,41 @@
     for (int i=0; i<nb_max_bolo; i++)
       for (int j=0; j<8; j++)
-	bswap4(&b->param.bolo[i].bolo_nom[4*j]);
-  }
-  
-  }
+#if version_num<=25
+        bswap4(&b->param.bolo[i].bolo_nom[4*j]);
+#else
+	bswap4(&b->param.nom_coef[i].bolo_nom[4*j]);
 #endif
-}
-  
+  }
+  
+  }
+}
+#else
+void ArcheopsFile::swapContent(block_type_modele* ) {
+}
+#endif
+  
+long ArcheopsFile::searchNextBlock(long pos) {
+  static char* buffer = 0;
+  static int4  debswp = debut_block_mesure;
+  static int4  longmax = taille_maxi_block_archeops*20;
+  if (!buffer) {
+    buffer = new char[longmax];
+#ifdef SWAP
+    bswap4(&debswp);
+#endif
+  }
+  fseek(f,pos,SEEK_SET);
+  size_t read = fread(buffer,1,taille_maxi_block_archeops*2,f);
+  //if (read<taille_maxi_block_archeops*2) return -1;
+  for (int i=4; i<read; i+=4) {
+    if (*(int4*)(buffer+i) == debswp) {
+      cout << "trying to skip " << i << " bytes to pos="<<pos+i << endl;
+      return pos+i;
+    }
+  }
+  cout << "cannot find block start" << endl;
+  return -1;
+}
+
   
 
@@ -562,7 +692,37 @@
 static int mlen[] = {31,28,31,30,31,30,31,31,30,31,30,31};
 
+double ArcheopsFile::decodeMJD(string const& dateString) {
+  //99_04_29-15h36m22  ou  99_05_10
+  short y,m,d,hh,mm,ss;
+  char const* p = dateString.c_str();
+  char const* p2 = dateString.c_str() + dateString.length();
+  y  = atoi(p); p+=3; if (p>p2) return -1;
+  m  = atoi(p); p+=3; if (p>p2) return -1;
+  d  = atoi(p); p+=3;
+  if (p<p2) {
+  hh = atoi(p); p+=3; if (p>p2) return -1;
+  mm = atoi(p); p+=3; if (p>p2) return -1;
+  ss = atoi(p);
+  } else {
+    hh=mm=ss=0;
+  }
+
+  if (y<50) y += 100;
+  // 1. depuis 0/1/97 minuit
+  double mjd = (int) (365.25 * (y-97));
+  for (int i=0; i<m-1; i++)
+    mjd += mlen[i];
+  if (y%4 == 0 && m > 2) mjd++;
+  mjd += d;
+  mjd += hh/24. + mm/24./60. + ss/24./60./60;
+  
+  mjd += 448.5; // 0/1/97 minuit
+
+  return mjd;
+}
+
 void ArcheopsFile::computeMJD(string const& fname) {
-  //h99_04_29-15h36m22
-  short y,m,d,hh,mm,ss;
+  //telemetrie : h99_04_29-15h36m22
+  //enregistreur : ARKxxxxxx.dat, et MJD = samedi 17 juillet, 21h -> 1377.4
   char const* p = fname.c_str();
   char const* p2 = p  + fname.length()-1;
@@ -570,21 +730,9 @@
   if (*p2 == ':' || *p2 == '/') p2++;
   if (*p2 == 'h') p2++;
-  y  = atoi(p2); p2+=3;
-  m  = atoi(p2); p2+=3;
-  d  = atoi(p2); p2+=3;
-  hh = atoi(p2); p2+=3;
-  mm = atoi(p2); p2+=3;
-  ss = atoi(p2);
-  
-  if (y<50) y += 100;
-  // 1. depuis 0/1/97 minuit
-  rawMJD = (int) (365.25 * (y-97));
-  for (int i=0; i<m-1; i++)
-    rawMJD += mlen[i];
-  if (y%4 == 0 && m > 2) rawMJD++;
-  rawMJD += d;
-  rawMJD += hh/24. + mm/24./60. + ss/24./60./60;
-  
-  rawMJD += 448.5; // 0/1/97 minuit
+  if (!strncmp(p2, "ARK",3)) {
+    rawMJD = 1377.4;
+  } else {
+    rawMJD = decodeMJD(p2);
+  }
   startMJD = rawMJD - utcOffset/24.;
 }
@@ -610,4 +758,10 @@
 
 
+int ArcheopsFile::getGyroBlockNum() {
+  if (!lastGyro()) return -1;
+  return numero_block(lastGyro());
+}
+
+
 // GPS
 // $GPGGA,hhmmss.ss,ddmm.mmmm,n,dddmm.mmmm,e,q,ss,y.y,a.a,z,
@@ -621,16 +775,19 @@
 double ArcheopsFile::getGPSUTC() {  // en secondes depuis minuit UTC jour courant
   if (!lastGPS()) return -9.e99;
-  char* p = lastGPS()->gps;
-  if (strncmp(p, "$GPGGA,", 7)) return -9.e99;
-  p += 7;
+  return blockSet->gpsParser.getUTC();
+/*  char* p = lastGPS()->gps;
+  //if (strncmp(p, "$GPGGA,", 7)) return -9.e99;
+  //p += 7;
+  if (*p != '$') return -9.e99;
+  p += 1;
   double t;
   sscanf(p, "%lg", &t);
   int h = int(t/10000); t -= h*10000;
   int m = int(t/100);   t -= m*100;
-  return h*3600. + m*60. + t;
+  return h*3600. + m*60. + t;*/
 }
 
 double ArcheopsFile::getGPSMJD() {  // modified julian day du dernier bloc GPS, JD - 2450000
-  double t = getGPSUTC()/86400.;
+  double t = getGPSUTC()/86400. - 0.5;
   if (t<0) return t;
   if (t > (startMJD - int(startMJD))) {
@@ -643,8 +800,10 @@
 double ArcheopsFile::getGPSLat() {  // degres, +  = NORD
   if (!lastGPS()) return -9.e99;
-  char* p = lastGPS()->gps;
-  if (strncmp(p, "$GPGGA,", 7)) return -9.e99;
+  return blockSet->gpsParser.getLatitude();
+  /*char* p = lastGPS()->gps;
+  //if (strncmp(p, "$GPGGA,", 7)) return -9.e99;
+  if (*p!='$') return -9.e99;
   char* fence = p+80;
-  p += 7;
+  p += 1;
   while (*p != ',' && p<fence) p++;
   if (*p != ',') return -9.e99; 
@@ -658,13 +817,16 @@
   p++;
   if (*p == 'S') t = -t;
-  return t;
-}
+  return t;*/
+}
+
 
 double ArcheopsFile::getGPSLong() { // degres, +  = EST
   if (!lastGPS()) return -9.e99;
-  char* p = lastGPS()->gps;
-  if (strncmp(p, "$GPGGA,", 7)) return -9.e99;
+  return blockSet->gpsParser.getLongitude();
+  /*char* p = lastGPS()->gps;
+  //if (strncmp(p, "$GPGGA,", 7)) return -9.e99;
+  if (*p!='$') return -9.e99;
   char* fence = p+80;
-  p += 7;
+  p += 1;
   for (int i=0; i<3; i++) {
     while (*p != ',' && p<fence) p++;
@@ -680,14 +842,49 @@
   p++;
   if (*p == 'W') t = -t;
-  return t;
-}
-
+  return t;*/
+}
+
+double ArcheopsFile::getGPSAlt() { // meters from sea level
+  if (!lastGPS()) return -9.e99;
+  return blockSet->gpsParser.getAltitude();
+  /*char* p = lastGPS()->gps;
+  //if (strncmp(p, "$GPGGA,", 7)) return -9.e99;
+  if (*p!='$') return -9.e99;
+  char* fence = p+80;
+  p += 1;
+  for (int i=0; i<8; i++) {
+    while (*p != ',' && p<fence) p++;
+    if (*p != ',') return -9.e99; 
+    p++;
+  }
+  double t;
+  sscanf(p, "%lg", &t);
+  return t;*/
+}
+
+bool ArcheopsFile::hasGPSTime() { 
+  if (!lastGPS()) return false;
+  return blockSet->gpsParser.hasGPSTime();
+}
+
+bool ArcheopsFile::hasGPSPos() { 
+  if (!lastGPS()) return false;
+  return blockSet->gpsParser.hasPosition();
+}
+
+bool ArcheopsFile::hasGPSAlt() { 
+  if (!lastGPS()) return false;
+  return blockSet->gpsParser.hasAltitude();
+}
 
 
 // Bolo
+#define  val_DS(j,i)  (blk->data_bolo[j][i]&0x1fffff)
+
 
 long ArcheopsFile::getRawBolo(int ibolo, int imesure) {    // donnee brute, avec seulement soustraction offset
   int nb_coups,aa;  
   block_type_bolo* blk = imesure >= 0 ? lastBolo() : llastBolo();
+  //cout << "raw " << imesure << " ";
   if (imesure < 0) imesure += nEchBlock();
   if (!blk) return 0;
@@ -699,6 +896,8 @@
   
   int s = imesure % 2 ? 1 : -1;
-
-  return s*(((blk->data_bolo[ibolo][imesure]-aa)<<1)/nb_coups);
+  
+  //cout << s*(((val_DS(ibolo,imesure)-aa)<<1)/nb_coups) << "\n";
+
+  return s*(((val_DS(ibolo,imesure)-aa)<<1)/nb_coups);
 }
 
@@ -706,8 +905,11 @@
 
 double ArcheopsFile::getMuVBolo(int ibolo, int imesure) { // microvolts, filtre avec filtre carre
-  double y = (getRawBolo(ibolo, imesure-1) - getRawBolo(ibolo, imesure))/2.;
-  if (imesure%2) y=-y;
+  double y = (getRawBolo(ibolo, imesure-1) + getRawBolo(ibolo, imesure))/2.;
+  //if (imesure%2) y=-y;
   block_type_reglage* reglage = lastReglage();
-  return ((1e5*y)/(65536.*gain_ampli(reglage->reglage.bolo[ibolo])));
+  block_type_param*   param = lastParam();
+  //cout << "muv " << imesure << " " << y << "\n";
+  return bol_micro_volt(y,(double)param->param.bolo[ibolo].bolo_gain*gain_ampli(reglage->reglage.bolo[ibolo]));
+  //return ((1e5*y)/(65536.*gain_ampli(reglage->reglage.bolo[ibolo])));
 }
 
@@ -719,8 +921,34 @@
 }
 
-
 long ArcheopsFile::getSSTSignal(int idiode, int imesure) {
   return blockSet->sstHandler.getSignal(imesure, idiode);
 }
+
+long ArcheopsFile::getSSTRawSignal(int idiode, int imesure) {
+  return blockSet->sstHandler.getRawSignal(imesure, idiode);
+}
+
+double ArcheopsFile::getSSTStarZ(int istar, int imesure) {
+  return blockSet->sstHandler.getStarZ(imesure, istar);
+}
+
+double ArcheopsFile::getSSTStarF(int istar, int imesure) {
+  return blockSet->sstHandler.getStarF(imesure, istar);
+}
+
+long ArcheopsFile::getGyro(int igyro, int imesure) {   
+  if (igyro<0 || igyro>2) return 0;
+  if (imesure<0 || imesure>= nb_per_block*2) return 0;
+  block_type_gyro* blk = lastGyro() ;
+  if (!blk) return 0;
+#if version_num<=25
+  return blk->gyros[igyro][imesure];
+#else
+  return blk->gyro[igyro][imesure];
+#endif
+}
+
+
+
 // $CHECK$ TBD
 
Index: trunk/Poubelle/archTOI.old/archeopsfile.h
===================================================================
--- trunk/Poubelle/archTOI.old/archeopsfile.h	(revision 319)
+++ trunk/Poubelle/archTOI.old/archeopsfile.h	(revision 342)
@@ -16,4 +16,5 @@
 
 #include "ssthandler.h"
+#include "gpsparser.h"
 
 enum {
@@ -33,5 +34,5 @@
   block_gyro_comprime_mask = 1 << block_gyro_comprime,
   block_sst_comprime_mask = 1 << block_sst_comprime,
-  block_catalog_flash_mask = 1 << block_catalog_flash,
+ // block_catalog_flash_mask = 1 << block_catalog_flash,
   block_cmd_flash_mask = 1 << block_cmd_flash,
   block_data_brute_mask = 1 << block_data_brute,
@@ -63,6 +64,7 @@
   double getStartMJD();
   
-  bool nextBlock();   // go to next block, true if block exists
+  bool nextBlock();   // go to next block, true if block exists (ie not EOF)
   bool nextBlock(long mask); // go to next block matching mask
+  bool gotValidBlock(); // current block is good
   int  blockKind();   // kind of the current bloc, enum in archeops.h
   int  blockRawKind();   // kind of the current raw bloc, enum in archeops.h
@@ -70,4 +72,5 @@
   string blockKdName();
   string blockRawKdName();
+  string filename() {return fn;}
   
   double perEchant(); // periode d'echantillonage pour le dernier bloc reglage
@@ -102,4 +105,6 @@
   block_type_sst_comprime*  lastSSTComp();
   
+  void forceBlock(block_type_modele* blk);
+  
   // Decodage des derniers blocs..
   
@@ -109,8 +114,12 @@
   // Ces fonctions travaillent sur le dernier bloc GPS 
   int getGPSBlockNum();
+  bool   hasGPSTime();
+  bool   hasGPSPos();
+  bool   hasGPSAlt();
   double getGPSUTC();  // en secondes depuis minuit UTC
   double getGPSMJD();  // modified julian day du dernier bloc GPS, JD - 2450000
   double getGPSLat();  // degres, +  = NORD
   double getGPSLong(); // degres, +  = EST
+  double getGPSAlt();  // meters from sea level
     
   // Bolo
@@ -122,5 +131,11 @@
   int getSSTBlockNum();
   void needSSTProcessMask(int mask);
+  long getSSTRawSignal(int iDiode, int imesure);
   long getSSTSignal(int iDiode, int imesure);
+  double getSSTStarZ(int iStar, int imesure);
+  double getSSTStarF(int iStar, int imesure);
+  
+  int getGyroBlockNum();
+  long getGyro(int iGyro, int imesure);
   
   double getAzimut(int imesure);
@@ -130,4 +145,6 @@
   double getAlpha(int imesure);
   double getDelta(int imesure);
+  
+  static double decodeMJD(string const& dateString); // sans tenir compte de TU-TLeg
     
 protected:
@@ -143,4 +160,7 @@
   
   void computeMJD(string const& fname);
+  
+  bool fixBlock(block_type_modele* blk);
+  long searchNextBlock(long pos);
     
   int                       curKind;
Index: trunk/Poubelle/archTOI.old/archtoi.cc
===================================================================
--- trunk/Poubelle/archTOI.old/archtoi.cc	(revision 342)
+++ trunk/Poubelle/archTOI.old/archtoi.cc	(revision 342)
@@ -0,0 +1,222 @@
+#include <string>
+#include <iostream.h>
+#include <fstream.h>
+#include <iomanip.h>
+
+#include "archeopsfile.h"
+#include "toisvr.h"
+#include "archtoi.h"
+
+using namespace std; 
+
+
+ArchTOI::ArchTOI(istream& str)
+{
+  init();
+  readReq(str);
+}
+
+
+ArchTOI::ArchTOI(string const& filename)
+{
+  init();
+  ifstream str(filename.c_str());
+  readReq(str);
+}
+
+void ArchTOI::init()
+{
+  format = ascii;
+  undef  = "#";
+  allBolos = false;
+}
+
+void ArchTOI::readReq(istream& str)
+{
+   string line;
+   while (str) {
+     getline(str,line);
+     if (!str) break;
+     if (line[0] == '@') processTOIReq(line);
+     else if (line[0] == '#') 
+       if (!processOption(line)) break;
+   }
+}
+
+#define tsttoi(toi)   if (key == "@"#toi) kind = toi;
+
+void ArchTOI::processTOIReq(string line)
+{
+  // find TOI kind, index and options
+  TOIKind kind= (TOIKind)-1;
+  int index=0;
+  bool interp=false;
+  bool repet =false;
+  bool flag  =false;
+  bool notrig=false;
+  int x = line.find(' ');
+  string key = line.substr(0, x);
+  string opts = (x>0) ? line.substr(x) : string("");
+  tsttoi(sampleNum)
+  else tsttoi(internalTime)
+  else tsttoi(utc)
+  else tsttoi(boloTens)
+  else tsttoi(boloRaw)
+  else tsttoi(sstSignal)
+  else tsttoi(sstRaw)
+  else tsttoi(sstStarZ)
+  else tsttoi(sstStarF)
+  else tsttoi(gyroRaw)
+  else tsttoi(gpsTime)
+  else tsttoi(longitude)
+  else tsttoi(latitude)
+  else tsttoi(altitude)
+  else tsttoi(tsid)
+  else tsttoi(azimut)
+  else tsttoi(alphaAxis)
+  else tsttoi(deltaAxis)
+  else tsttoi(alphaBolo)
+  else tsttoi(deltaBolo)
+  else {
+    cerr << "*Warning, unrecognized TOI " << line << endl;
+    return;
+  }
+  if (kind  == sampleNum) notrig = true;
+  while (opts != "") {
+    if (opts[0] == ' ') {
+      opts = opts.substr(opts.find_first_not_of(' '));
+      if (opts == "") break;
+    }
+    x = opts.find(' ');
+    string opt = opts.substr(0, x);
+    opts = (x>0) ? opts.substr(x) : string("");
+    if (opt[0]>='0' && opt[0]<='9') {
+      index = atoi(opt.c_str());
+    } else if (opt == "notrig") {
+      notrig = true;
+    } else if (opt == "repet") {
+      repet = true; interp = false;
+    } else if (opt == "interp") {
+      interp = true; repet = false;
+    } else if (opt == "flag") {
+      flag = true;
+    }
+  }
+  headertoi.push_back(line);
+  toiflags.push_back(flg((flag?hasflag:0)+((!repet&&!interp)?useNA:0)));
+  svr.AddInfo(kind, index, !notrig, interp);
+} 
+
+bool ArchTOI::processOption(string line)
+{
+  int x = line.find(' ');
+  string key = line.substr(0, x);
+  string arg = (x>0) ? line.substr(x) : string("");
+  if (arg.length()>0 && arg[0] == ' ') {
+    arg = arg.substr(arg.find_first_not_of(' '));
+  }
+  if (key == "#ASCII") {
+    format = ascii;
+  } else if (key == "#TRANGE") {
+    double tmin, tmax;
+    sscanf(arg.c_str(), "%lg %lg", &tmin, &tmax);
+    svr.SetTimeInterval(tmin, tmax);
+  } else if (key == "#PATH") {
+    svr.SetDirectory(arg);
+  } else if (key == "#FILE") {
+    svr.AddFile(arg);
+  } else if (key == "#UNDEF") {
+    undef=arg;
+  } else if (key == "#ALLBOLOS") {
+    allBolos=true;
+  } else if (key == "#RECORDER") {
+    svr.OnBoardRecorderFiles(true);
+  } else if (key == "#MJD0") {
+    double t0;
+    sscanf(arg.c_str(), "%lg", &t0);
+    svr.SetMJD0(0);
+  } else if (key == "#END") {
+    return false;
+  } else {
+    cerr << "*Warning, unrecognized option " << line << endl;
+    return true;
+  }
+  
+  headeropt.push_back(line);
+  return true;
+}
+
+
+void ArchTOI::run(string const& filename)
+{
+  ofstream str(filename.c_str());
+  run(str);
+}
+
+void ArchTOI::run(ostream& str)
+{
+  // output header
+  for (list<string>::iterator i = headertoi.begin(); i != headertoi.end(); i++)
+    str << (*i) << '\n';
+  for (list<string>::iterator i = headeropt.begin(); i != headeropt.end(); i++)
+    str << (*i) << '\n';;
+  
+  cout << "starting query" << endl;
+  TOIIter iter = svr.DoQuery();
+  // Normalement, on a un bloc param...
+  block_type_param* blk = iter.lastParam();
+  if (blk) {
+    int nb = blk->param.nb_bolo;
+    for (int i=0; i<nb; i++) {
+#if version_num > 25
+      if (allBolos) {
+        str << "$BOLO " << i << " " 
+            << blk->param.nom_coef[blk->param.bolo[i].numero_nom_coef].bolo_nom << " " 
+            << blk->param.bolo[i].bolo_code_util << '\n';
+      } else if (blk->param.bolo[i].bolo_code_util != bolo_hors_service &&
+                 blk->param.bolo[i].bolo_code_util != bolo_normal_non_transmis) {
+        str << "$BOLO " << i << " " 
+            << blk->param.nom_coef[blk->param.bolo[i].numero_nom_coef].bolo_nom << "\n";
+      }
+#else
+      str << "$BOLO " << i << " " << 
+        blk->param.bolo[i].bolo_nom << '\n';
+#endif
+    }
+  }
+  str << "#END" << endl;
+  cout << "processing" << endl;
+  string ofn;
+  while (iter.Next()) {
+    int nn = iter.getSampleIndex();
+    // if (nn%200 == 0) {cout << "."; cout.flush();
+    //   if (ofn != iter.currentFile()->filename()) {
+    //    ofn = iter.currentFile()->filename();
+    //   cout << "current file=" << ofn << endl;
+    //  }
+      //}
+      //if (nn%(200*80) == 0) cout << endl;
+    // Si rien de dispo parmi les triggering, alors on passe au suivant
+    bool hasValue = false;
+    for (int i=0; i<toiflags.size(); i++) {
+       if (!iter.isTrig(i)) continue;
+       if (iter.canGetValue(i)) {hasValue=true; break;}
+    }
+    if (!hasValue) continue;
+    for (int i=0; i<toiflags.size(); i++) {
+      double value = iter.getValue(i);
+      bool   ok    = iter.canGetValue(i);
+      bool   isnew = iter.newValue(i);
+      flg    flag  = toiflags[i];
+      if (flag & hasflag) str << (ok && isnew ? 1 : 0) << " \t";
+      if (((flag & useNA)!=0 && !isnew) || !ok) 
+        str << undef << "\t";
+      else
+        str << setprecision(11) << value << " \t";
+    }
+    str << '\n';
+  }
+  str.flush();
+  cout << "\nDone." << endl;
+}
+
Index: trunk/Poubelle/archTOI.old/archtoi.h
===================================================================
--- trunk/Poubelle/archTOI.old/archtoi.h	(revision 342)
+++ trunk/Poubelle/archTOI.old/archtoi.h	(revision 342)
@@ -0,0 +1,38 @@
+#ifndef ARCHTOI_H
+#define ARCHTOI_H
+
+#include <iostream.h>
+#include <string>
+#include <list>
+#include <vector>
+#include "toisvr.h"
+
+using namespace std; 
+
+class ArchTOI {
+public:
+  ArchTOI(istream& str);
+  ArchTOI(string const& filename);
+
+  void run(ostream& str);
+  void run(string const& filename);
+  
+  enum fmt {ascii};
+  enum flg {hasflag = 1,
+            useNA   = 2};
+  
+protected:
+  void init();
+  void readReq(istream& str);
+  bool processOption(string line); // false when #END : stop processing...
+  void processTOIReq(string line);
+  TOISvr svr;
+  list<string> headertoi;
+  list<string> headeropt;
+  vector<flg>  toiflags;
+  fmt format;
+  string undef;
+  bool allBolos; // tous les bolos dans le header. Sinon seulement bolos transmis.
+};
+
+#endif
Index: trunk/Poubelle/archTOI.old/archtoidump.cc
===================================================================
--- trunk/Poubelle/archTOI.old/archtoidump.cc	(revision 342)
+++ trunk/Poubelle/archTOI.old/archtoidump.cc	(revision 342)
@@ -0,0 +1,30 @@
+
+#include <iostream.h>
+#include <fstream.h>
+#include <iomanip.h>
+
+#include "archeopsfile.h"
+#include "archtoi.h"
+#include "toisvr.h"
+
+#ifdef __MWERKS__
+#include <console.h>
+#endif
+
+using namespace std;  //introduces namespace std
+
+int main(int argc, char** argv)
+{	
+#ifdef __MWERKS__
+    argc = ccommand(&argv);
+#endif
+    if (argc != 2) {
+      cerr << "usage: archtoidump file" << endl;
+      return(-1);
+    }
+    ArcheopsFile file(argv[1]);
+    while (file.nextBlock()) {
+      cout << file.blockKdName() << "\n";
+    }
+ }
+
Index: trunk/Poubelle/archTOI.old/archtoimain.cc
===================================================================
--- trunk/Poubelle/archTOI.old/archtoimain.cc	(revision 342)
+++ trunk/Poubelle/archTOI.old/archtoimain.cc	(revision 342)
@@ -0,0 +1,28 @@
+#include <iostream.h>
+#include <fstream.h>
+#include <iomanip.h>
+
+#include "archeopsfile.h"
+#include "archtoi.h"
+#include "toisvr.h"
+
+
+#ifdef __MWERKS__
+#include <console.h>
+#endif
+
+using namespace std;  //introduces namespace std
+
+int main(int argc, char** argv)
+{	
+#ifdef __MWERKS__
+    argc = ccommand(&argv);
+#endif
+    if (argc != 3) {
+      cerr << "usage: archtoi reqfile datafile" << endl;
+      return(-1);
+    }
+    ArchTOI toi(argv[1]);
+    toi.run(argv[2]);
+    return(0);
+}
Index: trunk/Poubelle/archTOI.old/compress.c
===================================================================
--- trunk/Poubelle/archTOI.old/compress.c	(revision 342)
+++ trunk/Poubelle/archTOI.old/compress.c	(revision 342)
@@ -0,0 +1,429 @@
+#include "manip.h"
+#include "compress.h"
+
+
+/*******************************************************************************************/
+/****************   			 					************/
+/****************   			 		compress_3		************/
+/****************   			 					************/
+/*******************************************************************************************/
+
+static 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: trunk/Poubelle/archTOI.old/compress.h
===================================================================
--- trunk/Poubelle/archTOI.old/compress.h	(revision 319)
+++ trunk/Poubelle/archTOI.old/compress.h	(revision 342)
@@ -6,11 +6,4 @@
 /************************************************************************/
 
-#ifndef int4
-#ifdef __alpha
-#define int4 int
-#else
-#define int4 long
-#endif
-#endif
 
 
@@ -24,5 +17,5 @@
 /*	pour 	n = 72	  en sortie	19 mots = 76 octets		*/
 
-void compress_7_1(int4* in,int4*out,int n,int pasin);
+void compress_7_1(unsigned int4* in,unsigned int4*out,int n,int pasin);
 void decompress_7_1(int4* in,int4*out,int n);
 
@@ -36,5 +29,5 @@
 /*	pour 	n = 72	  en sortie	11 mots = 44 octets		*/
 
-void compress_4_1(int4* in,int4*out,int n,int pasin);
+void compress_4_1(unsigned int4* in,unsigned int4*out,int n,int pasin);
 void decompress_4_1(int4* in,int4*out,int n);
 
@@ -49,5 +42,5 @@
 
 
-void compress_3_1(int4* in,int4*out,int n,int pasin);
+void compress_3_1(unsigned int4* in,unsigned int4*out,int n,int pasin);
 void decompress_3_1(int4* in,int4*out,int n);
 
@@ -70,5 +63,5 @@
 
 
-void compress_7_2(int4* in,int4*out,int n,int pasin);
+void compress_7_2(unsigned int4* in,unsigned int4*out,int n,int pasin);
 void decompress_7_2(int4* in,int4*out,int n);
 
@@ -85,5 +78,5 @@
 
 
-void compress_4_2(int4* in,int4*out,int n,int pasin);
+void compress_4_2(unsigned int4* in,unsigned int4*out,int n,int pasin);
 void decompress_4_2(int4* in,int4*out,int n);
 
@@ -96,9 +89,17 @@
 /************************************************************************/
 
-/*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		*/
+/*	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) */
 
-#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 ) )	
+/*  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: trunk/Poubelle/archTOI.old/decompress.c
===================================================================
--- trunk/Poubelle/archTOI.old/decompress.c	(revision 319)
+++ trunk/Poubelle/archTOI.old/decompress.c	(revision 342)
@@ -1,2 +1,4 @@
+//#include <manip.h>
+#include "archeops.h"
 #include "compress.h"
 
@@ -8,9 +10,9 @@
 //*******************************************************************************************
 
+#define	ecart_mask		0x7	/*	masque pour l'ecart		*/		
+
 void  decom_3(int4 val,int4* in,int4*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	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	*/
@@ -42,5 +44,5 @@
 	{
 	R=in[i];
-	k=R&kmak_;
+	k=R&k_mask;
 	recup(ec1,29,k); 
 	recup(ec2,26,k); 
@@ -76,7 +78,6 @@
 void  decom_4_paire(int4 val1,int4 val2,int4* in,int4*out,int n);
 
-#undef kmax_
-#undef	kmak_
-#undef	emak_		
+#undef	ecart_mask		
+#define	ecart_mask	0xf		/*	masque pour l'ecart		*/		
 #undef	sgbi_
 #undef	sign_
@@ -84,7 +85,5 @@
 
 
-#define kmax_	15		/*  valeur maximum de l'exposant	*/
-#define	kmak_	0xf		/*	masque pour l'exposant		*/
-#define	emak_	0xf		/*	masque pour l'ecart		*/		
+#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	*/
@@ -117,5 +116,5 @@
 	{
 	R=in[i];
-	k=R&kmak_;
+	k=R&k_mask;
 	recup(ec1,28,k); 
 	recup(ec2,24,k); 
@@ -164,5 +163,5 @@
 	{
 	R=in[i];
-	k=R&kmak_;
+	k=R&k_mask;
 	recup(ec1,28,k); 
 	recup(ec2,24,k); 
@@ -194,16 +193,10 @@
 //*******************************************************************************************
 
-
-#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		*/		
+#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	*/
@@ -238,5 +231,5 @@
 	{
 	R=in[i];
-	k=R&kmak_;
+	k=R&k_mask;
 	recup(ec1,25,k); 
 	recup(ec2,18,k); 
@@ -281,5 +274,5 @@
 	{
 	R=in[i];
-	k=R&kmak_;
+	k=R&k_mask;
 	recup(ec1,25,k); 
 	recup(ec2,18,k); 
@@ -292,8 +285,8 @@
 	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);	*/
-
-	}
-}
-
-
+/*if(i<5)  printf("in=%x  i=%d  k=%d  ec= %x %x %x %x  \n",R,i,k,ec1,ec2,ec3,ec4);*/	
+
+	}
+}
+
+
Index: trunk/Poubelle/archTOI.old/gpsparser.cc
===================================================================
--- trunk/Poubelle/archTOI.old/gpsparser.cc	(revision 342)
+++ trunk/Poubelle/archTOI.old/gpsparser.cc	(revision 342)
@@ -0,0 +1,161 @@
+#include <string.h>
+#include <stdio.h>
+
+#include "gpsparser.h"
+
+GPSParser::GPSParser() {
+  *gpsString = 0;
+  stringOk = false;
+  gpsutc = 0;
+  gpslat = 0;
+  gpslong = 0;
+  quality = 0;
+  nsat = 0;
+  hdop = 0;
+  alt = 0;
+  gsep = 0;
+}
+
+GPSParser::~GPSParser() {
+}
+
+bool GPSParser::hasTime() {
+  return (stringOk && gpsutc>0);
+}
+
+bool GPSParser::hasGPSTime() {
+  return (stringOk && gpsutc>0 && quality>0 && nsat>=3);
+}
+
+bool GPSParser::hasPosition() {
+  return (stringOk && quality>0 && nsat>=3);
+}
+
+bool GPSParser::hasAltitude() {
+  return (stringOk && quality>0 && nsat>=4);
+}
+
+double GPSParser::getUTC() {
+  if (!stringOk) return -99999;
+  return gpsutc;
+}
+
+double GPSParser::getLatitude() {
+  if (!stringOk) return -99999;
+  if (quality == 0 || nsat<3) return -99999;
+  return gpslat;
+}
+
+double GPSParser::getLongitude() {
+  if (!stringOk) return -99999;
+  if (quality == 0 || nsat<3) return -99999;
+  return gpslong;
+}
+
+double GPSParser::getAltitude() {
+  if (!stringOk) return -99999;
+  if (quality == 0 || nsat<4) return -99999;
+  return alt;
+}
+
+// GPGGA string : 
+// $hhmmss.ss,ddmm.mmmm,n,dddmm.mmmm,e,q,ss,y.y,a.a,z,,
+// $104020,3740.712,N,00400.781,W,0,00,01.0,0003,M,-050,M,,
+
+#include <fstream.h>
+#include <iomanip.h>
+ofstream gpsdump("gpsdump");
+ofstream gpsdata("gpsdata");
+double outc = 0; double jr = 0;
+
+void GPSParser::ProcessBlock(block_type_gps* blk) {
+  strncpy(gpsString, blk->gps, 80);
+  char* p = gpsString;
+  gpsdump << p ; if (p[strlen(p)-1] != '\n') gpsdump << '\n';
+  char* fence = p+80;
+  stringOk = false;
+  if (*p!='$') return;
+  p++;
+  
+  // UTC
+  double t;
+  sscanf(p, "%lg", &t);
+  int h = int(t/10000); t -= h*10000;
+  int m = int(t/100);   t -= m*100;
+  gpsutc = h*3600. + m*60. + t;
+  p += 6;
+  if (*p != ',') return;
+  p++;
+  if (p>=fence) return;
+  
+  // LATITUDE
+  sscanf(p, "%lg", &t);
+  int d = int(t/100); t -= d*100;
+  t = d + t/60;
+  p += 8;
+  if (*p != ',') return; 
+  p++;
+  if (*p == 'S') t = -t;
+  gpslat = t;
+  p++;
+  if (*p != ',') return; 
+  p++;
+  if (p>=fence) return;
+
+  // LONGITUDE
+  sscanf(p, "%lg", &t);
+  d = int(t/100); t -= d*100;
+  t = d + t/60;
+  p += 9;
+  if (*p != ',') return; 
+  p++;
+  if (*p == 'W') t = -t;
+  gpslong = t;
+  p++;
+  if (*p != ',') return; 
+  p++;
+  if (p>=fence) return;
+
+  // QUALITY
+  quality = *p - '0';
+  if (quality < 0 || quality > 9) return;
+  p++;
+  if (*p != ',') return; 
+  p++;
+  if (p>=fence) return;
+  
+  // NSAT
+  sscanf(p, "%d", &nsat);
+  p += 2;
+  if (*p != ',') return; 
+  p++;
+  
+  // HDOP
+  sscanf(p, "%lg", &hdop);
+  while (*p != ',' && p<fence) p++;
+  if (*p != ',') return; 
+  p++;
+  
+  // Altitude
+  sscanf(p, "%lg", &alt);
+  while (*p != ',' && p<fence) p++;
+  if (*p != ',') return; 
+  p++;
+  if (*p != 'M') return; 
+  p++;
+  if (*p != ',') return; 
+  p++;
+
+  // Geoid separation
+  sscanf(p, "%lg", &gsep);
+  while (*p != ',' && p<fence) p++;
+  if (*p != ',') return; 
+  p++;
+  if (*p != 'M') return; 
+
+  if (gpsutc < outc) jr += 86400; 
+  outc = gpsutc;
+  gpsdata << setprecision(10) << gpsutc + jr << " " << gpslat << " " << gpslong << " " << quality << " " << nsat << '\n';
+
+  stringOk = true;
+}
Index: trunk/Poubelle/archTOI.old/gpsparser.h
===================================================================
--- trunk/Poubelle/archTOI.old/gpsparser.h	(revision 342)
+++ trunk/Poubelle/archTOI.old/gpsparser.h	(revision 342)
@@ -0,0 +1,45 @@
+#ifndef GPSPARSER_H
+#define GPSPARSER_H
+
+#ifndef nb_max_bolo
+#define _archeops		//  Acquisition Archeops (avec transputer) 
+#define programme
+extern "C" {
+#include "archeops.h"
+}
+#endif
+
+class GPSParser {
+public:
+  GPSParser();
+  //GPSParser(GPSParser const&);
+  //GPSParser& operator = (GPSParser const&);
+  virtual ~GPSParser();
+
+  void ProcessBlock(block_type_gps*);
+  
+  bool hasTime();      // Can be internal clock
+  bool hasGPSTime();   // New GPS time
+  bool hasPosition();
+  bool hasAltitude();
+  
+  double getUTC();
+  double getLatitude();
+  double getLongitude();
+  double getAltitude();
+  
+protected:
+
+  char gpsString[100];
+  bool   stringOk;
+  double gpsutc;        //  secondes depuis minuit
+  double gpslat;        //  degres, + = NORD
+  double gpslong;       //  degres, + = EST
+  int    quality;       //  0 = NO FIX, 1 = GPS FIX, 2 = DGPS FIX
+  int    nsat;          //  nombre de satellites utilises
+  double hdop;          //  horizontal dilution of precision
+  double alt;           //  altitude en metres
+  double gsep;          //  separation geoide en metres
+};
+
+#endif
Index: trunk/Poubelle/archTOI.old/ssthandler.cc
===================================================================
--- trunk/Poubelle/archTOI.old/ssthandler.cc	(revision 319)
+++ trunk/Poubelle/archTOI.old/ssthandler.cc	(revision 342)
@@ -7,9 +7,15 @@
 // free parameters = period + phase
 
-#define DIODE_UNUSED_1 3
-#define DIODE_UNUSED_2 7
-
 #include <math.h>
 #include "ssthandler.h"
+
+// diodpermut[i] = channel de la diode i
+int SSTHandler::diodpermut[46]=
+ { 8,24,40, 9,25,41,10,26,42,11,
+  27,43,16,32, 1,17,33, 2,18,34,
+   3,19,35,12,28,44,13,29,45,14,
+  30,46,15,31,47,20,36, 5,21,37,
+   6,22,38, 7,23,39};
+ // voies 0 et 4 non connectees, voie 1 en panne.
 
 SSTHandler::SSTHandler()
@@ -21,6 +27,8 @@
   lastBlkNum = -1;
   
-  Has2Bars(false);
+  //Has2Bars(false);
   prcTodo=0;
+  seuil=100;
+  
 }
 
@@ -36,7 +44,8 @@
     
   prcTodo    = x.prcTodo;
-  has2bars   = x.has2bars;
-  elecOffset = x.elecOffset;
+ // has2bars   = x.has2bars;
+ // elecOffset = x.elecOffset;
   lastBlkNum = x.lastBlkNum;
+  seuil      = x.seuil;
 }
 
@@ -53,7 +62,8 @@
     
   prcTodo    = x.prcTodo;
-  has2bars   = x.has2bars;
-  elecOffset = x.elecOffset;
+ // has2bars   = x.has2bars;
+ // elecOffset = x.elecOffset;
   lastBlkNum = x.lastBlkNum;
+  seuil      = x.seuil;
   
   return *this;
@@ -74,4 +84,7 @@
 }
 
+bool SSTHandler::has2bars = false;
+int  SSTHandler::elecOffset = 1;
+
 void SSTHandler::Has2Bars(bool has, int eo)
 {
@@ -89,5 +102,7 @@
     RemoveOffset();
   }
-  
+  if (prcTodo & findStars) {
+    FindStars();
+  }
 }
 
@@ -101,5 +116,5 @@
   // numero de la diode (0-47) = j*8+l;
   // indice dans le bloc sst du mot de 32 bits (0-17) = j*3+k;
-  // indice dans mot de 32 bits du premier bit utile = 28-4*l;
+  // indice dans mot de 32 bits du premier bit utile = 4*l;
     
   for (j=0; j<48; j++) diod[j] = 0;
@@ -108,9 +123,13 @@
     for (k=0; k<3; k++)
       for (l=0; l<8; l++) {
-        long word = blk->sst[i][j*3+k];
-        word = (word >> (28-4*l)) & 0xF;
-        //printf("diode %d mot %d valeur %d\n", j*8+l, k, word);
+        int4 word = blk->sst[i][j*3+k];
+        word = (word >> (4*l)) & 0xF;
+	// printf("diode %d mot %d valeur %d\n", j*8+l, k, word);
         diod[j*8+l] = (diod[j*8+l] << 4) + word;
       }
+
+  //for (j=0; j<48; j++) if (diod[j]>2047) diod[j] -= 4096;
+  for (j=0; j<48; j++)  diod[j] -= 2048;
+  
 }
 
@@ -124,10 +143,9 @@
   
   for (int j=0; j<nb_per_block*2; j++) {
-    // suppression des positions non utilisees. 3 et 7 ?
-    for (int i=0; i<DIODE_UNUSED_1; i++)
-      diode(j+j0,i) = diodeRaw[j][i];
-    for (int i=DIODE_UNUSED_1; i<46; i++)
-      diode(j+j0,i) = diodeRaw[j][ i<DIODE_UNUSED_2-1 ? i+1 : i+2 ];
-  
+    // permutation des diodes
+    for (int i=0; i<46; i++)
+      diode(j+j0,i) = diodeRaw[j][diodpermut[i]];
+  
+    /*
     // calcul d'un fond sur la rangee. Moyenne clippee.
     float m = 0; float sig = 1.e10;
@@ -147,4 +165,5 @@
     for (int i=0; i<46; i++) 
       diode(j+j0,i) -= m;
+    */
   }
 }
@@ -164,3 +183,66 @@
 }
 
-
+int SSTHandler::getStarZ(int imesure, int istar) // for last block
+{
+  int j0 = starHistLength-(nb_per_block*2);
+  if (imesure+j0<0 || imesure>=nb_per_block*2) return -99999;
+  if (istar < 0 || istar >= stars[imesure+j0].size()) return -99999;
+  return stars[imesure+j0][istar].z;
+}
+
+int SSTHandler::getStarF(int imesure, int istar) // for last block
+{
+  int j0 = starHistLength-(nb_per_block*2);
+  if (imesure+j0<0 || imesure>=nb_per_block*2) return -99999;
+  if (istar < 0 || istar >= stars[imesure+j0].size()) return -99999;
+  return stars[imesure+j0][istar].m;
+}
+
+
+void SSTHandler::FindStars()  // sur les 72 derniers echantillons dans diode.
+{
+  int js0 = starHistLength-(nb_per_block*2);
+  int jd0 = diodeHistLength-(nb_per_block*2);
+  // Decalage vers la gauche de la taille d'un bloc
+  for (int i=0; i<js0; i++) {
+    stars[i] = stars[i+(nb_per_block*2)];
+  }
+  
+  // Recherche d'etoiles
+  for (int i=0; i<(nb_per_block*2); i++) {
+    stars[js0+i].clear();
+    for (int idiode=0; idiode<46; idiode++) {
+      if (diode(jd0+i,idiode) < -seuil) {
+        if (has2bars) {
+          for (int j=-2; j>=-5; j--) {
+            if (diode(jd0+i+j,(idiode+elecOffset)%46) < -seuil) {
+              star s;
+              s.z = idiode;
+              s.m = -diode(jd0+i,idiode);
+              s.t = i; // $CHECK$ need absolute time...
+              stars[js0+i].push_back(s);
+              break;
+            } else if (idiode<45 && diode(jd0+i+j,(idiode+1+elecOffset)%46) > seuil) {
+              star s;
+              s.z = idiode+.5;
+              s.m = -diode(jd0+i,idiode);
+              s.t = i; // $CHECK$ need absolute time...
+              stars[js0+i].push_back(s);
+              break;
+            }
+          }
+        } else {
+          if (diode(jd0+i,idiode) > diode(jd0+i-1,idiode)) {
+            star s;
+            s.z = idiode;
+            s.m = -diode(jd0+i-1,idiode);
+            s.t = i; // $CHECK$ need absolute time...
+            stars[js0+i].push_back(s);
+          }
+        }
+      }
+    }
+  }
+
+
+}
Index: trunk/Poubelle/archTOI.old/ssthandler.h
===================================================================
--- trunk/Poubelle/archTOI.old/ssthandler.h	(revision 319)
+++ trunk/Poubelle/archTOI.old/ssthandler.h	(revision 342)
@@ -26,9 +26,12 @@
          
   void NeedProcess(int prcMask);
-  void Has2Bars(bool, int elecOffset=0); // elecOffset : which wired together
   void ProcessBlock(block_type_sst*);
+
+  static void Has2Bars(bool, int elecOffset=0); // elecOffset : which wired together
   
   int  getRawSignal(int imesure, int idiode); // for last block
   int  getSignal(int imesure, int idiode);    // for last block, imesure<0 -> history
+  int  getStarZ(int imesure, int istar);      // for last block, imesure<0 -> history
+  int  getStarF(int imesure, int istar);      // for last block, imesure<0 -> history
   long getLastBlkNum() {return lastBlkNum;}
 
@@ -39,7 +42,9 @@
   int   prcTodo;
   int   starHistLength;
-  bool  has2bars;
-  int   elecOffset;
   long  lastBlkNum;
+  int   seuil;
+  
+  static bool  has2bars;
+  static int   elecOffset;
   
   inline int& diode(int iSamp, int iDiod) {return diodeT[iSamp*nb_photo_diodes+iDiod];}
@@ -57,4 +62,6 @@
   void RemoveOffset(); // diodeRaw -> diode, avec decalage, 1 echantillon.
   void FindStars(); // sur les 72 derniers echantillons dans diode.
+  
+  static int  diodpermut[46]; // diodpermut[i] = channel de la diode i
 };
 
Index: trunk/Poubelle/archTOI.old/test.cc
===================================================================
--- trunk/Poubelle/archTOI.old/test.cc	(revision 319)
+++ trunk/Poubelle/archTOI.old/test.cc	(revision 342)
@@ -5,4 +5,5 @@
 
 #include "archeopsfile.h"
+#include "archtoi.h"
 #include "toisvr.h"
 
@@ -11,7 +12,16 @@
 int main()
 {	
+
+    ArchTOI toi("test.toi");
+    toi.run("test.data");
+    return(0);
+    
 	TOISvr svr;
 	//svr.SetFile("h99_04_29-15h36m22");
-	svr.SetFile("/home/manip/mnt/planck/aubourg/h99_06_08-11h49m15");
+	//svr.SetFile("Stock:ARCHEOPS:DATA:arch_24:arch-99_06_08:h99_06_08-11h49m15");
+	svr.SetFile("Stock:ARCHEOPS:DATA:arch_26:arch-99_06_28:h99_06_28-11h23m41");
+	//svr.SetFile("/home/manip/mnt/planck/aubourg/h99_06_08-11h49m15");
+	//svr.SetDirectory("Stock:ARCHEOPS:DATA:arch_24:arch-99_06_08:");
+	//svr.SetDirectory("Stock:ARCHEOPS:DATA:arch_24");
 	svr.AddInfo(sampleNum);
 	svr.AddInfo(internalTime);
@@ -20,7 +30,9 @@
 	svr.AddInfo(longitude, true, true);
 	svr.AddInfo(sstSignal,0);
-	svr.AddInfo(sstSignal,10);
+	svr.AddInfo(sstStarZ,0);
 	svr.AddInfo(boloTens,1);
 	svr.AddInfo(boloTens,2);
+	
+	SSTHandler::Has2Bars(true,1);
 	
 	TOIIter iter = svr.DoQuery();
@@ -33,14 +45,18 @@
 	    setprecision(4) << iter.getValue(4) << " " <<
 	                       iter.getValue(5) << " " << iter.getValue(6) << "\n";*/
+	                      // cout << iter.getValue(5) << endl;
+	                       
 	  cout << iter.getTOI(sampleNum) << " " << iter.getTOI(internalTime) << " " <<
-	    setprecision(12) << iter.getTOI(utc) << " " << 
-	    setprecision(7) << iter.getTOI(longitude) << " " << 
-	    setprecision(4) << iter.getTOI(sstSignal) << " " <<
-	                       iter.getTOI(sstSignal,10) << " " << iter.getTOI(boloTens,1) << "\n";
+	    setprecision(12) << iter.getTOI(utc)       << " " << 
+	    setprecision(7)  << iter.getTOI(longitude) << " " << 
+	    setprecision(4)  << iter.getTOI(sstSignal) << " " <<
+	                        iter.getTOI(sstStarZ)  << " " << 
+	                        iter.getTOI(boloTens,1) << "\n";
 	  of << iter.getValue(0) << " " << iter.getValue(1) << " " <<
 	    setprecision(12) << iter.getValue(2) << " " << 
-	    setprecision(7) << iter.getValue(3) << " " << 
-	    setprecision(4) << iter.getValue(4) << " " <<
-	                       iter.getValue(5) << " " << iter.getValue(6) << "\n";
+	    setprecision(7)  << iter.getValue(3) << " " << 
+	    setprecision(4)  << iter.getValue(4) << " " <<
+	                        iter.getValue(5) << " " << 
+	                        iter.getValue(6) << "\n";
 	}
 	
Index: trunk/Poubelle/archTOI.old/toiinterpolator.cc
===================================================================
--- trunk/Poubelle/archTOI.old/toiinterpolator.cc	(revision 319)
+++ trunk/Poubelle/archTOI.old/toiinterpolator.cc	(revision 342)
@@ -58,4 +58,16 @@
 }
 
+bool TOIInterpolator::isNewValue(long sample) 
+{
+  deque<pair>::iterator i = hist.begin();
+  while (i!=hist.end()) {
+    if ((*i).t == sample) return true;
+    if ((*i).t > sample) return false;
+    i++;
+  }
+  return false;
+}
+
+
 long TOIInterpolator::nextSample(long sampleMin)
 {
Index: trunk/Poubelle/archTOI.old/toiinterpolator.h
===================================================================
--- trunk/Poubelle/archTOI.old/toiinterpolator.h	(revision 319)
+++ trunk/Poubelle/archTOI.old/toiinterpolator.h	(revision 342)
@@ -3,4 +3,7 @@
 
 #include <deque>
+
+using namespace std;
+
 
 class TOIInterpolator {
@@ -12,4 +15,5 @@
   double getIValue(long sample);     // can forget before sample
   double getEValue(long sample);     // can forget before sample
+  bool   isNewValue(long sample);    
   long   nextSample(long sampleMin); // the next true sample available
 
Index: trunk/Poubelle/archTOI.old/toiiter.cc
===================================================================
--- trunk/Poubelle/archTOI.old/toiiter.cc	(revision 319)
+++ trunk/Poubelle/archTOI.old/toiiter.cc	(revision 342)
@@ -2,4 +2,5 @@
 #include "toiinterpolator.h"
 #include <dirent.h>
+#include <iostream.h>
 
 // Format bloc GPS
@@ -14,13 +15,21 @@
  fileName = "";
  
+ files.clear();
+
+ isOnBoardRecorder = false;
+   
+ imes=0;
+
  tStart = -9.e99;
- tEnd   = -9.e99;
+ tEnd   = 9.e99;
  
  tBlock0 = -1;
- 
+ perEch = -1;
+ 
+ trigMask = 0;
  rawIter = NULL;
  interp  = NULL;
  lastSample = -1;
- maxLookAhead = 1000;
+ maxLookAhead = 10000;
 
 }
@@ -30,9 +39,12 @@
   fileName = x.fileName;
   files = x.files;
-  curFile = x.curFile;
+  //  curFile = x.curFile; // $CHECK$ DANGER !!
+  curFile = files.find(*(x.curFile));
+  isOnBoardRecorder = x.isOnBoardRecorder;
   imes = x.imes;
   tStart = x.tStart;
   tEnd = x.tEnd;
   tBlock0 = x.tBlock0;
+  perEch = x.perEch;
   trigMask = x.trigMask;
   infos = x.infos;   
@@ -63,14 +75,58 @@
 }
 
+#ifdef __MWERKS__
+#define filesep ':'
+#else
+#define filesep '/'
+#endif
+
 void TOIIter::Init() {
-
-  // $CHECK$ a deplacer, pour gerer repertoires...
+ // On a soit un repertoire, soit un fichier, soit une liste de fichiers....
   if (directory == "") {
-    file = new ArcheopsFile(fileName);
-  } else {
+    if (files.empty()) {   // un seul fichier
+      file = new ArcheopsFile(fileName);
+    } else {
+      curFile = files.begin();
+      file = new ArcheopsFile((*curFile).c_str());
+    }
+  } else { // On a un repertoire a explorer
+    // On cherche soit les fichiers dans le repertoire donne, soit des fichiers
+    // dans un sous-repertoire "arch-YY_MM_DD". Les fichiers ont un nom en
+    // "hYY_MM_DD-hh_mm_ss".
+    // Pour l'enregistreur de vol, les fichiers ont un nom en ARKxxxxxx.DAT
+    if (directory[directory.length()-1] != filesep) 
+      directory += filesep;
     DIR* dir = opendir(directory.c_str());
     struct dirent* ent;
     while ((ent = readdir(dir)) != NULL) {
-      files.insert(ent->d_name);
+      // si c'est un repertoire, avec un nom de jour, il faut l'explorer...
+      if (!strncmp(ent->d_name, "arch-", 5)) {
+        double mjd = ArcheopsFile::decodeMJD(ent->d_name+5) - 2./24.; // ENTIER + .5 en temps local!
+        if (mjd >= tStart - 1. && mjd <= tEnd) {
+          string direc2 = directory + ent->d_name + filesep;
+          DIR* dir2 = opendir(direc2.c_str());
+          struct dirent* ent2;
+          while ((ent2 = readdir(dir2)) != NULL) {
+            if (*ent2->d_name == 'h') {
+              double mjd2 = ArcheopsFile::decodeMJD(ent->d_name+1) - 2./24.;
+              if (mjd2 >= tStart - 1./24. && mjd2 <= tEnd) {
+                files.insert(direc2 + ent2->d_name);
+              }
+            }
+          }
+        }
+      } else {
+        if (!isOnBoardRecorder && *ent->d_name == 'h') {
+          double mjd = ArcheopsFile::decodeMJD(ent->d_name+1) - 2./24.; // $CHECK$ UTCOffset
+          if (mjd >= tStart - 1./24. && mjd <= tEnd) {
+            files.insert(directory + ent->d_name);
+          }
+        } else if (isOnBoardRecorder) {
+          if (strncmp(ent->d_name, "ARK", 3)) continue;
+          char * sfx = ent->d_name + strlen(ent->d_name) - 4;
+          if (strcmp(sfx, ".DAT")) continue;
+          files.insert(directory + ent->d_name);
+        }
+      }
     }
     closedir(dir);
@@ -79,22 +135,42 @@
   }
 
-  if (!file->lastParam()) file->nextBlock(block_param_mask);
+  // On avance jusqu'a avoir au moins un bloc param et un bloc reglage,
+  // car on ne peut rien faire sans...
+  // Si on a des donnees de l'enregistreur de vol, pas de bloc param, et
+  // on en simule un
+  if (!file->lastParam()) {
+    if (isOnBoardRecorder) {
+      extern param_bolo  parametr;
+      block_type_param block;
+      block.param = parametr;
+      valide_block((block_type_modele*)&block, block_param, 0);
+      file->forceBlock((block_type_modele*)&block);
+    } else {
+      file->nextBlock(block_param_mask);
+    }
+  }
   if (!file->lastReglage()) file->nextBlock(block_reglage_mask);
   
   // On cherche un bloc GPS pour avoir la correspondance timestamp/UTC.
   // Pour le moment, on se fonde sur le premier bloc GPS. On pourra faire
-  // mieux en prenant le min de tous les delta_T.
-  
-  tBlock0 = file->getStartMJD();
-
-  file->pushMark();
-  if (file->lastGPS() || file->nextBlock(block_gps_mask)) {
-    // le temps du bloc courant, en secondes
-    double dt = file->blockNum() * file->perBlock();
-    tBlock0 = file->getGPSMJD() - dt/86400.;
-  } else { // pas de bloc GPS...
+  // mieux en prenant le min de tous les delta_T, a condition d'avoir un 
+  // peu plus de details sur la facon dont le GPS est lu.
+  
+  if (tBlock0 < 0) {
     tBlock0 = file->getStartMJD();
-  }
-  file->popMark();
+
+    file->pushMark();
+    if (file->lastGPS() || file->nextBlock(block_gps_mask)) {
+      // le temps du bloc courant, en secondes
+      double dt = file->blockNum() * file->perBlock();
+      tBlock0 = file->getGPSMJD() - dt/86400.;
+    } else { // pas de bloc GPS...
+      tBlock0 = file->getStartMJD();
+    }
+    file->popMark();
+  }
+  
+  if (perEch < 0)
+    perEch = file->perEchant();
 
   bool hasInterp = false;
@@ -109,6 +185,8 @@
           trigMask |= block_bolo_mask;
           break;
+        case gpsTime:
         case longitude:
         case latitude:
+        case altitude:
           trigMask |= block_gps_mask;
           break;
@@ -125,4 +203,10 @@
           file->needSSTProcessMask(SSTHandler::rmveOffset);
           trigMask |= block_sst_mask;
+          break;
+        case sstRaw:
+          trigMask |= block_sst_mask;
+          break;
+        case gyroRaw:
+          trigMask |= block_gyro_mask;
           break;
         case alphaAxis:
@@ -157,5 +241,5 @@
     return rawIter->NextFile();
     
-  if (directory == "") {
+  if (files.empty()) {
     return false;
   } else {
@@ -163,4 +247,5 @@
     curFile++;
     if (curFile == files.end()) return false;
+    cout << "opening file " << (*curFile).c_str() << endl;
     ArcheopsFile* newfile = new ArcheopsFile((*curFile).c_str());
     newfile->grabLastBlocs(*file);
@@ -242,11 +327,23 @@
        return true;
      case boloTens:
+       if (imes==0 && file->llastBolo()==NULL) return false;
+       return file->lastBolo() != NULL;
      case boloRaw:
        return file->lastBolo() != NULL;
      case sstSignal:
+     case sstRaw:
        return file->lastSST() != NULL;
+     case sstStarZ:
+     case sstStarF:
+       return (file->lastSST() != NULL) && (file->getSSTStarZ(index, imes) >= 0);
+     case gyroRaw:
+       return (file->lastGyro() != NULL);
+     case gpsTime:
+       return file->hasGPSTime();
      case longitude:
      case latitude:
-       return file->lastGPS() != NULL;
+       return file->hasGPSPos();
+     case altitude:
+       return file->hasGPSAlt();
      case azimut:
      case alphaAxis:
@@ -271,5 +368,6 @@
        return file->blockNum() * file->nEchBlock() + imes;
      case internalTime:
-       return (file->blockNum() * file->nEchBlock() + imes) * file->perEchant();
+       //return (file->blockNum() * file->nEchBlock() + imes) * file->perEchant();
+       return (file->blockNum() * file->nEchBlock() + imes) * perEch;
      case utc:
       /* printf("utc: %d %d %g %g %g\n",file->blockNum(),
@@ -278,5 +376,6 @@
          (file->blockNum() * file->nEchBlock() + imes) * file->perEchant()/86400.,
          tBlock0+(file->blockNum() * file->nEchBlock() + imes) * file->perEchant()/86400.); */
-       return tBlock0+(file->blockNum() * file->nEchBlock() + imes) * file->perEchant()/86400.;
+       //return tBlock0+(file->blockNum() * file->nEchBlock() + imes) * file->perEchant()/86400.;
+       return tBlock0+(file->blockNum() * file->nEchBlock() + imes) * perEch/86400.;
      case boloTens:
        return file->getMuVBolo(index, imes);
@@ -285,8 +384,20 @@
      case sstSignal:
        return file->getSSTSignal(index, imes);
+     case sstRaw:
+       return file->getSSTRawSignal(index, imes);
+     case sstStarZ:
+       return file->getSSTStarZ(index, imes);
+     case sstStarF:
+       return file->getSSTStarF(index, imes);
+     case gyroRaw:
+       return file->getGyro(index, imes);
+     case gpsTime:
+       return file->getGPSUTC();
      case longitude:
-       return file->getGPSLong(); // $CHECK$ TBD gerer interpolation (dans file)
+       return file->getGPSLong();
      case latitude:
-       return file->getGPSLat();  // $CHECK$ TBD gerer interpolation (dans file)
+       return file->getGPSLat();
+     case altitude:
+       return file->getGPSAlt();
      case azimut:
        return file->getAzimut(imes);
@@ -301,4 +412,7 @@
 bool   TOIIter::newValue(int column) {
    if (column < 0 || column >= infos.size()) return false;
+   if (rawIter) {
+       return interp[column].isNewValue(lastSample);
+   }
    TOIKind kind = infos[column].kind;
    switch (kind) {
@@ -311,9 +425,18 @@
      case boloRaw:
        return file->blockNum() == file->getBoloBlockNum();
+     case sstRaw:
      case sstSignal:
+     case sstStarZ:
+     case sstStarF:
        return file->blockNum() == file->getSSTBlockNum();
+     case gyroRaw:
+       return file->blockNum() == file->getGyroBlockNum();
+     case gpsTime:
+       return file->blockNum() == file->getGPSBlockNum() && imes==0;
      case longitude:
        return file->blockNum() == file->getGPSBlockNum() && imes==0;
      case latitude:
+       return file->blockNum() == file->getGPSBlockNum() && imes==0;
+     case altitude:
        return file->blockNum() == file->getGPSBlockNum() && imes==0;
      case azimut:
@@ -334,4 +457,10 @@
    return (infos[column].interpolated && !newValue(column));
 }
+
+bool TOIIter::isTrig(int column) {
+   if (column < 0 || column >= infos.size()) return false;
+   return infos[column].triggering;
+}
+
  
 TOIKind TOIIter::getKind(int column) {
@@ -370,5 +499,9 @@
  
 int TOIIter::getSampleIndex() {
-   return file->blockNum() * file->nEchBlock() + imes;
+   if (file) {
+     return file->blockNum() * file->nEchBlock() + imes;
+   } else {
+     return lastSample;
+   }
 }
  
@@ -378,8 +511,15 @@
   long sample = rawIter->getSampleIndex();
   for (int i=0; i<infos.size(); i++) {
-    if (rawIter->canGetValue(i) && rawIter->newValue(i))
+    if (rawIter->canGetValue(i) && rawIter->newValue(i)) {
       interp[i].enterValue(rawIter->getValue(i), sample);
+    }
   }
   return true;
 }
 
+block_type_param* TOIIter::lastParam() {
+  if (file) return file->lastParam(); 
+  else return rawIter->lastParam();
+}
+
+
Index: trunk/Poubelle/archTOI.old/toiiter.h
===================================================================
--- trunk/Poubelle/archTOI.old/toiiter.h	(revision 319)
+++ trunk/Poubelle/archTOI.old/toiiter.h	(revision 342)
@@ -9,21 +9,27 @@
 
 enum TOIKind {
-  sampleNum,  // Numero d'echantillon (timer interne transputer)
+  sampleNum,  // Numero d''echantillon (timer interne transputer)
   internalTime, // temps transputer depuis debut manip, en secondes.
   utc,        // UTC (en jours, MJD = JD - 2450000). index=0 : premier bloc GPS. 1: + sioux.
   boloTens,   // tension en microVolts, filtree avec filtre carre indexe par bolometre
   boloRaw,    // tension brute, non filtree indexe par bolometre
-  sstSignal,  // signal brut SST, indice = diode
-  sstStarZ,   // numero de diode d'une eventuelle etoile,   i=etoile 0..n
-  sstStarF,   // flux d'une eventuelle etoile,             -1 si moins de i+1 etoiles
+  boloTemp,   // Kelvins
+  sstSignal,  // signal brut SST, indice = diode, 0-45
+  sstRaw,     // signal brut SST, indice = canal, 0-47
+  sstStarZ,   // numero de diode d''une eventuelle etoile,   i=etoile 0..n
+  sstStarF,   // flux d''une eventuelle etoile,             <0 si moins de i+1 etoiles
+  gyroRaw,    // valeur brute du gyro, index = 0,1,2
+  gpsTime,    // temps fourni par GPS
   longitude,  // position ballon
   latitude,   // position ballon
+  altitude,   // position ballon
   tsid,       // temps sideral en secondes
   azimut,     // a preciser, reconstruit SST, magneto, autres...
   alphaAxis,  // 
   deltaAxis,  //
+  alphaSst,  // 
+  deltaSst,  //
   alphaBolo,  // sur le ciel, indexe par bolometre
   deltaBolo   // sur le ciel, indexe par bolometre
-
 };
 
@@ -41,4 +47,5 @@
    bool    extendValue(int column);  // une valeur plus ancienne, etendue ?
    bool    interpValue(int column);  // une valeur interpolee avec valeur future ?
+   bool    isTrig(int column);  
    TOIKind getKind(int column);
    int     getIndex(int column);     // si plusieurs, exemple, tension bolo 2
@@ -48,6 +55,6 @@
    
    
-   int    getBlockSampleIndex();        // numero d'echantillon dans dernier bloc bolo
-   int    getSampleIndex();             // numero d'echantillon 
+   int    getBlockSampleIndex();        // numero d''echantillon dans dernier bloc bolo
+   int    getSampleIndex();             // numero d''echantillon 
 
    block_type_param*         lastParam();  
@@ -65,4 +72,6 @@
    block_type_gyro_comprime* lastGyroComp();
    block_type_sst_comprime*  lastSSTComp();
+   
+   ArcheopsFile* currentFile() {return file;}
 
 protected:
@@ -77,4 +86,5 @@
    set<string> files;  // list of files in the directory...
    set<string>::iterator curFile;
+   bool  isOnBoardRecorder;
    
    int imes;
@@ -83,4 +93,5 @@
    
    double tBlock0;  // MJD du bloc numero zero...
+   double perEch;   // periode d''echantillonage en secondes
    
    struct info {
@@ -99,5 +110,5 @@
    friend class TOISvr;
    
-   // Gestion de l'interpolation, par delegation a un autre iterateur
+   // Gestion de l''interpolation, par delegation a un autre iterateur
    TOIIter* rawIter; // iterateur sans interpolation, qui avance avec retard
                      // en bufferisant les valeurs. S'il existe, on lui delegue
@@ -106,5 +117,5 @@
    long lastSample;  // last interpolated sample
    long maxLookAhead;
-   bool fetchAhead(); // avance d'une TOI en nourrissant les interpolateurs
+   bool fetchAhead(); // avance d''une TOI en nourrissant les interpolateurs
    
    private:
Index: trunk/Poubelle/archTOI.old/toisvr.cc
===================================================================
--- trunk/Poubelle/archTOI.old/toisvr.cc	(revision 319)
+++ trunk/Poubelle/archTOI.old/toisvr.cc	(revision 342)
@@ -13,8 +13,23 @@
   iter.fileName = f;
 }
+
+void TOISvr::AddFile(string f) {
+  iter.directory = "";
+  iter.files.insert(f);
+}
+
+void TOISvr::SetMJD0(double t0) {
+  iter.tBlock0 = t0;
+}
+
+
+void TOISvr::OnBoardRecorderFiles(bool x) {
+  iter.isOnBoardRecorder = x;
+}
+
   
 void TOISvr::SetTimeInterval(double tStart, double tEnd) {
-  iter.tStart = tStart;
-  iter.tEnd = tEnd;
+  if (tStart>0) iter.tStart = tStart;
+  if (tEnd>0)   iter.tEnd = tEnd;
 }
   
Index: trunk/Poubelle/archTOI.old/toisvr.h
===================================================================
--- trunk/Poubelle/archTOI.old/toisvr.h	(revision 319)
+++ trunk/Poubelle/archTOI.old/toisvr.h	(revision 342)
@@ -10,4 +10,7 @@
   void SetDirectory(string);
   void SetFile(string);
+  void AddFile(string);
+  void OnBoardRecorderFiles(bool);
+  void SetMJD0(double);
   
   void SetTimeInterval(double tStart, double tEnd);
