Possible improvements
---------------------

5. gray background for dark squares in 1-bit mode.  Do this like
xchess does.

12b. scoresheet text widget.  Current move should be highlighted.
Scoresheet could include comments or just have moves; latter is easier
to fit on screen.

16. Allow move typein from keyboard.  Maybe by typing into scoresheet,
maybe a separate pop-up dialog.  See also 64.  Could allow multiple
moves when in EditGame mode, to support X cut and paste from mail and
news.

20. Some way to back up, explore variations, then return to the main
line and restore moves we backed out.  Should also support exploring
side branches while loading a game file.  Push/pop buttons?  Button to
fork another xboard in same state as current one?

20a. Allow side branches to be remembered in game files (and
understood on LoadGame).  Use PGN variation notation.

42. Could generate ICS-style elapsed times on each move for games
played against gnuchess.  This should probably be optional.  The same
option could suppress the times on moves from ICS, maybe.  (See also 46.)

43. Strength numbers from ICS are bogus if you use Backward/Forward.
They are nice to have, though.  Maybe xboard should generate correct
ones itself.  This could be done in non-ICS mode too.

46. LoadGame doesn't display ICS-style elapsed times on moves.  To do
this would require look-ahead or a parser change.  Either is doable
but ugly.  A benefit of look-ahead is that one could use it to pop up
comments along with the move they follow instead of on the next
forward step.

49. It might be nicer to step slowly through movelists obtained from
the ICS oldmoves command, as with LoadGame, instead of jumping to the
end.

51. Look into not killing the chess programs unless really needed.
Should really never be needed except possibly when we need to stop one
while it's thinking.  Even then a SIGINT should get it; we just have
to deal with the bogus move it makes.

59. Make sure comment popup is wide enough considering font in use.
Assume 80 characters is enough?  [Not a problem in WinBoard.]

59a. Alternatively, allow wrap in comment popup.

61. Darooha suggests having a separate small window for ICS typein, so
that ICS messages that come in while you're typing don't mix with what
you're typing.  Your typing would be copied to the main ICS window
when you hit return.  WinBoard needs this even more than xboard
because Windows consoles don't have the ^R (retype line) feature of
Unix.  Also, Windows console fonts are ugly.

61a. Windows 95 doesn't have scrollback on consoles, so having my own
implementation is even more desirable.

62a. Support series of time controls as in recent gnuchess versions
(and real tournaments!).

62b. Perhaps (with gnuchess mods or some external help from xboard)
gnuchess could also support the kind of clock where you get K seconds
per move, plus a reserve of J seconds per game that is used when a
move takes more than K seconds.  The degenerate form of this with J=0
is desirable in itself.

64. Allow move typein in algebraic.  Could require coordinate notation
and highlight the ranks/files as typed, or could accept general
strings and parse with move parser.  Latter seems better.  Require a
special key to start, or any letter?  (Latter conflicts with xboard
shortcut keys, but would work on WinBoard.)

65. Animate piece while moving.  (I think this is too hard with Athena
widgets.) 

