home *** CD-ROM | disk | FTP | other *** search
/ PC-Online 1996 May / PCOnline_05_1996.bin / linux / source / xap / gchess / xboard-3.0 / xboard-3 / xboard-3.0.pl9 / ChangeLogOld < prev    next >
Text File  |  1993-08-30  |  43KB  |  1,016 lines

  1. CHANGES
  2.  
  3. Version 1.1 -- Mon Jan  7 14:46:03 PST 1991
  4.  
  5.   - Fixed a bug in HandleUserMove() where the user could make a move while the
  6.     machine was thinking.  The fix detects and ignores these moves.  onMove
  7.     was not being used and was removed.
  8.  
  9.   - Substantially rewrote and simplified the clock code.  If a game was paused
  10.     and then resumed, the clocks were out of sync.
  11.  
  12.   - Konstantinos Konstantinides added the -searchTime option.
  13.  
  14.   - Rewrote TwoMachinesPlay mode.
  15.  
  16.   - Rewrote DisplayClocks().
  17.  
  18.   - Hal Peterson contributed a new Imakefile.
  19.  
  20.   - Added a declaration, xtVersion, which will quickly break on R3 Intrinsics.
  21.  
  22.   - For people who don't like or use chess clocks a clockMode switch
  23.     has been added.  It is on by default.  It can be turned off in the
  24.     .Xdefaults file with
  25.  
  26.         XBoard.clockMode:    False
  27.  
  28.   - Detect if the visual doesn't support color.  If so, run in monoMode.
  29.     An alternative would be to detect grayscale visual and use a collection
  30.     of gray user interface colors.
  31.  
  32.   - Works with gcc now.  gcc complained about casting float constants
  33.     as XtPointers.
  34.  
  35.   - Added keyboard equivalents.  Added an iconify keystroke, C or c.
  36.  
  37.   - Added StrStr() because many systems don't have this ANSI function.
  38.  
  39.   - Substantially rewrote and simplified the Two Machine code.
  40.  
  41.   - The bitmaps have been pushed into the bitmaps directory.
  42.  
  43.   - Fixed a bug where a player could play after a game had been finished.
  44.  
  45.   - Fixed a bug where hint didn't work.  The local version of gnuchessr
  46.     had been hacked.  The fix was to clone stderr and stdout for gnuchessr.
  47.  
  48.   - Kayvan Sylvan contributed a patch for ESIX.
  49.     It seems that select() on pipes is broken on his system.  We declined
  50.     to incorporate his patch though, because it was a work-around for
  51.     something that was broken on one system, and selfishly, that system
  52.     was not my own.  Nevertheless, it is likely that other System V users
  53.     on PC's may need to use this patch and it is is included as the file
  54.     ESIX.patch.  To use it, type
  55.  
  56.         patch xboard.c ESIX.patch
  57.  
  58.   - Any button restarts a paused game.
  59.  
  60.   - Warning messages get displayed in the message box.
  61.  
  62.   - getlogin() does not work in all cases.
  63.     It was replaced by getpwuid(getuid())->pw_name).
  64.  
  65.   - For systems with smaller screens, XBoard can use smaller pieces,
  66.     and a smaller board.  -bigSizeMode False uses a smaller set of pieces.
  67.     These are scaled versions of the large pieces.  They look ok but could
  68.     be improved.
  69.  
  70.   - -iconic doesn't work properly.  If XBoard is opened iconic then
  71.     iconifying it later with a keystroke doesn't work.  I think
  72.     this is an Xt bug.
  73.  
  74.   - the remoteShell resource was added for HP-UX systems
  75.     and other systems where the remoteShell isn't rsh.
  76.  
  77.   - older non-ANSI versions of Sun compilers complain vociferously.
  78.  
  79.   - Roger Dubar, Konstantinos Konstantinides, Wolfgang S. Rupprecht,
  80.     Paul Scowen, Mvh Smidt and Kayvan Sylvan all helped immensely during
  81.     beta-testing.
  82.  
  83. Version 1.2 -- Tue Jun 11 17:14:12 PDT 1991
  84.  
  85.   - Added a lex parser for algebraic games.  It should be easy to use the parser
  86.     for other interfaces such as the Microsoft Windows version.
  87.     It parses comments of the form [anything] and ! to the end of a line.
  88.  
  89.   - Corrected the queening code.  XBoard was sending the wrong syntax.
  90.     It was sending for example h8(Q) when it should have been sending h8q.
  91.     Thanks to Paul Vaughan and Mike McGann for pointing this out.
  92.  
  93.   - Moved the man page from xboard.1 to xboard.man.  This makes imake man page
  94.     installs work correctly.  Thanks to Richard K. Lloyd for pointing this out.
  95.  
  96.   - Changed the forwards/backwards/readgamefile code to allow a play to step
  97.     back and forth in a game.  If he steps all the way to the beginning
  98.     he has to restart the game.  If he gets into a mated position, same problem.
  99.  
  100.   - Modified the code to use the R4 routines rather than R3 compatibility.
  101.  
  102.   - Added a PopUp dialog for getting file names.
  103.  
  104.   - If the first character of the file is not `1' then the first line
  105.     of a game or position file is displayed as the name in a label widget.
  106.  
  107.   - Minor hacks to work with R5 alpha.  Had to add an event handler to the
  108.     boardWidget to get translations to work.  This may go away with the real R5.
  109.     Added <Message>WM_PROTOCOLS: QuitProc() for R5 ICCCM compatibility.
  110.  
  111.   - If the DisplayWidth or DisplayHeight is less than 800, use small size mode.
  112.     Also the size of the name widget was reduced from 500 pixels to 400 pixels
  113.     because in small size mode there was a gap on the right.
  114.     Changed the default font from fixed to helvetica_oblique14 to:
  115.         -*-helvetica-bold-r-normal--14-*-*-*-*-*-*-*
  116.     helvetica_oblique14 is a font alias not on all R4 systems.
  117.     Curiously enough, the 17 point is not available on 75dpi systems
  118.     and the 18 point font is not available on 100dpi systems.
  119.     Thanks to Richard K. Lloyd for pointing these out.
  120.  
  121.   - Fixed a compiler warning for gcc and an error for the IBM RT compilers.
  122.     This is the VOID_PROC macro in xboard.h.  Thanks to David Jensen for this.
  123.  
  124.   - -iconic doesn't work at all now.  The Iconify() does work.  This was
  125.     a tradeoff and it is really an Xt bug.
  126.  
  127.   - fixed a problem with the new version of gnuchessr where xboard wasn't
  128.     getting gnuchessr error messages for illegal moves.  The problem seems
  129.     to be fixed *without* any gnuchess changes but this is likely to be
  130.     highly system dependant.  There should be a new line on line 246 of nondsp.c
  131.  
  132.         printz ("Illegal move (no matching move generated)");
  133.  
  134.     The xboard fix was to set non-blocking i/o on the read pipe for gnuchessr
  135.  
  136.         fcntl(from_prog[0], F_SETFL, O_NDELAY);
  137.  
  138.   - The bitmap file names were changed so that none exceeded 14 characters.
  139.     This is necessary for R5.
  140.  
  141.   - Added the CHESSDIR environment variable.  Game and position files are
  142.     found in this directory.  If this variable is not declared, then the
  143.     current directory is used.  File names starting with / are treated
  144.     specially.
  145.  
  146.   - Fixed a bug where saving a long game, resetting and saving a short game
  147.     resulted in appending the end of the long game to the short one.
  148.     If a game is just being played out and there is no reason for gnuchessr
  149.     to be used, ignore pipe signals.  This allows people to use xboard
  150.     as a chess board without need for gnuchess.  Also, trivially bad moves
  151.     such as e2e2 are not passed on to gnuchessr but instead ignored out of
  152.     hand.  This allows people using xboard as a chessboard with gnuchessr
  153.     to pick a piece up, think and put it back down without making a move.
  154.     Thanks to Jeff Kenton for pointing these out.
  155.  
  156.   - Fixed a bug where the checkmate message wasn't being parsed and xboard
  157.     kept playing.  Also, the message was added to game file if saved.
  158.     Thanks to Scott Hemhill for pointing this out.
  159.  
  160.   - enumerations are not really integers on some C compilers.  I added casting.
  161.     The new version of gnuchess expects the "go" command for two machine
  162.     and machine plays white cases.  The whiteString resource is for
  163.     compatibility with previous gnuchess versions which get confused by go.
  164.     Thanks to Martin D. for catching these.
  165.  
  166.   - There was an off by one error with the clock resetting code.  Also,
  167.     the clock display highliting was wrong.  Thanks to Bill Shauck for
  168.     pointing these out.
  169.  
  170.   - Changed the protocol that xboard uses to work with the new version of
  171.     gnuchessr.
  172.  
  173.   - For version 1.2, Jeff Kenton, Richard LLoyd, David Jensen, Martin D.,
  174.     Bill Schmidt, Scott Hemphill, Paul Vaughan and Bill Shauck all found
  175.     a lot of bugs that we put into xboard just to see if they were paying
  176.     attention.  They were.
  177.  
  178. Thu Jun 20 15:04:06 PDT 1991
  179.  
  180.   Minor fixes to the 1.2 release
  181.  
  182.   - Multiple uses of the get positition file button got confused
  183.     on the second click.
  184.  
  185.   - Long game file comments cause core dumps on HP systems.
  186.  
  187.   - Parsed comments as [ ..............text follows ] into d7d5
  188.  
  189.   - New-line wasn't always being added to forward move strings sent to gnuchess.
  190.  
  191.   - Put easy back into the initString.  This DISABLES easy mode which by
  192.     default is ON.
  193.  
  194.   - Can't do a backward move when it isn't your turn because gnuchess
  195.     gets confused.  Similar bug for forward move.  Do a bunch of moves,
  196.     back up move and go forward.  These get filtered out now.
  197.  
  198. Thu Jun 27 15:06:25 PDT 1991
  199.  
  200.   - Bug in my forward move fix.  Didn't work for playgamefile mode.
  201.  
  202.   - Remove comment popups during a reset.
  203.  
  204. Version 1.3 -- Thu Dec 19 18:19:00 PST 1991  mann@src.dec.com (Tim Mann)
  205.  
  206. I've fixed a slew of bugs in this version of xboard.
  207.  
  208. - Backward/Forward now seem to work in all cases.  Previously using these
  209. buttons during a game against the machine would get xboard out of sync with
  210. gnuchess's idea of what was going on, resulting in chaos.  Now using these
  211. buttons puts xboard in ForceMoves mode; you can bring gnuchess back into the
  212. game using the MachineWhite or MachineBlack buttons.
  213.  
  214. - PlayFromFile now leaves xboard in ForceMoves mode after playing through all
  215. the moves in the file.  You can use Backward/Forward, make moves, get gnuchess
  216. to join the game with MachineWhite or MachineBlack, etc.  The game file can end
  217. with either white or black to play.
  218.  
  219. - SetupFromFile now leaves you (effectively) in ForceMoves mode.  This
  220. eliminates some cases where the program would get into an inconsistent state,
  221. and hopefully is more intuitive for the user, too.
  222.  
  223. - SavePosition/SetupFromFile now handle black-to-play positions.  If it's
  224. black's move in a saved position, the line "black to play" is printed
  225. immediately after the board display.  Upon loading a position, xboard
  226. looks for "black" at the beginning of this line to determine whether it's
  227. black's move.
  228.  
  229. - gnuchess 3.1+ has a bug that makes it try to think on its opponent's time
  230. even when in force mode; this causes problems with xboard's SetupFromFile
  231. command because gnuchess's saved hint move is garbage after the new position is
  232. loaded, so gnuchess prints out an error message when it tries to think about
  233. what it would do if the user made this move.  Here is a patch for gnuchess
  234. 3.1+:
  235.  
  236. *** nondsp.c~   Mon Dec  2 12:37:18 1991
  237. --- nondsp.c    Thu Dec 19 15:36:06 1991
  238. ***************
  239. *** 1223,1229 ****
  240.     ok = flag.quit = false;
  241.     player = opponent;
  242.     ft = 0;
  243. !   if (hint > 0 && !flag.easy && Book == NULL)
  244.       {
  245.         fflush (stdout);
  246.         time0 = time ((long *) 0);
  247. --- 1223,1229 ----
  248.     ok = flag.quit = false;
  249.     player = opponent;
  250.     ft = 0;
  251. !   if (hint > 0 && !flag.easy && Book == NULL && !flag.force)
  252.       {
  253.         fflush (stdout);
  254.         time0 = time ((long *) 0);
  255.  
  256.  
  257. - Now updates the to-move indicator (highlight on clock display) when you use
  258. Forward/Backward or ForceMoves.
  259.  
  260. - Now starts the machine's clock if you hit MachineWhite when white is on move
  261. or MachineBlack when black is on move.
  262.  
  263. - Fixed one or two bugs where the clock was started when it shouldn't have
  264. been.  I think one example was if you tried an illegal move in ForceMoves mode.
  265.  
  266. - As I received it, the distribution had an extra period glued on the front
  267. of every line that started with a period.  This broke the manpage in an
  268. obvious way.  It also broke parser.l in a nonobvious way that stopped
  269. PlayFromFile from working.
  270.  
  271. - xboard.c got three compiler warnings due to arguments that didn't match the
  272. prototypes on X toolkit functions.  I got rid of them by adding some casts, and
  273. adding extra unused arguments to the ReceiveFromProgram function.
  274.  
  275. - programName is now the last pathname component of argv[0], not all of it.
  276.  
  277. - Removed the feature of putting an indication of how the game ended into the
  278. internal move list when playing from a file.  The only benefit of this was that
  279. it would get written back out if you saved the game at that point.  This
  280. feature doesn't seem too useful, since you are unlikely to save a game you've
  281. read in without making any changes, and it caused a lot of problems in the code
  282. and user interface.  The end condition is still displayed as a message when
  283. it's first read in from the file.  End conditions when playing against gnuchess
  284. are still saved, too.
  285.  
  286. - Added a wait() after each successful call to kill() to avoid leaving zombie
  287. processes around.
  288.  
  289. - I removed the parser feature of considering "!" as a comment delimiter.
  290. "!" is so common as an annotation in game scores that this feature seems like a
  291. very bad idea.
  292.  
  293. - The parser now recognizes "white resigns" and "black resigns" (in any
  294. combination of upper and lower case, with or without the closing "s").  These
  295. used to be misinterpreted as meaning "white wins" or "black wins" respectively!
  296. Added "1 - 0" and "0 - 1" as equivalents for "1-0" and "0-1".
  297.  
  298. - ForceMoves button is now legal in PlayFromFile mode.  It closes the game file
  299. and lets you force moves (or go Backward) from whatever position you've
  300. reached.
  301.  
  302. - Note: the "force" command to gnuchess is a toggle.  I fixed a couple of
  303. places in xboard where "force" was being issued when gnuchess was already in
  304. force mode, which resulted in chaos.  I don't know if they were in 1.2 or if I
  305. added them myself in the course of putting in new features.
  306.  
  307. - You can now back up from the end of a game, even if gnuchess was playing
  308. against you.  Since gnuchess exits upon mate or draw (when it's not in force
  309. mode), this feature works by starting up a new copy of gnuchess and feeding it
  310. the saved starting position and moves.  Drawback: the new gnuchess starts with
  311. clocks at the beginning of a fresh time control.
  312.  
  313. Mon Feb 24 20:10:22 PST 1992
  314.  
  315. - Merged fixes received from Stuart Cracraft and Mike McGann, to iconic mode
  316. and to ShutdownChessPrograms.  (They both sent the same fixes.)  I did not
  317. install the change that removed "easy" from the initialization string, so
  318. xboard will still try to run gnuchessx in "hard" mode (thinking on opponent's
  319. time) by sending this command.
  320.  
  321. Sat Mar 14 14:55:24 PST 1992 (patchlevel 7)
  322.  
  323. - Added code to send SIGINT to gnuchess before trying to move, if gnuchess
  324. might be busy thinking on our time.  The code is ifdef'ed out because it's
  325. not necessary; only beta-test versions of gnuchess 4.0 at patchlevel 19 or
  326. below require it.
  327.  
  328. - Added pop-up dialog to allow underpromotion.  Moving a pawn to the last rank
  329. pops up a dialog to let you select what piece to promote to.  Also added code
  330. to handle underpromotion moves from gnuchess or from a game file correctly.
  331.  
  332. - More permissive about game file format.  The first line is not assumed
  333. to be a header comment unless it starts with "#".  We don't insist on
  334. seeing a "1." before the first move.
  335.  
  336. - Bug fix:  No longer hangs if no start-of-game is found in a game file.
  337.  
  338. - Prints "White to play" or "Black to play" after loading a position file.
  339.  
  340. - Bug fix:  Doesn't get confused if you hit Machine Black (White) while
  341. the machine is already playing black (white) and is on move.
  342.  
  343. - Bug fix:  Doesn't exit at the end of a game that was started by pressing
  344. the Two Machines button.
  345.  
  346. - Relabeled buttons to reduce confusion (Play From File --> Load Game;
  347. Setup From File --> Load Position).
  348.  
  349. - Cleaned up lots of bugs and kruft in parser.l.  It's a wonder the old version
  350. worked at all.  Improved rejection of random text interspersed with the moves.
  351.  
  352. Mon Mar 16 16:49:00 PST 1992 (patchlevel 8)
  353.  
  354. - Underpromotion moves from gnuchess really work now.
  355.  
  356. - Game and position files are saved in CHESSDIR as well as loaded from there.
  357. We actually chdir there, so gnuchess listing files also wind up there.
  358.  
  359. Tue Mar 17 21:00:35 PST 1992 (patchlevel 9)
  360.  
  361. - Bug fix: Was clobbering memory by mallocing one byte too few for the filename
  362. in SetupPositionFromFileProc.  This usually resulted in a crash on the second
  363. attempt to load a position from a file.
  364.  
  365. - My trick for setting up a black-to-play position broke in the transition from
  366. gnuchess 3.1+ to 4.0.  Installed a different trick that works with both.
  367.  
  368. - Setting -searchTime turns off -clockMode.
  369.  
  370. - Saved games against gnuchess indicate who won (restored and debugged 1.2
  371. feature). 
  372.  
  373. - Cleaned up handling of illegal moves in game files.  Now we just stop reading
  374. and go into ForceMoves mode.
  375.  
  376. - Bug fix: The program would sometimes lose track of the board position after
  377. the end of the game, drawing a board full of white pawns next time it got an X
  378. redraw request.  Now fixed.
  379.  
  380. - Matches between two machines can now start from a black-to-play position or
  381. black-to-play opening.
  382.  
  383. - Now waits for chess program to print its first message (normally "Chess")
  384. before sending it any commands.
  385.  
  386. - Removed non-working code that tried to recover when a remote chess program
  387. could not be started; now exits with a message instead.
  388.  
  389. Sat Mar 21 14:57:37 PST 1992 (patchlevel 10)
  390.  
  391. - Added -searchLevel option and corrected handling of -searchTime to reflect
  392. the way gnuchess really handles command line options instead of what the
  393. documentation used to say.  Allowed optional ":seconds" on times.
  394.  
  395. - Bug fix:  SwitchSides button is now disabled when machine is on move.
  396.  
  397. - Sends o-o or o-o-o to gnuchess instead of O-O or O-O-O.
  398.  
  399. - ForceMoves and Backward/Forward now work at the end of a game started by
  400. the TwoMachines button.
  401.  
  402. - TwoMachines now works from MachineWhite or MachineBlack mode.
  403.  
  404. Thu Apr  2 15:30:22 PST 1992 (patchlevel 11)
  405.  
  406. - Bug fix:  Hint button is now disabled when machine is on move.
  407.  
  408. - UI improvement: Button representing current program mode is kept highlighted.
  409.  
  410. - Promotion popup now appears near rank to which pawn is moving.
  411.  
  412. - Reformatted xboard.c to eliminate long lines.
  413.  
  414. - Added EditPosition mode.
  415.  
  416. - Removed SwitchSides button to make room for EditPosition.  Left code in
  417. place, ifdef'ed out.
  418.  
  419. - parser accepts ":" notation for captures
  420.  
  421. - parser accepts "=" in front of promotion piece
  422.  
  423. - added -noChessProgram option to allow use as a passive chessboard without
  424. gnuchess, replacing old buggy scheme that tried to do this automatically when
  425. gnuchess was not found on the search path.
  426.  
  427. - added error message feedback to many cases where the user's button press is
  428. rejected because it isn't allowed in the current mode.
  429.  
  430. - Bugfix:  Match started with TwoMachines button now handles the case where
  431. user loaded/edited a position *and* forced some moves.
  432.  
  433. Version 2.0 -- Thu Apr  2 16:04:54 PST 1992 (patchlevel 12)
  434.  
  435. - Changed version number to 2.0 because others have used "1.3" for patched
  436. versions of 1.2.  Display version number and patchlevel at startup.
  437.  
  438. - Put back feature of skipping over stuff in game files before a start of game
  439. marker.  This helps when loading electronic mail messages that have things
  440. like "00" in the header (looks like castling), or that talk about moves in
  441. running text before the actual game score.  Tradeoff is that we can't load
  442. games that don't either have move numbers or say "gnuchess game" just before
  443. the moves.
  444.  
  445. - Tightened parser's definition of a move number to help further with skipping
  446. over stuff before the first move.
  447.  
  448. - Removed "To play" from edit position menus, since it's redundant.  Left
  449. support code in so it can be restored if someone wants it.
  450.  
  451. - Made "Pawn" the default on edit position menus.
  452.  
  453. - SavePosition while in EditPosition mode now gets side to play right.
  454.  
  455. - Saved position files now say "white to play" if it's white's move.
  456.  
  457. - Improved man page.
  458.  
  459. - Added small 40x40 pixel pieces; board size now specified as small, medium, or
  460. large. 
  461.  
  462. Mon Apr 13 18:32:27 PDT 1992 (patchlevel 13)
  463.  
  464. - Debugged man page.
  465.  
  466. - Improved error handling when gnuchessx crashes.  Now displays a message and
  467. enters EndOfGame state without exiting.  This should help with diagnosing
  468. gnuchessx problems, since the position and move history are not lost.
  469.  
  470. Tue May 19 11:58:06 PDT 1992 (patchlevel 14)
  471.  
  472. - Fixes one small bug: If LoadGame does not find a game in the file, it resets
  473. xboard to BeginningOfGame mode (as if the Reset button was pressed), instead of
  474. leaving it in LoadGame mode.
  475.  
  476. Thu May 21 12:30:09 PDT 1992 (patchlevel 15)
  477.  
  478. - Bugfix: code to exit if chess program couldn't be started had bug in error
  479. message printing.
  480.  
  481. - Added casts in parser.l to prevent warning messages from some C compilers.
  482.  
  483. - Removed -g from Imakefile.
  484.  
  485. Fri May 22 13:40:50 PDT 1992 (patchlevel 16)
  486.  
  487. - Added GNU copyleft notices covering version 2.0 enhancements.
  488.  
  489. - First real (non-beta) release of version 2.0.
  490.  
  491. Sun May 31 08:00:00 PDT 1992 (patchlevel 17) Bart Massey bart@cs.uoregon.edu
  492.  
  493. -  'xboard' suffered from a couple of serious bugs.  An initial
  494.    size needed to be given to the message label to avoid a race
  495.    condition (!) so I gave it some text (otherwise occasionally
  496.    xboard would fail because the message widget was 0 width under
  497.    MIT X11R4).  The sizes needed to be Dimension, not int, because
  498.    they were written in by Xt -- on my big-endian box Dimension
  499.    is short, causing chaos.  Also, I hacked a declaration in for
  500.    strrchr() to shut the compiler up -- this is arguably a kludge,
  501.    but I couldn't think of anything better; maybe you can.
  502.  
  503. Wed Jun  3 17:50:37 PDT 1992 (patchlevel 18) mann@src.dec.com
  504.  
  505. Thanks to Richard K. Lloyd, Konstantinos Konstantinides, Mark Seiden, Erik
  506. Schoenfelder, Andreas Stolcke, Rainer Orth, Henry Thomas, and Kris Van Hees for
  507. bug reports and help with fixes.
  508.  
  509. - Removed code that tries to put the file descriptor used to read messages from
  510. gnuchess into nonblocking mode.  I don't see how this kludge could ever have
  511. fixed the problem it was intended to (see above), and it seemed to be causing
  512. a race condition when we were waiting for the initial message from gnuchess
  513. after it started up.
  514.  
  515. - InitChessProgram returns immediately if chess program died while we were
  516. waiting for it to say "Chess".  I think this fixes a bug that could make xboard
  517. crash or go into an infinite loop printing "Warning: Select failed; error code
  518. 9" if gnuchess crashed there.
  519.  
  520. - Fixed a bunch of type errors uncovered by compilers that check more carefully
  521. than the one I was using.  I just patched many of them with casts---typically
  522. cases where a function didn't take the same number and type of arguments as the
  523. X header file prototype said it should---because I didn't see any other way to
  524. fix them.  The versions of the X header files that I have don't actually have
  525. full prototypes for these function types; they declare only the return type and
  526. just give the argument types as comments.
  527.  
  528. - Removed the declaration of strrchr, which was causing problems for some
  529. people, and added an include of <string.h> or <strings.h> instead.
  530.  
  531. - Fixed a bug in CatchPipeSignal; was testing the wrong variable to determine
  532. which chess program got the signal.
  533.  
  534. - Added an include of sys/fcntl.h to pick up the definition of O_RDWR for
  535. System V users.
  536.  
  537. Fri Jun  5 13:06:08 PDT 1992 (patchlevel 19)
  538.  
  539. Thanks to Christoph Strozyk for another bug report, and to several of the folks
  540. mentioned under patchlevel 18 for testing it.
  541.  
  542. - Changed variable name that conflicted with SVR4 ttyname function.
  543.  
  544. - Removed bogus files from distribution.
  545.  
  546. - Note: xboard does not seem to work when compiled with gcc 1.40 on a
  547. PS/2 running AIX.  It crashes at the sscanf in line 768 of xboard.c.
  548. You can work around the problem by specifying the -timeControl option
  549. on the command line instead of defaulting it.  This does not seem to
  550. be a bug in xboard itself; it runs okay on PS/2 AIX when compiled with
  551. MetaWare High C.  [But see 2.1.pl8 below.]
  552.  
  553. Mon Jun  8 11:39:18 PDT 1992 (patchlevel 20)
  554.  
  555. Thanks to Mitch Wright, Ranier Orth, and Henrik Schmiediche for bug reports.
  556.  
  557. - Minor fix to some usage error messages; was reversing program name and
  558. erroneous argument value.
  559.  
  560. - Changed code to work with old-fashioned tolower() macro that requires its
  561. argument to be an uppercase letter.
  562.  
  563. - Fix to "parser bug" messages in parser.l.
  564.  
  565. - Include time.h to get ctime() declaration.
  566.  
  567. - Fixed confusion of NULL and '\000'.
  568.  
  569. - "Flag dropped" messages now show up on the top line, beside the clocks, so
  570. that they don't obscure more interesting messages on the second line.
  571.  
  572. - Improved clock code.  It now keeps accurate track of fractional seconds of
  573. clock running time, if your system has gettimeofday(); if not, it is generous
  574. about them---if a clock has been going for n.m seconds when it is stopped, only
  575. n seconds are charged.  Previously, xboard would charge one second immediately
  576. when a clock was started, so if n.m had elapsed when it was stopped, n+1 would
  577. be charged.  This should stop xboard from thinking gnuchess has let its flag
  578. fall on the last move of a time control, as it often did before.  I also
  579. improved the comments and condensed the code a little.  I hope there are no
  580. systems that have X11 and don't have gettimeofday(), but if there are, I'd like
  581. to know what to replace it with.
  582.  
  583. - Redid -searchDepth (formerly -searchLevel) and -searchTime code.  They both
  584. work correctly with gnuchess 3.1 now.  The -searchDepth option also works
  585. correctly with gnuchess 4.0.  The -searchTime option does not work with
  586. gnuchess 4.0.pl50 or earlier because those gnuchess versions do not have a
  587. working searchTime feature.  Instead of having xboard do a half-baked emulation
  588. of this feature by using a 1-move time control, I will be submitting a patch to
  589. the gnuchess folks to restore the feature as in 3.1.
  590.  
  591. - Documented default value of initString and explained what it means.  This
  592. paragraph also serves to inform the user that xboard by default will tell
  593. gnuchess to think on his time, something one user apparently didn't understand.
  594.  
  595. Mon Jun 22 13:24:38 PDT 1992 (patchlevel 21)
  596.  
  597. Thanks for reports from Mike Pearlman, Stephen Meatheringham, Kayvan Sylvan,
  598. d87-mal@nada.kth.se, Urban Koistinen, and Ronald Cole.
  599.  
  600. - Added include of <sys/time.h> conditional on HAS_GETTIMEOFDAY.  I hope this
  601. works for all systems; on mine, <time.h> and <sys/time.h> are the same file,
  602. but with an #ifndef that makes it harmless to include both.
  603.  
  604. - Man page fixes: corrected -sl to -sd, updated LIMITATIONS.
  605.  
  606. - Fixed yet another bug in using XtGetValues; code to inhibit shell resizing
  607. was leaving a null pointer as the place to store the current sizes.
  608.  
  609. - The ATTENTION code is needed when compiling for the ESIX operating system,
  610. because ESIX has a bug in the FIONREAD ioctl, so the code in gnuchess that
  611. lets you interrupt its thinking on your time just by typing in your move does
  612. not work.  Perhaps gnuchess will have a workaround for this eventually.
  613.  
  614. - Fixed a problem with ATTENTION code.  On some operating systems, you have to
  615. be even more cautious about when you send a SIGINT to gnuchess, because the
  616. signal handler gets deinstalled each time it is used, and gnuchess does not
  617. reinstall it immediately.  In particular, if you send a SIGINT and make an
  618. illegal move or ask for a hint, gnuchess does not reinstall the handler until
  619. *after* you make your next move, so you had better not send a SIGINT before
  620. it.  I put a workaround for this case into xboard; I hope there are no more.
  621.  
  622. - Note:  Stephen Meatheringham reports a bug causing xboard to crash with an
  623. error from the X server when run on a Sun Sparcstation IPX with Solaris 1.0.1
  624. and OpenWindows 3.0.  This bug has not been tracked down yet.
  625.  
  626. - Added some SVR4 support code from Ronald Cole.  It's Greek to me.
  627.  
  628. Mon Jul  6 17:55:32 PDT 1992 (patchlevel 22) mann@src.dec.com
  629.  
  630. - Added a small ESIX patch from Kayvan Sylvan.
  631.  
  632. - Corrected clocks to work as in real tournaments.  Time is *added* when you
  633. reach time control; previously the clocks were simply set to the length of the
  634. new time period.  Also, when a player's flag falls, he still does not receive a
  635. new time allotment at the next time control, but his opponent does still
  636. receive more time if *his* flag has not fallen; previously, time controls were
  637. ignored for both players if either flag fell.  I forget who reported this bug.
  638.  
  639. - Despite one complaint, I kept the feature of changing both clocks when black
  640. makes time control, rather than changing each individually when the player
  641. involved makes it.  This is to avoid having it look like White is way ahead on
  642. time while Black is thinking about the last move of the time control period
  643. (i.e., when White has made time control but Black hasn't yet).
  644.  
  645. - Swapped EditPosition and Pause buttons to reduce danger of losing the
  646. game in progress by hitting EditPosition when you wanted Backward.  Thanks
  647. to Ove Lundberg for complaining (though it bugged me too).
  648.  
  649. - Added optional display of algebraic notation coordinates along left and
  650. bottom edges of board.  This was inspired by some code from Jean-Christophe
  651. Engel; thanks!
  652.  
  653. - Fixed a couple of problems compiling on IRIX; thanks to Michel Arsenault
  654. and Alan Walsh for bug reports and help with fixes.
  655.  
  656. - After hitting the Backward button we see the last move made instead of
  657. the word "Pausing" displayed.
  658.  
  659. - AIXV3 patch from Tom McConnell; thanks!
  660.  
  661. Mon Aug 10 18:40:47 PDT 1992 (patchlevel 23) mann@src.dec.com
  662.  
  663. - Fixed parser bugs in handling moves with rank or file disambiguator,
  664. e.g. N1f3 or Ngf3.
  665.  
  666. - Added code so parser can handle fully qualified algebraic, e.g.,
  667. Ng1-f3, N/g1-f3, Ng1f3, or even Pe2-e4.  The "P" and "/" work only for
  668. fully qualified moves, not generally.
  669.  
  670. Mon Sep 14 13:19:01 PDT 1992 (patchlevel 24) mann@src.dec.com
  671.  
  672. - The parser now detects when a move is ambiguous and returns an
  673. error, instead of arbitrarily choosing one possibility as it used to.
  674.  
  675. - The parser no longer munges the move it is parsing; in the past, for
  676. instance, it would remove the "x" from a move like dxc5 before echoing
  677. it to the screen.
  678.  
  679. - A move like fxe5 can no longer be interpreted as an e.p. capture if
  680. there isn't a pawn on e5 to be captured.  Previously this could happen
  681. erroneously if there were pawns on both f4 and f5, and the f4 pawn was
  682. capturing a piece on e5.
  683.  
  684. - A move like fxe6 or fe6 is now interpreted as an e.p. capture of the
  685. pawn on e5 if there is one there and e6 is empty.
  686.  
  687. - It's not really correct to write an ep capture of a pawn on e5 as
  688. fxe5; this should be written as fxe6 because e6 is where the capturing
  689. pawn ends up.  Nevertheless, the parser now interprets fxe5 as the ep
  690. capture f5xe6 unless there is a pawn on f4, in which case it
  691. interprets fxe5 as f4xe5.  By design, the parser does not flag fxe5 as
  692. ambiguous if there are pawns on both f4 and f5; instead it prefers the
  693. more legitimate f4xe5 interpretation.
  694.  
  695. Fri Oct 30 20:16:40 PST 1992 (patchlevel 25) mann@src.dec.com
  696.  
  697. - Added code to format moves in normal abbreviated algebraic notation
  698. (for example, e4, exd4, f8Q, Nf6, 0-0) instead of coordinate algebraic
  699. (for example, e2e4, e3d4, f7f8q, g1f6, e1g1).  Moves entered with the
  700. mouse or received from gnuchess are translated into this canonical
  701. format for display on the message line or in saved game files.  Moves
  702. read from game files are not translated, however; they are shown and
  703. saved just as they appear in the file.
  704.  
  705. - gnuchess now castles by sending us "o-o" or "o-o-o" (starting with a
  706. preliminary version of 4.0.pl60 that I have).  Added code to handle
  707. this.  The old format ("e1g1", etc.) still works too.
  708.  
  709. Version 2.1, patchlevel 0 -- Fri Nov 27 02:00:00 PST 1992 -- mann@src.dec.com
  710.  
  711. - Merged in code from John Chanak to make xboard a front end to the
  712. Internet Chess Server, and added several improvements of my own.
  713. (These include parsing end of game messages, loading the current state
  714. and previous history of a game that's joined in progress via "watch"
  715. or "load", automatic switch from board style 1 to 8 when needed,
  716. removing irrelevant buttons and adding some new ones, adding the
  717. useTelnet and gateway resources, and miscellaneous code cleanup, bug
  718. fixes, and documentation.)  Many thanks to John for writing and
  719. contributing the initial version of this code.
  720.  
  721. - Send "quit" to gnuchess before trying to kill it.  I needed this
  722. locally because sending a SIGTERM to rsh was not killing the remote
  723. program on some internal field test systems we have.
  724.  
  725. - Parser understands things that look like time indications, e.g., (0:12),
  726. instead of popping them up as comments.
  727.  
  728. - Improved error checking when trying to read from gnuchess.
  729.  
  730. - Saved games that start from other than the standard initial position
  731. now begin with a postion diagram as in saved position files.  The
  732. loader is modified to understand such save files.
  733.  
  734. - Added option to ring the bell after opponents' moves.
  735.  
  736. - Forward and Backward now change only the board display unless you
  737. are in ForceMoves mode.  Pause mode keeps new moves that are received
  738. from being displayed on your screen until you unpause (or use
  739. Forward).
  740.  
  741. - Pause, Backward, Forward, ForceMoves, and EditPosition now work from
  742. TwoMachines mode.
  743.  
  744. - The reason a game ended is now remembered even if you move backward
  745. and forward after it ends.  It is forgotten only if you make a move
  746. (which is as it should be---this is now a different game, which hasn't
  747. ended yet).  The message saying why the game ended no longer wipes out
  748. the last move.
  749.  
  750. - Attempts to move the wrong color piece or an empty square are filtered
  751. out in xboard instead of being passed on to GNU Chess or the ICS.
  752.  
  753. - Filename dialog pops up under the mouse cursor, so that it's got the
  754. keyboard focus if the window manager is using pointer focus.
  755.  
  756. - Uses "time" command of gnuchess 4.0 and following to keep clocks in
  757. sync.  Still works with older versions without this command; we test
  758. whether the command is present the first time each chess program is
  759. started.
  760.  
  761. 2.1 patchlevel 1 -- Fri Nov 27 02:45:00 PST 1992 -- mann@src.dec.com
  762.  
  763. - A last minute change before patchlevel 0 went out broke
  764. ParseGameHistory().  Immediately fixed in patchlevel 1.
  765.  
  766. 2.1 patchlevel 2 -- Fri Nov 27 23:30:00 PST 1992 -- mann@src.dec.com
  767.  
  768. - Many changes to get rid of picky compiler warnings and generally
  769. clean up the code.
  770.  
  771. - Fixed bug with PromoPiece in call to MakeAlg from MakeMove.
  772.  
  773. - Added autoSaveGames mode.
  774.  
  775. - Changed load{Game,Position}File resources to trigger automatic load
  776. on program startup.  Changed save{Game,Position}File resources to
  777. trigger automatic save after every completed game and on program exit.
  778.  
  779. - Changed Save{Game,Position} functions to append instead of
  780. overwriting if file exists.  Changed Load{Game,Position} functions to
  781. deal with multiple games/positions per file.
  782.  
  783. - Fixed bugs in Forward/Backward while in LoadGame mode.
  784.  
  785. - Fixed yylexstr() so calls to it can be interspersed with calls to
  786. yylex().
  787.  
  788. - If you move the comment popup, the next time it pops up it will come
  789. back where you put it.
  790.  
  791. 2.1, patchlevel 3 -- Tue Dec  1 19:40:40 PST 1992 -- mann@src.dec.com
  792.  
  793. - Bug fix: An extra Forward was required to skip over time indications
  794. in game files.
  795.  
  796. - Default fonts now vary with board size, and are chosen by pixel size
  797. instead of point size (since piece bitmaps have a fixed pixel size).
  798.  
  799. - Moves read from game files or received from ICS are now translated
  800. into canonical algebraic form just like all other moves.  Minor nit:
  801. If you use Reset while playing or observing a game in ICS mode, the
  802. game history (including the current board position) is lost, so the
  803. next move of the current game can't be translated.
  804.  
  805. - (Tried to put in a feature that recognizes the current game in a
  806. game file must have ended when we see the start of a new one, but had
  807. to disable it because we have too many false hits with the current
  808. parser, especially in gnuchess listing files.)
  809.  
  810. - Redid ParseBoard8 to use sscanf.  Code is a good deal cleaner now.
  811. Also, we now parse out the game number too, though we don't make much
  812. use of it yet.
  813.  
  814. - Added code to try to prevent user from watching and/or playing more
  815. than one game at a time.  There is a race condition inherent here; if
  816. we get more than one board from the game before our command to stop
  817. watching it takes effect, we'll think the user started it again.  Not
  818. clear how to fix this.
  819.  
  820. - Don't issue just "refresh" when watching a game; use game number.
  821. Upcoming new version of ICS may need this.
  822.  
  823. - ResetProc always clears title line now.
  824.  
  825. - Handles ICS message "* has restored your old game"
  826.  
  827. - Fixed bugs in code for loading old position files that don't start
  828. with "#" and for handling case where user asked for nth position in
  829. file but there aren't that many.
  830.  
  831. - Fixed bug in previous fix to yylexstr().
  832.  
  833. - Added AcceptMatch button for ICS mode.
  834.  
  835. - Handles ICS messages "Draw : neither player has mating
  836. material" and "Draw : White has no material, Black has no time."
  837.  
  838. 2.1, patchlevel 4 -- Sun Dec  6 02:55:42 PST 1992 -- mann@src.dec.com
  839.  
  840. - Initial processing for a new game being watched or played now
  841. happens when we see the first board image.  Removes the need to parse
  842. some messages and unifies some code.
  843.  
  844. - Now handles revised messages from new version of ICS.  New ICS is
  845. not released yet, so this code might change further.  Next patchlevel
  846. will remove support for old ICS; both are there now.
  847.  
  848. 2.1, patchlevel 5 -- Sun Dec  6 19:52:40 PST 1992 -- mann@src.dec.com
  849.  
  850. - Added AcceptMatch button and mention of 50-move rule for Draw button
  851. to man page.
  852.  
  853. - Corrected setting of mode to ForceMoves when game file ends or
  854. contains an AmbiguousMove or BadMove.  Previous bug was harmless.
  855.  
  856. - Removed gcc and CDEBUGFLAGS from Imakefile.
  857.  
  858. 2.1, patchlevel 6 -- Tue Dec  8 10:48:44 PST 1992 -- mann@src.dec.com
  859.  
  860. Thanks to Danny Sleator and Joe Peterson for bug reports.
  861.  
  862. - Added code to recognize "both sides are out of time" draw message
  863. proposed for next version of ICS.
  864.  
  865. - Added missing casts for compilers that distinguish enums from ints
  866. and missing cast in connect call.
  867.  
  868. - Removed code to say "refresh n" instead of "refresh"; was broken and
  869. wasn't needed anyway.
  870.  
  871. - Added workaround for minor bug in ICS; game number on first board
  872. can be wrong.
  873.  
  874. - Added code for more variants of messages about games being adjourned
  875. or aborted.  These messages need to be unified in new version of ICS.
  876.  
  877. - AcceptMatch button now works after a counterchallenge, too.
  878.  
  879. - Removed some code that uses an X11R5 feature, XrmGetDatabase.
  880. Without this, the auto font sizing code is harder to make work, so to
  881. keep my sanity I had to change it to affect only the fonts that appear
  882. in the main window and the comment popup, not the other popups.  Maybe
  883. this is better anyway.
  884.  
  885. - Changed searchDepth kludge back to using "help" instead of "bd"; the
  886. latter didn't work because the output contains a line starting with
  887. "White", so we think gnuchess is telling us that White won.  Oops.
  888.  
  889. - Kludged around bug in keeping comment popup where you put it by
  890. adding borderXoffset and borderYoffset resources that give the width
  891. of the borders added by the window manager.  Yucch.
  892.  
  893. 2.1, patchlevel 7 - Fri Dec 11 17:40:56 PST 1992 - mann@src.dec.com
  894.  
  895. - Track change to "Illegal move" message in new ICS.
  896.  
  897. 2.1, patchlevel 8 -- Fri Dec 11 17:54:18 PST 1992 -- mann@src.dec.com
  898.  
  899. - Bug fix: don't offer autosave when paused during LoadGame.
  900.  
  901. - Stripped out code for old ICS messages; new ICS is now installed.
  902.  
  903. - Use o-o and o-o-o to castle on ICS, not 00 and 000.
  904.  
  905. - MachineWhite, MachineBlack, and TwoMachines now work properly from
  906. LoadGame and LoadGame+Pause mode.
  907.  
  908. - LoadGame and LoadPosition display tail of filename (plus index
  909. number, if any) as title.
  910.  
  911. - Added CallFlag button and removed AcceptMatch.  CallFlag is more
  912. important with new ICS, and accepting the current match offer is easy
  913. with the new ICS command "accept" (can be abbreviated "ac").
  914.  
  915. - bug fix: DisplayMove would not display backwardMostMove - 1.
  916.  
  917. - Fixed glitches in the medium size outline king and rook bitmaps, and
  918. touched up the medium size solid king and outline queen.
  919.  
  920. - Added autoCallFlag mode.
  921.  
  922. - We now handle the output of the ICS oldmoves command, including
  923. parsing the game end condition.
  924.  
  925. - If the user takes back moves, we restore the clocks to the earlier
  926. settings.
  927.  
  928. - Implemented move legality checking code.  Moves made with the mouse
  929. or parsed from a file are checked for legality before being made.
  930. This is mostly in preparation for future extensions, such as
  931. human-human play.  For now it makes -noChessProgram mode more useful.
  932.  
  933. - Clocks are allowed to go negative.  This is mostly for ICS
  934. compatibility, but it affects gnuchess mode too.  Also, we give the
  935. time bonus when a player hits the time control boundary even if his
  936. flag is already down.  This choice is a bit debatable, but it makes
  937. things look better when you are in TwoMachines mode and gnuchess's
  938. time management screws up causing it to exceed its time limit.
  939.  
  940. - It seems that crashes inside sscanf when xboard is compiled with gcc
  941. (as on IBM PS/2 AIX, mentioned above, and also on VAX Ultrix 3.1) are
  942. caused by an incompatibility between gcc and the sscanf implementation
  943. on these platforms.  A workaround is to specify -fwritable-strings to
  944. gcc (see the gcc documentation).  Added info on how to do this to the
  945. Imakefile.  Thanks to Tom McConnell for this information.
  946.  
  947. - Bug fix: A user move when in LoadGame+Pause mode was resuming the
  948. game load instead of putting us in force mode.
  949.  
  950. - Handle ICS messages when an "abuser" forfeits a game by
  951. disconnecting and when a game is aborted ("removed") by an
  952. administrator.
  953.  
  954. - When starting to observe or play an ICS game, don't draw board in
  955. initial position and then immediately redraw it in the current
  956. position.
  957.  
  958. - parser bug fix: It now really works to leave off the piece a pawn is
  959. promoting to and let it default to queen.
  960.  
  961. 2.1, patchlevel 9 -- Fri Jan 22 19:08:27 PST 1993 -- mann@src.dec.com
  962.  
  963. - Bug fixes to queen move disambiguation.  Bugs showed up only when
  964. promotion resulted in more than one queen on the board.
  965.  
  966. - Added substitutes for bzero, bcopy, and gethostname for Solaris
  967. SVR4.  Thanks to Michael Grant.
  968.  
  969. - Removed "static" declaration from yywrap for compatibility with IRIX
  970. version of lex.  Thanks to stiller@blaze.cs.jhu.edu.
  971.  
  972. - Bug fix: In EditPosition mode, dragging a piece onto a square border
  973. would make it vanish.  xboard wasn't distinguishing this case from
  974. dragging the piece off the board.  Thanks to Matthew Kidd.
  975.  
  976. - Bug fix: A recent change to PromotionCallBack had broken
  977. underpromotion to a knight.
  978.  
  979. - Handle ICS message "mann asserts a win over manntest, who disconnected."
  980.  
  981. - Bug fix: LegalityTest was failing to test whether a pawn move was
  982. illegal because the move would discover a check.
  983.  
  984. - ICS host name can now be in numeric format; for example 128.2.232.4.
  985.  
  986. - Entering Force Moves mode clears "flag has fallen" messages from display.
  987.  
  988. 2.1, patchlevel 10 -- Mon Feb 15 10:19:31 PST 1993 -- mann@src.dec.com
  989.  
  990. - Added telnetProgram resource in case "telnet" is not the name of the
  991. telnet program.
  992.  
  993. - Bug fix: entering EditPosition mode with black to play highlighted
  994. White's clock instead of Black's.
  995.  
  996. - Fix to error handling in ReceiveFromProgram.
  997.  
  998. - Bug fix in disambiguating pawn moves like "ed".
  999.  
  1000. - Avoid trying to select on a pipe when using System V.  Needed to
  1001. copy some code from InitChessProgram() up into establish().
  1002.  
  1003. 2.1, patchlevel 11 -- Sat Jun  5 00:01:01 PDT 1993 -- mann@src.dec.com
  1004.  
  1005. - Removed April Fool code
  1006.  
  1007. - memcpy call had arguments in wrong order.
  1008.  
  1009. - Added code to deal with "wild" games on ICS.  This includes allowing
  1010. castling with the king on d1 or d8, which is allowed in wild(1) games
  1011. if the king started there.  Notation is o-o to castle "short"---to
  1012. whichever side the king is closer to---and o-o-o to castle "long."
  1013. Right now wild castling is always allowed by xboard; we rely on ICS or
  1014. gnuchess to reject it when we aren't really in wild mode.
  1015.  
  1016.