def press ch 
      ch = ch.getbyte(0) if ch.class==String ## 1.9
      $log.debug " XXX press #{ch} " if $log.debug? 
      case ch
      when -1
        return
      when KEY_F1, 27, ?\C-q.getbyte(0)   
        @stop = true
        return
      when KEY_ENTER, 10, 13
        #$log.debug "popup ENTER : #{@selected_index} "
        #$log.debug "popup ENTER :  #{field.name}" if !field.nil?
        @stop = true
        return
      when ?\C-d.getbyte(0)
        @start += @height-1
        bounds_check
      when KEY_UP
        @start -= 1
        @start = 0 if @start < 0
      when KEY_DOWN
        @start += 1
        bounds_check
      when ?\C-b.getbyte(0)
        @start -= @height-1
        @start = 0 if @start < 0
      when 0
        @start = 0
      end
      Ncurses::Panel.update_panels();
      Ncurses.doupdate();
      @window.wrefresh
    end
def press ch 
      ch = ch.getbyte(0) if ch.class==String ## 1.9
      $log.debug " XXX press #{ch} " if $log.debug? 
      case ch
      when -1
        return
      when KEY_F1, 27, ?\C-q.getbyte(0)   
        @stop = true
        return
      when KEY_ENTER, 10, 13
        #$log.debug "popup ENTER : #{@selected_index} "
        #$log.debug "popup ENTER :  #{field.name}" if !field.nil?
        @stop = true
        return
      when ?\C-d.getbyte(0)
        @start += @height-1
        bounds_check
      when KEY_UP
        @start -= 1
        @start = 0 if @start < 0
      when KEY_DOWN
        @start += 1
        bounds_check
      when ?\C-b.getbyte(0)
        @start -= @height-1
        @start = 0 if @start < 0
      when 0
        @start = 0
      end
      Ncurses::Panel.update_panels();
      Ncurses.doupdate();
      @window.wrefresh
    end
handles a key, commandline