68. WinBoard has some features not in xboard:
68a. LoadGameOptions dialog             (good to add)
68b. SaveGameOptions dialog             (good to add)
68c. TimeControl dialog                 (good to add)
68d. Help.		                (don't care)
68g. Font dialog.			(leave out)
68h. Colors dialog.			(leave out)
68i. Board size on Options menu         (good to add)

69. xboard has some features not in WinBoard:
69b. Alternate fonts specified by name.      (need)
69c. Font size selection by pattern fill-in. (leave out)
69d. Alternate bitmaps specified at runtime. (leave out)
69e. Error message dialog is non-modal and disappears if you make a move.

74. Observe multiple games.  Hard.

80. Clone command.  Saves current game to a file foo, then starts up
another copy of xboard with -lgf foo.  Should probably note current
state of some options and give command line flags to set them the same
way in child.  What about -ncp mode, though?  Might want that to be
different.  Would be nice to have a -moveNumber flag to position the
child to the same move number in the current game.

81. Measure and warn of lag in ICS mode, or some other kind of
feedback to show the lag.

82. Optional highlights: (a) Square that was downclicked while making
a move. (b) From and to squares of last move (by opponent?).

85. Rolling across menu bar with mouse button down should scan through
menus.  How to do this with Athena widgets?  (Not a problem on
WinBoard.)

87. Optional long notation, at least on screen (e.g., Bc1-b2). (user
request)

89. Notice when user has selected a large font in -titleInWindow mode,
and make sure the title line is wide enough for most messages; use
Small format with title on separate line if not.

91. Would be nice to have an option to overwrite save file instead of
appending.

93. Auto font size for menu bar (in X) and move display window?

95. "Have the clock indicate how long the computer/player has been
thinking for when the -st option is used. This should be how long for
the current move only." (Dino Dini)

96. "Have a menu option to give gnuchess the 'both' command to play
both sides. Useful for assessing which side is better off in a
position. I know that you can start another gnuchess, but that is very
wasteful of system resources." (Dino Dini) [may be hard]

97. "Have the ability to change the level of the gnuchess during a
game. For analysis purposes, sometimes it is useful to have the
computer think really hard about certain positions." (Dino Dini)

98. Reorganize the source and split it into more files.

107. Changing time control during a game could be made to work.
Current (WinBoard only) way of changing at start is suboptimal.

108. Could add search depth and time per move to (WinBoard)
TimeControl dialog.

109. Could maybe add the rest of the init options to the option
dialogs: initString, whiteString, blackString, first/second
Host/ChessProgram, remoteShell, telnetProgram, ics Host/Port,
useTelnet, gateway, debugMode, clockMode, etc.

117. Faster square drawing; precompute each piece/square color combo.
Mostly useful in WinBoard.

131. WinBoard: "Save settings" command to rewrite .ini file.  Options
menu or file menu?  Exactly what is saved?

133. WinBoard: Comm port support needs more work.  Can't change port
while running (so what), can't choose settings in init file or command
line (bad!).  Maybe program should use existing settings at open time
instead of setting its own defaults?

137. Split up winboard.h to avoid annoying messages from dialog editor.

138. Split winboard.c in two?

139. Be sure that "White's flag fell" and the like always go away when
they should; some gameMode changes may not be doing this.

140. LoadPosition needs better checking for invalid data.

142. xboard needs a real file chooser dialog.  Jeff Woolsey submitted
code to merge in the one from Ghostview, but said it works only on
X11R5 or later.  I have not yet tried his code or looked to see if it
could be made to work on X11R4.

144a. Current method of filtering out shouts, etc., doesn't work
fully, because the patterns insist on matching to the end of line.  If
you get a partial line, and something in it looks like a board, it
will match that.  There may be other bugs of this sort too.

145. eco popup, similar to book popup (Peter Chang).  Difficult due to
program-unfriendly format that gnuchess returns the eco info in (e.g.,
built-in pager even for gnuchessx), and bugs where too much info is
returned.

146. Bug: if you invoke EditTags and hit OK while a LoadGame is in
progress, the LoadGame stops with a bogus "end of game file".  This is
because the parser can only be working on one file or long string at a
time.  Similar problem if you try to build a game list while a game is
loading.  Could fix this (as well as 46 and 49) by having LoadGame
read in the whole game, then step through the in-memory movelist,
instead of calling the parser on each step.

147. Improve display of held pieces in bughouse mode, putting them
closer to the player's side of the board, and perhaps using icons (and
allowing dragging from the icons to drop a piece).  Actually, moving
the clocks would be beneficial too, so that it's easier to visually
associate the right clock with the right player when looking at two
boards during a bughouse match (with two copies of xboard running).
Maybe multiple window layouts should be user-selectable.

148. Support Crafty as a (better) alternative to GNU Chess.

149. The /telnet flag on WinBoard should work as on xboard.  There is
no longer a "telnet service" on Win32 systems that provides access to
client-side telnet, so the existing behavior is useless.  Working as
on xboard would be slightly more useful; for example, someone could
implement a console version of timestamp and/or timeseal for Win32, or
someone might have a third-party telnet or firewall-telnet program
that can function as a console app.

150. Keep track of castling availability, en-passant availability, and
FEN half-move clock (for 50-move rule), pass the availability
information to the move generator through the existing interface, and
load/save it in the FEN code.

151. Keep better track of which set of variant rules is in force
during a game, provide a way to choose the ruleset in Edit Game mode,
and load/save it as a PGN tag.  This would let us deal better with
things like wild castling (in shuffle variants where the king started
on d1 or d8), piece drops, and contact vs. non-contact mate (in
bughouse).

152. Generate the info file, man page, perhaps html, and perhaps even
the WinBoard help file from the same sources.  Right now,
substantially the same text is duplicated in three places.  This is
not good.

Old ideas I no longer think are so good:
---------------------------------------
3. human-human playing?  No, use ICS.

12a. analog clocks

12c. jail

20b. Alternative: Have a set of memories accessable via the menus into
which you can store, say, up to 10 positions (with all moves to that
point and the clock times). (Dino Dini)

21. Maybe make LoadPosition parser smarter: able to skip arbitrary
garbage before the position, able to tell when file doesn't contain a
position, able to read positions in other common styles.  (Tricky if
some use the opposite case convention.)

23. Maybe allow LoadGame from SetupPosition mode, or even ForceMoves
mode?  No, I think it's better to reset the position first.  A game
file can now include a starting position, which seems better than
loading position and subsequent moves separately.

26. After sending move to machine, wait for positive acknowledgement
or error message before proceeding; don't allow other events first.
This will fix some race conditions and obscure bugs, and allow some
new features---e.g., selecting Machine White when white is not on
move.

27. Maybe add some optional screen flash when gnuchess makes its move.
No, I think -bell and the use of Forward/Backward to review moves
without retracting them is good enough.

57. The move parser is slow on low-powered machines (e.g., VS2000).
This is annoying when parsing ICS "oldmoves" or "moves" output to
start observing a game.  Can it be speeded up?

63. Keyboard interface for moving pieces.  Ideas: Arrow keys move
selection highlight around.  Highlight not visible until first key is
pressed, then starts (where?).  <Enter> "picks up" piece, then arrow
keys again to select destination.  <Esc> aborts move (no touch move
here!).  <Enter> again to put down piece on new square.  Could maybe
have similar selection highlights on moves made with mouse.  In
EditPosition mode, <Insert> brings up piece menu and <Delete> empties
current square.  (These are PC keyboard keys.  What to use on vanilla
ASCII keyboard with X?)  Also, a-h keys could move highlight to a-h
file and 1-8 keys to 1-8th rank.

71. Allow restart after ICS logout instead of exiting?

72. Allow switching among ICS, NCP, GNU modes??

73. Rename noChessProgram mode?  Revamp command line options for 3
main modes.

125, 127, and 127a are academic because NT 3.5 and Windows 95 don't
have the telnet service.

125. Automatically start Windows NT telnet service if needed?

127. WinBoard: In useTelnet mode, we seem to get an extra NUL
character after each \n\r sequence sent by ICS, and the NUL prints as
a blank.  At least I think that's what's happening.  Probably a bug in
NT telnet service; telnet protocol says send \r not followed by \n as
\r\0, and evidently NT telnet is not stripping the \0 back out.  ** I
put in a kludge to work around this, and it works, but bug in telnet
should be reported to Microsoft.  Should check whether it is already
fixed in NT 3.1 or 3.5.

127a. WinBoard: Another apparent telnet server bug: sometimes hangs
after connecting---no login prompt.  Hangs after "RCVD DO 24 (don't
reply)" But it SHOULD reply to this (with WONT).  Sometimes it does,
and then things work fine. ** May have been a bug in NT beta only;
seems OK in NT 3.1.


127b. WinBoard: We also seem to get bogus NULs when typing while ICS
output is being displayed.  I don't know where those are coming from;
could be a concurrency problem accessing console from different
threads, or something entirely different.  ** This seems to be gone
now, not sure why.

141. Merge Kevin Ziegler's term-ification code into xboard?

