MULTICS TECHNICAL BULLETIN MTB756-2
To: MTB Distribution
From: Ron Barstad
Date: April 13, 1987
Subject: Video Support for MOWSE
-----------------------------------
A description of the functionality and external interfaces of
Multics software to support video mode within the Multics Online
WorkStation Environment (MOWSE). A description of MOWSE
interfaces referenced in this document may be found in the
following MTBs.
MTB-740 MOWSE Overview
MTB-741 MOWSE Design, Commands and Subroutines
MTB-742 MOWSE Background File Transfer (BFT) Facility
MTB-743 MOWSE Terminal Emulator
Also referenced is
MTB-708 Local Echo Negotiation
-----------------------------------
Comments should be sent to the author:
via Multics Mail:
RBarstad at System-M
via Forum:
>udd>m>jms>mtgs>workstation_working_group (wwg)
via telephone:
(HVN) 862-3674 or (602) 862-3674
_________________________________________________________________
Multics project internal documentation; not to be reproduced or
distributed outside the Multics project without permission of the
Director of MDC.
MTB756-2 Video Support for MOWSE
CONTENTS
Page
1: Introduction . . . . . . . . . . . . . . . . . . . . . 1
2: Functional Overview . . . . . . . . . . . . . . . . . . 1
3: External Interfaces . . . . . . . . . . . . . . . . . . 1
3.1: Entry Points in ws_tty_ . . . . . . . . . . . . . . . 2
3.2: Workstation Interfaces . . . . . . . . . . . . . . . 18
3.2.1: Control message example . . . . . . . . . . . . . . 18
3.2.2: Sending Text Example . . . . . . . . . . . . . . . 19
3.2.3: Control Message Format . . . . . . . . . . . . . . 19
3.2.3.1: Control Message Types . . . . . . . . . . . . . . 19
3.2.3.1.1: Break table . . . . . . . . . . . . . . . . . . 20
3.2.3.1.2: TTY modes . . . . . . . . . . . . . . . . . . . 20
3.2.3.1.3: Control order . . . . . . . . . . . . . . . . . 21
3.2.3.1.4: Read count . . . . . . . . . . . . . . . . . . 21
3.2.3.1.5: Text . . . . . . . . . . . . . . . . . . . . . 21
Video Support for MOWSE MTB756-2
1: INTRODUCTION
This document is a short functional description of the Multics
modules to support video mode in the Multics Online WorkStation
Environment (MOWSE). For a description of MOWSE functionality
such as io attachment and video design considerations refer to
the MOWSE MTBs, especially section 6 of MTB-741. A description
of the type of echo negotiation used for video support is
included in the MOWSE MTBs as well as MTB-708 "Local Echo
Negotiation". Since MTB-708 describes the meaning of such
functions as "read with echo", and "read with no echo" and
others, those descriptions are not repeated here.
2: FUNCTIONAL OVERVIEW
Once MOWSE is invoked on the workstation and mowse_i/o is
attached via the attach_mowse command, and WSTERM is running,
video may be initiated with the "window_call invoke" command.
This results in video_utils_ making the proper video io
attachments and calling the ws_tty_ entry points instead of the
hcs_$tty_ entries.
The modules described here include
ws_tty_.pl1
ws_tty_main_.pl1
ws_tty_mgr_.pl1
ws_tty_read_.pl1
ws_tty_write_.pl1
ws_trace_.pl1
and are known collectively as simply "ws_tty_". The module
ws_tty_ is in fact simply the transfer vectors for all external
entries.
3: EXTERNAL INTERFACES
Functionally, ws_tty_ is a filter between tc_io_ and iox_. Text
destined for the workstation screen is reformated by ws_tty_ and
passed on with a call to iox_. Likewise, iox control orders are
intercepted and some are acted on before or instead of passing on
to iox_. Characters typed at the workstation are passed to
ws_tty_ by iox_ and reformated before being passed on to the
caller of ws_tty_ who requested the characters.
MTB756-2 Video Support for MOWSE
3.1: Entry Points in ws_tty_
ENTRY: ws_tty_$abort
This entry aborts current i/o and resets the read or write
buffers and stops echo negotiated input.
USAGE
dcl ws_tty_$abort entry (ptr, fixed bin, fixed bin, fixed
bin(35));
call ws_tty_$abort (iocb_ptr, reset_switch, state, code);
ARGUMENTS
iocb_ptr
points to the I/O control block of mowse_terminal_. (Input)
reset_switch
indicates whether read or write are to be reset. (Input)
1 reset read
2 reset write
3 reset both read and write
state
indicates the tty state. (Output)
| 0 unknown
1 ignored
2 listening
5 dialed
code
is a standard status code. (Output)
| A code of error_table_$no_io_permission means that WSTERM is
| not connected. The code error_table_$no_iocb is returned if
| the iocb pointer is null. In addition the code may be any of
| those returned by iox_$control for the control orders
| "get_terminal_emulator_state" and "abort". A non-zero code
| means that the abort was not sent to the workstation.
|
| PROTOCOL
|
| ws_tty_ wsterm
| ------ ------
| ABT ------------------> (flush i/o buffers)
Video Support for MOWSE MTB756-2
ENTRY: ws_tty_$attach
This entry "attaches" video mode to WSTERM by informing the
workstation software that synchronous mode is required to support
video and sends WSTERM a list of the break characters. The iox_ |
control order "set_video_mode" is also called to inform mowse_io_ |
that video mode has been invoked. |
USAGE
dcl ws_tty_$attach entry (ptr, char(*), fixed bin(71), fixed bin,
fixed bin(35));
call ws_tty_$attach (iocb_ptr, name, event, state, code);
ARGUMENTS
iocb_ptr
points to the I/O control block of mowse_terminal_. (Input)
name
is the channel name and must be "mowse.". (Input)
event
is not used. (Input)
state
indicates the tty state. (Output)
0 unknown |
1 ignored
2 listening
5 dialed
code
is a standard status code. (Output)
A code of error_table_$no_io_permission means that WSTERM is |
not connected. The code error_table_$no_iocb is returned if |
the iocb pointer is null. Either of these codes means that |
the enter sync mode request was not sent to WSTERM. In |
addition the code may be any of those returned by |
iox_$control for the control orders |
"get_terminal_emulator_state" and "set_video_modes" and |
iox_$modes. |
NOTES
The modes "force,^crecho,^lfecho" are set by this entry. |
MTB756-2 Video Support for MOWSE
| PROTOCOL
|
| ws_tty_ wsterm
| ------ ------
| ESM ------------------> (set default break table, e.g.
| only non-printing chars.)
| (prepare for sync io)
| (verify) <------------------- SME
Video Support for MOWSE MTB756-2
ENTRY: ws_tty_$detach
This entry "detaches" video mode from WSTERM by informing the
workstation software that synchronous communication is no longer
required. Asynchronous communication is established for
non-video mode. The iox_ control order "set_video_mode" is also |
called to inform mowse_io_ that video mode has been revoked. |
USAGE
dcl ws_tty_$detach entry (ptr, fixed bin, fixed bin, fixed
bin(35));
call ws_tty_$detach (iocb_ptr, dflag, state, code);
ARGUMENTS
iocb_ptr
points to the I/O control block of mowse_terminal_. (Input)
dflag
is not used. (Input)
state
indicates the tty state. (Output)
0 unknown |
1 ignored
2 listening
5 dialed
code
is a standard status code. (Output)
A code of error_table_$no_io_permission means that WSTERM is |
not connected. The code error_table_$no_iocb is returned if |
the iocb pointer is null. Either of these codes means that |
the exit sync mode request was not sent to WSTERM. In |
addition the code may be any of those returned by |
iox_$control for the control orders |
"get_terminal_emulator_state" and "set_video_modes". |
|
PROTOCOL |
|
ws_tty_ wsterm |
------ ------ |
XSM ------------------> (prepare for async io) |
(verify) <------------------- SMX |
MTB756-2 Video Support for MOWSE
ENTRY: ws_tty_$event
This entry simply sets the tty state and returns.
USAGE
dcl ws_tty_$event entry (ptr, fixed bin(71), fixed bin, fixed
bin(35));
call ws_tty_$event (iocb_ptr, event, state, code);
ARGUMENTS
iocb_ptr
points to the I/O control block of mowse_terminal_. (Input)
event
is the event channel name. (Input)
state
indicates the tty state. (Output)
| 0 unknown
1 ignored
2 listening
5 dialed
code
is a standard status code. (Output)
| The code error_table_$no_iocb is returned if the iocb pointer
| is null.
NOTES
This entry is not believed to be needed but is retained in case
the event should need to be passed to hcs_$tty_event. There is
only one known video call to this entry and it appears redundant.
Video Support for MOWSE MTB756-2
ENTRY: ws_tty_$order
This entry performs the specified control order on the i/o
switch.
USAGE
dcl ws_tty_$order entry (ptr, char(*), ptr, fixed bin, fixed
bin(35));
call ws_tty_$order (iocb_ptr, order, info_ptr, state, code);
ARGUMENTS
iocb_ptr
points to the I/O control block of mowse_terminal_. (Input)
order
is the name of the control order. (Input)
info_ptr
is null or points to the data whose form depends on the
control order. (Input)
state
indicates the tty state. (Output)
0 unknown |
1 ignored
2 listening
5 dialed
code
is a standard status code. (Output)
A code of error_table_$no_io_permission means that WSTERM is |
not connected. The code error_table_$no_iocb is returned if |
the iocb pointer is null. The code |
error_table_$unimplemented_version is returned if the |
structure pointed to by info_ptr is found to contain an |
obsolete version. The code |
error_table_$undefined_order_request is returned if the |
control order is unsupported. Any of these codes means that |
the control order was not processed. In addition the code |
may be any of those returned by iox_$control for the |
specified control order (if passed on) and iox_$modes for the |
control order "modes". |
NOTES
The following list of control orders are supported. With two
exceptions, these orders are passed to mowse_io_ for processing.
The first exception is that control orders which involve a
MTB756-2 Video Support for MOWSE
structure containing a version indicator are checked for the
current version. In the second exception, the modes order passes
the new modes to mowse_io_ via iox_$modes after changing the data
from a structure to a character string.
| Control orders passed on to mowse_io_
| abort
| debug_on
| debug_off
| flush_subchannel
| get_editing_chars
| get_event_channel
| get_foreign_terminal_data (version checked first)
| get_mowse_info
| get_output_conversion
| get_special
| get_terminal_emulator_state (version checked first)
| line_length
| put_to_sleep
| quit_disable
| quit_enable
| read_status
| resetread
| resetwrite
| send_local_message
| send_message
| set_editing_chars
| set_output_conversion (version checked first)
| set_special
| set_terminal_data (version checked first)
| set_term_type
| start
| store_id
| store_mowse_info
| terminal_info (version checked first)
| trace_on
| trace_off
| write_status
| Control orders returned with error_table_$undefined_order_request
| get_input_conversion
| get_input_translation
| get_output_translation
| set_input_conversion
| set_input_translation
| set_output_translation
| Control orders with special processing
Video Support for MOWSE MTB756-2
modes |
the mode "force" is appended to the input modes |
string before passing on to iox_$modes |
printer_off |
The foreground control message for printer off is |
sent to WSTERM. |
printer_on |
The foreground control message for printer on is |
sent to WSTERM. |
set_echo_break_table |
The echo break table is converted to a character |
string and sent to WSTERM with the foreground |
control message Set Break Table. |
MTB756-2 Video Support for MOWSE
ENTRY: ws_tty_$read
This entry reads unechoed characters from the workstation.
USAGE
dcl ws_tty_$read entry (ptr, ptr, fixed bin(21), fixed bin(21),
fixed bin(21), fixed bin, fixed bin(35));
call ws_tty_$read (iocb_ptr, buffer_ptr, offset, n_chars_to_read,
n_chars_read, state, code);
ARGUMENTS
iocb_ptr
points to the I/O control block of mowse_terminal_. (Input)
buffer_ptr
points to caller's buffer. (Input)
offset
is the offset in caller's buffer to start at. (Input)
n_chars_to_read
is the maximum number of characters to return. (Input)
n_chars_read
is the actual number of characters returned. (Output)
state
indicates the tty state. (Output)
| 0 unknown
1 ignored
2 listening
5 dialed
code
is a standard status code. (Output)
| A code of error_table_$no_io_permission means that WSTERM is
| not connected. The code error_table_$no_iocb is returned if
| the iocb pointer is null. The code error_table_$bad_arg is
| returned if n_chars_to_read is less than zero. In addition
| the code may be any of those returned by iox_$control for the
| control order get_terminal_emulator_state. Any of these
| codes means that the read was not performed.
| NOTES
|
| This entry is not called by video and is probably redundant.
Video Support for MOWSE MTB756-2
ENTRY: ws_tty_$read_echoed
This entry reads echoed characters from the workstation. Echoing
stops on a break character or when the character count is |
satisfied. |
USAGE
dcl ws_tty_$read_echoed entry (ptr, ptr, fixed bin(21), fixed
bin(21), fixed bin(21), fixed bin(21), fixed bin, fixed
bin, fixed bin(35));
call ws_tty_$read_echoed (iocb_ptr, buffer_ptr, offset,
n_chars_to_read, n_chars_read, echoed, screen_left, state,
code);
ARGUMENTS
iocb_ptr
points to the I/O control block of mowse_terminal_. (Input)
buffer_ptr
points to caller's buffer. (Input)
offset
is the offset in caller's buffer to start at. (Input)
n_chars_to_read
is the maximum number of characters to return. (Input)
If equal to zero, no read is actually performed and the |
return is immediate. |
n_chars_read
is the actual number of characters returned. (Output)
echoed
is the number of characters echoed by the workstation |
(Output) |
screen_left
is the space left on line (Input)
is used to switch local (workstation) echo on and off. A |
positive value means turn echo on; a zero means to turn echo |
off. |
state
indicates the tty state. (Output)
0 unknown |
1 ignored
2 listening
5 dialed
MTB756-2 Video Support for MOWSE
code
is a standard status code. (Output)
| A code of error_table_$no_io_permission means that WSTERM is
| not connected. The code error_table_$no_iocb is returned if
| the iocb pointer is null. The code error_table_$bad_arg is
| returned if n_chars_to_read is less than zero. In addition
| the code may be any of those returned by iox_$control for the
| control order get_terminal_emulator_state. Any of these
| codes means that the read was not performed.
|
| A code of error_table_$improper_data_format is returned if
| the control messages from WSTERM are out of sequence. In
| this case the read may have been partially completed.
|
| If WSTERM returns more characters than asked for, sub_err_ is
| called with the code error_table_$no_operation. If the
| actual number of characters read disagrees with the count
| from WSTERM, then sub_err_ is called with the code
| error_table_$unable_to_do_io. In these cases the input may
| be truncated to fit the callers buffer.
|
| Any other error code resulting from io is returned with a
| call to sub_err_.
| NOTES
|
| If screen_left is >0, then a RWE control is sent to WSTERM with
| the number of characters to read the minimum of screen_left or
| n_chars_to_read. No attempt is made to read the characters that
| will be sent by WSTERM.
|
| If screen_left is equal to zero, no RWE control is sent, but
| rather the input from the previous RWE is read via
| iox_$get_chars.
Video Support for MOWSE MTB756-2
PROTOCOL |
|
ws_tty_ wsterm |
------ ------ |
screen_left >0 |
RWE(count)---------->(switch to read and echo on screen) |
(count=min(screen,n_chars_to_read)) |
|
screen_left =0 |
(read) <---------- EEI(count,chars) |
(input returned when either |
1. break character input |
2. count satisfied |
3. output to write received |
4. quit condition |
5. WS screen display limit) |
|
MTB756-2 Video Support for MOWSE
ENTRY: ws_tty_$read_with_mark
This entry is like read but a mark is set to indicate the end of
| input. If the previous write had set the mark, this entry
| returns the mark index.
USAGE
| dcl ws_tty_$read_with_mark entry (ptr, char(*), bit (1) aligned,
| fixed bin(21), fixed bin(21), fixed bin, fixed bin(35));
| call ws_tty_$read_with_mark (iocb_ptr, buffer, never_block,
| n_chars_read, mark_index, state, code);
ARGUMENTS
iocb_ptr
points to the I/O control block of mowse_terminal_. (Input)
buffer
is the caller's buffer. (Input)
| never_block
| is a flag indicating if WSTERM should block on input.
| (Input)
| "1"b = do not block, return any input (even if null)
| immediately.
| "0"b = block until input complete (count satisfied, timer
| runout).
n_chars_read
is the actual number of characters returned. (Output)
If equal to zero, the read will still be performed.
mark_index
is an index in the returned string. (Output)
| If the mark is set at all, it is always 1. If not set it is
| zero.
state
indicates the tty state. (Output)
| 0 unknown
1 ignored
2 listening
5 dialed
code
is a standard status code. (Output)
| A code of error_table_$no_io_permission means that WSTERM is
| not connected. The code error_table_$no_iocb is returned if
| the iocb pointer is null. The code error_table_$bad_arg is
Video Support for MOWSE MTB756-2
returned if n_chars_to_read is less than zero. In addition |
the code may be any of those returned by iox_$control for the |
control order get_terminal_emulator_state. Any of these |
codes means that the read was not performed. |
|
A code of error_table_$improper_data_format is returned if |
the control messages from WSTERM are out of sequence. In |
this case the read may have been partially completed. |
|
If WSTERM returns more characters than asked for, sub_err_ is |
called with the code error_table_$no_operation. If the |
actual number of characters read disagrees with the count |
from WSTERM, then sub_err_ is called with the code |
error_table_$unable_to_do_io. In these cases the input may |
be truncated to fit the callers buffer. |
|
Any other error code resulting from io is returned with a |
call to sub_err_. |
|
PROTOCOL |
|
ws_tty_ wsterm |
------ ------ |
blocked read |
RNE(block,count)--->(switch to non-echo, initiate count) |
(read) <---------- UIC(count,chars) |
(input returned when |
1. timer runnout) |
(buffered)<-------- UIC(count,chars) ... |
(buffered)<-------- ENI(count,chars) |
(input returned when |
1. count satisfied |
2. screen output recieved |
3. break character input |
4. quit condition |
5. WS screen display limit |
|
no block read (for re-sync) |
RNE(noblock,count)-->(switch no non-echo, initiate count) |
(read) <---------- UIC(count,chars) (buffered) |
... ... |
(read) <---------- UIC(count,chars) (buffered) |
(read) <---------- ENI(count,chars) |
(up to count chars sent |
immediately even if count =0) |
MTB756-2 Video Support for MOWSE
ENTRY: ws_tty_$write
This entry displays the caller's text by sending it to the
| workstation. The write mark is also turned off by this entry so
| that a following read_with_mark call will not find the mark set.
USAGE
dcl ws_tty_$write entry (ptr, ptr, fixed bin(21), fixed bin(21),
fixed bin(21), fixed bin, fixed bin(35));
call ws_tty_$write (iocb_ptr, buffer_ptr, offset,
n_chars_to_write, n_chars_written, state, code);
ARGUMENTS
iocb_ptr
points to the I/O control block of mowse_terminal_. (Input)
buffer_ptr
pointer to caller's buffer. (Input)
offset
is the offset in caller's buffer to start at. (Input)
n_chars_to_write
is the maximum number of characters supplied. (Input)
n_chars_written
is the actual number of characters written. (Output)
state
indicates the tty state. (Output)
| 0 unknown
1 ignored
2 listening
5 dialed
code
is a standard status code. (Output)
| A code of error_table_$no_io_permission means that WSTERM is
| not connected. The code error_table_$no_iocb is returned if
| the iocb pointer is null. The code error_table_$bad_arg is
| returned if n_chars_to_write is less than zero. In addition
| the code may be any of those returned by iox_$control for the
| control order get_terminal_emulator_state. Any of these
| codes means that the write was not performed.
|
| Any io error code will be passed to sub_err_.
Video Support for MOWSE MTB756-2
ENTRY: ws_tty_$write_whole_string
This entry is the same as write. It displays the caller's text
by sending it to the workstation. This entry has a mark_set flag |
that indicates if the following read_with_mark should set the |
mark on input. |
USAGE
dcl ws_tty_$write_whole_string entry (ptr, char(*), bit(1), fixed
bin(21), fixed bin, fixed bin(35));
call ws_tty_$write_whole_string (iocb_ptr, string, mark_flag,
n_chars_written, state, code);
ARGUMENTS
iocb_ptr
points to the I/O control block of mowse_terminal_. (Input)
string
is the caller's character string to write. (Input)
mark_flag
indicates whether read_with_mark is to set a mark. (Input) |
"0"b don't set mark
"1"b set mark
n_chars_written
is the actual number of characters written. (Output)
state
indicates the tty state. (Output)
0 unknown |
1 ignored
2 listening
5 dialed
code
is a standard status code. (Output)
A code of error_table_$no_io_permission means that WSTERM is |
not connected. The code error_table_$no_iocb is returned if |
the iocb pointer is null. The code error_table_$bad_arg is |
returned if n_chars_to_write is less than zero. In addition |
the code may be any of those returned by iox_$control for the |
control order get_terminal_emulator_state. Any of these |
codes means that the write was not performed. |
|
Any io error code will be passed to sub_err_. |
MTB756-2 Video Support for MOWSE
3.2: Workstation Interfaces
The ws_tty_ modules communicate with the workstation software
(WSTERM) via calls to iox_. Actually these calls to iox_ are
calls to mowse_io_ which itself uses iox_ to exchange messages
with the MOWSE software on the workstation which in turn talks to
WSTERM.
There are two basic means by which ws_tty_ and WSTERM exchange
data. The most common method is via specific control messages.
These control messages are sent to WSTERM with an iox_
"send_message" control order and fetched from WSTERM with an
iox_$get_chars call. Control messages are for exchanging control
data concerning the workstation environment and also for reading
user entered text.
The second method of communication is for writing text to the
workstation screen. This is done by ws_tty_ with calls to
iox_$put_chars. Using this method of writing text to the
workstation guarantees that plain text written to the screen will
not be missinterpreted as a control message. Control messages
and written text are identified by WSTERM by their different
min-cap ids.
| A user signaled quit condition changes the way these messages are
| handled. When the quit (break) is signaled, WSTERM flushes data
| i/o but continues to read and respond to control messages.
3.2.1: CONTROL MESSAGE EXAMPLE
Suppose we want ws_tty_ to send the control message to WSTERM to
exit sync mode. The control message text is "XSM000000". To
send this we first append the foreground control message min-cap
id to the front of the message.
control_message = FG_CONTROL_MESSAGE || "XSM000000"
Then using
call iox_$control(iocb_ptr, "send_message", mowse_io_message_ptr,
code);
where mowse_io_message_ptr ->
mowse_io_message.version = mowse_io_info_version_1;
mowse_io_message.channel = FG;
mowse_io_message.io_message_ptr = addr(control_message);
mowse_io_message.io_message_len = 10;
will send the message to WSTERM. (The constants and structures
are defined in the mowse include files.) Then when WSTERM does a
Video Support for MOWSE MTB756-2
getdata it will find the text "XSM000000" with the minor
capability field set to FG_CONTROL_MESSAGE.
3.2.2: SENDING TEXT EXAMPLE
But if we want ws_tty_ to send the plain text "hello world", this
is the procedure when we set
term_message = "hello world";
call iox_$put_chars (iocb_ptr, addr(term_message), 11, code);
Then WSTERM will see the text "hello world" with the min cap of
FG_TERMINAL_DATA.
Likewise, ws_tty_ reads data from WSTERM with a call to
iox_$get_chars.
3.2.3: CONTROL MESSAGE FORMAT
The following description of the control messages does not
include the FG_CONTROL_MESSAGE byte appended to the front of
messages sent from ws_tty_ to WSTERM.
byte: 1 2 3 4 5 6..size+5
--------------------------------------------
| message id | size | data ... |
--------------------------------------------
message id
is a 3 character field identifing the message type and is
defined below.
size
is the number of bytes of data and is zero if there is no
data. This is a two byte (16 bit) unsigned binary number.
The largest data size is therefore 2**16-1 or 65535 bytes.
(The size field is interpreted slightly differently for the
read type messages. See the discussion of the read data
"count" below.)
data
may or may not be present depending on the type and is
defined below.
MTB756-2 Video Support for MOWSE
3.2.3.1: Control Message Types
The functionality of the following controls is detailed in MTB741
section 6 and MTB708. These message ids are defined in
ws_control_ids.incl.pl1.
message type message direction data
id ws_tty_:WSTERM
---------------------------- ---- -------------- ---------------
Abort ABT -> -
Enter Sync Mode ESM -> break table
Sync Mode Entered SME <- -
Exit Sync Mode XSM -> -
Sync Mode Exited SMX <- -
End Echoed Input EEI <- text
End Non-echoed Input ENI <- text
Read with No Echo RNE -> count
Read With Echo RWE -> count
Set Break Table SBT -> break table
Set TTY Modes STM -> tty modes
Echoed Input Chars EIC <- text
Unechoed Input Chars UIC <- text
Printer On PON -> -
Printer Off POF -> -
Order ORD -> control order
-----------------------------------------------------------------
3.2.3.1.1: Break table
The break table format is simply the list of printing ASCII
characters that are to be interpreted as causing break on input.
The nonprinting control characters (octal 000 to 037 and 177) are
always break characters. If the break table is null, that is the
size is zero, there are no break characters. If the break table
size is -1 break-all mode is indicated and no break table data is
present.
3.2.3.1.2: TTY modes
The TTY modes data is a six byte field which contains the
following values:
data byte contents
----- ----------
1 mode switches, to be further defined as needed
2 kill character (default is @)
3 erase character (default is #)
4 literal next character (default is )
5 maximum column or line length (default is 80)
6 max lines or page length (default is 23)
Video Support for MOWSE MTB756-2
3.2.3.1.3: Control order
The data field of the Order control message is the ascii text of
the order as passed to ws_tty_ plus any relevant data specific to
the control order. No control orders are currently required to
be passed to WSTERM, but this mechanism will allow for the
possibility in the future.
3.2.3.1.4: Read count
The count in RNE and RWE is a two byte or 16 bit field containing
an integer of the number of characters to read. In the unlikely
event that the read count exceeds this 64K field, ws_tty_ will
make repeated reads until the count is satisfied.
The size field is interpreted differently for the read messages. |
The two byte "size field" is a one byte flag field followed by a |
one byte size field. (The value of the size will always be 2.) |
The flag byte is used to communicate special read requirements to |
WSTERM. One flag is currently defined. |
|
dcl 1 read_flags unaligned, |
2 MBZ bit (1), /* this bit gets truncated */ |
2 no_block bit (1), /* left-most bit to WSTERM */ |
2 pad bit (7); |
|
If set, the no_block flag requests WSTERM to return the contents |
of its input buffer immediately. In this case if WSTERM's |
keyboard input buffer were empty, a count of zero and a null |
string would be returned. If the buffer contains characters but |
no break character, then those characters are returned. If the |
buffer does contains a break character, then the characters are |
returned immediately in the same fashion as a normal read. |
|
The no_block flag is required because this is the only way for |
ws_tty_ to determine whether there is indeed no user input at the |
time of the read request. Some applications, notably emacs, use |
this "feature" to determine if there has been any type-ahead. |
3.2.3.1.5: Text
Text data is simply a string of ASCII characters, one per byte.
The number of characters is given by the message size.