From 4bfd864f10b68b71482b35c818559068ef8d5797 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Wed, 27 Nov 2024 20:54:24 +0100 Subject: doc: Add RFC documents --- doc/rfc/rfc205.txt | 731 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 731 insertions(+) create mode 100644 doc/rfc/rfc205.txt (limited to 'doc/rfc/rfc205.txt') diff --git a/doc/rfc/rfc205.txt b/doc/rfc/rfc205.txt new file mode 100644 index 0000000..2899123 --- /dev/null +++ b/doc/rfc/rfc205.txt @@ -0,0 +1,731 @@ + + + + + + +Network Working Group R. Braden +Request for Comments: 205 UCLA/CCN +NIC: 7172 6 August 1971 + + + NETCRT - A CHARACTER DISPLAY PROTOCOL + + At the May NWG, meeting, CCN circulated dittoed copies of a proposed + character-display protocol NETCRT. Since that time, NETCRT has been + revised significantly; the current version is now being published as + an RFC, as promised last May. + + NETCRT was developed because a particular site (RAND) requested + Network access to URSA, CCN's display-based crje system. The primary + use of URSA at UCLA is conversational remote job entry from a display + terminal: entering and editing program text, submitting programs for + batch execution, and examining job output; URSA is not a general- + purpose time-sharing system. + + URSA's text editor is designed for a fast updating character display + and cannot be used in any reasonable way from a typewriter-like + console. Therefore, a simple TELNET protocol is not adequate for + using the crje function of URSA. Furthermore, we have assumed that + other ARPA sites will have their own text editors, well matched to + their own terminals and systems. Therefore, CCN has implemented + NETRJS (see RFC #189), to provide remote job submission and retrieval + services, before implementing NETCRT. + + There are a number of other functions in URSA besides crje; some of + these would probably be useful to remote users. URSA contains a + comprehensive STATus service, whose constantly-updating displays are + "windows" into the operation of the machine and the operating system, + allowing a user to watch the progress of his jobs through the system. + URSA also includes on-line data set (file) utilities, convenient for + a user with files stored at CCN. To obtain access to these + facilities, a few sites which use CCN heavily may want to implement + NETCRT. The schedule for implementation of NETCRT at CCN to allow + Network access to URSA will depend upon the existence of a user site + that wants the service and that will write a suitable NETCRT user + process. Interested sites are urged to contact the CCN Technical + Liaison, Bob Braden. + + Even though the implementation schedule for NETCRT is nebulous, we + are publishing the specs now for several reasons. First, we would + like comments and criticisms. Furthermore, NETCRT contains some + features which may be useful in the protocol(s) now being developed + for full graphical displays. + + + + +Braden [Page 1] + +RFC 205 NETCRT - A CHARACTER DISPLAY PROTOCOL 6 August 1971 + + +NETCRT PROTOCOL - VERSION 3 + +A. INTRODUCTION + + The UCLA Campus Computing Network (CCN) node intends to provide + Network access to its conversational remote job entry system URSA. + The URSA system is display-oriented, supporting only character + displays with local buffers (originally IBM 2260 displays, now CCI + 301 TV display consoles). This document defines a third-level + protocol called NETCRT which allows a Network user in a remote Host + to look like a CCI console to URSA. NETCRT is defined in terms of a + virtual character display ("VCD") terminal, simulated by a process in + the user host. + + URSA, like many on-line console systems, attempts to provide a good + man/machine interaction by keeping tight control over the state of + the terminal. On the other hand, the Network Working Group has + deliberately built some "squishiness" into the standard Network + protocols. We believe this squishiness is a conceptual mistake when + dealing with remote man/machine interaction, and we would support + protocol revisions to allow control over the effective communication + compliance between processes in different hosts. However, this + NETCRT protocol attempts to cope with the present squishiness, which + is apparently built into a number of host's NCPs. In fact, we have + arranged things so a host can improve response time and reduce + Network traffic with NETCRT by using the message buffering inherent + in his NCP. + +B. THE VIRTUAL CHARACTER DISPLAY + + A VCD consists of the following virtual hardware (see Figure 1): + + 1. A rectangular _display screen_ capable of displaying N lines of M + characters. + + 2. A _local buffer_ of M x N characters used to refresh the display. + + 3. A _cursor register_ which addresses the characters in the buffer + (and hence on the screen). This register controls the writing of + text into the local buffer from either the keyboard or the server, + and the reading of the local buffer by the server. + + 4. A _keyboard_ containing text keys and control keys. Each text key + enters a character into local buffer at the current cursor address + and steps the cursor register by 1. + + + + + + +Braden [Page 2] + +RFC 205 NETCRT - A CHARACTER DISPLAY PROTOCOL 6 August 1971 + + + 5. A _communication interface_ through which the server CPU can send + a stream of _command_ segments to the VCD and receive a stream of + _response_ segments from the VCD. The command segments include + control commands to the VCD and text to be written into the local + buffer. Response segments contain status indicators and text read + from the buffer. In addition, both VCD and server may send break + signals. + + The current address in the cursor register, an integer between 0 and + M x N-1, is displayed as a blitch, underscore, or other visual + indication at the corresponding point on the screen; this indication + is called the _cursor_. Position 0 is the upper left corner of the + screen. + + The screen is addressed in line ("row") order, and read and write + operations by the server overflow automatically from one line to the + next. The cursor register is not assumed to operate modulo M x Nxsy. + It is possible for a server command to set the cursor register to M x + N, one position beyond the last screen position; however, the server + should never set the register to an address beyond M x N, and it + should not leave the cursor at M x N when the keyboard is unlocked. + + The application program or conversational system using the VCD may + format each display screen in a variety of ways, and may use a number + of styles of interaction. One consequence is that the application + program might have to look anywhere on the screen (i.e., in the local + buffer) to find the input information it requires. We may consider + three alternative mechanisms for transmitting information from the + VCD to the serving CPU: + + Mechanism 1 Whenever the user presses a "Transmit" control key, + the entire M x N characters in the buffer are + transmitted to the server CPU. + + Mechanism 2 When the user presses "Transmit", the string of text + between a "start" control character and the cursor is + transmitted to the server. + + Mechanism 3 The server must send a read command segment to the VCD + before the "Transmit" key will have an effect. The + read command segment determines which parts of the + buffer are to be transmitted to the server. + + Mechanism 1 may be faulted as too costly in transmission time and + channel capacity, while Mechanism 2 is too restrictive. The scheme + which we propose here is based on Mechanism 3, which subsumes the + other two. + + + + +Braden [Page 3] + +RFC 205 NETCRT - A CHARACTER DISPLAY PROTOCOL 6 August 1971 + + + The VCD is assumed to include the following control keys: + + Erase Clears the display buffer to all blanks and resets the + cursor to position 0 (the upper left corner of the + screen). + + Transmit Locks the keyboard and places the VCD under control of + the server CPU. Typically, the server will read + specified areas of the screen and perhaps write out + new data before unlocking the keyboard again. + + Break Has the same effect as _Transmit_, and in addition + sends an interrupt message to the server CPU. The + _Break_ key always sends the interrupt, regardless of + the state of the VCD. + + Reset May be used to unlock the VCD keyboard in case the + server CPU fails to respond immediately and the user + wishes to enter new or different information. + + These may be called pure control keys, since they do not correspond + to any text characters. The following control key does store a + character into the display buffer: + + Newline Enter a Newline (NL) character into the display buffer + and reset the cursor to the beginning of the next + line. If this character is encountered during a read + or write operation, it is executed (i.e., the cursor + is moved to the beginning of the next line) and the NL + is counted as _one_ character. + + Finally, there are assumed to be keys for manually positioning the + cursor to any address on the screen. Cursor positioning keys may + include: cursor right, cursor up, cursor left (BS), cursor down (LF), + and cursor return (CR). A tab (HT) mechanism could also be defined, + although none is included here. + +C. VCD STATES + + The VCD has two internal states, _Local_ and _Control_ (see Figure + 2). + + Local State: The keyboard is unlocked and all keys are active. The + VCD does not accept or recognize any commands from + server except (reverse) Break. + + + + + + +Braden [Page 4] + +RFC 205 NETCRT - A CHARACTER DISPLAY PROTOCOL 6 August 1971 + + + Control State: The keyboard is locked, and only the _Break_ and + _Reset_ keys are active. The VCD accepts and executes + command segments from the server, and returns response + segments as the result of read commands. + + The VCD changes from Local to Control state if either: + + (1) The user presses the _Transmit_ key; or + + (2) the user presses the _Break_ key; or + + (3) the server sends a reverse Break request. + + _Transmit's_ only effect is to enter Control State; _Break_ enters + Control State and also sends a break request (INS and X'80') to the + server. + + The VCD returns to Local State when either: + + 1. The user presses the _Reset_ key; or + + 2. the VCD encounters a LOCAL command from the server and is not in + the process of synchronizing a reverse break (see section E + below). + + We should note that CCI and IBM 2260 character display consoles + actually have only one control key ("Interrupt" on CCI, "Enter" on + 2260) to perform the functions of both _Break_ and _Transmit_; this + one key in fact has the function of the _Break_ key of the VCD. We + have included both _Break_ and _Transmit_ keys in the VCD for + generality, but the URSA-NETCRT interface will be programmed to allow + a Network user of URSA to either (1) employ the _Break_ key + exclusively, or (2) use either _Break_ or _Transmit_ as appropriate. + This will be achieved by URSA simply by ignoring those break requests + (INS messages) which occur while there are outstanding read commands. + +D. VCD COMMANDS + + The server sends the VCD a string of command segments. These are of + varying length, consisting of an op code and none or more parameters. + The commands recognized by the VCD are as follows: + + + + + + + + + + +Braden [Page 5] + +RFC 205 NETCRT - A CHARACTER DISPLAY PROTOCOL 6 August 1971 + + +1. Display & Keyboard Control Commands: + + Command Parameter(s) Function + ------- ------------ ----------------------------------- + + ERASE none Erase display and reset cursor to 0. + i.e, clear the local buffer. + + BLANK none Disable display refresh (i.e., blank + the screen but do not clear the local + buffer). + + UNBLANK none Enable display refresh. + + LOCAL none Put VCD in _local_ state. The result + is to suspend command interpretation + and unlock the keyboard. + + SYNC none Used to synchronize reverse Break + from server. SYNC (X'80) is placed + in stream by server at same time that + it sends an INS. VCD enters Control + State, synchronizes INS with BREAK + command (see next section), and + continues command interpretation. + +2. Cursor Control Commands: + + CURSOR 16 bit integer P Set cursor register to P, where + 0 <= P <= M x N. + + FIND X'0001' followed Move the cursor to point to an + by one character occurrence of the character c. + c Specifically, search backwards + toward lower addresses) from the + current cursor position and take + the first occurrences of c (i.e., + the one with the largest address). + If no occurrence is found, leave + cursor at position 0. + + SAVE none Save a copy of the current cursor + address in local register S. + + RESTORE none Replace cursor register contents by + value S. + + + + + +Braden [Page 6] + +RFC 205 NETCRT - A CHARACTER DISPLAY PROTOCOL 6 August 1971 + + +I/O Commands: + + WRITE n,text 16 bit integer Write n bytes of text into display + n, followed by buffer starting at current cursor + n text bytes. position and advancing cursor by 1 + for each byte (except NL character + advances to beginning of next line). + Here [sigma] + n <= M x N. + + READ n 16 bit integer Read n bytes starting at the cursor + n. [sigma] and advancing cursor by one + for each byte (except NL advances + cursor to beginning of next line). + NL counts as one character. Send the + text to the server as a response + segment. Must have n + [sigma] + <= M x N. + + SREAD none Read S - [sigma] bytes starting from + the current cursor position [sigma] + up to (but not including) the cursor + address stored in register S. The + cursor is left in position S as a + result. Send the text to the server + as a response segment. + + AWRITE n,text 16 bit integer Same as WRITE n, except characters + n, followed by are not stored in buffer if they + n text bytes. have a lower cursor address than + the value in S. + + Here are some applications of these commands in URSA: + + 1. One elementary URSA terminal operation reads the screen from + position x up to (but not including) the current cursor position. + This could be done with the sequence of VCD command segments: + + SAVE + CURSOR x + SREAD + + 2. Another common operation in URSA is to remember the cursor, update + specific information on the screen, and replace the cursor. This + can be done by the following 8 + n byte sequence of command + segments: + + + + + + +Braden [Page 7] + +RFC 205 NETCRT - A CHARACTER DISPLAY PROTOCOL 6 August 1971 + + + SAVE + CURSOR x + WRITE n, text + RESTORE + + 3. In URSA, the area in which a user is to type his response is + usually delimited on the left by a "Start Symbol" (graphic '[1]'). + This is a historical remnant of the IBM 2260, which has only two + hardware read operators: read the full screen, and read from the + Start Manual Input Symbol ("SMI") to the cursor. The SMI read + operation can be simulated easily on the VCD as follows: + + SAVE + FIND '[1]' + SREAD + + 4. The _Break_ (or _Transmit_) key on the VCD may serve the function + of the INTerrupt key on a CCI console (or ENTer on an IBM 2260). + URSA will often attempt to minimize Network traffic by sending a + sequence of commands (one message if allocation allows) like the + following: + + -+ + CURSOR m | + WRITE n, text - URSA writes a request + LOCAL | + -+ + -+ + +- +-+ |_ User types response + | _BREAK_ | | + - -User Presses | _TRANSMIT_ |key - - -+ + +- -+ -+ + SAVE | + CURSOR p - URSA reads response + SREAD | + -+ + + At other times, URSA might send the sequence: + + CURSOR m + WRITE n,TEXT + LOCAL + READ 0 + + and wait for the INS from the user pressing _Break_ (or the + response segment triggered by the zero-length read if he presses + _Transmit_); then URSA will send the appropriate read command + sequence. + + + +Braden [Page 8] + +RFC 205 NETCRT - A CHARACTER DISPLAY PROTOCOL 6 August 1971 + + +F. NETWORK MESSAGE FORMATS + + The VCD connects the server through ICP to a standard socket, + establishing thereby a pair of connections between the VCD and the + server. Command segments (server-to-VCD) and response segments + (VCD-to-server) are sent over these connections, without regard to + physical message boundaries, using byte size 8. The VCD is defined + to operate in a segment-at-a-time mode (rather than character-at-a- + time), with local echo. Therefore, the server never echoes under + NETCRT. + + In many cases URSA will send a sequence of command segments (as in + the examples of the preceding section) at once; if there is + sufficient allcocation they will be sent in the same message. + Response time may be improved, therefore, if the user site is able to + buffer ahead on command segments. This buffering does raise break + synchronization problems, which are solved in the following manner + for reverse (server-to-user) break: + + The server sends an INS on the control link and also a SYNC + command (X'80) on the data link to the VCD. On receiving either, + the VCD enters Control State and then achieves synchronization + between the INS and BREAK; if the INS arrives first, the VCD + executes normally all commands buffered in his host, _except_ it + ignores LOCAL commands, until the SYNC appears. Having achieved + synchronization, the VCD continues normal command interpretation + (without ignoring ensuring LOCAL commands). + + By this means the server can regain control of the VCD to write new + information at any time. For example, when URSA is used under + NETCRT, most WRITE or AWRITE sequences will be preceded by a BREAK + from the server, since URSA will not know the current state of the + VCD. Even if URSA left the VCD in Control State, the user might have + manually returned his VCD to Local State by pressing _Reset_. + + After receiving an INS, the VCD executes rather than ignores buffered + commands so that pending writes will not be lost in case that + processing at the user side has been held up temporarily. The read + commands executed after the server sent an INS might be irrelevant to + a server, which can ignore the corresponding response segments. In + order to do so, the server simply keeps matching counts of read + commands sent and corresponding response segments received. + + Command segments will use the following formats: + + Form 1 (No parameters) q:OPCODE(8) + + where q = X'80' means SYNC + + + +Braden [Page 9] + +RFC 205 NETCRT - A CHARACTER DISPLAY PROTOCOL 6 August 1971 + + + + X'91' " LOCAL + + X'92' " ERASE + + X'93' " BLANK + + X'94' " UNBLANK + + X'95' " SAVE + + X'96' " RESTORE + + X'97' " SREAD + + Form 2 (16 bit integer) q:OPCODE(8) + n:INTEGER(16) + + where q = X'9E' means READ n + + q = X'9C' " CURSOR n + + In both cases, 0 <= n <= M x N + + Form 3 (count and text) q:OPCODE(8) + n:LENGTH(16) + (TEXT(8) = n) + + where q = X'9D' means WRITE + + q = X'9A' means AWRITE + + q = X'9F' and n=1 means FIND + + A response segment, caused by a READ or SREAD command, has the + following format: + + RESPONSE <-----X'A1' + CURSOR(16) + n:LENGTH(16) + (TEXT(8) = n) + + where n > 0 is the number of characters actually read. CURSOR(16) is + an integer giving the final cursor position after the corresponding + read command. Note that the command READ 0 is permissible and may be + used by the server to find the current cursor position, or to find + out when the user presses _Transmit_. + + + + + + + + + + +Braden [Page 10] + +RFC 205 NETCRT - A CHARACTER DISPLAY PROTOCOL 6 August 1971 + + +E. SCREEN SIZE + + For simplicity and consistency with URSA, we have chosen to treat the + cursor as a single integer. This in turn means that VCD and server + must agree upon the number of columns M; it is also desirable for the + server to know N. + + The agreement on M and N takes place through a one-sided negotiation. + The server is assumed to know what M and N values he can handle and + these are published for user sites. When the VCD is first connected + to the server, the VCD must send an Open response segment with the + values M and N: + + Open segment <---- X'B1' + M(8) + N(8) + X'0000' + + If the VCD fails to send this segment or the server does not like the + values, the server closes the connections and the user is considered + logged off. + +Endnotes + + [1] Graphic representation of start symbol: shaded triangle on its + side. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Braden [Page 11] + +RFC 205 NETCRT - A CHARACTER DISPLAY PROTOCOL 6 August 1971 + + + +---------------+ + | | + | D I S P L A Y | + +---------------+ + ^ + | + | Refresh + | + +---------------+ + | LOCAL | Address + | BUFFER |<------------+ + +---------------+ | + ^ ^ | | + +-----------+ text | | | | + / |_______| | | | + | KEYBOARD | |WRITE |READ | + +-------------+ |AWRITE |SREAD | + | | | + control | v | + +---------------+ +---------------+ + | VCD | | CURSOR ADDRESS| + | CONTROL |<--->| REGISTER | + +---------------+ +---------------+ + ^ | ^ + | | | + | | | + | | | + | | | + | | v + | | +---------------+ + | | | S | + | | | REGISTER | + | | +---------------+ + | v + +---------------+ + | COMM | + | INTERFACE | + +---------------+ + ^ | + | | + | v + COMMANDS RESPONSES + + Network Connections + + FIGURE 1. VIRTUAL CHARACTER DISPLAY + ------------------------------------ + + + + +Braden [Page 12] + +RFC 205 NETCRT - A CHARACTER DISPLAY PROTOCOL 6 August 1971 + + + Keyboard Unlocked + No Commands Executed + + +--------------------+ + | | + +------>| LOCAL |------+ + | +--->| State | | + | | +--------------------+ | + | | | | | + | | | | | + | | |Break | | + | | | | | INS received + LOCAL | | | key | | + | | | [send INS | | + Command | | | and X'80'] | | + Executed| | | |Transmit| + | | Reset | | | + | | | | key | + | | key | | | + | | v v | + | | +--------------------+ | + | +---| Control |<------+ + | | State | + +------| | + | +--------------------+ + | ^ + | | Keyboard locked, + | | Execute Commands + +------+ + After INS is + received, LOCAL + command is ignored + until SYNC (X'80') + is encountered + + FIGURE 2. VCD STATES + --------------------- + + + + + + [This RFC was put into machine readable form for entry] + [into the online RFC archives by Lorrie Shiota, 2/02] + + + + + + + +Braden [Page 13] + -- cgit v1.2.3