summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorscw <scw@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2005-08-20 12:24:41 +0800
committerscw <scw@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2005-08-20 12:24:41 +0800
commit34cf57ef87003c70803627584de6ca152bf107e5 (patch)
tree24d37fe6bab1a6ea1a5838ad923ec639e8defacd
parent6976aea4703c91fbfe7fd6c3a6a1094ae98e2002 (diff)
downloadpttbbs-34cf57ef87003c70803627584de6ca152bf107e5.tar
pttbbs-34cf57ef87003c70803627584de6ca152bf107e5.tar.gz
pttbbs-34cf57ef87003c70803627584de6ca152bf107e5.tar.bz2
pttbbs-34cf57ef87003c70803627584de6ca152bf107e5.tar.lz
pttbbs-34cf57ef87003c70803627584de6ca152bf107e5.tar.xz
pttbbs-34cf57ef87003c70803627584de6ca152bf107e5.tar.zst
pttbbs-34cf57ef87003c70803627584de6ca152bf107e5.zip
add_io(0, 0) before reading data from user when playing chess
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@3067 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r--mbbsd/chess.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/mbbsd/chess.c b/mbbsd/chess.c
index 55199d9c..7cb9290d 100644
--- a/mbbsd/chess.c
+++ b/mbbsd/chess.c
@@ -22,6 +22,8 @@
#define CHESS_DRAWING_PHOTOED_WARN_ROW 22
#define CHESS_DRAWING_PHOTOED_STEP_ROW 23
+#define CONNECT_PEER() add_io(info->sock, 0)
+#define IGNORE_PEER() add_io(0, 0)
static const char * const ChessHintStr[] = {
" q 認輸離開",
@@ -380,8 +382,10 @@ ChessPlayFuncMy(ChessInfo* info)
ChessDrawLine(info, CHESS_DRAWING_WARN_ROW);
bell();
+ IGNORE_PEER();
getdata(b_lines, 0, "對方要求悔棋,是否接受?(y/N)",
buf, sizeof(buf), DOECHO);
+ CONNECT_PEER();
ChessDrawHelpLine(info);
if (buf[0] == 'y' || buf[0] == 'Y') {
@@ -448,8 +452,10 @@ ChessPlayFuncMy(ChessInfo* info)
case 'q':
{
char buf[4];
+ IGNORE_PEER();
getdata(b_lines, 0, "是否真的要認輸?(y/N)",
buf, sizeof(buf), DOECHO);
+ CONNECT_PEER();
ChessDrawHelpLine(info);
if (buf[0] == 'y' || buf[0] == 'Y') {
@@ -462,8 +468,10 @@ ChessPlayFuncMy(ChessInfo* info)
case 'p':
{
char buf[4];
+ IGNORE_PEER();
getdata(b_lines, 0, "是否真的要和棋?(y/N)",
buf, sizeof(buf), DOECHO);
+ CONNECT_PEER();
ChessDrawHelpLine(info);
if (buf[0] == 'y' || buf[1] == 'Y') {
@@ -518,8 +526,10 @@ ChessPlayFuncHis(ChessInfo* info)
case 'q':
{
char buf[4];
+ IGNORE_PEER();
getdata(b_lines, 0, "是否真的要認輸?(y/N)",
buf, sizeof(buf), DOECHO);
+ CONNECT_PEER();
ChessDrawHelpLine(info);
if (buf[0] == 'y' || buf[0] == 'Y') {
@@ -622,7 +632,7 @@ ChessPlayFuncWatch(ChessInfo* info)
result = ChessStepReceive(info, &info->step_tmp);
if (result == CHESS_STEP_FAILURE) {
- add_io(0, 0);
+ IGNORE_PEER();
info->sock = -1;
break;
} else if (result == CHESS_STEP_UNDO_ACC) {
@@ -899,7 +909,7 @@ ChessPlay(ChessInfo* info)
info->lefthand[0] = info->lefthand[1] = 0;
/* main loop */
- add_io(info->sock, 0);
+ CONNECT_PEER();
for (game_result = CHESS_RESULT_CONTINUE;
game_result == CHESS_RESULT_CONTINUE;
info->turn ^= 1) {
@@ -908,7 +918,7 @@ ChessPlay(ChessInfo* info)
ChessDrawLine(info, CHESS_DRAWING_WARN_ROW);
game_result = info->play_func[(int) info->turn](info);
}
- add_io(0, 0);
+ IGNORE_PEER();
if (info->sock)
close(info->sock);