;+
; Contains the paquets_hfr procedure
;
; :Author:
; Philippe Zarka
;
; :History:
; 2005/07/20: Created
;
; 2005/07/20: Last Edit
;-
;
;+
; lecture des paquets HFR d'un fichier Kronos (~NewBench)
; octets 0:4 = StPk1, 5:8 = time, 9:12 = date,
; 13:14 = nombre de bytes jusqu'a la fin du paquet = entete(18 bytes)+data+EOF
;
; :Params:
; fichierK: in, required, type=sometype
; A parameter named fichierK
; HFR: out, required, type=sometype
; hfr structure (see HFRbuf)
; HFRdata: in, required, type=sometype
; A parameter named HFRdata
;
; :Keywords:
; lun: in, optional, type=sometype
; A keyword named lun
;-
pro PAQUETS_HFR, fichierK, HFR, HFRdata, lun=lun
; HFR = structure HFRbuf ci-dessous
HFRbuf = replicate({an:0, mois:0B, jour:0B, hh:0B, mm:0B, ss:0B, cs:0B, $
entete: bytarr(20), lonP: 0L, $
data: 0L}, 100) ; la zone de data fait 8192 bytes,
; dont "lonP" occupes
if N_elements(lun) eq 0 then lun = -1 ; lun = unit du fichier liste
OpenR, u, /Get_Lun, /block, fichierK,/swap_if_big_endian
e = fstat(u) & b = bytarr(e.size)
ReadU, u, b
Close, u & Free_Lun, u
; print, e.size, ' bytes lus'
nP = 0 & nb = 0L
HFR = HFRbuf & nHFR = n_elements(HFR)
HFRdata=[0b] & nHFRdata = 1L
encore:
nd = fix(b, nb+13, 1)
; nd = swap_endian(nd(0),/swap_if_big_endian)
nd = nd(0) & byteorder,nd,/swap_if_big_endian
if nd lt 0 then nd = long(nd + 65536L)
if nd eq 0 or nd gt 16384 then begin
nb=nb+1
while string(b(nb:nb+3)) ne 'StPk' do begin
nb=nb+1
if nb+3 ge e.size then goto,fin
endwhile
goto,encore
endif
; if nd gt 8192 then begin
; print,'PAQUETS_HFR> nd > 8192'
; PAQUETS_HFR2, fichierK, HFR, HFRdata, lun=lun
; return
; endif
an = fix(b, nb+9, 1) & an = an(0) & byteorder,an,/swap_if_big_endian
HFR(nP).an = an
HFR(nP).mois = b(nb+12) & HFR(nP).jour = b(nb+11)
HFR(nP).hh = b(nb+6) & HFR(nP).mm = b(nb+5)
HFR(nP).ss = b(nb+8) & HFR(nP).cs = b(nb+7)
HFR(nP).entete = b(nb+13:nb+32) & HFR(nP).lonP = nd-19
HFR(nP).data = nHFRdata
HFRdata = [HFRdata, b(nb+33:nb+33+nd-19)] ; EOF inclus
nHFRdata = nHFRdata + nd-19+1
; print, $
; format='("Paquet ",i5," (",i5," bytes), Offset= ",i7,i9,2i3,i6,3i3)', $
; nP+1,nd+15,nb, HFR(nP).an, HFR(nP).mois, HFR(nP).jour, $
; HFR(nP).hh, HFR(nP).mm, HFR(nP).ss, HFR(nP).cs
nb = nb+nd+15
nP = nP + 1
if nb lt e.size then begin
if nP gt nHFR-1 then begin
HFR = [HFR,HFRbuf] & nHFR = n_elements(HFR)
endif
goto,encore
endif
fin:
; print, 'Rearrangement ...'
HFR = HFR(0:nP-1)
; help, HFR
return
end