'
' Demo shamelessly ripped from the NCURSES PROGRAMMING HOWTO:
' http://tldp.org/HOWTO/NCURSES-Programming-HOWTO
'
' Ported to BaCon in June 2010 - PvE (GPLv3)
'
'------------------------------------------------------------------
INCLUDE "curses.bac"
CONST WIDTH = 30
CONST HEIGHT = 10
DECLARE startx, starty, n_choices TYPE int
DECLARE choices$[] = { "Choice 1", "Choice 2", "Choice 3", "Choice 4", "Exit" } TYPE STRING
n_choices = 5
highlight = 1
choice = 0
initscr()
clear()
noecho()
' Line buffering disabled. pass on everything
cbreak()
startx = (80 - WIDTH) / 2
starty = (24 - HEIGHT) / 2
menu_win = newwin(HEIGHT, WIDTH, starty, startx)
keypad(menu_win, TRUE)
mvprintw(0, 0, "Use arrow keys to go up and down, Press enter to select a choice")
refresh()
CALL print_menu(menu_win, highlight)
WHILE TRUE
c = wgetch(menu_win)
SELECT c
CASE KEY_UP
IF highlight EQ 1 THEN highlight = n_choices
ELSE DECR highlight
CASE KEY_DOWN
IF highlight EQ n_choices THEN highlight = 1
ELSE INCR highlight
CASE 10
choice = highlight
DEFAULT
mvprintw(24, 0, "Charcter pressed is = %3d Hopefully it can be printed as '%c'", c, c)
refresh()
END SELECT
CALL print_menu(menu_win, highlight)
' User did a choice come out of the infinite loop
IF choice NE 0 THEN BREAK
WEND
clrtoeol()
refresh()
endwin()
PRINT "You chose choice ", choice, " with choice string '", choices$[choice - 1], "'."
END
SUB print_menu(NUMBER menu_win, int highlight)
LOCAL x, y, i TYPE int
x = 2
y = 2
box(menu_win, 0, 0)
FOR i = 0 TO n_choices - 1
' High light the present choice
IF highlight EQ i + 1 THEN
wattron(menu_win, A_REVERSE)
mvwprintw(menu_win, y, x, "%s", choices$[i])
wattroff(menu_win, A_REVERSE)
ELSE
mvwprintw(menu_win, y, x, "%s", choices$[i])
END IF
INCR y
NEXT
wrefresh(menu_win)
END SUB