--- eboard-1.1.3.old/Documentation/GNUChess4.txt +++ eboard-1.1.3/Documentation/GNUChess4.txt @@ -1,60 +0,0 @@ - -GNU Chess 4 - -This document discusses the issues related to running the -GNU Chess 4.x engine together with eboard. - -Felipe Bergo - -1. What is GNU Chess 4 ? -2. Getting GNU Chess 4 -3. Compiling and installing -4. Playing - ---- - -1. What is GNU Chess 4 ? - -GNU Chess 4 is a Free Software chess engine, that -can be modified under the terms of the GNU General -Public License. - -It is the predecessor of GNU Chess 5 and newer -versions. - -2. Getting GNU Chess 4 - -You may be able to find GNU Chess 4.x in some GNU FTP -mirrors or in old source code CDs of operating system -distributions. - -Note that GNU Chess 4 and 5 may conflict with each other -(you can have only one of them installed, or eboard -will be confused) - -3. Compiling and Installing - -Directions about installing are in the src/README and -src/INSTALL files. More likely you'll just - -cd src -./configure -make -(become root) -make install - - -4. Playing - -The 'gnuchessx' binary must be in the PATH. -The book location is defined in compile time, if you -didn't change the prefix, it'll be -/usr/local/lib/gnuchess.data - -To play against GNU Chess 4, use the -"Peer -> Play against Engine -> GNU Chess 4" command. - -gnuchessx will be run without change to the -current directory. If you want to change -bookfile location, recompile GNU Chess. - --- eboard-1.1.3.old/Documentation/GNUChess5.txt +++ eboard-1.1.3/Documentation/GNUChess5.txt @@ -36,7 +36,7 @@ For GNU Chess 5, use the Peer -> Play against Engine -> Generic Engine command. -The "GNU Chess 4" command is meant and optimized for -GNU Chess 4.x only. +The "GNU Chess 6" command is meant and optimized for +GNU Chess 6.x only. --- eboard-1.1.3.old/Documentation/Makefile +++ eboard-1.1.3/Documentation/Makefile @@ -1,5 +1,5 @@ -DOCS = Makefile DGTboard.txt FICS-Timeseal.txt GNUChess5.txt Sjeng.txt Crafty.txt GNUChess4.txt Scripts.txt Themes.txt +DOCS = Makefile DGTboard.txt FICS-Timeseal.txt GNUChess5.txt Sjeng.txt Crafty.txt Scripts.txt Themes.txt dist: cp -f $(DOCS) ../$(DIST)/Documentation --- eboard-1.1.3.old/README +++ eboard-1.1.3/README @@ -15,11 +15,25 @@ - Particular Engine Support (most of them comply with the XBoard protocol, but eboard supports additional features): - - GNU Chess 4 - Crafty - Sjeng (multi-variant engine) See the eboard site for links to get them. + The engines listed below were added locally: + + - Amundsen + - Donna Chess - (*) + - Dreamer + - GNU Chess 6 - (*) + - Fruit Chess 2.1 - (*) + - Glaurung 1.21 - (*) + - Kiwi Chess + - Phalanx + - Stockfish - (*) + - Toga II - (*) + - Winter Chess - (*) + +(*) via PolyGlot UCI Adapter - Crafty Full support. --- eboard-1.1.3.old/board.cc +++ eboard-1.1.3/board.cc @@ -1,5 +1,4 @@ /* - eboard - chess client http://www.bergo.eng.br/eboard https://github.com/fbergo/eboard @@ -19,13 +18,14 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ #include #include #include #include + +#include "xpcodes.h" #include "eboard.h" #include "board.h" #include "chess.h" @@ -2151,23 +2151,40 @@ static EditBoard *eb_last=0; -void eb_runengine_nobm(GtkMenuItem *item,gpointer data) { - int *i; - EngineProtocol *ep; - Position p; +void eb_runengine_nobm (GtkMenuItem *item, gpointer data) { + int *i; + EngineProtocol *ep; + Position p; + + if (!eb_last) return; + if (!eb_last->mygame) return; + i = (int *) data; + + switch (*i) + { + +//-------------------------------------------------------------------- + +case PROTO_AMUNDSEN : ep = new AmundsenProtocol (); break; +case PROTO_CRAFTY : ep = new CraftyProtocol (); break; +case PROTO_DONNA_CHESS : ep = new DonnaChessProtocol (); break; +case PROTO_DREAMER : ep = new DreamerProtocol (); break; +case PROTO_FRUIT_CHESS : ep = new FruitChessProtocol (); break; +case PROTO_GLAURUNG : ep = new GlaurungProtocol (); break; +case PROTO_GNUPOLY : ep = new GnuPolyProtocol (); break; +case PROTO_KIWI_CHESS : ep = new KiwiChessProtocol (); break; +case PROTO_PHALANX : ep = new PhalanxProtocol (); break; +case PROTO_SJENG : ep = new SjengProtocol (); break; +case PROTO_STOCKFISH : ep = new StockfishProtocol (); break; +case PROTO_TOGA_CHESS : ep = new TogaChessProtocol (); break; +case PROTO_WINTER_CHESS : ep = new WinterChessProtocol (); break; +case PROTO_XBOARD : ep = new XBoardProtocol (); break; - if (!eb_last) return; - if (!eb_last->mygame) return; - - i=(int *)data; - - switch(*i) { - case 0: ep=new GnuChess4Protocol(); break; - case 1: ep=new CraftyProtocol(); break; - case 2: ep=new SjengProtocol(); break; - case 3: ep=new XBoardProtocol(); break; - default: return; - } +//-------------------------------------------------------------------- + +default: + return; + } p=eb_last->mygame->getCurrentPosition(); ep->setInitialPosition(&p); @@ -2183,16 +2200,33 @@ if (!eb_last->mygame) return; ebm=(EngineBookmark *)data; - if (!ebm) return; - switch(ebm->proto) { - case 0: ep=new XBoardProtocol(); break; - case 1: ep=new CraftyProtocol(); break; - case 2: ep=new SjengProtocol(); break; - case 3: ep=new GnuChess4Protocol(); break; - default: return; - } + switch (ebm->proto) + { + +//-------------------------------------------------------------------- + +case PROTO_AMUNDSEN : ep = new AmundsenProtocol (); break; +case PROTO_CRAFTY : ep = new CraftyProtocol (); break; +case PROTO_DONNA_CHESS : ep = new DonnaChessProtocol (); break; +case PROTO_DREAMER : ep = new DreamerProtocol (); break; +case PROTO_FRUIT_CHESS : ep = new FruitChessProtocol (); break; +case PROTO_GLAURUNG : ep = new GlaurungProtocol (); break; +case PROTO_GNUPOLY : ep = new GnuPolyProtocol (); break; +case PROTO_KIWI_CHESS : ep = new KiwiChessProtocol (); break; +case PROTO_PHALANX : ep = new PhalanxProtocol (); break; +case PROTO_SJENG : ep = new SjengProtocol (); break; +case PROTO_STOCKFISH : ep = new StockfishProtocol (); break; +case PROTO_TOGA_CHESS : ep = new TogaChessProtocol (); break; +case PROTO_WINTER_CHESS : ep = new WinterChessProtocol (); break; +case PROTO_XBOARD : ep = new XBoardProtocol (); break; + +//-------------------------------------------------------------------- + +default: + return; + } p=eb_last->mygame->getCurrentPosition(); ep->setInitialPosition(&p); @@ -2204,23 +2238,52 @@ vector mi; list::iterator ei; unsigned int i; - static int sindex[4]={0,1,2,3}; - eb_last=this; +// The selected engines and order of entries in "sindex[]" must be +// consistent with the "mi.push_back" commands executed a few lines +// further down. + +#define NUM_SINDEX 12 + + static int sindex [NUM_SINDEX] = + { + PROTO_AMUNDSEN , + PROTO_DONNA_CHESS , + PROTO_DREAMER , + PROTO_FRUIT_CHESS , + PROTO_GLAURUNG , + PROTO_KIWI_CHESS , + PROTO_PHALANX , + PROTO_SJENG , + PROTO_STOCKFISH , + PROTO_TOGA_CHESS , + PROTO_WINTER_CHESS , + PROTO_XBOARD + }; + eb_last=this; popmenu=gtk_menu_new(); - mi.push_back(gtk_menu_item_new_with_label("GNU Chess 4...")); - mi.push_back(gtk_menu_item_new_with_label("Crafty...")); - mi.push_back(gtk_menu_item_new_with_label("Sjeng...")); - mi.push_back(gtk_menu_item_new_with_label(_("Generic XBoard Engine..."))); - mi.push_back(gtk_separator_menu_item_new()); - - for(i=0;i<4;i++) - gtk_signal_connect(GTK_OBJECT(mi[i]),"activate", - GTK_SIGNAL_FUNC(eb_runengine_nobm), - (gpointer) (&sindex[i]) ); - + mi.push_back (gtk_menu_item_new_with_label ("Amundsen" )); + mi.push_back (gtk_menu_item_new_with_label ("Donna Chess" )); + mi.push_back (gtk_menu_item_new_with_label ("Dreamer" )); + mi.push_back (gtk_menu_item_new_with_label ("Fruit Chess" )); + mi.push_back (gtk_menu_item_new_with_label ("Glaurung" )); + mi.push_back (gtk_menu_item_new_with_label ("Kiwi Chess" )); + mi.push_back (gtk_menu_item_new_with_label ("Phalanx" )); + mi.push_back (gtk_menu_item_new_with_label ("Sjeng" )); + mi.push_back (gtk_menu_item_new_with_label ("Stockfish" )); + mi.push_back (gtk_menu_item_new_with_label ("Toga II" )); + mi.push_back (gtk_menu_item_new_with_label ("Winter Chess" )); + mi.push_back (gtk_menu_item_new_with_label ("XBoard Engine" )); + + mi.push_back (gtk_separator_menu_item_new()); + + for(i = 0; i < NUM_SINDEX; i++) + gtk_signal_connect (GTK_OBJECT (mi [i]), "activate", + GTK_SIGNAL_FUNC (eb_runengine_nobm), + (gpointer) (&sindex [i])); + if (!global.EnginePresets.empty()) { note=gtk_menu_item_new_with_label(_("If you pick a bookmark, the engine\n"\ "will play the next move, ignoring\n"\ @@ -2244,6 +2307,7 @@ gshow(mi[i]); gtk_menu_shell_append(GTK_MENU_SHELL(popmenu),mi[i]); } + if (note) { gshow(note); gtk_menu_shell_append(GTK_MENU_SHELL(popmenu), note); --- eboard-1.1.3.old/clock.cc +++ eboard-1.1.3/clock.cc @@ -281,14 +281,7 @@ dest[0] = 0; return; case TC_SPM: - if (flags & TCF_GNUCHESS4QUIRK) { - if (value[0]%60) - snprintf(dest,maxlen,"level 1 %d:%02d",value[0]/60,value[0]%60); - else - snprintf(dest,maxlen,"level 1 %d",value[0]/60); - } else { - snprintf(dest,maxlen,"st %d",value[0]); - } + snprintf(dest,maxlen,"st %d",value[0]); break; case TC_ICS: if (value[0]%60) --- eboard-1.1.3.old/clock.h +++ eboard-1.1.3/clock.h @@ -100,8 +100,6 @@ gint clockmaster_timeout(gpointer data); -#define TCF_GNUCHESS4QUIRK 0x01 - class TimeControl { public: TimeControl(); --- eboard-1.1.3.old/dlg_connect.cc +++ eboard-1.1.3/dlg_connect.cc @@ -1,5 +1,4 @@ /* - eboard - chess client http://www.bergo.eng.br/eboard https://github.com/fbergo/eboard @@ -19,12 +18,13 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ #include #include #include + +#include "xpcodes.h" #include "stl.h" #include "dlg_connect.h" #include "protocol.h" @@ -445,11 +445,22 @@ ChessGame::variantName( (*ei)->mode ) ); uf[0]->setText(z); - switch( (*ei)->proto ) { - case 0: g_strlcpy(x,_("generic xboard v2"),64); break; - case 1: strcpy(x,"crafty"); break; - case 2: strcpy(x,"sjeng"); break; - case 3: strcpy(x,"GNU chess 4.x"); break; + switch( (*ei)->proto ) + { +case PROTO_AMUNDSEN : strcpy (x, "Amundsen" ); break; +case PROTO_CRAFTY : strcpy (x, "Crafty" ); break; +case PROTO_DONNA_CHESS : strcpy (x, "Donna Chess" ); break; +case PROTO_DREAMER : strcpy (x, "Dreamer" ); break; +case PROTO_FRUIT_CHESS : strcpy (x, "Fruit Chess" ); break; +case PROTO_GLAURUNG : strcpy (x, "Glaurung" ); break; +case PROTO_GNUPOLY : strcpy (x, "GNU Chess Poly" ); break; +case PROTO_KIWI_CHESS : strcpy (x, "Kiwi Chess" ); break; +case PROTO_PHALANX : strcpy (x, "Phalanx" ); break; +case PROTO_SJENG : strcpy (x, "Sjeng" ); break; +case PROTO_STOCKFISH : strcpy (x, "Stockfish" ); break; +case PROTO_TOGA_CHESS : strcpy (x, "Toga II" ); break; +case PROTO_WINTER_CHESS : strcpy (x, "Winter Chess" ); break; +case PROTO_XBOARD : strcpy (x, "XBoard Engine" ); break; } snprintf(z,128,_("Engine Type: %s (uneditable)"),x); --- eboard-1.1.3.old/eboard.6 +++ eboard-1.1.3/eboard.6 @@ -30,7 +30,8 @@ command. .PP \fBeboard\fP is a graphical chess board. It acts as an interface to -chess engines (like GNU Chess, Sjeng and Crafty) and Internet Chess Servers +chess engines (such as GNU Chess, Phalanx and Toga II) and +Internet Chess Servers (ICS) like FICS (http://www.freechess.org), and works as a browser for chess games saved as PGN (Portable Game Notation) files. .B eboard --- eboard-1.1.3.old/eboard.spec.in +++ eboard-1.1.3/eboard.spec.in @@ -38,7 +38,7 @@ %files %defattr(-,root,root) -%doc ChangeLog COPYING INSTALL README TODO Documentation/Crafty.txt Documentation/FICS-Timeseal.txt Documentation/GNUChess4.txt Documentation/GNUChess5.txt Documentation/Scripts.txt Documentation/Sjeng.txt Documentation/Themes.txt +%doc ChangeLog COPYING INSTALL README TODO Documentation/Crafty.txt Documentation/FICS-Timeseal.txt Documentation/GNUChess5.txt Documentation/Scripts.txt Documentation/Sjeng.txt Documentation/Themes.txt %prefix/bin/* %prefix/man/*/* %prefix/share/eboard/* --- eboard-1.1.3.old/mainwindow.cc +++ eboard-1.1.3/mainwindow.cc @@ -1,5 +1,4 @@ /* - eboard - chess client http://www.bergo.eng.br/eboard https://github.com/fbergo/eboard @@ -19,7 +18,6 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ #include @@ -29,6 +27,8 @@ #include #include #include + +#include "xpcodes.h" #include "mainwindow.h" #include "chess.h" #include "bugpane.h" @@ -57,20 +57,35 @@ { (gchar *)N_("/_Peer"), NULL, NULL, 0, (gchar *)"" }, { (gchar *)N_("/Peer/Connect to _FICS"),NULL,GTK_SIGNAL_FUNC(peer_connect_fics),0,NULL }, { (gchar *)N_("/Peer/ICS _Bookmarks"), NULL, NULL, FA_ICSBOOKMARKS, (gchar *)"" }, - { (gchar *)N_("/Peer/_Connect to Other Server..."),NULL,GTK_SIGNAL_FUNC(peer_connect_ask),0,NULL }, - { (gchar *)N_("/Peer/Direct connect with _Remote eboard..."),NULL,GTK_SIGNAL_FUNC(peer_connect_p2p),0,NULL }, + { (gchar *)N_("/Peer/_Connect to Other Server"),NULL,GTK_SIGNAL_FUNC(peer_connect_ask),0,NULL }, + { (gchar *)N_("/Peer/Direct connect with _Remote eboard"),NULL,GTK_SIGNAL_FUNC(peer_connect_p2p),0,NULL }, { (gchar *)N_("/Peer/sep4"), NULL, NULL, 0, (gchar *)"" }, { (gchar *)N_("/Peer/Play against _Engine"),NULL, NULL, 0,(gchar *)"" }, - { (gchar *)N_("/Peer/Play against Engine/GNU Chess _4..."),NULL,GTK_SIGNAL_FUNC(peer_connect_gnuchess4),0, NULL }, - { (gchar *)N_("/Peer/Play against Engine/_Sjeng..."),NULL,GTK_SIGNAL_FUNC(peer_connect_sjeng), 0, NULL }, - { (gchar *)N_("/Peer/Play against Engine/Cr_afty..."),NULL,GTK_SIGNAL_FUNC(peer_connect_crafty), 0, NULL }, + +//-------------------------------------------------------------------- + +// This block controls the contents of, and order of entries in, the +// "Play against Engine" menu. + + { N_("/Peer/Play against Engine/GNU Chess 6" ), NULL, GTK_SIGNAL_FUNC(peer_connect_gnupoly ), 0, NULL }, + { N_("/Peer/Play against Engine/Amundsen" ), NULL, GTK_SIGNAL_FUNC(peer_connect_amundsen ), 0, NULL }, + { N_("/Peer/Play against Engine/Donna Chess" ), NULL, GTK_SIGNAL_FUNC(peer_connect_donna_chess ), 0, NULL }, + { N_("/Peer/Play against Engine/Dreamer" ), NULL, GTK_SIGNAL_FUNC(peer_connect_dreamer ), 0, NULL }, + { N_("/Peer/Play against Engine/Fruit Chess" ), NULL, GTK_SIGNAL_FUNC(peer_connect_fruit_chess ), 0, NULL }, + { N_("/Peer/Play against Engine/Glaurung" ), NULL, GTK_SIGNAL_FUNC(peer_connect_glaurung ), 0, NULL }, + { N_("/Peer/Play against Engine/Kiwi Chess" ), NULL, GTK_SIGNAL_FUNC(peer_connect_kiwi_chess ), 0, NULL }, + { N_("/Peer/Play against Engine/Phalanx" ), NULL, GTK_SIGNAL_FUNC(peer_connect_phalanx ), 0, NULL }, + { N_("/Peer/Play against Engine/Sjeng" ), NULL, GTK_SIGNAL_FUNC(peer_connect_sjeng ), 0, NULL }, + { N_("/Peer/Play against Engine/Stockfish" ), NULL, GTK_SIGNAL_FUNC(peer_connect_stockfish ), 0, NULL }, + { N_("/Peer/Play against Engine/Toga II" ), NULL, GTK_SIGNAL_FUNC(peer_connect_toga_chess ), 0, NULL }, + { N_("/Peer/Play against Engine/Winter Chess" ), NULL, GTK_SIGNAL_FUNC(peer_connect_winter_chess ), 0, NULL }, + +//-------------------------------------------------------------------- + { (gchar *)N_("/Peer/Play against Engine/sep1"),NULL,NULL,0,(gchar *)"" }, - { (gchar *)N_("/Peer/Play against Engine/_Generic Engine..."),NULL,GTK_SIGNAL_FUNC(peer_connect_xboard), 0,NULL }, + { (gchar *)N_("/Peer/Play against Engine/_Generic Engine"),NULL,GTK_SIGNAL_FUNC(peer_connect_xboard), 0,NULL }, { (gchar *)N_("/Peer/Engine B_ookmarks"), NULL, NULL, FA_ENGBOOKMARKS,(gchar *)"" }, { (gchar *)N_("/Peer/sep3"), NULL, NULL, 0, (gchar *)"" }, - { (gchar *)N_("/Peer/_Empty Scratch Board"), NULL, GTK_SIGNAL_FUNC(peer_scratch_empty), 0, NULL }, - { (gchar *)N_("/Peer/_Scratch Board with Initial Position"),NULL, GTK_SIGNAL_FUNC(peer_scratch_initial), 0, NULL }, - { (gchar *)N_("/Peer/sep3"), NULL, NULL, 0, (gchar *)"" }, { (gchar *)N_("/Peer/_Disconnect"), NULL, GTK_SIGNAL_FUNC(peer_disconnect), 0, NULL }, { (gchar *)N_("/Peer/sep2"), NULL, NULL, 0, (gchar *)"" }, { (gchar *)N_("/Peer/_Quit"), NULL, GTK_SIGNAL_FUNC(mainwindow_destroy), 0, NULL }, @@ -992,13 +1007,6 @@ openEngine(xpp); } -void MainWindow::openGnuChess4() { - GnuChess4Protocol *gpp; - global.debug("MainWindow","openGnuChess4"); - gpp=new GnuChess4Protocol(); - openEngine(gpp); -} - void MainWindow::openCrafty() { CraftyProtocol *cpp; global.debug("MainWindow","openCrafty"); @@ -1013,14 +1021,113 @@ openEngine(spp); } +//-------------------------------------------------------------------- +// Added locally. + +void MainWindow::openAmundsen() { + AmundsenProtocol *cpp; + global.debug("MainWindow","openAmundsen"); + cpp=new AmundsenProtocol(); + openEngine(cpp); +} + +void MainWindow::openDonnaChess() { + DonnaChessProtocol *cpp; + global.debug("MainWindow","openDonnaChess"); + cpp=new DonnaChessProtocol(); + openEngine(cpp); +} + +void MainWindow::openDreamer() { + DreamerProtocol *cpp; + global.debug("MainWindow","openDreamer"); + cpp=new DreamerProtocol(); + openEngine(cpp); +} + +void MainWindow::openFruitChess() { + FruitChessProtocol *cpp; + global.debug("MainWindow","openFruitChess"); + cpp=new FruitChessProtocol(); + openEngine(cpp); +} + +void MainWindow::openGlaurung() { + GlaurungProtocol *cpp; + global.debug("MainWindow","openGlaurung"); + cpp=new GlaurungProtocol(); + openEngine(cpp); +} + +void MainWindow::openGnuPoly() { + GnuPolyProtocol *gpp; + global.debug("MainWindow","openGnuPoly"); + gpp=new GnuPolyProtocol(); + openEngine(gpp); +} + +void MainWindow::openKiwiChess() { + KiwiChessProtocol *cpp; + global.debug("MainWindow","openKiwiChess"); + cpp=new KiwiChessProtocol(); + openEngine(cpp); +} + +void MainWindow::openPhalanx() { + PhalanxProtocol *cpp; + global.debug("MainWindow","openPhalanx"); + cpp=new PhalanxProtocol(); + openEngine(cpp); +} + +void MainWindow::openStockfish() { + StockfishProtocol *cpp; + global.debug("MainWindow","openStockfish"); + cpp=new StockfishProtocol(); + openEngine(cpp); +} + +void MainWindow::openTogaChess() { + TogaChessProtocol *cpp; + global.debug("MainWindow","openTogaChess"); + cpp=new TogaChessProtocol(); + openEngine(cpp); +} + +void MainWindow::openWinterChess() { + WinterChessProtocol *cpp; + global.debug("MainWindow","openWinterChess"); + cpp=new WinterChessProtocol(); + openEngine(cpp); +} + +//-------------------------------------------------------------------- + void MainWindow::openEngineBookmark(EngineBookmark *bm) { EngineProtocol *xpp; - switch(bm->proto) { - case 0: xpp=new XBoardProtocol(); break; - case 1: xpp=new CraftyProtocol(); break; - case 2: xpp=new SjengProtocol(); break; - case 3: xpp=new GnuChess4Protocol(); break; + switch(bm->proto) + { + +//-------------------------------------------------------------------- + + case PROTO_AMUNDSEN : xpp=new AmundsenProtocol (); break; + case PROTO_CRAFTY : xpp=new CraftyProtocol (); break; + case PROTO_DONNA_CHESS : xpp=new DonnaChessProtocol (); break; + case PROTO_DREAMER : xpp=new DreamerProtocol (); break; + case PROTO_FRUIT_CHESS : xpp=new FruitChessProtocol (); break; + case PROTO_GLAURUNG : xpp=new GlaurungProtocol (); break; + case PROTO_GNUPOLY : xpp=new GnuPolyProtocol (); break; + case PROTO_KIWI_CHESS : xpp=new KiwiChessProtocol (); break; + case PROTO_PHALANX : xpp=new PhalanxProtocol (); break; + case PROTO_SJENG : xpp=new SjengProtocol (); break; + case PROTO_STOCKFISH : xpp=new StockfishProtocol (); break; + case PROTO_TOGA_CHESS : xpp=new TogaChessProtocol (); break; + case PROTO_WINTER_CHESS : xpp=new WinterChessProtocol (); break; + case PROTO_XBOARD : xpp=new XBoardProtocol (); break; + +//-------------------------------------------------------------------- + default: cerr << _("** [eboard] bad engine protocol # in bookmark: ") << bm->proto << endl; return; @@ -1527,9 +1634,6 @@ mainw->openXBoardEngine(); } -void peer_connect_gnuchess4(gpointer data) { - mainw->openGnuChess4(); -} void peer_connect_crafty(gpointer data) { mainw->openCrafty(); } @@ -1538,6 +1642,55 @@ mainw->openSjeng(); } +//-------------------------------------------------------------------- +// Added locally. + +void peer_connect_amundsen(gpointer data) { + mainw->openAmundsen(); +} + +void peer_connect_donna_chess(gpointer data) { + mainw->openDonnaChess(); +} + +void peer_connect_dreamer(gpointer data) { + mainw->openDreamer(); +} + +void peer_connect_fruit_chess(gpointer data) { + mainw->openFruitChess(); +} + +void peer_connect_glaurung(gpointer data) { + mainw->openGlaurung(); +} + +void peer_connect_gnupoly(gpointer data) { + mainw->openGnuPoly(); +} + +void peer_connect_kiwi_chess(gpointer data) { + mainw->openKiwiChess(); +} + +void peer_connect_phalanx(gpointer data) { + mainw->openPhalanx(); +} + +void peer_connect_stockfish(gpointer data) { + mainw->openStockfish(); +} + +void peer_connect_toga_chess(gpointer data) { + mainw->openTogaChess(); +} + +void peer_connect_winter_chess(gpointer data) { + mainw->openWinterChess(); +} + +//-------------------------------------------------------------------- + void peer_connect_ask(gpointer data) { (new ConnectDialog())->show(); --- eboard-1.1.3.old/mainwindow.h +++ eboard-1.1.3/mainwindow.h @@ -1,5 +1,4 @@ /* - eboard - chess client http://www.bergo.eng.br/eboard https://github.com/fbergo/eboard @@ -19,11 +18,8 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - - #ifndef EBOARD_MAINWINDOW_H #define EBOARD_MAINWINDOW_H 1 @@ -46,6 +42,8 @@ #include "stl.h" #include "global.h" +//-------------------------------------------------------------------- + class ThemeEntry { public: bool isDupe(ThemeEntry *te); @@ -199,12 +197,26 @@ const char *helper); void cleanUpConnection(); void disconnect(); - void openEngineBookmark(EngineBookmark *bm); - void openGnuChess4(); - void openCrafty(); - void openSjeng(); - void openXBoardEngine(); + +//-------------------------------------------------------------------- + + void openAmundsen (); + void openCrafty (); + void openDonnaChess (); + void openDreamer (); + void openFruitChess (); + void openGlaurung (); + void openGnuPoly (); + void openKiwiChess (); + void openPhalanx (); + void openSjeng (); + void openStockfish (); + void openTogaChess (); + void openWinterChess (); + void openXBoardEngine (); + +//-------------------------------------------------------------------- void gameWalk(int op); @@ -232,10 +244,24 @@ friend void peer_connect_fics(gpointer data); - friend void peer_connect_xboard(gpointer data); - friend void peer_connect_gnuchess4(gpointer data); - friend void peer_connect_sjeng(gpointer data); - friend void peer_connect_crafty(gpointer data); +//-------------------------------------------------------------------- + + friend void peer_connect_amundsen (gpointer data); + friend void peer_connect_crafty (gpointer data); + friend void peer_connect_donna_chess (gpointer data); + friend void peer_connect_dreamer (gpointer data); + friend void peer_connect_fruit_chess (gpointer data); + friend void peer_connect_glaurung (gpointer data); + friend void peer_connect_gnupoly (gpointer data); + friend void peer_connect_kiwi_chess (gpointer data); + friend void peer_connect_phalanx (gpointer data); + friend void peer_connect_sjeng (gpointer data); + friend void peer_connect_stockfish (gpointer data); + friend void peer_connect_toga_chess (gpointer data); + friend void peer_connect_winter_chess (gpointer data); + friend void peer_connect_xboard (gpointer data); + +//-------------------------------------------------------------------- friend void peer_scratch_empty(gpointer data); friend void peer_scratch_initial(gpointer data); @@ -307,7 +333,6 @@ gboolean do_smart_remove(gpointer data); - #define FA_HIGHLIGHT 100 #define FA_ANIMATE 101 #define FA_PREMOVE 102 @@ -336,10 +361,24 @@ void peer_connect_fics(gpointer data); -void peer_connect_xboard(gpointer data); -void peer_connect_gnuchess4(gpointer data); -void peer_connect_sjeng(gpointer data); -void peer_connect_crafty(gpointer data); +//-------------------------------------------------------------------- + +void peer_connect_amundsen (gpointer data); +void peer_connect_crafty (gpointer data); +void peer_connect_donna_chess (gpointer data); +void peer_connect_dreamer (gpointer data); +void peer_connect_fruit_chess (gpointer data); +void peer_connect_glaurung (gpointer data); +void peer_connect_gnupoly (gpointer data); +void peer_connect_kiwi_chess (gpointer data); +void peer_connect_phalanx (gpointer data); +void peer_connect_sjeng (gpointer data); +void peer_connect_stockfish (gpointer data); +void peer_connect_toga_chess (gpointer data); +void peer_connect_winter_chess (gpointer data); +void peer_connect_xboard (gpointer data); + +//-------------------------------------------------------------------- void peer_scratch_empty(gpointer data); void peer_scratch_initial(gpointer data); --- eboard-1.1.3.old/multilang/eboard.cs.dict +++ eboard-1.1.3/multilang/eboard.cs.dict @@ -126,7 +126,7 @@ /Oponent/Hrát proti motoru/_Crafty... L41 43 /Peer/Play against Engine/GNU Chess _4... -/Oponent/Hrát proti motoru/_GNU Chess 4... +/Oponent/Hrát proti motoru/_GNU Chess 6... L44 45 /Peer/Play against Engine/_Generic Engine... /Oponent/Hrát proti motoru/_Obecný motor... @@ -974,8 +974,8 @@ Play against Engine Hrát proti motoru L24 23 -Play against GNU Chess 4 -Hrát proti GNU Chess 4 +Play against GNU Chess 6 +Hrát proti GNU Chess 6 L18 17 Play against Sjeng Hrát proti Sjeng --- eboard-1.1.3.old/multilang/eboard.cs.po +++ eboard-1.1.3/multilang/eboard.cs.po @@ -283,7 +283,7 @@ # state: translated # (1) mainwindow.cc:64 msgid "/Peer/Play against Engine/GNU Chess _4..." -msgstr "/Oponent/Hrát proti motoru/_GNU Chess 4..." +msgstr "/Oponent/Hrát proti motoru/_GNU Chess 6..." # state: translated # (1) mainwindow.cc:68 @@ -1947,8 +1947,8 @@ # state: translated # (1) proto_xboard.cc:1318 -msgid "Play against GNU Chess 4" -msgstr "Hrát proti GNU Chess 4" +msgid "Play against GNU Chess 6" +msgstr "Hrát proti GNU Chess 6" # state: translated # (1) proto_xboard.cc:1233 --- eboard-1.1.3.old/multilang/eboard.de.dict +++ eboard-1.1.3/multilang/eboard.de.dict @@ -1103,8 +1103,8 @@ Play against Engine Spiel gegen Engine L24 23 -Play against GNU Chess 4 -Spiel gegen GNU Chess 4 +Play against GNU Chess 6 +Spiel gegen GNU Chess 6 L18 17 Play against Sjeng Spiel gegen Sjeng --- eboard-1.1.3.old/multilang/eboard.de.po +++ eboard-1.1.3/multilang/eboard.de.po @@ -1997,8 +1997,8 @@ # state: translated # (1) proto_xboard.cc:1318 -msgid "Play against GNU Chess 4" -msgstr "Spiel gegen GNU Chess 4" +msgid "Play against GNU Chess 6" +msgstr "Spiel gegen GNU Chess 6" # state: translated # (1) proto_xboard.cc:1233 --- eboard-1.1.3.old/multilang/eboard.es.dict +++ eboard-1.1.3/multilang/eboard.es.dict @@ -1055,8 +1055,8 @@ Play against Engine Jugar contra un motor L24 24 -Play against GNU Chess 4 -Jugar contra GNU Chess 4 +Play against GNU Chess 6 +Jugar contra GNU Chess 6 L18 18 Play against Sjeng Jugar contra Sjeng --- eboard-1.1.3.old/multilang/eboard.es.po +++ eboard-1.1.3/multilang/eboard.es.po @@ -1869,8 +1869,8 @@ # state: translated # (1) proto_xboard.cc:1318 -msgid "Play against GNU Chess 4" -msgstr "Jugar contra GNU Chess 4" +msgid "Play against GNU Chess 6" +msgstr "Jugar contra GNU Chess 6" # state: translated # (1) proto_xboard.cc:1233 --- eboard-1.1.3.old/multilang/eboard.fr.dict +++ eboard-1.1.3/multilang/eboard.fr.dict @@ -1055,8 +1055,8 @@ Play against Engine Jouer contre un moteur L24 24 -Play against GNU Chess 4 -Jouer contre GNU Chess 4 +Play against GNU Chess 6 +Jouer contre GNU Chess 6 L18 18 Play against Sjeng Jouer contre Sjeng --- eboard-1.1.3.old/multilang/eboard.fr.po +++ eboard-1.1.3/multilang/eboard.fr.po @@ -2038,8 +2038,8 @@ # state: translated # (1) proto_xboard.cc:1318 -msgid "Play against GNU Chess 4" -msgstr "Jouer contre GNU Chess 4" +msgid "Play against GNU Chess 6" +msgstr "Jouer contre GNU Chess 6" # state: translated # (1) proto_xboard.cc:1233 --- eboard-1.1.3.old/multilang/eboard.hemp +++ eboard-1.1.3/multilang/eboard.hemp @@ -1417,7 +1417,7 @@ msgstr "" # (1) -msgid "Play against GNU Chess 4" +msgid "Play against GNU Chess 6" msgstr "" # (1) --- eboard-1.1.3.old/multilang/eboard.it.dict +++ eboard-1.1.3/multilang/eboard.it.dict @@ -1040,8 +1040,8 @@ Play against Engine Gioca contro motore L24 24 -Play against GNU Chess 4 -Gioca contro GNU Chess 4 +Play against GNU Chess 6 +Gioca contro GNU Chess 6 L18 18 Play against Sjeng Gioca contro Sjeng --- eboard-1.1.3.old/multilang/eboard.it.po +++ eboard-1.1.3/multilang/eboard.it.po @@ -1992,8 +1992,8 @@ # state: translated # (1) proto_xboard.cc:1318 -msgid "Play against GNU Chess 4" -msgstr "Gioca contro GNU Chess 4" +msgid "Play against GNU Chess 6" +msgstr "Gioca contro GNU Chess 6" # state: translated # (1) proto_xboard.cc:1233 --- eboard-1.1.3.old/multilang/eboard.ja.dict +++ eboard-1.1.3/multilang/eboard.ja.dict @@ -1082,8 +1082,8 @@ Play against Engine エンジンとプレイ L24 24 -Play against GNU Chess 4 -GNU Chess 4 とプレイ +Play against GNU Chess 6 +GNU Chess 6 とプレイ L18 18 Play against Sjeng Sjeng とプレイ --- eboard-1.1.3.old/multilang/eboard.ja.po +++ eboard-1.1.3/multilang/eboard.ja.po @@ -1944,8 +1944,8 @@ # state: translated # (1) proto_xboard.cc:1318 -msgid "Play against GNU Chess 4" -msgstr "GNU Chess 4 とプレイ" +msgid "Play against GNU Chess 6" +msgstr "GNU Chess 6 とプレイ" # state: translated # (1) proto_xboard.cc:1233 --- eboard-1.1.3.old/multilang/eboard.pl.dict +++ eboard-1.1.3/multilang/eboard.pl.dict @@ -129,7 +129,7 @@ /Partner/Graj przeciw programowi/_Crafty... L41 48 /Peer/Play against Engine/GNU Chess _4... -/Partner/Graj przeciw programowi/_GNU Chess 4... +/Partner/Graj przeciw programowi/_GNU Chess 6... L44 49 /Peer/Play against Engine/_Generic Engine... /Partner/Graj przeciw programowi/_Inny program... @@ -980,8 +980,8 @@ Play against Engine Graj przeciw programowi L24 35 -Play against GNU Chess 4 -Graj przeciw programowi GNU Chess 4 +Play against GNU Chess 6 +Graj przeciw programowi GNU Chess 6 L18 29 Play against Sjeng Graj przeciw programowi Sjeng --- eboard-1.1.3.old/multilang/eboard.pl.po +++ eboard-1.1.3/multilang/eboard.pl.po @@ -287,7 +287,7 @@ # state: translated # (1) mainwindow.cc:64 msgid "/Peer/Play against Engine/GNU Chess _4..." -msgstr "/Partner/Graj przeciw programowi/_GNU Chess 4..." +msgstr "/Partner/Graj przeciw programowi/_GNU Chess 6..." # state: translated # (1) mainwindow.cc:68 @@ -1956,8 +1956,8 @@ # state: translated # (1) proto_xboard.cc:1318 -msgid "Play against GNU Chess 4" -msgstr "Graj przeciw programowi GNU Chess 4" +msgid "Play against GNU Chess 6" +msgstr "Graj przeciw programowi GNU Chess 6" # state: translated # (1) proto_xboard.cc:1233 --- eboard-1.1.3.old/multilang/eboard.pt_BR.dict +++ eboard-1.1.3/multilang/eboard.pt_BR.dict @@ -1031,8 +1031,8 @@ Play against Engine Jogar contra Programa L24 26 -Play against GNU Chess 4 -Jogar contra o GNU Chess 4 +Play against GNU Chess 6 +Jogar contra o GNU Chess 6 L18 20 Play against Sjeng Jogar contra o Sjeng --- eboard-1.1.3.old/multilang/eboard.pt_BR.po +++ eboard-1.1.3/multilang/eboard.pt_BR.po @@ -1802,8 +1802,8 @@ # state: translated # (1) proto_xboard.cc:1318 -msgid "Play against GNU Chess 4" -msgstr "Jogar contra o GNU Chess 4" +msgid "Play against GNU Chess 6" +msgstr "Jogar contra o GNU Chess 6" # state: translated # (1) proto_xboard.cc:1233 --- eboard-1.1.3.old/multilang/eboard.zh_CN.dict +++ eboard-1.1.3/multilang/eboard.zh_CN.dict @@ -914,8 +914,8 @@ Play against Engine 与引擎游戏 L24 22 -Play against GNU Chess 4 -与 GNU Chess 4 对局 +Play against GNU Chess 6 +与 GNU Chess 6 对局 L18 16 Play against Sjeng 与 Sjeng 对局 --- eboard-1.1.3.old/multilang/eboard.zh_CN.po +++ eboard-1.1.3/multilang/eboard.zh_CN.po @@ -1798,8 +1798,8 @@ # state: translated # (1) proto_xboard.cc:1319 -msgid "Play against GNU Chess 4" -msgstr "与 GNU Chess 4 对局" +msgid "Play against GNU Chess 6" +msgstr "与 GNU Chess 6 对局" # state: translated # (1) proto_xboard.cc:1234 --- eboard-1.1.3.old/notebook.cc +++ eboard-1.1.3/notebook.cc @@ -19,7 +19,6 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ #include --- eboard-1.1.3.old/notebook.h +++ eboard-1.1.3/notebook.h @@ -1,5 +1,4 @@ /* - eboard - chess client http://www.bergo.eng.br/eboard https://github.com/fbergo/eboard @@ -19,7 +18,6 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ #ifndef NOTEBOOK_H --- eboard-1.1.3.old/pieces.cc +++ eboard-1.1.3/pieces.cc @@ -1,5 +1,4 @@ /* - eboard - chess client http://www.bergo.eng.br/eboard https://github.com/fbergo/eboard @@ -19,7 +18,6 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ #include --- eboard-1.1.3.old/proto_xboard.cc +++ eboard-1.1.3/proto_xboard.cc @@ -1,5 +1,4 @@ /* - eboard - chess client http://www.bergo.eng.br/eboard https://github.com/fbergo/eboard @@ -19,7 +18,6 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ #include @@ -34,6 +32,8 @@ #include #include #include + +#include "xpcodes.h" #include "eboard.h" #include "global.h" #include "network.h" @@ -71,7 +71,8 @@ Moved[0].set("move%b%r"); Moved[1].set("%N.%b...%b%r"); - Moved[2].set("%N%b...%b%r"); + Moved[2].set("%N.%b...%b%r%b"); + Moved[3].set("%N%b...%b%r"); WhiteWin[0].set("1-0 {*}*"); BlackWin[0].set("0-1 {*}*"); @@ -180,7 +181,8 @@ } moved=-1; - for(i=0;i<3;i++) + + for(i = 0; i < NUM_EPM_MOVE_PATTERNS; i++) if (Moved[i].match(netstring)) { moved = i; break; @@ -958,14 +960,14 @@ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(bookmark))) { ebm=new EngineBookmark(); - ebm->timecontrol =timecontrol; - ebm->maxply =MaxDepth; - ebm->humanwhite =1-EngineWhite; - ebm->think =ThinkAlways?1:0; - ebm->directory =EngineRunDir; - ebm->cmdline =EngineCommandLine; - ebm->mode =REGULAR; - ebm->proto =0; // base xboard protocol + ebm->timecontrol = timecontrol; + ebm->maxply = MaxDepth; + ebm->humanwhite = 1-EngineWhite; + ebm->think = ThinkAlways?1:0; + ebm->directory = EngineRunDir; + ebm->cmdline = EngineCommandLine; + ebm->mode = REGULAR; + ebm->proto = PROTO_XBOARD; // base xboard protocol makeBookmarkCaption(); @@ -1088,7 +1090,7 @@ strcpy(EngineRunDir,"/tmp"); if (ebm) { - ebm->proto = 1; + ebm->proto = PROTO_CRAFTY; ebm->cmdline = EngineCommandLine; ebm->directory = EngineRunDir; makeBookmarkCaption(); @@ -1222,7 +1224,7 @@ if (gtget(GTK_TOGGLE_BUTTON(varbutton[4]))) Variant=GIVEAWAY; if (ebm) { - ebm->proto=2; + ebm->proto = PROTO_SJENG; ebm->mode=Variant; makeBookmarkCaption(); @@ -1269,51 +1271,545 @@ global.BoardList.front()->setCanMove(false); } -// ==================== GNU CHESS 4 ========================= +//-------------------------------------------------------------------- +// the following protocols were added locally +//-------------------------------------------------------------------- -GnuChess4Protocol::GnuChess4Protocol() : XBoardProtocol() { - strcpy(ComputerName,"GNU Chess"); - want_path_pane=0; - need_handshake=false; // sending xboard confuses GNU chess 4 +// ==================== AMUNDSEN ========================= + +AmundsenProtocol::AmundsenProtocol() : XBoardProtocol() { + strcpy (ComputerName, "Amundsen"); + want_path_pane = 0; + need_handshake = true; } -void GnuChess4Protocol::initEngine() { - char z[32]; +void AmundsenProtocol::initEngine() { + char z [32]; createGame(); - global.network->writeLine("nopost"); + global.network->writeLine ("nopost"); - global.network->writeLine("hard"); + global.network->writeLine ("hard"); if (!ThinkAlways) - global.network->writeLine("easy"); + global.network->writeLine ("easy"); - global.network->writeLine("new"); + global.network->writeLine ("new"); - timecontrol.toXBoard(z,32,TCF_GNUCHESS4QUIRK); + timecontrol.toXBoard (z,32,0); if (z[0]) - global.network->writeLine(z); + global.network->writeLine (z); if (MaxDepth > 0) { - snprintf(z,32,"depth %d",MaxDepth); - global.network->writeLine(z); + snprintf (z, 32, "depth %d", MaxDepth); + global.network->writeLine (z); + } + + lateInit(); + endInit(); +} + +void AmundsenProtocol::readDialog() { + XBoardProtocol::readDialog(); + strcpy (EngineCommandLine, "./amundsen"); + strcpy (EngineRunDir, "__META_PRODTREE__/amundsen/bin"); + + if (ebm) { + ebm->proto = PROTO_AMUNDSEN; + ebm->cmdline = EngineCommandLine; + ebm->directory = EngineRunDir; + makeBookmarkCaption(); + } +} + +char * AmundsenProtocol::getDialogName() { + return(_("Play against Amundsen")); +} + +// ==================== DONNA CHESS ========================= + +DonnaChessProtocol::DonnaChessProtocol() : XBoardProtocol() { + strcpy (ComputerName, "Donna"); + want_path_pane = 0; + need_handshake = true; +} + +void DonnaChessProtocol::initEngine() { + char z [32]; + createGame(); + global.network->writeLine ("nopost"); + + global.network->writeLine ("hard"); + if (!ThinkAlways) + global.network->writeLine ("easy"); + + global.network->writeLine ("new"); + + timecontrol.toXBoard (z,32,0); + if (z[0]) + global.network->writeLine (z); + + if (MaxDepth > 0) { + snprintf (z, 32, "depth %d", MaxDepth); + global.network->writeLine (z); + } + + lateInit(); + endInit(); +} + +void DonnaChessProtocol::readDialog() { + XBoardProtocol::readDialog(); + strcpy (EngineCommandLine, "polychess donna-chess.ini"); + strcpy (EngineRunDir, "__META_PRODTREE__/polychess/program"); + + if (ebm) { + ebm->proto = PROTO_DONNA_CHESS; + ebm->cmdline = EngineCommandLine; + ebm->directory = EngineRunDir; + makeBookmarkCaption(); + } +} + +char * DonnaChessProtocol::getDialogName() { + return(_("Play against Donna Chess")); +} + +// ==================== DREAMER ========================= + +DreamerProtocol::DreamerProtocol() : XBoardProtocol() { + strcpy (ComputerName, "Dreamer"); + want_path_pane = 0; + need_handshake = true; +} + +void DreamerProtocol::initEngine() { + char z [32]; + createGame(); + global.network->writeLine ("nopost"); + + global.network->writeLine ("hard"); + if (!ThinkAlways) + global.network->writeLine ("easy"); + + global.network->writeLine ("new"); + + timecontrol.toXBoard (z,32,0); + if (z[0]) + global.network->writeLine (z); + + if (MaxDepth > 0) { + snprintf (z, 32, "depth %d", MaxDepth); + global.network->writeLine (z); + } + + lateInit(); + endInit(); +} + +void DreamerProtocol::readDialog() { + XBoardProtocol::readDialog(); + strcpy (EngineCommandLine, "./dreamer"); + strcpy (EngineRunDir, "__META_PRODTREE__/dreamchess/bin"); + + if (ebm) { + ebm->proto = PROTO_DREAMER; + ebm->cmdline = EngineCommandLine; + ebm->directory = EngineRunDir; + makeBookmarkCaption(); + } +} + +char * DreamerProtocol::getDialogName() { + return(_("Play against Dreamer")); +} + +// ==================== FRUIT CHESS 2.1 ========================= + +FruitChessProtocol::FruitChessProtocol() : XBoardProtocol() { + strcpy (ComputerName, "Fruit Chess"); + want_path_pane = 0; + need_handshake = true; +} + +void FruitChessProtocol::initEngine() { + char z [32]; + createGame(); + global.network->writeLine ("nopost"); + + global.network->writeLine ("hard"); + if (!ThinkAlways) + global.network->writeLine ("easy"); + + global.network->writeLine ("new"); + + timecontrol.toXBoard (z,32,0); + if (z[0]) + global.network->writeLine (z); + + if (MaxDepth > 0) { + snprintf (z, 32, "depth %d", MaxDepth); + global.network->writeLine (z); + } + + lateInit(); + endInit(); +} + +void FruitChessProtocol::readDialog() { + XBoardProtocol::readDialog(); + strcpy (EngineCommandLine, "polychess fruit-chess.ini"); + strcpy (EngineRunDir, "__META_PRODTREE__/polychess/program"); + + if (ebm) { + ebm->proto = PROTO_FRUIT_CHESS; + ebm->cmdline = EngineCommandLine; + ebm->directory = EngineRunDir; + makeBookmarkCaption(); + } +} + +char * FruitChessProtocol::getDialogName() { + return(_("Play against Fruit Chess")); +} + +// ==================== GLAURUNG 1.2.1 ========================= + +GlaurungProtocol::GlaurungProtocol() : XBoardProtocol() { + strcpy (ComputerName, "Glaurung"); + want_path_pane = 0; + need_handshake = true; +} + +void GlaurungProtocol::initEngine() { + char z [32]; + createGame(); + global.network->writeLine ("nopost"); + + global.network->writeLine ("hard"); + if (!ThinkAlways) + global.network->writeLine ("easy"); + + global.network->writeLine ("new"); + + timecontrol.toXBoard (z,32,0); + if (z[0]) + global.network->writeLine (z); + + if (MaxDepth > 0) { + snprintf (z, 32, "depth %d", MaxDepth); + global.network->writeLine (z); + } + + lateInit(); + endInit(); +} + +void GlaurungProtocol::readDialog() { + XBoardProtocol::readDialog(); + strcpy (EngineCommandLine, "polychess glaurung.ini"); + strcpy (EngineRunDir, "__META_PRODTREE__/polychess/program"); + + if (ebm) { + ebm->proto = PROTO_GLAURUNG; + ebm->cmdline = EngineCommandLine; + ebm->directory = EngineRunDir; + makeBookmarkCaption(); + } +} + +char * GlaurungProtocol::getDialogName() { + return(_("Play against Glaurung")); +} + +// ==================== GNU CHESS 6 Poly ========================= + +GnuPolyProtocol::GnuPolyProtocol() : XBoardProtocol() { + strcpy (ComputerName, "GnuPoly"); + want_path_pane = 0; + need_handshake = true; +} + +void GnuPolyProtocol::initEngine() { + char z [32]; + createGame(); + global.network->writeLine ("nopost"); + + global.network->writeLine ("hard"); + if (!ThinkAlways) + global.network->writeLine ("easy"); + + global.network->writeLine ("new"); + + timecontrol.toXBoard (z,32,0); + if (z[0]) + global.network->writeLine (z); + + if (MaxDepth > 0) { + snprintf (z, 32, "depth %d", MaxDepth); + global.network->writeLine (z); + } + + lateInit(); + endInit(); +} + +void GnuPolyProtocol::readDialog() { + XBoardProtocol::readDialog(); + strcpy (EngineCommandLine, "polychess gnuchess6.ini"); + strcpy (EngineRunDir, "__META_PRODTREE__/polychess/program"); + + if (ebm) { + ebm->proto = PROTO_GNUPOLY; + ebm->cmdline = EngineCommandLine; + ebm->directory = EngineRunDir; + makeBookmarkCaption(); + } +} + +char * GnuPolyProtocol::getDialogName() { + return(_("Play against Gnu Chess Poly")); +} + +// ==================== KIWICHESS ========================= + +KiwiChessProtocol::KiwiChessProtocol() : XBoardProtocol() { + strcpy (ComputerName, "Kiwi Chess"); + want_path_pane = 0; + need_handshake = true; +} + +void KiwiChessProtocol::initEngine() { + char z [32]; + createGame(); + global.network->writeLine ("nopost"); + + global.network->writeLine ("hard"); + if (!ThinkAlways) + global.network->writeLine ("easy"); + + global.network->writeLine ("new"); + + timecontrol.toXBoard (z,32,0); + if (z[0]) + global.network->writeLine (z); + + if (MaxDepth > 0) { + snprintf (z, 32, "depth %d", MaxDepth); + global.network->writeLine (z); + } + + lateInit(); + endInit(); +} + +void KiwiChessProtocol::readDialog() { + XBoardProtocol::readDialog(); + strcpy (EngineCommandLine, "__META_PRODTREE__/kiwichess/bin/kiwichess"); + strcpy (EngineRunDir, "/tmp"); + + if (ebm) { + ebm->proto = PROTO_KIWI_CHESS; + ebm->cmdline = EngineCommandLine; + ebm->directory = EngineRunDir; + makeBookmarkCaption(); + } +} + +char * KiwiChessProtocol::getDialogName() { + return(_("Play against Kiwi Chess")); +} + +// ==================== PHALANX ========================= + +PhalanxProtocol::PhalanxProtocol() : XBoardProtocol() { + strcpy (ComputerName, "Phalanx"); + want_path_pane = 0; + need_handshake = true; +} + +void PhalanxProtocol::initEngine() { + char z [32]; + createGame(); + global.network->writeLine ("nopost"); + + global.network->writeLine ("hard"); + if (!ThinkAlways) + global.network->writeLine ("easy"); + + global.network->writeLine ("new"); + + timecontrol.toXBoard (z,32,0); + if (z[0]) + global.network->writeLine (z); + + if (MaxDepth > 0) { + snprintf (z, 32, "depth %d", MaxDepth); + global.network->writeLine (z); } lateInit(); endInit(); } -void GnuChess4Protocol::readDialog() { +void PhalanxProtocol::readDialog() { XBoardProtocol::readDialog(); - strcpy(EngineCommandLine,"gnuchessx"); - EngineRunDir[0]=0; + strcpy (EngineCommandLine, "phalanx"); + strcpy (EngineRunDir, "__META_PRODTREE__/phalanx/program"); if (ebm) { - ebm->proto=3; - ebm->cmdline=EngineCommandLine; - ebm->directory=EngineRunDir; + ebm->proto = PROTO_PHALANX; + ebm->cmdline = EngineCommandLine; + ebm->directory = EngineRunDir; + makeBookmarkCaption(); + } +} + +char * PhalanxProtocol::getDialogName() { + return(_("Play against Phalanx")); +} + +// ==================== STOCKFISH ========================= + +StockfishProtocol::StockfishProtocol() : XBoardProtocol() { + strcpy (ComputerName, "Stockfish"); + want_path_pane = 0; + need_handshake = true; +} + +void StockfishProtocol::initEngine() { + char z [32]; + createGame(); + global.network->writeLine ("nopost"); + + global.network->writeLine ("hard"); + if (!ThinkAlways) + global.network->writeLine ("easy"); + + global.network->writeLine ("new"); + + timecontrol.toXBoard (z,32,0); + if (z[0]) + global.network->writeLine (z); + + if (MaxDepth > 0) { + snprintf (z, 32, "depth %d", MaxDepth); + global.network->writeLine (z); + } + + lateInit(); + endInit(); +} + +void StockfishProtocol::readDialog() { + XBoardProtocol::readDialog(); + strcpy (EngineCommandLine, "polychess stockfish.ini"); + strcpy (EngineRunDir, "__META_PRODTREE__/polychess/program"); + + if (ebm) { + ebm->proto = PROTO_STOCKFISH; + ebm->cmdline = EngineCommandLine; + ebm->directory = EngineRunDir; + makeBookmarkCaption(); + } +} + +char * StockfishProtocol::getDialogName() { + return(_("Play against Stockfish")); +} + +// ==================== TOGA II 1.3.1 ========================= + +TogaChessProtocol::TogaChessProtocol() : XBoardProtocol() { + strcpy (ComputerName, "Toga II"); + want_path_pane = 0; + need_handshake = true; +} + +void TogaChessProtocol::initEngine() { + char z [32]; + createGame(); + global.network->writeLine ("nopost"); + + global.network->writeLine ("hard"); + if (!ThinkAlways) + global.network->writeLine ("easy"); + + global.network->writeLine ("new"); + + timecontrol.toXBoard (z,32,0); + if (z[0]) + global.network->writeLine (z); + + if (MaxDepth > 0) { + snprintf (z, 32, "depth %d", MaxDepth); + global.network->writeLine (z); + } + + lateInit(); + endInit(); +} + +void TogaChessProtocol::readDialog() { + XBoardProtocol::readDialog(); + strcpy (EngineCommandLine, "polychess toga-chess.ini"); + strcpy (EngineRunDir, "__META_PRODTREE__/polychess/program"); + + if (ebm) { + ebm->proto = PROTO_TOGA_CHESS; + ebm->cmdline = EngineCommandLine; + ebm->directory = EngineRunDir; + makeBookmarkCaption(); + } +} + +char * TogaChessProtocol::getDialogName() { + return(_("Play against Toga II")); +} + +// ==================== WINTER CHESS ========================= + +WinterChessProtocol::WinterChessProtocol() : XBoardProtocol() { + strcpy (ComputerName, "Winter Chess"); + want_path_pane = 0; + need_handshake = true; +} + +void WinterChessProtocol::initEngine() { + char z [32]; + createGame(); + global.network->writeLine ("nopost"); + + global.network->writeLine ("hard"); + if (!ThinkAlways) + global.network->writeLine ("easy"); + + global.network->writeLine ("new"); + + timecontrol.toXBoard (z,32,0); + if (z[0]) + global.network->writeLine (z); + + if (MaxDepth > 0) { + snprintf (z, 32, "depth %d", MaxDepth); + global.network->writeLine (z); + } + + lateInit(); + endInit(); +} + +void WinterChessProtocol::readDialog() { + XBoardProtocol::readDialog(); + strcpy (EngineCommandLine, "polychess winter-chess.ini"); + strcpy (EngineRunDir, "__META_PRODTREE__/polychess/program"); + + if (ebm) { + ebm->proto = PROTO_WINTER_CHESS; + ebm->cmdline = EngineCommandLine; + ebm->directory = EngineRunDir; makeBookmarkCaption(); } } -char * GnuChess4Protocol::getDialogName() { - return(_("Play against GNU Chess 4")); +char * WinterChessProtocol::getDialogName() { + return(_("Play against Winter Chess")); } --- eboard-1.1.3.old/proto_xboard.h +++ eboard-1.1.3/proto_xboard.h @@ -1,5 +1,4 @@ /* - eboard - chess client http://www.bergo.eng.br/eboard https://github.com/fbergo/eboard @@ -19,7 +18,6 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ #ifndef EBOARD_XBOARD_H @@ -47,8 +45,9 @@ | +----------------+-----------------+ | | | - CraftyProtocol SjengProtocol GnuChess4Protocol + CraftyProtocol SjengProtocol AmundsenProtocol + plus: various others of a similar nature */ class XBoardProtocol : public EngineProtocol, @@ -129,8 +128,10 @@ ExtPatternMatcher BlackWin[2]; ExtPatternMatcher Drawn[2]; +#define NUM_EPM_MOVE_PATTERNS 4 + ExtPatternMatcher Features; - ExtPatternMatcher Moved[3]; + ExtPatternMatcher Moved [NUM_EPM_MOVE_PATTERNS]; ExtPatternMatcher IllegalMove; ExtPatternMatcher Dialect[10]; @@ -168,7 +169,6 @@ void xboard_edit_time(GtkWidget *w,gpointer data); gboolean xboard_eng_delete(GtkWidget *w,GdkEvent *e,gpointer data); - class CraftyProtocol : public XBoardProtocol { public: CraftyProtocol(); @@ -204,10 +204,133 @@ GtkWidget *varbutton[5]; }; -class GnuChess4Protocol : public XBoardProtocol { +//-------------------------------------------------------------------- +// Added locally. + +class AmundsenProtocol : public XBoardProtocol { + public: + AmundsenProtocol(); + virtual ~AmundsenProtocol() {} + + virtual void initEngine(); + virtual void readDialog(); + + protected: + virtual char *getDialogName(); +}; + +class DonnaChessProtocol : public XBoardProtocol { + public: + DonnaChessProtocol(); + virtual ~DonnaChessProtocol() {} + + virtual void initEngine(); + virtual void readDialog(); + + protected: + virtual char *getDialogName(); +}; + +class DreamerProtocol : public XBoardProtocol { + public: + DreamerProtocol(); + virtual ~DreamerProtocol() {} + + virtual void initEngine(); + virtual void readDialog(); + + protected: + virtual char *getDialogName(); +}; + +class FruitChessProtocol : public XBoardProtocol { + public: + FruitChessProtocol(); + virtual ~FruitChessProtocol() {} + + virtual void initEngine(); + virtual void readDialog(); + + protected: + virtual char *getDialogName(); +}; + +class GlaurungProtocol : public XBoardProtocol { + public: + GlaurungProtocol(); + virtual ~GlaurungProtocol() {} + + virtual void initEngine(); + virtual void readDialog(); + + protected: + virtual char *getDialogName(); +}; + +class GnuPolyProtocol : public XBoardProtocol { + public: + GnuPolyProtocol(); + virtual ~GnuPolyProtocol() {} + + virtual void initEngine(); + virtual void readDialog(); + + protected: + virtual char *getDialogName(); +}; + +class KiwiChessProtocol : public XBoardProtocol { + public: + KiwiChessProtocol(); + virtual ~KiwiChessProtocol() {} + + virtual void initEngine(); + virtual void readDialog(); + + protected: + virtual char *getDialogName(); +}; + +class PhalanxProtocol : public XBoardProtocol { + public: + PhalanxProtocol(); + virtual ~PhalanxProtocol() {} + + virtual void initEngine(); + virtual void readDialog(); + + protected: + virtual char *getDialogName(); +}; + +class StockfishProtocol : public XBoardProtocol { + public: + StockfishProtocol(); + virtual ~StockfishProtocol() {} + + virtual void initEngine(); + virtual void readDialog(); + + protected: + virtual char *getDialogName(); +}; + +class TogaChessProtocol : public XBoardProtocol { + public: + TogaChessProtocol(); + virtual ~TogaChessProtocol() {} + + virtual void initEngine(); + virtual void readDialog(); + + protected: + virtual char *getDialogName(); +}; + +class WinterChessProtocol : public XBoardProtocol { public: - GnuChess4Protocol(); - virtual ~GnuChess4Protocol() {} + WinterChessProtocol(); + virtual ~WinterChessProtocol() {} virtual void initEngine(); virtual void readDialog(); @@ -216,4 +339,6 @@ virtual char *getDialogName(); }; +//-------------------------------------------------------------------- + #endif --- eboard-1.1.3.old/xpcodes.h +++ eboard-1.1.3/xpcodes.h @@ -0,0 +1,19 @@ +#ifndef XPCODES_H +#define XPCODES_H 1 + +#define PROTO_XBOARD 0 +#define PROTO_CRAFTY 1 +#define PROTO_SJENG 2 +#define PROTO_GNUPOLY 3 +#define PROTO_AMUNDSEN 4 +#define PROTO_DONNA_CHESS 5 +#define PROTO_DREAMER 6 +#define PROTO_FRUIT_CHESS 7 +#define PROTO_GLAURUNG 8 +#define PROTO_KIWI_CHESS 9 +#define PROTO_PHALANX 10 +#define PROTO_STOCKFISH 11 +#define PROTO_TOGA_CHESS 12 +#define PROTO_WINTER_CHESS 13 + +#endif