FUNCTION gis_cqlds,qlds
;

;n=tag_names(qlds)
  
 ; i=qlds.ql_id
  ;print,i
  ;m=strarr(n_elements(n))

;  result = {ql_id:i,ql_no:qlds.ql_no,hdrtext:qlds.hdrtext,header:qlds.header,test:qlds.(5)}
;openw,1,'tes.pro'
;l=''
;for a=0,n_ELEMENTS(n)-1 do l=l+n(a)+":qlds.("+strcompress(string(a),/remove_all)+"),"
;printf,1,l
;close,/all

;for q=0,n_ELEMENTS(n)-1 do print,n(q)
;for q=0,n_ELEMENTS(n)-1 do m(q)=n(q)
 ; help,m
IF tag_exist(qlds,"DETDATA") THEN BEGIN
  qlds_names=tag_names(qlds)
  qlds_detdesc=where(qlds_names eq 'DETDESC')
  m1=[qlds.(qlds_detdesc(0)),qlds.(qlds_detdesc(0))]
  result={QL_ID:qlds.(0),QL_NO:qlds.(1),HDRTEXT:qlds.(2),HEADER:qlds.(3),DETDATA:qlds.(4),DETDESC:m1,BACKGROUND:qlds.(6),WAVECAL:qlds.(7),DEL_TIMEDATA:qlds.(8),DEL_TIMEDESC:qlds.(9),INS_XDATA:qlds.(10),INS_XDESC:qlds.(11),INS_YDATA:qlds.(12),INS_YDESC:qlds.(13),OPSLBITSDATA:qlds.(14),OPSLBITSDESC:qlds.(15),OPS_LDATA:qlds.(16),OPS_LDESC:qlds.(17),OPSRBITSDATA:qlds.(18),OPSRBITSDESC:qlds.(19),OPS_RDATA:qlds.(20),OPS_RDESC:qlds.(21),SLITBITSDATA:qlds.(22),SLITBITSDESC:qlds.(23),SLIT_POSDATA:qlds.(24),SLIT_POSDESC:qlds.(25),MIR_POSDATA:qlds.(26),MIR_POSDESC:qlds.(27),PTCHBITSDATA:qlds.(28),PTCHBITSDESC:qlds.(29),PITCHDATA:qlds.(30),PITCHDESC:qlds.(31),YAW_BITSDATA:qlds.(32),YAW_BITSDESC:qlds.(33),YAWDATA:qlds.(34),YAWDESC:qlds.(35),EV_LEVELDATA:qlds.(36),EV_LEVELDESC:qlds.(37),ONBOARDXDATA:qlds.(38),ONBOARDXDESC:qlds.(39),ONBOARDYDATA:qlds.(40),ONBOARDYDESC:qlds.(41),EV_RECOGDATA:qlds.(42),EV_RECOGDESC:qlds.(43),EV_DETECDATA:qlds.(44),EV_DETECDESC:qlds.(45),EV_VALIDDATA:qlds.(46),EV_VALIDDESC:qlds.(47),BKGRCDDATA:qlds.(48),BKGRCDDESC:qlds.(49),BKGPCDDATA:qlds.(50),BKGPCDDESC:qlds.(51),BKGULCDDATA:qlds.(52),BKGULCDDESC:qlds.(53)}
  
endif
IF NOT tag_exist(qlds,"DETDATA") THEN BEGIN  
  qlds_names=tag_names(qlds)
  qlds_detdesc=where(qlds_names eq 'DETDESC')
  m1=[qlds.(qlds_detdesc(0)),qlds.(qlds_detdesc(0))]

  result={QL_ID:qlds.(0),QL_NO:qlds.(1),HDRTEXT:qlds.(2),HEADER:qlds.(3),DETDESC:m1,BACKGROUND:qlds.(5),WAVECAL:qlds.(6),DEL_TIMEDATA:qlds.(7),DEL_TIMEDESC:qlds.(8),INS_XDATA:qlds.(9),INS_XDESC:qlds.(10),INS_YDATA:qlds.(11),INS_YDESC:qlds.(12),OPSLBITSDATA:qlds.(13),OPSLBITSDESC:qlds.(14),OPS_LDATA:qlds.(15),OPS_LDESC:qlds.(16),OPSRBITSDATA:qlds.(17),OPSRBITSDESC:qlds.(18),OPS_RDATA:qlds.(19),OPS_RDESC:qlds.(20),SLITBITSDATA:qlds.(21),SLITBITSDESC:qlds.(22),SLIT_POSDATA:qlds.(23),SLIT_POSDESC:qlds.(24),MIR_POSDATA:qlds.(25),MIR_POSDESC:qlds.(26),PTCHBITSDATA:qlds.(27),PTCHBITSDESC:qlds.(28),PITCHDATA:qlds.(29),PITCHDESC:qlds.(30),YAW_BITSDATA:qlds.(31),YAW_BITSDESC:qlds.(32),YAWDATA:qlds.(33),YAWDESC:qlds.(34),EV_LEVELDATA:qlds.(35),EV_LEVELDESC:qlds.(36),ONBOARDXDATA:qlds.(37),ONBOARDXDESC:qlds.(38),ONBOARDYDATA:qlds.(39),ONBOARDYDESC:qlds.(40),EV_RECOGDATA:qlds.(41),EV_RECOGDESC:qlds.(42),EV_DETECDATA:qlds.(43),EV_DETECDESC:qlds.(44),EV_VALIDDATA:qlds.(45),EV_VALIDDESC:qlds.(46),BKGRCDDATA:qlds.(47),BKGRCDDESC:qlds.(48),BKGPCDDATA:qlds.(49),BKGPCDDESC:qlds.(50),BKGULCDDATA:qlds.(51),BKGULCDDESC:qlds.(52)}
  FOR i = 0,N_ELEMENTS(qlds.detdesc)-1 DO BEGIN
    IF qlds.detdesc(i).ixstop(0) GE 0 THEN BEGIN
      da = gt_windata(qlds,i)
      result.detdesc(i).handle = handle_create(value=da,/no_copy)
    END
  END
  FOR i = 0,N_ELEMENTS(qlds.detdesc)-1 DO BEGIN
    IF qlds.detdesc(i).ixstop(0) GE 0 THEN BEGIN
      da = gt_windata(qlds,i)*0.
      result.detdesc(i+N_ELEMENTS(qlds.detdesc)).handle = handle_create(value=da,/no_copy)
      
    END
  END
ENDIF ELSE BEGIN
;;;;;;;;;;;;;;;;;;
  qlds_names=tag_names(qlds)
  qlds_detdesc=where(qlds_names eq 'DETDESC')
  m1=[qlds.(qlds_detdesc(0)),qlds.(qlds_detdesc(0))]
  m1.IXSTop(0,*)=[reform(qlds.(qlds_detdesc(0)).IXSTop(0,*)),reform((qlds.(qlds_detdesc(0)).IXSTOP)(0,*)+max((qlds.(qlds_detdesc(0)).IXSTOP)(0,*)+1.))]
  m1.IXSTart(0,*)=[reform(qlds.(qlds_detdesc(0)).IXSTart(0,*)),reform(max(qlds.(qlds_detdesc(0)).IXSTart(0,*))+2048+qlds.(qlds_detdesc(0)).IXSTart(0,*))]
  m1.label=[qlds.(qlds_detdesc(0)).label,qlds.(qlds_detdesc(0)).label+'_ERROR']
  newdata=[qlds.detdata,qlds.detdata*0]  
  result={QL_ID:qlds.(0),QL_NO:qlds.(1),HDRTEXT:qlds.(2),HEADER:qlds.(3),DETDATA:newdata,DETDESC:m1,BACKGROUND:qlds.(6),WAVECAL:qlds.(7),DEL_TIMEDATA:qlds.(8),DEL_TIMEDESC:qlds.(9),INS_XDATA:qlds.(10),INS_XDESC:qlds.(11),INS_YDATA:qlds.(12),INS_YDESC:qlds.(13),OPSLBITSDATA:qlds.(14),OPSLBITSDESC:qlds.(15),OPS_LDATA:qlds.(16),OPS_LDESC:qlds.(17),OPSRBITSDATA:qlds.(18),OPSRBITSDESC:qlds.(19),OPS_RDATA:qlds.(20),OPS_RDESC:qlds.(21),SLITBITSDATA:qlds.(22),SLITBITSDESC:qlds.(23),SLIT_POSDATA:qlds.(24),SLIT_POSDESC:qlds.(25),MIR_POSDATA:qlds.(26),MIR_POSDESC:qlds.(27),PTCHBITSDATA:qlds.(28),PTCHBITSDESC:qlds.(29),PITCHDATA:qlds.(30),PITCHDESC:qlds.(31),YAW_BITSDATA:qlds.(32),YAW_BITSDESC:qlds.(33),YAWDATA:qlds.(34),YAWDESC:qlds.(35),EV_LEVELDATA:qlds.(36),EV_LEVELDESC:qlds.(37),ONBOARDXDATA:qlds.(38),ONBOARDXDESC:qlds.(39),ONBOARDYDATA:qlds.(40),ONBOARDYDESC:qlds.(41),EV_RECOGDATA:qlds.(42),EV_RECOGDESC:qlds.(43),EV_DETECDATA:qlds.(44),EV_DETECDESC:qlds.(45),EV_VALIDDATA:qlds.(46),EV_VALIDDESC:qlds.(47),BKGRCDDATA:qlds.(48),BKGRCDDESC:qlds.(49),BKGPCDDATA:qlds.(50),BKGPCDDESC:qlds.(51),BKGULCDDATA:qlds.(52),BKGULCDDESC:qlds.(53)}
  FOR i = 0,N_ELEMENTS(qlds.detdesc)-1 DO BEGIN
    IF qlds.detdesc(i).ixstop(0) GE 0 THEN BEGIN
      da = gt_windata(qlds,i)
      result.detdesc(i).handle = handle_create(value=da,/no_copy)
    END
  END
  FOR i = 0,N_ELEMENTS(qlds.detdesc)-1 DO BEGIN
    IF qlds.detdesc(i).ixstop(0) GE 0 THEN BEGIN
      da = gt_windata(qlds,i)*0.
      result.detdesc(i+N_ELEMENTS(qlds.detdesc)).handle = handle_create(value=da,/no_copy)      
    END
  END
  ;;;;;;;;;
ENDELSE

result.ql_id = 0 ;; To get a new QL_NO.
qlmgr,result
delete_qlds,qlds
RETURN,result
END