X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=gnushogi%2Frawdsp.c;h=2c4d185244a67b91efec35ad55392185e5d8ca16;hb=ff70bcfb13c2a38180a93d689baccd6828dfda90;hp=e8e7b9809bd026c793f6a1fc6b639989401c8a4d;hpb=829c253a7cc2d3e1a9ed643485c1b1a92967b5df;p=gnushogi.git diff --git a/gnushogi/rawdsp.c b/gnushogi/rawdsp.c index e8e7b98..2c4d185 100644 --- a/gnushogi/rawdsp.c +++ b/gnushogi/rawdsp.c @@ -4,6 +4,7 @@ * ---------------------------------------------------------------------- * Copyright (c) 1993, 1994, 1995 Matthias Mutz * Copyright (c) 1999 Michael Vanier and the Free Software Foundation + * Copyright (c) 2008, 2013, 2014 Yann Dirson and the Free Software Foundation * * GNU SHOGI is based on GNU CHESS * @@ -35,8 +36,10 @@ #include #include #include +#ifndef WIN32 #include #include +#endif #include "gnushogi.h" #include "rawdsp.h" @@ -217,15 +220,20 @@ Raw_Initialize(void) if (XSHOGI) { -#ifdef HAVE_SETLINEBUF - setlinebuf(stdout); +#ifdef WIN32 + /* needed because of inconsistency between MSVC run-time system and gcc includes */ + setbuf(stdout, NULL); #else -# ifdef HAVE_SETVBUF +#ifdef HAVE_SETVBUF setvbuf(stdout, NULL, _IOLBF, BUFSIZ); +#else +# ifdef HAVE_SETLINEBUF + setlinebuf(stdout); # else -# error "Need setlinebuf() or setvbuf() to compile gnushogi!" +# error "Need setvbuf() or setlinebuf() to compile gnushogi!" # endif #endif +#endif printf("GNU Shogi %s\n", PACKAGE_VERSION); } @@ -341,11 +349,14 @@ Raw_EditBoard(void) a = black; - do + while(1) { scanf("%s", s); found = 0; + if (s[0] == '.') + break; + if (s[0] == '#') { for (sq = 0; sq < NO_SQUARES; sq++) @@ -355,10 +366,13 @@ Raw_EditBoard(void) } ClearCaptured(); + continue; } - if (s[0] == 'c') + if (s[0] == 'c') { a = otherside[a]; + continue; + } if (s[1] == '*') { @@ -371,41 +385,37 @@ Raw_EditBoard(void) break; } } - - c = -1; - r = -1; + continue; } - else - { - c = COL_NAME(s[1]); - r = ROW_NAME(s[2]); + + c = COL_NUM(s[1]); + r = ROW_NUM(s[2]); + + if ((c < 0) || (c >= NO_COLS) || (r < 0) || (r >= NO_ROWS)) { + continue; } - if ((c >= 0) && (c < NO_COLS) && (r >= 0) && (r < NO_ROWS)) - { - sq = locn(r, c); - color[sq] = a; - board[sq] = no_piece; + sq = locn(r, c); + color[sq] = a; + board[sq] = no_piece; - for (i = no_piece; i <= king; i++) + for (i = no_piece; i <= king; i++) + { + if ((s[0] == pxx[i]) || (s[0] == qxx[i])) { - if ((s[0] == pxx[i]) || (s[0] == qxx[i])) - { - if (s[3] == '+') - board[sq] = promoted[i]; - else - board[sq] = i; + if (s[3] == '+') + board[sq] = promoted[i]; + else + board[sq] = i; - found = 1; - break; - } + found = 1; + break; } - - if (found == 0) - color[sq] = neutral; } + + if (found == 0) + color[sq] = neutral; } - while (s[0] != '.'); for (sq = 0; sq < NO_SQUARES; sq++) Mvboard[sq] = ((board[sq] != Stboard[sq]) ? 10 : 0); @@ -944,6 +954,11 @@ Raw_ShowPostnValues(void) void Raw_PollForInput(void) { +#ifdef WIN32 + DWORD cnt; + if (!PeekNamedPipe(GetStdHandle(STD_INPUT_HANDLE), NULL, 0, NULL, &cnt, NULL)) + cnt = 1; +#else static struct pollfd pollfds[1] = { /* [0] = */ { /* .fd = */ STDIN_FILENO, /* .events = */ POLLIN } }; int cnt = poll(pollfds, sizeof(pollfds)/sizeof(pollfds[0]), 0); @@ -951,6 +966,7 @@ Raw_PollForInput(void) perror("polling standard input"); ExitShogi(); } +#endif if (cnt) { /* if anything to read, or error occured */ if (!flag.timeout) flag.back = true; /* previous: flag.timeout = true; */