Fix multi-leg promotions Two-leg promotions were sent as gibberish to the engine (and thus rejected). It was also pretty annoying that XBoard's own idea of what should be promotions was still applied even when highlighting denied promotions (because the zone was different than assumed, or a promotion-on-entry rule applies). Now the legality markers from the GUI move generator are different from the red and yellow markers from an engine highlight command, and the latter are taken as a denial of promotion, and will suppress it.
Erase markers before processing highlight FEN Markers from the Betza generator were only half-heartedly erased when a color-FEN camein through a highlight command, because FENs tend to skip empty squares in stretches. This was already fixed for the legal[][] array, but now it is fixed for the markers itself as well.
Allow engine to force user to make non-standard promotion The engine can now force an unexpected promotion on moves entered by the user, by marking the to-square of such a move in blue. Releasing a piece on such a blue square will then defer further processing of the move (after having send the 'put' command to the engine) until reception of a 'choice' command to specify what the piece should promote to. This solves problems in Maka Dai Dai Shogi, where a piece capturing a contageous piece would only be allowed to promote to its normal promoted form if the to-square was marked in purple (offering a P / +P toggle).
Fix saving theme The option -trueColors is now saved with the theme settings when a pieceImageDirectory was given in XBoard, and the piece colors are saved when this option is off even with a piece directory. The square colors are now also saved when useBooardTextures is on, but the textures are transparent. For this the transparency also had to be made visible in the WinBoard front end, (by moving the flags for it to backend.c), but always stay at the default 0 there.
Fix deferral on sweep promotions When a sweep in the to-square due to a highlight-induced promotion had left the original piece as choice, the piece would be considered to promote to itself (i.e. the move would get the promoChar for its piece type), rather than to not promote at all. Some engines choked on this (HaChu). Now such a move is not considered a promotion.
Prevent crash on help-click for engine without manual The error message of "man w xxx" when no man entry for xxx exists appears on stderr, which is not caught by popen(). As a result the path to the man file gets set to an empty string, and saveStrCpy is not so save that it can copy an empty string, but quits XBoard through an ASSERT in that case.
Allow engine to specify holdings larger than board height On reception of a 'setup' command we now automatically increase the number of board ranks to the holdings size if the latter is larger, but remember the number of added 'dead ranks'. When parsing a FEN these ranks are blacked out, and on generating a FEN they are ignored. This makes FENs behave like the board was not enlarged.
Implement two-kanji -inscriptions When the -inscriptions option specifies a UTF8 string that starts with the character '2', it will assume the symbols that follow have to be drawn on the pieces in (vertically stacked) pairs of somewhat smaller size than it would use for single-character inscriptions. An optional '1' at the start of the string could be used as an escape to be used when the first character we want to inscribe would be a '2'.
Prevent sending empty line to engine after multi-leg move As the pmoves are stored internally with a linefeed suffixed to them, this linefeed was mistaken for a promotion character in the multi-leg printing formats, and led to an extra empty line being sent to the engine on non-promotion multi-leg moves. Now a linefeed is replaced by a null character before sending the move.
Fix dragged piece during promotion popup When dragging to a promotion square, the piece would keep 'hanging' in the release position while the promotion popup was shown. (This usually covered it, but not always.) As after a choice is made the move will be animated, it was more logical to put it back on the from-square.
Add option -pgnTimeLeft to print clocks in extended PGN info When set a persistent option -pgnTimeLeft makes XBoard save the time left after the move in the score/depth comments, rather than the time thought about the move. A leading sign will allow the reader to distinguish the two. The time is always printed in integer seconds.
Regularize Chu-Shogi piece assignment The pieces in Chu Shogi have been reassigned to other internal codes, so that juggling of images in variant cu is no longer needed. This became possible by the flexible assignment of promotion partners. It makes it easier to use Chu Shogi as parent variant without having to worry about a non-stadard meaning of the -pieceToCharTable. The built-in move generator had to be changed to work for the new assignment.
Allow group specification in ArgInstall options The option that add a line to the existing multi-line options (e.g. -installTheme which adds to -themeNames) now can specify the line should be added within a group, by prefixing the line with "# GROUPNAME\n" (where \ and n separate characters). If a group of that name already exists, the line to add is insert immediately after the group header line. If not, the group is created, by adding both the group header line and the line to add, as well as an "# end" line to terminate the group.
Save programStartTime in settings file rather than save time The -saveDate time stamp is used to decide whether XBoard has seen options added to the master settings file before. But it looks only to the master settings file at stratup. So when we save settings we now put XBoards startup time as -saveDte in it, so that installs when XBoard was already running would still find their way into the user settings file.
Also supply shortcut for start directory in GTK file chooser The first shortcut entry in the Places list is now created for the directory in which XBoard started (which is $CHESSDIR if that was set). This is suppressed if it would be a user home directory, as this would already be in the list by default.