Class: Landescape::Evaluator::Curses

Inherits:
Base
  • Object
show all
Defined in:
lib/landescape/evaluator/curses.rb

Constant Summary collapse

GRAPHICS_MODES =
{
  1 => ::Curses::A_BOLD,
  4 => ::Curses::A_UNDERLINE,
  5 => ::Curses::A_BLINK,
  7 => ::Curses::A_REVERSE
}

Instance Attribute Summary collapse

Attributes inherited from Base

#statements

Instance Method Summary collapse

Methods inherited from Base

#not_supported, #start, start, #stop, #unknown

Constructor Details

#initialize(statements, window, options = {}) ⇒ Curses

Returns a new instance of Curses.



16
17
18
19
20
21
# File 'lib/landescape/evaluator/curses.rb', line 16

def initialize(statements, window, options = {})
  super

  @saved_cursor  = nil
  @scroll_region = [0, window.maxy]
end

Instance Attribute Details

#windowObject (readonly)

Returns the value of attribute window.



14
15
16
# File 'lib/landescape/evaluator/curses.rb', line 14

def window
  @window
end

Instance Method Details

#carriage_returnObject



69
70
71
# File 'lib/landescape/evaluator/curses.rb', line 69

def carriage_return
  cursor_address window.cury, 0
end

#change_scroll_region(top, bottom) ⇒ Object



43
44
45
46
47
# File 'lib/landescape/evaluator/curses.rb', line 43

def change_scroll_region(top, bottom)
  @scroll_region = [top, bottom]

  window.setscrreg *@scroll_region
end

#clear_eolObject



120
121
122
123
124
# File 'lib/landescape/evaluator/curses.rb', line 120

def clear_eol
  window.clrtoeol

  window.refresh
end

#clear_screenObject



113
114
115
116
117
118
# File 'lib/landescape/evaluator/curses.rb', line 113

def clear_screen
  cursor_address 0, 0

  window.clear
  window.refresh
end

#cursor_address(line, column) ⇒ Object



57
58
59
60
61
# File 'lib/landescape/evaluator/curses.rb', line 57

def cursor_address(line, column)
  scroll_forward if line > window.cury && window.maxy.pred <= window.cury

  window.setpos line, column
end

#cursor_down(step) ⇒ Object



77
78
79
# File 'lib/landescape/evaluator/curses.rb', line 77

def cursor_down(step)
  cursor_address (window.cury + step), window.curx
end

#cursor_invisibleObject



101
102
103
# File 'lib/landescape/evaluator/curses.rb', line 101

def cursor_invisible
  window.curs_set 0
end

#cursor_left(step) ⇒ Object



85
86
87
# File 'lib/landescape/evaluator/curses.rb', line 85

def cursor_left(step)
  cursor_address window.cury, (window.curx - step)
end

#cursor_right(step) ⇒ Object



81
82
83
# File 'lib/landescape/evaluator/curses.rb', line 81

def cursor_right(step)
  cursor_address window.cury, (window.curx + step)
end

#cursor_up(step) ⇒ Object



73
74
75
# File 'lib/landescape/evaluator/curses.rb', line 73

def cursor_up(step)
  cursor_address (window.cury - step), window.curx
end

#cursor_visibleObject



97
98
99
# File 'lib/landescape/evaluator/curses.rb', line 97

def cursor_visible
  window.curs_set 2
end

#exit_attribute_modeObject



39
40
41
# File 'lib/landescape/evaluator/curses.rb', line 39

def exit_attribute_mode
  window.attroff GRAPHICS_MODES.values.inject(:|)
end

#keypad_localObject



109
110
111
# File 'lib/landescape/evaluator/curses.rb', line 109

def keypad_local
  window.keypad false
end

#keypad_xmitObject



105
106
107
# File 'lib/landescape/evaluator/curses.rb', line 105

def keypad_xmit
  window.keypad true
end

#newlineObject



63
64
65
66
67
# File 'lib/landescape/evaluator/curses.rb', line 63

def newline
  scroll_forward if window.cury == @scroll_region.last

  cursor_address (window.cury.succ), 0
end


23
24
25
26
27
# File 'lib/landescape/evaluator/curses.rb', line 23

def print(str)
  window.addstr str

  window.refresh
end

#restore_cursorObject



93
94
95
# File 'lib/landescape/evaluator/curses.rb', line 93

def restore_cursor
  cursor_address *@saved_cursor
end

#save_cursorObject



89
90
91
# File 'lib/landescape/evaluator/curses.rb', line 89

def save_cursor
  @saved_cursor = [window.cury, window.curx]
end

#scroll_forwardObject



53
54
55
# File 'lib/landescape/evaluator/curses.rb', line 53

def scroll_forward
  window.scrl 1
end

#scroll_reverseObject



49
50
51
# File 'lib/landescape/evaluator/curses.rb', line 49

def scroll_reverse
  window.scrl -1
end

#set_attributes(*modes) ⇒ Object



29
30
31
32
33
34
35
36
37
# File 'lib/landescape/evaluator/curses.rb', line 29

def set_attributes(*modes)
  return exit_attribute_mode if modes.empty?

  modes.each do |mode|
    next unless attr = GRAPHICS_MODES[mode]

    window.attron attr
  end
end