X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=gnushogi%2Fdspwrappers.c;h=d7f23c8c6d6aa6919d5f94e34ea312c517bc261f;hb=68c554411d120d163045f77a80ad9009f7a73841;hp=5ae9e653162d34e7c67994652d58106f0dd189ce;hpb=8ae7e7d1b257ef36d8a9fd1cd88807954ef10764;p=gnushogi.git diff --git a/gnushogi/dspwrappers.c b/gnushogi/dspwrappers.c index 5ae9e65..d7f23c8 100644 --- a/gnushogi/dspwrappers.c +++ b/gnushogi/dspwrappers.c @@ -7,6 +7,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 * @@ -17,8 +18,8 @@ * * GNU Shogi is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 1, or (at your option) any - * later version. + * Free Software Foundation; either version 3 of the License, + * or (at your option) any later version. * * GNU Shogi is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -26,541 +27,138 @@ * for more details. * * You should have received a copy of the GNU General Public License along - * with GNU Shogi; see the file COPYING. If not, write to the Free - * Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * with GNU Shogi; see the file COPYING. If not, see + * . * ---------------------------------------------------------------------- * */ +/* request *snprintf prototypes*/ +#define _POSIX_C_SOURCE 200112L + #include "gnushogi.h" #include "dspwrappers.h" #include "rawdsp.h" #include "cursesdsp.h" - -void -ChangeAlphaWindow(void) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_ChangeAlphaWindow(); - break; - - case DISPLAY_CURSES: - Curses_ChangeAlphaWindow(); - break; - } -} - - -void -ChangeBetaWindow(void) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_ChangeBetaWindow(); - break; - - case DISPLAY_CURSES: - Curses_ChangeBetaWindow(); - break; - } -} - - -void -ChangeHashDepth(void) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_ChangeHashDepth(); - break; - - case DISPLAY_CURSES: - Curses_ChangeHashDepth(); - break; - } -} - - -void -ChangeSearchDepth(void) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_ChangeSearchDepth(); - break; - - case DISPLAY_CURSES: - Curses_ChangeSearchDepth(); - break; - } -} - - -void -ChangeXwindow(void) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_ChangeXwindow(); - break; - - case DISPLAY_CURSES: - Curses_ChangeXwindow(); - break; - } -} - - -void -ClearScreen(void) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_ClearScreen(); - break; - - case DISPLAY_CURSES: - Curses_ClearScreen(); - break; - } -} - - -void -DoDebug(void) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_DoDebug(); - break; - - case DISPLAY_CURSES: - Curses_DoDebug(); - break; - } -} - - -void -DoTable(short table[NO_SQUARES]) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_DoTable(table); - break; - - case DISPLAY_CURSES: - Curses_DoTable(table); - break; - } -} - - -void -EditBoard(void) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_EditBoard(); - break; - - case DISPLAY_CURSES: - Curses_EditBoard(); - break; - } -} - - -void -ExitShogi(void) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_ExitShogi(); - break; - - case DISPLAY_CURSES: - Curses_ExitShogi(); - break; - } -} - - -void -GiveHint(void) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_GiveHint(); - break; - - case DISPLAY_CURSES: - Curses_GiveHint(); - break; - } -} - - -void -Initialize(void) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_Initialize(); - break; - - case DISPLAY_CURSES: - Curses_Initialize(); - break; - } -} - - -void -OutputMove(void) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_OutputMove(); - break; - - case DISPLAY_CURSES: - Curses_OutputMove(); - break; - } -} - - -void -SetContempt(void) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_SetContempt(); - break; - - case DISPLAY_CURSES: - Curses_SetContempt(); - break; - } -} - - -void -SearchStartStuff(short side) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_SearchStartStuff(side); - break; - - case DISPLAY_CURSES: - Curses_SearchStartStuff(side); - break; - } -} - - -void -SelectLevel(char *sx) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_SelectLevel(sx); - break; - - case DISPLAY_CURSES: - Curses_SelectLevel(sx); - break; - } -} - - -void -ShowCurrentMove(short pnt, short f, short t) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_ShowCurrentMove(pnt, f, t); - break; - - case DISPLAY_CURSES: - Curses_ShowCurrentMove(pnt, f, t); - break; - } -} - - -void -ShowDepth(char ch) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_ShowDepth(ch); - break; - - case DISPLAY_CURSES: - Curses_ShowDepth(ch); - break; - } -} - - -void -ShowGameType(void) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_ShowGameType(); - break; - - case DISPLAY_CURSES: - Curses_ShowGameType(); - break; - } -} - - -void -ShowLine(unsigned short *bstline) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_ShowLine(bstline); - break; - - case DISPLAY_CURSES: - Curses_ShowLine(bstline); - break; - } -} - - -void -ShowMessage(char *s) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_ShowMessage(s); - break; - - case DISPLAY_CURSES: - Curses_ShowMessage(s); - break; - } -} - - -void -ShowPatternCount(short side, short n) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_ShowPatternCount(side, n); - break; - - case DISPLAY_CURSES: - Curses_ShowPatternCount(side, n); - break; - } -} - - -void -ShowPostnValue(short sq) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_ShowPostnValue(sq); - break; - - case DISPLAY_CURSES: - Curses_ShowPostnValue(sq); - break; - } -} - - -void -ShowPostnValues(void) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_ShowPostnValues(); - break; - - case DISPLAY_CURSES: - Curses_ShowPostnValues(); - break; - } -} - - -void -ShowResponseTime(void) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_ShowResponseTime(); - break; - - case DISPLAY_CURSES: - Curses_ShowResponseTime(); - break; - } -} - - -void -ShowResults(short score, unsigned short *bstline, char ch) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_ShowResults(score, bstline, ch); - break; - - case DISPLAY_CURSES: - Curses_ShowResults(score, bstline, ch); - break; - } -} - - -void -ShowSidetoMove(void) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_ShowSidetoMove(); - break; - - case DISPLAY_CURSES: - Curses_ShowSidetoMove(); - break; - } -} - - -void -ShowStage(void) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_ShowStage(); - break; - - case DISPLAY_CURSES: - Curses_ShowStage(); - break; - } -} - - -void -TerminateSearch(int sig) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_TerminateSearch(sig); - break; - - case DISPLAY_CURSES: - Curses_TerminateSearch(sig); - break; - } -} - - -void -UpdateDisplay(short f, short t, short redraw, short isspec) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_UpdateDisplay(f, t, redraw, isspec); - break; - - case DISPLAY_CURSES: - Curses_UpdateDisplay(f, t, redraw, isspec); - break; - } -} - - -void -help(void) -{ - switch (display_type) - { - case DISPLAY_RAW: - case DISPLAY_X: - Raw_help(); - break; - - case DISPLAY_CURSES: - Curses_help(); - break; - } -} - +#include + +#define CASE_DSP_RAW(func,args) \ + case DISPLAY_RAW: \ + case DISPLAY_X: \ + func args; \ + break + +#ifdef HAVE_LIBCURSES +#define CASE_DSP_CURSES(func,args) \ + case DISPLAY_CURSES: \ + func args; \ + break; +#else +#define CASE_DSP_CURSES(func,args) +#endif + +#define DISPLAY_FUNC(func,argsdecl,args) \ + void func argsdecl \ + { \ + switch (display_type) { \ + CASE_DSP_RAW(Raw_ ## func, args); \ + CASE_DSP_CURSES(Curses_ ## func, args); \ + } \ + } +#define DISPLAY_VOIDFUNC(func) \ + DISPLAY_FUNC(func,(void),()) + +#define DISPLAY_STDARGFUNC(func,argsdecl,last,args) \ + void func argsdecl \ + { \ + va_list ap; \ + va_start(ap, last); \ + switch (display_type) { \ + CASE_DSP_RAW(Raw_ ## func, args); \ + CASE_DSP_CURSES(Curses_ ## func, args); \ + } \ + va_end(ap); \ + } + +DISPLAY_VOIDFUNC(ChangeAlphaWindow) +DISPLAY_VOIDFUNC(ChangeBetaWindow) +DISPLAY_VOIDFUNC(ChangeHashDepth) +DISPLAY_VOIDFUNC(ChangeSearchDepth) +DISPLAY_VOIDFUNC(ChangeXwindow) +DISPLAY_VOIDFUNC(ClearScreen) +DISPLAY_VOIDFUNC(DoDebug) +DISPLAY_FUNC(DoTable, (short table[NO_SQUARES]), (table)) +DISPLAY_VOIDFUNC(EditBoard) +DISPLAY_VOIDFUNC(ExitShogi) +DISPLAY_VOIDFUNC(GiveHint) +DISPLAY_VOIDFUNC(Initialize) +DISPLAY_FUNC(ShowNodeCnt, (long NodeCnt), (NodeCnt)) +DISPLAY_VOIDFUNC(OutputMove) +DISPLAY_VOIDFUNC(PollForInput) +DISPLAY_VOIDFUNC(SetContempt) +DISPLAY_FUNC(SearchStartStuff, (short side), (side)) +DISPLAY_FUNC(SelectLevel, (char *sx), (sx)) +DISPLAY_VOIDFUNC(SetupBoard) +DISPLAY_FUNC(ShowCurrentMove, (short pnt, short f, short t), (pnt, f, t)) +DISPLAY_FUNC(ShowDepth, (char ch), (ch)) +DISPLAY_VOIDFUNC(ShowGameType) +DISPLAY_FUNC(ShowLine, (unsigned short *bstline), (bstline)) +DISPLAY_FUNC(ShowMessage, (char *s), (s)) +DISPLAY_STDARGFUNC(AlwaysShowMessage, (const char *format, ...), format, (format, ap)) +DISPLAY_STDARGFUNC(Printf, (const char *format, ...), format, (format, ap)) +DISPLAY_FUNC(ShowPatternCount, (short side, short n), (side, n)) +DISPLAY_FUNC(ShowPostnValue, (short sq), (sq)) +DISPLAY_VOIDFUNC(ShowPostnValues) +DISPLAY_VOIDFUNC(ShowPrompt) +DISPLAY_VOIDFUNC(ShowResponseTime) +DISPLAY_FUNC(ShowResults, (short score, unsigned short *bstline, char ch), (score, bstline, ch)) +DISPLAY_VOIDFUNC(ShowSidetoMove) +DISPLAY_VOIDFUNC(ShowStage) +DISPLAY_FUNC(TerminateSearch, (int sig), (sig)) +DISPLAY_VOIDFUNC(UpdateClocks) +DISPLAY_FUNC(UpdateDisplay, (short f, short t, short redraw, short isspec), (f, t, redraw, isspec)) +DISPLAY_VOIDFUNC(help) + +DISPLAY_FUNC(doRequestInputString, (const char* fmt, char* buffer), (fmt, buffer)) +void RequestInputString(char* buffer, unsigned bufsize) +{ + static char fmt[10]; + int ret = snprintf(fmt, sizeof(fmt), "%%%us", bufsize); + if (ret >= sizeof(fmt)) { + fprintf(stderr, + "Insufficient format-buffer size in %s for bufsize=%u\n", + __FUNCTION__, bufsize); + exit(1); + } + doRequestInputString(fmt, buffer); +} + +/*********/ + +#define CASE_DSPFUNC_RAW(func,args) \ + case DISPLAY_RAW: \ + case DISPLAY_X: \ + return (func args); \ + break + +#ifdef HAVE_LIBCURSES +#define CASE_DSPFUNC_CURSES(func,args) \ + case DISPLAY_CURSES: \ + return (func args); \ + break; +#else +#define CASE_DSPFUNC_CURSES(func,args) +#endif + +#define DISPLAY_INTFUNC(func,argsdecl,args) \ + int func argsdecl \ + { \ + switch (display_type) { \ + CASE_DSPFUNC_RAW(Raw_ ## func, args); \ + CASE_DSPFUNC_CURSES(Curses_ ## func, args); \ + } \ + assert(0); \ + } + +DISPLAY_INTFUNC(GetString, (char* sx), (sx))