mirror of
https://git.zap.org.au/git/trader.git
synced 2024-12-04 14:46:45 -05:00
Move printing a prompt into answer_yesno(); document wait_for_key()
This commit is contained in:
parent
eac09fecb5
commit
ee992fa02a
20
src/game.c
20
src/game.c
@ -219,14 +219,8 @@ void init_game (void)
|
||||
|
||||
newtxwin(5, 44, 6, WCENTER(44), true, ATTR_NORMAL_WINDOW);
|
||||
|
||||
mvwaddstr(curwin, 2, 2, "Do you need any instructions? ");
|
||||
waddstr(curwin, "[");
|
||||
attrpr(curwin, ATTR_KEYCODE, "Y");
|
||||
waddstr(curwin, "/");
|
||||
attrpr(curwin, ATTR_KEYCODE, "N");
|
||||
waddstr(curwin, "] ");
|
||||
|
||||
if (answer_yesno(curwin)) {
|
||||
mvwaddstr(curwin, 2, 2, "Do you need any instructions?");
|
||||
if (answer_yesno(curwin, ATTR_KEYCODE)) {
|
||||
show_help();
|
||||
}
|
||||
|
||||
@ -319,14 +313,8 @@ void init_game (void)
|
||||
|
||||
newtxwin(5, 50, 6, WCENTER(50), true, ATTR_NORMAL_WINDOW);
|
||||
|
||||
mvwaddstr(curwin, 2, 2, "Does any player need instructions? ");
|
||||
waddstr(curwin, "[");
|
||||
attrpr(curwin, ATTR_KEYCODE, "Y");
|
||||
waddstr(curwin, "/");
|
||||
attrpr(curwin, ATTR_KEYCODE, "N");
|
||||
waddstr(curwin, "] ");
|
||||
|
||||
if (answer_yesno(curwin)) {
|
||||
mvwaddstr(curwin, 2, 2, "Does any player need instructions?");
|
||||
if (answer_yesno(curwin, ATTR_KEYCODE)) {
|
||||
show_help();
|
||||
}
|
||||
|
||||
|
71
src/intf.c
71
src/intf.c
@ -422,18 +422,8 @@ int center3 (WINDOW *win, int y, chtype attr1, chtype attr3, chtype attr2,
|
||||
}
|
||||
|
||||
|
||||
/************************************************************************
|
||||
* Input routines *
|
||||
************************************************************************/
|
||||
|
||||
/*-----------------------------------------------------------------------
|
||||
Function: gettxchar - Read a keyboard character
|
||||
Arguments: win - Window to use
|
||||
Returns: int - Keyboard character
|
||||
|
||||
This function reads a single character from the keyboard. The key is
|
||||
NOT echoed to the screen and the cursor visibility is NOT affected.
|
||||
*/
|
||||
/***********************************************************************/
|
||||
// gettxchar: Read a character from the keyboard
|
||||
|
||||
int gettxchar (WINDOW *win)
|
||||
{
|
||||
@ -1448,42 +1438,43 @@ int gettxlong (WINDOW *win, long *result, long min, long max, long emptyval,
|
||||
}
|
||||
|
||||
|
||||
/*-----------------------------------------------------------------------
|
||||
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
|
||||
/***********************************************************************/
|
||||
// answer_yesno: Wait for a Yes/No answer
|
||||
|
||||
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)
|
||||
bool answer_yesno (WINDOW *win, chtype attr_keys)
|
||||
{
|
||||
int key, oldattr;
|
||||
bool ok;
|
||||
int key;
|
||||
bool done;
|
||||
|
||||
chtype oldattr = getattrs(win);
|
||||
chtype oldbkgd = getbkgd(win);
|
||||
|
||||
|
||||
keypad(win, true);
|
||||
meta(win, true);
|
||||
wtimeout(win, -1);
|
||||
|
||||
oldattr = getbkgd(win) & ~A_CHARTEXT;
|
||||
wbkgdset(win, A_NORMAL | (oldattr & A_COLOR));
|
||||
wattron(win, A_BOLD);
|
||||
waddstr(curwin, " [");
|
||||
attrpr(curwin, attr_keys, "Y");
|
||||
waddstr(curwin, "/");
|
||||
attrpr(curwin, attr_keys, "N");
|
||||
waddstr(curwin, "] ");
|
||||
|
||||
curs_set(CURS_ON);
|
||||
|
||||
do {
|
||||
done = false;
|
||||
while (! done) {
|
||||
key = toupper(wgetch(win));
|
||||
ok = ((key == 'Y') || (key == 'N'));
|
||||
|
||||
if (! ok) {
|
||||
if (key == 'Y' || key == 'N') {
|
||||
done = true;
|
||||
} else {
|
||||
beep();
|
||||
}
|
||||
} while (! ok);
|
||||
}
|
||||
|
||||
curs_set(CURS_OFF);
|
||||
wattron(win, A_BOLD);
|
||||
|
||||
if (key == 'Y') {
|
||||
waddstr(win, "Yes");
|
||||
@ -1491,24 +1482,18 @@ bool answer_yesno (WINDOW *win)
|
||||
waddstr(win, "No");
|
||||
}
|
||||
|
||||
wbkgdset(win, oldbkgd);
|
||||
wattrset(win, oldattr);
|
||||
wbkgdset(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
|
||||
attr - Window attributes to use for message
|
||||
Returns: (nothing)
|
||||
/***********************************************************************/
|
||||
// wait_for_key: Print a message and wait for any key
|
||||
|
||||
This function prints a message, then waits for any key to be pressed.
|
||||
*/
|
||||
|
||||
void wait_for_key (WINDOW *win, int y, int attr)
|
||||
void wait_for_key (WINDOW *win, int y, chtype attr)
|
||||
{
|
||||
keypad(win, true);
|
||||
meta(win, true);
|
||||
|
52
src/intf.h
52
src/intf.h
@ -384,9 +384,22 @@ extern int center3 (WINDOW *win, int y, chtype attr1, chtype attr3,
|
||||
__attribute__((format (printf, 8, 9)));
|
||||
|
||||
|
||||
// Input routines
|
||||
/*
|
||||
Function: gettxchar - Read a character from the keyboard
|
||||
Parameters: win - Window to use (should be curwin)
|
||||
Returns: int - The keyboard character
|
||||
|
||||
This function reads a single character from the keyboard. The key is
|
||||
NOT echoed to the terminal display, nor is the cursor visibility
|
||||
affected.
|
||||
|
||||
This implementation does not handle multibyte characters correctly:
|
||||
each part of the multibyte character most likely appears as a separate
|
||||
keyboard press.
|
||||
*/
|
||||
extern int gettxchar (WINDOW *win);
|
||||
|
||||
|
||||
extern int gettxline (WINDOW *win, char *buf, int bufsize, bool multifield,
|
||||
int maxlen, const char *emptyval, const char *defaultval,
|
||||
const char *allowed, bool stripspc, int y, int x,
|
||||
@ -400,8 +413,41 @@ extern int gettxlong (WINDOW *win, long *result, long min, long max,
|
||||
long emptyval, long defaultval, int y, int x,
|
||||
int fieldsize, int attr);
|
||||
|
||||
extern bool answer_yesno (WINDOW *win);
|
||||
extern void wait_for_key (WINDOW *win, int y, int attr);
|
||||
|
||||
/*
|
||||
Function: answer_yesno - Wait for a Yes/No answer
|
||||
Parameters: win - Window to use (should be curwin)
|
||||
attr_keys - Window rendition to use for key choices
|
||||
Returns: bool - True if Yes was selected, false if No
|
||||
|
||||
This function prompts the user by printing " [Y/N] " using appropriate
|
||||
character renditions ("Y" and "N" in attr_keys, the rest in the current
|
||||
rendition), then waits for the user to press either "Y" (for Yes) or
|
||||
"N" (for No) on the keyboard, then prints the answer using A_BOLD.
|
||||
True is returned if "Y" was selected, false if "N". Note that the
|
||||
cursor becomes invisible after calling this function.
|
||||
*/
|
||||
extern bool answer_yesno (WINDOW *win, chtype attr_keys);
|
||||
|
||||
|
||||
/*
|
||||
Function: wait_for_key - Print a message and wait for any key
|
||||
Parameters: win - Window to use (should be curwin)
|
||||
y - Line on which to print message
|
||||
attr - Character rendition to use for message
|
||||
Returns: (nothing)
|
||||
|
||||
This function displays the message "Press <SPACE> to continue" in the
|
||||
centre of line y in window win, then waits for any key to be pressed.
|
||||
|
||||
The reason the user is not asked "Press any key to continue" is
|
||||
historical: many, many people used to ask "where is the <ANY> key?" :-)
|
||||
|
||||
The current implementation does not handle multibyte characters
|
||||
correctly: only the first byte of the character is consumed, with
|
||||
further bytes left in the keyboard queue.
|
||||
*/
|
||||
extern void wait_for_key (WINDOW *win, int y, chtype attr);
|
||||
|
||||
|
||||
#endif /* included_INTF_H */
|
||||
|
10
src/move.c
10
src/move.c
@ -274,14 +274,8 @@ selection_t get_move (void)
|
||||
wrefresh(curwin);
|
||||
|
||||
// Ask the player to confirm their choice
|
||||
mvwaddstr(curwin, 2, 22, "Are you sure? ");
|
||||
waddstr(curwin, "[");
|
||||
attrpr(curwin, ATTR_KEYCODE, "Y");
|
||||
waddstr(curwin, "/");
|
||||
attrpr(curwin, ATTR_KEYCODE, "N");
|
||||
waddstr(curwin, "] ");
|
||||
|
||||
if (! answer_yesno(curwin)) {
|
||||
mvwaddstr(curwin, 2, 22, "Are you sure?");
|
||||
if (! answer_yesno(curwin, ATTR_KEYCODE)) {
|
||||
selection = SEL_NONE;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user