
;+ ***********************************************************************
; NAME:
;	LECDESCR
;
; PURPOSE:
;	Cette procedure lit le contenu de l'entete des fichiers au
;	format HELIO
;
; CATEGORY:
;	NRH1 Fichier
;
; CALLING SEQUENCE:
;	LECDESCR, Unit, Nomfich, Longrec, Dfixe, Mot, Valcle, Comm
;
; INPUTS:
;	UNIT	Unite de lecture
;
;	NOMFICH	Nom du fichier
;	
; KEYWORD PARAMETERS:
;	Non
;
; OUTPUTS:
;	LONREG	Longueur en octets de l'enregistrement
;	DFIXE	Structure contenant les valeurs entieres ou relles de l'entete
;	MOT	Tableau des mots cles
;	Val	Tableau des valeursa associees aux mots cles
;	COMM	Tableau contenant les commentaires
;
; COMMON BLOCKS:
;	Non
;
; SIDE EFFECTS:
;		Liste des valeurs de DFIXE
;     -		(TAB(1),NBLOCS),     ! NBE DE BLOCS DU DESCRIPTEUR
;     -		(TAB(2),ENTET),      ! NOMBRE DE VALEURS DE L'ENTETE
;     -		(TAB(3),RE),         ! ENTETE D'IMAGE ENTIERE OU REELLE
;     -		(TAB(4),NAXES),      ! NBE D'AXES D'UNE IMAGE
;     -		(TAB(5),NPIX(1)),    ! NBE DE PIXELS SUR LES AXES
;     -		(TAB(10),RI(1)),     ! ORIG ET DELTA REEL (0) OU ENTIER (1)
;     -		(TAB(15),ORIG(1)),   ! VALEUR DE L'ORIGINE SUR LES AXES REELS
;     -		(TAB(20),DELTA(1)),  ! INCREMENT ENTRE CHAQUE PIXEL AXES REELS
;     -		(TAB(15),NORIG(1)),  ! VALEUR DE L'ORIGINE SUR LES AXES ENTIERS
;    -		(TAB(20),NDELTA(1)), ! INCREMENT ENTRE CHAQUE PIXEL AXE ENTIER
;     -		(TAB(25),DATE(1)),   ! DATE DU FICHIER EN JJ/MM/AA
;     -		(TAB(28),HDEB),      ! HEURE DE DEBUT EN MS
;     -		(TAB(29),HFIN),      ! HEURE DE FIN EN MS
;     -		(TAB(30),VMIN),      ! VALEUR MINIMUM DU FICHIER
;     -		(TAB(31),VMAX),      ! VALEUR MAXIMUM DU FICHIER
;     -		(TAB(32),NREG),      ! SI LE DERNIER AXE EST IRREGULIER
;     -          (TAB(32),REG),        ! INCREMENT QUI PEUT LE RECONSTITUER
;     -		(TAB(33),FACBLOC(1)) !FACTEUR DE BLOCAGE POUR UN AXE DONNE
;
; RESTRICTIONS:

;  Si RI(n) est egal a 0, on se sert de ORIG(n) et de DELTA(n) et si RI(n) est 
;  egal a 1, on se sert de NORIG(n) et de NDELTA(n).
;
;  Si NDELTA(n) est egal a 0 pour le dernier axe, on sait que celui-ci est
;  irregulierement echantillonne et dans ce cas la description de chaque
;  pixel se fait en tete d'image, dans la zone reservee par ENTET=Nbe de 
;  donnees (INTEGER*4 ou REAL*4) qui se trouve dans chaque image avant les
;  pixels de l'image
;
; MODIFICATION HISTORY: (bonmartin@obspm.fr)
;	26/11/98	adapte du logiciel XHELIO (JB)
;-*******************************************************************

pro lecdescr, iu, nomfich, longrec, dfixe, mot_cle, val_cle, comment
;
	Taillemax = 200
	MOT_CLE = STRARR(taillemax)
	VAL_CLE = STRARR(taillemax)
	COMMENT = STRARR(taillemax)

S= STR_SEP(nomfich, '.')
Sz= SIZE(s)
IF S(1) EQ 'fts' THEN BEGIN
	LIT_HEADER_NRH1, Nomfich, longrec, dfixe, mot_cle, val_cle
RETURN & END

	CLOSE, IU     
	TAMPON = lonarr(14)

;  lecture du descripteur fixe 
	OPENR, Iu, Nomfich
	READU,Iu,Tampon		
	CLOSE, IU

;		Type d'entete
	IF Tampon(9) EQ 0 THEN  DFIXE = {NRH1_DFIXE_IM} $
		ELSE DFIXE = {NRH1_DFIXE_POS}

  openr, iu, nomfich    
  readu, iu, dfixe
  close, iu
	LONGREC = (Dfixe.nbpix(0) + Dfixe.nbtete) * 4	  ;longueur en octets
    if(Dfixe.nbaxes eq 3) then  Longreg = $
     (Dfixe.nbpix(0) * Dfixe.nbpix(1) + Dfixe.nbtete) * 4 ;longueur en octets 


; taille du descripteur fixe:
    if (longrec/4 lt 64) then begin
	lrest   = longrec / 4 - (64 mod longrec)
	nblfixe = 64 / (longrec / 4)
	if (lrest ne 0) then   nblfixe = nblfixe + 1
    endif else begin
	lrest=(longrec/4)-64
	nblfixe=1
    endelse  

    tc = (Dfixe.nblocs - nblfixe) * longrec
    dummy = strarr (taillemax)
    close, Iu
    openr, Iu, nomfich
    rec1 = bytarr (longrec)

    for k = 1, nblfixe  do readu, Iu, rec1


    by = bytarr(tc)
    readu, Iu, by

    chaine = string ( by( 0:(65533<tc-1) ) )
    num    = 0
    oldcpt = 0
    cpt    = 0
    tempo  = 0b

    repeat begin		;  decomposition de la chaine en sous-chaines.
	repeat begin
	    tempo = byte (strmid (chaine, cpt, 1))
	    cpt = cpt + 1
	endrep until (tempo(0) eq 13b) ; recherche retour chariot (caract 13b).

	cpt = cpt - 1
	dummy(num) = strmid (chaine, oldcpt, cpt - oldcpt)
	num = num + 1
	cpt = cpt + 1
	oldcpt = cpt

    endrep until (dummy(num-1) eq 'END')	;  majuscule necessaire.
 
; Decomposition de chaque element du tableau
    num = 0
    while (dummy(num) ne 'END') do begin
	bidon = dummy(num)		; lit texte
	cpt = 0
	while (strmid(bidon, cpt, 1)  ne  '=')  do cpt = cpt + 1
	mot_cle(num) = strmid (bidon, 0, cpt)
	val_cle(num) = strmid (bidon, cpt + 1, strlen(bidon) -cpt-2)
	num = num + 1
    endwhile
    mot_cle(num) = 'END'  

  end