tom@tnosoes.UUCP (Tom Vijlbrief) (12/08/89)
I made some changes to gnuchess 1.52: a) report illegal moves, to avoid hang of sun's chesstool e2-e5 did not result in: Illegal move b) add a -a flag (think ahead) which switches easy off, so chesstool can play with gnuchess thinking in the opponents time: e.g.: chesstool gnuchessr -a 60 5 The user need no longer hit ^C when easy is off, select(2) is used to terminate the search. c) Diagnostics concerning the search are written on stderr. This does not bother chesstool. I assume these changes also work for xchess. =============================================================================== Tom Vijlbrief TNO Institute for Perception P.O. Box 23 Phone: +31 34 63 562 11 3769 ZG Soesterberg E-mail: tnosoes!tom@mcvax.cwi.nl The Netherlands or: uunet!mcvax!tnosoes!tom =============================================================================== Here are the diffs: *** gnuchess.c Fri Dec 8 09:43:51 1989 --- org/gnuchess.c Sun Apr 30 17:21:05 1989 *************** *** 291,298 **** main(argc,argv) int argc; char *argv[]; { - int i; - int ahead= 0; #ifdef MSDOS ttable = (struct hashentry huge *)farmalloc(ttblsz * (unsigned long)sizeof(struct hashentry)); --- 291,296 ---- *************** *** 300,313 **** ttable = (struct hashentry *)malloc(ttblsz * (unsigned long)sizeof(struct hashentry)); #endif - while (argc > 1 && argv[1][0] == '-') { - switch (argv[1][1]) { - case 'a': ahead= 1; break; - default: fprintf(stderr, "Unknown flag\n"); - } - argv++; - argc--; - } Level = 0; TCflag = false; OperatorTime = 0; if (argc == 2) Level = atoi(argv[1]); if (argc == 3) --- 298,303 ---- *************** *** 316,323 **** } Initialize(); NewGame(); - if (ahead) - seteasy(); while (!(quit)) { if (bothsides && !mate) SelectMove(opponent,1); else InputCommand(); --- 306,311 ---- *************** *** 349,355 **** if (iop == 2) { UnmakeMove(opponent,&xnode,&tempb,&tempc,&tempsf,&tempst); - /* ShowMessage("Illegal Move!!"); */ return(false); } cnt = 0; --- 337,342 ---- *************** *** 393,399 **** } } if (cnt > 1) ShowMessage("Ambiguous Move!"); - else ShowMessage("Illegal Move!!"); return(false); } --- 380,385 ---- No differences encountered *** nondsp.c Fri Dec 8 11:38:03 1989 --- org/nondsp.c Sun Apr 30 17:24:04 1989 *************** *** 39,45 **** #include <sys/file.h> struct tms tmbuf1,tmbuf2; int TerminateSearch(),Die(); - #include <signal.h> #endif MSDOS #include "gnuchess.h" --- 39,44 ---- *************** *** 51,57 **** Initialize() { - signal(SIGINT,Die); signal(SIGQUIT,Die); mycnt1 = mycnt2 = 0; #ifndef MSDOS #endif --- 50,55 ---- *************** *** 75,105 **** Die() { char s[80]; - signal(SIGINT,SIG_IGN); - signal(SIGQUIT,SIG_IGN); printz("Abort? "); scanz("%s",s); if (strcmp(s,"yes") == 0) ExitChess(); - signal(SIGINT,Die); signal(SIGQUIT,Die); } TerminateSearch() { - signal(SIGINT,SIG_IGN); - signal(SIGQUIT,SIG_IGN); timeout = true; bothsides = false; - signal(SIGINT,Die); signal(SIGQUIT,Die); } #endif MSDOS - seteasy() - { - easy = !easy; - } - static int ahead; - InputCommand() /* --- 73,91 ---- *************** *** 128,137 **** algbr(hint>>8,hint & 0xFF,false); strcpy(s,mvstr1); tmp = epsquare; - fprintf(stderr, "Hint: %s\n", s); if (VerifyMove(s,1,&mv)) { - ahead= 1; SelectMove(computer,2); VerifyMove(mvstr1,2,&mv); if (Sdepth > 0) Sdepth--; --- 114,121 ---- *************** *** 139,148 **** ft = time((long *)0) - time0; epsquare = tmp; } - ahead= 0; #ifndef MSDOS - signal(SIGINT,Die); signal(SIGQUIT,Die); #endif while (!(ok || quit)) { --- 123,130 ---- *************** *** 150,155 **** --- 132,143 ---- i = scanz("%s",s); if (i == EOF || s[0] == 0) ExitChess(); player = opponent; + ok = VerifyMove(s,0,&mv); + if (ok && mv != hint) + { + Sdepth = 0; + ft = 0; + } if (strcmp(s,"bd") == 0) { *************** *** 156,180 **** ClrScreen(); UpdateDisplay(0,0,1,0); } ! else if (strcmp(s,"alg") == 0) ; ! else if (strcmp(s,"quit") == 0) quit = true; ! else if (strcmp(s,"post") == 0) post = !post; ! else if (strcmp(s,"set") == 0) EditBoard(); ! else if (strcmp(s,"go") == 0) ok = true; ! else if (strcmp(s,"help") == 0) help(); ! else if (strcmp(s,"force") == 0) force = !force; ! else if (strcmp(s,"book") == 0) Book = NULL; ! else if (strcmp(s,"new") == 0) NewGame(); ! else if (strcmp(s,"list") == 0) ListGame(); ! else if (strcmp(s,"level") == 0) SelectLevel(); ! else if (strcmp(s,"hash") == 0) hashflag = !hashflag; ! else if (strcmp(s,"beep") == 0) beep = !beep; ! else if (strcmp(s,"Awindow") == 0) ChangeAlphaWindow(); ! else if (strcmp(s,"Bwindow") == 0) ChangeBetaWindow(); ! else if (strcmp(s,"rcptr") == 0) rcptr = !rcptr; ! else if (strcmp(s,"hint") == 0) GiveHint(); ! else if (strcmp(s,"zero") == 0) ZeroTTable(); ! else if (strcmp(s,"both") == 0) { bothsides = !bothsides; Sdepth = 0; --- 144,167 ---- ClrScreen(); UpdateDisplay(0,0,1,0); } ! if (strcmp(s,"quit") == 0) quit = true; ! if (strcmp(s,"post") == 0) post = !post; ! if (strcmp(s,"set") == 0) EditBoard(); ! if (strcmp(s,"go") == 0) ok = true; ! if (strcmp(s,"help") == 0) help(); ! if (strcmp(s,"force") == 0) force = !force; ! if (strcmp(s,"book") == 0) Book = NULL; ! if (strcmp(s,"new") == 0) NewGame(); ! if (strcmp(s,"list") == 0) ListGame(); ! if (strcmp(s,"level") == 0) SelectLevel(); ! if (strcmp(s,"hash") == 0) hashflag = !hashflag; ! if (strcmp(s,"beep") == 0) beep = !beep; ! if (strcmp(s,"Awindow") == 0) ChangeAlphaWindow(); ! if (strcmp(s,"Bwindow") == 0) ChangeBetaWindow(); ! if (strcmp(s,"rcptr") == 0) rcptr = !rcptr; ! if (strcmp(s,"hint") == 0) GiveHint(); ! if (strcmp(s,"zero") == 0) ZeroTTable(); ! if (strcmp(s,"both") == 0) { bothsides = !bothsides; Sdepth = 0; *************** *** 181,193 **** SelectMove(opponent,1); ok = true; } ! else if (strcmp(s,"reverse") == 0) { reverse = !reverse; ClrScreen(); UpdateDisplay(0,0,1,0); } ! else if (strcmp(s,"switch") == 0) { computer = otherside[computer]; opponent = otherside[opponent]; --- 168,180 ---- SelectMove(opponent,1); ok = true; } ! if (strcmp(s,"reverse") == 0) { reverse = !reverse; ClrScreen(); UpdateDisplay(0,0,1,0); } ! if (strcmp(s,"switch") == 0) { computer = otherside[computer]; opponent = otherside[opponent]; *************** *** 195,225 **** Sdepth = 0; ok = true; } ! else if (strcmp(s,"white") == 0 || strcmp(s, "first") == 0) { computer = white; opponent = black; ok = true; force = false; Sdepth = 0; } ! else if (strcmp(s,"black") == 0) { computer = black; opponent = white; ok = true; force = false; Sdepth = 0; } ! else if (strcmp(s,"undo") == 0 && GameCnt >= 0) Undo(); ! else if (strcmp(s,"remove") == 0 && GameCnt >= 1) { Undo(); Undo(); } ! else if (strcmp(s,"get") == 0) GetGame(); ! else if (strcmp(s,"save") == 0) SaveGame(); ! else if (strcmp(s,"depth") == 0) ChangeSearchDepth(); ! else if (strcmp(s,"random") == 0) dither = 6; ! else if (strcmp(s,"easy") == 0) seteasy(); ! else if (strcmp(s,"contempt") == 0) SetContempt(); ! else if (strcmp(s,"xwndw") == 0) ChangeXwindow(); ! else if (strcmp(s,"test") == 0) { t1 = time(0); cnt = 0; --- 182,212 ---- Sdepth = 0; ok = true; } ! if (strcmp(s,"white") == 0) { computer = white; opponent = black; ok = true; force = false; Sdepth = 0; } ! if (strcmp(s,"black") == 0) { computer = black; opponent = white; ok = true; force = false; Sdepth = 0; } ! if (strcmp(s,"undo") == 0 && GameCnt >= 0) Undo(); ! if (strcmp(s,"remove") == 0 && GameCnt >= 1) { Undo(); Undo(); } ! if (strcmp(s,"get") == 0) GetGame(); ! if (strcmp(s,"save") == 0) SaveGame(); ! if (strcmp(s,"depth") == 0) ChangeSearchDepth(); ! if (strcmp(s,"random") == 0) dither = 6; ! if (strcmp(s,"easy") == 0) easy = !easy; ! if (strcmp(s,"contempt") == 0) SetContempt(); ! if (strcmp(s,"xwndw") == 0) ChangeXwindow(); ! if (strcmp(s,"test") == 0) { t1 = time(0); cnt = 0; *************** *** 232,246 **** rate = cnt / (t2-t1); printz("cnt= %ld rate= %ld\n",cnt,rate); } - else { - ok = VerifyMove(s,0,&mv); - if (ok && mv != hint) - { - Sdepth = 0; - ft = 0; } - } - } ElapsedTime(1); if (force) --- 219,225 ---- *************** *** 252,258 **** #ifdef CHESSTOOL printf("%d. %s\n",++mycnt2,s); #endif CHESSTOOL - signal(SIGINT,TerminateSearch); signal(SIGQUIT,TerminateSearch); #endif MSDOS } --- 231,236 ---- *************** *** 376,391 **** printz("%5s ",mvstr1); } printz("\n"); - #else - register int i; - fprintf(stderr,"%2d%c %5d %4ld %7ld ",Sdepth,ch,score,et,NodeCnt); - for (i = 1; bstline[i] > 0; i++) - { - algbr((short)(bstline[i] >> 8),(short)(bstline[i] & 0xFF),false); - if (i == 9 || i == 17) fprintf(stderr,"\n "); - fprintf(stderr,"%5s ",mvstr1); - } - fprintf(stderr,"\n"); #endif } --- 354,359 ---- *************** *** 394,409 **** short side; { #ifndef MSDOS - signal(SIGINT,TerminateSearch); signal(SIGQUIT,TerminateSearch); #endif #ifndef CHESSTOOL printz("\nMove# %d Target= %ld Clock: %ld\n", TCmoves-TimeControl.moves[side]+1, ResponseTime,TimeControl.clock[side]); - #else - fprintf(stderr,"\nMove# %d Target= %ld Clock: %ld\n", - TCmoves-TimeControl.moves[side]+1, - ResponseTime,TimeControl.clock[side]); #endif } --- 362,372 ---- *************** *** 430,451 **** ListGame(); exit(0); } - - fprintf(stderr,"Nodes= %ld Eval= %ld Hash= %ld Rate= %ld ", - NodeCnt,EvalNodes,HashCnt,evrate); - fprintf(stderr,"CPU= %.2ld:%.2ld.%.2ld\n\n", - cputimer/6000,(cputimer % 6000)/100,cputimer % 100); - - if (root->flags & epmask) UpdateDisplay(0,0,1,0); - else UpdateDisplay(root->f,root->t,0,root->flags & cstlmask); - fprintf(stderr,"My move is: %s\n\n",mvstr1); - /* if (beep) fprintf(stderr,"%c",7); */ - - if (root->flags & draw) fprintf(stderr,"Draw game!\n"); - else if (root->score == -9999) fprintf(stderr,"opponent mates!\n"); - else if (root->score == 9998) fprintf(stderr,"computer mates!\n"); - else if (root->score < -9000) fprintf(stderr,"opponent will soon mate!\n"); - else if (root->score > 9000) fprintf(stderr,"computer will soon mate!\n"); #else printz("Nodes= %ld Eval= %ld Hash= %ld Rate= %ld ", NodeCnt,EvalNodes,HashCnt,evrate); --- 393,398 ---- *************** *** 465,474 **** #endif CHESSTOOL } - #include <sys/time.h> - static struct timeval poll; - ElapsedTime(iop) short iop; --- 412,418 ---- *************** *** 479,489 **** */ { - if (ahead) { - int in= 1; - if (select(32, &in, 0, 0, &poll)) - timeout= true; - } et = time((long *)0) - time0; if (et < 0) et = 0; ETnodes += 50; --- 423,428 ---- *************** *** 583,589 **** struct BookEntry *entry; unsigned short mv,*mp,tmp[100]; ! if ((fd = fopen("/usr/local/lib/gnuchess.book","r")) != NULL) { /* setvbuf(fd,buffr,_IOFBF,2048); --- 522,528 ---- struct BookEntry *entry; unsigned short mv,*mp,tmp[100]; ! if ((fd = fopen("/usr/games/lib/gnuchess.book","r")) != NULL) { /* setvbuf(fd,buffr,_IOFBF,2048); *************** *** 608,616 **** i = 0; side = white; } fclose(fd); - } else { - fprintf(stderr, "No Book!\n"); - exit(1); } } --- 547,552 ---- *************** *** 784,791 **** { #ifndef CHESSTOOL printz("%s\n"); - #else - printz("%s\n",s); #endif CHESSTOOL } --- 720,725 ---- *** uxdsp.c Fri Dec 8 09:37:23 1989 --- org/uxdsp.c Sun May 7 21:12:53 1989 *************** *** 41,49 **** #define scanz fflush(stdout),scanw #define printz printw - seteasy() - { - } Initialize() { --- 41,46 ---- *************** *** 325,331 **** gotoXY(40,23); printz("Transposition table: "); if (hashflag) printz("ON"); else printz("OFF"); refresh(); ! getchar(); /* while (getchar() != 27); */ ClrScreen(); UpdateDisplay(0,0,1,0); } --- 322,328 ---- gotoXY(40,23); printz("Transposition table: "); if (hashflag) printz("ON"); else printz("OFF"); refresh(); ! while (getchar() != 27); ClrScreen(); UpdateDisplay(0,0,1,0); } *************** *** 569,575 **** struct BookEntry *entry; unsigned short mv,*mp,tmp[100]; ! if ((fd = fopen("/usr/local/lib/gnuchess.book","r")) != NULL) { Book = NULL; i = 0; side = white; --- 566,572 ---- struct BookEntry *entry; unsigned short mv,*mp,tmp[100]; ! if ((fd = fopen("gnuchess.book","r")) != NULL) { Book = NULL; i = 0; side = white; *************** *** 591,599 **** i = 0; side = white; } fclose(fd); - } else { - fprintf(stderr, "No Book!\n"); - exit(1); } } --- 588,593 ---- No differences encountered *** Makefile Fri Dec 8 08:47:20 1989 --- org/Makefile Thu Apr 27 04:59:51 1989 *************** *** 37,51 **** cc -o gnuchessr gnuchess.o nondsp.o gnuchess.o: gnuchess.c ! cc -O -c gnuchess.c ! #cc -DCHESSTOOL -O -c gnuchess.c uxdsp.o: uxdsp.c cc -O -c uxdsp.c nondsp.o: nondsp.c ! cc -O -c nondsp.c ! #cc -DCHESSTOOL -O -c nondsp.c distribution: tar cf - version.h gnuchess.h gnuchess.c uxdsp.c nondsp.c Xchess gnuchess.book DOCUMENTATION Makefile > gnuchess.tar --- 37,49 ---- cc -o gnuchessr gnuchess.o nondsp.o gnuchess.o: gnuchess.c ! cc -DCHESSTOOL -O -c gnuchess.c uxdsp.o: uxdsp.c cc -O -c uxdsp.c nondsp.o: nondsp.c ! cc -DCHESSTOOL -O -c nondsp.c distribution: tar cf - version.h gnuchess.h gnuchess.c uxdsp.c nondsp.c Xchess gnuchess.book DOCUMENTATION Makefile > gnuchess.tar *************** *** 52,57 **** compress gnuchess.tar install: ! cp gnuchessr /usr/local/gnuchessr ! cp gnuchess /usr/local/gnuchess ! cp gnuchess.book /usr/local/lib/gnuchess.book --- 50,55 ---- compress gnuchess.tar install: ! cp gnuchessr /usr/games/gnuchess.chesstool ! cp gnuchess /usr/games/gnuchess ! cp gnuchess.book /usr/games/lib/gnuchess.book