RFC 125
Response to RFC 86: Proposal for Network Standard Format for a Graphics Data Stream
RFC 125: A Bestie's Response to RFC #86 π
Okay bestie, this is RFC 125 π from the Network Working Group, filed as NIC 5841 on April 18, 1971. John McConnell wrote it at the Ames Research Center in Moffett Field, California πΈ. It's a response to RFC #86, the Proposal for Network Standard Format for a graphics data stream. The category is D.6 π , it obsoletes None, and it updates RFC 86 β¨.
The Big Picture π¦
So the core idea is totally valid π. You send an intermediate, device independent language over the wire, and the receiving host translates it into specific device codes. It's giving the only approach that lets people keep their thoughts centered on picture descriptions π§. Ames Research Center is already using this exact approach to tie together its graphic facilities, which come in all different types and live on different computers π₯. They're still in the design phase and expect their package to be running in about six months β.
The main issue with the structure as it stands? It ignores the many features that graphics devices have π. Those features keep changing with new devices, so a set of option or mode primitives should be defined, kept logically separate from the drawing primitives in RFC 86 π. Mode primitives act on the drawing primitives and modify what they do. A mode primitive stays in effect until a new mode primitive resets that option π.
This is where it gets iconic π. The network standard stream interpreter can treat a mode primitive as a null operation if the feature is missing on a particular host, or it can do more detailed interpretation of the data stream that follows to get the results π«Ά. The drawing primitives can keep one standard format that never needs to change just to add new features π .
Modes, Colors, and Blinking πΈ
Overall modes that primitives could control include intensity levels and color selections for objects. Blinking of objects should be provided too π₯. For vectors, the ability to draw dashed lines is necessary π¦.
Character Strings π§
Character strings need their own set of specifications, bestie π. The beam is usually centered inside the rectangular area that defines a character's boundaries. The beam position is usually undefined once a character string is finished being drawn π.
Strong exception here π: excluding form control characters from strings is not okay with me π€. If they're included in the character string, they could handle shifting from upper to lower case, subscripting, superscripting, and underscoring, plus tab and other "carriage" motion functions π . The right characters could be pulled out at interpretation time to supply the info needed to display more complex strings β¨.
To make ALGOL-like delimiters, such as "then", possible, a convention for canonical character strings should be adopted π. Honestly, I think the Multics conventions in reference 1 will do the job π.
Character strings should also include a size specification and an orientation selection πΈ. Lots of devices have fixed hardware character generators, though, so some of these options may not be worth implementing as subroutines π.
Extra Symbols π¦
There's another area that needs more thought: the extra symbols that aren't specified in ASCII π. Some way of defining them should be provided inside the argument string itself. Multics lets you specify arbitrary characters by entering their octal equivalents, which is so clever π§. The convention should use a control character code followed by a l6-bit list name that specifies the sub-list defining the character π₯. The other option is to allow 8-bit characters and let the interpreter pick a sub-list whenever the character can't be realized with a hardware generator π.
The special form control characters to be used are:
a. BS - backspace
b. LF - for new line
c. SO/Sl - shift case
d. DC2 - superscript following characters
e. DC4 - subscript following characters
f. DC3 - special non-ASCII character follows
g. Tab - position to next tab. May be predefined or specified.
The Display List Pointer, NGDLP π
Another construct should be added to the ones proposed in RFC 86 β¨. This is the display list pointer, or NGDLP π. Its value is the next drawing primitive to be executed π«Ά. The value is a displacement from the head of a list πΈ. With no mode setting primitives, this value maps one to one with the drawing primitives transmitted in the NGDS π
.
NGDLP is needed for consistency when executing the nested list structure π. Whenever an execute list primitive is hit, the current value of NGDLP gets saved along with the list name and the current origin value π₯. When a list finishes executing, the last saved values get restored π.
Include Lists π§
An include list primitive would let a sub-list be treated like a macro instead of a subroutine π. This matters so that manipulating a sub-list doesn't change every sub-picture on the screen π. The include primitive should take parameters such as size, intensity, orientation, blinking, and so on π¦. After a sub-list gets included in another list, it's no longer treated as a separate entity π .
Manipulating Lists Without Retransmitting β¨
To cut down on how much data gets transferred, the stream interpreter should parse other commands too πΈ. These would let the receiving host manipulate a list without a retransmission π«Ά. The kinds of manipulation would include rescaling coordinates for shrinking or zooming, translating the origin, and rotation π₯. It would also be desirable to have manipulations that display or hide a list, or enable or disable light pen detections π.
Interacting With the Picture π
The problem of interacting with the displayed picture hasn't been addressed yet π, so this section is an attempt to get more discussion going π£οΈ. A keyboard or function keys pose no problem, because both can be handled as a standard message from the graphics terminal π.
Devices that interact with the picture or the screen, like light pens, mice, joysticks, or tablets, are a different and more complex story π. The problem is the standard one of linking the selected point to something meaningful, like a list or a primitive π§. That association should be made at the receiving host, since the NGDS has been changed in unknown ways π.
To let the transmitting host identify the object that was pointed at, the stack of suspended lists and the current value of NGDLP will qualify the object at any level of a hierarchical structure π¦. Normalized x,y coordinates should also be returned, plus a character displacement if a string was pointed at π₯. This structure will serve a light pen device super well, since the light pen mechanism lets you determine the currently executing primitive π.
Other devices interact with the picture asynchronously, and linking an x,y pair to a structure is harder for them π. That may mean the host generating the graphic data stream has to be responsible for making the association π«Ά. Here's another wrinkle: if you want to use a light pen in an area where no beam motion happens, some directive has to periodically sweep the screen and "find" the pen π. That might be a sub-list that gets executed periodically for this purpose β¨.
[ This RFC was put into machine readable form for entry ] [ into the online RFC archives by Jerry Tenenbaum 4/97 ]
References π
Osanna, J., Sahzer, J.
Remote Terminal Character Stream Processing of Multics
Proceedings SJCC, 1970, p. 671
π¦ where this page comes from
- ietf: rfc125 1971-04
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms