FUNCTION mk_mask,indmp,logic
;+
;An sswhere_event subroutine, to make the bit masks given the menu vectors
;the unique modes, and the roadmap or index.
;
;   28-Oct-1993 (SLF) Added /original switch to gt_res call
;-
COMMON wdgtind,unq_modes,unq_dpmodes,unq_res,unq_comp,unq_filta,unq_filtb,unq_dpes
COMMON wdgtvecs,mode_vec,dpmode_vec,res_vec,comp_vec,filta_vec,filtb_vec,dpe_vec,cmplt,satrtn


    mdsz=size(unq_modes)
    dmsz=size(unq_dpmodes)
    rssz=size(unq_res)
    cpsz=size(unq_comp)
    fasz=size(unq_filta)
    fbsz=size(unq_filtb)
    dpsz=size(unq_dpes)

   ;initialize mask vectors

    rdsz=size(indmp)
    zero=replicate(0,rdsz(1))
    one=replicate(1,rdsz(1))

    prcntmsk=zero
    satrtnmsk=zero
    mdmsk=zero
    dpmdmsk=zero
    resmsk=zero
    compmsk=zero
    afiltmsk=zero
    bfiltmsk=zero
    dpemsk=zero
    msk=zero

    ;create the individual masks

    ;check to see if 'indmp' is roadmap or index

    tags= tag_names(indmp)

    if (tags(0) eq 'GEN') then begin

      prcntd=where(indmp.sxt.percentd GE (fix(cmplt)*255)/100)
      prcnto=where(indmp.sxt.percentover LE satrtn)

    endif else begin

      prcntd=where(indmp.percentd GE (fix(cmplt)*255)/100)
      prcnto=where(indmp.percentover LE satrtn)

    endelse

    if prcntd(0) ne -1 then prcntmsk(prcntd) = 1  
    if prcnto(0) ne -1 then satrtnmsk(prcnto) = 1 

    if n_elements(unq_modes) gt 1 then begin

      for i=0,mdsz(1)-1 do $
          mdmsk(where(gt_expmode(indmp) eq unq_modes(i))) = mode_vec(i)

    endif else begin

      mdmsk=one

    endelse

    if n_elements(unq_dpmodes) gt 1 then begin

      for i=0,dmsz(1)-1 do $
          dpmdmsk(where(gt_dp_mode(indmp) eq unq_dpmodes(i))) = dpmode_vec(i)

    endif else begin

      dpmdmsk=one

    endelse

    if n_elements(unq_res) gt 1 then begin

      for i=0,rssz(1)-1 do $
          resmsk(where(gt_res(indmp,/original) eq unq_res(i))) = res_vec(i)

    endif else begin

      resmsk=one

    endelse

    if n_elements(unq_comp) gt 1 then begin

      for i=0,cpsz(1)-1 do $
          compmsk(where(gt_comp(indmp) eq unq_comp(i))) = comp_vec(i)

    endif else begin

      compmsk=one

    endelse

    if n_elements(unq_filta) gt 1 then begin

      for i=0,fasz(1)-1 do $
          afiltmsk(where(gt_filta(indmp) eq unq_filta(i))) = filta_vec(i)

    endif else begin

      afiltmsk=one

    endelse

    if n_elements(unq_filtb) gt 1 then begin

      for i=0,fbsz(1)-1 do $
          bfiltmsk(where(gt_filtb(indmp) eq unq_filtb(i))) = filtb_vec(i)

    endif else begin

      bfiltmsk=one

    endelse

    if n_elements(unq_dpes) gt 1 then begin

      for i=0,dpsz(1)-1 do $
          dpemsk(where(gt_dpe(indmp) eq unq_dpes(i))) = dpe_vec(i)

    endif else begin

      dpemsk=one

    endelse

    ;put it together

    CASE logic OF

    'OR':  msk= prcntmsk AND satrtnmsk AND mdmsk AND dpmdmsk AND resmsk  $
		AND compmsk AND (afiltmsk OR bfiltmsk) AND dpemsk

    'AND': msk= prcntmsk AND satrtnmsk AND mdmsk AND dpmdmsk AND resmsk AND $
		compmsk AND afiltmsk AND bfiltmsk AND dpemsk

    ENDCASE    ;logic

    return,msk

    end
