------------------------- 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.
