PRO  STEPPER2_S1, DATA, INFO_ARRAY=INFO_ARRAY,$
    NOSCALE=NOSCALE, SUBSCRIPT=SUBSCRIPT, $
    COLOR=COLOR, out=out

;on_error,2     ; Return to caller
ans= ''

if n_elements(color) eq 0 then color=255    ; Default color
nimg=data_chk(DATA,/nimages)

if (n_elements(subscript) eq 0) then subscript = indgen(nimg)
n_sel = n_elements(subscript)

;  See if we should turn off the tvscl option:
if keyword_set(noscale) then nosc = 0 else nosc = 2

DISP = nosc

;  Set up info_array if it does not exist already:

if n_elements(info_array) eq 0 then begin
    if n_elements(info_p) eq 0 then         $
        info_array = strtrim(string(indgen(nimg))+' :',2) $
        else info_array = info_p
endif

stt=0 ; Starting image
stt = min(abs(stt-subscript)) & stt=!c & !c=0       ; Get closest index
i = stt

qdisp = 1
qmovie = 0
qprint = 1  ;always print the menu message the first time
qdone = 0
qfirst = 1
while not qdone do begin
    if (qfirst or qprint) then begin
    print, '-------- STEPPER2 Options --------'
    print,'There are ',strtrim(string(nimg),2),' images in the array'
    print,'There are ',strtrim(string(n_sel),2),' images selected'
               ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    print, 'Enter "b" to step backwards
        print, '      "m" for movie mode
    print, '      "s" to select new start index
    print, '      "k" to toggle value of index in out array
    print, '      "q" to quit
    print, '      "anything else" to step forward
    end
    qprint = 0

    if (not qfirst) then ans = get_kbrd(1-qmovie)
    ans = strlowcase(ans)               ; Convert to lower case

    if (qmovie) and (ans ne '') then begin
        qmovie = 0
        qdisp = 0
        ;;ans = '-'             ;zero out the answer which stopped movie (might be "q")
    end

    qdisp = qfirst
    case ans of
    '-': ;do nothing
        'm': begin              ;movie mode selected
                print,'Type anything to abort movie mode ("q" will exit movie and STEPPER)'
                qmovie = 1
                qdisp = 1
             end
    'b': begin
        i = i-1
        if i lt 0 then i=n_sel-1
        qdisp = 1
         end
    'q': qdone = 1
    's': begin
        print,'* Enter the requested start image number',format='($,a)'
        read,i
        i=min(abs(i-subscript)) 
        i=!c
        !c=0
        qdisp = 1
         end
    'k': begin
        if out(i) eq 0 then out(i)=1 else out(i)=0
        xyouts,/norm,0.25,0.45,'Switched out('+strtrim(i,2)+') value to'+string(out(i))
         end
    '*': stop

    else: if (not qfirst) then begin
        i = i + 1
        if i ge n_sel then i = 0
        qdisp = 1
          end
     endcase

    if (qdisp) then begin
    j = subscript(i)                ; Get selected images
        x0=0 & y0=0
        case DISP of                            ; rebinn,noscale
      0: tv,data(*,*,j), x0, y0                 ;    0  ,   0
      2: tvscl,data(*,*,j), x0, y0                  ;    0  ,   2
    endcase
    xyouts,/norm,0.25,0.5,'Currently out('+strtrim(i,2)+') is set to'+string(out(i))

    break_point = 38    ; Break point
    if (get_logenv('STEPPER_BREAK') ne '') then break_point = fix(getenv('STEPPER_BREAK'))
    if strlen(info_array(j)) le break_point then begin
        xyouts,/norm,x0,y0+.90,info_array(j),color=color
    endif else begin
        str0 = strmid(info_array(j),0,break_point)
        str1 = strmid(info_array(j),break_point,strlen(info_array(j)))
        xyouts,/norm,x0+.02,y0+.91,str1,color=color
        xyouts,/norm,x0,y0+.95,str0,color=color
    endelse
    end

    qfirst = 0
end

return
end