summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc5.txt
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
commit4bfd864f10b68b71482b35c818559068ef8d5797 (patch)
treee3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc5.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc5.txt')
-rw-r--r--doc/rfc/rfc5.txt949
1 files changed, 949 insertions, 0 deletions
diff --git a/doc/rfc/rfc5.txt b/doc/rfc/rfc5.txt
new file mode 100644
index 0000000..c51cd40
--- /dev/null
+++ b/doc/rfc/rfc5.txt
@@ -0,0 +1,949 @@
+Network Working Group 4691
+RFC-5 Jeff Rulifson
+ June 2, l969
+
+
+
+ DEL
+
+
+
+:DEL, 02/06/69 1010:58 JFR ; .DSN=1; .LSP=0; ['=] AND NOT SP ; ['?];
+dual transmission?
+
+ABSTRACT
+
+ The Decode-Encode Language (DEL) is a machine independent language
+ tailored to two specific computer network tasks:
+
+ accepting input codes from interactive consoles, giving immediate
+ feedback, and packing the resulting information into message
+ packets for network transmissin.
+
+ and accepting message packets from another computer, unpacking
+ them, building trees of display information, and sending other
+ information to the user at his interactive station.
+
+ This is a working document for the evolution of the DEL language.
+ Comments should be made through Jeff Rulifson at SRI.
+
+FORWARD
+
+ The initial ARPA network working group met at SRI on October 25-26,
+ 1968.
+
+ It was generally agreed beforehand that the runmning of interactive
+ programs across the network was the first problem that would be
+ faced.
+
+ This group, already in agreement about the underlaying notions of
+ a DEL-like approach, set down some terminology, expectations for
+ DEL programs, and lists of proposed semantic capability.
+
+ At the meeting were Andrews, Baray, Carr, Crocker, Rulifson, and
+ Stoughton.
+
+ A second round of meetings was then held in a piecemeal way.
+
+ Crocker meet with Rulifson at SRI on November 18, 1968. This
+ resulted in the incorporation of formal co-routines.
+
+ and Stoughton meet with Rulifson at SRI on Decembeer 12, 1968. It
+ was decided to meet again, as a group, probably at UTAH, in late
+ January 1969.
+
+ The first public release of this paper was at the BBN NET meeting in
+ Cambridge on February 13, 1969.
+
+NET STANDARD TRANSLATORS
+
+ NST The NST library is the set of programs necessary to mesh
+ efficiently with the code compiled at the user sites from the DEL
+ programs it receives. The NST-DEL approach to NET interactive system
+ communication is intended to operate over a broad spectrum.
+
+ The lowest level of NST-DEL usage is direct transmission to the
+ server-host, information in the same format that user programs
+ would receive at the user-host.
+
+ In this mode, the NST defaults to inaction. The DEL program
+ does not receive universal hardware representation input but
+ input in the normal fashion for the user-host.
+
+ And the DEL 1 program becomes merely a message builder and
+ sender.
+
+ A more intermediate use of NST-DEL is to have echo tables for a
+ TTY at the user-host.
+
+ In this mode, the DEL program would run a full duplex TTY for
+ the user.
+
+ It would echo characters, translate them to the character set
+ of the server-host, pack the translated characters in messages,
+ and on appropriate break characters send the messages.
+
+ When messages come from the server-host, the DEL program would
+ translate them to the user-host character set and print them on
+ his TTY.
+
+ A more ambitious task for DEL is the operation of large,
+ display-oriented systems from remote consoles over the NET.
+
+ Large interactive systems usually offer a lot of feedback to
+ the user. The unusual nature of the feedback make it
+ impossible to model with echo table, and thus a user program
+ must be activated in a TSS each time a button state is changed.
+
+ This puts an unnecessarily large load on a TSS, and if the
+ system is being run through the NET it could easily load two
+ systems.
+
+ To avoid this double overloading of TSS, a DEL program will
+ run on the user-host. It will handle all the immediate
+ feedback, much like a complicated echo table. At appropriate
+ button pushes, message will be sent to the server-host and
+ display updates received in return.
+
+ One of the more difficult, and often neglected, problems is the
+ effective simulation of one nonstandard console on another non-
+ standard console.
+
+ We attempt to offer a means of solving this problem through
+ the co-routine structure of DEL programs. For the
+ complicated interactive systems, part of the DEL programs
+ will be constructed by the server-host programmers.
+ Interfaces between this program and the input stream may
+ easily be inserted by programmers at the user-host site.
+
+
+UNIVERSAL HARDWARE REPRESENTATION
+
+ To minimize the number of translators needed to map any facility's
+ user codes to any other facility, there is a universal hardware
+ representation.
+
+ This is simply a way of talking, in general terms, about all the
+ hardware devices at all the interactive display stations in the initial
+ network.
+
+ For example, a display is thought of as being a square, the
+ mid-point has coordinates (0.0), the range is -1 to 1 on both
+ axes. A point may now be specified to any accuracy, regardless of
+ the particular number of density of rastor points on a display.
+
+ The representation is discussed in the semantic explanations
+ accompanying the formal description of DEL.
+
+INTRODUCTION TO THE NETWORK STANDARD TRANSLATOR (NST)
+
+ Suppose that a user at a remote site, say Utah, is entered in the
+ AHI system and wants to run NLS.
+
+ The first step is to enter NLS in the normal way. At that time
+ the Utah system will request a symbolic program from NLS.
+
+ REP This program is written in DEL. It is called the NLS
+ Remote Encode Program (REP).
+
+ The program accepts input in the Universal Hardware
+ Representation and translates it to a form usable by NLS.
+
+ It may pack characters in a buffer, also do some local
+ feedback.
+
+ When the program is first received at Utah it is compiled and
+ loaded to be run in conjunction with a standard library.
+
+ All input from the Utah console first goes to the NLS NEP. It is
+ processed, parsed, blocked, translated, etc. When NEP receives a
+ character appropriate to its state it may finally initiate
+ transfers to the 940. The bits transferred are in a form
+ acceptable to the 940, and maybe in a standard form so that the
+ NLSW need not differentiate between Utah and other NET users.
+
+
+ADVANTAGES OF NST
+
+ After each node has implemented the library part of the NST, it
+ need only write one program for each subsystem, namely the
+ symbolic file it sends to each user that maps the NET hardware
+ representation into its own special bit formats.
+
+ This is the minimum programming that can be expected if
+ console is used to its fullest extent.
+
+ Since the NST which runs the encode translation is coded at the
+ user site, it can take advantage of hardware at its consoles to
+ the fullest extent. It can also add or remove hardware
+ features without requiring new or different translation tables
+ from the host.
+
+ Local users are also kept up to date on any changes in the system
+ offered at the host site. As new features are added,
+ the host programmers change the symbolic encode program. When
+ this new program is compiled and used at the user site, the new
+ features are automatically included.
+
+ The advantages of having the encode translation programs
+ transferred symbolically should be obvious.
+
+ Each site can translate any way it sees fit. Thus machine code
+ for each site can be produced to fit that site; faster run
+ times and greater code density will be the result.
+
+ Moreover, extra symbolic programs, coded at the user site, may
+ be easily interfaced between the user's monitor system and the
+ DEL program from the host machine. This should ease the
+ problem of console extension (e.g. accommodating unusual keys and
+ buttons) without loss of the flexibility needed for man-machine
+ interaction.
+
+
+ It is expected that when there is matching hardware, the symbolic
+ programs will take this into account and avoid any unnecessary
+ computing. This is immediately possible through the code
+ translation constructs of DEL. It may someday be possible through
+ program composition (when Crocker tells us how??)
+
+
+AHI NLS - USER CONSOLE COMMUNICATION - AN EXAMPLE
+
+ BLOCK DIAGRAM
+
+ The right side of the picture represents functions done at the
+ user's main computer; the left side represents those done at the
+ host computer.
+
+ Each label in the picture corresponds to a statement with the
+ same name.
+
+ There are four trails associated with this picture. The first
+ links (in a forward direction) the labels which are concerned
+ only with network information. The second links the total
+ information flow (again in a forward direction). The last two
+ are equivalent to the first two but in a backward direction.
+ They may be set with pointers t1 through t4 respectively.
+
+ [">tif:] OR I" >nif"]; ["<tif:] OR ["<nif"];
+
+USER-TO-HOST TRANSMISSION
+
+ Keyboard is the set of input devices at the user's console.
+ Input bits from stations, after drifting through levels of monitor
+ and interrupt handlers, eventually come to the encode translator.
+ [>nif(encode)]
+
+ Encode maps the semi-raw input bits into an input stream in a
+ form suited to the serving-host subsystem which will process the
+ input. [>nif(hrt)<nif(keyboard)]
+
+ The Encode program was supplied by the server-host subsystem
+ when the subsystem was first requested. It is sent to the user
+ machine in symbolic form and is compiled at the user machine
+ into code particularly suited to that machine.
+
+ It may pack to break characters, map multiple characters to
+ single characters and vice versa, do character translation, and
+ give immediate feedback to the user.
+
+ 1 dm Immediate feedback from the encode translator first goes to
+ local display management, where it is mapped from the NET standard
+ to the local display hardware.
+
+ A wide range of echo output may come from the encode
+ translator. Simple character echoes would be a minimum, while
+ command and machine-state feedback will be common.
+
+ It is reasonable to expect control and feedback functions not
+ even done at the server-host user stations to be done in local
+ display control. For example, people with high-speed displays
+ may want to selectively clear curves on a Culler display, a
+ function which is impossible on a storage tube.
+
+ Output from the encode translator for the server-host goes to the
+ invisible IMP, is broken into appropriate sizes and labeled by the
+ encode translator, and then goes to the NET-to-host translator.
+
+ Output from the user may be more than on-line input. It may be
+ larger items such as computer-generated data, or files
+ generated and used exclusively at the server-host site but
+ stored at the user-host site.
+
+ Information of this kind may avoid translation, if it is already in
+ server-host format, or it may undergo yet another kind of translation
+ if it is a block of data.
+
+ hrp It finally gets to the host, and must then go through the
+ host reception program. This maps and reorders the standard
+ transmission-style packets of bits sent by the encode programs
+ into messages acceptable to the host. This program may well be
+ part of the monitor of the host machine. [>tif(net mode)<nif(code)]
+
+
+HOST-TO-USER TRANSMISSION
+
+ decode Output from the server-host initially goes through decode,
+ a translation map similar to, and perhaps more complicated than,
+ the encode map. [>nif(urt)>tif(imp ctrl)<tif(net mode)]
+
+ This map at least formats display output into a simplified
+ logical-entity output stream, of which meaningful pieces may be
+ dealt with in various ways at the user site.
+
+ The Decode program was sent to the host machine at the same
+ time that the Encode program was sent to the user machine.
+ The program is initially in symbolic form and is compiled
+ for efficient running at the host machine.
+
+ Lines of charaters should be logically identified so that
+ different line widths can be handled at the user site.
+
+ Some form of logical line identification must also be made.
+ For example, if a straight line is to be drawn across the
+ display this fact should be transmitted, rather than a
+ series of 500 short vectors.
+
+ As things firm up, more and more complicated structural
+ display information (in the manner of LEAP) should be sent
+ and accommodated at user sites so that the responsibility for
+ real-time display manipulation may shift closer to the user.
+
+ imp ctrl The server-host may also want to send control
+ information to IMPs. Formatting of this information is done by
+ the host decoder. [>tif(urt) <tif(decode)]
+
+ The other control information supplied by the host decoder is
+ message break up and identification so that proper assembly and
+ sorting can be done at the user site.
+
+ From the host decoder, information does to the invisible IMP, and
+ directly to the NET-to-user translator. The only operation done
+ on the messages is that they may be shuffled.
+
+ urt The user reception translator accepts messages from the
+ user-site IMP 1 and fixes them up for user-site display.
+ [>nif(d ctrl)>tif(prgm ctrl)<tif(imp ctrl)<nif(decode)]
+
+ The minimal action is a reordering of the message pieces.
+
+ dctrl For display output, however, more needs to be done. The
+ NET logical display information must be put in the format of
+ the user site. Display control does this job. Since it
+ coordinates between (encode) and (decode) it is able to offer
+ features of display management local to the user site.
+ [>nif(display)<nif(urt)]
+
+ prgmctrl Another action may be the selective translation and
+ routing of information to particular user-site subsystems.
+ [>tif(dctrl)<tif(urt)]
+
+ For example, blocks of floating-point information may be
+ converted to user-style words and sent, in block form, to a
+ subsystem for processing or storage.
+
+ The styles and translation of this information may well be a
+ compact binary format suitable for quick translation, rather
+ than a print-image-oriented format.
+
+ (display) is the output to the user. [<nif(d ctrl)]
+
+
+ USER-TO-HOST INDIRECT TRANSMISSION
+
+ (net mode) This is the mode where a remote user can link to a node
+ indirectly through another node. [<nif(decode)<tif(hrt)]
+
+
+DEL SYNTAX
+
+ NOTES FOR NLS USERS
+
+ All statements in this branch which are not part of the compiler
+ must end with a period.
+
+ To compile the DEL compiler:
+
+ Set this pattern for the content analyzer ( (symbol for up arrow)P1
+ SE(P1) <-"-;). The pointer "del" is on the first character of pattern.
+
+ Jump to the first statement of the compiler. The pointer "c"
+ is on this statement.
+
+ And output the compiler to file ( '/A-DEL' ). The pointer "f"
+ is on the name of the file for the compiler output -
+
+ PROGRAMS
+
+ SYNTAX
+
+ -meta file (k=100.m=300,n=20,s=900)
+
+ file = mesdecl $declaration $procedure "FINISH";
+
+ procedure =
+
+ procname (
+
+ (
+
+ type "FUNCTION" /
+
+ "PROCEDURE" ) .id (type .id / -empty)) /
+
+ "CO-ROUTINE") ' /
+
+ $declaration labeledst $(labeledst ';) "endp.";
+
+ labeledst = ((left arrow symbol).id ': / .empty) statement;
+
+ type = "INTEGER" / "REAL" ;
+
+ procname = .id;
+
+ Functions are differentiated from procedures to aid compilers in
+ better code production and run time checks.
+
+ Functions return values.
+
+ Procedures do not return values.
+
+ Co-routines do not have names or arguments. Their initial
+ envocation points are given the pipe declaration.
+
+ It is not clear just how global declarations are to be??
+
+DECLARATIONS
+
+ SYNTAX
+
+ declaration = numbertype / structuredtype / label / lcl2uhr /
+ uhr2rmt / pipetype;
+
+ numbertype = : ("REAL" / "INTEGER") ("CONSTANT" conlist /
+ varlist);
+
+ conlist =
+
+ .id '(left arrow symbol)constant
+
+ $('. .id '(left arrow symbol)constant);
+
+ varlist =
+
+ .id ('(left arrow symbol)constant / .empty)
+
+ $('. .id('(left arrow symbol)constant / .empty));
+
+ idlist = .id $('. .id);
+
+ structuredtype = (tree" / "pointer" / "buffer" ) idlist;
+
+ label = "LABEL1" idlist;
+
+ pipetype = PIPE" pairedids $(', pairedids);
+
+ pairedids = .id .id;
+
+ procname = .id;
+
+ integerv = .id;
+
+ pipename = .id;
+
+ labelv = .id;
+
+ Variables which are declared to be constant, may be put in
+ read-only memory at run time.
+
+ The label declaration is to declare cells which may contain the
+ machine addresses of labels in the program as their values. This
+ is not the B5500 label declaration.
+
+ In the pipe declaration the first .ID of each pair is the name of
+ the pipe, the second is thke initial starting point for the pipe.
+
+ARITHMETIC
+
+ SYNTAX
+
+ exp = "IF" conjunct "THEN" exp "ELSE" exp;
+
+ sum = term (
+
+ '+ sum /
+
+ '- sum /
+
+ -empty);
+
+ term = factor (
+
+ '* term /
+
+ '/ term /
+
+ '(up arrow symbol) term /
+
+ .empty);
+
+ factor = '- factor / bitop;
+
+ bitop = compliment (
+
+ '/' bitop /
+
+ '/'\ bitop /
+
+ '& bitop / (
+
+ .empty);
+
+ compliment = "--" primary / primary;
+
+ (symbol for up arrow) means mod. and /\ means exclusive or.
+
+ Notice that the uniary minus is allowable, and parsed so you can
+ write x*-y.
+
+ Since there is no standard convention with bitwise operators, they
+ all have the same precedence, and parentheses must be used for
+ grouping.
+
+ Compliment is the l's compliment.
+
+ It is assumed that all arithmetic and bit operations take place in
+ the mode and style of the machine running the code. Anyone who
+ takes advantage of word lengths, two's compliment arithmetic, etc.
+ will eventually have problems.
+
+PRIMARY
+
+ SYNTAX
+
+ primary =
+
+ constant /
+
+ builtin /
+
+ variable / (
+
+ block /
+
+ '( exp ');
+
+ variable = .id (
+
+ '(symbol for left arrow) exp /
+
+ '( block ') /
+
+ .empty);
+
+ constant = integer / real / string;
+
+ builtin =
+
+ mesinfo /
+
+ cortnin /
+
+ ("MIN" / "MAX") exp $('. exp) '/ ;
+
+ parenthesized expressions may be a series of expressions. The
+ value of a series is the value of the last one executed at run time.
+
+ Subroutines may have one call by name argument.
+
+ Expressions may be mixed. Strings are a big problem? Rulifson
+ also wants to get rid of real numbers!!
+
+CONJUNCTIVE EXPRESSION
+
+ SYNTAX
+
+ conjunct = disjunct ("AND" conjunct / .empty);
+
+ disjunct = negation ("OR" negation / .empty);
+
+ negation = "NOT" relation / relation;
+
+ relation =
+
+ '( conjunct ') /
+
+ sum (
+
+ "<=" sum /
+
+ ">=" sum /
+
+ '< sum /
+
+ '> sum /
+
+ '= sum /
+
+ '" sum /
+
+ .empty);
+
+ The conjunct construct is rigged in such a way that a conjunct
+ which is not a sum need not have a value, and may be evaluated
+ using jumps in the code. Reference to the conjunct is made only
+ in places where a logical decision is called for (e.g. if and
+ while statements).
+
+ We hope that most compilers will be smart enough to skip
+ unnecessary evaluations at run time. I.e a conjunct in which the
+ left part is false or a disjunct with the left part true need not
+ have the corresponding right part evaluated.
+
+ARITHMETIC EXPRESSION
+
+ SYNTAX
+
+ statement = conditional / unconditional;
+
+ unconditional = loopst / cases / cibtrikst / uist / treest /
+ block / null / exp;
+
+ conditional = "IF" conjunct "THEN" unconditional (
+
+ "ELSE" conditional /
+
+ .empty);
+
+ block = "begin" exp $('; exp) "end";
+
+ An expressions may be a statement. In conditional statements the
+ else part is optional while in expressions it is mandatory. This
+ is a side effect of the way the left part of the syntax rules are
+ ordered.
+
+SEMI-TREE MANIPULATION AND TESTING
+
+ SYNTAX
+
+ treest = setpntr / insertpntr / deletepntr;
+
+ setpntr = "set" "pointer" pntrname "to" pntrexp;
+
+ pntrexp = direction pntrexp / pntrname;
+
+ insertpntr = "insert" pntrexp "as"
+
+ (("left" / "right") "brother") /
+
+ (("first" / "last: ) "daughter") "of" pntrexp;
+
+ direction =
+
+ "up" /
+
+ "down" /
+
+ "forward" /
+
+ "backward: /
+
+ "head" /
+
+ "tail";
+
+ plantree = "replace" pntrname "with" pntrexp;
+
+ deletepntr = "delete: pntrname;
+
+ tree = '( tree1 ') ;
+
+ tree1 = nodename $nodename ;
+
+ nodename = terminal / '( tree1 ');
+
+ terminal = treename / buffername / point ername;
+
+ treename = id;
+
+ treedecl = "pointer" .id / "tree" .id;
+
+ Extra parentheses in tree building results in linear subcategorization,
+ just as in LISP.
+
+FLOW AND CONTROL
+
+ controlst = gost / subst / loopstr / casest;
+
+ GO TO STATEMENTS
+
+ gost = "GO" "TO" (labelv / .id);
+
+ assignlabel = "ASSIGN" .id "TO" labelv;
+
+ SUBROUTINES
+
+ subst = callst / returnst / cortnout;
+
+ callst = "CALL" procname (exp / .emptyu);
+
+ returnst = "RETURN" (exp / .empty);
+
+ cortnout = "STUFF" exp "IN" pipename;
+
+ cortnin = "FETCH" pipename;
+
+ FETCH is a builtin function whose value is computed by envoking
+ the named co-routine.
+
+ LOOP STATEMENTS
+
+ SYNTAX
+
+ loopst = whilest / untilst / forst;
+
+ whilest = "WHILE" conjunct "DO" statement;
+
+ untilst = "UNTIL" conjunct "DO" statement;
+
+ forst = "FOR" integerv '- exp ("BY" exp / .empty) "TO" exp
+
+ "DO" statements;
+
+ The value of while and until statements is defined to be false
+ and true (or 0 and non-zero) respectively.
+
+ For statements evaluate their initial exp, by part, and to part
+ once, at initialization time. The running index of for
+ statements is not available for change within the loop, it may
+ only be read. If, some compilers can take advantage of this
+ (say put it in a register) all the better. The increment and
+ the to bound will both be rounded to integers during the
+ initialization.
+
+CASE STATEMENTS
+
+ SYNTAX
+
+ casest = ithcasest / condcasest;
+
+ ithcasest = "ITHCASE" exp "OF" "BEGIN" statement $(';
+ statement) "END";
+
+ condcasest = "CASE" exp "OF" "BEGIN" condcs $('; condcs)
+ "OTHERWISE" statement "END";
+
+
+ condcs = conjunct ': statement;
+
+ The value of a case statement is the value of the last case executed.
+
+EXTRA STATEMENTS
+
+ null = "NULL";
+
+I/O STATEMENTS
+
+ iost = messagest / dspyst ;
+
+ MESSAGES
+
+ SYNTAX
+
+ messagest = buildmes / demand;
+
+ buildmest = startmes / appendmes / sendmes;
+
+ startmes = "start" "message";
+
+ appendmes = "append" "message" "byute" exp;
+
+ sendmes = "send" "message";
+
+
+ demandmes = "demand" "Message";
+
+ mesinfo =
+
+ "get" "message" "byte"
+
+ "message1" "length" /
+
+ "message" empty: '?;
+
+ mesdecl = "message" "bytes" "are" ,byn "bits" long" '..
+
+DISPLAY BUFFERS
+
+ SYNTAX
+
+ dspyst = startbuffer / bufappend / estab;
+
+ startbuffer - "start" "buffer";
+
+ bufappend = "append" bufstuff $('& bufstuff);
+
+ bufstuff = :
+
+ "parameters" dspyparm $('. dspyparm) /
+
+ "character" exp /
+
+ "string"1 strilng /
+
+ "vector" ("from" exp ':exp / .empty) "to" exp '. exp /
+
+ "position" (onoff / .empty) "beam" "to" exp '= exp/
+
+ curve" ;
+
+ dspyparm F :
+
+ "intensity" "to" exp /
+
+ "character" "width" "to" exp /
+
+ "blink" onoff /
+
+ "italics" onff;
+
+ onoff = "on" / "off";
+
+ estab = "establish" buffername;
+
+ LOGICAL SCREEN
+
+ The screen is taken to be a square. The coordinates are
+ normalized from -1 to +1 on both axes.
+
+ Associated with the screen is a position register, called
+ PREG. The register is a triple <x.y.r> where x and y
+ specify a point on the screen and r is a rotation in
+ radians, counter clockwise, from the x-axis.
+
+ The intensity, called INTENSITY, is a real number in the
+ range from 0 to 1. 0 is black, 1 is as light as your
+ display can go, and numbers in between specify the relative
+ log of the intensity difference.
+
+ Character frame size.
+
+ Blink bit.
+
+ BUFFER BUILDING
+
+ The terminal nodes of semi-trees are either semi-tree names
+ or display buffers. A display buffer is a series of logical
+ entities, called bufstuff.
+
+ When the buffer is initilized, it is empty. If no
+ parameters are initially appended, those in effect at the
+ end of the display of the last node in the semi-tree will be in
+ effect for the display of this node.
+
+ As the buffer is built, the logical entities are added to it.
+ When it is established as a buffername, the buffer is
+ closed, and further appends are prohibited. It is only a
+ buffername has been established that it may be used in a tree
+ building statement.
+
+ LOGICAL INPUT DEVICES
+
+ Wand
+
+ Joy Stick
+
+ Keyboard
+
+ Buttons
+
+ Light Pens
+
+ Mice
+
+ AUDIO OUTPUT DEVICES
+
+ .end
+
+
+SAMPLE PROGRAMS
+
+ Program to run display and keyboard as tty.
+
+ to run NLS
+
+ input part
+
+ display part
+
+ DEMAND MESSAGE;
+
+ While LENGTH " O DO
+
+ ITHCASE GETBYTE OF Begin
+
+ ITHCASE GETBYTE OF %file area uipdate% BEGIN
+
+ %literal area%
+
+ %message area%
+
+ %name area%
+
+ %bug%
+
+ %sequence specs%
+
+ %filter specs%
+
+ %format specs%
+
+ %command feedback line%
+
+ %filer area%
+
+ %date time%
+
+ %echo register%
+
+ BEGIN %DEL control%
+
+DISTRIBUTION LIST
+
+ Steve Carr
+ Department of Computer Science
+ University of Utah
+ Salt Lake City, Utah 84112
+ Phone 801-322-7211 X8224
+
+ Steve Crocker
+
+ Boelter Hall
+ University of California
+ Los Angeles, California
+ Phone 213-825-4864
+
+ Jeff Rulifson
+
+ Stanford Research Institute
+ 333 Ravenswood
+ Menlo Park, California 94035
+ Phone 415-326-6200 X4116
+
+ Ron Stoughton
+
+ Computer Research Laboratory
+ University of California
+ Santa Barbara, California 93106
+ Phone 805-961-3221
+
+ Mehmet Baray
+
+ Corey Hall
+ University of California
+ Berkeley, California 94720
+ Phone 415-843-2621
+
+
+
+