summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc292.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc292.txt')
-rw-r--r--doc/rfc/rfc292.txt563
1 files changed, 563 insertions, 0 deletions
diff --git a/doc/rfc/rfc292.txt b/doc/rfc/rfc292.txt
new file mode 100644
index 0000000..8b04f69
--- /dev/null
+++ b/doc/rfc/rfc292.txt
@@ -0,0 +1,563 @@
+
+
+
+
+
+
+Network Working Group 12 January 1972
+Request for Comment: 292 Jim Michener, MAC
+NIC 8302 Ira Cotton, MITRE
+References: 282, 285 Karl Kelley, U. of Ill.
+Updates: None Dave Liddle, Owens Ill.
+Obsoletes: None Ed Meyer, MAC
+
+
+ GRAPHICS PROTOCOL - LEVEL 0 ONLY
+
+INTRODUCTION
+
+ This document reflects opinions expressed and decisions reached at
+ the second meeting of the Network Graphics Group, held at the
+ Stanford Artificial Intelligence Laboratory in late November 1971.
+ It describes part of a proposed Network Standard Graphics Protocol
+ for transmitting graphics data within the ARPA network. The
+ particular aspects of the protocol covered in this document relate to
+ the form and content of graphics information sent from a source of
+ graphical information (an application program, say, in the "Serving
+ Host") to a display package for output to a graphics console (at the
+ "Using Host"). This will take the form of a sequence of 8-bit bytes,
+ and will be called the graphics output byte stream. In particular,
+ only the simplest forms of graphics data will be covered in this, the
+ first version of this document. The next version, already in
+ preparation, will be much more complete. In any case this is not
+ intended to describe a finished protocol; rather it should serve as a
+ basis for graphics experimentation on the network.
+
+ This document does not include form or content of graphics input
+ (data sent from the Using Host to the Serving Host) nor does it cover
+ how the connection is established between the hosts. A proposal for
+ the former will be generated eventually by this committee; the latter
+ is the job of the Connection Committee (of the Network Graphics
+ Group).
+
+ This RFC describes the commands which are available in the protocol
+ in terms of the effect they would have at the receiving (Using Host)
+ end. Clearly, some subroutine package is desirable at the Serving
+ Host for use by applications package in transmitting graphics data,
+ but on this topic this RFC does not intend to comment.
+
+ It may be observed by the reader that no facility is specified in
+ this protocol allowing the Using Host to report logical errors in the
+ graphics output byte stream to the Serving Host. Such a facility
+ would have to be intergrated with the graphics _input_ byte stream,
+ since it involves most of the problems related to synchrony of
+ independent hosts.
+
+
+
+Michener [Page 1]
+
+RFC 292 Graphics Protocol Level 0 January 1972
+
+
+BACKGROUND
+
+ The reader should probably peruse RFC 282: "Graphics Meeting Report"
+ by Mike Padlipsky to obtain some of the framework surrounding this
+ discussion of network graphics. Also it might be valuable to make
+ note of the model described in RFC 285: "Network Graphics" by Donald
+ Huff.
+
+LEVEL AND GROUND RULES PERTAINING THERETO
+
+ Functions within the graphics protocol will be classified into a
+ number of levels depending partly on how difficult it is to implement
+ those functions. It is intended that any host which claims to
+ implement the functions of level N must implement all lower levels as
+ well. Thus, it is envisioned that sites will implement levels
+ incremently. Implementations will be improved as a continuing
+ process to include more and more functions, and it is intended that
+ each implementation will be able to identify its own level to a
+ graphics protocol at a remote site which is requesting a graphics
+ interchange. A side result is that each site will be able to
+ determine its own priorities in committing programmers to the
+ graphics protocol as opposed to other efforts.
+
+ It is also our intention that implementation of level N will require
+ no knowledge of level N+1. Thus a site can implement a level in the
+ (reasonably) firm knowledge that no changes at higher levels will
+ alter the level implemented. At some time it may be decided by the
+ Network Graphics Group to redefine a level which has previously been
+ firmed up. It is not our intention that this shall happen but one
+ must recognize that the proposed Graphics Protocol is experimental
+ and may have to be changed.
+
+ One further ground rule: a stream of commands and data which is
+ valid at a given level, K, shall produce "identical" results on any
+ interpreter of level K or higher. By this we mean that as defined
+ operations, similar pictures should result. Aspects of the protocol
+ which are not strictly defined (at this time) include character size,
+ character position relative to the beam, how control characters in
+ text output affect the terminal and what happens when the beam is
+ moved or a line drawn outside of the logical screen boundary. This
+ rule forces upwards compatibility, so that an application written
+ using features of low numbered level will still work at sites which
+ have moved on to implement higher levels. Additionally, any aspects
+ of this protocol which are explicitly "left unspecified" in the
+ detailed operations descriptions below _shall_ be explicitly
+ specified in any public description of an actual implementation.
+
+ We now describe the framework which will be common to all levels.
+
+
+
+Michener [Page 2]
+
+RFC 292 Graphics Protocol Level 0 January 1972
+
+
+BASIC DATA FORMS
+
+ Information in the Network Standard Graphics Protocol will be
+ expressed as a sequence of 8-bit bytes. A command will consist of a
+ command byte followed by zero or more arguments. The same command
+ byte will always take the same number of arguments in the same form.
+ The length of each argument may be fixed or variable depending on the
+ argument.
+
+ A simple type of argument is a "value," which is an 8-bit integer.
+ Another type of argument is a "string" which is a count followed by
+ (count)number of 8-bit bytes. If the count is between 0 and 127, it
+ is sent in a single byte. If the count is between 128 and 2**15-1
+ (** means exponentiation), it is sent in two bytes with the high
+ order bit of the first byte set to one. The first byte contains the
+ seven high order bits of the number, and the second byte contains the
+ eight low order bits. A string is the only type of argument of a
+ command which can vary in length.
+
+ Coordinate data engendered considerable discussion at the second
+ Network Graphics Group meeting. It was decided that a two-
+ dimensional Logical Coordinate System was required, and each
+ interpreter for the graphic command byte stream would be responsible
+ for mapping this coordinate system to physical device coordinates.
+ It was decided that data in the logical coordinate system would be in
+ twos-complement notation, that it would be fractional, that each edge
+ of the screen would have unit length, and that the origin would
+ correspond to the center of the screen on the output device. The
+ vertical (horizontal) edges of the screen of the output device
+ correspond to the lines X (Y) = -1/2 or X=+1/2-e where e is a small
+ positive number determined by the precision of the fractional data.
+ Particularly the points (-1/2,-1/2) (-1/2,1/2-e), (1/2-e, -1/2) and
+ (1/2-e, 1/2-e) shall be visible points at the corners of the logical
+ screen. (In the case of a non-square display surface, the
+ implementer may make his own decision, but it is recommended that the
+ largest possible _square_ area be utilized.) Thus we shall say that
+ the Logical Coordinate System contains points whose coordinates range
+ from -1/2 to a little less than +1/2.
+
+ Commands which take coordinate data will be available in various
+ modes. In absolute mode, a position is specified by giving its
+ coordinates in the Logical Coordinate System. In relative mode, the
+ _difference_ between the coordinates of the position and the
+ coordinates of the current position must be specified. Thus a
+
+
+
+
+
+
+
+Michener [Page 3]
+
+RFC 292 Graphics Protocol Level 0 January 1972
+
+
+ coordinate datum which is an argument for an absolute mode operation
+ should be in the range -1/2 to +1/2-e, while one for a relative mode
+ operation should be in the range -1+e to +1-e.
+
+ Interest was expressed at the second Graphics Group Meeting in
+ eventually allowing a very large coordinate space (many bits of
+ precision in each fractional coordinate). This is to be done by
+ permitting the length, in 8-bit bytes, of each coordinate datum to be
+ set (as a mode). It was decided at the meeting that two bytes per
+ coordinate would suffice for now. Thus "e" in the above discussion
+ is 2**(15) (one in the least significant bit of a 15-bit plus sign
+ fractional coordinate).
+
+ Text data will be transmitted as an argument of various commands for
+ display on the output device. Network ASCII will be used to
+ represent characters. At the lowest-levels of the protocol only one
+ character size will be available -- whatever is "normal" on the
+ display device. If the device had no "normal" size, 72 characters
+ per line would be desirable. Later, variable character size may be
+ introduced.
+
+ Also, at the lowest levels, control characters will be passed along
+ to the device for it to do the best it can. However, the consensus
+ of the graphics meeting was that at some reasonably low (but non-
+ zero) level carriage return, line feed, and backspace should be
+ interpreted to do the right thing.
+
+COMMAND CODES
+
+ Each command in the graphics protocol will be assigned a non-negative
+ value which will represent this command in the byte stream. The
+ algorithm whereby values and commands are associated is, it turns
+ out, a very touchy subject. There are five or ten different criteria
+ for a "best" algorithm, each criterion different in emphasis. This
+ Gordian knot will be cut, in this proposal, by ordering the commands
+ approximately according to level, and then just numbering them. In
+ addition, if several closely related commands occur at the same
+ level, some attempt will be made to encode variations of meanings in
+ terms of bit configurations. Even if some later consideration causes
+ a change in ordering to be proposed, it is this committee's feeling
+ that the numbering should not be altered. However, until this matter
+ is firmly settled, it is strongly advised that any implementation
+ take into account the possibility of reassignment of command codes.
+
+
+
+
+
+
+
+
+Michener [Page 4]
+
+RFC 292 Graphics Protocol Level 0 January 1972
+
+
+PARTICULAR PROPOSAL FOR LEVEL 0 PROTOCOL
+
+ It is proposed that level 0 be kept very simple. This is so that
+ implementation can be quickly accomplished and experimentation with
+ the protocol begun. Another reason is that the least powerful hosts
+ and even programmable terminals should be able to implement it. In
+ accordance with this, the "rule" was made that a command be
+ implemented only if the output is a function solely of the current
+ command and the "beam position" current at the start of the command.
+ In other words the interpreter for level 0 need have no internal
+ storage for "modes" or pushdown stacks. With this restriction it is
+ hoped that a very simple implementation will be possible for level 0.
+ In particular, perhaps one could eventually build a hardware
+ translator from level 0 code to one's own particular terminal's code.
+
+ Note that in the opcode assignment for level 0, bits 4, 2, and 1 have
+ special meaning for the move, line and dot commands. In particular,
+ the 1 bit encodes absolute versus relative data mode, the 4 bit
+ encodes whether any visible output occurs, and the 2 bit determines
+ whether the visible output is a line or a dot.
+
+LEVEL 0: COMMAND SUMMARY
+
+ The following is a list of commands (and their syntax)in level zero.
+ Detailed descriptions of these commands follow in the next section.
+ Commands dealing with protocol may be added by the Connection
+ Committee. (They currently request opcodes in the range 128 to 255.)
+
+ (As described in Basic Data Forms, above, <x>, <y>, <x delta> and <y
+ delta> are two-byte coordinate values, <string> is a count followed
+ by (count) many bytes and <value> is an eight bit number.)
+
+ Decimal Octal Binary Format
+
+ 0 0 00000000 Null
+ 1 1 00000001 Erase screen and reset beam
+ 2 2 00000010 Move Absolute <x> <y>
+ 3 3 00000011 Move Relative <x> <y>
+ 4 4 00000100 Draw Absolute <x> <y>
+ 5 5 00000101 Draw Relative <x delta> <y delta>
+ 6 8 00000110 Dot Absolute <x> <y>
+ 7 7 00000111 Dot Relative <x delta> <y delta>
+ 8 10 00001000 Text <string>
+ 9 11 00001001 TextR <string>
+ 10 12 00001010 End of Picture
+ 11 13 00001011 Escape <value> <string>
+
+
+
+
+
+Michener [Page 5]
+
+RFC 292 Graphics Protocol Level 0 January 1972
+
+
+LEVEL 0: COMMAND DESCRIPTIONS
+
+ 0 Null Statement ("null")
+ This statement has no arguments and no effect, either.
+
+ 1 Erase screen and reset beam to origin ("Erase").
+ This command indicates that a new picture is about to be drawn.
+ It should always be (eventually) paired with a following End of
+ Picture command.
+
+ 2 Move beam invisibly to absolute position
+ ("Move Absolute") <x coordinate> <y coordinate>.
+ Nothing is drawn; the beam is positioned to the specified absolute
+ x,y position.
+
+ 3 Move beam invisibly by relative amount
+ ("Move Relative") <x delta> <y delta>.
+ Nothing is drawn; the beam is shifted by the specified amount in x
+ and y.
+
+ 4 Draw line to absolute position
+ ("Draw Absolute") <x coordinate> <y coordinate>.
+ A line is drawn from the current beam position to the specified
+ absolute x, y position.
+
+ 5 Draw line to relative position
+ ("Draw Relative") <x delta> <y delta>.
+ A line is drawn from the current beam position to the position
+ delta x and delta y away.
+
+ 6 Display a Dot at absolute position
+ ("Dot Absolute") <x coordinate> <y coordinate>.
+ The beam is moved invisibly to absolute position x, y and a dot is
+ displayed there.
+
+ 7 Display a Dot at Relative position
+ ("Dot Relative") <x delta> <y delta>.
+ The beam is moved invisibly by the specified amount in x and y and
+ a dot is displayed there.
+
+ 8 Display text ("Text") <string>.
+ At the current beam position, display some characters at the
+ normal size for the device being operated. <string> consists of a
+ <count> followed by count many characters. If there is no "normal
+ size," choose the size so that seventy-two characters are
+ displayed per line. The characters in the string are coded in
+ network ASCII: all codes between 0 and 127 (decimal) inclusive are
+ permitted. (At level zero, what happens to control characters is
+
+
+
+Michener [Page 6]
+
+RFC 292 Graphics Protocol Level 0 January 1972
+
+
+ left unspecified.) Where the beam is, following execution of this
+ command, is left unspecified, except that another Display Text
+ command immediately following will append its text to the previous
+ string. (The use of the TEXT command is _discouraged_; use TextR
+ instead.) The position of the first character relative to the
+ initial beam position is left unspecified.
+
+ 9 Display text and restore beam ("TextR") <string>.
+ At the current beam position, display a string of characters at
+ the normal size for the device being operated then reposition the
+ beam to where it was before the command. <string> consists of a
+ <count> followed by count many characters. If there is no "normal
+ size," choose the size so that seventy-two characters are
+ displayed per line. The characters in the string are coded in
+ network ASCII; all codes between 0 and 127 (decimal) inclusive are
+ permitted. (At level zero, what happens to control characters is
+ left unspecified.) The position of the first character relative
+ to the initial beam position is left unspecified.
+
+ 10 End of Picture ("Endpic").
+ This command denotes the end of a new picture. It must be paired
+ with a preceding Erase command.
+
+ 11 Escape to device specifics ("Escdev") <value> <string>.
+ If "value" is the code assigned (by the Protocol Committee) to the
+ device being operated, then transmit the eight-bit bytes in
+ <string> (which starts with a <count> indicating the number of
+ bytes) to the device without examining them. Otherwise ignore
+ this command. If the device does not accept 8-bit information,
+ reformat the data in some device specific way; an example would be
+ throwing away the high order bit for a seven bit device, or
+ gathering 5 8-bit bytes into one 36-bit word, again discarding the
+ high order bits, perhaps. The action of the bytes in the string
+ should leave alone (or at least restore) any hardware beam
+ position registers in the device which the interpreter might
+ conceivably depend on.
+
+ This command really should not be used; it was included at level 0
+ so that specific applications can do mode setting and other device
+ specific manipulations. For example ARDS terminals may optionally
+ have several, independently addressable output scopes. The
+ selection mechanism changes state only when a particular sequence
+ of ASCII characters reaches the terminal. Thus ESCDEV would be
+ used to select which scopes(s) is/are to be affected by following
+ commands. (The current state is invisible to the graphics package
+ at the Using Host.)
+
+ Further, suppose that another make of terminal has a similar
+
+
+
+Michener [Page 7]
+
+RFC 292 Graphics Protocol Level 0 January 1972
+
+
+ option, which responds to a different code sequence. This
+ possibility is the motivation for conditionally ignoring the
+ ESCDEV command based on the "<value>" specified. Given that a
+ particular application will only be used to output to either an
+ ARDS or this second make (with the multiple scope option), then
+ the application could always send two ESCDEV commands, one
+ applicable only to ARDS terminals, and the other applicable only
+ to the second make.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Michener [Page 8]
+
+RFC 292 Graphics Protocol Level 0 January 1972
+
+
+ APPENDIX 1: BNF FOR THE GRAPHICS PROTOCOL BYTE STREAM
+
+ Key to below:
+ Non-terminals are represented in <>.
+ Terminals which are keywords standing for particular eight-bit values
+ are in capitals.
+ Terminals whose meaning should be clear to the reader are in lower
+ case. Note that "empty_string" means "zero bytes," and not "a
+ <string> whose <count> is zero".
+
+ <graphics output byte stream> ::= empty_string
+ | <picture> <graphics output byte stream>
+ <picture> ::= <new picture stt> <sttgroup> <end stt>
+ <stt group> ::= empty_string | <stt> <stt group>.
+ <stt> ::= <control stt> | <display stt>
+ <control stt> ::= <escape to device stt>
+ | <null stt>
+ <display stt> ::= <move absolute stt>
+ | <move relative stt>
+ | <draw absolute stt>
+ | <draw relative stt>
+ | <dot absolute stt>
+ | <dot relative stt>
+ | <text and restore beam stt>
+ | <text stt>
+
+ <new picture stt> ::= ERASE
+ <escape to device stt> ::=ESCDEV <device code> <string>
+ <null stt>::= NULL
+ <end stt>::= ENDPIC
+ <move absolute stt> ::= MOVEA <x coordinate> <y coordinate>
+ <move relative stt> ::= MOVER <x delta> <y delta>
+ <draw absolute stt> ::= DRAWA <x coordinate> <y coordinate>
+ <draw relative stt> ::= DRAWR <x delta> <y delta>
+ <dot absolute stt> ::= DOTA <x coordinate> <y coordinate>
+ <dot relative stt> ::= DOTR<x delta> <y delta>
+ <text and restore beam stt> ::= TEXTR <string>
+ <text stt> ::= TEXT <string>
+ <x coordinate> ::= <coordinate>
+ <y coordinate> ::= <coordinate>
+ <x delta> ::= <double coordinate>
+ <y delta> ::= <double coordinate>
+ <coordinate> ::= singed,_two's-complement,_fraction_in_range
+ -1/2_to_less_than_+1/2
+ <double coordinate> ::= signed,_two's_complement,_fraction,
+ range_strictly_between_-1_and_+1
+
+
+
+
+
+Michener [Page 9]
+
+RFC 292 Graphics Protocol Level 0 January 1972
+
+
+ <count ::= 7-bit_non-negative_integer
+ | 15-bit_non-negative_integer_represented_in
+ "excess_2**15"_notation
+ <string> ::= <count> count_8-bit_bytes
+ <device code> ::= <value>
+ <value> ::= 8-bit_integer
+
+
+
+
+
+
+
+
+
+
+
+ [This RFC was put into machine readable form for entry]
+ [into the online RFC archives by Kelly Tardif, Viagénie 10/99]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Michener [Page 10]
+