------------------------- AmigaOS 3.2 project ------------------------ Changes for release 47.1 (24.12.2018): - Sending multiple ACTION_WAIT_FOR_CHAR would have confused the console considerably, potentially causing even crashes. - Error conditions returned from the output device, i.e. typically the console.device, were not forwarded to the initiator of a con-handler request. - ACTION_WAIT_FOR_CHAR includes the number of buffered lines as secondary result code, but did not count the number of lines in the paste and stack/queue buffer correctly. - ACTION_WAIT_FOR_CHAR did not return a zero return code in case it was terminated by an EOF, but instead returned 1, indicating that characters are available - even though they are not. - ACTION_WAIT_FOR_CHAR did not terminate early with a result code one when received at a time when lines are in the paste or stack/queue buffer, though no data was in the keyboard output buffer. - The CSI/ESC sequence parser was hopelessly incomplete and did not cover even some elementary cases correctly. It is better now, but cursor moves in vertical direction by more than one unit are still not supported - though there is not really a support case for them either. - ESC[ was not accepted as replacement sequence for CSI as keyboard input either. This would have caused failures when using anything but the console.device as input. - Due to a mixup of the paste buffer and the buffer for QUEUE and STACK, some pasted characters may have never shown up in the output, though were received by the console, or some STACKed or QUEUEd lines may have appeared as part of a console paste. - When opening the console in RAW and later on switching to the cooked (aka "well done") mode, the console forgot to re-enable the window close event, thus that the window close gadget remained non-working. - An ACTION_DISK_INFO disabled the auto-ability of the console completely without loss. Now the console supports ACTION_UNDISK_INFO to restore the auto-feature of the console. - Due to an off-by-one error, the console always read the terminating (or not) NUL character of a pasted string, and hence may have read from unitialized memory. The NUL was then filtered out later on, though the access was still made. - The console forgot to abort a pending read request from the console.device when closing down, potentially triggering a crash of the device. - ACTION_FORCE, ACTION_QUEUE and ACTION_STACK forgot to open an auto-window, potentially deadlocking the system. At least, these packets would not have worked without a window. - The console window is now opened with the new-style menu flags, causing Ed menus to appear black on white as all other 3.2 menus. - ACTION_GET_VARS retrieved a pointer to the global vector of the BPCL source and later on a pointer to the BSS segment of the console. Since this segment is changing and will continue to change, no use could have been made of it. This packet was hence removed. - ACTION_REPLACE and ACTION_PEEK were not compiled in and their purpose was unclear. They have been removed. - ACTION_SIZE_HIST, ACTION_SET_HIST and ACTION_GET_HIST were never compiled into the code and also removed. - All history functions have been removed. Managing the history is now the job of the shell. - The console supports now the "medium mode" (besides "raw" and "well done") which is activated by SetMode(fh,2). In this mode, the console sends CSI sequences upon the current user input on TAB, Shift+TAB and the up and down arrows. The V47 shell uses these sequences to handle the history and the tab expansion itself. Finally, some good division of work. Changes for release 47.2 (26.12.2018): - Considerably simplified the code to generate the console control codes for output formation. The new code combines many of them in one go and thus generates more efficient output. - Added a couple of workarounds to ensure that the console.device keeps lines linked that belong together. This required some restructuring. In particular, if the cursor is placed by cursor movement instructions at the beginning of the new line, the code now ensures that this new line remains linked to the previous line. - In case input and output overlapped, the previous code may have caused graphical glitches. The code now only allows input once all previous input has been processed and is output correctly. The problem is that insertion and deletion operations do not commute, i.e. they cannot be buffered up and must be processed in precisely the order they arrived. - The con-handler is now capable enough to replace the aux-handler if mounted correctly. A small handler-stub is sufficient to replace it. - If not operating on the console.device, the previous code attempted to implement an auto-linefeed functionality by inserting a \r after every \n printed, though did so by modifying the output buffer of the printing program, which is a big no-no as the strings may be even in ROM or write-protected. The new code adopts the same strategy as the (V45) aux-handler by breaking up the output buffer now on line feeds. Changes for release 47.3 (26.12.2018): - A couple of optimizations. In particular, ACTION_DISK_INFO can safely always return the IO pointer as it forces the window open, and the bs_direct cursor movement counter can safely be merged into the "direct" counter. - Forgot to WaitIO() after AbortIO() on timer events. Changes for release 47.4 (31.12.2018): - As the shell now clears the input itself before printing the bell, the special logic to allow printing it even if something is in the keyboard buffer has now been removed. - CSI J is now replaced by CSI P if only a single character is removed. This may be more efficient on slow machines. Changes for release 47.5 (01.01.2019): - Pointless micro-optimizations. One more case in which CSIJ can be replaced by CSIP. Changes for release 47.6 (10.01.2019): - A / in the title string can now be escaped by a \, and the \ (of course) with another \, i.e. \/ in the title string expands to /, and \\ to \. Changes for release 47.7 (17.2.2019): - Closing the window (or an EOF in general) now not only terminates the input, it also clears the input buffer such that any junk pending on the current input is ignored and not transmitted to the client. Changes for release 47.8 (24.2.2019): - The CON:-Window can now optionally be equipped with an iconification gadget if the path includes the ICONIFY option. For that, the V47 ConClip version must be installed. Changes for release 47.9 (28.2.2019): - Opening a RAW: window created a MuForce hit as the startup message was non-zero, though still not a string. - Pressing RETURN at the start of a line erraneously triggered the line-glue logic and left a non-sense character at the end of the line above. - Erasing the second character at the second line concatenated to the line above removed erraneously the concatenation between the two lines such that the lines where not broken up correctly when the window was resized. Changes for release 47.10 (2.3.2019): - Changed to the new interface of ConClip. This release no longer opens the workbench itself, but rather leaves this to ConClip. Same goes for adding and removing the AppIcon. - In case iconification did not work, this no longer closes the window, but just does nothing. - If showing the window again, it is also made the active window. Changes for release 47.11 (12.5.2019): - Due to a missing bracket, it was not possible to start a new AUX: console in RAW-mode. This got fixed. Changes for release 47.12 (8.8.2019): - Running TAB expansions can now be aborted by just continuing to type. Changes for release 47.13 (2.9.2019): - ACTION_DISK_INFO clears now the VolumeNode if there is no window or this is an AUX: console. Changes for release 47.14 (16.11.2019): - ACTION_FORCE_INPUT misbehaved in case the number of input characters was zero. Changes for release 47.15 (22.11.2019): - In case window coordinates are missing, the window opens now under the cursor position, following the policy of all other 3.2 window programs. Changes for release 47.16 (27.11.2019): - Added support for AppWindows, i.e. icons can be dragged into the shell. This requires support from ConClip 47.3. Changes for release 47.17 (12.12.2019): - In case the cursor moves now while a tab expansion is active, the expansion is aborted. Changes for release 47.18 (29.11.2020): - Do not signal the shell to abort tab completions for any key, but rather for select actions like ctrl-c, shell history operations and similar. Changes for release 47.19 (5.12.2020): - Buffer input during tab completion processing by the shell and replay input after the shell has finished updating the command line to avoid lost input and several weird issues. Tab completion processing by the shell (filesystem walk etc) is currently only abortable by using ctrl-c.