pro seq_frame_info, sttim, entim, mat, hk0, reftime, qplot=qplot, outfil=outfil, qprint=qprint
;+
;NAME:
;	seq_frame_info
;PURPOSE:
;	To read the housekeeping data and to return information on the per-exposure
;	frames ("unwrap" the circular queue)
;SAMPLE CALLING SEQUENCE:
;	seq_frame_info, '25-oct-95 19:50', '25-oct-95 20:10'
;	seq_frame_info, sttim, entim, mat, hk0
;	seq_frame_info, sttim, entim, mat, hk0, outfil='dd.dd', /qprint, /qplot
;HISTORY:
;	Written Dec-95 by M.Morrison
;	20-Feb-96 (MDM) - Added header and put on-line
;	27-Feb-96 (DBG) - Patched a check for no data available
;       18-Mar-96 (MDM) - Made the FOR loop be a long word
;                       - Added reftime output
;	17-Dec-96 (MDM) - Added shifting of the time by 3 sec per entry
;-
;
;sttim = '25-oct-95 19:50'       & entim = '25-oct-95 20:10'
;
mnem = ['mksqfqne', $                           ;number of frame queue entries
        'mksqfqpp', $                           ;frame queue pointer
        'mksqrt' + strtrim(indgen(4)+1,2), $
        'mksqsho' + strtrim(indgen(4)+1,2), $
        'mksqshc' + strtrim(indgen(4)+1,2), $
        'mksqpaa' + strtrim(indgen(4)+1,2), $
        'mksqm1a' + strtrim(indgen(4)+1,2), $
        'mksqm2a' + strtrim(indgen(4)+1,2), $
        'mksqc1a' + strtrim(indgen(4)+1,2), $
        'mksqc2a' + strtrim(indgen(4)+1,2), $
        'mksqadr' + strtrim(indgen(4)+1,2), $
        'mksqdve' + strtrim(indgen(4)+1,2)]
;
hk0 = get_hk_info([sttim, entim], mnem, /nostring)
if (data_type(hk0) ne 8) then begin
    print, 'Read of the HK database failed.....
    mat=-1
    return
end
timarr = int2secarr(hk0.mdi.daytime)
reftime = fmt_tim(hk0.mdi.daytime(0))
;
ss = where(hk0.mdi.value(*,0) ne 0, nss)
ntot = total(hk0.mdi.value(*,0))
if ntot eq 0 then begin
    mat=-1
    return
end
mat = fltarr(ntot, 14)
tit_arr = ['Sec from '+reftime, $
                mnem(0), mnem(1), mnem( indgen(10)*4+2 ), ' ']
ii=0
for i=0L,nss-1 do begin
    v_all = hk0.mdi.value(ss(i),*)              ;a 38 element long array
    n  = v_all(0)                               ;number of entries this time
    st = v_all(1)                               ;starting pointer
    st = (st - n + 4) mod 4                     ;adjust because starting point is for the next MF !?!?
    ;ss3 = (indgen(n) mod 4) + 1
    ;ss3 = (indgen(n) +1) mod 4
    ;ss3 = 3-( (indgen(n) +1) mod 4 )
    ss3 = (indgen(n) +st) mod 4
    mat(ii:ii+n-1, 0)                   = timarr(ss(i))	+ indgen(n)*3	;MDM added +indgen 17-Dec-96
    mat(ii:ii+n-1, 1)                   = n
    mat(ii:ii+n-1, 2)                   = st
    for j=0,9 do mat(ii:ii+n-1, j+3)    = v_all(ss3 + j*4+2)    ;j points to each mnemonic
    ii = ii + n
end
;
ss33 = where(mat(*,3) gt 2L^15, nss33)		;MDM patch 8-Jan-96
if (nss33 ne 0) then mat(ss33,3) = mat(ss33,3) - 2L^16
;
if (keyword_set(qplot)) then begin
    !p.multi=[0,4,4]
    for i=0,12 do plot, mat(*,i), tit=tit_arr(i), /ynozero, psym=10
    plottime
    plottime, 0, 0, 'SEQ_FRAME_INFO  Ver 1.0'
end
;
if (keyword_set(outfil)) then begin
    openw, 1, outfil
    printf, 1, tit_arr(0)
    printf, 1, '          ', tit_arr(1:*)
    printf, 1, rotate(mat,4),format='(14i8)'
    close, 1
    print, 'enscript -r -dlaser ' + outfil
end
;
if (keyword_set(qprint)) then begin
    print, tit_arr(0)
    print, tit_arr(1:*)
    print,rotate(mat,4),format='(14i8)'
end
end
