home *** CD-ROM | disk | FTP | other *** search
/ Garbo / Garbo.cdr / pc / source / gnuchess.lzh / gnuchess.3 < prev    next >
Text File  |  1991-05-19  |  51KB  |  3,000 lines

  1.  
  2. #!/bin/sh
  3. # do not concatenate these parts, unpack them in order with /bin/sh
  4. # file gnuchess.book continued
  5. #
  6. if test ! -r _shar_seq_.tmp; then
  7.     echo 'Please unpack part 1 first!'
  8.     exit 1
  9. fi
  10. (read Scheck
  11.  if test "$Scheck" != 3; then
  12.     echo Please unpack part "$Scheck" next!
  13.     exit 1
  14.  else
  15.     exit 0
  16.  fi
  17. ) < _shar_seq_.tmp || exit 1
  18. if test ! -f _shar_wnt_.tmp; then
  19.     echo 'x - still skipping gnuchess.book'
  20. else
  21. echo 'x - continuing file gnuchess.book'
  22. sed 's/^X//' << 'SHAR_EOF' >> 'gnuchess.book' &&
  23. f2f4  e7e6
  24. d1f3  d8b6
  25. d4b3  b8c6
  26. f1d3  f8e7
  27. c1e3  b6c7
  28. o-o   o-o
  29. a1e1  c6b4
  30. ! #  col. 23f
  31. e2e4  c7c5
  32. g1f3  d7d6
  33. d2d4  c5d4
  34. f3d4  g8f6
  35. b1c3  a7a6
  36. c1e3  e7e5
  37. d4b3  c8e6
  38. d1d2  b8d7
  39. f2f3  f8e7
  40. g2g4  b7b5
  41. g4g5  f6h5
  42. o-o-o o-o
  43. h1g1  a8c8
  44. c3e2
  45. ! #  col. 24k; Kotkov-Polugayevski, USSR 1959
  46. e2e4  c7c5
  47. g1f3  d7d6
  48. d2d4  c5d4
  49. f3d4  g8f6
  50. b1c3  a7a6
  51. f1c4  e7e6
  52. o-o   f8e7
  53. c4b3  o-o
  54. f2f4  b7b5
  55. a2a3  c8b7
  56. f4f5  e6e5
  57. d4e2  b8d7
  58. e2g3  d7c5
  59. b3d5  b7d5
  60. e4d5  a8c8
  61. c1g5  c5d7
  62. g5f6  d7f6
  63. c3e4  c8c4
  64. ! #  col. 25o; Ciocaltea-Minic, Bucharest 1966
  65. e2e4  c7c5
  66. g1f3  d7d6
  67. d2d4  c5d4
  68. f3d4  g8f6
  69. b1c3  a7a6
  70. f1c4  e7e6
  71. c4b3  b7b5
  72. f2f4  c8b7
  73. f4f5  e6e5
  74. d4e2  b8d7
  75. o-o   f8e7
  76. e2g3  a8c8
  77. c1g5  o-o
  78. ! #  col. 26e
  79. e2e4  c7c5
  80. g1f3  d7d6
  81. d2d4  c5d4
  82. f3d4  g8f6
  83. b1c3  g7g6
  84. c1e3  f8g7
  85. f2f3  o-o
  86. d1d2  b8c6
  87. o-o-o d6d5
  88. e4d5  f6d5
  89. d4c6  b7c6
  90. c3d5  c6d5
  91. d2d5  d8c7
  92. d5a8  c8f5
  93. a8f8  g8f8
  94. d1d2  h7h5
  95. f1e2  f8g8
  96. a2a3  c7b8
  97. ! #  col. 27i; Bikhovski-Gik, Moscow 1968
  98. e2e4  c7c5
  99. g1f3  d7d6
  100. d2d4  c5d4
  101. f3d4  g8f6
  102. b1c3  g7g6
  103. c1e3  f8g7
  104. f2f3  o-o
  105. d1d2  b8c6
  106. f1c4  c8d7
  107. o-o-o d8a5
  108. c4b3  f8c8
  109. g2g4  c6e5
  110. h2h4  e5c4
  111. b3c4  c8c4
  112. d4b3  a5a6
  113. h4h5  c4c3
  114. b2c3  d7e6
  115. c1b1  a8c8
  116. e3d4  c8c4
  117. h5g6  h7g6
  118. ! #  col. 28k
  119. e2e4  c7c5
  120. g1f3  d7d6
  121. d2d4  c5d4
  122. f3d4  g8f6
  123. b1c3  g7g6
  124. c1e3  f8g7
  125. f2f3  o-o
  126. d1d2  b8c6
  127. f1c4  c8d7
  128. o-o-o d8a5
  129. c4b3  f8c8
  130. h2h4  c6e5
  131. h4h5  f6h5
  132. e3h6  e5d3
  133. c1b1  d3b2
  134. b1b2  g7h6
  135. d2h6  c8c3
  136. g2g4  h5f6
  137. g4g5  f6h5
  138. ! #  col. 29m; Ostojic-Honfi, Monte Carlo 1968
  139. e2e4  c7c5
  140. g1f3  d7d6
  141. d2d4  c5d4
  142. f3d4  g8f6
  143. b1c3  g7g6
  144. c1e3  f8g7
  145. f2f3  o-o
  146. d1d2  b8c6
  147. f1c4  c8d7
  148. o-o-o d8a5
  149. c4b3  f8c8
  150. c1b1  c6e5
  151. h2h4  e5c4
  152. b3c4  c8c4
  153. d4b3  a5c7
  154. h4h5  c4c3
  155. d2c3  c7c3
  156. b2c3  f6h5
  157. e3d4  d7e6
  158. h1e1  h5f6
  159. e4e5  d6e5
  160. d4e5  f6d5
  161. b1b2  a8c8
  162. ! #  col. 30p; Karpov-Korchnoi, 2nd match game 1974.
  163. e2e4  c7c5
  164. g1f3  d7d6
  165. d2d4  c5d4
  166. f3d4  g8f6
  167. b1c3  g7g6
  168. c1e3  f8g7
  169. f2f3  o-o
  170. d1d2  b8c6
  171. f1c4  c8d7
  172. h2h4  a8c8
  173. c4b3  c6e5
  174. h4h5  f6h5
  175. o-o-o e5c4
  176. b3c4  c8c4
  177. g2g4  h5f6
  178. d4e2  d8a5
  179. e3h6  g7h6
  180. d2h6  f8c8
  181. d1d3  c4c5
  182. g4g5  c5g5
  183. d3d5  g5d5
  184. c3d5  c8e8
  185. e2c3  d7c6
  186. e4e5  c6d5
  187. e5f6  e7f6
  188. h6h7  g8f8
  189. h7h8  f8e7
  190. c3d5
  191. ! #  col. 31
  192. e2e4  c7c5
  193. g1f3  d7d6
  194. d2d4  c5d4
  195. f3d4  g8f6
  196. b1c3  g7g6
  197. g2g3  b8c6
  198. f1g2  c6d4
  199. d1d4  f8g7
  200. o-o   o-o
  201. d4d3  c8e6
  202. c3d5  f6d5
  203. e4d5  e6f5
  204. ! #  col. 32c; Pulsen-Cortlever, Buenos Aires 1939.
  205. e2e4  c7c5
  206. g1f3  d7d6
  207. d2d4  c5d4
  208. f3d4  g8f6
  209. b1c3  g7g6
  210. c1g5  f8g7
  211. d1d2  b8c6
  212. o-o-o o-o
  213. d4b3  f8e8
  214. f2f3  a7a6
  215. c1b1  b7b5
  216. h2h4  c8e6
  217. g2g4  c6e5
  218. ! #  col. 33h
  219. e2e4  c7c5
  220. g1f3  d7d6
  221. d2d4  c5d4
  222. f3d4  g8f6
  223. b1c3  g7g6
  224. f2f4  b8c6
  225. d4c6  b7c6
  226. e4e5  d6e5
  227. d1d8  e8d8
  228. f4e5  f6g4
  229. c1f4  c8e6
  230. c3e4  f8g7
  231. e4g5  g7e5
  232. o-o-o d8c7
  233. g5e6  f7e6
  234. f4e5  g4e5
  235. d1e1  c7d6
  236. g2g3  e5g4
  237. f1c4  e6e5
  238. e1e2
  239. ! #  col. 34j
  240. e2e4  c7c5
  241. g1f3  d7d6
  242. d2d4  c5d4
  243. f3d4  g8f6
  244. b1c3  g7g6
  245. f2f4  b8c6
  246. f1b5  d8c7
  247. c3d5  f6d5
  248. e4d5  a7a6
  249. b5c6  b7c6
  250. d4c6  c8b7
  251. c1e3  f8g7
  252. e3d4  g7d4
  253. d1d4  o-o
  254. o-o   b7c6
  255. ! #  col. 35l
  256. e2e4  c7c5
  257. g1f3  d7d6
  258. d2d4  c5d4
  259. f3d4  g8f6
  260. b1c3  g7g6
  261. f2f4  b8d7
  262. f1e2  f8g7
  263. c1e3  o-o
  264. e2f3  d7b6
  265. d1e2  e7e5
  266. d4b3  f6g4
  267. f3g4  d8h4
  268. g2g3  h4g4
  269. e2g4  c8g4
  270. ! #  col. 36a
  271. e2e4  c7c5
  272. g1f3  d7d6
  273. d2d4  c5d4
  274. f3d4  g8f6
  275. b1c3  g7g6
  276. f1e2  f8g7
  277. c1e3  b8c6
  278. o-o   o-o
  279. d4b3  c8e6
  280. f2f4  c6a5
  281. f4f5  e6c4
  282. b3a5  c4e2
  283. d1e2  d8a5
  284. g2g4  a8c8
  285. g4g5  c8c3
  286. g5f6  c3e3
  287. e2e3  g7f6
  288. c2c3  f8c8
  289. a2a3  c8c4
  290. a1e1  b7b5
  291. ! #  col. 37c; Domnitz-Kraidman, Tel Aviv 1964
  292. e2e4  c7c5
  293. g1f3  d7d6
  294. d2d4  c5d4
  295. f3d4  g8f6
  296. b1c3  g7g6
  297. f1e2  f8g7
  298. c1e3  b8c6
  299. o-o   o-o
  300. d4b3  c8e6
  301. f2f4  d8c8
  302. d1e1  f6g4
  303. e2g4  e6g4
  304. f4f5  g6f5
  305. h2h3  g4h3
  306. g2h3  f5e4
  307. e1h4  f7f5
  308. g1h1  f8f7
  309. f1g1  c6e5
  310. c3d5  c8d7
  311. b3d4  e5g6
  312. g1g6  h7g6
  313. a1g1  e7e5
  314. g1g6  d7d8
  315. e3g5  d8a5
  316. d5f6  g8f8
  317. d4e6
  318. ! #  col. 38f; Unzicker-Geller, W. Germany-USSR 1960 (drawn)
  319. e2e4  c7c5
  320. g1f3  d7d6
  321. d2d4  c5d4
  322. f3d4  g8f6
  323. b1c3  g7g6
  324. f1e2  f8g7
  325. c1e3  b8c6
  326. o-o   o-o
  327. d1d2  f6g4
  328. e2g4  c8g4
  329. f2f4  c6d4
  330. e3d4  e7e5
  331. d4e3  e5f4
  332. f1f4  g4e6
  333. f4f2  g7e5
  334. e3d4  a8c8
  335. a1d1  d8a5
  336. a2a3  c8c4
  337. c3e2  a5d2
  338. d1d2
  339. ! #  col. 39
  340. e2e4  c7c5
  341. g1f3  d7d6
  342. d2d4  c5d4
  343. f3d4  g8f6
  344. b1c3  g7g6
  345. f1e2  f8g7
  346. c1e3  b8c6
  347. o-o   o-o
  348. f2f4  d8b6
  349. d1d3  f6g4
  350. c3d5  g7d4
  351. e2g4  d4e3
  352. d3e3  b6b2
  353. g4c8  a8c8
  354. a1b1  b2a2
  355. b1b7  e7e6
  356. ! #  col. 40h
  357. e2e4  c7c5
  358. g1f3  d7d6
  359. d2d4  c5d4
  360. f3d4  g8f6
  361. b1c3  g7g6
  362. f1e2  f8g7
  363. c1e3  b8c6
  364. o-o   o-o
  365. f2f4  d8b6
  366. e4e5  d6e5
  367. f4e5  c6e5
  368. d4f5  b6b2
  369. f5e7  g8h8
  370. e3d4  b2b4
  371. d4e5  b4e7
  372. d1d4  f6e8
  373. e5g7  e8g7
  374. e2d3  c8e6
  375. ! #  col. 41b; Smyslov-Botvinnik, match 1958
  376. e2e4  c7c5
  377. g1f3  d7d6
  378. d2d4  c5d4
  379. f3d4  g8f6
  380. b1c3  g7g6
  381. f1e2  f8g7
  382. c1e3  b8c6
  383. h2h4  h7h5
  384. f2f3  o-o
  385. d1d2  d6d5
  386. d4c6  b7c6
  387. e4e5  f6e8
  388. f3f4  f7f6
  389. o-o-o f6e5
  390. f4e5  g7e5
  391. g2g4  c8g4
  392. e2g4  h5g4
  393. h4h5  g6g5
  394. ! #  col. 42d; Van den Burg-Rajkovic, Orebro 1966
  395. e2e4  c7c5
  396. g1f3  d7d6
  397. d2d4  c5d4
  398. f3d4  g8f6
  399. b1c3  g7g6
  400. f1e2  f8g7
  401. c1e3  b8c6
  402. d4b3  o-o
  403. f2f4  c6a5
  404. g2g4  b7b6
  405. g4g5  f6d7
  406. o-o   c8b7
  407. e2d3  a8c8
  408. b3a5  b6a5
  409. d1e1  d7c5
  410. f4f5  g7e5
  411. e1h4  e7e6
  412. f5f6  h7h5
  413. d3e2  g8h7
  414. e2h5  f8h8
  415. ! #  col. 43f
  416. e2e4  c7c5
  417. g1f3  d7d6
  418. d2d4  c5d4
  419. f3d4  g8f6
  420. b1c3  g7g6
  421. f1e2  f8g7
  422. c1e3  b8c6
  423. d4b3  o-o
  424. f2f4  c6a5
  425. g2g4  c8e6
  426. g4g5  f6d7
  427. e3d4  f7f6
  428. h2h4  f6g5
  429. d4g7  g8g7
  430. b3d4  e6g8
  431. f4f5  d8b6
  432. ! #  col. 44
  433. e2e4  c7c5
  434. g1f3  d7d6
  435. d2d4  c5d4
  436. f3d4  g8f6
  437. b1c3  g7g6
  438. f1e2  f8g7
  439. o-o   b8c6
  440. d4b3  o-o
  441. f2f4  b7b5
  442. e2f3  b5b4
  443. c3d5  f6d5
  444. e4d5  c6a5
  445. b3a5  d8a5
  446. f1e1  f8e8
  447. ! #  col. 45i; Smyslov-Korchnoi, Moscow 1960
  448. e2e4  c7c5
  449. g1f3  d7d6
  450. d2d4  c5d4
  451. f3d4  g8f6
  452. b1c3  g7g6
  453. f1e2  f8g7
  454. d4b3  b8c6
  455. g2g4  b7b6
  456. f2f4  c8b7
  457. e2f3  o-o
  458. h2h4  a7a5
  459. a2a4  c6b4
  460. h4h5  d6d5
  461. e4e5  f6g4
  462. b3d4  g4h6
  463. h5g6  f7g6
  464. d4e6  d8d7
  465. e6f8  a8f8
  466. c3b5  d5d4
  467. ! #  col. 46
  468. e2e4  c7c5
  469. g1f3  d7d6
  470. d2d4  c5d4
  471. f3d4  g8f6
  472. f2f3  e7e5
  473. f1b5  c8d7
  474. b5d7  b8d7
  475. d4f5  d6d5
  476. e4d5  d8a5
  477. b1c3  d7b6
  478. ! #  col. 47h; Schweber-Najdorf, Buenos Aires 1970
  479. e2e4  c7c5
  480. g1f3  d7d6
  481. d2d4  c5d4
  482. d1d4  b8c6
  483. f1b5  c8d7
  484. b5c6  d7c6
  485. c2c4  g8f6
  486. b1c3  e7e6
  487. c1g5  f8e7
  488. o-o   o-o
  489. f1e1  h7h6
  490. g5h4  a7a6
  491. a1d1  d8a5
  492. d4d2  a5b6
  493. f3d4  a8c8
  494. e1e3  f8e8
  495. ! #  col. 48i
  496. e2e4  c7c5
  497. g1f3  d7d6
  498. d2d4  c5d4
  499. d1d4  a7a6
  500. c1e3  g8f6
  501. b1c3  b8c6
  502. d4b6  d8b6
  503. e3b6  g7g6
  504. o-o-o f8h6
  505. c1b1  o-o
  506. f3d4  c8d7
  507. f2f3  c6e5
  508. d4b3  f8c8
  509. b3a5  d7c6
  510. c3d5  c6d5
  511. e4d5  f6d7
  512. b6d4  b7b6
  513. ! #  col. 50
  514. e2e4  c7c5
  515. g1f3  d7d6
  516. d2d4  g8f6
  517. d4c5  f6e4
  518. c5d6  e7e6
  519. d1d3  e4d6
  520. b1c3  b8c6
  521. c1f4  f7f6
  522. o-o-o e6e5
  523. c3b5
  524. ! #  col. 51c; Pfeiffer-Kottnauer, Helsinki 1952
  525. e2e4  c7c5
  526. g1f3  d7d6
  527. c2c3  g8f6
  528. f1d3  b8c6
  529. d3c2  c8g4
  530. h2h3  g4h5
  531. d2d3  d6d5
  532. d1e2  e7e6
  533. b1d2  f8e7
  534. d2f1  d8a5
  535. ! #  col. 52d; Brasket-Evans, U.S. Open Chp. 1960
  536. e2e4  c7c5
  537. g1f3  d7d6
  538. c2c3  g8f6
  539. d2d3  g7g6
  540. g2g3  f8g7
  541. b1d2  o-o
  542. f1g2  e7e5
  543. o-o   b8c6
  544. a2a4  h7h6
  545. d2b1  d8a5
  546. ! #  col. 53h; Ciocaltea-Fischer, Varna 1962
  547. e2e4  c7c5
  548. g1f3  d7d6
  549. g2g3  g7g6
  550. f1g2  f8g7
  551. o-o   b8c6
  552. c2c3  e7e5
  553. d2d3  g8e7
  554. f3h4  o-o
  555. f2f4  e5f4
  556. g3f4  f7f5
  557. b1d2  g8h8
  558. d2f3
  559. ! #  col. 54k; Tarjan-Mednis, U.S. Chp. 1973
  560. e2e4  c7c5
  561. g1f3  b8c6
  562. d2d4  c5d4
  563. f3d4  g8f6
  564. b1c3  e7e6
  565. f1e2  g7g6
  566. d4b3
  567. ! e2e4  c7c5
  568. g1f3  d7d6
  569. b1c3  g8f6
  570. e4e5  d6e5
  571. f3e5  a7a6
  572. f1e2  e7e6
  573. o-o   d8c7
  574. e5c4  b7b5
  575. c4e3  f8d6
  576. h2h3  b8c6
  577. a2a4  b5b4
  578. c3b1  c8b7
  579. d2d3  c6d4
  580. b1d2  o-o
  581. d2f3  d4e2
  582. d1e2  f8e8
  583. e3c4  e6e5
  584. f3g5  e5e4
  585. c4d6  c7d6
  586. g5e4  f6e4
  587. d3e4  b7e4
  588. c1e3  d6c6
  589. ! #  col. 55o; Medina-Pomar, Santander 1947
  590. e2e4  c7c5
  591. g1f3  d7d6
  592. b2b4  c5b4
  593. d2d4  g8f6
  594. f1d3  d6d5
  595. b1d2  d5e4
  596. d2e4  b8d7
  597. e4g5  d8c7
  598. c2c4  h7h6
  599. g5h3  g7g5
  600. h3g1  f8g7
  601. g1e2  e7e5
  602. e2g3  e5e4
  603. d1e2  o-o
  604. ! #  col. 56e; del Corral-Benko, Mallorca 1968
  605. e2e4  c7c5
  606. g1f3  d7d6
  607. f1b5  c8d7
  608. b5d7  d8d7
  609. o-o   b8c6
  610. f1e1  g8f6
  611. c2c3  e7e6
  612. d2d3  f8e7
  613. a2a4  o-o
  614. b1d2  d7c7
  615. ! #  col. 57g; Radovich-Lombardy, Leipzig 1960
  616. e2e4  c7c5
  617. g1f3  d7d6
  618. f1b5  b8c6
  619. o-o   a7a6
  620. b5c6  b7c6
  621. d2d4  c5d4
  622. d1d4  e7e5
  623. d4d3  f7f6
  624. c2c4  c8e6
  625. b1c3  d8c7
  626. ! #  col. 58j; Gurgenidze-Osnos, Alma Ata 1969
  627. e2e4  c7c5
  628. g1f3  b8c6
  629. f1b5  e7e6
  630. b1c3  g8e7
  631. o-o   a7a6
  632. b5c6  e7c6
  633. d2d4  c5d4
  634. f3d4  d7d6
  635. d4c6  b7c6
  636. d1g4  g7g6
  637. e4e5  d6d5
  638. c1g5  f8e7
  639. ! #  col. 59m
  640. e2e4  c7c5
  641. g1f3  b8c6
  642. f1b5  g7g6
  643. o-o   f8g7
  644. c2c3  g8f6
  645. f1e1  o-o
  646. d2d4  c5d4
  647. c3d4  d7d5
  648. e4e5  f6e4
  649. b1c3  e4c3
  650. b2c3  c6a5
  651. c1g5  c8f5
  652. f3d2  f8e8
  653. ! #  col. 60o
  654. e2e4  c7c5
  655. g1f3  b8c6
  656. f1b5  g7g6
  657. o-o   f8g7
  658. f1e1  e7e5
  659. f1e1  o-o
  660. d2d4  c5d4
  661. c3d4  d7d5
  662. e4e5  f6e4
  663. b1c3  e4c3
  664. b2c3  c6a5
  665. c1g5  c8f5
  666. f3d2  f8e8
  667. ! #  col. 61c; Barczay-Szilagyi, Hungarian Chp. 1969
  668. e2e4  c7c5
  669. g1f3  b8c6
  670. d2d4  c5d4
  671. f3d4  g8f6
  672. b1c3  d7d6
  673. c1g5  c8d7
  674. g5f6  g7f6
  675. d4b3  h8g8
  676. g2g3  f6f5
  677. d1d2  f8g7
  678. e4f5  d7f5
  679. f1g2  d8d7
  680. o-o   g7c3
  681. b2c3  f5h3
  682. g2h3  d7h3
  683. ! #  col. 62e
  684. e2e4  c7c5
  685. g1f3  b8c6
  686. d2d4  c5d4
  687. f3d4  g8f6
  688. b1c3  d7d6
  689. c1g5  c8d7
  690. d4b3  h7h6
  691. g5h4  a8c8
  692. f1e2  g7g5
  693. h4g3  h6h5
  694. h2h4  g5g4
  695. g3f4  c6e5
  696. d1d4  e5g6
  697. f4g5  f8g7
  698. o-o
  699. ! #  col. 63g; Matulovic-Masic, Sombor 1968
  700. e2e4  c7c5
  701. g1f3  b8c6
  702. d2d4  c5d4
  703. f3d4  g8f6
  704. b1c3  d7d6
  705. c1g5  c8d7
  706. f2f4  d8b6
  707. d4b3  f6g4
  708. d1e2  c6d4
  709. c3d5  d4e2
  710. d5b6  a7b6
  711. e1e2  h7h6
  712. g5h4  g7g5
  713. h4g3  g5f4
  714. g3f4  f8g7
  715. c2c3  d7c6
  716. ! #  col. 64j; Liberzo-Stein, USSR Chp. 1969-70.  Complete game (draw).
  717. e2e4  c7c5
  718. g1f3  b8c6
  719. d2d4  c5d4
  720. f3d4  g8f6
  721. b1c3  d7d6
  722. c1g5  c8d7
  723. d1d3  c6d4
  724. d3d4  d8a5
  725. f2f4  e7e5
  726. d4d3  f8e7
  727. o-o-o d7c6
  728. c1b1  e5f4
  729. g5f4  o-o
  730. f1e2  f8e8
  731. e2f3  e7f8
  732. c3d5  f6d7
  733. d3d2  a5d2
  734. d1d2  a8c8
  735. h1d1  d7e5
  736. b2b3
  737. ! #  col. 65m; Bronstein-Stein, USSR 1969
  738. e2e4  c7c5
  739. g1f3  b8c6
  740. d2d4  c5d4
  741. f3d4  g8f6
  742. b1c3  d7d6
  743. c1g5  c8d7
  744. d1d3  c6d4
  745. d3d4  d8a5
  746. f1e2  e7e5
  747. d4d3  a5c7
  748. e2g4  f8e7
  749. g5f6  e7f6
  750. o-o-o f6e7
  751. c3b5  d7b5
  752. d3b5  c7c6
  753. b5d5  c6d5
  754. d1d5
  755. ! #  col. 66b; Benko-R. Byrne, US Open Chp. 1968
  756. e2e4  c7c5
  757. g1f3  b8c6
  758. d2d4  c5d4
  759. f3d4  g8f6
  760. b1c3  d7d6
  761. c1g5  c8d7
  762. d1d2  a8c8
  763. o-o-o c6d4
  764. d2d4  d8a5
  765. g5d2  a7a6
  766. f1c4  a5c5
  767. d4c5  c8c5
  768. c4b3  g7g6
  769. d2e3  c5c8
  770. e3d4  f8g7
  771. c3d5  f6h5
  772. d4g7  h5g7
  773. e4e5  c8c6
  774. d5b4  c6b6
  775. ! #  col. 66b alternate; Polgar-Nagy, Hungarian Chp. 1972
  776. e2e4  c7c5
  777. g1f3  b8c6
  778. d2d4  c5d4
  779. f3d4  g8f6
  780. b1c3  d7d6
  781. c1g5  c8d7
  782. d1d2  a8c8
  783. o-o-o c6d4
  784. d2d4  d8a5
  785. g5d2  e7e5
  786. d4d3  a7a6
  787. c1b1  h7h6
  788. f2f3  a5c7
  789. g2g3  f8e7
  790. h2h4  b7b5
  791. ! #  col. 67c; Suetin-Gheorghiu, Hastings 1967/8.  Draw.
  792. e2e4  c7c5
  793. g1f3  b8c6
  794. d2d4  c5d4
  795. f3d4  g8f6
  796. b1c3  d7d6
  797. c1g5  c8d7
  798. d1d2  a8c8
  799. o-o-o c6d4
  800. d2d4  d8a5
  801. g5e3  a7a6
  802. f2f3  e7e6
  803. d4b6  a5b6
  804. e3b6  d7c6
  805. f1c4  c6e4
  806. c4e6  f7e6
  807. c3e4  f6e4
  808. f3e4  f8e7
  809. h1f1  e7g5
  810. c1b1  e8e7
  811. c2c3  h8f8
  812. b1c2  f8f1
  813. d1f1  c8f8
  814. ! #  col. 68d
  815. e2e4  c7c5
  816. g1f3  b8c6
  817. d2d4  c5d4
  818. f3d4  g8f6
  819. b1c3  d7d6
  820. c1g5  c8d7
  821. d1d2  a8c8
  822. o-o-o c6d4
  823. d2d4  d8a5
  824. f2f4  e7e6
  825. e4e5  d6e5
  826. f4e5  c8c3
  827. g5d2  a5a2
  828. d2c3  g7g6
  829. ! #  col. 69fA1; Janosevic-Larsen, Belgrade 1964
  830. e2e4  c7c5
  831. g1f3  b8c6
  832. d2d4  c5d4
  833. f3d4  g8f6
  834. b1c3  d7d6
  835. c1g5  c8d7
  836. d1d2  a8c8
  837. o-o-o c6d4
  838. d2d4  d8a5
  839. f2f4  c8c3
  840. b2c3  e7e5
  841. d4b4  a5b4
  842. c3b4  f6e4
  843. f1c4  b7b5
  844. c4d5  e4c3
  845. f4e5  h7h6
  846. g5h4  g7g5
  847. h4g3  c3e2
  848. c1b2  e2g3
  849. h2g3  f8g7
  850. ! #  col. 70g; Bednarski-Simagin, Polanica Zdroj 1968
  851. e2e4  c7c5
  852. g1f3  b8c6
  853. d2d4  c5d4
  854. f3d4  g8f6
  855. b1c3  d7d6
  856. c1g5  c8d7
  857. d1d2  a8c8
  858. o-o-o c6d4
  859. d2d4  c8c3
  860. d4c3  f6e4
  861. c3e3  e4g5
  862. e3g5  d8b6
  863. f1c4  e7e6
  864. g5g3  g7g6
  865. c4b3  f8e7
  866. h2h4  h7h5
  867. h1e1  b6b4
  868. g3e3  a7a5
  869. e3d4
  870. ! #  col. 71d
  871. e2e4  c7c5
  872. g1f3  b8c6
  873. d2d4  c5d4
  874. f3d4  g8f6
  875. b1c3  d7d6
  876. c1g5  e7e6
  877. d1d2  f8e7
  878. o-o-o c6d4
  879. d2d4  o-o
  880. f2f4  h7h6
  881. g5h4  d8a5
  882. f1c4  e6e5
  883. f4e5  d6e5
  884. d4d3  a5c5
  885. h4f6  e7f6
  886. ! #  col. 72g
  887. e2e4  c7c5
  888. g1f3  b8c6
  889. d2d4  c5d4
  890. f3d4  g8f6
  891. b1c3  d7d6
  892. c1g5  e7e6
  893. d1d2  f8e7
  894. o-o-o c6d4
  895. d2d4  o-o
  896. f2f4  d8a5
  897. f1c4  c8d7
  898. c4b3  d7c6
  899. h1f1  b7b5
  900. g5f6  e7f6
  901. d4d6  f6c3
  902. d6c6  a8c8
  903. c6d7  c8d8
  904. d7e7  c3d2
  905. c1b1  d2f4
  906. d1d8  a5d8
  907. ! #  col. 73i
  908. e2e4  c7c5
  909. g1f3  b8c6
  910. d2d4  c5d4
  911. f3d4  g8f6
  912. b1c3  d7d6
  913. c1g5  e7e6
  914. d1d2  f8e7
  915. o-o-o o-o
  916. d4b3  d8b6
  917. f2f3  a7a6
  918. g2g4  f8d8
  919. g5e3  b6c7
  920. h2h4  b7b5
  921. g4g5  f6d7
  922. g5g6  f7g6
  923. h4h5  g6h5
  924. h1h5  d7f6
  925. h5g5  c6e5
  926. d2g2  e7f8
  927. f3f4  e5c4
  928. f1c4  b5c4
  929. b3d4  a8b8
  930. d1g1  b8b7
  931. ! #  col. 74; Tal-Larsen, match 1969
  932. e2e4  c7c5
  933. g1f3  b8c6
  934. d2d4  c5d4
  935. f3d4  g8f6
  936. b1c3  d7d6
  937. c1g5  e7e6
  938. d1d2  f8e7
  939. o-o-o o-o
  940. d4b3  a7a6
  941. g5f6  g7f6
  942. f1e2  g8h8
  943. e2h5  c8d7
  944. f2f4  b7b5
  945. c1b1
  946. ! #  col. 75k
  947. e2e4  c7c5
  948. g1f3  b8c6
  949. d2d4  c5d4
  950. f3d4  g8f6
  951. b1c3  d7d6
  952. c1g5  e7e6
  953. d1d2  f8e7
  954. o-o-o o-o
  955. d4b5  d8a5
  956. g5f6  e7f6
  957. b5d6  f8d8
  958. f2f4  e6e5
  959. d2d5  a5c7
  960. f4f5  c6d4
  961. d6b5  c7a5
  962. d5c4  c8f5
  963. b2b4  a5a6
  964. ! #  col. 76b; Spasski-Larsen, Santa Monica 1966
  965. e2e4  c7c5
  966. g1f3  b8c6
  967. d2d4  c5d4
  968. f3d4  g8f6
  969. b1c3  d7d6
  970. c1g5  e7e6
  971. d1d2  f8e7
  972. o-o-o o-o
  973. f2f4  h7h6
  974. g5h4  e6e5
  975. d4f5  c8f5
  976. e4f5  d8a5
  977. c1b1  a8d8
  978. h4f6  e7f6
  979. c3d5  a5d2
  980. d5f6  g7f6
  981. d1d2  e5f4
  982. ! #  col. 77e; Kujpers-Minev, Halle 1967
  983. e2e4  c7c5
  984. g1f3  b8c6
  985. d2d4  c5d4
  986. f3d4  g8f6
  987. b1c3  d7d6
  988. c1g5  e7e6
  989. d1d2  f8e7
  990. o-o-o o-o
  991. f2f4  d6d5
  992. e4e5  f6d7
  993. h2h4  d7b6
  994. d2e3  c8d7
  995. g5e7  d8e7
  996. h4h5  c6a5
  997. d4b3  a5c4
  998. e3d4  f8c8
  999. c1b1  a7a5
  1000. f4f5  a5a4
  1001. f5f6  e7f8
  1002. h1h3  c4b2
  1003. b1b2  b6c4
  1004. f1c4  c8c4
  1005. d4d2
  1006. ! #  col. 78h
  1007. e2e4  c7c5
  1008. g1f3  b8c6
  1009. d2d4  c5d4
  1010. f3d4  g8f6
  1011. b1c3  d7d6
  1012. c1g5  e7e6
  1013. d1d2  a7a6
  1014. o-o-o c8d7
  1015. f2f4  h7h6
  1016. g5h4  f6e4
  1017. d2e1  e4f6
  1018. d4f5  d8a5
  1019. f5d6  f8d6
  1020. d1d6  o-o-o 
  1021. d6d1  e6e5
  1022. f1c4  e5f4
  1023. c3e4  d7e6
  1024. c4e6  f7e6
  1025. e4d6  c8b8
  1026. e1e6  h8f8
  1027. ! #  col. 79j; O'Kelly-Simagin corr. 1964
  1028. e2e4  c7c5
  1029. g1f3  b8c6
  1030. d2d4  c5d4
  1031. f3d4  g8f6
  1032. b1c3  d7d6
  1033. c1g5  e7e6
  1034. d1d2  a7a6
  1035. o-o-o h7h6
  1036. g5h4  f6e4
  1037. d2f4  e4g5
  1038. d4c6  b7c6
  1039. f4a4  d8b6
  1040. f2f4  g5h7
  1041. f4f5  f8e7
  1042. c3e4  a8b8
  1043. a4a3  b6b5
  1044. ! #  col. 80k; Di Camillo-R. Byrne, US Open Chp. 1958
  1045. e2e4  c7c5
  1046. g1f3  b8c6
  1047. d2d4  c5d4
  1048. f3d4  g8f6
  1049. b1c3  d7d6
  1050. c1g5  e7e6
  1051. d1d2  h7h6
  1052. g5f6  g7f6
  1053. o-o-o a7a6
  1054. f2f4  c8d7
  1055. f1e2  h6h5
  1056. c1b1  d8b6
  1057. d4b3  o-o-o 
  1058. h1f1  f8e7
  1059. c3a4  b6a7
  1060. c2c4  c6d4
  1061. ! #  col. 81b
  1062. e2e4  c7c5
  1063. g1f3  b8c6
  1064. d2d4  c5d4
  1065. f3d4  g8f6
  1066. b1c3  d7d6
  1067. c1g5  e7e6
  1068. d4c6  b7c6
  1069. e4e5  d6e5
  1070. d1f3  f8e7
  1071. f3c6  c8d7
  1072. c6f3  e5e4
  1073. c3e4  f6e4
  1074. g5e7  d8a5
  1075. ! #  col. 82e
  1076. e2e4  c7c5
  1077. g1f3  b8c6
  1078. d2d4  c5d4
  1079. f3d4  g8f6
  1080. b1c3  d7d6
  1081. c1g5  e7e6
  1082. d1d3  f8e7
  1083. a1d1  o-o
  1084. f1e2  c8d7
  1085. o-o   c6d4
  1086. d3d4  d7c6
  1087. g1h1  d8a5
  1088. f2f4  f8e8
  1089. ! #  col. 83
  1090. e2e4  c7c5
  1091. g1f3  b8c6
  1092. d2d4  c5d4
  1093. f3d4  g8f6
  1094. b1c3  d7d6
  1095. h2h3  g7g6
  1096. c1e3  f8g7
  1097. d1d2  o-o
  1098. o-o-o c6d4
  1099. e3d4  d8a5
  1100. c1b1  e7e5
  1101. d4e3  c8e6
  1102. ! #  BAD! -- col. 84i; Karaklajic-Taimanov, Yugoslavia-USSR, match 1956
  1103. e2e4  c7c5
  1104. g1f3  b8c6
  1105. d2d4  c5d4
  1106. f3d4  g8f6
  1107. b1c3  d7d6
  1108. c1e3  f6g4
  1109. f1b5  g4e3
  1110. f2e3  c8d7
  1111. o-o   e7e6
  1112. 5c6   b7c6
  1113. e4e5  f8e7
  1114. d1h5  o-o
  1115. e5d6  e7d6
  1116. c3e4  d6e7
  1117. a1d1  d8c7
  1118. d4b3  h7h6
  1119. ! #  col. 85
  1120. e2e4  c7c5
  1121. g1f3  b8c6
  1122. d2d4  c5d4
  1123. f3d4  g8f6
  1124. b1c3  d7d6
  1125. d4e2  e7e6
  1126. g2g3  d6d5
  1127. e4d5  f6d5
  1128. f1g2  d5c3
  1129. d1d8  e8d8
  1130. e2c3  c8d7
  1131. c1d2  f8e7
  1132. ! #  col. 86c; Carcia-Pomar, Havana 1969
  1133. e2e4  c7c5
  1134. g1f3  b8c6
  1135. d2d4  c5d4
  1136. f3d4  g8f6
  1137. b1c3  d7d6
  1138. f1c4  e7e5
  1139. d4e2  c8e6
  1140. c4e6  f7e6
  1141. o-o   f8e7
  1142. f2f4  o-o
  1143. e2g3  e5f4
  1144. f1f4  d8b6
  1145. g1h1  a8d8
  1146. b2b3  d6d5
  1147. e4d5  f6d5
  1148. f4f8  e7f8
  1149. c3d5  d8d5
  1150. d1e1  c6d4
  1151. c1e3  f8c5
  1152. ! #  col. 87
  1153. e2e4  c7c5
  1154. g1f3  b8c6
  1155. d2d4  c5d4
  1156. f3d4  g8f6
  1157. b1c3  d7d6
  1158. f1c4  d8b6
  1159. d4b3  e7e6
  1160. o-o   f8e7
  1161. c1e3  b6c7
  1162. f2f4  o-o
  1163. c4d3  a7a6
  1164. d1f3
  1165. ! #  col. 88
  1166. e2e4  c7c5
  1167. g1f3  b8c6
  1168. d2d4  c5d4
  1169. f3d4  g8f6
  1170. b1c3  d7d6
  1171. f1c4  e7e6
  1172. c1e3  d8c7
  1173. d1e2  a7a6
  1174. c4b3  c6a5
  1175. g2g4  b7b5
  1176. g4g5  f6d7
  1177. o-o-o d7c5
  1178. ! #  col. 89mA; Spasjevic-Ostojic, Belgrade 1966 (draw)
  1179. e2e4  c7c5
  1180. g1f3  b8c6
  1181. d2d4  c5d4
  1182. f3d4  g8f6
  1183. b1c3  d7d6
  1184. f1c4  e7e6
  1185. c1e3  f8e7
  1186. d1e2  a7a6
  1187. o-o-o o-o
  1188. c4b3  d8c7
  1189. g2g4  c6d4
  1190. d1d4  e6e5
  1191. d4c4  c7d8
  1192. g4g5  f6e8
  1193. h1g1  c8d7
  1194. c3d5  d7b5
  1195. e3b6  d8d7
  1196. e2g4  e7d8
  1197. g4d7  b5d7
  1198. c4c3  d7e6
  1199. b6d8  a8d8
  1200. d5e3  d8d7
  1201. b3a4  d7c7
  1202. ! #  col. 90o; Bogdanovic-Shamkovich, Sarajevo 1963
  1203. e2e4  c7c5
  1204. g1f3  b8c6
  1205. d2d4  c5d4
  1206. f3d4  g8f6
  1207. b1c3  d7d6
  1208. f1c4  e7e6
  1209. c1e3  f8e7
  1210. d1e2  o-o
  1211. o-o-o c6d4
  1212. e3d4  d8a5
  1213. e4e5  d6e5
  1214. d4e5  b7b6
  1215. c3b5  c8a6
  1216. e5c3  a5a4
  1217. d1d4  a6b5
  1218. c4b5  a4a2
  1219. h1d1  f8d8
  1220. d4a4  d8d1
  1221. e2d1  a2d5
  1222. d1d5  f6d5
  1223. c3d4  e7g5
  1224. c1b1  h7h5
  1225. b5c6  a8d8
  1226. a4a7  d5b4
  1227. c6d7  b4c6
  1228. ! #  Queen's Catalan, col. 1c; Kramer-Fichtl, Varna Olympics 1962
  1229. d2d4  d7d5
  1230. c2c4  e7e6
  1231. g2g3  g8f6
  1232. g1f3  f8e7
  1233. f1g2  o-o
  1234. o-o   b8d7
  1235. b1c3  c7c6
  1236. b2b3  b7b6
  1237. c1b2  c8b7
  1238. d1c2  a8c8
  1239. a1d1  d8c7
  1240. e2e4  d5e4
  1241. c3e4  f6e4
  1242. c2e4  c6c5
  1243. d4d5  e7f6
  1244. e4c2  e6d5
  1245. c4d5  f6b2
  1246. c2b2  c8d8
  1247. ! #  col. 2f
  1248. d2d4  d7d5
  1249. c2c4  e7e6
  1250. g2g3  g8f6
  1251. g1f3  f8e7
  1252. f1g2  o-o
  1253. o-o   b8d7
  1254. b1c3  d5c4
  1255. e2e4  c7c6
  1256. a2a4  a7a5
  1257. d1e2  d7b6
  1258. f1d1  e7b4
  1259. f3e5  d8e7
  1260. c1e3  c8d7
  1261. e5c4  b6c4
  1262. e2c4  e6e5
  1263. d4e5  f6g4
  1264. ! #  col. 3i; Geller-Medina, Beverwijk 1965
  1265. d2d4  d7d5
  1266. c2c4  e7e6
  1267. g2g3  g8f6
  1268. g1f3  f8e7
  1269. f1g2  o-o
  1270. o-o   b8d7
  1271. d1c2  b7b6
  1272. c4d5  f6d5
  1273. b1c3  c8b7
  1274. c3d5  b7d5
  1275. e2e4  d5b7
  1276. f1d1  c7c5
  1277. d4d5  e6d5
  1278. e4d5  e7f6
  1279. h2h4  h7h6
  1280. ! #  col. 4k; Geller-Bisguier, Bled 1961
  1281. d2d4  d7d5
  1282. c2c4  e7e6
  1283. g2g3  g8f6
  1284. g1f3  f8e7
  1285. f1g2  o-o
  1286. o-o   b8d7
  1287. d1c2  c7c6
  1288. b2b3  b7b6
  1289. c1b2  c8b7
  1290. b1c3  a8c8
  1291. a1d1  b6b5
  1292. c4c5  b5b4
  1293. c3b1  f6e4
  1294. f3e1  f7f5
  1295. e1d3  a7a5
  1296. d3f4  f8f6
  1297. f2f3  e4g5
  1298. ! #  col. 5m; Benko-Pachman, Budapest 1948
  1299. d2d4  d7d5
  1300. c2c4  e7e6
  1301. g2g3  g8f6
  1302. g1f3  f8e7
  1303. f1g2  o-o
  1304. o-o   b8d7
  1305. d1c2  c7c6
  1306. b1d2  b7b6
  1307. e2e4  c8b7
  1308. b2b3  a8c8
  1309. f1d1  d8c7
  1310. c1b2  f8d8
  1311. a1c1  c7b8
  1312. c2b1  a7a5
  1313. f3e5  b8a8
  1314. ! #  col. 6
  1315. d2d4  d7d5
  1316. c2c4  e7e6
  1317. g2g3  g8f6
  1318. g1f3  f8e7
  1319. f1g2  o-o
  1320. o-o   c7c6
  1321. b1c3  b7b6
  1322. f3e5  a7a5
  1323. d1c2  c8a6
  1324. f1d1  b6b5
  1325. ! #  col. 7d; Evans-Poschel, US Jr. Chp. 1947
  1326. d2d4  d7d5
  1327. c2c4  e7e6
  1328. g2g3  g8f6
  1329. g1f3  c7c5
  1330. c4d5  f6d5
  1331. f1g2  c5d4
  1332. o-o   f8c5
  1333. f3d4  o-o
  1334. a2a3  b8c6
  1335. d4c6  b7c6
  1336. b2b4  c5e7
  1337. c1b2  e7f6
  1338. d1c2  f6b2
  1339. c2b2  a7a5
  1340. ! #  col. 8g; O'Kelly-Euwe, New York 1951
  1341. d2d4  d7d5
  1342. c2c4  e7e6
  1343. g2g3  g8f6
  1344. g1f3  d5c4
  1345. f1g2  c7c5
  1346. o-o   b8c6
  1347. d1a4  f6d7
  1348. d4c5  f8c5
  1349. a4c4  o-o
  1350. b1c3  a7a6
  1351. c3e4  c5e7
  1352. c1e3  d7b6
  1353. c4b3  b6d5
  1354. f1d1  d8c7
  1355. ! #  col. 9
  1356. d2d4  d7d5
  1357. c2c4  e7e6
  1358. g2g3  g8f6
  1359. g1f3  d5c4
  1360. f1g2  b7b5
  1361. a2a4  c7c6
  1362. o-o   c8b7
  1363. f3e5  d8c8
  1364. b2b3  c4b3
  1365. d1b3  b5b4
  1366. a4a5  f6d7
  1367. ! #  col. 10l; Keres-Korchnoi, Curacao 1962
  1368. d2d4  d7d5
  1369. c2c4  e7e6
  1370. g2g3  g8f6
  1371. g1f3  d5c4
  1372. d1a4  b8d7
  1373. f1g2  a7a6
  1374. a4c4  c7c5
  1375. d4c5  f8c5
  1376. o-o   b7b5
  1377. c4h4  c8b7
  1378. b1d2  c5e7
  1379. d2b3  a8c8
  1380. h4d4  o-o
  1381. c1d2  d7c5
  1382. ! #  col. -- Accelerated Catalan
  1383. d2d4  d7d5
  1384. c2c4  e7e6
  1385. g2g3  g8f6
  1386. f1g2  d5c4
  1387. d1a4  b8d7
  1388. b1d2  c7c6
  1389. a4c4  e6e5
  1390. g1f3  d7b6
  1391. c4d3  e5d4
  1392. f3d4  f8e7
  1393. o-o  o-o
  1394. ! #  col. 12e; Muller-Ratzek, Vienna 1951
  1395. d2d4  d7d5
  1396. c2c4  e7e6
  1397. g2g3  g8f6
  1398. f1g2  d5c4
  1399. d1a4  c8d7
  1400. a4c4  d7c6
  1401. g1f3  c6d5
  1402. c4d3  c7c5
  1403. b1c3  d5c6
  1404. o-o   b8d7
  1405. f1d1  d8b6
  1406. e2e4  c5d4
  1407. f3d4  f8c5
  1408. d4c6  c5f2
  1409. g1f1  b7c6
  1410. c3a4  b6a5
  1411. f1f2  a5a4
  1412. d3d6
  1413. ! #  col. 13f; Smyslov-Kere, USSR Chp. 1948
  1414. d2d4  d7d5
  1415. c2c4  e7e6
  1416. g2g3  g8f6
  1417. f1g2  d5c4
  1418. d1a4  c8d7
  1419. a4c4  d7c6
  1420. g1f3  b8d7
  1421. b1c3  d7b6
  1422. c4d3  f8b4
  1423. o-o   o-o
  1424. f1d1  h7h6
  1425. c1d2  d8e7
  1426. a2a3  b4c3
  1427. d3c3  f8d8
  1428. ! #  col. 14g
  1429. d2d4  d7d5
  1430. c2c4  e7e6
  1431. g2g3  g8f6
  1432. b1c3  d5c4
  1433. d1a4  b8c6
  1434. f1g2  c8d7
  1435. a4c4  c6b4
  1436. c4b3  c7c5
  1437. g1f3  c5d4
  1438. f3d4  e6e5
  1439. d4f3  d7e6
  1440. b3a4  e6d7
  1441. ! #  col. 15; Stoltz-Vidmar, Groningen 1946
  1442. d2d4  d7d5
  1443. c2c4  e7e6
  1444. g2g3  g8f6
  1445. b1c3  f8e7
  1446. f1g2  o-o
  1447. g1f3  d5c4
  1448. d1a4  a7a6
  1449. a4c4  b7b5
  1450. c4d3  c8b7
  1451. ! #  col. 16
  1452. d2d4  d7d5
  1453. c2c4  e7e6
  1454. g2g3  g8f6
  1455. b1d2  c7c5
  1456. d4c5  f8c5
  1457. f1g2  b8c6
  1458. g1f3  o-o
  1459. o-o   a7a5
  1460. c4d5  e6d5
  1461. d2b3  c5b6
  1462. ! #  col. 17d; Mikenas-Aronin, USSR Chp. 1963
  1463. d2d4  d7d5
  1464. c2c4  e7e6
  1465. g2g3  c7c5
  1466. c4d5  e6d5
  1467. g1f3  b8c6
  1468. f1g2  g8f6
  1469. o-o   f8e7
  1470. d4c5  e7c5
  1471. b1d2  o-o
  1472. d2b3  c5b6
  1473. b3d4  f8e8
  1474. b2b3  c6d4
  1475. f3d4  b6d4
  1476. d1d4  e8e2
  1477. ! #  col. 18e
  1478. d2d4  d7d5
  1479. c2c4  e7e6
  1480. g2g3  d5c4
  1481. d1a4  c8d7
  1482. a4c4  c7c5
  1483. d4c5  d7c6
  1484. g1f3  b8d7
  1485. c1e3  g8f6
  1486. f1g2  d8c7
  1487. o-o   c6d5
  1488. c4a4  f8c5
  1489. e3c5  c7c5
  1490. b1c3  d5c6
  1491. ! #  col. 19
  1492. d2d4  d7d5
  1493. c2c4  e7e6
  1494. g2g3  f8b4
  1495. c1d2  b4d2
  1496. d1d2  g8f6
  1497. g1f3  o-o
  1498. f1g2  d8e7
  1499. o-o   b8c6
  1500. f1c1
  1501. ! #  col. 20
  1502. d2d4  d7d5
  1503. c2c4  e7e6
  1504. g2g3  f8b4
  1505. c1d2  b4e7
  1506. f1g2  g8f6
  1507. g1f3  o-o
  1508. d1b3  b7b6
  1509. c4d5  e6d5
  1510. b1c3  c8b7
  1511. o-o
  1512. ! #  col. 21
  1513. d2d4  g8f6
  1514. c2c4  e7e6
  1515. g2g3  e6e5
  1516. g1f3  e5d4
  1517. f3d4  d7d5
  1518. f1g2  d5c4
  1519. d1a4  c7c6
  1520. a4c4  f8e7
  1521. o-o   o-o
  1522. f1d1
  1523. ! #  col. 22
  1524. d2d4  g8f6
  1525. c2c4  e7e6
  1526. g2g3  c7c5
  1527. g1f3  c5d4
  1528. f3d4  d7d5
  1529. f1g2  e6e5
  1530. d4f3  d5d4
  1531. o-o   b8c6
  1532. e2e3  f8e7
  1533. e3d4  e5d4
  1534. ! #  col. 23g
  1535. d2d4  g8f6
  1536. c2c4  e7e6
  1537. g2g3  c7c5
  1538. g1f3  c5d4
  1539. f3d4  b8c6
  1540. f1g2  d8b6
  1541. d4c2  f8c5
  1542. e2e3  o-o
  1543. b1c3  b6a6
  1544. d1d2  f8d8
  1545. a2a3  d7d5
  1546. b2b4  d5d4
  1547. c3e4
  1548. ! #  col. 24j; Smyslov-Petrosian, Moscow 1967
  1549. d2d4  g8f6
  1550. c2c4  e7e6
  1551. g2g3  f8b4
  1552. b1d2  c7c5
  1553. d4c5  b4c5
  1554. f1g2  b8c6
  1555. g1f3  b7b6
  1556. o-o   c8b7
  1557. a2a3  o-o
  1558. b2b4  c5e7
  1559. c1b2  a8c8
  1560. d1b1
  1561. ! #  col. 25
  1562. d2d4  g8f6
  1563. c2c4  e7e6
  1564. g2g3  f8b4
  1565. c1d2  b4d2
  1566. d1d2  f6e4
  1567. d2c2  f7f5
  1568. f2f3  e4f6
  1569. e2e4  f5e4
  1570. f3e4  e6e5
  1571. ! #  Alternate openings leading to the Catalan, line C
  1572. g1f3  d7d5
  1573. c2c4  e7e6
  1574. g2g3  g8f6
  1575. d2d4
  1576. ! #  line D
  1577. c2c4  g8f6
  1578. d2d4  e7e6
  1579. g2g3  d7d5
  1580. ! #  line E
  1581. d2d4  g8f6
  1582. c2c4  e7e6
  1583. g2g3  d7d5
  1584. ! #  The Reti Opening, col. 1c; Muller-Lilenthal, Budapest 1933
  1585. g1f3  d7d5
  1586. c2c4  c7c6
  1587. b2b3  g8f6
  1588. g2g3  c8f5
  1589. c1b2  e7e6
  1590. f1g2  b8d7
  1591. o-o   f8d6
  1592. d2d3  o-o
  1593. b1c3  d8e7
  1594. f1e1  e6e5
  1595. c4d5  c6d5
  1596. e2e4  d5e4
  1597. d3e4  f5g6
  1598. ! #  col. 2g; Bilek-Geller, Sousse 1967
  1599. g1f3  d7d5
  1600. c2c4  c7c6
  1601. b2b3  g8f6
  1602. g2g3  c8g4
  1603. f1g2  e7e6
  1604. c1b2  b8d7
  1605. o-o   f8e7
  1606. d2d3  o-o
  1607. b1d2  a7a5
  1608. a2a3  d8b6
  1609. d1c2  h7h6
  1610. b2c3  f8c8
  1611. f1e1  b6d8
  1612. e2e4  d8f8
  1613. ! #  col. 3k; Botvinnik-Fine, Nottingham 1936
  1614. g1f3  d7d5
  1615. c2c4  d5c4
  1616. b1a3  c7c5
  1617. a3c4  b8c6
  1618. g2g3  e7e5
  1619. f1g2  f7f6
  1620. b2b3  g8e7
  1621. c1b2  e7d5
  1622. o-o   f8e7
  1623. f3h4  o-o
  1624. d1b1  f8f7
  1625. h4f5  c8e6
  1626. f2f4  e5f4
  1627. g3f4  d5b6
  1628. g2e4  e6c4
  1629. ! #  col. 4n; Katetov-Alekhin, Prague 1943
  1630. g1f3  d7d5
  1631. c2c4  d5d4
  1632. e2e3  b8c6
  1633. e3d4  c6d4
  1634. f3d4  d8d4
  1635. b1c3  e7e5
  1636. d2d3  f8c5
  1637. c1e3  d4d6
  1638. c3b5  d6e7
  1639. e3c5  e7c5
  1640. d3d4  e5d4
  1641. d1d4  c5d4
  1642. b5d4  c8g4
  1643. ! #  col. 5o
  1644. g1f3  d7d5
  1645. c2c4  d5d4
  1646. e2e3  c7c5
  1647. e3d4  c5d4
  1648. g2g3  b8c6
  1649. f1g2  g7g6
  1650. d2d3  f8g7
  1651. o-o   e7e5
  1652. f1e1  f7f6
  1653. b2b4  c6b4
  1654. d1a4  b4c6
  1655. f3d4  d8d4
  1656. g2c6  c8d7
  1657. ! #  col. 6
  1658. g1f3  d7d5
  1659. c2c4  e7e6
  1660. g2g3  g8f6
  1661. f1g2  f8e7
  1662. o-o   o-o
  1663. b2b3  c7c5
  1664. c4d5  f6d5
  1665. c1b2  b8c6
  1666. d2d4  d5b4
  1667. a2a3  b4a6
  1668. d4c5  d8d1
  1669. ! #  col. 7
  1670. g1f3  d7d5
  1671. c2c4  e7e6
  1672. g2g3  g8f6
  1673. f1g2  f8e7
  1674. b1c3  o-o
  1675. b2b3  c7c5
  1676. c1b2  b8c6
  1677. c4d5  e6d5
  1678. a1c1  c8e6
  1679. o-o   a8c8
  1680. d2d4  f8e8
  1681. ! #  col. 8g; Kashdan-Horowitz, New York 1931
  1682. g1f3  d7d5
  1683. c2c4  e7e6
  1684. g2g3  g8f6
  1685. f1g2  b8d7
  1686. b2b3  c7c6
  1687. o-o   f8d6
  1688. c1b2  o-o
  1689. b1c3  b7b6
  1690. d2d3  c8b7
  1691. e2e4  d5e4
  1692. d3e4  d8c7
  1693. d1e2  f8d8
  1694. f1d1
  1695. ! #  col. 9h; Abroshin-Krykov corr. 1960
  1696. g1f3  d7d5
  1697. c2c4  e7e6
  1698. g2g3  g8f6
  1699. f1g2  d5c4
  1700. d1a4  c8d7
  1701. a4c4  d7c6
  1702. o-o   c6d5
  1703. c4a4  d8d7
  1704. a4c2  b8c6
  1705. b1c3  d5f3
  1706. g2f3  c6d4
  1707. c2d3  c7c6
  1708. ! #  col. 10m; Teti-Tartakover, Semmering 1926
  1709. g1f3  d7d5
  1710. c2c4  e7e6
  1711. g2g3  d5c4
  1712. d1a4  c8d7
  1713. a4c4  c7c5
  1714. f3e5  b8c6
  1715. e5d7  d8d7
  1716. f1g2  g8f6
  1717. d2d3  f8e7
  1718. o-o   c6d4
  1719. b1c3  a8d8
  1720. a2a4  f6d5
  1721. ! #  Barcza System, col. 11
  1722. g1f3  d7d5
  1723. g2g3  g8f6
  1724. f1g2  c8f5
  1725. o-o   c7c6
  1726. c2c4  d5c4
  1727. b1a3  e7e5
  1728. a3c4  e5e4
  1729. f3e1  f8c5
  1730. d2d3  o-o
  1731. c1e3  b8d7
  1732. ! #  col. 12d; Benko-Petrosian, Curacao 1962
  1733. g1f3  d7d5
  1734. g2g3  g8f6
  1735. f1g2  c8f5
  1736. o-o   c7c6
  1737. d2d3  b8d7
  1738. b1d2  h7h6
  1739. d1e1  e7e6
  1740. e2e4  f5h7
  1741. e1e2  f8e7
  1742. e4e5  f6g8
  1743. d2b3  e7f8
  1744. c2c4  g8e7
  1745. b3d4  e7f5
  1746. d4f5  h7f5
  1747. c4d5  c6d5
  1748. d3d4  a7a5
  1749. c1e3  f8e7
  1750. f1c1  o-o
  1751. ! #  col. 13f; Bronstein-O'Kelly, Beverwijk 1963
  1752. g1f3  d7d5
  1753. g2g3  g8f6
  1754. f1g2  c7c5
  1755. o-o   e7e6
  1756. d2d3  b8c6
  1757. b1d2  f8e7
  1758. e2e4  o-o
  1759. f1e1  d8c7
  1760. e4e5  f6d7
  1761. d1e2  b7b5
  1762. h2h4  a7a5
  1763. d2f1  c8a6
  1764. f1h2  c6b4
  1765. h4h5
  1766. ! #  col. 14i; Evans-Olafsson, Dallas 1957
  1767. g1f3  d7d5
  1768. g2g3  g8f6
  1769. f1g2  g7g6
  1770. o-o   f8g7
  1771. d2d3  o-o
  1772. b1d2  b8c6
  1773. e2e4  e7e5
  1774. c2c3  a7a5
  1775. f1e1  d5e4
  1776. d3e4  f6d7
  1777. d1e2  b7b6
  1778. d2c4  c8a6
  1779. g2f1  d8f6
  1780. ! #  col. 15
  1781. g1f3  d7d5
  1782. g2g3  g8f6
  1783. f1g2  g7g6
  1784. d2d4  f8g7
  1785. o-o   c7c6
  1786. b2b3  b8d7
  1787. c1b2  e7e5
  1788. d4e5  f6g4
  1789. b1d2  d7e5
  1790. f3e5  g4e5
  1791. ! #  col. 16d; Larsen-Mecking, Mallorca 1969
  1792. g1f3  d7d5
  1793. g2g3  c7c5
  1794. f1g2  b8c6
  1795. o-o   e7e6
  1796. d2d3  g7g6
  1797. b1c3  f8g7
  1798. a2a3  g8e7
  1799. a1b1  o-o
  1800. c1d2  a8b8
  1801. b2b4  c5b4
  1802. a3b4  b7b5
  1803. e2e4  a7a5
  1804. ! #  col. 17h; Benko-Bisguier, US Chp. 1963
  1805. g1f3  d7d5
  1806. g2g3  c8g4
  1807. f1g2  b8d7
  1808. c2c4  c7c6
  1809. c4d5  c6d5
  1810. b1c3  e7e6
  1811. d1b3  d8b6
  1812. b3b6  d7b6
  1813. d2d3  a8c8
  1814. c1e3  f8d6
  1815. c3b5  d6b8
  1816. o-o   g8e7
  1817. f1c1  c8c1
  1818. a1c1  e7c6
  1819. f3d4  e8d7
  1820. ! #  col. 18j; Keene-Basman, Hastings 1966-7
  1821. g1f3  d7d5
  1822. g2g3  c8g4
  1823. f1g2  g8f6
  1824. c2c4  c7c6
  1825. c4d5  g4f3
  1826. g2f3  c6d5
  1827. d1b3  d8d7
  1828. b1c3  e7e6
  1829. o-o   b8c6
  1830. f3g2  f8e7
  1831. d2d3  o-o
  1832. ! #  col. 19k
  1833. g1f3  d7d5
  1834. g2g3  c8g4
  1835. f1g2  g8f6
  1836. c2c4  c7c6
  1837. d1c2  e7e6
  1838. o-o   f8e7
  1839. b2b3  b8d7
  1840. c1b2  o-o
  1841. d2d3  a7a5
  1842. b1d2  a5a4
  1843. b2c3  a4b3
  1844. a2b3  d8b6
  1845. ! #  col. 20m
  1846. g1f3  d7d5
  1847. g2g3  c8g4
  1848. f1g2  g8f6
  1849. o-o   c7c6
  1850. c2c4  e7e6
  1851. c4d5  g4f3
  1852. g2f3  c6d5
  1853. b1c3  b8c6
  1854. d2d3  f8e7
  1855. f3g2
  1856. ! #  col. 21b; Savon-Aronin, USSR 1963
  1857. g1f3  d7d5
  1858. g2g3  b8c6
  1859. d2d4  c8f5
  1860. f1g2  c6b4
  1861. b1a3  e7e6
  1862. o-o   g8f6
  1863. f3h4  f5g4
  1864. c2c4  c7c6
  1865. a3c2  b4c2
  1866. d1c2  f8e7
  1867. h2h3  g4h5
  1868. f2f3  h5g6
  1869. h4g6  h7g6
  1870. ! #  col. 22d; Fischer-Ivkov, Santa Monica 1966
  1871. g1f3  d7d5
  1872. g2g3  e7e6
  1873. f1g2  c7c5
  1874. o-o   b8c6
  1875. d2d3  f8d6
  1876. e2e4  g8e7
  1877. b1d2  o-o
  1878. f3h4  b7b6
  1879. f2f4  d5e4
  1880. d3e4  c8a6
  1881. f1e1  c5c4
  1882. c2c3
  1883. ! #  col. 23
  1884. g1f3  d7d5
  1885. g2g3  b8d7
  1886. c2c4  e7e6
  1887. f1g2  g8f6
  1888. b1c3  f8e7
  1889. o-o   o-o
  1890. d2d3  c7c5
  1891. c4d5  e6d5
  1892. c1g5  b7b6
  1893. ! #  col. 24g; Benko-Bisguier, US Chp. 1976-7
  1894. g1f3  d7d5
  1895. g2g3  g8f6
  1896. f1g2  b7b6
  1897. c2c4  e7e6
  1898. c4d5  e6d5
  1899. o-o   f8d6
  1900. d2d4  o-o
  1901. b1c3  c7c6
  1902. f3e5  c8b7
  1903. c1g5  h7h6
  1904. g5f6  d8f6
  1905. f2f4  f8d8
  1906. e2e4
  1907. ! #  col. 25; Rabinovich-Rauser, Moscow 1934
  1908. g1f3  d7d5
  1909. b2b3  c8g4
  1910. c1b2  b8d7
  1911. c2c4  e7e6
  1912. e2e3  g8f6
  1913. f1e2  c7c6
  1914. f3d4  g4e2
  1915. d1e2  f8d6
  1916. f2f4  o-o
  1917. ! #  col. 26e; Evans-Najdorf, Dallas 1967
  1918. g1f3  c7c5
  1919. g2g3  b8c6
  1920. f1g2  g7g6
  1921. o-o   f8g7
  1922. e2e4  d7d6
  1923. c2c3  e7e5
  1924. d2d3  g8h6
  1925. f3e1  o-o
  1926. f2f4  e5f4
  1927. c1f4  h6g4
  1928. b1a3  g4e5
  1929. g1h1  d8b6
  1930. d1d2  c8e6
  1931. ! #  col. 27h; Van den Pol-Barden, Holland v. England 1960
  1932. g1f3  f7f5
  1933. g2g3  g8f6
  1934. f1g2  g7g6
  1935. d2d3  f8g7
  1936. b1d2  d7d6
  1937. e2e4  e7e5
  1938. d2c4  o-o
  1939. e4f5  g6f5
  1940. c1e3  b8c6
  1941. d3d4  e5e4
  1942. ! #  col. 28m; Gufeld-Bokuchava, USSR Chp. prelims 1968
  1943. g1f3  f7f5
  1944. g2g3  g8f6
  1945. f1g2  e7e6
  1946. c2c4  f8e7
  1947. o-o   o-o
  1948. d2d3  d7d6
  1949. b1c3  b8c6
  1950. a1b1  a7a5
  1951. a2a3  d8e8
  1952. b2b4  a5b4
  1953. a3b4  e6e5
  1954. ! #  col. 29p; Lundin-Tartakover, Groningen 1946
  1955. g1f3  f7f5
  1956. g2g3  g8f6
  1957. f1g2  e7e6
  1958. c2c4  f8e7
  1959. o-o   o-o
  1960. b2b3  c7c5
  1961. c1b2  b8c6
  1962. b1c3  e6e5
  1963. e2e3  d7d6
  1964. d2d4
  1965. ! #  col. 30
  1966. g1f3  g7g6
  1967. g2g3  f8g7
  1968. f1g2  e7e5
  1969. d2d3  b8c6
  1970. e2e4  d7d6
  1971. b1c3  g8e7
  1972. c1e3  o-o
  1973. d1d2  c6d4
  1974. o-o
  1975. ! #  King's Indian attack, col. 31a
  1976. g1f3  g8f6
  1977. g2g3  b7b5
  1978. h2h4  b5b4
  1979. d2d3  c8b7
  1980. e2e4  d7d6
  1981. f1g2  b8d7
  1982. o-o   e7e6
  1983. h4h5  a8b8
  1984. b1d2  f8e7
  1985. d2c4  o-o
  1986. ! #  col. 32d
  1987. g1f3  g8f6
  1988. g2g3  g7g6
  1989. b2b4  f8g7
  1990. c1b2  o-o
  1991. f1g2  d7d5
  1992. o-o   c8g4
  1993. c2c4  c7c6
  1994. b1a3  b8d7
  1995. a1c1  a7a5
  1996. b4b5  a5a4
  1997. d2d3  e7e5
  1998. ! #  col. 33e; Olafsson-Kavalek, Wijik aan Zee 1969
  1999. g1f3  g8f6
  2000. g2g3  g7g6
  2001. b2b3  f8g7
  2002. c1b2  o-o
  2003. f1g2  d7d6
  2004. d2d4  f6d7
  2005. b1c3  e7e5
  2006. d1d2  f8e8
  2007. d4e5  d7e5
  2008. f3e5  g7e5
  2009. ! #  col. 34h
  2010. g1f3  g8f6
  2011. g2g3  g7g6
  2012. c2c4  d7d6
  2013. f1g2  f8g7
  2014. o-o   o-o
  2015. b1c3  b8d7
  2016. d2d3  e7e5
  2017. c1d2  d7c5
  2018. b2b4  c5e6
  2019. a1b1  f6e8
  2020. a2a4  c7c6
  2021. a4a5  e8c7
  2022. ! #  col. 35
  2023. g1f3  g8f6
  2024. c2c4  g7g6
  2025. b2b3  f8g7
  2026. c1b2  o-o
  2027. e2e3  d7d6
  2028. f1e2  e7e5
  2029. o-o   f8e8
  2030. b1c3  b8d7
  2031. d2d3  c7c6
  2032. ! #  col. 36d
  2033. g1f3  g8f6
  2034. c2c4  g7g6
  2035. b1c3  d7d5
  2036. c4d5  f6d5
  2037. d1a4  c8d7
  2038. a4b3  d5b6
  2039. d2d4  f8g7
  2040. c1f4  d7e6
  2041. b3c2  b8c6
  2042. a1d1
  2043. ! #  col. 37f
  2044. g1f3  g8f6
  2045. c2c4  b7b6
  2046. g2g3  c8b7
  2047. f1g2  c7c5
  2048. o-o   g7g6
  2049. b2b3  f8g7
  2050. c1b2  o-o
  2051. b1c3  d7d5
  2052. c3d5  f6d5
  2053. b2g7  g8g7
  2054. c4d5  d8d5
  2055. d2d4  b8a6
  2056. ! #  col. 38h; Geller-Kholmov, Moscow 1969
  2057. g1f3  g8f6
  2058. c2c4  b7b6
  2059. g2g3  c8b7
  2060. f1g2  e7e6
  2061. o-o   f8e7
  2062. b2b3  o-o
  2063. c1b2  d7d5
  2064. e2e3  b8d7
  2065. b1c3  f6e4
  2066. c4d5  e4c3
  2067. b2c3  e6d5
  2068. ! #  col. 39
  2069. g1f3  g8f6
  2070. b2b3  g7g6
  2071. c2c4  f8g7
  2072. c1b2  o-o
  2073. g2g3  c7c5
  2074. f1g2  b7b6
  2075. o-o   c8b7
  2076. b1c3  e7e6
  2077. a1b1  d8e7
  2078. ! #  col. 40o; Lombardy-Burger, US Chp. 1969-70
  2079. g1f3  g8f6
  2080. b2b3  d7d5
  2081. c1b2  e7e6
  2082. e2e3  f8e7
  2083. c2c4  o-o
  2084. d2d4  b7b6
  2085. f1d3  c8b7
  2086. o-o   b8d7
  2087. b1d2  c7c5
  2088. d1e2  f6e4
  2089. a1c1  a8c8
  2090. !
  2091. SHAR_EOF
  2092. echo 'File gnuchess.book is complete' &&
  2093. chmod 0444 gnuchess.book ||
  2094. echo 'restore of gnuchess.book failed'
  2095. Wc_c="`wc -c < 'gnuchess.book'`"
  2096. test 47344 -eq "$Wc_c" ||
  2097.     echo 'gnuchess.book: original size 47344, current size' "$Wc_c"
  2098. rm -f _shar_wnt_.tmp
  2099. fi
  2100. # ============= gnuchess.c ==============
  2101. if test -f 'gnuchess.c' -a X"$1" != X"-c"; then
  2102.     echo 'x - skipping gnuchess.c (File already exists)'
  2103.     rm -f _shar_wnt_.tmp
  2104. else
  2105. > _shar_wnt_.tmp
  2106. echo 'x - extracting gnuchess.c (Text)'
  2107. sed 's/^X//' << 'SHAR_EOF' > 'gnuchess.c' &&
  2108. /*
  2109. X  gnuchess.c - C source for GNU CHESS
  2110. X
  2111. X  Revision: 1991-04-15
  2112. X
  2113. X  Copyright (C) 1986, 1987, 1988, 1989, 1990 Free Software Foundation, Inc.
  2114. X  Copyright (c) 1988, 1989, 1990  John Stanback
  2115. X
  2116. X  This file is part of CHESS.
  2117. X
  2118. X  CHESS is distributed in the hope that it will be useful, but WITHOUT ANY
  2119. X  WARRANTY.  No author or distributor accepts responsibility to anyone for
  2120. X  the consequences of using it or for whether it serves any particular
  2121. X  purpose or works at all, unless he says so in writing.  Refer to the CHESS
  2122. X  General Public License for full details.
  2123. X
  2124. X  Everyone is granted permission to copy, modify and redistribute CHESS, but
  2125. X  only under the conditions described in the CHESS General Public License.
  2126. X  A copy of this license is supposed to have been given to you along with
  2127. X  CHESS so you can know your rights and responsibilities.  It should be in a
  2128. X  file named COPYING.  Among other things, the copyright notice and this
  2129. X  notice must be preserved on all copies.
  2130. */
  2131. X
  2132. X
  2133. #include "gnuchess.h"
  2134. X
  2135. #include <ctype.h>
  2136. X
  2137. #ifdef MSDOS
  2138. #include <stdlib.h>
  2139. #include <string.h>
  2140. #include <time.h>
  2141. #define RWA_ACC "r+b"
  2142. #define WA_ACC "w+b"
  2143. #else
  2144. #define RWA_ACC "r+"
  2145. #define WA_ACC "w+"
  2146. #include <sys/param.h>
  2147. #include <sys/types.h>
  2148. #include <sys/times.h>
  2149. #endif /* MSDOS */
  2150. X
  2151. /* <stdlib.h> */
  2152. extern int abs (int);
  2153. extern int atoi (const char *);
  2154. /* <time.h> */
  2155. extern long int time (long int *);
  2156. /* <string.h> */
  2157. extern void *memset (void *, int, size_t);
  2158. X
  2159. #define valueP 100
  2160. #define valueN 350
  2161. #define valueB 355
  2162. #define valueR 550
  2163. #define valueQ 1100
  2164. #define valueK 1200
  2165. #define ctlP 0x4000
  2166. #define ctlN 0x2800
  2167. #define ctlB 0x1800
  2168. #define ctlR 0x0400
  2169. #define ctlQ 0x0200
  2170. #define ctlK 0x0100
  2171. #define ctlBQ 0x1200
  2172. #define ctlBN 0x0800
  2173. #define ctlRQ 0x0600
  2174. #define ctlNN 0x2000
  2175. #define Patak(c, u) (atak[c][u] > ctlP)
  2176. #define Anyatak(c, u) (atak[c][u] > 0)
  2177. X
  2178. #if ttblsz
  2179. #define truescore 0x0001
  2180. #define lowerbound 0x0002
  2181. #define upperbound 0x0004
  2182. #define kingcastle 0x0008
  2183. #define queencastle 0x0010
  2184. X
  2185. struct hashval
  2186. {
  2187. X  unsigned long key, bd;
  2188. };
  2189. struct hashentry
  2190. {
  2191. X  unsigned long hashbd;
  2192. X  unsigned short mv;
  2193. X  unsigned char flags, depth;    /* char saves some space */
  2194. X  short score;
  2195. #ifdef HASHTEST
  2196. X  unsigned char bd[32];
  2197. #endif /* HASHTEST */
  2198. X
  2199. };
  2200. X
  2201. #ifdef HASHFILE
  2202. /*
  2203. X  persistent transposition table.
  2204. X  The size must be a power of 2. If you change the size,
  2205. X  be sure to run gnuchess -c before anything else.
  2206. */
  2207. #define frehash 6
  2208. #ifdef MSDOS
  2209. #define Deffilesz (1 << 11) -1
  2210. #else
  2211. #define Deffilesz (1 << 17) -1
  2212. #endif /* MSDOS */
  2213. struct fileentry
  2214. {
  2215. X  unsigned char bd[32];
  2216. X  unsigned char f, t, flags, depth, sh, sl;
  2217. };
  2218. X
  2219. /*
  2220. X  In a networked enviroment gnuchess might be compiled on different
  2221. X  hosts with different random number generators, that is not acceptable
  2222. X  if they are going to share the same transposition table.
  2223. */
  2224. unsigned long int next = 1;
  2225. X
  2226. unsigned int
  2227. urand (void)
  2228. {
  2229. X  next *= 1103515245;
  2230. X  next += 12345;
  2231. X  return ((unsigned int) (next >> 16) & 0xFFFF);
  2232. }
  2233. X
  2234. void
  2235. srand (unsigned int seed)
  2236. {
  2237. X  next = seed;
  2238. }
  2239. X
  2240. #else
  2241. #define urand rand
  2242. #endif /* HASHFILE */
  2243. X
  2244. static unsigned long hashkey, hashbd;
  2245. static struct hashval hashcode[2][7][64];
  2246. static struct hashentry huge ttable[2][ttblsz];
  2247. #endif /* ttblsz */
  2248. static short rpthash[2][256];
  2249. X
  2250. FILE *hashfile;
  2251. char savefile[128] = "";
  2252. char listfile[128] = "";
  2253. struct leaf Tree[2000], *root;
  2254. short TrPnt[maxdepth];
  2255. short PieceList[2][16], PawnCnt[2][8];
  2256. #define wking PieceList[white][0]
  2257. #define bking PieceList[black][0]
  2258. #define EnemyKing PieceList[c2][0]
  2259. short castld[2], Mvboard[64];
  2260. short svalue[64];
  2261. struct flags flag;
  2262. short opponent, computer, Awindow, Bwindow, dither, INCscore;
  2263. long ResponseTime, ExtraTime, Level, et, et0, time0, ft;
  2264. long NodeCnt, ETnodes, EvalNodes, HashCnt, HashAdd, FHashCnt, FHashAdd, HashCol,
  2265. X filesz;
  2266. short HashDepth = 4, HashMoveLimit = 12;
  2267. short player, xwndw, rehash;
  2268. struct GameRec GameList[200];
  2269. short Sdepth, GameCnt, Game50, MaxSearchDepth;
  2270. short epsquare, contempt;
  2271. struct BookEntry *Book, *BKBook;
  2272. struct TimeControlRec TimeControl;
  2273. short TCflag, TCmoves, TCminutes, OperatorTime;
  2274. const short otherside[3] =
  2275. {1, 0, 2};
  2276. unsigned short hint, PrVar[maxdepth];
  2277. X
  2278. static short Pindex[64];
  2279. static short PieceCnt[2];
  2280. static short c1, c2, *atk1, *atk2, *PC1, *PC2, atak[2][64];
  2281. static short mtl[2], pmtl[2], emtl[2], hung[2];
  2282. static short FROMsquare, TOsquare, Zscore, zwndw;
  2283. static short HasKnight[2], HasBishop[2], HasRook[2], HasQueen[2];
  2284. static short ChkFlag[maxdepth], CptrFlag[maxdepth], PawnThreat[maxdepth];
  2285. static short Pscore[maxdepth], Tscore[maxdepth];
  2286. static const short qrook[3] =
  2287. {0, 56, 0};
  2288. static const short krook[3] =
  2289. {7, 63, 0};
  2290. static const short kingP[3] =
  2291. {4, 60, 0};
  2292. static const short rank7[3] =
  2293. {6, 1, 0};
  2294. static const short sweep[8] =
  2295. {false, false, false, true, true, true, false, false};
  2296. static unsigned short killr0[maxdepth], killr1[maxdepth];
  2297. static unsigned short killr2[maxdepth], killr3[maxdepth];
  2298. static unsigned short PV, Swag0, Swag1, Swag2, Swag3, Swag4;
  2299. static unsigned char history[8192], *ih;
  2300. X
  2301. static short Mwpawn[64], Mbpawn[64], Mknight[2][64], Mbishop[2][64];
  2302. static short Mking[2][64], Kfield[2][64];
  2303. static const short value[7] =
  2304. {0, valueP, valueN, valueB, valueR, valueQ, valueK};
  2305. static const short control[7] =
  2306. {0, ctlP, ctlN, ctlB, ctlR, ctlQ, ctlK};
  2307. static const short PassedPawn0[8] =
  2308. {0, 60, 80, 120, 200, 360, 600, 800};
  2309. static const short PassedPawn1[8] =
  2310. {0, 30, 40, 60, 100, 180, 300, 800};
  2311. static const short PassedPawn2[8] =
  2312. {0, 15, 25, 35, 50, 90, 140, 800};
  2313. static const short PassedPawn3[8] =
  2314. {0, 5, 10, 15, 20, 30, 140, 800};
  2315. static const short ISOLANI[8] =
  2316. {-12, -16, -20, -24, -24, -20, -16, -12};
  2317. static const short BACKWARD[16] =
  2318. {-6, -10, -15, -21, -28, -28, -28, -28,
  2319. X -28, -28, -28, -28, -28, -28, -28, -28};
  2320. static const short BMBLTY[14] =
  2321. {-2, 0, 2, 4, 6, 8, 10, 12, 13, 14, 15, 16, 16, 16};
  2322. static const short RMBLTY[15] =
  2323. {0, 2, 4, 6, 8, 10, 11, 12, 13, 14, 14, 14, 14, 14, 14};
  2324. static const short KTHRT[36] =
  2325. {0, -8, -20, -36, -52, -68, -80, -80, -80, -80, -80, -80,
  2326. X -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
  2327. X -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80};
  2328. static short KNIGHTPOST, KNIGHTSTRONG, BISHOPSTRONG, KATAK;
  2329. static short PEDRNK2B, PWEAKH, PADVNCM, PADVNCI, PAWNSHIELD, PDOUBLED, PBLOK;
  2330. static short RHOPN, RHOPNX, KHOPN, KHOPNX, KSFTY;
  2331. static short ATAKD, HUNGP, HUNGX, KCASTLD, KMOVD, XRAY, PINVAL;
  2332. static short stage, stage2, Developed[2];
  2333. static short PawnBonus, BishopBonus, RookBonus;
  2334. static const short KingOpening[64] =
  2335. {0, 0, -4, -10, -10, -4, 0, 0,
  2336. X -4, -4, -8, -12, -12, -8, -4, -4,
  2337. X -12, -16, -20, -20, -20, -20, -16, -12,
  2338. X -16, -20, -24, -24, -24, -24, -20, -16,
  2339. X -16, -20, -24, -24, -24, -24, -20, -16,
  2340. X -12, -16, -20, -20, -20, -20, -16, -12,
  2341. X -4, -4, -8, -12, -12, -8, -4, -4,
  2342. X 0, 0, -4, -10, -10, -4, 0, 0};
  2343. static const short KingEnding[64] =
  2344. {0, 6, 12, 18, 18, 12, 6, 0,
  2345. X 6, 12, 18, 24, 24, 18, 12, 6,
  2346. X 12, 18, 24, 30, 30, 24, 18, 12,
  2347. X 18, 24, 30, 36, 36, 30, 24, 18,
  2348. X 18, 24, 30, 36, 36, 30, 24, 18,
  2349. X 12, 18, 24, 30, 30, 24, 18, 12,
  2350. X 6, 12, 18, 24, 24, 18, 12, 6,
  2351. X 0, 6, 12, 18, 18, 12, 6, 0};
  2352. static const short DyingKing[64] =
  2353. {0, 8, 16, 24, 24, 16, 8, 0,
  2354. X 8, 32, 40, 48, 48, 40, 32, 8,
  2355. X 16, 40, 56, 64, 64, 56, 40, 16,
  2356. X 24, 48, 64, 72, 72, 64, 48, 24,
  2357. X 24, 48, 64, 72, 72, 64, 48, 24,
  2358. X 16, 40, 56, 64, 64, 56, 40, 16,
  2359. X 8, 32, 40, 48, 48, 40, 32, 8,
  2360. X 0, 8, 16, 24, 24, 16, 8, 0};
  2361. static const short KBNK[64] =
  2362. {99, 90, 80, 70, 60, 50, 40, 40,
  2363. X 90, 80, 60, 50, 40, 30, 20, 40,
  2364. X 80, 60, 40, 30, 20, 10, 30, 50,
  2365. X 70, 50, 30, 10, 0, 20, 40, 60,
  2366. X 60, 40, 20, 0, 10, 30, 50, 70,
  2367. X 50, 30, 10, 20, 30, 40, 60, 80,
  2368. X 40, 20, 30, 40, 50, 60, 80, 90,
  2369. X 40, 40, 50, 60, 70, 80, 90, 99};
  2370. static const short pknight[64] =
  2371. {0, 4, 8, 10, 10, 8, 4, 0,
  2372. X 4, 8, 16, 20, 20, 16, 8, 4,
  2373. X 8, 16, 24, 28, 28, 24, 16, 8,
  2374. X 10, 20, 28, 32, 32, 28, 20, 10,
  2375. X 10, 20, 28, 32, 32, 28, 20, 10,
  2376. X 8, 16, 24, 28, 28, 24, 16, 8,
  2377. X 4, 8, 16, 20, 20, 16, 8, 4,
  2378. X 0, 4, 8, 10, 10, 8, 4, 0};
  2379. static const short pbishop[64] =
  2380. {14, 14, 14, 14, 14, 14, 14, 14,
  2381. X 14, 22, 18, 18, 18, 18, 22, 14,
  2382. X 14, 18, 22, 22, 22, 22, 18, 14,
  2383. X 14, 18, 22, 22, 22, 22, 18, 14,
  2384. X 14, 18, 22, 22, 22, 22, 18, 14,
  2385. X 14, 18, 22, 22, 22, 22, 18, 14,
  2386. X 14, 22, 18, 18, 18, 18, 22, 14,
  2387. X 14, 14, 14, 14, 14, 14, 14, 14};
  2388. static const short PawnAdvance[64] =
  2389. {0, 0, 0, 0, 0, 0, 0, 0,
  2390. X 4, 4, 4, 0, 0, 4, 4, 4,
  2391. X 6, 8, 2, 10, 10, 2, 8, 6,
  2392. X 6, 8, 12, 16, 16, 12, 8, 6,
  2393. X 8, 12, 16, 24, 24, 16, 12, 8,
  2394. X 12, 16, 24, 32, 32, 24, 16, 12,
  2395. X 12, 16, 24, 32, 32, 24, 16, 12,
  2396. X 0, 0, 0, 0, 0, 0, 0, 0};
  2397. X
  2398. X
  2399. /* .... MOVE GENERATION VARIABLES AND INITIALIZATIONS .... */
  2400. X
  2401. X
  2402. #define taxicab(a,b) taxidata[a][b]
  2403. short distdata[64][64], taxidata[64][64];
  2404. X
  2405. static inline void
  2406. Initialize_dist (void)
  2407. {
  2408. X  register short a, b, d, di;
  2409. X
  2410. X  for (a = 0; a < 64; a++)
  2411. X    for (b = 0; b < 64; b++)
  2412. X      {
  2413. X    d = abs (column (a) - column (b));
  2414. X    di = abs (row (a) - row (b));
  2415. X    taxidata[a][b] = d + di;
  2416. X    distdata[a][b] = (d > di ? d : di);
  2417. X      }
  2418. }
  2419. X
  2420. const short Stboard[64] =
  2421. {rook, knight, bishop, queen, king, bishop, knight, rook,
  2422. X pawn, pawn, pawn, pawn, pawn, pawn, pawn, pawn,
  2423. X 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  2424. X 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  2425. X pawn, pawn, pawn, pawn, pawn, pawn, pawn, pawn,
  2426. X rook, knight, bishop, queen, king, bishop, knight, rook};
  2427. const short Stcolor[64] =
  2428. {white, white, white, white, white, white, white, white,
  2429. X white, white, white, white, white, white, white, white,
  2430. X 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  2431. X 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  2432. X black, black, black, black, black, black, black, black,
  2433. X black, black, black, black, black, black, black, black};
  2434. short board[64], color[64];
  2435. static unsigned char nextpos[8][64][64];
  2436. static unsigned char nextdir[8][64][64];
  2437. /*
  2438. X  ptype is used to separate white and black pawns, like this;
  2439. X  ptyp = ptype[side][piece]
  2440. X  piece can be used directly in nextpos/nextdir when generating moves
  2441. X  for pieces that are not black pawns.
  2442. */
  2443. static const short ptype[2][8] =
  2444. {
  2445. X  no_piece, pawn, knight, bishop, rook, queen, king, no_piece,
  2446. X  no_piece, bpawn, knight, bishop, rook, queen, king, no_piece};
  2447. static const short direc[8][8] =
  2448. {
  2449. X  0, 0, 0, 0, 0, 0, 0, 0,
  2450. X  10, 9, 11, 0, 0, 0, 0, 0,
  2451. X  8, -8, 12, -12, 19, -19, 21, -21,
  2452. X  9, 11, -9, -11, 0, 0, 0, 0,
  2453. X  1, 10, -1, -10, 0, 0, 0, 0,
  2454. X  1, 10, -1, -10, 9, 11, -9, -11,
  2455. X  1, 10, -1, -10, 9, 11, -9, -11,
  2456. X  -10, -9, -11, 0, 0, 0, 0, 0};
  2457. static const short max_steps[8] =
  2458. {0, 2, 1, 7, 7, 7, 1, 2};
  2459. static const short nunmap[120] =
  2460. {
  2461. X  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  2462. X  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  2463. X  -1, 0, 1, 2, 3, 4, 5, 6, 7, -1,
  2464. X  -1, 8, 9, 10, 11, 12, 13, 14, 15, -1,
  2465. X  -1, 16, 17, 18, 19, 20, 21, 22, 23, -1,
  2466. X  -1, 24, 25, 26, 27, 28, 29, 30, 31, -1,
  2467. X  -1, 32, 33, 34, 35, 36, 37, 38, 39, -1,
  2468. X  -1, 40, 41, 42, 43, 44, 45, 46, 47, -1,
  2469. X  -1, 48, 49, 50, 51, 52, 53, 54, 55, -1,
  2470. X  -1, 56, 57, 58, 59, 60, 61, 62, 63, -1,
  2471. X  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  2472. X  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
  2473. X
  2474. X
  2475. void
  2476. Initialize_moves (void)
  2477. X
  2478. /*
  2479. X  This procedure pre-calculates all moves for every piece from every square.
  2480. X  This data is stored in nextpos/nextdir and used later in the move generation
  2481. X  routines.
  2482. */
  2483. X
  2484. {
  2485. X  short ptyp, po, p0, d, di, s, delta;
  2486. X  unsigned char *ppos, *pdir;
  2487. X  short dest[8][8];
  2488. X  short steps[8];
  2489. X  short sorted[8];
  2490. X
  2491. X  for (ptyp = 0; ptyp < 8; ptyp++)
  2492. X    for (po = 0; po < 64; po++)
  2493. X      for (p0 = 0; p0 < 64; p0++)
  2494. X    {
  2495. X      nextpos[ptyp][po][p0] = (unsigned char) po;
  2496. X      nextdir[ptyp][po][p0] = (unsigned char) po;
  2497. X    }
  2498. X  for (ptyp = 1; ptyp < 8; ptyp++)
  2499. X    for (po = 21; po < 99; po++)
  2500. X      if (nunmap[po] >= 0)
  2501. X    {
  2502. X      ppos = nextpos[ptyp][nunmap[po]];
  2503. X      pdir = nextdir[ptyp][nunmap[po]];
  2504. X      /* dest is a function of direction and steps */
  2505. X      for (d = 0; d < 8; d++)
  2506. X        {
  2507. X          dest[d][0] = nunmap[po];
  2508. X          delta = direc[ptyp][d];
  2509. X          if (delta != 0)
  2510. X        {
  2511. X          p0 = po;
  2512. X          for (s = 0; s < max_steps[ptyp]; s++)
  2513. X            {
  2514. X              p0 = p0 + delta;
  2515. X              /*
  2516. X            break if (off board) or
  2517. X            (pawns only move two steps from home square)
  2518. X              */
  2519. X              if (nunmap[p0] < 0 || (ptyp == pawn || ptyp == bpawn)
  2520. X              && s > 0 && (d > 0 || Stboard[nunmap[po]] != pawn))
  2521. X            break;
  2522. X              else
  2523. X            dest[d][s] = nunmap[p0];
  2524. X            }
  2525. X        }
  2526. X          else
  2527. X        s = 0;
  2528. X
  2529. X          /*
  2530. X            sort dest in number of steps order
  2531. X            currently no sort is done due to compability with
  2532. X            the move generation order in old gnu chess
  2533. X          */
  2534. X          steps[d] = s;
  2535. X          for (di = d; s > 0 && di > 0; di--)
  2536. X        if (steps[sorted[di - 1]] == 0)    /* should be: < s */
  2537. X          sorted[di] = sorted[di - 1];
  2538. X        else
  2539. X          break;
  2540. X          sorted[di] = d;
  2541. X        }
  2542. X
  2543. X      /*
  2544. X        update nextpos/nextdir,
  2545. X        pawns have two threads (capture and no capture)
  2546. X      */
  2547. X      p0 = nunmap[po];
  2548. X      if (ptyp == pawn || ptyp == bpawn)
  2549. X        {
  2550. X          for (s = 0; s < steps[0]; s++)
  2551. X        {
  2552. X          ppos[p0] = (unsigned char) dest[0][s];
  2553. X          p0 = dest[0][s];
  2554. X        }
  2555. X          p0 = nunmap[po];
  2556. X          for (d = 1; d < 3; d++)
  2557. X        {
  2558. X          pdir[p0] = (unsigned char) dest[d][0];
  2559. X          p0 = dest[d][0];
  2560. X        }
  2561. X        }
  2562. X      else
  2563. X        {
  2564. X          pdir[p0] = (unsigned char) dest[sorted[0]][0];
  2565. X          for (d = 0; d < 8; d++)
  2566. X        for (s = 0; s < steps[sorted[d]]; s++)
  2567. X          {
  2568. X            ppos[p0] = (unsigned char) dest[sorted[d]][s];
  2569. X            p0 = dest[sorted[d]][s];
  2570. X            if (d < 7)
  2571. X              pdir[p0] = (unsigned char) dest[sorted[d + 1]][0];
  2572. X            /* else is already initialized */
  2573. X          }
  2574. X        }
  2575. X    }
  2576. }
  2577. X
  2578. /* hmm.... shouldn`t main be moved to the interface routines */
  2579. int
  2580. main (int argc, char **argv)
  2581. {
  2582. X  short int ahead = true, hash = true;
  2583. X  char *xwin = 0;
  2584. X
  2585. X  while (argc > 1 && ((argv[1][0] == '-') || (argv[1][0] == '+')))
  2586. X    {
  2587. X      switch (argv[1][1])
  2588. X    {
  2589. X    case 'a':
  2590. X      ahead = (argv[1][0] == '-') ? false : true;
  2591. X      break;
  2592. X    case 'h':
  2593. X      hash = (argv[1][0] == '-') ? false : true;
  2594. X      break;
  2595. X    case 's':
  2596. X      argc--;
  2597. X      argv++;
  2598. X      if (argc > 1)
  2599. X        strcpy (savefile, argv[1]);
  2600. X      break;
  2601. X    case 'l':
  2602. X      if (argc > 1)
  2603. X        strcpy (listfile, argv[1]);
  2604. X      break;
  2605. #if ttblsz
  2606. #ifdef HASHFILE
  2607. X    case 't':        /* create or test persistent transposition table */
  2608. X      hashfile = fopen (HASHFILE, RWA_ACC);
  2609. X      if (hashfile)
  2610. X        {
  2611. X          fseek (hashfile, 0L, SEEK_END);
  2612. X          filesz = (ftell (hashfile) / sizeof (struct fileentry)) - 1;
  2613. X        }
  2614. X      if (hashfile != NULL)
  2615. X        {
  2616. X          long i, j;
  2617. X          int nr[maxdepth];
  2618. X          struct fileentry n;
  2619. X
  2620. X          printf ("Counting transposition file entries, wait!\n");
  2621. X          for (i = 0; i < maxdepth; i++)
  2622. X        nr[i] = 0;
  2623. X          fseek (hashfile, 0L, SEEK_END);
  2624. X          i = ftell (hashfile) / sizeof (struct fileentry);
  2625. X          fseek (hashfile, 0L, SEEK_SET);
  2626. X          for (j = 0; j < i + 1; j++)
  2627. X        {
  2628. X          fread (&n, sizeof (struct fileentry), 1, hashfile);
  2629. X          if (n.depth)
  2630. X            {
  2631. X              nr[n.depth]++;
  2632. X              nr[0]++;
  2633. X            }
  2634. X        }
  2635. X          printf ("The file contains %d entries out of max %d\n",
  2636. X              nr[0], i);
  2637. X          for (j = 1; j < maxdepth; j++)
  2638. X        printf ("%d ", nr[j]);
  2639. X          printf ("\n");
  2640. X        }
  2641. X      return 0;
  2642. X    case 'c':        /* create or test persistent transposition table */
  2643. X      if (argc > 2)
  2644. X        filesz = atoi (argv[2]);
  2645. X      if (filesz > 0 && filesz < 24)
  2646. X        filesz = (1 << filesz) - 1;
  2647. X      else
  2648. X        filesz = Deffilesz;
  2649. X      if ((hashfile = fopen (HASHFILE, RWA_ACC)) == NULL)
  2650. X        hashfile = fopen (HASHFILE, WA_ACC);
  2651. X      if (hashfile != NULL)
  2652. X        {
  2653. X          long i, j;
  2654. X          struct fileentry n;
  2655. X          printf ("Filling transposition file, wait!\n");
  2656. X          for (j = 0; j < 32; j++)
  2657. X        n.bd[j] = 0;
  2658. X          n.f = n.t = 0;
  2659. X          n.flags = 0;
  2660. X          n.depth = 0;
  2661. X          n.sh = n.sl = 0;
  2662. X          for (j = 0; j < filesz + 1; j++)
  2663. X        fwrite (&n, sizeof (struct fileentry), 1, hashfile);
  2664. X          fclose (hashfile);
  2665. X        }
  2666. X      return (0);
  2667. #endif /* HASHFILE */
  2668. #endif /* ttblsz */
  2669. X    case 'x':
  2670. X      xwin = &argv[1][2];
  2671. X      break;
  2672. X    default:
  2673. X      fprintf (stderr, "Usage: gnuchess [-a] [-t] [-c size] [-s savefile][-l listfile] [-x xwndw]\n");
  2674. X    }
  2675. X      argv++;
  2676. X      argc--;
  2677. X    }
  2678. X  Level = 0;
  2679. X  TCflag = false;
  2680. X  OperatorTime = 0;
  2681. X  if (argc == 2)
  2682. X    Level = atoi (argv[1]);
  2683. X  if (argc == 3)
  2684. X    {
  2685. X      TCmoves = atoi (argv[1]);
  2686. X      TCminutes = atoi (argv[2]);
  2687. X      TCflag = true;
  2688. X    }
  2689. X  Initialize ();
  2690. X  Initialize_dist ();
  2691. X  Initialize_moves ();
  2692. X  NewGame ();
  2693. X  GetOpenings ();
  2694. X
  2695. X  flag.easy = ahead;
  2696. X  flag.hash = hash;
  2697. X  if (xwin)
  2698. X    xwndw = atoi (xwin);
  2699. X
  2700. X  hashfile = NULL;
  2701. #if ttblsz
  2702. #ifdef HASHFILE
  2703. X  hashfile = fopen (HASHFILE, RWA_ACC);
  2704. X  if (hashfile)
  2705. X    {
  2706. X      fseek (hashfile, 0L, SEEK_END);
  2707. X      filesz = ftell (hashfile) / sizeof (struct fileentry) - 1;
  2708. X    }
  2709. #endif /* HASHFILE */
  2710. #endif /* ttblsz */
  2711. X  while (!(flag.quit))
  2712. X    {
  2713. X      if (flag.bothsides && !flag.mate)
  2714. X    SelectMove (opponent, 1);
  2715. X      else
  2716. X    InputCommand ();
  2717. X      if (!(flag.quit || flag.mate || flag.force))
  2718. X    SelectMove (computer, 1);
  2719. X    }
  2720. #if ttblsz
  2721. #ifdef HASHFILE
  2722. X  if (hashfile)
  2723. X    fclose (hashfile);
  2724. #endif /* HASHFILE */
  2725. #endif /* ttblsz */
  2726. X
  2727. X  ExitChess ();
  2728. X  return (0);
  2729. }
  2730. X
  2731. void
  2732. NewGame (void)
  2733. X
  2734. /*
  2735. X  Reset the board and other variables to start a new game.
  2736. */
  2737. X
  2738. {
  2739. X  short l, c, p;
  2740. X
  2741. X  stage = stage2 = -1;        /* the game is not yet started */
  2742. X  flag.mate = flag.post = flag.quit = flag.reverse = flag.bothsides = false;
  2743. X  flag.force = false;
  2744. X  flag.hash = flag.easy = flag.beep = flag.rcptr = true;
  2745. X  NodeCnt = et0 = epsquare = 0;
  2746. X  dither = 0;
  2747. X  Awindow = 90;
  2748. X  Bwindow = 90;
  2749. X  xwndw = 90;
  2750. X  MaxSearchDepth = 29;
  2751. X  contempt = 0;
  2752. X  GameCnt = 0;
  2753. X  Game50 = 1;
  2754. X  hint = 0x0C14;
  2755. X  ZeroRPT ();
  2756. X  Developed[white] = Developed[black] = false;
  2757. X  castld[white] = castld[black] = false;
  2758. X  PawnThreat[0] = CptrFlag[0] = false;
  2759. X  Pscore[0] = 12000;
  2760. X  Tscore[0] = 12000;
  2761. X  opponent = white;
  2762. X  computer = black;
  2763. X  for (l = 0; l < 2000; l++)
  2764. X    Tree[l].f = Tree[l].t = 0;
  2765. #if ttblsz
  2766. X  rehash = 6;
  2767. X  ZeroTTable ();
  2768. X  srand ((unsigned int) 1);
  2769. X  for (c = white; c <= black; c++)
  2770. X    for (p = pawn; p <= king; p++)
  2771. X      for (l = 0; l < 64; l++)
  2772. X    {
  2773. X      hashcode[c][p][l].key = (((unsigned long) urand ()));
  2774. X      hashcode[c][p][l].key += (((unsigned long) urand ()) << 16);
  2775. X      hashcode[c][p][l].bd = (((unsigned long) urand ()));
  2776. X      hashcode[c][p][l].bd += (((unsigned long) urand ()) << 16);
  2777. X      if (sizeof (long) > 4)
  2778. X        {
  2779. X          hashcode[c][p][l].key += (((unsigned long) urand ()) <<32);
  2780. X          hashcode[c][p][l].key += (((unsigned long) urand ()) << 48);
  2781. X          hashcode[c][p][l].bd += (((unsigned long) urand ()) << 32);
  2782. X          hashcode[c][p][l].bd += (((unsigned long) urand ()) << 48);
  2783. X        }
  2784. X    }
  2785. #endif /* ttblsz */
  2786. X  for (l = 0; l < 64; l++)
  2787. X    {
  2788. X      board[l] = Stboard[l];
  2789. X      color[l] = Stcolor[l];
  2790. X      Mvboard[l] = 0;
  2791. X    }
  2792. X  ClrScreen ();
  2793. X  if (TCflag)
  2794. X    SetTimeControl ();
  2795. X  else if (Level == 0)
  2796. X    SelectLevel ();
  2797. X  InitializeStats ();
  2798. X  time0 = time ((long *) 0);
  2799. X  ElapsedTime (1);
  2800. X  UpdateDisplay (0, 0, 1, 0);
  2801. X  Book = BKBook;
  2802. }
  2803. X
  2804. X
  2805. /* ............    MOVE GENERATION & SEARCH ROUTINES    .............. */
  2806. X
  2807. static inline void
  2808. pick (short int p1, short int p2)
  2809. X
  2810. /*
  2811. X  Find the best move in the tree between indexes p1 and p2. Swap the best
  2812. X  move into the p1 element.
  2813. */
  2814. X
  2815. {
  2816. X  register short p, s;
  2817. X  short p0, s0;
  2818. X  struct leaf temp;
  2819. X
  2820. X  s0 = Tree[p1].score;
  2821. X  p0 = p1;
  2822. X  for (p = p1 + 1; p <= p2; p++)
  2823. X    if ((s = Tree[p].score) > s0)
  2824. X      {
  2825. X    s0 = s;
  2826. X    p0 = p;
  2827. X      }
  2828. X  if (p0 != p1)
  2829. X    {
  2830. X      temp = Tree[p1];
  2831. X      Tree[p1] = Tree[p0];
  2832. X      Tree[p0] = temp;
  2833. X    }
  2834. }
  2835. X
  2836. void
  2837. SelectMove (short int side, short int iop)
  2838. X
  2839. X
  2840. /*
  2841. X  Select a move by calling function search() at progressively deeper ply
  2842. X  until time is up or a mate or draw is reached. An alpha-beta window of -90
  2843. X  to +90 points is set around the score returned from the previous
  2844. X  iteration. If Sdepth != 0 then the program has correctly predicted the
  2845. X  opponents move and the search will start at a depth of Sdepth+1 rather
  2846. X  than a depth of 1.
  2847. */
  2848. X
  2849. {
  2850. X  static short i, tempb, tempc, tempsf, tempst, xside, rpt;
  2851. X  static short alpha, beta, score;
  2852. X  static struct GameRec *g;
  2853. X
  2854. X  flag.timeout = false;
  2855. X  xside = otherside[side];
  2856. X  if (iop != 2)
  2857. X    player = side;
  2858. X  if (TCflag)
  2859. X    {
  2860. X      if ((TimeControl.moves[side] + 3) != 0)
  2861. X    ResponseTime = (TimeControl.clock[side]) /
  2862. X      (TimeControl.moves[side] + 3) -
  2863. X      OperatorTime;
  2864. X      else
  2865. X    ResponseTime = 0;
  2866. X      ResponseTime += (ResponseTime * TimeControl.moves[side]) / (2 * TCmoves + 1);
  2867. X    }
  2868. X  else
  2869. X    ResponseTime = Level;
  2870. X  if (iop == 2)
  2871. X    ResponseTime = 99999;
  2872. X  if (Sdepth > 0 && root->score > Zscore - zwndw)
  2873. X    ResponseTime -= ft;
  2874. X  else if (ResponseTime < 1)
  2875. X    ResponseTime = 1;
  2876. X  ExtraTime = 0;
  2877. X  ExaminePosition ();
  2878. X  ScorePosition (side, &score);
  2879. X  /* Pscore[0] = -score; */
  2880. X  ShowSidetoMove ();
  2881. X
  2882. X  if (Sdepth == 0)
  2883. X    {
  2884. #if ttblsz
  2885. X      /* ZeroTTable (); */
  2886. #endif /* ttblsz */
  2887. X      SearchStartStuff (side);
  2888. #ifdef NOMEMSET
  2889. X      for (ih = history; ih < history + 8192; ih++)
  2890. X    *ih = 0;
  2891. #else
  2892. X      memset ((char *) history, 0, sizeof (history));
  2893. #endif /* NOMEMSET */
  2894. X      FROMsquare = TOsquare = -1;
  2895. X      PV = 0;
  2896. X      if (iop != 2)
  2897. X    hint = 0;
  2898. X      for (i = 0; i < maxdepth; i++)
  2899. X    PrVar[i] = killr0[i] = killr1[i] = killr2[i] = killr3[i] = 0;
  2900. X      alpha = score - 90;
  2901. X      beta = score + 90;
  2902. X      rpt = 0;
  2903. X      TrPnt[1] = 0;
  2904. X      root = &Tree[0];
  2905. X      MoveList (side, 1);
  2906. X      /* Analysis Mode Goes here */
  2907. X
  2908. X      for (i = TrPnt[1]; i < TrPnt[2]; i++)
  2909. X    pick (i, TrPnt[2] - 1);
  2910. X      if (Book != NULL)
  2911. X    OpeningBook (&hint);
  2912. X      if (Book != NULL)
  2913. X    flag.timeout = true;
  2914. X      NodeCnt = ETnodes = EvalNodes = HashCnt = FHashAdd = HashAdd = FHashCnt = HashCol = 0;
  2915. X      Zscore = 0;
  2916. X      zwndw = 20;
  2917. X    }
  2918. X  while (!flag.timeout && Sdepth < MaxSearchDepth)
  2919. X    {
  2920. X      Sdepth++;
  2921. X      ShowDepth (' ');
  2922. X      score = search (side, 1, Sdepth, alpha, beta, PrVar, &rpt);
  2923. X      for (i = 1; i <= Sdepth; i++)
  2924. X    killr0[i] = PrVar[i];
  2925. X      if (score < alpha)
  2926. X    {
  2927. X      ShowDepth ('-');
  2928. X      ExtraTime = 10 * ResponseTime;
  2929. X      /* ZeroTTable (); */
  2930. X      score = search (side, 1, Sdepth, -9000, score, PrVar, &rpt);
  2931. X    }
  2932. X      if (score > beta && !(root->flags & exact))
  2933. X    {
  2934. X      ShowDepth ('+');
  2935. X      ExtraTime = 0;
  2936. X      /* ZeroTTable (); */
  2937. X      score = search (side, 1, Sdepth, score, 9000, PrVar, &rpt);
  2938. X    }
  2939. X      score = root->score;
  2940. X      if (!flag.timeout)
  2941. X    for (i = TrPnt[1] + 1; i < TrPnt[2]; i++)
  2942. X      pick (i, TrPnt[2] - 1);
  2943. X      ShowResults (score, PrVar, '.');
  2944. X      for (i = 1; i <= Sdepth; i++)
  2945. X    killr0[i] = PrVar[i];
  2946. X      if (score > Zscore - zwndw && score > Tree[1].score + 250)
  2947. X    ExtraTime = 0;
  2948. X      else if (score > Zscore - 3 * zwndw)
  2949. X    ExtraTime = ResponseTime;
  2950. X      else
  2951. X    ExtraTime = 3 * ResponseTime;
  2952. X      if (root->flags & exact)
  2953. X    flag.timeout = true;
  2954. X      if (Tree[1].score < -9000)
  2955. X    flag.timeout = true;
  2956. X      if (4 * et > 2 * ResponseTime + ExtraTime)
  2957. X    flag.timeout = true;
  2958. X      if (!flag.timeout)
  2959. X    {
  2960. X      Tscore[0] = score;
  2961. X      Zscore = (Zscore == 0) ? score : ((Zscore + score) / 2);
  2962. X    }
  2963. X      zwndw = 20 + abs (Zscore / 12);
  2964. X      beta = score + Bwindow;
  2965. X      alpha = ((Zscore < score) ? Zscore : score) - Awindow - zwndw;
  2966. X    }
  2967. X
  2968. X  score = root->score;
  2969. X  if (rpt >= 2)
  2970. X    {
  2971. X      root->flags |= draw;
  2972. X      DRAW = "Repitition";
  2973. X    }
  2974. X  if (score < -12000)
  2975. X    {
  2976. X      root->flags |= draw;
  2977. X      DRAW = "Score";
  2978. X    }
  2979. X  if (!PieceCnt[black] && !PieceCnt[white])
  2980. X    {
  2981. X      root->flags |= draw;
  2982. X      DRAW = "No pieces";
  2983. X    }
  2984. X  if ((root->score == -9999) && !(SqAtakd (PieceList[side][0], xside)))
  2985. SHAR_EOF
  2986. true || echo 'restore of gnuchess.c failed'
  2987. fi
  2988. echo 'End of  part 3'
  2989. echo 'File gnuchess.c is continued in part 4'
  2990. echo 4 > _shar_seq_.tmp
  2991. exit 0
  2992. exit 0 # Just in case...
  2993. -- 
  2994. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  2995. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  2996. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  2997. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  2998.  
  2999.  
  3000.