IOB toolkit
                           ===========

V0.04, pjw, February 23rd 2018, altered names to IOB..

Compatible with SMSQ/E and, apart from IOSUML%, QDOS and Minerva


Fetch string/bytes

       er% = IOBFMUL%([#ch%;] timeout%, buflen%, str$)
       er% = IOBFLIN%([#ch%;] timeout%, buflen%, str$)

      where:  #ch% is the channel number to use (default #3)

              timeout% [-1,0..32k] allow this many frames to complete

              buflen% is the size of the string buffer

              str$ contains the string to send to the channel.

       er% error code: Soft errors: NC, EOF, BFFL

       Hard errors: ICHN, etc

Note: LF is included in str$ in IOBFLIN%, and must therefore be
accommodated by the size of the buffer. In the case of a Buffer Full error,
the terminating character is undefined.

If you use IOBFLIN% in a window channel, the cursor appears and the string
may be edited; it works a bit like INPUT. This is not the case with IOBFMUL%.
However, you can still type in characters only they wont be echoed on
screen, and any editing keystrokes, including <ENTER> will be regarded as
part of the string! It will only return when the buffer is full, on
timeout, or if <break> is pressed (where possible).


Send string:

      er% = IOBSMUL%( [#ch%;] timeout%, str$)  : rem Send bytes
      er% = IOBSUML%( [#ch%;] timeout%, str$)  : rem Send Untranslated bytes

      where:  #ch% is the channel number to use (default #3)

              timeout% [-1,0..32k] allow this many frames to complete

              str$ contains the string to send to the channel.
                  Any residual bytes in string$ that could not be
                  transmitted before timeout, or due to error, are
                  retained in str$, and may be used for a later retry

              er% error code: Soft errors: NC, DVFL

              Hard errors: ICHN, etc

IOBSUML% is similar to IOBSMUL% but it does not translate the characters.
Therefore, the setting of translation tables is ignored as well as the
parameter in the device open call (e.g. SERd, SERt, PARd, PARt). A safe way
of sending graphics data or control codes to the printer, as they will never
be translated into other byte patterns.

IOBSUML% only works on SMSQ/E!

This updated version (V0.04) has not been used in anger, so not is not as
thoroughly tested over meny years, and across many platforms, as previous
versions have! So please report back if you find any bugs!

Errors, improvements and feedback to pjwitte at googlemail d0t com