function eis_extractByte, dataArray, offset, startBit, numBits
    return, dataArray[offset, *]
end

; Extracts a 2-byte word
function eis_extractWord, dataArray, offset, startBit, numBits
    return, ishft(fix(dataArray[offset, *]), 8) or fix(dataArray[offset + 1, *])
end



function eis_extractDoubleWord, dataArray, offset, startBit, numBits
    return, long(ishft(long(dataArray[offset,     *]), 24) or $
            ishft(long(dataArray[offset + 1, *]), 16) or $
            ishft(long(dataArray[offset + 2, *]),  8) or $
                  long(dataArray[offset + 3, *]))
end


function eis_ccsds_hdrs, file

    openr, lu, file, /get_lun

    ccsds_hdr  = bytarr(10)
    ccsds_hdrs = bytarr(10L * 100000, /nozero)

    on_ioerror, FINISH

    flag = 0
    ccsds_hdr_count = 0L

    ; Read in the data...
    while not eof(lu) do begin

        ; Get the Ccsds headers
        readu, lu, ccsds_hdr

        ccsds_hdr_count = ccsds_hdr_count + 1
;print,ccsds_hdr_count
        if flag eq 0 then begin
            flag = 1
            ccsds_hdrs = [ccsds_hdr]
        endif else begin
            ccsds_hdrs = [ccsds_hdrs,ccsds_hdr]
        endelse

        ms_len = (ccsds_hdr[4] and '3F'X)
        ms_len = ishft(ms_len, 8)
        ls_len = ccsds_hdr[5]
        len = (ms_len or ls_len) - 3

        seq_flag = ishft(ccsds_hdr[2], -6)
;print,ms_len, ls_len,len
;        print,seq_flag

        temp = bytarr(len)
        readu, lu, temp
        
    endwhile

FINISH:
    close, lu
    free_lun,lu

    ccsds_hdrs = reform(temporary(ccsds_hdrs), 10, ccsds_hdr_count)
    return, ccsds_hdrs
    
end

