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