Hack to bypass timeseal decoder The decription of timeseal data is now done by the ICS itself, rather than by the external timeseal decoder process. The process is still started, though, and the logic for testing whether it was initialized and should be used is not altered. The ICS just refrains from ever sending any data to it for decoding.
Fix sudden crash-proneness Since October 2016 the ICS crashed within minutes, when games are going on. The cause seems to be a reversed test for bughouse in game_ended(), which informed players of the availability of the bughouse partners of the ending game if and only if the game was not bughouse. Accessig bughouse partners only when they exist seems to have solved the problem.
Ameliorate name-length hack Structs t_dirs and t_trees declared only a single character for the name field, but were put in allocated memory so that it could harmlessly overrun to the required size. On compilers that explicitly check for buffer overruns this caused a crash. Now 100 char are declared, but the actually allocated memory will be smaller (as small as before, and thus still large enough to hold the actual name).
Allow signed integers as command parameter Strings starting with '-' (or other punctuation) were classified as a single-character text parameter, making entry of negative numbers impossible. A parameter described by 'j' in the command list now indicates a '-' followed by digits should be interpreted as a negative number.
Fix crash after recursive aliasing The ICS translatese some commands (like 'storedmoves') to others (like 'smoves'), which are then also subject to aliasing. Defining the reverse substitution as alias then leads to infinite recursion. The recursion is now limited to 10 levels, and makes the command fail otherwise.
Alter Makefile to force 32-bit compile The code is not 64-bit compliant, and crashes when run as 64-bit compile. The first such crash already occurs when initializing, and could be traced to a vasprintf in fopen_p. Presumably the list of variable arguments cannot handle it that pointers and ints are not the same size. Rather than trying to fix this (and leaving an unknown number of potential other problems), we stick to 32-bit.
Allow mamer addtotourney to do late-joins The score parameter of AddPlayer is now used to indicate it was invoked by addtotourney rather than join (info passed in pendingList through the Player.floatValue field), as in the existing code it was only called with score = 0. anyway. When invoked from addtotourney, the command is also allowed in 'closed' tourneys. In this case it would not only add the player, but also clear its color counts and give it a 0 result against the BYE.