home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / games / volume13 / gnuchess4 / part09 < prev    next >
Internet Message Format  |  1992-08-03  |  57KB

  1. Path: uunet!zephyr.ens.tek.com!master!saab!billr
  2. From: billr@saab.CNA.TEK.COM (Bill Randle)
  3. Newsgroups: comp.sources.games
  4. Subject: v13i097:  gnuchess4 - GNU Chess 4.0, Part09/12
  5. Message-ID: <3064@master.CNA.TEK.COM>
  6. Date: 19 Jun 92 15:55:04 GMT
  7. Sender: news@master.CNA.TEK.COM
  8. Lines: 1537
  9. Approved: billr@saab.CNA.TEK.COM
  10.  
  11. Submitted-by: cracraft@rice-chex.ai.mit.edu (Stuart Cracraft)
  12. Posting-number: Volume 13, Issue 97
  13. Archive-name: gnuchess4/Part09
  14. Supersedes: gnuchess2: Volume 4, Issue 37-40
  15. Environment: 
  16.  
  17.  
  18.  
  19. #! /bin/sh
  20. # This is a shell archive.  Remove anything before this line, then unpack
  21. # it by saving it into a file and typing "sh file".  To overwrite existing
  22. # files, type "sh file -c".  You can also feed this as standard input via
  23. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  24. # will see the following message at the end:
  25. #        "End of archive 9 (of 12)."
  26. # Contents:  doc/CHANGES doc/ChangeLog doc/PORTING src/gnuchess.h
  27. # Wrapped by billr@saab on Fri Jun 19 08:36:02 1992
  28. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  29. if test -f 'doc/CHANGES' -a "${1}" != "-c" ; then 
  30.   echo shar: Will not clobber existing file \"'doc/CHANGES'\"
  31. else
  32. echo shar: Extracting \"'doc/CHANGES'\" \(15786 characters\)
  33. sed "s/^X//" >'doc/CHANGES' <<'END_OF_FILE'
  34. X      GNU CHESS HISTORY
  35. X    (#include "../version.h")
  36. X
  37. XJanuary 8, 1990 -- Hans Eric Sandstrom (hes@log-sv.se)
  38. XChanged the transpositon table to allow 66536 positions per player.
  39. XThis means a 1.3 Mbyte hash table. Introduced simple rehashing. And
  40. Xalso made setting ttable 0 exclude all transposition code from
  41. Xgnuchess (for machines with very little memory).
  42. X
  43. X
  44. XJanuary 3, 1990 -- Tom Vijlbrief (tnosoes!tom@nluug.n)
  45. XContributed code to fix undo of promotions.
  46. XAnd a bugfix RMBLY was to small.
  47. X
  48. X
  49. XJanuary 27, 1990 -- Hans Eric Sandstrom (hes@log-sv.se)
  50. XFixed nuxdsp.c to work with my changes (Saved games format)
  51. X
  52. X
  53. XJanuary 26, 1990 -- Hans Eric Sandstrom (hes@log-sv.se)
  54. XVerified that the underpromotion routines works.
  55. XFound and fixed the bug that caused gnuchess to report mate
  56. Xand draw prematurely.
  57. X
  58. X
  59. XJanuary 25, 1990 -- Hans Eric Sandstrom (hes@log-sv.se)
  60. XReceived the underpromotion additions from jhol@tolsun.oulu.fi
  61. XMade some optimizations in trapped and KingScan.
  62. XAdded more comments on how to improve the search.
  63. XAdded info on usage of the array Tree in post mode.
  64. XChanged the index in the transposition table to unsigned short to
  65. Xallow a hash table of size 65536.
  66. X
  67. X
  68. XJanuary 11, 1990 -- Hans Eric Sandstrom (hes@log-sv.se)
  69. XFormatted gnuchess according to GNU standards with indent.
  70. X
  71. X
  72. XJanuary 9, 1990 -- Hans Eric Sandstrom (hes@log-sv.se)
  73. XInserted a missing comma in KTHRT.
  74. XRemoved mvstr1[5],mvstr2[5] from gnuchess.c, they are only used in the
  75. Xuser-interface routines uxdsp.c nondsp.c anyway.
  76. XRewrote algbr to generate move strings for underpromotion. (ph8k or h7h8k)
  77. XSome optimizations in CaptureList.
  78. XChanged row, column and locn to macros.
  79. XMade memset default and introduced a switch NOMEMSET for computers without
  80. Xmemset or where memset is a speed penality. I tested this on:
  81. XSparc -  no change, DECstation - no change and Sun3/60 - 4% speed improvment.
  82. XChanged + to | in some bit-field manipulations.
  83. XFixed the castle-with-moved-rook-bug, removed kingmoved and introduced
  84. Xan array Mvboard to keep track on how many times we have moved from a
  85. Xparticular square.
  86. XFixed the check for zero division in Time controls.
  87. XAdded BINDIR and LIBDIR in the Makefile to set where gnuchess and
  88. Xgnuchess.book gets installed.
  89. XAll I have to do now is to test if all this works (-:
  90. X
  91. XFebruary 3, 1990 -- Tom Vijlbrief
  92. XNoticed an error in the rook mobility bonus. RMBLTY array was
  93. Xindexed 0 to 14, but had only 14 members. Added final member.
  94. X
  95. XJanuary 1, 1990 -- Stuart Cracraft (cracraft @wheaties.ai.mit.edu)
  96. XSome special openings were inserted and some taken out.
  97. XA small change was made to allow the program to detect draws earlier
  98. Xin the tree (via Stanback).
  99. XThinking on opponent's time is now working in nondsp.c. For some
  100. Xreason it had been deactivated.
  101. XTested GNU Chess 1.55 with with Chesstool on a SUN.
  102. XMatch vs. Fidelity Mach 3 (USCF 2265) resulted in 7-3 score for GNU
  103. Xon a Sparcstation giving a 2325-2335 performance result.
  104. X
  105. XJanuary 1, 1990 -- Hes @log-se.sv
  106. XHe contributed faster move generator routines.
  107. X
  108. XAugust 1, 1989 -- Jay Scott
  109. XHe proofread the opening book and made
  110. Xcorrections.
  111. X
  112. XJune 9, 1989 -- Tim Radzy (unet!nplab4!radz@ames.arc.nasa.gov)
  113. XHe fixed a bug in xchess/board.c. In a post-game new-game situation,
  114. Xcastling wouldn't be permitted under circumstances. Tim made
  115. Xit possible to castle again.
  116. X
  117. XMay 12, 1989 -- Joe Garbarini (garbarini%kegger@circus.llnl.gov)
  118. XRecommended changes to documentation vis a vis chesstool usage.
  119. X
  120. XMay 5, 1989 -- Jouko Holopainen (jhol@tolsun.oulu.fi)
  121. XWrote code to support underpromotion.
  122. XChanged interface to accept ECO/Informator style moves.
  123. X
  124. XApril 30, 1989 -- Various GNU contributors
  125. Xsetlinebuf() modification for xchess/chesstool.
  126. Xcheck for zero division in time printout.
  127. X
  128. XJanuary 17, 1989 -- Anders Thulin
  129. XProvided extensive addition to the opening book for his
  130. Xfavorite opening the Vienna Game. This was drawn from ECO.
  131. X
  132. XNovember 23, 1988 -- Stuart Cracraft
  133. XInstalled new version of Xchess that is better debugged, works on
  134. Xthe next version of X. Thanks to Wayne Christopher and Arturo Perez.
  135. X
  136. XAugust 28, 1988 -- Stuart Cracraft
  137. XRemoved a sacrifice line from the Giuoco Piano entry in the opening
  138. Xbook; the program didn't seem to like the positions it got from this line.
  139. X  
  140. XDecember 30, 1987 -- John Stanback
  141. XWrote a short blurb on the heuristics contained in GNU Chess. It resides
  142. Xin the subdirectory DOCUMENTATION as the file HEURISTICS.
  143. X
  144. XDecember 17, 1987 -- John Stanback
  145. XModified criteria for positional evaluation in quiescence search
  146. Xto include positions in which the estimated score lies within
  147. Xthe alpha-beta window; fixed a bug in the king proximity to pawns heuristic;
  148. Xfixed a bug involving passed pawn heuristics;
  149. X
  150. XDecember 16, 1987 -- Stuart Cracraft
  151. XAdded automatic 'list' upon exit (both in display, non-display, and
  152. Xchesstool mode); command-line setting of tournament time controls
  153. Xbug fixed.
  154. X
  155. XDecember 14, 1987 -- John Stanback
  156. XGNU defeated the commercial product 'Fidelity Excellence' 5.5-4.5 in
  157. Xa 10-game match. It was running at about 500 nodes per second (typical
  158. Xof its speed on a VAX 8650) and this would indicate its strength
  159. Xwould be about USCF 1875-1900.
  160. X
  161. XDecember 4, 1987 -- John Stanback
  162. XMan page added. Command line arguments now specify regular clock
  163. Xsettings if so desired (useful for SUN players). Thinking
  164. Xon opponent's time is now disabled by default. Estimated 
  165. Xrating is 1850 at 500 nodes per second.
  166. X
  167. XOctober 20, 1987 -- Stuart Cracraft
  168. XFixed GNU/SUN interaction. Chesstool and its features now
  169. Xseem to fully work.
  170. X
  171. XOctober 5, 1987 -- Ken Thompson
  172. XGNU beat Belle (actually drew due to a bug, but
  173. XKen kept GNU playing through to the win) while
  174. Xrunning on a Cray XMP-48. In this 3-1 time handicap game
  175. XBelle outsearched Cray GNU by 10-1 (even with the handicap).
  176. X
  177. XSeptember 26, 1987 -- John Stanback at HP
  178. XHash table functioning. Thinking on opponent's
  179. Xtime functioning.
  180. X
  181. XAugust 20, 1987   -- Mike Meyer at Berkeley
  182. XMike ran GNU Chess on a Cray 1 supercomputer.
  183. XThe system was very heavily loaded, so the
  184. Xprogram was not as speedy as with the Cray below.
  185. X
  186. XAugust 16, 1987   -- David Goldberg at SUN
  187. XHe added "chesstool" support so that this
  188. Xversion of GNU Chess can run under the
  189. Xdisplay manager "chesstool".
  190. X
  191. XAugust 15, 1987   -- John Stanback at HP
  192. XHash tables, more heuristics, a modified
  193. Xsearch which is more efficient. He also
  194. Xdiscovered a bug in the piece-exchanger. This
  195. Xwould cause the program to exchange pieces suboptimally.
  196. XWith this fix, the program should play much
  197. Xmore strongly.
  198. X
  199. XAugust 13, 1987   -- Ken Thompson at Bell Labs
  200. XKen ran GNU Chess on a Cray XMP supercomputer
  201. X (among other processors). The program got
  202. X about 3000-4000 chess positions per second
  203. X which is comprable to today's fastest bit-slice 
  204. X commercial machines. Also, he had GNU Chess
  205. X play two games against Belle.
  206. X
  207. XJuly 19, 1987 -- Jay Scott & John Stanback
  208. X Many positional heuristics have been added.
  209. X
  210. XJuly 18, 1987 -- Stuart Cracraft
  211. X Improvements have been made to the opening
  212. X book. It is mostly an MCO book, containing
  213. X major variations from many of the major openings
  214. X and particularly in-depth on Sicilian.
  215. X
  216. XMay 11, 1987  -- John Stanback at HP
  217. X He donated his chess program, a fairly mature
  218. X and strong program.
  219. X
  220. XMay 1, 1987   -- Stuart Cracraft
  221. X He added several bug fixes various people
  222. X had reported. He also changed makemove() so that
  223. X the calling syntax is makemove(movelist,index,board)
  224. X rather than makemove(move,board). Having the latter
  225. X tickled a bug in at least one manufacturer's C-compiler,
  226. X so rather than write fancy code, we simplified it.
  227. X
  228. XApril 25, 1987-- Jim Aspnes at MIT
  229. XHe added all sorts of useful capabilities,
  230. Xincluding positional evaluation in the tree
  231. Xsearch using a table-driven algorithm,
  232. Xmodifying transposition table code in order
  233. Xto work properly, though it doesn't improve
  234. Xspeed too much, checkmates/stalemates detected
  235. Xin the search, en passant captures allowed,
  236. Xdetect repeated positions, iterative deepening,
  237. Xquicker quiescence search, tournament time controls,
  238. Xsqattacked sped up by a factor of 4, compile-time
  239. Xdebugging options.
  240. X
  241. XJanuary 2, 1987   -- Stuart Cracraft
  242. X He added a few more Tal games to the collection.
  243. X
  244. XJanuary 2, 1987   -- Jim Aspnes at MIT
  245. X He contributed MCO variations for the Catalan,
  246. X Queen's Indian, and Reti openings.
  247. X
  248. XDecember 29, 1986 -- Jim Aspnes at MIT
  249. X He contributed all MCO variations of the Najdorf
  250. X to the opening book. He also contributed a LISP
  251. X macro (written in GNU Emacs Lisp) to convert
  252. X xchess game formats to GNU Chess opening book
  253. X format. 
  254. X
  255. XDecember 14, 1986 -- Ken Thompson at Bell Labs
  256. X He contributed almost 200 games by Tal to
  257. X our collection of Tal-games, bringing the
  258. X total number of Tal positions in the book
  259. X to 10,692. Total book positions now 13,207.
  260. X These reside in bookin, bookin.bdg, bookin.tal.
  261. X Note that presently, only bookin and bookin.tal
  262. X can be used. The new Tal positions came in a
  263. X slightly different format, which we have chosen
  264. X to adopt as our standard format. All book
  265. X games in bookin and bookin.bdg will gradually
  266. X change into the new standard format.
  267. X
  268. XDecember 11, 1986 -- Stuart Cracraft
  269. X Added "averages" for node-count per move,
  270. X cpu per move, rate per move to list_history
  271. X and write_history.
  272. X New version of Xchess installed.
  273. X Started typing in Tal games into "bookin.tal".
  274. X Added "total book positions" printout to "book"
  275. X and "enter" statistics printout.
  276. X
  277. XDecember 10, 1986 -- Stuart Cracraft
  278. X Implemented aspiration search in normal
  279. X alpha-beta search. Speedups of 3% to 40%
  280. X have been noticed in most positions.
  281. X Occasionally a slower search will result,
  282. X but it is thought these are worth the
  283. X usual speedups.
  284. X
  285. XDecember 9, 1986  -- Stuart Cracraft
  286. X Fixed minor bug in write_history()
  287. X Added another Tal game, 2nd game of 1st world
  288. X championship match with Botvinnik, a Benoni.
  289. X
  290. XDecember 9, 1986  -- Stuart Cracraft
  291. X Enhanced parallelism. All parallel processors
  292. X now communicate via a shared data file and
  293. X are kept running (in idle loops watching the
  294. X shared data file). This saves us a few seconds
  295. X on each move since the 'rsh' need not be invoked
  296. X more than once (at the beginning). Since the
  297. X shared data file is now implemented, we will
  298. X next work towards a "parallel anarchy" in which
  299. X any processor can use any other processor in
  300. X order to reduce its search. The current scheme
  301. X with the program being only as fast as its slowest
  302. X processor, is quite inefficient.
  303. X
  304. XDecember 1, 1986 --  Jim Aspnes at MIT
  305. X Added a couple of Master games from 
  306. X Modern Chess Openings 12 (a Fischer game,
  307. X and a Matanovic game).
  308. X
  309. XNovember 30, 1986 -- Stuart Cracraft
  310. X Added parallelism. Can now handle multiple
  311. X processors (sharing same disk). Later we will
  312. X add the capability to use processors not sharing
  313. X the same disk. Modified README and MAN-PAGE.
  314. X
  315. XNovember 26, 1986 -- Stuart Cracraft
  316. X Fixed a few bugs in book-mailing mechanism.
  317. X Fixed a bug regarding situations where only
  318. X one move is available.
  319. X Fixed a bug in read_history() that caused
  320. X Black queenside castles to be mishandled.
  321. X
  322. XNovember 25, 1986 -- Stuart Cracraft
  323. X Added two pawn heuristics. Reward pawns moving into
  324. X a phalanx of pawns. A phalanx is two or more
  325. X horizontally-connected pawns. Likewise, penalize
  326. X pawns leaving a phalanx of pawns. The penalty for
  327. X leaving is a little more than the reward for
  328. X entering.
  329. X
  330. XNovember 24, 1986 -- Stuart Cracraft
  331. X A user reported an unbelievable bug. Investigation
  332. X of this bug led to the discovery that GNU Chess was
  333. X  not picking the move judged best by the tree search
  334. X in all cases. This resulted in the bug showing
  335. X  itself which further showed that the program was
  336. X selecting an inferior move. This may result in an
  337. X improvement to the program's play.
  338. X
  339. XNovember 24, 1986 -- Stuart Cracraft
  340. X Added two heuristics. Penalize king moves if
  341. X the king hasn't castled yet. Also, penalize pawn
  342. X moves which produce doubled pawns. Should
  343. X probably have something for isolated pawns
  344. X too.
  345. X
  346. XNovember 23, 1986 -- Wayne Christopher at Berkeley
  347. X New version of X chess display front-end.
  348. X Fixed bugs include multiple pieces, runs
  349. X on SUNS & Bobcats, loads saved games.
  350. X
  351. XNovember 23, 1986 -- Stuart Cracraft
  352. X Cleaned up some minor bugs regarding history.
  353. X Added "Illegal command" error message at Wayne's
  354. X request.
  355. X
  356. XNovember 22, 1986 -- David Goldberg at SUN Microsystems
  357. X He complained that GNU Chess was memory-hungry.
  358. X A few minor modifications to hash.c reduced
  359. X uninitialized data space 87% and text space
  360. X 12%. This should make it easier for GNU Chess
  361. X to run on small computers.
  362. X
  363. XNovember 22, 1986 -- Stuart Cracraft
  364. X "read" command was working, but needed
  365. X additional tweaking so that history
  366. X array would be printed by list_history().
  367. X
  368. XNovember 19, 1986 -- Stuart Cracraft
  369. X Added "read" command which reads a history
  370. X file (game listing) and restores the board
  371. X to as if the person was still playing that.
  372. X particular game. Generally cleaned up 
  373. X history mechanism, made it more orthogonal.
  374. X Revised README. Added doc to MAN-PAGE.
  375. X
  376. XNovember 16, 1986 -- Stuart Cracraft
  377. X More opening book bugs found and fixed.
  378. X Added capability to accept abbreviated-algebraic notation
  379. X for entering "book" games from files.
  380. X Added approximately 2500 new positions to
  381. X opening book from games involving the
  382. X opening called Blackmar-Diemer Gambit,
  383. X a hoary line developed by Diemer in
  384. X Germany years ago.
  385. X
  386. XNovember 15, 1986 -- Wayne Christopher at Berkeley
  387. X He modified the move generator, resulting in
  388. X a 28% speedup.
  389. X
  390. XNovember 14, 1986 -- Stuart Cracraft
  391. X He documented a lot of the GNU Chess modules
  392. X with brief comments for each function. More
  393. X extensive internal documentation may go in
  394. X later.
  395. X
  396. XNovember 14, 1986 -- Wayne Christopher at Berkeley
  397. X He created the Xchess interface for
  398. X GNU Chess to have windowing with X windows.
  399. X
  400. XNovember 14, 1986 -- Stuart Cracraft
  401. X He added a "randomization" feature to
  402. X the opening book. This will cause the
  403. X program to select randomly from alternate
  404. X variations whenever -DBEST is removed
  405. X from Makefile's CFLAGS. If this is not
  406. X removed, the opening play selects the
  407. X first move found in the book as it appears
  408. X "in order" in the human-readable book.
  409. X
  410. XNovember 14, 1986 -- David Goldberg at SUN Microsystems
  411. X He responded to a query about dbm(3) which
  412. X eventually resulted in the fixing of a subtle
  413. X bug in the book code which was causing the
  414. X program to sometimes hash to the incorrect
  415. X address and thereby produce a book move which
  416. X didn't even exist in the book. Thanks David!
  417. X
  418. XNovember 14, 1986 -- Stuart Cracraft
  419. X He added the "oboard" routine in util.c. This
  420. X is the reverse of the already extant "iboard"
  421. X (same module). These two routines translate
  422. X between GNU Chess internal format and
  423. X Forsythe notation.
  424. X
  425. XNovember 10, 1986 -- Stuart Cracraft
  426. X He added the "enter" command. This causes
  427. X the current game to be entered in the book.
  428. X Then, GNU Chess tries to mail this new entry
  429. X to the book maintainers (for inclusion in
  430. X the master copy of the book).
  431. X
  432. XNovember 9, 1986 -- Stuart Cracraft
  433. XHe added code for an opening book. MAN-PAGE
  434. Xand README were modified accordingly.
  435. X
  436. XNovember 8, 1986 -- Stuart Cracraft
  437. XChecks and mates are now noticed at ply-1.
  438. XThis is a more complete fix to the Oct 31 fix.
  439. X
  440. XOctober 31, 1986 -- Stuart Cracraft
  441. XFirst attempt at fix to bug which causes
  442. Xprogram to check human's king when program
  443. Xitself is in check.
  444. X
  445. XOctober 31, 1986 -- Mly at MIT
  446. XReported a bug which caused program to crash
  447. Xwhen an illegal human move was played. Fixed.
  448. XAlso, program was unable to play as White. Fixed.
  449. X
  450. XOctober 22, 1986 -- Stuart Cracraft
  451. XPps now rewards moves which liberate bishops.
  452. X
  453. XOctober 19, 1986 -- Stuart Cracraft
  454. XAdded bitmapper routines to distribution.
  455. XAdded version notice.
  456. X
  457. XOctober 19, 1986 -- David Goldberg at SUN Microsystems
  458. XInterfaced GNU Chess with SUN's chesstool.
  459. X
  460. XOctober 18, 1986 -- Initial release date. 
  461. X
  462. X
  463. END_OF_FILE
  464. if test 15786 -ne `wc -c <'doc/CHANGES'`; then
  465.     echo shar: \"'doc/CHANGES'\" unpacked with wrong size!
  466. fi
  467. # end of 'doc/CHANGES'
  468. fi
  469. if test -f 'doc/ChangeLog' -a "${1}" != "-c" ; then 
  470.   echo shar: Will not clobber existing file \"'doc/ChangeLog'\"
  471. else
  472. echo shar: Extracting \"'doc/ChangeLog'\" \(17304 characters\)
  473. sed "s/^X//" >'doc/ChangeLog' <<'END_OF_FILE'
  474. XSun May 31 Patchlevel 44 Bart Massey (bart@cs.uoregon.edu
  475. X    * Rename structure element move to bmove in book.c since
  476. X      curses.h defines a move macro.
  477. X    * Get rid of superfluous returns in dspcom.c and checkbook.c
  478. X    * Be sure beep message has an arg in uxdsp.c
  479. X    * Add exit status to exit() call in checkbook.c
  480. XSat May 30 Patchlevel 43 Stuart Cracraft (cracraft@rice-chex.ai.mit.edu)
  481. X    * Fix checkmate/draw handling.
  482. X    * Add current module copyrights and COPYING.
  483. X    * Ifdef forced-mate announcements as too buggy.
  484. XFri May 29 Patchlevel 42 Stuart Cracraft (cracraft@rice-chex.ai.mit.edu)
  485. X    * HUNGP/HUNGX in eval.c updated to values used by Slate/Atkin
  486. X      of Chess 4.x. This fixes a problem with Reinfeld's #281
  487. X      and poor play in Alapin's opening. General play against
  488. X      me has been much better.
  489. XMon May 11 Patchlevel 41 Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  490. X    * genmove update to look at less possible promotion moves
  491. X    * fix bugs in move ordering logic
  492. X          * remove operator time as a default
  493. XThur Apr 30 Patchlevel 40 Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  494. X    * Book updates from  Timm Mann(mann@src.dec.com)
  495. X    * Search updates to look more at possible promotion moves
  496. X    * Transposition table update from U. Koistinen (md85-epi@nada.kth.se)
  497. X          to allow for estimated scores.
  498. XMon Apr 27  Patchlevel 38  Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  499. X    * book updates for Cochrane  from Timm Mann(mann@src.dec.com)
  500. X    * added limit for infinite checks in endgame to tree search
  501. X          to limit time spent in any branch
  502. XWed Apr 25  Patchlevel 38  Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  503. X    * fix slowdown caused by previous changes. 
  504. XWed Apr 22  Patchlevel 37  Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  505. X    * fix sizes of ttable (malloc) and hashfile (-c option)
  506. X      to allow for rehashing
  507. X    * eliminate pick replace with qsort
  508. X    * adjust lookahead limits
  509. XThur Apr 15  Patchlevel 35  Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  510. X    * fix bugs in search logic
  511. XMon Apr 13  Patchlevel 34  Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  512. X    * Fix bugs in game win/draw logic.
  513. XFri Apr 8  Patchlevel 34  Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  514. X    * rewrite time control moving it up a level
  515. X    * replace sorts with qsort
  516. X    * fix material command to all multiple N's and B's
  517. X    * and make it an ifdef on NOMATERIAL
  518. XFri Mar 30  Patchlevel 32  Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  519. X    * make MINDEPTH a define
  520. X    * eliminate #ifdef's for hashbd/hashkey it is always required
  521. X    * up MINDEPTH to 2 to always get a hint
  522. X    * add some dynamics to eval/estimate decision
  523. X    * more dynamic time allocation
  524. XFri Mar 27  Patchlevel 30  Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  525. X    * fix hashfile code again
  526. X    * fix startup for no book present
  527. X    * fix race condition in search
  528. X    * allow parameters on commands
  529. XWed Mar 25  Patchlevel 28  Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  530. X    * fix bug in hashfile debug code
  531. X    * add material check for draw and material command
  532. X    * fix QUIETBACKGROUND code
  533. XTue Mar 24  Patchlevel 27  Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  534. X    * fix book move reject to not select a ? move
  535. X    * add check to HASHFILE option to check for ilegal move
  536. X    * document debug options
  537. XMon Mar 23  Patchlevel 26  Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  538. X    * Add multiple time controls
  539. X    * apply fixes from  R.K.Lloyd@compsci.liverpool.ac.uk
  540. X      for screen update problems in visual mode
  541. XSun Mar 22  Patchlevel 25  Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  542. X    * Update man pages
  543. X    * fix false mate problem with transposition table
  544. X    * add history killers option but don't use it.
  545. X    * fix handling of input parameters so the doc and the
  546. X    program agree
  547. X    * allow time to be specified in seconds (machines are faster now)
  548. X    * add QUIETBACKGROUND option from md85-epi@nada.kth.se.
  549. X    * put in book patch from md85-epi@nada.kth.se.
  550. X
  551. XSun Mar 15  Patchlevel 22  Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  552. X    * Add options for SpaceBonus table levels
  553. X    * Switch to new book
  554. X    * Add polling code for keyboard
  555. X
  556. XTue Mar 10  Patchlevel 21  Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  557. X    * correct depth test in PutInTTtable
  558. X    * patch from Urban Koistinen (md85-epi@nada.kth.se)
  559. X      correcting bug in repetition
  560. X
  561. XMon Mar 9  Patchlevel 20
  562. X    * correct defaults for MEMSET
  563. X
  564. XSat Mar 7  Patchlevel 19  Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  565. X    * add speedups by using memset for ZeroRPT
  566. X    * rewrite ScoreSpace
  567. X    * rewrite pick
  568. X
  569. XThur Mar 5  Patchlevel 18  Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  570. X    * fix bug in timing that led to negative times
  571. X    * change time allocation to be more flexible
  572. X    *  based on score and depth
  573. X        * eliminate a bad opening from the book
  574. X
  575. XSat Feb 15  Patchlevel 17  Urban Koistinen (md85-epi@nada.kth.se)
  576. X        * Added option -T n to set transposition table size 2^n.
  577. X        * -r n set rehash to n.
  578. X        * Changed repetition to make it work harder.
  579. X        * ScoreSpace changed to value central squares higher.
  580. X        * Made go change colors so white&black work as they should.
  581. X
  582. XFri Dec 30 08:34:00 1991  Patchlevel 16
  583. X    * Fix to eval.c for mis-transcribed sign in ScoreKBNK.
  584. X    * Fix to malloc call in init.c.
  585. X    * ScorePosition updated with addition of ScoreSpace
  586. X          to add in points for threats in a position.
  587. X      from  Urban Koistinen (md85-epi@nada.kth.se)
  588. X        * Various tuning of parameters
  589. X
  590. XFri Nov 30 08:34:00 1991  Patchlevel 15
  591. X    * from nv-90-mho@nada.kth.se
  592. X     patch to make listfile name meaningful instead of a random number
  593. X    * from  Urban Koistinen (md85-epi@nada.kth.se) move generation
  594. X     speedup for non-pawn moves and move selection improvements.
  595. X    * from  Mike McGann (mwm@hslrswi.hasler.ascom.ch) added language
  596. X     file to allow multiple languages to be supported. Fix broken 
  597. X         search on opponents time, fix bad moves in book.
  598. X
  599. XMon Oct 19 08:34:00 1991  Urban Koistinen (md85-epi@nada.kth.se)
  600. X        * patchlevel 14
  601. X
  602. X    * fix checks in castling logic to only allow kings to do it.
  603. X
  604. X    * fix repetition logic  "all pieces are the same" bug.
  605. X
  606. XThur Oct 10 13:34:00 1991  Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  607. X    * patchlevel 14
  608. X
  609. X    * expand the timing logic to allow more time in unstable
  610. X     positions
  611. X
  612. X    * Update man pages
  613. X
  614. X    * Fix printout bug in Checkbook
  615. X
  616. XTue Oct 8 13:34:00 1991  Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  617. X    * patchlevel 13
  618. X
  619. X    * General cleanup, Fix screens, prompts, rate calculation
  620. X    
  621. XSun Oct 5 13:34:00 1991  Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  622. X    * patchlevel 12
  623. X    * Change eval.c/KingValue to ignore Mking if the otherside
  624. X    has only pawns on the board. Tuning parameter is
  625. X    KINGPOSLIMIT.
  626. X    
  627. X    * Fix time print in gnuchess and gnuchessx. 
  628. X
  629. X    * Use ShowMessage for all error messages.
  630. X
  631. X    * Fix post option to print time in seconds.
  632. X
  633. XSun Oct 5 08:34:00 1991  Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  634. X    * patchlevel 11
  635. X    * speedups in search. Eliminate unused computation.
  636. X
  637. X    * change eval.c/KingValue to ignore Mking if there are
  638. X    only pawns on the board. Tuning Parameter is KINGPOSLIMIT.
  639. X
  640. X    * make DITHER a tuning parameter.
  641. X
  642. XTue Oct 1 08:34:00 1991  Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  643. X    * patchlevel 10
  644. X    * fix eval bug in ScorePosition. Evaluated pawn structute
  645. X    incorrectly. Introduced when gnuchess was split up.
  646. X
  647. X    * Change default for SCORETIME to -9000 it plays better
  648. X
  649. X    * correct promotion logic for CHESSTOOL and XBOARD only queens
  650. X    are generated now.
  651. X
  652. X    * correct handling of TOflag for bothsides mode.
  653. X
  654. XMon Sept 27 08:34:00 1991  Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  655. X    * fix more enpassant bugs in checkgame/checkbook
  656. X
  657. X    * misc speedups by inlining code.
  658. X    move SqAtakd to ataks.h and inline it.
  659. X    
  660. X    * Modify checkbook to also read xboard game files and
  661. X    check them for illegal moves. 
  662. X    
  663. X    * fix bug in game.c introduced by patch 8
  664. X
  665. XMon Sept 26 08:34:00 1991  Urban Koistinen (md85-epi@nada.kth.se) 
  666. X
  667. X    * Correct the making and unmaking of enpassant moves and
  668. X    numerous incorrect usages of ? throughout the program.
  669. X
  670. XMon Sept 24 08:34:00 1991  Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  671. X
  672. X    * force search re-init if PV chavges due to a timeout
  673. X
  674. X    * add patchlevel to the -v option to keep version straight.
  675. X    
  676. X    * Change search and timing logic. Search now backs up to
  677. X    previous level on a timeout. Search adds time to the search
  678. X    if the last top level PV is different from the current and
  679. X    this level is not finished. Seems to play much stronger.
  680. X
  681. XMon Sept 16 08:34:00 1991  Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  682. X    
  683. X    * Opening book now handles transitions. It continues looking
  684. X    at the book until 2 (tunable) successive turns fail to find a move
  685. X    there.
  686. X
  687. X    * GetOpenings now checks for errors on input. The current book was full 
  688. X    of illegal moves. They were filtered out since at game time the book
  689. X    move is matched against the legal move list. But it makes for bad
  690. X    opening play. EnPassant moves are not allowed in openings(a limitation?)
  691. X    Checks made are the there is a piece on the from square belonging
  692. X    to the right side and there is no piece or a piece belonging to the
  693. X    other side on the to square. There is no check that the piece is 
  694. X    moving legally.
  695. X    
  696. X    * ListGame now makes up the name chess.lst.random#. So if you are
  697. X    using xboard to play a match (two machine mode) they won't overwrite.
  698. X    
  699. X    * Added patch from Randy Ray (rray@SPECLAB.CR.USGS.GOV) to correctly
  700. X    format chess.lst
  701. X
  702. XWed Sept 4 08:34:00 1991  Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  703. X    
  704. X    * Renamed gnuchess3.1+ to gnuchess to reflect the split in 
  705. X    gnuchess development. There now seems to be 3 threads.
  706. X    Gnuchess, gnuchess for windows (3.21), and the gnuchess4
  707. X    project if it still exists.
  708. X    * Fix chesstool version to handle white as well as black.
  709. X    * Split program into modules for easier maintinance and
  710. X    development.
  711. X    * Fixed Illegal move bug in VerifyMove for promotion moves.
  712. X    * Replaced ResponseTime calculations with simpler version that
  713. X    stays within the time limits and seems to do as well or better
  714. X    in play.
  715. X    * General cleanup of the search algorithm
  716. X    * Fixed gnuan input processing and termination code.
  717. X    * Fixes to work with xboard match mode
  718. X    * Added TEST directory with 16 problems from Levy's
  719. X      Computer Chess book.
  720. X
  721. XTue Aug  6 18:10:47 1991  Philippe Schnoebelen  (phs@lifia.imag.fr)
  722. X
  723. X    * Modify handling of Book in Undo (previously, when you
  724. X    backtracked after quitting the book, the program was not able to
  725. X    use it again)
  726. X
  727. X    * Modify handling of Book in EditBoard and other routines so that
  728. X    the Book is not used if you don't start from the regular initial board.
  729. X
  730. XMon Aug  5 17:26:59 1991  Philippe Schnoebelen  (phs@lifia.imag.fr)
  731. X
  732. X    * Modify parse in gnuchess.c so that a move can be followed by '?'
  733. X    indicating that the program should not play it itself. Such a move
  734. X    is stored with the highest bit raised.
  735. X          Modify OpeningBook in gnuchess.c so that moves with highest bit
  736. X    set are recognized but not played by the program.
  737. X
  738. X    * Modify the declaration of array PieceList in gnuchess.[ch] to
  739. X    allow for up to 64 men of the same side. Such artificial
  740. X    situations can be built with edit and the program must be able to
  741. X    deal with them.
  742. X
  743. XMon Aug 1 10:20 1991 Mike McGann (mwm@hslrswi.hasler.ascom.ch)
  744. X    Split chesstool and xboard versions. Xboard is now
  745. X    gnuchessx and chesstool is gnuchessc.
  746. X
  747. XMon Apr 15 10:20 1991 Mike McGann {mwm@hslrswi.hasler.ascom.ch)
  748. X    Changed transposition table to cache positions found in transposition file
  749. X    Fix Undo's incorrect handling of promotions.
  750. X    Fix win and draw determination bugs.
  751. X     Fix bug in algbr that prevented correct display of promotion moves.
  752. X    Fix Undo to correctly display side to move.
  753. X    Add path to command line for save file and load file.
  754. X    Make save file human readable
  755. X    
  756. XThu May 24 13:42:24 1990  Hans Eric Sandstr|m  (hes at baloo)
  757. X    * Fixed a bug reported by Brian Wong (wong@cs.UAlberta.CA) in
  758. X    ScoreKPK
  759. X
  760. XSat May  5 15:58:31 1990  Hans Eric Sandstr|m  (hes at baloo)
  761. X    * extensive tests on MSDOS for 2 weeks and lots of changes:
  762. X    Moved all flags to a special flag structure.
  763. X    Added my own TODO file to the DOCUMENTATION.
  764. X    Moved GetOpenings and parse from the *dsp.c files.
  765. X    Made the transposition table enabled by default.
  766. X    Some cleanup in the *dsp.c code.
  767. X    Changed UpdateHashbd to a macro.
  768. X
  769. XWed Apr 18 16:38:30 1990  Hans-Erik Sandstr|m  (hes at tiamat)
  770. X    * Removed unnessesary global variables:
  771. X    (wking, bking, Enemyking, INCscore, slk, InChk, HasPawn,
  772. X    Zwmtl, Zbmtl, lpost, KBNKsq) this should make the program more
  773. X    readable.
  774. X    * Added a mini transposition table to detect repetitions, this
  775. X    means that repetition is called more seldom and should save some
  776. X    time. The idea for this came from Benno Tietz
  777. X    (tietz@eos.informatik.uni-bonn.de)
  778. X
  779. XThu Mar 29 02:49:00 1990  Thorsten Ohl at (td12@ddagsi3.bitnet)
  780. X     * nuxdsp.c has been given an ANSI interface (tailored
  781. X    after uxdsp.c as of Version 3.00 and a homegrown
  782. X    ANSI interface created in January for Version 1.55).
  783. X     *    uxdsp.c now understands ^C interrupts.
  784. X     *    both nuxdsp.c and uxdsp.c support the graphic characters
  785. X    of the IBM PC (can be disabled with -DSEVENBIT).
  786. X    It's of course a matter of taste, but I think it looks
  787. X    much better.
  788. X     * I have added prototypes and a makefile for a **IX compatible
  789. X    MS-DOS make (neither Turbo C or Microsoft C will understand
  790. X    this!).
  791. X     *    some formal parameters are not referenced. This is due to the
  792. X    different display interfaces and no problem at all. Just for
  793. X    aesthetic reasons I have shut up the compiler by incrementing
  794. X    the unreferenced variables.
  795. X     *    some longs are assigned to shorts and some shorts to unsigned chars.
  796. X    I have introduced a cast in each case, all are o.k. (as far
  797. X    as I can tell).
  798. X
  799. XThu Mar  8 09:11:28 1990  Hans-Erik Sandstr|m  (hes at orsa1)
  800. X    * The persistent hash table seems to work now. There are still some
  801. X    problems using it on a heterogenous network.
  802. X
  803. XSun Mar  4 14:44:44 1990  Hans Eric Sandstr|m  (hes at orsa)
  804. X    * I am working on a persistent hash table. Currenly a 10Mb file
  805. X    with 262144 entrys. Stuart just asked me to spilt the posdata
  806. X    array to make gnuchess work better on a PC, so I did that.
  807. X    I have also tried to properly fix the bug that caused gnuchess
  808. X    to report mate prematurely. This, I hope, will also improve the
  809. X    search.
  810. X
  811. XTue Feb 27 18:27:23 1990  Hans Eric Sandstr|m  (hes at davidson.log-sv.se)
  812. X    * used protoize to make a function prototyped version of gnuchess.
  813. X    this means that I have to use unprotoize before 'make distribution'
  814. X    to make a more portable K&R version.
  815. X    removed a ZeroTTable so now the hashtable is kept between moves.
  816. X
  817. XSat Feb 24 13:14:14 1990  Hans Eric Sandstr|m  (hes at orsa)
  818. X    * Added a test to detect hash table collisions, define HASHTEST.
  819. X    I also removed     the times calls since there is no sense in
  820. X    measuring cpu time when    wallclock time is all that counts when
  821. X    playing chess.
  822. X
  823. XFri Feb 23 17:25:37 1990  Hans Eric Sandstr|m  (hes at orsa)
  824. X    * Compiled gnuchess with gcc1.37 -Wall and got lots of
  825. X    implicit decaration warnings. Solved most of these by adding
  826. X    external declarations in gnuchess.h.
  827. X
  828. XWed Feb 21 17:41:28 1990 Jouko Holopainen (jhol@tolsun.oulu.fi) 
  829. X    * Contributed his code for ECO move entry (again!)
  830. X    and a file ansidsp.c (A msdos port of uxdsp.c).
  831. X    I(hes) started a merge of ansidsp.c and uxdsp.c.
  832. X
  833. XFebruary 8, 1990 -- Hans Eric Sandstrom (hes@log-sv.se)
  834. X    Changed the transpositon table to allow 65536 positions per player.
  835. X    This means a 1.3 Mbyte hash table. Introduced simple rehashing. And
  836. X    also made setting ttable 0 exclude all transposition code from
  837. X    gnuchess (for machines with very little memory).
  838. X
  839. X
  840. XFebruary 3, 1990 -- Tom Vijlbrief (tnosoes!tom@nluug.n)
  841. X    Contributed code to fix undo of promotions.
  842. X    And a bugfix RMBLTY was to small.
  843. X
  844. X
  845. XJanuari 27, 1990 -- Hans Eric Sandstrom (hes@log-sv.se)
  846. X    Fixed nuxdsp.c to work with my changes (Saved games format)
  847. X
  848. X
  849. XJanuari 26, 1990 -- Hans Eric Sandstrom (hes@log-sv.se)
  850. X    Verified that the underpromotion routines works.
  851. X    Found and fixed the bug that caused gnuchess to report mate
  852. X    and draw prematurely.
  853. X
  854. X
  855. XJanuari 25, 1990 -- Hans Eric Sandstrom (hes@log-sv.se)
  856. X    Received the underpromotion additions from jhol@tolsun.oulu.fi
  857. X    Made some optimizations in trapped and KingScan.
  858. X    Added more comments on how to improve the search.
  859. X    Added info on usage of the array Tree in post mode.
  860. X    Changed the index in the transposition table to unsigned short to
  861. X    allow a hash table of size 65536.
  862. X
  863. X
  864. XJanuari 11, 1990 -- Hans Eric Sandstrom (hes@log-sv.se)
  865. X    Formatted gnuchess according to GNU standards with indent.
  866. X
  867. X
  868. XJanuari 9, 1990 -- Hans Eric Sandstrom (hes@log-sv.se)
  869. X    Inserted a missing comma in KTHRT.
  870. X    Removed mvstr1[5],mvstr2[5] from gnuchess.c, they are only used in the
  871. X    user-interface routines uxdsp.c nondsp.c anyway.
  872. X    Rewrote algbr to generate move strings for underpromotion.
  873. X    (ph8k or h7h8k)
  874. X    Some optimizations in CaptureList.
  875. X    Changed row, column and locn to macros.
  876. X    Made memset default and introduced a switch NOMEMSET for
  877. X    computers without memset or where memset is a speed penality.
  878. X    I tested this on:
  879. X        Sparc        - no change
  880. X        DECstation    - no change
  881. X        Sun3/60        - 4% speed improvment.
  882. X    Changed + to | in some bit-field manipulations.
  883. X    Fixed the castle-with-moved-rook-bug, removed kingmoved and introduced
  884. X    an array Mvboard to keep track on how many times we have moved from a
  885. X    particular square.
  886. X    Fixed the check for zero division in Time controls.
  887. X    Added BINDIR and LIBDIR in the Makefile to set where gnuchess and
  888. X    gnuchess.book gets installed.
  889. X    All I have to do now is to test if all this works (-:
  890. END_OF_FILE
  891. if test 17304 -ne `wc -c <'doc/ChangeLog'`; then
  892.     echo shar: \"'doc/ChangeLog'\" unpacked with wrong size!
  893. fi
  894. # end of 'doc/ChangeLog'
  895. fi
  896. if test -f 'doc/PORTING' -a "${1}" != "-c" ; then 
  897.   echo shar: Will not clobber existing file \"'doc/PORTING'\"
  898. else
  899. echo shar: Extracting \"'doc/PORTING'\" \(1738 characters\)
  900. sed "s/^X//" >'doc/PORTING' <<'END_OF_FILE'
  901. XThis is a note how to port gnuchess to machines with scarce memory:
  902. Xgnuchess minimal requirements are:
  903. X - approximately 100 kByte memory for the executable program.
  904. X - at least 200 kByte for data structures.
  905. XYou dont want to port gnuchess to a machine with less memory than that.
  906. X
  907. Xgnuchess is optmized for speed and that means that memory has been used
  908. Xwhen there has been a tradeoff between memory usage and speed. If you intend
  909. Xto run gnuchess on a machine with less than 2 Mbyte memory the size of some
  910. Xdata structures have to be reduced. Here is a list of the largest data
  911. Xstructures in gnuchess, their sizes and a small comment on what can
  912. Xbe done to reduce their size:
  913. X
  914. Xttable:        1.3    MByte    (#define ttblsz <something small>)
  915. Xnextpos:    32    kByte    (nothing save rewiting all move generation)
  916. Xnextdir:    32    kByte    (nothing save rewiting all move generation)
  917. XTree:        20     kByte    (change f,t to unsigned char)
  918. Xhistory:    8    kByte   (can be removed)
  919. Xdistdata:    8    kByte    (can be changed to a macro)
  920. Xtaxidata:    8    kByte    (can be changed to a macro)
  921. Xhashcode:    7    kByte   (#define ttblsz 0)
  922. X
  923. XFirst of all, start by reducing the transposition table size, this
  924. Xis done by setting ttblsz in (gnuchess.c). If the transopsition table
  925. Xdoes not fit entiely in memory it will have a detrimental effect on
  926. Xperformance. You can remove the transposition table by setting ttblsz 0.
  927. XIf this isn`nt enough, reconsider if you really want to do this port.
  928. XThere is`nt really that much to gain by changing the other
  929. Xdata structures. 
  930. X
  931. XHere are the macros:
  932. X#define taxicab(a,b) (abs(column (a) - column (b)) + abs (row (a) - row (b)))
  933. X#define distance(a,b) \
  934. X    ((abs(column (a) - column (b)) > abs (row (a) - row (b)))
  935. X    ? abs(column (a) - column (b)) : abs (row (a) - row (b)))
  936. X
  937. X
  938. END_OF_FILE
  939. if test 1738 -ne `wc -c <'doc/PORTING'`; then
  940.     echo shar: \"'doc/PORTING'\" unpacked with wrong size!
  941. fi
  942. # end of 'doc/PORTING'
  943. fi
  944. if test -f 'src/gnuchess.h' -a "${1}" != "-c" ; then 
  945.   echo shar: Will not clobber existing file \"'src/gnuchess.h'\"
  946. else
  947. echo shar: Extracting \"'src/gnuchess.h'\" \(17641 characters\)
  948. sed "s/^X//" >'src/gnuchess.h' <<'END_OF_FILE'
  949. X/*
  950. X * gnuchess.h - Header file for GNU CHESS
  951. X *
  952. X * Copyright (c) 1988,1989,1990 John Stanback
  953. X * Copyright (c) 1992 Free Software Foundation
  954. X *
  955. X * This file is part of GNU CHESS.
  956. X *
  957. X * GNU Chess is free software; you can redistribute it and/or modify
  958. X * it under the terms of the GNU General Public License as published by
  959. X * the Free Software Foundation; either version 2, or (at your option)
  960. X * any later version.
  961. X *
  962. X * GNU Chess is distributed in the hope that it will be useful,
  963. X * but WITHOUT ANY WARRANTY; without even the implied warranty of
  964. X * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  965. X * GNU General Public License for more details.
  966. X *
  967. X * You should have received a copy of the GNU General Public License
  968. X * along with GNU Chess; see the file COPYING.  If not, write to
  969. X * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  970. X */
  971. X
  972. X#include <stdio.h>
  973. X/* <stdio.h */
  974. Xextern int fclose (FILE *);
  975. Xextern int fscanf (FILE *, const char *,...);
  976. Xextern int fprintf (FILE *, const char *,...);
  977. Xextern int fflush (FILE *);
  978. X
  979. X#define SEEK_SET 0
  980. X#define SEEK_END 2
  981. X#ifdef DEBUG
  982. Xvoid
  983. XShowDBLine (char *, short int, short int,
  984. X        short int, short int, short int,
  985. X        short unsigned int *);
  986. X     extern FILE *debugfd;
  987. X     extern short int debuglevel;
  988. X
  989. X#endif /* DEBUG */
  990. X
  991. X#if !defined(__STDC__) || !defined(MSDOS)
  992. X#define const
  993. X#endif
  994. X
  995. X#ifndef __GNUC__
  996. X#define inline
  997. X#endif
  998. X
  999. X#include <ctype.h>
  1000. X
  1001. X#ifdef MSDOS
  1002. X#include <stdlib.h>
  1003. X#include <string.h>
  1004. X#include <time.h>
  1005. X#define RWA_ACC "r+b"
  1006. X#define WA_ACC "w+b"
  1007. X#else
  1008. X#define RWA_ACC "r+"
  1009. X#define WA_ACC "w+"
  1010. X#include <sys/param.h>
  1011. X#include <sys/types.h>
  1012. X#include <sys/times.h>
  1013. X#endif /* MSDOS */
  1014. X#ifdef NONDSP
  1015. X#define printz printf
  1016. X#define scanz scanf
  1017. X#else
  1018. X#include <curses.h>
  1019. X#define scanz fflush(stdout),scanw
  1020. X#define printz printw
  1021. X#endif
  1022. X
  1023. X/* <stdlib.h> */
  1024. X     extern int abs (int);
  1025. X     extern int atoi (const char *);
  1026. X
  1027. X/* <time.h> */
  1028. X     extern long int time (long int *);
  1029. X
  1030. X/* <string.h> */
  1031. X     extern void *memset (void *, int, size_t);
  1032. X
  1033. X
  1034. X/* Piece values */
  1035. X#define valueP 100
  1036. X#define valueN 350
  1037. X#define valueB 355
  1038. X#define valueR 550
  1039. X#define valueQ 1100
  1040. X#define valueK 1200
  1041. X/* masks into upper 8 bits of ataks array */
  1042. X#define ctlP 0x4000
  1043. X#define ctlN 0x2800
  1044. X#define ctlB 0x1800
  1045. X#define ctlR 0x0400
  1046. X#define ctlQ 0x0200
  1047. X#define ctlK 0x0100
  1048. X#define ctlBQ 0x1200
  1049. X#define ctlBN 0x0800
  1050. X#define ctlRQ 0x0600
  1051. X#define ctlNN 0x2000
  1052. X/* attack functions */
  1053. X#define Patak(c, u) (atak[c][u] > ctlP)
  1054. X#define Anyatak(c, u) (atak[c][u] > 0)
  1055. X/* distance function */
  1056. X#define taxicab(a,b) taxidata[a][b]
  1057. X/* hashtable flags */
  1058. X#define truescore 0x0001
  1059. X#define lowerbound 0x0002
  1060. X#define upperbound 0x0004
  1061. X#define kingcastle 0x0008
  1062. X#define queencastle 0x0010
  1063. X/* king positions */
  1064. X#define wking PieceList[white][0]
  1065. X#define bking PieceList[black][0]
  1066. X#define EnemyKing PieceList[c2][0]
  1067. X/* constants */
  1068. X/* castle moves */
  1069. X#define BLACKCASTLE    0x3C3E
  1070. X#define WHITECASTLE    0x0406
  1071. X#define LONGBLACKCASTLE    0x3C3A
  1072. X#define LONGWHITECASTLE    0x0402
  1073. X/* truth values */
  1074. X#define false 0
  1075. X#define true 1
  1076. X/* colors */
  1077. X#define white 0
  1078. X#define black 1
  1079. X#define neutral 2
  1080. X/* piece code defines */
  1081. X#define no_piece 0
  1082. X#define pawn 1
  1083. X#define knight 2
  1084. X#define bishop 3
  1085. X#define rook 4
  1086. X#define queen 5
  1087. X#define king 6
  1088. X#define bpawn 7
  1089. X/* node flags */
  1090. X#define pmask 0x0007
  1091. X#define promote 0x0008
  1092. X#define cstlmask 0x0010
  1093. X#define epmask 0x0020
  1094. X#define exact 0x0040
  1095. X#define pwnthrt 0x0080
  1096. X#define check 0x0100
  1097. X#define capture 0x0200
  1098. X#define draw 0x0400
  1099. X/* move symbols */
  1100. X#define pxx (CP[2])
  1101. X#define qxx (CP[1])
  1102. X#define rxx (CP[4])
  1103. X#define cxx (CP[3])
  1104. X/* for everything that can't use the above */
  1105. X#define Qxx " pnbrqk"
  1106. X#define Pxx " PNBRQK"
  1107. X#define Cxx "abcdefgh"
  1108. X#define Rxx "12345678"
  1109. X/***************************************************************************/
  1110. X/***************** Table limits ********************************************/
  1111. X/*
  1112. X * ttblsz must be a power of 2. Setting ttblsz 0 removes the transposition
  1113. X * tables.
  1114. X */
  1115. X#ifdef MSDOS
  1116. X#define vttblsz (1 << 11)
  1117. X#else
  1118. X#define vttblsz (1 << 17)
  1119. X#define huge
  1120. X#endif /* MSODS */
  1121. X
  1122. X#define ttblsz vttblsz
  1123. X#define TREE 1500        /* max number of tree entries */
  1124. X#define MAXDEPTH 35        /* max depth a search can be carried */
  1125. X#define MINDEPTH 2        /* min search depth =1 (no hint), >1 hint */
  1126. X#define MAXMOVES 400        /* max number of half moves in a game */
  1127. X#define BOOKSIZE 7500        /* Number of unique position/move combinations allowed */
  1128. X#define CPSIZE 225        /* size of lang file max */
  1129. X/***************** tuning paramaters **********************************************/
  1130. X#define CHKDEPTH 1        /* always look forward CHKDEPTH half-moves if in check */
  1131. X#define DEPTHBEYOND 11        /* Max to go beyond Sdepth */
  1132. X#define HASHDEPTH 4        /* depth above which to use HashFile */
  1133. X#define HASHMOVELIMIT 40    /* Use HashFile only for this many moves */
  1134. X#define PTVALUE 5361            /* material value below which pawn threats at 5 & 3 are used */
  1135. X#define ZDEPTH 3        /* depth beyond which to check ZDELTA for extra time */
  1136. X#define ZDELTA 10        /* score delta per ply to cause extra time to be given */
  1137. X#define ZNODES 1000        /* check the time every ZNODES positions */
  1138. X#define MAXTCCOUNT 4        /* max number of time clicks per search */
  1139. X#define MINSEARCHPCT 10        /* must have looked at MINSEARCHPCT moves on a ply on a timeout */
  1140. X#define SCORETIME -50        /* score below which to add search time */
  1141. X#define SCORESPLIM 8        /* Score space doesn't apply after this stage */
  1142. X#define EWNDW 10        /* Eval window to force position scoring at depth greater than Sdepth + 2 */
  1143. X#define WAWNDW 90        /* alpha window when computer white*/
  1144. X#define WBWNDW 90        /* beta window when computer white*/
  1145. X#define BAWNDW 90        /* alpha window when computer black*/
  1146. X#define BBWNDW 90        /* beta window when computer black*/
  1147. X#define BXWNDW 90        /* window to force position scoring at lower */
  1148. X#define WXWNDW 90        /* window to force position scoring at lower */
  1149. X#define DITHER 1        /* max amount random can alter a pos value */
  1150. X#define BBONUS 2        /* points per stage value of B increases */
  1151. X#define RBONUS 6        /* points per stage value of R increases */
  1152. X#define KINGPOSLIMIT ( -1)    /* King positional scoring limit */
  1153. X#define KINGSAFETY  16
  1154. X#define MINTIME 200        /* MIN time to start a ply */
  1155. X
  1156. X#if defined AG0
  1157. X#define WHITEAG0
  1158. X#define BLACKAG0
  1159. X
  1160. X#elif defined AG1
  1161. X#define WHITEAG1
  1162. X#define BLACKAG1
  1163. X
  1164. X#elif defined AG2
  1165. X#define WHITEAG2
  1166. X#define BLACKAG2
  1167. X
  1168. X#elif defined AG3
  1169. X#define WHITEAG3
  1170. X#define BLACKAG3
  1171. X
  1172. X#elif defined AGB
  1173. X#define WHITEAG2
  1174. X#define BLACKAG2
  1175. X
  1176. X#elif defined AG4
  1177. X#define WHITEAG4
  1178. X#define BLACKAG4
  1179. X#endif
  1180. X/************************* parameters for Opening Book *********************************/
  1181. X#define BOOKBITS 6        /* # bits for hashtable to book moves */
  1182. X#define BOOKFAIL 2        /* if no book move found for BOOKFAIL turns stop using book */
  1183. X#define BOOKRAND 1000        /* used to select an opening move from a list */
  1184. X#define BOOKENDPCT 500        /* 50 % chance a BOOKEND will stop the book */
  1185. X#define DONTUSE -32768        /* flag move as don't use */
  1186. X/*************************** Book access defines ****************************************/
  1187. X#define BKTBLSIZE (2<<BOOKBITS)
  1188. X#define BOOKMASK (BKTBLSIZE - 1)
  1189. X#define SIDEMASK 0x1
  1190. X#define BOOKEND 0x2        /* means this is the last move of an opening */
  1191. X#define BADMOVE 0x8000        /* means this is a bad move in this position */
  1192. X/****************************************************************************************/
  1193. X     struct hashval
  1194. X     {
  1195. X       unsigned long key, bd;
  1196. X     };
  1197. X     struct hashentry
  1198. X     {
  1199. X       unsigned long hashbd;
  1200. X       unsigned short mv;
  1201. X       unsigned char flags, depth;    /* char saves some space */
  1202. X       short score;
  1203. X#ifdef HASHTEST
  1204. X       unsigned char bd[32];
  1205. X#endif /* HASHTEST */
  1206. X
  1207. X     };
  1208. X
  1209. X#ifdef HASHFILE
  1210. X
  1211. X/*
  1212. X * persistent transposition table. The size must be a power of 2. If you
  1213. X * change the size, be sure to run gnuchess -c before anything else.
  1214. X */
  1215. X#define frehash 6
  1216. X#ifdef MSDOS
  1217. X#define Deffilesz (1 << 11) -1
  1218. X#else
  1219. X#define Deffilesz (1 << 17) -1
  1220. X#endif /* MSDOS */
  1221. X     struct fileentry
  1222. X     {
  1223. X       unsigned char bd[32];
  1224. X       unsigned char f, t, flags, depth, sh, sl;
  1225. X     };
  1226. X
  1227. X#endif /* HASHFILE */
  1228. X
  1229. X
  1230. X     struct leaf
  1231. X     {
  1232. X       short f, t, score, reply, width;
  1233. X       unsigned short flags;
  1234. X     };
  1235. X     struct GameRec
  1236. X     {
  1237. X       unsigned short gmove;    /* this move */
  1238. X       short score;        /* score after this move */
  1239. X       short depth;        /* search depth this move */
  1240. X       short time;        /* search time this move */
  1241. X       short piece;        /* piece moved */
  1242. X       short color;        /* color */
  1243. X       short flags;        /* move flags capture, promote, castle */
  1244. X       short Game50;        /* flag for repetition */
  1245. X       long nodes;        /* nodes searched for this move */
  1246. X       long hashkey, hashbd;    /* board key before this move */
  1247. X#ifdef DEBUG40
  1248. X       int d1;
  1249. X       int d2;
  1250. X       int d3;
  1251. X       int d4;
  1252. X       int d5;
  1253. X       int d6;
  1254. X#endif
  1255. X     };
  1256. X     struct TimeControlRec
  1257. X     {
  1258. X       short moves[2];
  1259. X       long clock[2];
  1260. X     };
  1261. X
  1262. X     struct flags
  1263. X     {
  1264. X       short mate;        /* the game is over */
  1265. X       short post;        /* show principle variation */
  1266. X       short quit;        /* quit/exit */
  1267. X       short regularstart;    /* did the game start from standard
  1268. X                 * initial board ? */
  1269. X       short reverse;        /* reverse board display */
  1270. X       short bothsides;        /* computer plays both sides */
  1271. X       short hash;        /* enable/disable transposition table */
  1272. X       short force;        /* enter moves */
  1273. X       short easy;        /* disable thinking on opponents time */
  1274. X       short beep;        /* enable/disable beep */
  1275. X       short timeout;        /* time to make a move */
  1276. X       short musttimeout;    /* time to make a move */
  1277. X       short rcptr;        /* enable/disable recapture heuristics */
  1278. X       short rv;        /* reverse video */
  1279. X       short stars;        /* add stars to uxdsp screen */
  1280. X       short coords;        /* add coords to visual screen */
  1281. X       short shade;
  1282. X       short material;        /* draw on lack of material */
  1283. X     };
  1284. X
  1285. X#ifdef DEBUG
  1286. X     extern FILE *debugfile;
  1287. X
  1288. X#endif /* DEBUG */
  1289. X#if !defined NOHISTORY
  1290. X     extern unsigned char history[8192];
  1291. X#endif
  1292. X     extern char *ColorStr[2];
  1293. X     extern unsigned short int MV[MAXDEPTH];
  1294. X     extern int MSCORE;
  1295. X     extern int mycnt1, mycnt2;
  1296. X     extern short int ahead;
  1297. X     extern short int chesstool;
  1298. X     extern struct leaf Tree[], *root, rootnode;
  1299. X     extern char savefile[], listfile[];
  1300. X     extern short TrPnt[];
  1301. X     extern short board[], color[];
  1302. X     extern short PieceList[2][64], PawnCnt[2][8];
  1303. X     extern short castld[], Mvboard[];
  1304. X     extern short svalue[];
  1305. X     extern struct flags flag;
  1306. X     extern short opponent, computer, INCscore;
  1307. X     extern short WAwindow, BAwindow, WBwindow, BBwindow;
  1308. X     extern short dither, player;
  1309. X     extern short xwndw, epsquare, contempt;
  1310. X     extern long ResponseTime, ExtraTime, Level, et, et0, time0, ft;
  1311. X     extern long reminus, replus;
  1312. X     extern long NodeCnt, ETnodes, EvalNodes, HashAdd, HashCnt, HashCol, THashCol,
  1313. X      FHashCnt, FHashAdd;
  1314. X     extern short HashDepth, HashMoveLimit;
  1315. X     extern struct GameRec GameList[];
  1316. X     extern short GameCnt, Game50;
  1317. X     extern short Sdepth, MaxSearchDepth;
  1318. X     extern int Book;
  1319. X     extern struct TimeControlRec TimeControl;
  1320. X     extern short TCflag, TCmoves, TCminutes, TCseconds, OperatorTime;
  1321. X     extern short XCmore, XCmoves[], XCminutes[], XCseconds[], XC;
  1322. X     extern const short otherside[];
  1323. X     extern const short Stboard[];
  1324. X     extern const short Stcolor[];
  1325. X     extern unsigned short hint;
  1326. X     extern short int TOflag;
  1327. X     extern short stage, stage2, Developed[];
  1328. X     extern short ChkFlag[], CptrFlag[], PawnThreat[];
  1329. X     extern short Pscore[], Tscore[];
  1330. X     extern short rehash;
  1331. X#define MAXrehash (42)
  1332. X     extern unsigned int ttblsize;
  1333. X     extern short mtl[], pmtl[], hung[], emtl[];
  1334. X     extern short Pindex[];
  1335. X     extern short PieceCnt[];
  1336. X     extern short FROMsquare, TOsquare;
  1337. X     extern short HasKnight[], HasBishop[], HasRook[], HasQueen[];
  1338. X     extern const short qrook[];
  1339. X     extern const short krook[];
  1340. X     extern const short kingP[];
  1341. X     extern const short rank7[];
  1342. X     extern const short sweep[];
  1343. X     extern const short epmove1[], epmove2[];
  1344. X     extern unsigned short killr0[], killr1[];
  1345. X     extern unsigned short killr2[], killr3[];
  1346. X     extern unsigned short PV, SwagHt, Swag0, Swag1, Swag2, Swag3, Swag4, sidebit;
  1347. X     extern short killt[];
  1348. X     extern short mtl[2], pmtl[2], hung[2];
  1349. X     extern const short value[];
  1350. X     extern const short control[];
  1351. X     extern unsigned char nextpos[8][64][64];
  1352. X     extern unsigned char nextdir[8][64][64];
  1353. X     extern const short ptype[2][8];
  1354. X     extern long filesz;
  1355. X     extern FILE *hashfile;
  1356. X     extern unsigned int starttime;
  1357. X     extern short distdata[64][64], taxidata[64][64];
  1358. X     extern short bookcount;
  1359. X     extern unsigned long hashkey, hashbd;
  1360. X     extern struct hashval hashcode[2][7][64];
  1361. X     extern char *CP[];
  1362. X#ifdef QUIETBACKGROUND
  1363. X     extern short background;
  1364. X#endif /* QUIETBACKGROUND */
  1365. X
  1366. X#ifdef ttblsz
  1367. X     extern struct hashentry huge ttable[2][vttblsz + MAXrehash];
  1368. X
  1369. X#endif
  1370. X
  1371. X/*
  1372. X * hashbd contains a 32 bit "signature" of the board position. hashkey
  1373. X * contains a 16 bit code used to address the hash table. When a move is
  1374. X * made, XOR'ing the hashcode of moved piece on the from and to squares with
  1375. X * the hashbd and hashkey values keeps things current.
  1376. X */
  1377. X#define UpdateHashbd(side, piece, f, t) \
  1378. X{\
  1379. X  if ((f) >= 0)\
  1380. X    {\
  1381. X      hashbd ^= hashcode[side][piece][f].bd;\
  1382. X      hashkey ^= hashcode[side][piece][f].key;\
  1383. X    }\
  1384. X  if ((t) >= 0)\
  1385. X    {\
  1386. X      hashbd ^= hashcode[side][piece][t].bd;\
  1387. X      hashkey ^= hashcode[side][piece][t].key;\
  1388. X    }\
  1389. X}
  1390. X
  1391. X
  1392. X     extern short rpthash[2][256];
  1393. X     extern char *DRAW;
  1394. X
  1395. X#define distance(a,b) distdata[a][b]
  1396. X#define row(a) ((a) >> 3)
  1397. X#define column(a) ((a) & 7)
  1398. X#define locn(a,b) (((a) << 3) | (b))
  1399. X     extern short distdata[64][64];
  1400. X
  1401. X/* init external functions */
  1402. X     extern void NewGame (void);
  1403. X     extern int parse (FILE * fd, short unsigned int *mv, short int side, char *opening);
  1404. X     extern void GetOpenings (void);
  1405. X     extern int OpeningBook (unsigned short int *hint, short int side);
  1406. X     extern void SelectMove (short int side, short int iop);
  1407. X     extern int
  1408. X      search (short int side,
  1409. X           short int ply,
  1410. X           short int depth,
  1411. X           short int alpha,
  1412. X           short int beta,
  1413. X           short unsigned int *bstline,
  1414. X           short int *rpt);
  1415. X#if ttblsz
  1416. X     extern int
  1417. X      ProbeTTable (short int side,
  1418. X            short int depth,
  1419. X            short int ply,
  1420. X            short int *alpha,
  1421. X            short int *beta,
  1422. X            short int *score);
  1423. X     extern int
  1424. X      PutInTTable (short int side,
  1425. X            short int score,
  1426. X            short int depth,
  1427. X            short int ply,
  1428. X            short int alpha,
  1429. X            short int beta,
  1430. X            short unsigned int mv);
  1431. X     extern void ZeroTTable (void);
  1432. X     extern void ZeroRPT (void);
  1433. X     extern void Initialize_ttable (void);
  1434. X#ifdef HASHFILE
  1435. X     extern unsigned int urand (void);
  1436. X     extern void srand (unsigned int);
  1437. X     extern int
  1438. X      ProbeFTable (short int side,
  1439. X            short int depth,
  1440. X            short int ply,
  1441. X            short int *alpha,
  1442. X            short int *beta,
  1443. X            short int *score);
  1444. X     extern void
  1445. X      PutInFTable (short int side,
  1446. X            short int score,
  1447. X            short int depth,
  1448. X            short int ply,
  1449. X            short int alpha,
  1450. X            short int beta,
  1451. X            short unsigned int f,
  1452. X            short unsigned int t);
  1453. X
  1454. X#endif /* HASHFILE */
  1455. X#endif /* ttblsz */
  1456. X     extern void Initialize_moves (void);
  1457. X     extern void MoveList (short int side, short int ply);
  1458. X     extern void CaptureList (short int side, short int ply);
  1459. X     extern int castle (short int side, short int kf, short int kt, short int iop);
  1460. X     extern void
  1461. X      MakeMove (short int side,
  1462. X         struct leaf * node,
  1463. X         short int *tempb,
  1464. X         short int *tempc,
  1465. X         short int *tempsf,
  1466. X         short int *tempst,
  1467. X         short int *INCscore);
  1468. X     extern void
  1469. X      UnmakeMove (short int side,
  1470. X           struct leaf * node,
  1471. X           short int *tempb,
  1472. X           short int *tempc,
  1473. X           short int *tempsf,
  1474. X           short int *tempst);
  1475. X     extern void InitializeStats (void);
  1476. X     extern int
  1477. X      evaluate (short int side,
  1478. X         short int ply,
  1479. X         short int alpha,
  1480. X         short int beta,
  1481. X         short int INCscore,
  1482. X         short int *slk,
  1483. X         short int *InChk);
  1484. X     extern short int ScorePosition (short int side);
  1485. X     extern void ExaminePosition (void);
  1486. X     extern void UpdateWeights (void);
  1487. X     extern void Initialize (void);
  1488. X     extern void InputCommand (void);
  1489. X     extern void ExitChess (void);
  1490. X     extern void ClrScreen (void);
  1491. X     extern void SetTimeControl (void);
  1492. X     extern void SelectLevel (void);
  1493. X     extern void
  1494. X      UpdateDisplay (short int f,
  1495. X              short int t,
  1496. X              short int flag,
  1497. X              short int iscastle);
  1498. X     extern void ElapsedTime (short int iop);
  1499. X     extern void ShowSidetoMove (void);
  1500. X     extern void SearchStartStuff (short int side);
  1501. X     extern void ShowDepth (char ch);
  1502. X     extern void TerminateSearch (int);
  1503. X     extern void
  1504. X      ShowResults (short int score,
  1505. X            short unsigned int *bstline,
  1506. X            char ch);
  1507. X     extern void PromptForMove (void);
  1508. X     extern void SetupBoard (void);
  1509. X     extern void algbr (short int f, short int t, short int flag);
  1510. X     extern void OutputMove (void);
  1511. X     extern void ShowCurrentMove (short int pnt, short int f, short int t);
  1512. X     extern void ListGame (void);
  1513. X     extern void ShowMessage (char *s);
  1514. X     extern void ClrScreen (void);
  1515. X     extern void gotoXY (short int x, short int y);
  1516. X     extern void ClrEoln (void);
  1517. X     extern void DrawPiece (short int sq);
  1518. X     extern void UpdateClocks (void);
  1519. X     extern void ShowLine (short unsigned int *bstline);
  1520. X     extern void pick (short int p1, short int p2);
  1521. X     extern int TrComp (struct leaf * a, struct leaf * b);
  1522. END_OF_FILE
  1523. if test 17641 -ne `wc -c <'src/gnuchess.h'`; then
  1524.     echo shar: \"'src/gnuchess.h'\" unpacked with wrong size!
  1525. fi
  1526. # end of 'src/gnuchess.h'
  1527. fi
  1528. echo shar: End of archive 9 \(of 12\).
  1529. cp /dev/null ark9isdone
  1530. MISSING=""
  1531. for I in 1 2 3 4 5 6 7 8 9 10 11 12 ; do
  1532.     if test ! -f ark${I}isdone ; then
  1533.     MISSING="${MISSING} ${I}"
  1534.     fi
  1535. done
  1536. if test "${MISSING}" = "" ; then
  1537.     echo You have unpacked all 12 archives.
  1538.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1539.     echo Building book file.
  1540.     cat misc/book.xaa misc/book.xab > misc/gnuchess.nunn.book
  1541.     rm misc/book.xaa misc/book.xab
  1542. else
  1543.     echo You still need to unpack the following archives:
  1544.     echo "        " ${MISSING}
  1545. fi
  1546. ##  End of shell archive.
  1547. exit 0
  1548.