;+ ; 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