home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / games / volume13 / gnuchess4 / part10 < 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: v13i098:  gnuchess4 - GNU Chess 4.0, Part10/12
  5. Message-ID: <3065@master.CNA.TEK.COM>
  6. Date: 19 Jun 92 15:55:17 GMT
  7. Sender: news@master.CNA.TEK.COM
  8. Lines: 1800
  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 98
  13. Archive-name: gnuchess4/Part10
  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 10 (of 12)."
  26. # Contents:  doc/CHESSTOOL doc/README.font doc/README.output
  27. #   doc/gnuchess.1 src/Makefile src/nondsp.c
  28. # Wrapped by billr@saab on Fri Jun 19 08:36:02 1992
  29. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  30. if test -f 'doc/CHESSTOOL' -a "${1}" != "-c" ; then 
  31.   echo shar: Will not clobber existing file \"'doc/CHESSTOOL'\"
  32. else
  33. echo shar: Extracting \"'doc/CHESSTOOL'\" \(1720 characters\)
  34. sed "s/^X//" >'doc/CHESSTOOL' <<'END_OF_FILE'
  35. XChesstool interface
  36. X
  37. Xsave - save game to file
  38. Xtest - no - op
  39. Xremove - take back 2 half-moves
  40. Xexit
  41. Xresign
  42. Xfirst - machine first
  43. Xrestore - opposite of save
  44. Xclock - print white and black clock
  45. Xwhite
  46. Xblack
  47. Xhshort - give hint
  48. Xscore - list moves
  49. Xsetup - setup board. never quit figured setup out. should be like xboard but ???
  50. Xrepeat - show last move
  51. Xa2a4 - move in algebraic format
  52. Xo-o
  53. Xo-o-o
  54. Xe7e8 - pawn promotion always to queen
  55. X
  56. Xxboard
  57. X
  58. XSee gnuchess manual page for all options that might be set in startup string.
  59. X
  60. Xeasy - don't compute while opponent moves. must be set for xboard
  61. Xsave - save game to file
  62. Xget - read position from gnuchess savefile
  63. Xundo - undo 1 half move
  64. Xremove - undo 2 half moves
  65. Xxget - read position from xboard save file
  66. Xsetup - setup board with subcommands:
  67. X                    # - clear board
  68. X                    c - change sides
  69. X                    . - end setup
  70. X                    pa4 - put pawn at a4
  71. Xblack - machine black
  72. Xwhite - machine white
  73. Xgo - tells machine to move first    gnuchess3.1+ or gnuchess only
  74. Xhint - give hint
  75. Xtime - tell chess program the clock values    gnuchess only
  76. X    otherwise its hard to keep the clocks in sync.
  77. Xpost - include PV with each move as in:
  78. X    3. h2h4     -7  d7d5  e4d5  d8d5  b1c3
  79. Xa2a4 - move in algebraic format
  80. Xo-o
  81. Xo-o-o
  82. Xe7e8 - pawn promotion always to queen
  83. X
  84. X
  85. Xso game looks like this:
  86. X
  87. XChess                 Always first response from xboard or chess
  88. Xe2e4                human move
  89. X1. e2e4                move is echoed back by machine
  90. X1. ... e7e5            machine move
  91. Xa2a4                human move
  92. X2. a2a4                echo
  93. X2. ... g8f6            machine move
  94. Xpost                if post is set
  95. Xb2b3                human move
  96. X3. b2b3    -16  g8f6  g1f3    echo back with computer predicted best line and score
  97. X3. ... f6e4            machine move
  98. Xb1c3
  99. X4. b1c3   -102  f6e4  g1f3
  100. X4. ... e4c3
  101. Xquit
  102. X5. quit   -141  e4c3  d2c3  d7d5
  103. X
  104. END_OF_FILE
  105. if test 1720 -ne `wc -c <'doc/CHESSTOOL'`; then
  106.     echo shar: \"'doc/CHESSTOOL'\" unpacked with wrong size!
  107. fi
  108. # end of 'doc/CHESSTOOL'
  109. fi
  110. if test -f 'doc/README.font' -a "${1}" != "-c" ; then 
  111.   echo shar: Will not clobber existing file \"'doc/README.font'\"
  112. else
  113. echo shar: Extracting \"'doc/README.font'\" \(9917 characters\)
  114. sed "s/^X//" >'doc/README.font' <<'END_OF_FILE'
  115. XPostScript Chess Font -- "README" file.
  116. X========== ===== ==== == ======== =====
  117. X
  118. X    Copyright (c) 1991 A. N. Walker.  All rights reserved.
  119. X
  120. XRestrictions on Use:
  121. X------------ -- ----
  122. X    You must keep the copyright notice on this file and on the
  123. Xaccompanying "Font" file.  If you change anything, you must clearly
  124. Xmark your changes.  Otherwise, you may use these files as you please
  125. Xfor private, educational or research purposes.  You may also use them
  126. Xfreely for commercial purposes as long as you do not make any changes
  127. Xto the shapes of the pieces without my approval.
  128. X
  129. X    I do not, and am in no position to, make any claim as to
  130. Xsuitability of these files for any specific purpose.  They work for
  131. Xme, and if they work for you too I shall be pleased.  If they do not
  132. Xwork for you, well, you have what you paid for.
  133. X
  134. X    If you are pleased with the results, please let me [and your
  135. Xreaders, if any!] know.  If you manage to make money out of them,
  136. Xplease let me know how!  I'd quite like to see [real or PostScript]
  137. Xcopies of what you manage to do, if you have the necessary time,
  138. Xinclination and resources.
  139. X
  140. X    If you don't like the results, please let me know why.  Indeed,
  141. Xif you have any comments, please e- or snail- mail them to me.
  142. X
  143. XWhat you have to do:
  144. X---- --- ---- -- ---
  145. X    You should have three files, called "Font", "Demo" and "Table".
  146. XIf you have a way of viewing PostScript, shovel "Font" and "Demo" or
  147. X"Font" and "Table" at it;  for example, I use the commands
  148. X
  149. X        lpr -Plwriter Font Demo
  150. X        lpr -Plwriter Font Table
  151. X
  152. Xto see the results on "my" LaserWriter.  If you have no way of viewing
  153. XPostScript, then I'm sorry, but I can't help you.  What you should see
  154. Xis an assorted collection of boards and figurines in various sizes and
  155. Xrotations ("Demo") or a neat table showing all the symbols in the font
  156. X("Table").  If anything else happens, you will have to consult someone
  157. Xwho knows what they're doing -- *not* me!  I can promise you that the
  158. Xfiles as shipped print nicely on a bog-standard Apple LW+.  They take
  159. Xseveral minutes each to print on our LW+;  this is largely because they
  160. Xmake almost pessimal use of the font caching mechanism -- lots of big
  161. Xcharacters are printed once each in different sizes and orientations.
  162. XConventional pages with lots of figurines or ordinary text and only a
  163. Xfew diagrams print acceptably quickly (especially, of course, if you
  164. Xhave a faster or more recent LW).
  165. X
  166. X    If you are happy with the demos, you can then install the "Font"
  167. Xfile as a font in your system.
  168. X
  169. X    ****************************************
  170. X    * I cannot help you with this process! *
  171. X    ****************************************
  172. X
  173. XI can't even do it for our own computer, which has a much-hacked (from
  174. Xits PDP-11 days) version of Troff;  I leave it to our guru.  Neither
  175. Xhe nor I know what magic you have to utter for an unhacked Troff, or
  176. Xfor TEX, or for Macs or PCs or whatever weird and wonderful software
  177. Xor hardware you possess.  When you install the font, you may also find
  178. Xit useful to grab some of the PostScript code from "Demo", especially
  179. Xif you want to draw (for example) labelled diagrams.
  180. X
  181. XWhat there is in the Font:
  182. X---- ----- -- -- --- -----
  183. X    There are really two fonts wrapped up into one.  The more
  184. Xconventional sub-font is the so-called "text mode", and is what you
  185. Xget when you first select the font.  This mode itself has two major
  186. Xcomponents.  The upper case letters are the figurines, for use in
  187. Xtext.  For example, "Q" draws a queen figurine.  Lower case letters
  188. Xand other symbols are (most of) the Informant symbols (omitting only
  189. Xsymbols like "?" and "ch" that you can reasonably expect to find in
  190. Xboring old Times Roman, but including "+" and "-").  I've been as
  191. Xmnemonic as I could, but there are just too many symbols.
  192. X
  193. X    The other sub-font is "diagram mode".  In this, upper case
  194. Xletters draw white pieces, and lower case letters draw black pieces.
  195. XFor example, "Knk" draws a white king adjacent to a black knight
  196. Xand a black king.  The pieces include a selection of fairy pieces
  197. Xand other related symbols -- everything I've seen or had reported
  198. Xto me on chess diagrams in the last few years.  The other symbols
  199. Xin this sub-font consist of board-drawing components and motions
  200. Xto facilitate the construction of diagrams.  You switch between
  201. Xtext and diagram modes using the prime symbol, "'".  For example,
  202. Xthe famous Reti study can be diagrammed by the PostScript:
  203. X
  204. X        ('#[7K;8;k1P;7p;8;8;8;8]') show
  205. X
  206. Xwhere "#" draws the board, and the stuff between "[...]" is the
  207. Xconventional Forsythe notation for the position.  Obviously, for
  208. Xpractical use, you will need a chess pre-processor (which I have
  209. X*not* written!).
  210. X
  211. X    Most of the capabilities of the font are illustrated on
  212. Xthe demo page, which also includes some possibly-useful PostScript
  213. Xprocedures for various of the effects.
  214. X
  215. X    Warning:  the dual-mode font treads on very thin ice in
  216. Xsome places!  In particular, the caching mechanisms of PostScript
  217. Xare very easy to fool with a dynamic font of this type.  For example,
  218. Xfinding the width of a string is fraught with danger;  do it only
  219. Xwith strings that include matched pairs of primes.
  220. X
  221. XThe font design:
  222. X--- ---- -------
  223. X    There are surprisingly many different chess fonts in use in
  224. Xprinted books.  I have tried to copy the simplest -- for example,
  225. Xthe rooks have no brickwork, and the kings are quite plain.  Note
  226. Xthat the pieces do not scale well.  Large pieces (inches high) for
  227. Xposters, etc., will have to be specially designed (and are usually
  228. Xbased on "real" Staunton pieces).  Tiny pieces suffer from the lack
  229. Xof resolution on 300 dpi (or coarser) printers.  On a 300 dpi printer,
  230. X7-point is really too small, anything less is hopeless (see the demo).
  231. XI usually use 15-point, which is comparable with most books.
  232. X
  233. X    The hardest piece to get right is the knight.  The book designs
  234. Xare hopeless at 300 dpi resolution, as there are too many fine lines
  235. Xaround the mouth and chin.  Any attempts to copy them just look like a
  236. Xcaricature.  So I've made it a bit chunkier.  Most readers don't notice.
  237. X
  238. X    Note that most of the pieces (as opposed to the figurines)
  239. Xcannot be cached.  This is because they include both write-white and
  240. Xwrite-black components (partly, but not entirely, because they have
  241. Xto work on black squares);  this makes drawing a whole page of black
  242. Xkings (or whatever) rather slooow.  Fortunately, you don't often need
  243. Xsuch a thing.  The figurines *are* cached, so are the Informant symbols,
  244. Xand so are the commonest pieces (the black squares, and the pawns of
  245. Xboth colours).
  246. X
  247. XForeign usage:
  248. X------- ------
  249. X    Foreign users may want to re-assign the letters used for the
  250. Xvarious pieces.  This can easily be done in the Font file.  Lines
  251. Xsuch as
  252. X
  253. X    dup 8#113 /WK put        % 'K'
  254. X
  255. X(not too far down the file) signify that ASCII character 113 (octal), or
  256. X"K", is to draw the White King.  If you want some other character to draw
  257. Xthe WK, alter the 113 to match.  You will have to change the BK and Kfig
  258. Xby the same amount, and you will also have to reassign whatever symbol
  259. Xyour chosen character already draws, if any.  Another minor problem is
  260. Xthat some of the fairy pieces are defined explicitly in terms of the
  261. Xexisting pieces -- eg, if you decide to use "F" to draw White queens,
  262. Xthen the procedure for Grasshoppers (look for "WG" in Font) must be
  263. Xchanged to draw upside-down "F" instead of upside-down "Q".  I hope the
  264. Xnecessary edits are obvious even to non-PostScript users.  I suggest that
  265. Xafter any change you try the Table and Demo files again.
  266. X
  267. XUnusual chess pieces:
  268. X------- ----- -------
  269. X    I've included a fair number of pieces that may not be familiar to
  270. Xall chess players.  These include:
  271. X    F for fou, French version of bishop.  There are several designs
  272. X        of fou in print, I have selected the easiest to implement.  If
  273. X        you want one of the others, you'll have to write it yourself.
  274. X    D,X for draughts pieces.  Note that these are not cached (except
  275. X        as figurines);  if you are writing a book on draughts with
  276. X        lots of diagrams, you might find it worthwhile to re-write
  277. X        them in a cachable way.  This is easier if you want to use
  278. X        them on the white squares (you don't need the "halo" effect),
  279. X        but the books I have seen are about equally split on this.
  280. X    C,I,T for chameleon, imitator, rose.  Various fairy pieces.
  281. X    E,G,L,M,O,S,U,V,Z for various rotated standard pieces, used in
  282. X        fairy chess.  Note that the "Demo" file includes a more
  283. X        general way to rotate a piece.  I have used S for nightrider,
  284. X        oppositely to the problemists convention which uses S for
  285. X        knight and N for nightrider;  there is no way that the average
  286. X        player is going to change his habits!  If you are a problemist,
  287. X        feel free to interchange S and N (and then M and Z).
  288. X    .,@,|,_ for various other marks useful in annotating diagrams.
  289. X        See the "Demo" file for examples of their use.
  290. X    A,H,J,W,Y are unused.  Feel free to use them to add new pieces.
  291. X
  292. XGo pieces:
  293. X-- -------
  294. X    Sorry, despite several requests, I haven't put these in.  I
  295. Xcan't save the whole world in one easy lesson.  The pieces themselves
  296. Xand the board are easy in PostScript;  the annotations and the necessary
  297. Xpre-processor are another kettle of fish.  The Go stones could also be
  298. Xused for Reversi (Othello).
  299. X
  300. XBridge symbols:
  301. X------ --------
  302. X    No-one has actually asked for these, but just to forestall you,
  303. Xnote that they are already provided in many places -- symbol fonts,
  304. Xdingbats fonts, Hershey fonts, ....
  305. X
  306. XFinal comments:
  307. X----- ---------
  308. X    Suggestions for improvements, especially in the PostScript,
  309. Xwill be welcomed.  Especially if they improve portability (which I
  310. Xcan't check locally!).  Especially if you've tried them yourself,
  311. Xand can vouch that they work.  Suggestions for extra symbols (other
  312. Xthan Go or Bridge) also welcomed, especially if accompanied by
  313. XPostScript or other descriptions of their shape.
  314. X
  315. X-- 
  316. XAndy Walker, Maths Dept., Nott'm Univ., UK.
  317. Xanw@maths.nott.ac.uk
  318. END_OF_FILE
  319. if test 9917 -ne `wc -c <'doc/README.font'`; then
  320.     echo shar: \"'doc/README.font'\" unpacked with wrong size!
  321. fi
  322. # end of 'doc/README.font'
  323. fi
  324. if test -f 'doc/README.output' -a "${1}" != "-c" ; then 
  325.   echo shar: Will not clobber existing file \"'doc/README.output'\"
  326. else
  327. echo shar: Extracting \"'doc/README.output'\" \(3639 characters\)
  328. sed "s/^X//" >'doc/README.output' <<'END_OF_FILE'
  329. XEnter #moves #minutes: 0 0
  330. XOperator time(hundredths)= 0
  331. X
  332. XWhite 0:00  Black 0:00
  333. X
  334. X R N B Q K B N R
  335. X P P P P P P P P
  336. X - - - - - - - -
  337. X - - - - - - - -
  338. X - - - - - - - -
  339. X - - - - - - - -
  340. X p p p p p p p p
  341. X r n b q k b n r
  342. X
  343. XBook used 4649 of 5500 entries
  344. XPlaying without hashfile
  345. X
  346. X        There are 4649 unique position/move pairs in the book
  347. X        There is room for a maximum of 5499 entries but it
  348. X        should not be brought above 5400 because of the way they
  349. X        are stored.
  350. X
  351. X        The hashfile gnuchess.hash was not found or was not writable.
  352. X
  353. XYour move is? get
  354. XEnter file name: 
  355. XTEST/test1
  356. X
  357. X
  358. XWhite 0:00  Black 0:00
  359. X
  360. X - - - - - - - -
  361. X - - - - - - - -
  362. X - - P P - - - K
  363. X - - - - - - - -
  364. X - p - p - - - k
  365. X - - - - - - - -
  366. X - - - - - - - -
  367. X - - - - - - - -
  368. X
  369. X
  370. XYour move is? white
  371. X
  372. XYour move is? post
  373. X
  374. XYour move is? level
  375. XEnter #moves #minutes: 40 5
  376. XOperator time(hundredths)= 0
  377. X
  378. XYour move is? go
  379. X
  380. XMove# 1    Target= 359    Clock: 30000
  381. X        
  382. X        Target is the time it would like to use for this move
  383. X        3.59 seconds Clock is the available time 300 seconds.
  384. X
  385. XSearch      Time  Positions
  386. XDepth Score (secs) searched Principle Variation
  387. X 1.    -56    0       10   h4g4 
  388. X 2.    -14    0       38   d4d5  c6d5 
  389. X 3&     50    0       58   d4d5  c6d5  b4b5 
  390. X 3.     50    0       96   d4d5  c6d5  b4b5 
  391. X 4&     43    0      154   d4d5  c6d5  b4b5  d5d4 
  392. X 4.     43    0      211   d4d5  c6d5  b4b5  d5d4 
  393. X 5&     37    0      329   d4d5  c6d5  b4b5  d5d4  b5b6 
  394. X 5.     37    0      515   d4d5  c6d5  b4b5  d5d4  b5b6 
  395. X 6&     -4    0      905   d4d5  c6d5  b4b5  d5d4  h4g4  d4d3 
  396. X 6.     -4    1     1153   d4d5  c6d5  b4b5  d5d4  h4g4  d4d3 
  397. X 7+    122    1     1728   d4d5  c6d5  b4b5  d5d4  b5b6  d4d3  b6b7 
  398. X 7-     10    1     1891   d4d5  c6d5  h4g3  d5d4  b4b5  d4d3 
  399. X 7.     10    1     2577   d4d5  c6d5  h4g3  d5d4  b4b5  d4d3 
  400. X 8&    -19    2     4195   d4d5  c6d5  h4g3  d5d4  g3f3  d6d5  b4b5  d4d3 
  401. X 8+    123    2     6833   h4g3  h6g6  d4d5  c6c5  b4c5  d6c5  d5d6  g6f6 
  402. X                           d6d7 
  403. X 8&    123    3     7205   h4g3  d6d5  g3f4  h6h7  f4e5  h7h8  e5d6  h8g8 
  404. X                           d6c6 
  405. X 8.    123    3     8933   h4g3  d6d5  g3f4  h6h7  f4e5  h7h8  e5d6  h8g8 
  406. X                           d6c6 
  407. X 9&    141    5    16265   h4g3  h6g6  d4d5  c6d5  b4b5  d5d4  b5b6  d4d3 
  408. X                           g3f3 
  409. X 9.    141    5    17767   h4g3  h6g6  d4d5  c6d5  b4b5  d5d4  b5b6  d4d3 
  410. X                           g3f3 
  411. X10.    141    8    26004   h4g3  h6g6  d4d5  c6d5  b4b5  d5d4  b5b6  d4d3 
  412. X                           g3f3 
  413. Xwhere:
  414. X    . = Final result of this level
  415. X    & = Intermediate best move inside <alpha beta> window
  416. X    + = best move greater than beta in <alpha beta> window
  417. X    - = best move less than alpha in <alpha beta> window
  418. X       If best move is outside window it will cause a re-search high or low
  419. X       if it persists at end of level, + always causes a re-search.
  420. X       These are only printed above level 2.
  421. X
  422. X1. ... h4g3
  423. XNodes 26004 Tree 142 Eval 8358 Rate 0 RS low 1 high 2
  424. XHin/Hout/TColl/Coll/Fin/Fout = 3764/4360/0/0/0/0
  425. X
  426. X    Nodes = Number of positions examined
  427. X    Tree  = Maximum entries in the search tree
  428. X    Eval  = Number of position evaluations done
  429. X    Rate  = Search rate in positions/sec
  430. X    RS    = Re-searches high and low forced by the window
  431. X    Hin   = Number of entries created in in-core transposition table
  432. X    Hout  = Number of entries found in in-core transposition table
  433. X    Tcoll = Number of overwrites in transposition table
  434. X    Coll  = Number of collisions in in-core transposition table
  435. X    Fin   = Number of entries created in external transposition table
  436. X    Fout  = Number of entries found in external transposition table
  437. X
  438. XMy move is: h4g3
  439. END_OF_FILE
  440. if test 3639 -ne `wc -c <'doc/README.output'`; then
  441.     echo shar: \"'doc/README.output'\" unpacked with wrong size!
  442. fi
  443. # end of 'doc/README.output'
  444. fi
  445. if test -f 'doc/gnuchess.1' -a "${1}" != "-c" ; then 
  446.   echo shar: Will not clobber existing file \"'doc/gnuchess.1'\"
  447. else
  448. echo shar: Extracting \"'doc/gnuchess.1'\" \(9940 characters\)
  449. sed "s/^X//" >'doc/gnuchess.1' <<'END_OF_FILE'
  450. X.TH Chess GNUCHESS
  451. X.SH NAME
  452. Xgnuchess \- Chess
  453. X.SH SYNOPSIS
  454. X.B gnuchess
  455. X[
  456. X.B [-L lang] 
  457. X.B [-t] [-c size] 
  458. X.B [-s pathname] [-l pathname] 
  459. X.B [-v]
  460. X.B [-T size]
  461. X.B [-r length]
  462. X.B arg1 arg2
  463. X]
  464. X.SH DESCRIPTION
  465. X.I Gnuchess
  466. Xplays a game of chess against the user or it plays against itself.
  467. X.PP
  468. X.I Gnuchess
  469. Xis an updated version of the gnuchess program.
  470. XIt has a simple alpha-numeric board display, an IBM PC compatible interface,
  471. Xor it can be compiled for use with the 
  472. X.B chesstool 
  473. Xprogram on a SUN workstation or with the 
  474. X.B xboard 
  475. Xprogram under X-windows.
  476. XThe program gets its opening moves from the file 
  477. X.B gnuchess2.book 
  478. Xwhich is  located in a directory specified in the makefile.
  479. XTo invoke the program type:
  480. X.TP
  481. X.B gnuchess
  482. X- curses based version
  483. X.TP
  484. X.B gnuchessn 
  485. X- IBM PC character set based version
  486. X.TP
  487. X.B gnuchessr 
  488. X- ASCII based version
  489. X.TP
  490. X.B gnuchessc 
  491. X- chesstools compatible version
  492. X.TP
  493. X.B gnuchessx 
  494. X- xboard compatible version
  495. X.SH TIME CONTROLS
  496. X.PP
  497. XIf one argument is given and it begins with a
  498. X.B :
  499. Xthen it is the search time per move in seconds. 
  500. XIf it has no 
  501. X.B :
  502. Xit is the search depth in plys.
  503. XSo 
  504. X.B gnuchess :30
  505. Xwill generate 1 move every 30 seconds, while
  506. X.B gnuchess 5
  507. Xwill search each move to depth 5.
  508. X
  509. XIf two or more arguments are given, they will be used to set tournament
  510. Xtime controls with the first argument of each pair being the number of moves and the second
  511. Xbeing the total clock time in minutes[
  512. X.B :
  513. Xseconds].  Thus, entering 
  514. X.B gnuchess 60 5
  515. Xwill set
  516. Xthe clocks for 5 minutes (300 seconds) for the first 60 moves,
  517. Xand 
  518. X.B gnuchess 30 3:30
  519. Xwill allow 3 minutes and 30 seconds for 30 moves.
  520. X
  521. X.B gnuchess 30 5 1 :30
  522. Xwill allow 5 minutes for the first 30 moves and 30 seconds for each move after that.
  523. XUp to 4 pairs of controls may be specified.
  524. X
  525. XIf no argument is given the program will prompt the user for level of play.
  526. X
  527. XFor use with 
  528. X.B chesstool
  529. Xor
  530. X.B xboard
  531. X, see the documentation on those programs.
  532. X.SH BOOK
  533. X.PP
  534. XThe book
  535. X.I gnuchess.book
  536. Xconsists of a sequence of openings.
  537. XAn opening begins with a card starting with a 
  538. X.B !
  539. X, the rest of the card is comments.
  540. XFollowing this is a series of moves in algebraic notation alternating white
  541. Xand black separated by white space. A move may have a 
  542. X.B ?
  543. Xafter it indicating this move should never be made in this position.
  544. XMoves are stored as position:move so transpositions between openings
  545. Xcan take place. 
  546. X.SH HASHFILE
  547. X.PP
  548. XThe hashfile if created should be on the order of 4 megabytes or
  549. X.B gnuchess -c 22.
  550. XThis file contains positions and moves learned from previous games. 
  551. XIf a hashfile is used the computer makes use of the experience it
  552. Xgained in past games. Tests run so far show that it plays no worse
  553. Xwith the hashfile than without, but it is not clear yet whether
  554. Xit provides a real advantage. 
  555. X.SH LEGAL MOVES
  556. X.PP
  557. X.B Note:
  558. XPiece letters and legal castling notation is determined by the language file.
  559. XWhat is specified here is the default english.
  560. X.PP
  561. XOnce
  562. X.I gnuchess
  563. Xis invoked, the program will display the board and prompt the user
  564. Xfor a move. To enter a move, use the notation 
  565. X.B e2e4
  566. Xwhere the first letter-number pair indicates the origination square
  567. Xand the second letter-number pair indicates the destination square.
  568. XAn alternative is to use the notation 
  569. X.B nf3
  570. Xwhere the first letter indicates the piece type (p,n,b,r,q,k).
  571. XTo castle, type the origin and destination squares
  572. Xof the king just as you would do for a regular move, or type
  573. X.B o-o
  574. Xor
  575. X.B 0-0
  576. Xfor kingside castling and 
  577. X.B o-o-o
  578. Xor
  579. X.B 0-0-0
  580. Xfor queenside.  To promote a pawn append the type of the new piece to the move, as in 
  581. X.B e7e8q 
  582. Xor 
  583. X.B c7c8r.
  584. X.SH "FUNCTION LETTERS"
  585. X.TP
  586. X.B -L lang
  587. XUse language 
  588. X.I lang from the file 
  589. X.B gnuchess.lang.
  590. XIf -L is not specified it uses the first language in the file.
  591. X.TP
  592. X.B -v
  593. XShow version and patchlevel.
  594. X.TP
  595. X.B -t
  596. XShow statistics for HASHFILE
  597. X.TP
  598. X.B -c size
  599. XCreate a new HASHFILE. File size is 2^size bytes.
  600. X.TP
  601. X.B -s pathname
  602. XPathname of the save file to use with the
  603. X.BR save
  604. Xcommand.
  605. X.TP
  606. X.B -T size
  607. XSet the transposition table size to 2^size entries.
  608. X.TP
  609. X.B -r length
  610. XSearch length entries for position in transposition table.
  611. X.TP
  612. X.B -l pathname
  613. XPathname of the loadfile use with the
  614. X.BR get
  615. Xor
  616. X.BR xget.
  617. X.SH COMMANDS
  618. X.PP
  619. XIn addition to legal moves, the following commands are available as responses.
  620. X.BNote:
  621. X command names are determined by the 
  622. X.Ilanguage
  623. Xfile and may vary with the implementation. This is default english.
  624. X.PP
  625. X.B alg
  626. X-- allow algrbraic input (not implemented)
  627. X.PP
  628. X.B Awindow
  629. X-- change Alpha window (default score + 90)
  630. X.PP
  631. X.B Bwindow
  632. X-- change Beta window (default score - 90)
  633. X.PP
  634. X.B beep
  635. X-- causes the program to beep after each move.
  636. X.PP
  637. X.B bd
  638. X-- updates the current board position on the display.
  639. X.PP
  640. X.B book
  641. X-- turns off use of the opening library.
  642. X.PP
  643. X.B both
  644. X-- causes the computer to play both sides of a chess game.
  645. X.PP
  646. X.B black
  647. X-- causes the computer to take the white pieces, if the computer is to move first the 
  648. X.B go
  649. Xcommand must be given.
  650. X.PP
  651. X.B coords
  652. X-- show coordinates on the display (visual only)
  653. X.PP
  654. X.B contempt
  655. X-- allows the value of 
  656. X.I contempt
  657. Xto be modified.
  658. X.PP
  659. X.B debug
  660. X--  asks for a piece as color piece, as wb or bn, and shows its calculated value on
  661. Xeach square.(allowed only on visual versions)
  662. X.PP
  663. X.B debuglevel
  664. X--  sets level of debugging output if compiled with debug options.
  665. X.PP
  666. X.B depth
  667. X-- allows the user to change the
  668. Xsearch depth of the program.  The maximum depth is 29 ply.
  669. XNormally the depth is set to 29 and the computer terminates
  670. Xits search based on elapsed time rather than depth.
  671. XUsing the depth command allows setting depth to say
  672. X4 ply and setting response time to a large number such as
  673. X9999 seconds. The program will then search until all moves
  674. Xhave been examined to a depth of 4 ply (with extensions up
  675. Xto 11 additional ply for sequences of checks and captures). 
  676. X.PP
  677. X.B easy
  678. X-- toggles easy mode (thinking on opponents time)
  679. Xon and off. The default is easy mode ON.  If easy mode is disabled,
  680. Xthe keyboard is polled for input every so often and when input is
  681. Xseen the search is terminated. It may also be terminated with a 
  682. X.Isigint.
  683. X.PP
  684. X.B edit
  685. X-- allows the user to set up a board position.
  686. X
  687. X.B     #
  688. X- command will clear the board.
  689. X
  690. X.B     c 
  691. X- toggle piece color. 
  692. X
  693. X.B     .
  694. X- command will exit setup mode.
  695. X
  696. X.B    pb3
  697. X- place a pawn on b3
  698. X
  699. XPieces are entered by typing a letter (p,n,b,r,q,k) for
  700. Xthe piece followed by the coordinate.
  701. X
  702. XThe usual warning about the
  703. X.I language file
  704. Xapplys.
  705. X.PP
  706. X.B exit
  707. X-- exits gnuchess.
  708. X.PP
  709. X.B first
  710. X-- tells the computer to move first. Computer begins searching for a move.
  711. X(same as "go").
  712. X.PP
  713. X.B force
  714. X-- allows the user to enter moves for both
  715. Xsides. To get the program to play after a sequence of moves
  716. Xhas been entered use the 'white' or 'black' commands.
  717. X.PP
  718. X.B get
  719. X-- retrieves a game from disk.  The program will
  720. Xprompt the user for a file name.
  721. X.PP
  722. X.B hash
  723. X-- use/don't use hashfile.
  724. X.PP
  725. X.B hashdepth
  726. X-- allows the user to change the minimum depth for using the hashfile and the number of moves from the
  727. Xbegining of the game to use it.
  728. X.PP
  729. X.B help
  730. X-- displays a short description of the commands and the current status of options.
  731. X.PP
  732. X.B go
  733. X-- tells the computer to move first. Computer begins searching for a move.
  734. X(same as "first").
  735. X.PP
  736. X.B hint
  737. X-- causes the program to supply the user with its predicted move.
  738. X.PP
  739. X.B level
  740. X-- allows the user to set time controls such as
  741. X60 moves in 5 minutes etc.  In tournament mode, the program will
  742. Xvary the time it takes for each
  743. Xmove depending on the situation.  If easy mode is disabled (using
  744. Xthe 'easy' command), the program
  745. Xwill often respond with its move immediately, saving time on
  746. Xits clock for use later on.
  747. X.PP
  748. X.B list
  749. X-- writes the game moves and some statistics
  750. Xon search depth, nodes, and time to the file 'chess.lst'.
  751. X.PP
  752. X.B material
  753. X-- toggle material flag - draws on no pawns and both sides < rook
  754. X.PP
  755. X.B new
  756. X-- starts a new game.
  757. X.PP
  758. X.B p
  759. X-- evaluates the board and shows the point score for each piece. The total score for
  760. Xa position is the sum of these individual piece scores.(allowed only on visual versions)
  761. X.PP
  762. X.B post
  763. X-- causes the program to display the principle
  764. Xvariation and the score during the search.  A score of
  765. X100 is equivalent to a 1 pawn advantage for the computer.
  766. X.PP
  767. X.B quit
  768. X-- exits the game.
  769. X.PP
  770. X.B random
  771. X-- causes the program to randomize its move
  772. Xselection slightly.
  773. X.PP
  774. X.B rcptr
  775. X-- set recapture mode.
  776. X.PP
  777. X.B remove
  778. X-- backout the last level for both sides. Equal to 2 
  779. X.I undo's.
  780. X.PP
  781. X.B reverse
  782. X-- causes the board display to be reversed.  That
  783. Xis, the white pieces will now appear at the top of the board.
  784. X.PP
  785. X.B rv
  786. X-- reverse board display.
  787. X.PP
  788. X.B setup
  789. X-- Compatibility with Unix chess and the nchesstool. Set up a board position.
  790. XEight lines of eight characters are used to setup the board. a8-h8 is the
  791. Xfirst line. Black pieces are  represented  by  uppercase characters.
  792. X.PP
  793. X.B stars
  794. X-- (gnuchessn only) add stars (*) to black pieces.
  795. X.PP
  796. X.B save
  797. X-- saves a game to disk.  The program will prompt
  798. Xthe user for a file name.
  799. X.PP
  800. X.B switch
  801. X-- causes the program to switch places with
  802. Xthe opponent and begin searching.
  803. X.PP
  804. X.B test
  805. X-- performs some speed tests for MoveList and CaptureList generation, and ScorePosition position scoring
  806. Xfor the current board. 
  807. X.PP
  808. X.B time
  809. X-- set computers time remaining, intended for synchronizing clocks among multiple players.
  810. X.PP
  811. X.B undo
  812. X-- undoes the last move whether it was the computer's
  813. Xor the human's. You may also type "remove". This is equivalent
  814. Xto two "undo's" (e.g. retract one move for each side).
  815. X.PP
  816. X.B white
  817. X-- causes the computer to take the black pieces, if the computer is to move first the 
  818. XiB go
  819. Xcommand must be given.
  820. X.PP
  821. X.B xget
  822. X-- read an 
  823. X.Ixboard
  824. Xposition file.
  825. X.PP
  826. X.B xwndw
  827. X-- change X window. The window around alpha/beta used to determine whether the position
  828. Xshould be scored or just estimated.
  829. X.SH BUGS
  830. X.PP
  831. X.fi
  832. X.SH SEE ALSO
  833. X.nf
  834. Xchesstool(6)
  835. Xxboard(6)
  836. X.fi
  837. X
  838. END_OF_FILE
  839. if test 9940 -ne `wc -c <'doc/gnuchess.1'`; then
  840.     echo shar: \"'doc/gnuchess.1'\" unpacked with wrong size!
  841. fi
  842. # end of 'doc/gnuchess.1'
  843. fi
  844. if test -f 'src/Makefile' -a "${1}" != "-c" ; then 
  845.   echo shar: Will not clobber existing file \"'src/Makefile'\"
  846. else
  847. echo shar: Extracting \"'src/Makefile'\" \(11448 characters\)
  848. sed "s/^X//" >'src/Makefile' <<'END_OF_FILE'
  849. X#
  850. X# Makefile for GNU Chess
  851. X#
  852. X# Copyright (c) 1992 Free Software Foundation
  853. X#
  854. X# This file is part of GNU CHESS.
  855. X#
  856. X# GNU Chess is free software; you can redistribute it and/or modify
  857. X# it under the terms of the GNU General Public License as published by
  858. X# the Free Software Foundation; either version 2, or (at your option)
  859. X# any later version.
  860. X#
  861. X# GNU Chess is distributed in the hope that it will be useful,
  862. X# but WITHOUT ANY WARRANTY; without even the implied warranty of
  863. X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  864. X# GNU General Public License for more details.
  865. X#
  866. X# You should have received a copy of the GNU General Public License
  867. X# along with GNU Chess; see the file COPYING.  If not, write to
  868. X# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  869. X#
  870. X
  871. X#
  872. X# gnuchess  is a curses-based chess.
  873. X# gnuchessn is a fancy-display-curses-based chess.
  874. X# gnuchessr is a plain dumb-terminal chess (but with full variation output)
  875. X# gnuchessc is suitable for chesstool use (mimics /usr/games/chess output)
  876. X# gnuchessx is the xchess based chess.
  877. X#
  878. X
  879. X# The version number of this release
  880. XVERS=    4.0
  881. X
  882. X# Relevant file areas.
  883. XDIST=    ../README ../README.lang ../doc ../misc ../src ../test
  884. X
  885. X# Distribution directory
  886. XDISTDIR=/tmp_mnt/home/fsf/cracraft/Ch
  887. X
  888. X# Change these to something less transitory, like /usr/games, and then
  889. X# compile. Ask your system admin / unix guru to put gnuchess.{hash,lang,book}
  890. X# in $(LIBDIR).
  891. X# Where the binaries live.
  892. XBINDIR= /tmp
  893. X
  894. X# Where language description, our book, and the persistent hash live.
  895. XLIBDIR= /tmp
  896. X
  897. X# Display routines.
  898. XLCURSES=-lcurses -ltermcap
  899. X
  900. X#compile options for gnuchess
  901. X# -DAG[0-4]  selects a set of values for SpaceBonus tables
  902. X# -DQUIETBACKGROUND don't print post information in background ( easy OFF)
  903. X# -DNOMEMSET if your machine does not support memset
  904. X# -DNOMATERIAL don't call it a draw when no pawns and both sides < rook
  905. X# -DNODYNALPHA don't dynamically adjust alpha
  906. X# -DNOHISTORY don't use history killer hueristic 
  907. X# -DNOSCORESPACE don't use Scorespace hueristic
  908. X# -DOLDXBOARD don't generate underpromote moves
  909. X# -DGNU3 don't generate underpromote moves
  910. X# -DLONG64 if you have 64bit longs
  911. X# -DSYSV   if you are using SYSV
  912. X# some debug options
  913. X# -DDEBUG8 dump board,movelist,input move to /tmp/DEBUG if illegal move
  914. X# -DDEBUG9 dump move list from test command
  915. X# -DDEBUG10 dump board and move after search before !easy begins
  916. X# -DDEBUG11 dump board when the move is output
  917. X# -DDEBUG12 dump boards between moves
  918. X# -DDEBUG13 dump search control information for each move to /tmp/DEBUG
  919. X# -DDEBUG40 include extra values of variables for debugging  in game list
  920. X# the rest of the debug options are tied to the debuglevel command
  921. X# -DDEBUG -DDEBUG4 set up code for debuglevel command
  922. X#          debuglevel
  923. X#               1 always force evaluation in evaluate
  924. X#               4 print move list after search
  925. X#               8 print move list after book before search
  926. X#              16 print move list after each ply of search
  927. X#              32 print adds to transposition table
  928. X#              64 print returns from transposition table lookups
  929. X
  930. X
  931. XOPT= -DAG4 -DQUIETBACKGROUND -DNOHISTORY
  932. X
  933. X# The hashfile is a record of positions seen. It is used by
  934. X# GNU Chess to avoid making the same mistakes, a form of learning.
  935. XHASH=    -DHASHFILE=\"$(LIBDIR)/gnuchess.hash\"
  936. X
  937. X# The "book" is a record of the first few moves, for playing good
  938. X# moves easily and quickly, saving time, and irritating the human
  939. X# opponent.
  940. XBOOK=    -DBOOK=\"$(LIBDIR)/gnuchess.book\"
  941. X
  942. X# The language file describes capabilities of the program. Perhaps
  943. X# it is useful for non-English speaking countries and customizing
  944. X# for their convenience and chess happiness.
  945. XLANG= -DLANGFILE=\"$(LIBDIR)/gnuchess.lang\"
  946. X
  947. X# The compiler used for compiling this software.
  948. X# Use this for a plain C compiler 
  949. X#CC= cc $(OPT)
  950. X# Use this if you are lucky enough to have GNU CC.
  951. XCC=    gcc -W $(OPT)
  952. X
  953. X# Miscellaneous CFLAGS. Uncomment the one you need and comment 
  954. X# the other.
  955. X#CFLAGS= -p -Dinline=""     -traditional-cpp
  956. X#CFLAGS=    -O4 -Qpath .  # SunOS cc using unprotoize
  957. X#CFLAGS= -O4 # Sun acc
  958. X#CFLAGS= -g # debug
  959. XCFLAGS= -O   -finline-functions -fstrength-reduce  # gnu cc 1.40
  960. X#CFLAGS= -O   -finline-functions -fstrength-reduce -D__mips -D__LANGUAGE_C # gnu cc on DS5000
  961. X#CFLAGS= -O2   -funroll-loops  # gnu cc  2.00 on others
  962. X#CFLAGS= -O -Aa -DSIGQUIT=_SIGQUIT -DSYSV # HPUX cc 
  963. X#CFLAGS= -O2  -funroll-loops -traditional-cpp  # gnu cc  2.00 on SunOS
  964. X
  965. Xall : gnuchess gnuchessr gnuchessn gnuchessx gnuchessc postprint gnuan game checkbook checkgame
  966. X
  967. Xgnuchess: main.o book.o genmoves.o ataks.o util.o eval.o init.o search.o dspcom.o uxdsp.o
  968. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -o gnuchess main.o book.o genmoves.o ataks.o util.o eval.o init.o search.o dspcom.o uxdsp.o $(LCURSES)
  969. X
  970. Xgnuan: main.o book.o genmoves.o ataks.o util.o eval.o init.o search.o gnuan.o
  971. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -o gnuan main.o book.o genmoves.o ataks.o util.o eval.o init.o search.o gnuan.o
  972. X
  973. Xgnuchessc: mainC.o bookC.o genmovesC.o ataks.o util.o eval.o init.o searchC.o dspcomC.o nondspC.o
  974. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -o gnuchessc mainC.o bookC.o genmovesC.o ataks.o util.o eval.o init.o searchC.o dspcomC.o nondspC.o
  975. X
  976. XDgnuchessr: mainDR.o book.o genmoves.o ataks.o utilDR.o evalDR.o init.o searchDR.o dspcomDR.o nondspDR.o
  977. X    $(CC)  -DDEBUG  -DDEBUG4 $(CFLAGS) $(HASH) $(LANG) $(BOOK) -o gnuchessr mainDR.o book.o genmoves.o ataks.o utilDR.o evalDR.o init.o searchDR.o dspcomDR.o nondspDR.o
  978. X
  979. Xgnuchessx: mainX.o bookX.o genmovesX.o ataks.o util.o eval.o init.o searchX.o dspcomX.o nondspX.o
  980. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -o gnuchessx mainX.o bookX.o genmovesX.o ataks.o util.o eval.o init.o searchX.o dspcomX.o nondspX.o
  981. X
  982. Xgnuchessr: main.o book.o genmoves.o ataks.o util.o eval.o init.o search.o dspcomR.o nondspR.o
  983. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -o gnuchessr main.o book.o genmoves.o ataks.o util.o eval.o init.o search.o dspcomR.o nondspR.o
  984. X
  985. Xgnuchessn: main.o book.o genmoves.o ataks.o util.o eval.o init.o search.o dspcom.o nuxdsp.o
  986. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -o gnuchessn main.o book.o genmoves.o ataks.o util.o eval.o init.o search.o dspcom.o nuxdsp.o $(LCURSES)
  987. X    
  988. Xgame: game.c gnuchess.h
  989. X    $(CC) $(CFLAGS) -o game game.c
  990. X    
  991. Xpostprint: postprint.o
  992. X    $(CC) $(CFLAGS) -o postprint postprint.o
  993. X    
  994. Xcheckbook: checkbook.o
  995. X    $(CC) $(CFLAGS) -o checkbook checkbook.o
  996. X    
  997. Xcheckgame: checkgame.o
  998. X    $(CC) $(CFLAGS) -o checkgame checkgame.o
  999. X
  1000. Xgnuan.o: gnuan.c gnuchess.h version.h
  1001. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -c gnuan.c
  1002. X
  1003. Xmain.o: main.c gnuchess.h version.h
  1004. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -c main.c
  1005. XmainC.o: main.c gnuchess.h version.h
  1006. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -DNONDSP -DCHESSTOOL \
  1007. X        -c main.c -o mainC.o
  1008. XmainX.o: main.c gnuchess.h version.h
  1009. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -DXBOARD  -c main.c -o mainX.o
  1010. XmainDR.o: main.c gnuchess.h version.h
  1011. X    $(CC)  -DDEBUG -DDEBUG4 $(CFLAGS) $(HASH) $(LANG) $(BOOK) \
  1012. X        -c main.c -o mainDR.o
  1013. X
  1014. Xgenmoves.o: genmoves.c gnuchess.h version.h
  1015. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -c genmoves.c
  1016. XgenmovesC.o: genmoves.c gnuchess.h version.h
  1017. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -DNONDSP -DCHESSTOOL \
  1018. X        -c genmoves.c -o genmovesC.o
  1019. XgenmovesX.o: genmoves.c gnuchess.h version.h
  1020. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -DXBOARD \
  1021. X        -c genmoves.c -o genmovesX.o
  1022. X
  1023. Xbook.o: book.c gnuchess.h version.h
  1024. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -c book.c 
  1025. XbookC.o: book.c gnuchess.h version.h
  1026. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -DNONDSP -DCHESSTOOL \
  1027. X        -c book.c -o bookC.o
  1028. XbookX.o: book.c gnuchess.h version.h
  1029. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -DXBOARD  -c book.c -o bookX.o
  1030. X
  1031. Xataks.o: ataks.h ataks.c gnuchess.h version.h
  1032. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -c ataks.c
  1033. X
  1034. Xutil.o: util.c gnuchess.h version.h
  1035. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -c util.c
  1036. X
  1037. Xeval.o: eval.c gnuchess.h version.h
  1038. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -c eval.c
  1039. XevalDR.o: eval.c gnuchess.h version.h
  1040. X    $(CC)  -DDEBUG4 -DDEBUG $(CFLAGS) $(HASH) $(LANG) $(BOOK) \
  1041. X        -c eval.c -o evalDR.o
  1042. XutilDR.o: util.c gnuchess.h version.h
  1043. X    $(CC)  -DDEBUG4 -DDEBUG $(CFLAGS) $(HASH) $(LANG) $(BOOK) \
  1044. X        -c util.c -o utilDR.o
  1045. X
  1046. Xinit.o: init.c gnuchess.h version.h
  1047. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -c init.c
  1048. X
  1049. Xsearch.o: search.c gnuchess.h version.h
  1050. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -c search.c
  1051. XsearchC.o: search.c gnuchess.h version.h
  1052. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -DNONDSP -DCHESSTOOL \
  1053. X        -c search.c -o searchC.o
  1054. XsearchX.o: search.c gnuchess.h version.h
  1055. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -DXBOARD \
  1056. X        -c search.c -o searchX.o
  1057. XsearchDR.o: search.c gnuchess.h version.h
  1058. X    $(CC)  -DDEBUG4 -DDEBUG $(CFLAGS) $(HASH) $(LANG) $(BOOK) \
  1059. X        -c search.c -o searchDR.o
  1060. X
  1061. Xuxdsp.o: uxdsp.c gnuchess.h version.h
  1062. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -c uxdsp.c
  1063. X
  1064. Xnuxdsp.o: nuxdsp.c gnuchess.h version.h
  1065. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -c nuxdsp.c
  1066. X
  1067. Xnondsp.o: nondsp.c gnuchess.h version.h
  1068. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -c nondsp.c
  1069. XnondspC.o: nondsp.c gnuchess.h version.h
  1070. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -DNONDSP -DCHESSTOOL \
  1071. X        -c nondsp.c -o nondspC.o
  1072. XnondspX.o: nondsp.c gnuchess.h version.h
  1073. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -DNONDSP -DXBOARD \
  1074. X        -c nondsp.c -o nondspX.o
  1075. XnondspR.o: nondsp.c gnuchess.h version.h
  1076. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -DNONDSP \
  1077. X        -c nondsp.c -o nondspR.o
  1078. XnondspDR.o: nondsp.c gnuchess.h version.h
  1079. X    $(CC)  -DDEBUG4 -DDEBUG $(CFLAGS) $(HASH) $(LANG) $(BOOK) -DNONDSP \
  1080. X         -c nondsp.c -o nondspDR.o
  1081. X
  1082. Xdspcom.o: dspcom.c gnuchess.h version.h
  1083. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -c dspcom.c
  1084. XdspcomC.o: dspcom.c gnuchess.h version.h
  1085. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -DNONDSP -DCHESSTOOL \
  1086. X        -c dspcom.c -o dspcomC.o
  1087. XdspcomX.o: dspcom.c gnuchess.h version.h
  1088. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -DNONDSP -DXBOARD \
  1089. X        -c dspcom.c -o dspcomX.o
  1090. XdspcomR.o: dspcom.c gnuchess.h version.h
  1091. X    $(CC) $(CFLAGS) $(HASH) $(LANG) $(BOOK) -DNONDSP \
  1092. X        -c dspcom.c -o dspcomR.o
  1093. XdspcomDR.o: dspcom.c gnuchess.h version.h
  1094. X    $(CC)  -DDEBUG -DDEBUG4 $(CFLAGS) $(HASH) $(LANG) $(BOOK) -DNONDSP \
  1095. X        -c dspcom.c -o dspcomDR.o
  1096. X
  1097. Xpostprint.o: postprint.c gnuchess.h version.h
  1098. X    $(CC) $(CFLAGS) -c postprint.c
  1099. X
  1100. Xlint:
  1101. X    lint gnuchess.c uxdsp.c nondsp.c nuxdsp.c
  1102. X
  1103. Xdistribution:
  1104. X    -patchlevel=`cat $(DISTDIR)/gnuchess-$(VERS)/src/version.h|grep patchlevel|sed -e 's/[^0-9]//g'` ;\
  1105. X    echo "patchlevel is $$patchlevel" ;\
  1106. X    cd $(DISTDIR) ;\
  1107. X    rm -f gnuchess.tar.$(VERS).Z* gnuchess.tar.$(VERS).Z.uu* ;\
  1108. X    tar cf - gnuchess-$(VERS) | compress > $(DISTDIR)/gnuchess-$(VERS).pl$$patchlevel.tar.Z ;\
  1109. X    uuencode gnuchess-$(VERS).pl$$patchlevel.tar.Z gnuchess-$(VERS).pl$$patchlevel.tar.Z > gnuchess-$(VERS).pl$$patchlevel.tar.Z.uu ;\
  1110. X    rm -f x?? ;\
  1111. X    split -1500 gnuchess-$(VERS).pl$$patchlevel.tar.Z.uu ;\
  1112. X    for i in x??; do \
  1113. X      mv $$i $(DISTDIR)/GNU_Chess_$$i; \
  1114. X    done
  1115. X
  1116. Xinstall:
  1117. X    -cp gnuchessx $(BINDIR)/gnuchessx
  1118. X    -cp gnuchessc $(BINDIR)/gnuchessc
  1119. X    -cp gnuchessr $(BINDIR)/gnuchessr
  1120. X    -cp gnuchessn $(BINDIR)/gnuchessn
  1121. X    -cp postprint $(BINDIR)/postprint
  1122. X    -cp gnuan $(BINDIR)/gnuan
  1123. X    -cp gnuchess $(BINDIR)/gnuchess
  1124. X    -cp checkbook $(BINDIR)/checkbook
  1125. X    -cp checkgame $(BINDIR)/checkgame
  1126. X    -cp ../misc/gnuchess.book $(LIBDIR)/gnuchess.book
  1127. X    -cp ../misc/gnuchess.lang $(LIBDIR)/gnuchess.lang
  1128. X
  1129. Xclean:
  1130. X    -rm -f gnuchessx gnuchessc gnuchess gnuchessr gnuchessn gnuchessd postprint gnuan *.o *~ #*# %*%
  1131. END_OF_FILE
  1132. if test 11448 -ne `wc -c <'src/Makefile'`; then
  1133.     echo shar: \"'src/Makefile'\" unpacked with wrong size!
  1134. fi
  1135. # end of 'src/Makefile'
  1136. fi
  1137. if test -f 'src/nondsp.c' -a "${1}" != "-c" ; then 
  1138.   echo shar: Will not clobber existing file \"'src/nondsp.c'\"
  1139. else
  1140. echo shar: Extracting \"'src/nondsp.c'\" \(14679 characters\)
  1141. sed "s/^X//" >'src/nondsp.c' <<'END_OF_FILE'
  1142. X/*
  1143. X * nondsp.c - UNIX & MSDOS NON-DISPLAY, AND CHESSTOOL interface for Chess
  1144. X *
  1145. X * Copyright (c) 1988,1989,1990 John Stanback
  1146. X * Copyright (c) 1992 Free Software Foundation
  1147. X *
  1148. X * This file is part of GNU CHESS.
  1149. X *
  1150. X * GNU Chess is free software; you can redistribute it and/or modify
  1151. X * it under the terms of the GNU General Public License as published by
  1152. X * the Free Software Foundation; either version 2, or (at your option)
  1153. X * any later version.
  1154. X *
  1155. X * GNU Chess is distributed in the hope that it will be useful,
  1156. X * but WITHOUT ANY WARRANTY; without even the implied warranty of
  1157. X * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1158. X * GNU General Public License for more details.
  1159. X *
  1160. X * You should have received a copy of the GNU General Public License
  1161. X * along with GNU Chess; see the file COPYING.  If not, write to
  1162. X * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  1163. X */
  1164. X
  1165. X#include <ctype.h>
  1166. X#include <signal.h>
  1167. X#ifdef MSDOS
  1168. X#include <dos.h>
  1169. X#include <conio.h>
  1170. X#include <stdlib.h>
  1171. X#include <string.h>
  1172. X#include <time.h>
  1173. X#else
  1174. X#include <sys/param.h>
  1175. X#include <sys/types.h>
  1176. X#include <sys/file.h>
  1177. X#include <sys/ioctl.h>
  1178. Xvoid TerminateSearch (int), Die (int);
  1179. X
  1180. X#endif /* MSDOS */
  1181. X
  1182. X#include "gnuchess.h"
  1183. X
  1184. X#ifdef DEBUG
  1185. Xshort int debuglevel = 0;
  1186. X
  1187. X#endif /* DEBUG */
  1188. Xunsigned short int MV[MAXDEPTH];
  1189. Xint MSCORE;
  1190. X
  1191. X#if defined CHESSTOOL || defined XBOARD
  1192. Xshort int chesstool = 1;
  1193. X
  1194. X#else
  1195. Xshort int chesstool = 0;
  1196. X
  1197. X#endif /* CHESSTOOL */
  1198. Xextern char mvstr[4][6];
  1199. Xint mycnt1, mycnt2;
  1200. Xchar *DRAW;
  1201. Xextern char *InPtr;
  1202. X
  1203. Xvoid
  1204. XInitialize (void)
  1205. X{
  1206. X  mycnt1 = mycnt2 = 0;
  1207. X#if defined CHESSTOOL || defined XBOARD
  1208. X#ifndef SYSV
  1209. X  setlinebuf (stdout);
  1210. X#else
  1211. X  setvbuf (stdout, NULL, _IOLBF, BUFSIZ);
  1212. X#endif
  1213. X  printf (CP[43]);        /*Chess*/
  1214. X  if (Level == 0 && !TCflag)
  1215. X    Level = 15;
  1216. X#endif /* CHESSTOOL */
  1217. X}
  1218. X
  1219. Xvoid
  1220. XExitChess (void)
  1221. X{
  1222. X  signal (SIGTERM, SIG_IGN);
  1223. X  ListGame ();
  1224. X  exit (0);
  1225. X}
  1226. X
  1227. X#ifndef MSDOS            /* never called!!! */
  1228. Xvoid
  1229. XDie (int sig)
  1230. X{
  1231. X  char s[80];
  1232. X
  1233. X  ShowMessage (CP[31]);        /*Abort?*/
  1234. X  scanz ("%s", s);
  1235. X  if (strcmp (s, CP[210]) == 0)    /*yes*/
  1236. X    ExitChess ();
  1237. X}
  1238. X
  1239. X#endif /* MSDOS */
  1240. X
  1241. Xvoid
  1242. XTerminateSearch (int sig)
  1243. X{
  1244. X#ifdef MSDOS
  1245. X  sig++;            /* shut up the compiler */
  1246. X#endif /* MSDOS */
  1247. X  if (!flag.timeout)
  1248. X    flag.musttimeout = true;
  1249. X  flag.bothsides = false;
  1250. X}
  1251. X
  1252. X
  1253. Xvoid
  1254. Xhelp (void)
  1255. X{
  1256. X  ClrScreen ();
  1257. X  /*printz ("CHESS command summary\n");*/
  1258. X  printz (CP[40]);
  1259. X  printz ("----------------------------------------------------------------\n");
  1260. X  /*printz ("g1f3      move from g1 to f3      quit      Exit Chess\n");*/
  1261. X  printz (CP[158]);
  1262. X  /*printz ("Nf3       move knight to f3       beep      turn %s\n", (flag.beep) ? "off" : "on");*/
  1263. X  printz (CP[86], (flag.beep) ? CP[92] : CP[93]);
  1264. X  /*printz ("a7a8q     promote pawn to queen\n");*/
  1265. X  printz (CP[128], (flag.material) ? CP[92] : CP[93]);
  1266. X  /*printz ("o-o       castle king side        easy      turn %s\n", (flag.easy) ? "off" : "on");*/
  1267. X  printz (CP[173], (flag.easy) ? CP[92] : CP[93]);
  1268. X  /*printz ("o-o-o     castle queen side       hash      turn %s\n", (flag.hash) ? "off" : "on");*/
  1269. X  printz (CP[174], (flag.hash) ? CP[92] : CP[93]);
  1270. X  /*printz ("bd        redraw board            reverse   board display\n");*/
  1271. X  printz (CP[130]);
  1272. X  /*printz ("list      game to chess.lst       book      turn %s used %d of %d\n", (Book) ? "off" : "on", bookcount, BOOKSIZE);*/
  1273. X  printz (CP[170], (Book) ? CP[92] : CP[93], bookcount, BOOKSIZE);
  1274. X  /*printz ("undo      undo last ply           remove    take back a move\n");*/
  1275. X  printz (CP[200]);
  1276. X  /*printz ("edit      edit board              force     enter game moves\n");*/
  1277. X  printz (CP[153]);
  1278. X  /*printz ("switch    sides with computer     both      computer match\n");*/
  1279. X  printz (CP[194]);
  1280. X  /*printz ("white     computer plays white    black     computer plays black\n");*/
  1281. X  printz (CP[202]);
  1282. X  /*printz ("depth     set search depth        clock     set time control\n");*/
  1283. X  printz (CP[149]);
  1284. X  /*printz ("post      principle variation     hint      suggest a move\n");*/
  1285. X  printz (CP[177]);
  1286. X  /*printz ("save      game to file            get       game from file\n");*/
  1287. X  printz (CP[188]);
  1288. X  /*printz ("random    randomize play          new       start new game\n");*/
  1289. X  printz (CP[181]);
  1290. X  printz ("----------------------------------------------------------------\n");
  1291. X  /*printz ("Computer: %-12s Opponent:            %s\n",*/
  1292. X  printz (CP[46],
  1293. X      ColorStr[computer], ColorStr[opponent]);
  1294. X  /*printz ("Depth:    %-12d Response time:       %d sec\n",*/
  1295. X  printz (CP[51],
  1296. X      MaxSearchDepth, Level);
  1297. X  /*printz ("Random:   %-12s Easy mode:           %s\n",*/
  1298. X  printz (CP[99],
  1299. X      (dither) ? CP[93] : CP[92], (flag.easy) ? CP[93] : CP[92]);
  1300. X  /*printz ("Beep:     %-12s Transposition file: %s\n",*/
  1301. X  printz (CP[36],
  1302. X      (flag.beep) ? CP[93] : CP[92], (flag.hash) ? CP[93] : CP[92]);
  1303. X  /*printz ("Time Control %s %d moves %d seconds %d opr %d depth\n", (TCflag) ? "ON" : "OFF",*/
  1304. X  printz (CP[110], (TCflag) ? CP[93] : CP[92],
  1305. X      TimeControl.moves[white], TimeControl.clock[white] / 100, OperatorTime, MaxSearchDepth);
  1306. X  signal (SIGINT, TerminateSearch);
  1307. X#ifndef MSDOS
  1308. X  signal (SIGQUIT, TerminateSearch);
  1309. X#endif /* MSDOS */
  1310. X}
  1311. X
  1312. Xvoid
  1313. XEditBoard (void)
  1314. X
  1315. X/*
  1316. X * Set up a board position. Pieces are entered by typing the piece followed
  1317. X * by the location. For example, Nf3 will place a knight on square f3.
  1318. X */
  1319. X
  1320. X{
  1321. X  short a, r, c, sq, i, found;
  1322. X  char s[80];
  1323. X
  1324. X  flag.regularstart = false;
  1325. X  Book = 0;
  1326. X  ClrScreen ();
  1327. X  UpdateDisplay (0, 0, 1, 0);
  1328. X  /*printz (".   exit to main\n");*/
  1329. X  printz (CP[29]);
  1330. X  /*printz ("#   clear board\n");*/
  1331. X  printz (CP[28]);
  1332. X  /*printz ("c   change sides\n");*/
  1333. X  printz (CP[136]);
  1334. X  /*printz ("enter piece & location: \n");*/
  1335. X  printz (CP[155]);
  1336. X
  1337. X  a = white;
  1338. X  do
  1339. X    {
  1340. X      scanz ("%s", s);
  1341. X      found=0;
  1342. X      if (s[0] == CP[28][0])    /*#*/
  1343. X    for (sq = 0; sq < 64; sq++)
  1344. X      {
  1345. X        board[sq] = no_piece;
  1346. X        color[sq] = neutral;
  1347. X      }
  1348. X      if (s[0] == CP[136][0])    /*c*/
  1349. X    a = otherside[a];
  1350. X      c = s[1] - 'a';
  1351. X      r = s[2] - '1';
  1352. X      if ((c >= 0) && (c < 8) && (r >= 0) && (r < 8))
  1353. X    {
  1354. X      sq = locn (r, c);
  1355. X      color[sq] = a;
  1356. X      board[sq] = no_piece;
  1357. X      for (i = no_piece; i <= king; i++)
  1358. X        if ((s[0] == pxx[i]) || (s[0] == qxx[i]))
  1359. X          {
  1360. X        board[sq] = i;
  1361. X        found=1;
  1362. X        break;
  1363. X          }
  1364. X      if (found==0) color[sq] = neutral;    
  1365. X    }
  1366. X  } while (s[0] != CP[29][0]);
  1367. X  for (sq = 0; sq < 64; sq++)
  1368. X    Mvboard[sq] = ((board[sq] != Stboard[sq]) ? 10 : 0);
  1369. X  GameCnt = 0;
  1370. X  Game50 = 1;
  1371. X  ZeroRPT ();
  1372. X  Sdepth = 0;
  1373. X  InitializeStats ();
  1374. X  ClrScreen ();
  1375. X  UpdateDisplay (0, 0, 1, 0);
  1376. X}
  1377. X
  1378. Xvoid
  1379. XSetupBoard (void)
  1380. X
  1381. X/*
  1382. X * Compatibility with Unix chess and the nchesstool. Set up a board position.
  1383. X * Eight lines of eight characters are used to setup the board. a8-h8 is the
  1384. X * first line. Black pieces are  represented  by  uppercase characters.
  1385. X */
  1386. X
  1387. X{
  1388. X  short r, c, sq, i;
  1389. X  char ch;
  1390. X  char s[80];
  1391. X
  1392. X  NewGame ();
  1393. X
  1394. X  gets (s);            /* skip "setup" command */
  1395. X  for (r = 7; r >= 0; r--)
  1396. X    {
  1397. X      gets (s);
  1398. X      for (c = 0; c <= 7; c++)
  1399. X    {
  1400. X      ch = s[c];
  1401. X      sq = locn (r, c);
  1402. X      color[sq] = neutral;
  1403. X      board[sq] = no_piece;
  1404. X      for (i = no_piece; i <= king; i++)
  1405. X        if (ch == pxx[i])
  1406. X          {
  1407. X        color[sq] = black;
  1408. X        board[sq] = i;
  1409. X        break;
  1410. X          }
  1411. X        else if (ch == qxx[i])
  1412. X          {
  1413. X        color[sq] = white;
  1414. X        board[sq] = i;
  1415. X        break;
  1416. X          }
  1417. X    }
  1418. X    }
  1419. X  for (sq = 0; sq < 64; sq++)
  1420. X    Mvboard[sq] = ((board[sq] != Stboard[sq]) ? 10 : 0);
  1421. X  InitializeStats ();
  1422. X  ClrScreen ();
  1423. X  UpdateDisplay (0, 0, 1, 0);
  1424. X  /*printz ("Setup successful\n");*/
  1425. X  printz (CP[106]);
  1426. X}
  1427. X
  1428. Xvoid
  1429. XShowDepth (char ch)
  1430. X{
  1431. X#ifdef MSDOS
  1432. X  ch++;                /* shut up the compiler */
  1433. X#endif /* MSDOS */
  1434. X}
  1435. X
  1436. X
  1437. Xvoid
  1438. XShowLine (short unsigned int *bstline)
  1439. X{
  1440. X  register int i;
  1441. X
  1442. X  for (i = 1; bstline[i] > 0; i++)
  1443. X    {
  1444. X      if ((i > 1) && (i % 8 == 1))
  1445. X    fprintf (stderr, "\n                          ");
  1446. X      algbr ((short) (bstline[i] >> 8), (short) (bstline[i] & 0xFF), false);
  1447. X      fprintf (stderr, "%5s ", mvstr[0]);
  1448. X    }
  1449. X  fprintf (stderr, "\n");
  1450. X}
  1451. X
  1452. Xvoid
  1453. XShowResults (short int score, short unsigned int *bstline, char ch)
  1454. X{
  1455. X#if !defined CHESSTOOL && !defined XBOARD
  1456. X  if (flag.post)
  1457. X    {
  1458. X      ElapsedTime (2);
  1459. X      fprintf (stderr, "%2d%c %6d %4ld %8ld  ", Sdepth, ch, score, et / 100, NodeCnt);
  1460. X      ShowLine (bstline);
  1461. X    }
  1462. X#else
  1463. X  register int i;
  1464. X
  1465. X  MSCORE = score;
  1466. X  MV[30] = ch;
  1467. X  for (i = 1; bstline[i] > 0; i++)
  1468. X    {
  1469. X      MV[i] = bstline[i];
  1470. X    } MV[i] = 0;
  1471. X#endif /* CHESSTOOL */
  1472. X}
  1473. X
  1474. Xvoid
  1475. XSearchStartStuff (short int side)
  1476. X{
  1477. X  signal (SIGINT, TerminateSearch);
  1478. X#ifndef MSDOS
  1479. X  signal (SIGQUIT, TerminateSearch);
  1480. X#endif /* MSDOS */
  1481. X#if !defined CHESSTOOL && !defined XBOARD
  1482. X  if (flag.post)
  1483. X    {
  1484. X      fprintf (stderr, CP[123],
  1485. X           TCmoves - TimeControl.moves[side] + 1,
  1486. X           ResponseTime, TimeControl.clock[side]);
  1487. X    }
  1488. X#endif /* CHESSTOOL */
  1489. X}
  1490. Xvoid
  1491. XOutputMove (void)
  1492. X{
  1493. X#ifdef DEBUG11
  1494. X  if (1)
  1495. X    {
  1496. X      FILE *D;
  1497. X      extern unsigned short int PrVar[];
  1498. X      char d[80];
  1499. X      int r, c, l, i;
  1500. X      D = fopen ("/tmp/DEBUGA", "a+");
  1501. X      fprintf (D, "inout move is %s\n", mvstr[0]);
  1502. X      strcpy (d, mvstr[0]);
  1503. X      for (i = 1; PrVar[i] > 0; i++)
  1504. X    {
  1505. X      algbr ((short) (PrVar[i] >> 8), (short) (PrVar[i] & 0xFF), false);
  1506. X      fprintf (D, "%5s ", mvstr[0]);
  1507. X    }
  1508. X      fprintf (D, "\n");
  1509. X
  1510. X      fprintf (D, "\n current board is\n");
  1511. X      for (r = 7; r >= 0; r--)
  1512. X    {
  1513. X      for (c = 0; c <= 7; c++)
  1514. X        {
  1515. X          l = locn (r, c);
  1516. X          if (color[l] == neutral)
  1517. X        fprintf (D, " -");
  1518. X          else if (color[l] == white)
  1519. X        fprintf (D, " %c", qxx[board[l]]);
  1520. X          else
  1521. X        fprintf (D, " %c", pxx[board[l]]);
  1522. X        }
  1523. X      fprintf (D, "\n");
  1524. X    }
  1525. X      fprintf (D, "\n");
  1526. X      fclose (D);
  1527. X      strcpy (mvstr[0], d);
  1528. X    }
  1529. X#endif
  1530. X
  1531. Xif (mvstr[0][0] == NULL) goto nomove;
  1532. X#if defined CHESSTOOL
  1533. X  if (computer == black)
  1534. X    printz ("%d. ... %s\n", ++mycnt1, mvstr[0]);
  1535. X  else
  1536. X    printz ("%d. %s\n", ++mycnt1, mvstr[0]);
  1537. X#else
  1538. X#ifdef XBOARD
  1539. X  printz ("%d. ... %s\n", ++mycnt1, mvstr[0]);
  1540. X#else
  1541. X  printz ("%d. ... %s\n", ++mycnt1, mvstr[0]);
  1542. X#endif
  1543. X#endif /* CHESSTOOL */
  1544. X#ifdef notdef
  1545. X  if (flag.post)
  1546. X    {
  1547. X      register int i;
  1548. X
  1549. X      printz (" %6d%c ", MSCORE, MV[30]);
  1550. X      for (i = 1; MV[i] > 0; i++)
  1551. X    {
  1552. X      algbr ((short) (MV[i] >> 8), (short) (MV[i] & 0xFF), false);
  1553. X      printz ("%5s ", mvstr[0]);
  1554. X    }
  1555. X    }
  1556. X  printz ("\n");
  1557. X#endif
  1558. Xnomove:
  1559. X  if ((rootnode.flags & draw)||(rootnode.score == -9999)||
  1560. X      (rootnode.score == 9998)) goto summary;
  1561. X#if !defined CHESSTOOL && !defined XBOARD
  1562. X  if (flag.post)
  1563. X    {
  1564. X      short h, l, t;
  1565. X
  1566. X      h = TREE;
  1567. X      l = 0;
  1568. X      t = TREE >> 1;
  1569. X      while (l != t)
  1570. X    {
  1571. X      if (Tree[t].f || Tree[t].t)
  1572. X        l = t;
  1573. X      else
  1574. X        h = t;
  1575. X      t = (l + h) >> 1;
  1576. X    }
  1577. X      /*fprintf (stderr, "Nodes %ld Tree %d Eval %ld Rate %ld RS high %ld low %ld\n",*/
  1578. X      fprintf (stderr, CP[89],
  1579. X           NodeCnt, t, EvalNodes, (et) ? (NodeCnt / (et / 100)) : 0, reminus, replus);
  1580. X      /*fprintf (stderr, "Hin/Hout/Coll/Fin/Fout = %ld/%ld/%ld/%ld/%ld\n",*/
  1581. X      fprintf (stderr, CP[71],
  1582. X           HashAdd, HashCnt, THashCol, HashCol, FHashAdd, FHashCnt);
  1583. X    }
  1584. X  UpdateDisplay (rootnode.f, rootnode.t, 0, rootnode.flags);
  1585. X  /*fprintf (stderr, "My move is: %s\n", mvstr[0]);*/
  1586. X  fprintf (stderr, CP[83], mvstr[0]);
  1587. X  if (flag.beep)
  1588. X    printz ("%c", 7);
  1589. X#endif /* CHESSTOOL */
  1590. X summary:
  1591. X  if (rootnode.flags & draw)
  1592. X    /*    fprintf (stderr, "Drawn game!\n");*/
  1593. X    fprintf (stderr, CP[57]);
  1594. X  else if (rootnode.score == -9999)
  1595. X    fprintf(stderr,"%s mates!\n",ColorStr[opponent]);
  1596. X  else if (rootnode.score == 9998)
  1597. X    fprintf(stderr,"%s mates!\n",ColorStr[computer]);
  1598. X#if !defined CHESSTOOL && !defined XBOARD
  1599. X#ifdef VERYBUGGY
  1600. X  else if (rootnode.score < -9000)
  1601. X    fprintf(stderr,"%s has a forced mate!\n",ColorStr[opponent]);
  1602. X  else if (rootnode.score > 9000)
  1603. X    fprintf(stderr,"%s has a forced mate!\n",ColorStr[computer]);
  1604. X#endif VERYBUGGY
  1605. X#endif /* CHESSTOOL */
  1606. X}
  1607. X
  1608. Xvoid
  1609. XClrScreen (void)
  1610. X{
  1611. X#if !defined CHESSTOOL && !defined XBOARD
  1612. X  printz ("\n");
  1613. X#endif
  1614. X}
  1615. X
  1616. Xvoid
  1617. XUpdateDisplay (short int f, short int t, short int redraw, short int isspec)
  1618. X{
  1619. X
  1620. X  short r, c, l, m;
  1621. X
  1622. X  if (redraw && !chesstool)
  1623. X    {
  1624. X      printz ("\n");
  1625. X      r = TimeControl.clock[white] / 6000;
  1626. X      c = (TimeControl.clock[white] % 6000) / 100;
  1627. X      l = TimeControl.clock[black] / 6000;
  1628. X      m = (TimeControl.clock[black] % 6000) / 100;
  1629. X      /*printz ("White %d:%02d  Black %d:%02d\n", r, c, l, m);*/
  1630. X      printz (CP[116], r, c, l, m);
  1631. X      printz ("\n");
  1632. X      for (r = 7; r >= 0; r--)
  1633. X    {
  1634. X      for (c = 0; c <= 7; c++)
  1635. X        {
  1636. X          l = ((flag.reverse) ? locn (7 - r, 7 - c) : locn (r, c));
  1637. X          if (color[l] == neutral)
  1638. X        printz (" -");
  1639. X          else if (color[l] == white)
  1640. X        printz (" %c", qxx[board[l]]);
  1641. X          else
  1642. X        printz (" %c", pxx[board[l]]);
  1643. X        }
  1644. X      printz ("\n");
  1645. X    }
  1646. X      printz ("\n");
  1647. X    }
  1648. X}
  1649. X
  1650. Xvoid
  1651. Xskip ()
  1652. X{
  1653. X  while (*InPtr != ' ')
  1654. X    InPtr++;
  1655. X  while (*InPtr == ' ')
  1656. X    InPtr++;
  1657. X}
  1658. Xvoid
  1659. Xskipb ()
  1660. X{
  1661. X  while (*InPtr == ' ')
  1662. X    InPtr++;
  1663. X}
  1664. X
  1665. Xvoid
  1666. XShowMessage (char *s)
  1667. X{
  1668. X  fprintf (stderr, "%s\n", s);
  1669. X}
  1670. X
  1671. Xvoid
  1672. XShowSidetoMove (void)
  1673. X{
  1674. X}
  1675. X
  1676. Xvoid
  1677. XPromptForMove (void)
  1678. X{
  1679. X#if !defined CHESSTOOL && !defined XBOARD
  1680. X  /*printz ("\nYour move is? ");*/
  1681. X  printz (CP[124]);
  1682. X#endif /* CHESSTOOL */
  1683. X}
  1684. X
  1685. X
  1686. Xvoid
  1687. XShowCurrentMove (short int pnt, short int f, short int t)
  1688. X{
  1689. X#ifdef MSDOS
  1690. X  f++;
  1691. X  t++;
  1692. X  pnt++;            /* shut up the compiler */
  1693. X#endif /* MSDOS */
  1694. X}
  1695. X
  1696. Xvoid
  1697. XChangeAlphaWindow (void)
  1698. X{
  1699. X  printz ("WAwindow: ");
  1700. X  scanz ("%hd", &WAwindow);
  1701. X  printz ("BAwindow: ");
  1702. X  scanz ("%hd", &BAwindow);
  1703. X}
  1704. X
  1705. Xvoid
  1706. XChangeBetaWindow (void)
  1707. X{
  1708. X  printz ("WBwindow: ");
  1709. X  scanz ("%hd", &WBwindow);
  1710. X  printz ("BBwindow: ");
  1711. X  scanz ("%hd", &BBwindow);
  1712. X}
  1713. X
  1714. Xvoid
  1715. XGiveHint (void)
  1716. X{
  1717. X  if (hint)
  1718. X    {
  1719. X      algbr ((short) (hint >> 8), (short) (hint & 0xFF), false);
  1720. X      fprintf (stderr, CP[72], mvstr[0]);    /*hint*/
  1721. X    }
  1722. X  else
  1723. X    printz (CP[223]);
  1724. X}
  1725. X
  1726. Xvoid
  1727. XSelectLevel (void)
  1728. X{
  1729. X  char T[64], *p, *q;
  1730. X  printz (CP[61]);
  1731. X  scanz ("%hd %s", &TCmoves, T);
  1732. X  for (p = T; *p == ' '; p++) ;
  1733. X  TCminutes = strtol (p, &q, 10);
  1734. X  if (*q == ':')
  1735. X    TCseconds = strtol (q + 1, (char **) NULL, 10);
  1736. X  else
  1737. X    TCseconds = 0;
  1738. X#ifdef OPERATORTIME
  1739. X  printz (CP[94]);
  1740. X  scanz ("%hd", &OperatorTime);
  1741. X#endif
  1742. X  TCflag = (TCmoves > 0);
  1743. X  SetTimeControl ();
  1744. X}
  1745. X
  1746. X#ifdef DEBUG
  1747. Xvoid
  1748. XChangeDbLev (void)
  1749. X{
  1750. X  printz (CP[146]);
  1751. X  scanz ("%hd", &debuglevel);
  1752. X}
  1753. X
  1754. X#endif /* DEBUG */
  1755. X
  1756. Xvoid
  1757. XChangeSearchDepth (void)
  1758. X{
  1759. X  printz ("depth= ");
  1760. X  scanz ("%hd", &MaxSearchDepth);
  1761. X  TCflag = !(MaxSearchDepth > 0);
  1762. X}
  1763. X
  1764. XChangeHashDepth (void)
  1765. X{
  1766. X  printz ("hashdepth= ");
  1767. X  scanz ("%hd", &HashDepth);
  1768. X  printz ("MoveLimit= ");
  1769. X  scanz ("%hd", &HashMoveLimit);
  1770. X}
  1771. X
  1772. Xvoid
  1773. XSetContempt (void)
  1774. X{
  1775. X  printz ("contempt= ");
  1776. X  scanz ("%hd", &contempt);
  1777. X}
  1778. X
  1779. Xvoid
  1780. XChangeXwindow (void)
  1781. X{
  1782. X  printz ("xwndw= ");
  1783. X  scanz ("%hd", &xwndw);
  1784. X}
  1785. END_OF_FILE
  1786. if test 14679 -ne `wc -c <'src/nondsp.c'`; then
  1787.     echo shar: \"'src/nondsp.c'\" unpacked with wrong size!
  1788. fi
  1789. # end of 'src/nondsp.c'
  1790. fi
  1791. echo shar: End of archive 10 \(of 12\).
  1792. cp /dev/null ark10isdone
  1793. MISSING=""
  1794. for I in 1 2 3 4 5 6 7 8 9 10 11 12 ; do
  1795.     if test ! -f ark${I}isdone ; then
  1796.     MISSING="${MISSING} ${I}"
  1797.     fi
  1798. done
  1799. if test "${MISSING}" = "" ; then
  1800.     echo You have unpacked all 12 archives.
  1801.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1802.     echo Building book file.
  1803.     cat misc/book.xaa misc/book.xab > misc/gnuchess.nunn.book
  1804.     rm misc/book.xaa misc/book.xab
  1805. else
  1806.     echo You still need to unpack the following archives:
  1807.     echo "        " ${MISSING}
  1808. fi
  1809. ##  End of shell archive.
  1810. exit 0
  1811.