UP
This is a special terminal system designed to meet the
requirements of the Video Banking System (VBS). It differs
from the "standard" terminal I/O system in:
Option of eight level "ASCII" or EBCDIC translation interfaces
Simple terminal editing (destructive backspace)
Optional terminal input timeouts
Circuit zaps are returned to the program
Higher performance
VBSTIOC - The vbs terminal I/O
system creator.
VBSTIOC(0;SB,M,SIK,SOK,CCK,BWAIT==>(c;SIKVBS,SOKVBS,CCKVBS,TCEMK)
- Creates an instance of the VBS terminal system with
eight level "ASCII" support. VBSTIOC is a factory program
and uses extended jump protocol {(p3,ejp)}
to receive its parameters. SB is a prompt space bank, M
is a meter, SIK, SOK and CCK are terminal keys (possibly
from the receptionist {(p2,receptionist)}.)
and BWAIT is either a BWAIT key or a BWAIT multiplexor key,
in which case timeout requests will be honored; or a data
key (e.g. DK0), in which case no timeout support will be
generated.
C = 0 if terminal system created, c = 1 if SB is not a prompt
space bank, c = 2 if SB doesn't have enough space, c = 3
if CCK does not have KT = either X'20E' or KT+1.
VBSTIOC(1;SB,M==>c;DC)
- IF c is zero then DC is the domain creator used by
VBSTIOC to create domains. C = 1 or c = 2 are the same
as order code 0 above. This is for debugging.
VBSTIOC(2;SB,M,SIK,SOK,CCK,BWAIT==>(c;SIKVBS,SOKVBS,CCKVBS,TCEMK)
- Creates an instance of the VBS terminal system with
EBCDIC translation. Otherwise this order code is functionally
identical to order code 0.
VBSTIOC(4;SB,M,SIK,SOK,CCK,BWAIT ==> c;SIKVBS,SOKVBS,CCKVBS,TCEMK)
- Creates an instance of the VBS terminal system with
ASCII translation and no processing of backspace (fully
transparent).
VBSTIOC(5;SB,M,SIK,SOK,CCK,BWAIT ==> c;SIKVBS,SOKVBS,CCKVBS,TCEMK)
- Creates an instance of the VBS terminal system with
EBCDIC translation and no processing of backspace.
VBSTIOC(kt==>X'C0E');
SIKVBS
This key is a superset of the byte stream producer protocol.
The following are the extensions and differences from the
protocol defined in {(p3,bytstream)}:
Data passing through SIKVBS is broken up into transmissions
{as described in (transmis)} with
the exception that SIKVBS produces only data characters.
The number of bytes in a transmission is limited to an
implementation-defined maximum of 256. It is as if the
256th character were always an activation character. But,
if a transmission is ended by reaching the limit, and the
echoing status is then changed, some characters may be echoed
in error. The data received from SIK is echoed promptly
according to the echo mask. If the consumer can accept
it, the transmission is always delivered in one packet.
The return code from SIKVBS is used to indicate the ending
state of the transmission as follows:
0 - Normal activation
1 - Input transmission exceeds 256 bytes
2 - Timeout expired before activation character received
3 - Error signal received from the network (data loss)
4 - Break signal received from the network
kt+1 - Circuit zapper received (normal byte stream end of
file)
Characters from SIK (the circuit) are assumed
to be ASCII for the purposes of activation and editing.
Either even or odd parity characters will cause the activation
or editing behavior. Tymnet control codes {(cc)}
are checked for validity and either consumed or provided
through the CCKVBS interface.
A (_line) is the largest string of data which is contained
in a transmission and does not contain a line ending character.
Carriage return is a line ending character. Line feed is
a line ending character if and only if, if it were echoed,
it would be echoed as LF CR.
The (_prompt string) is typed at the beginning of each line.
{ni}For the purpose of computing tab stops when expanding
tab to spaces a transmission is considered to begin at the
left margin, regardless of the actual position of the carriage.
The prompt is disregarded. Carriage position is computed
as if all characters were being echoed. Output from SOKVBS
is not considered.
The following characters in the input stream cause editing
functions. (This section is not tutorial.)
Control-H
Backs up one character in the input line. Will not back
up over a line boundary. Sends <BS><SPACE><BS>
to the terminal to erase the character from the CRT.
{ni}Control-I (tab)
If tabs are being expanded to spaces then this character
is equivalent to typing enough spaces to go to the next
tab stop. The echoing of the spaces is controlled by bit
0 of the echo mask. If tabs are not being expanded to spaces
then tab is a data character.
Control-J (linefeed)
Is a line ending character if linefeed is being echoed
as LF CR as opposed to LF alone.
Control-M (carriage return)
Is a line ending character.
Known deficiencies:
If you back up {control-H} over tab it loses track of
the carriage position, so a subsequent tab being expanded
to spaces won't work right.
SOKVBS
This key is a byte stream consumer. Bytes are sent directly
to SOK (the circuit).
A zapper for the circuit can be signaled by the byte stream
protocol EOF convention (N.B. This differs from other terminal
system modules). If the producer signals EOF, a zapper
is sent after ensuring that characters previously sent have
reached the other end of the circuit.
SIKVBS may be producing (reading) at the same time that SOKVBS
is consuming (printing). In this case, any output generated
as a result of echoing or editing may be interspersed with
the output sent to SOKVBS.
CCKVBS
CCKVBS(2;==>;) "Send zapper"
Works regardless of backpressure.
CCKVBS(3;==>0;) "Start gobbling"
Turns on a flag called "gobbling".
While gobbling is on, SOKVBS will be prompt. Messages for
the circuit (including perhaps echoes) will be discarded
beginning at this point in the output stream. However,
a character gobbler is never discarded. If gobbling is
turned on while SOKVBS is consuming, it returns immediately.
Gobbling is initially off.
CCKVBS(4;==>0;SIK,SOK,CCK) "Destroy VBSTIO"
Destroys VBSTIO and signals EOF on SIKVBS and SOKVBS.
If SIKVBS is consuming, SIK is available.
There is no way to determine whether SOK will be available.
If a key is not available, DK(0) is returned in that position.
Since no limit for SOK is returned, the user will have
to assume a limit of zero initially.
Programming note: See the tap operations on the CCK
key for reacquiring full use of the circuit after the destruction
of VBSTIO.
CCKVBS(5;tabtable;==>c;) "Set tab stops"
Tabtable is a string of up to 256 bits {32 bytes}. There
will be a tab stop in column i if the i'th bit is a one.
If tabtable is shorter than 32 bytes it is padded with
bytes of value hex 80 {specifying a tab stop every 8 columns}.
If there is a transmission in progress, C=1 and the tab stops
are not changed. C=0 if ok.
CCKVBS(6;==>;) "Activate now"
CCKVBS(7;==>0;) "Stop gobbling"
CCKVBS(8;==>c;) "Echo CR as CRLF"
If there is a transmission in progress, c is 1. Otherwise
c is zero and when CR is being echoed, it is echoed as carriage
return, linefeed.
CCKVBS(9;==>c;) "Echo CR as CR"
If there is a transmission in progress, c is 1, otherwise
c is zero.
CCKVBS(10;==>c;) "Echo LF as LFCR"
If there is a transmission in progress, c is 1, otherwise
c is zero.
CCKVBS(11;==>c;) "Echo LF as LF"
If there is a transmission in progress, c is 1, otherwise
c is zero.
{ni}CCKVBS(12;==>c;) "Expand tab to spaces"
If there is a transmission in progress, c is 1. Otherwise
c is zero and tab on input is treated as an abbreviation
for enough spaces to go to the next tab stop. (N.B. Appears
to the caller to be implemented except tab characters will
continue to appear in the input stream.)
CCKVBS(13;==>c;) "Don't expand tab to spaces"
If there is a transmission in progress, c is 1. Otherwise
c is zero and tab is treated as any other character.
CCKVBS(14;==>c;) "Send character gobbler"
If there is a transmission in progress, c is 1. Otherwise
c is zero and a character gobbler is sent to the circuit.
Sending a gobbler does not affect the state of echoing or
tab stops. It may cause terminal characteristics to not
be set, and may gobble a hang character. It does gobble
echoes.
CCKVBS(16+4n+2d+b;==>c;) "Filter characters"
N, d, and b are either 0 or 1.
If there is a transmission in progress, c is 1. Otherwise
c is zero and three flags are set.
If n=1, NUL in the input stream will be ignored.
If d=1, DEL in the input stream will be ignored.
B is included for compatibility with CCK2 thru CCK6. Its
value is either 1 or 0 and is ignored.
CCKVBS(24,ps;==>c;) "Set prompt string"
Ps may have up to 8 characters; if it has more, or there
is a transmission in progress, c is 1, otherwise c is zero
and the prompt string is set to ps. The string is taken
to be eight level ASCII or EBCDIC depending on which translation
version was built (VBSTIOC oc=0 or oc=2).
CCKVBS(25,ol;==>c;) "Set old line"
This is included for compatibility with CCK5 and CCK6.
If a transmission is in progress then c is 1. Otherwise
c is 0
CCKVBS(26;==>c;) "Pseudoactivate"
If there is a transmission in progress or another "pseudoactivate"
since the last transmission ended c is 1. If a pseudoactivate
cannot be honored due to the implementation-defined maximum
limit on the number of bytes in a transmission, c is 2.
Otherwise, c is 0 and SIKVBS behaves as though none of
the characters in the previous transmission was an activation
character and the transmission did not occur. The data
will be transmitted again (after perhaps being subjected
to editing).
CCKVBS(32,(4,time);==>c;) "Set activation timeout"
Sets a timeout for activation. This will reset any CCKVBS
33 time to zero. If VBSTIOC was called with a data key
instead of a BWAIT key, or the time value specified is greater
than 31536000 (365 days), or the length of time is not 4
then c is 1 otherwise c is zero. Time is in unsigned binary
seconds and if it is zero there is no timeout. If time
seconds elapse from the time SIKVBS is called with no activation
characters from the circuit then SIKVBS will return with
return code 2.
CCKVBS(33,(4,time);==>c;) "Set elapsed timeout"
Sets an elapsed timeout. This will reset any CCKVBS
32 timeout. If VBSTIOC was called with a data key instead
of a BWAIT key, or the time value specified is greater than
31536000 (365 days), or the length of time is not 4 then
c is 1 otherwise c is zero. Time is in unsigned binary seconds
and if it is zero there is no timeout. C is zero. If SIKVBS
is active after time seconds have elapsed then SIKVBS will
return with return code 2. To read more characters from
the circuit CCKVBS 32 or 33 must be re-issued.
CCKVBS(256+a;==>c;) "Set ASM"
If there is a transmission in progress, c is 1. Otherwise
c is 0 and the activation set mask is set to a, where a
is less than 256.
CCKVBS(512+b;==>c;) "Set echo mask"
If there is a transmission in progress, c is 1. Otherwise,
the echo mask is set to b, where b is less than 256. An
input character is echoed if it is in mask set i and bit
i of the echo mask is on. See (p2,maskset)
for the definition of mask sets.
CCKVBS(kt;==>X'B0E';)