From 20f6f6e73a25a42aa66ff4c0eee738ec84dec813 Mon Sep 17 00:00:00 2001 From: John Zaitseff Date: Mon, 11 Jul 2011 14:43:16 +1000 Subject: [PATCH] Add the wait_for_key() function --- src/intf.c | 128 +++++++++++++++++++++++++++++++++-------------------- src/intf.h | 10 ++++- 2 files changed, 88 insertions(+), 50 deletions(-) diff --git a/src/intf.c b/src/intf.c index 6bc19ca..92de4a6 100644 --- a/src/intf.c +++ b/src/intf.c @@ -104,6 +104,7 @@ void init_screen (void) init_pair(YELLOW_ON_BLACK, COLOR_YELLOW, COLOR_BLACK); init_pair(YELLOW_ON_BLUE, COLOR_YELLOW, COLOR_BLUE); init_pair(YELLOW_ON_CYAN, COLOR_YELLOW, COLOR_CYAN); + init_pair(CYAN_ON_BLUE, COLOR_CYAN, COLOR_BLUE); init_pair(BLACK_ON_WHITE, COLOR_BLACK, COLOR_WHITE); bkgd(ATTR_ROOT_WINDOW); @@ -389,54 +390,6 @@ int attrpr (WINDOW *win, int attr, const char *format, ...) * Input routines * ************************************************************************/ -/*----------------------------------------------------------------------- - Function: answer_yesno - Read a Yes/No answer and return true/false - Arguments: win - Window to use - Returns: bool - true if Yes ("Y") was selected, else false - - This function waits for either "Y" or "N" to be pressed on the - keyboard. If "Y" was pressed, "Yes." is printed and true is returned. - If "N" was pressed, "No." is printed and false is returned. Note that - the cursor becomes invisible after this function. -*/ - -bool answer_yesno (WINDOW *win) -{ - int key, oldattr; - bool ok; - - - keypad(win, true); - meta(win, true); - wtimeout(win, -1); - - oldattr = getbkgd(win) & ~A_CHARTEXT; - wattron(win, A_BOLD); - curs_set(CURS_ON); - - do { - key = toupper(wgetch(win)); - ok = ((key == 'Y') || (key == 'N')); - - if (! ok) { - beep(); - } - } while (! ok); - - curs_set(CURS_OFF); - - if (key == 'Y') { - waddstr(win, "Yes"); - } else { - waddstr(win, "No"); - } - - wattrset(win, oldattr); - wrefresh(win); - return (key == 'Y'); -} - - /*----------------------------------------------------------------------- Function: gettxchar - Read a keyboard character Arguments: win - Window to use @@ -1185,3 +1138,82 @@ int gettxstring (WINDOW *win, char **bufptr, bool multifield, int y, int x, return gettxline(win, *bufptr, BUFSIZE, multifield, BUFSIZE - 1, "", "", NULL, true, y, x, fieldsize, attr, modified); } + + +/*----------------------------------------------------------------------- + Function: answer_yesno - Read a Yes/No answer and return true/false + Arguments: win - Window to use + Returns: bool - true if Yes ("Y") was selected, else false + + This function waits for either "Y" or "N" to be pressed on the + keyboard. If "Y" was pressed, "Yes." is printed and true is returned. + If "N" was pressed, "No." is printed and false is returned. Note that + the cursor becomes invisible after this function. +*/ + +bool answer_yesno (WINDOW *win) +{ + int key, oldattr; + bool ok; + + + keypad(win, true); + meta(win, true); + wtimeout(win, -1); + + oldattr = getbkgd(win) & ~A_CHARTEXT; + wattron(win, A_BOLD); + curs_set(CURS_ON); + + do { + key = toupper(wgetch(win)); + ok = ((key == 'Y') || (key == 'N')); + + if (! ok) { + beep(); + } + } while (! ok); + + curs_set(CURS_OFF); + + if (key == 'Y') { + waddstr(win, "Yes"); + } else { + waddstr(win, "No"); + } + + wattrset(win, oldattr); + wrefresh(win); + return (key == 'Y'); +} + + +/*----------------------------------------------------------------------- + Function: wait_for_key - Print a message and wait for any key + Arguments: win - Window to use + y - Line on which to print message + Returns: (nothing) + + This function prints a message, then waits for any key to be pressed. +*/ + +void wait_for_key (WINDOW *win, int y) +{ + int key, oldattr; + + + keypad(win, true); + meta(win, true); + wtimeout(win, -1); + + oldattr = getbkgd(win) & ~A_CHARTEXT; + curs_set(CURS_OFF); + wattrset(win, ATTR_WAITFORKEY_STR); + + center(win, y, false, "[ Press to continue ] "); + wrefresh(win); + + key = wgetch(win); + + wattrset(win, oldattr); +} diff --git a/src/intf.h b/src/intf.h index bd69a78..3cddde9 100644 --- a/src/intf.h +++ b/src/intf.h @@ -110,6 +110,7 @@ enum color_pairs { YELLOW_ON_BLACK, YELLOW_ON_BLUE, YELLOW_ON_CYAN, + CYAN_ON_BLUE, BLACK_ON_WHITE, }; @@ -120,8 +121,10 @@ enum color_pairs { #define ATTR_NORMAL_WINDOW ATTR(COLOR_PAIR(WHITE_ON_BLUE), A_NORMAL) #define ATTR_STATUS_WINDOW ATTR(COLOR_PAIR(BLACK_ON_WHITE), A_REVERSE) #define ATTR_WINDOW_TITLE ATTR(COLOR_PAIR(YELLOW_ON_BLACK) | A_BOLD, A_REVERSE) -#define ATTR_KEYCODE_STR ATTR(COLOR_PAIR(YELLOW_ON_BLACK) | A_BOLD, A_REVERSE) #define ATTR_INPUT_FIELD ATTR(COLOR_PAIR(WHITE_ON_BLACK), A_BOLD | '_') +#define ATTR_KEYCODE_STR ATTR(COLOR_PAIR(YELLOW_ON_BLACK) | A_BOLD, A_REVERSE) +#define ATTR_HIGHLIGHT_STR ATTR(COLOR_PAIR(YELLOW_ON_BLUE) | A_BOLD, A_BOLD) +#define ATTR_WAITFORKEY_STR ATTR(COLOR_PAIR(CYAN_ON_BLUE), A_NORMAL) /************************************************************************ @@ -157,7 +160,6 @@ extern int attrpr (WINDOW *win, int attr, const char *format, ...) // Input routines -extern bool answer_yesno (WINDOW *win); extern int gettxchar (WINDOW *win); extern int gettxline (WINDOW *win, char *buf, int bufsize, bool multifield, int maxlen, const char *emptyval, const char *defaultval, @@ -166,4 +168,8 @@ extern int gettxline (WINDOW *win, char *buf, int bufsize, bool multifield, extern int gettxstring (WINDOW *win, char **bufptr, bool multifield, int y, int x, int fieldsize, int attr, bool *modified); +extern bool answer_yesno (WINDOW *win); +extern void wait_for_key (WINDOW *win, int y); + + #endif /* included_INTF_H */