📄 rfc205.txt
字号:
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 1971F. 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 SYNCBraden [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 1971E. 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]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -