99 lines
1.6 KiB
Perl
Executable File
99 lines
1.6 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
#
|
|
# Copyright (C) 2003 by Virtusa Corporation
|
|
# http://www.virtusa.com
|
|
#
|
|
# Anuradha Ratnaweera
|
|
# http://www.linux.lk/~anuradha/
|
|
#
|
|
|
|
use Curses;
|
|
|
|
$width = 30;
|
|
$height = 10;
|
|
$startx = 0;
|
|
$starty = 0;
|
|
|
|
@choices = (
|
|
"Choice 1",
|
|
"Choice 2",
|
|
"Choice 3",
|
|
"Choice 4",
|
|
"Exit"
|
|
);
|
|
|
|
$n_choices = @choices;
|
|
|
|
$highlight = 1;
|
|
$choice = 0;
|
|
|
|
initscr();
|
|
clear();
|
|
noecho();
|
|
cbreak();
|
|
$startx = ($COLS - $width) / 2;
|
|
$starty = ($LINES - $height) / 2;
|
|
|
|
$menu_win = newwin($height, $width, $starty, $startx);
|
|
keypad(1);
|
|
keypad($menu_win, 1);
|
|
addstr(0, 0, "Use arrow keys to go up and down, Press enter to select a choice");
|
|
refresh();
|
|
print_menu($menu_win, $highlight);
|
|
|
|
while (1) {
|
|
$c = getch($menu_win);
|
|
if ($c == KEY_UP) {
|
|
if ($highlight == 1) {
|
|
$highlight = $n_choices;
|
|
}
|
|
else {
|
|
$highlight--;
|
|
}
|
|
}
|
|
elsif ($c == KEY_DOWN) {
|
|
if ($highlight == $n_choices) {
|
|
$highlight = 1;
|
|
}
|
|
else {
|
|
$highlight++;
|
|
}
|
|
}
|
|
elsif ($c == '\n') {
|
|
$choice = $highlight;
|
|
}
|
|
else {
|
|
addstr($LINES - 2, 0, "Character pressed is $c");
|
|
refresh();
|
|
}
|
|
print_menu($menu_win, $highlight);
|
|
last if ($choice);
|
|
}
|
|
|
|
addstr($LINES - 2, 0, "You chose choice $choice with choice string $choices[$choice-1]");
|
|
clrtoeol();
|
|
refresh();
|
|
endwin();
|
|
|
|
sub print_menu {
|
|
$menu_win = shift;
|
|
$highlight = shift;
|
|
|
|
$x = 2;
|
|
$y = 2;
|
|
box($menu_win, 0, 0);
|
|
for ($i = 0; $i < $n_choices; $i++) {
|
|
if ($highlight == $i + 1) {
|
|
attron($menu_win, A_REVERSE);
|
|
addstr($menu_win, $y, $x, $choices[$i]);
|
|
attroff($menu_win, A_REVERSE);
|
|
}
|
|
else {
|
|
addstr($menu_win, $y, $x, $choices[$i]);
|
|
}
|
|
$y++;
|
|
}
|
|
refresh($menu_win);
|
|
}
|
|
|