As per Relevance of the word information, we have this rfc below:





Network Working Group 4691
RFC-5 Jeff
June 2, l969







:DEL, 02/06/69 1010:58 JFR ; .DSN=1; .LSP=0; ['=] AND NOT SP ; ['?];
dual transmission



The Decode-Encode Language (DEL) is a machine independent
tailored to two specific computer network tasks

accepting input codes from interactive consoles, giving
feedback, and packing the resulting information into message
packets for network transmissin

and accepting message packets from another computer,
them, building trees of display information, and sending
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



The initial ARPA network working group met at SRI on October 25-26,
1968.

It was generally agreed beforehand that the runmning of
programs across the network was the first problem that would
faced

This group, already in agreement about the underlaying notions
a DEL-like approach, set down some terminology, expectations
DEL programs, and lists of proposed semantic capability

At the meeting were Andrews, Baray, Carr, Crocker, Rulifson,
Stoughton

A second round of meetings was then held in a piecemeal way

Crocker meet with Rulifson at SRI on November 18, 1968.
resulted in the incorporation of formal co-routines

and Stoughton meet with Rulifson at SRI on Decembeer 12, 1968.
was decided to meet again, as a group, probably at UTAH, in
January 1969.

The first public release of this paper was at the BBN NET meeting
Cambridge on February 13, 1969.

NET STANDARD TRANSLATORS

NST The NST library is the set of programs necessary to
efficiently with the code compiled at the user sites from the
programs it receives. The NST-DEL approach to NET interactive
communication is intended to operate over a broad spectrum

The lowest level of NST-DEL usage is direct transmission to
server-host, information in the same format that user
would receive at the user-host

In this mode, the NST defaults to inaction. The DEL
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
sender

A more intermediate use of NST-DEL is to have echo tables for
TTY at the user-host

In this mode, the DEL program would run a full duplex TTY
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
translate them to the user-host character set and print them
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
the user. The unusual nature of the feedback make
impossible to model with echo table, and thus a user
must be activated in a TSS each time a button state is changed

This puts an unnecessarily large load on a TSS, and if
system is being run through the NET it could easily load
systems

To avoid this double overloading of TSS, a DEL program
run on the user-host. It will handle all the
feedback, much like a complicated echo table. At
button pushes, message will be sent to the server-host
display updates received in return

One of the more difficult, and often neglected, problems is
effective simulation of one nonstandard console on another non
standard console

We attempt to offer a means of solving this problem
the co-routine structure of DEL programs. For
complicated interactive systems, part of the DEL
will be constructed by the server-host programmers
Interfaces between this program and the input stream
easily be inserted by programmers at the user-host site


UNIVERSAL HARDWARE

To minimize the number of translators needed to map any facility'
user codes to any other facility, there is a universal
representation

This is simply a way of talking, in general terms, about all
hardware devices at all the interactive display stations in the
network

For example, a display is thought of as being a square,
mid-point has coordinates (0.0), the range is -1 to 1 on
axes. A point may now be specified to any accuracy, regardless
the particular number of density of rastor points on a display

The representation is discussed in the semantic
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
AHI system and wants to run NLS

The first step is to enter NLS in the normal way. At that
the Utah system will request a symbolic program from NLS

REP This program is written in DEL. It is called the
Remote Encode Program (REP).

The program accepts input in the Universal
Representation and translates it to a form usable by NLS

It may pack characters in a buffer, also do some
feedback

When the program is first received at Utah it is compiled
loaded to be run in conjunction with a standard library

All input from the Utah console first goes to the NLS NEP. It
processed, parsed, blocked, translated, etc. When NEP receives
character appropriate to its state it may finally
transfers to the 940. The bits transferred are in a
acceptable to the 940, and maybe in a standard form so that
NLSW need not differentiate between Utah and other NET users


ADVANTAGES OF

After each node has implemented the library part of the NST,
need only write one program for each subsystem, namely
symbolic file it sends to each user that maps the NET
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
user site, it can take advantage of hardware at its consoles
the fullest extent. It can also add or remove hardware
features without requiring new or different translation
from the host

Local users are also kept up to date on any changes in the
offered at the host site. As new features are added
the host programmers change the symbolic encode program.
this new program is compiled and used at the user site, the
features are automatically included

The advantages of having the encode translation
transferred symbolically should be obvious

Each site can translate any way it sees fit. Thus machine
for each site can be produced to fit that site; faster
times and greater code density will be the result

Moreover, extra symbolic programs, coded at the user site,
be easily interfaced between the user's monitor system and
DEL program from the host machine. This should ease
problem of console extension (e.g. accommodating unusual keys
buttons) without loss of the flexibility needed for man-
interaction


It is expected that when there is matching hardware, the
programs will take this into account and avoid any
computing. This is immediately possible through the
translation constructs of DEL. It may someday be possible
program composition (when Crocker tells us how??)


AHI NLS - USER CONSOLE COMMUNICATION - AN

BLOCK

The right side of the picture represents functions done at
user's main computer; the left side represents those done at
host computer

Each label in the picture corresponds to a statement with
same name

There are four trails associated with this picture. The
links (in a forward direction) the labels which are
only with network information. The second links the
information flow (again in a forward direction). The last
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"]; ["
USER-TO-HOST

Keyboard is the set of input devices at the user's console
Input bits from stations, after drifting through levels of
and interrupt handlers, eventually come to the encode translator
[>nif(encode)]

Encode maps the semi-raw input bits into an input stream in
form suited to the serving-host subsystem which will process
input. [>nif(hrt)
The Encode program was supplied by the server-host
when the subsystem was first requested. It is sent to the
machine in symbolic form and is compiled at the user
into code particularly suited to that machine

It may pack to break characters, map multiple characters
single characters and vice versa, do character translation,
give immediate feedback to the user

1 dm Immediate feedback from the encode translator first goes
local display management, where it is mapped from the NET
to the local display hardware

A wide range of echo output may come from the
translator. Simple character echoes would be a minimum,
command and machine-state feedback will be common

It is reasonable to expect control and feedback functions
even done at the server-host user stations to be done in
display control. For example, people with high-speed
may want to selectively clear curves on a Culler display,
function which is impossible on a storage tube

Output from the encode translator for the server-host goes to
invisible IMP, is broken into appropriate sizes and labeled by
encode translator, and then goes to the NET-to-host translator

Output from the user may be more than on-line input. It may
larger items such as computer-generated data, or
generated and used exclusively at the server-host site
stored at the user-host site

Information of this kind may avoid translation, if it is already
server-host format, or it may undergo yet another kind of
if it is a block of data

hrp It finally gets to the host, and must then go through
host reception program. This maps and reorders the
transmission-style packets of bits sent by the encode
into messages acceptable to the host. This program may well
part of the monitor of the host machine. [>tif(net mode)

HOST-TO-USER

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)
This map at least formats display output into a
logical-entity output stream, of which meaningful pieces may
dealt with in various ways at the user site

The Decode program was sent to the host machine at the
time that the Encode program was sent to the user machine
The program is initially in symbolic form and is
for efficient running at the host machine

Lines of charaters should be logically identified so
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
display this fact should be transmitted, rather than
series of 500 short vectors

As things firm up, more and more complicated
display information (in the manner of LEAP) should be
and accommodated at user sites so that the responsibility
real-time display manipulation may shift closer to the user

imp ctrl The server-host may also want to send
information to IMPs. Formatting of this information is done
the host decoder. [>tif(urt)
The other control information supplied by the host decoder
message break up and identification so that proper assembly
sorting can be done at the user site

From the host decoder, information does to the invisible IMP,
directly to the NET-to-user translator. The only operation
on the messages is that they may be shuffled

urt The user reception translator accepts messages from
user-site IMP 1 and fixes them up for user-site display.
[>nif(d ctrl)>tif(prgm ctrl)
The minimal action is a reordering of the message pieces

dctrl For display output, however, more needs to be done.
NET logical display information must be put in the format
the user site. Display control does this job. Since
coordinates between (encode) and (decode) it is able to
features of display management local to the user site
[>nif(display)
prgmctrl Another action may be the selective translation
routing of information to particular user-site subsystems
[>tif(dctrl)
For example, blocks of floating-point information may
converted to user-style words and sent, in block form, to
subsystem for processing or storage

The styles and translation of this information may well be a
compact binary format suitable for quick translation,
than a print-image-oriented format

(display) is the output to the user. [

USER-TO-HOST INDIRECT

(net mode) This is the mode where a remote user can link to a
indirectly through another node. [

DEL

NOTES FOR NLS

All statements in this branch which are not part of the
must end with a period

To compile the DEL compiler

Set this pattern for the content analyzer ( (symbol for up arrow)P
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 -





-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
better code production and run time checks

Functions return values

Procedures do not return values

Co-routines do not have names or arguments. Their
envocation points are given the pipe declaration

It is not clear just how global declarations are to be??





declaration = numbertype / structuredtype / label / lcl2uhr /
uhr2rmt / pipetype

numbertype = : ("REAL" / "INTEGER") ("CONSTANT" conlist /
varlist);

conlist =

.id '(left arrow symbol)

$('. .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
read-only memory at run time

The label declaration is to declare cells which may contain
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
the pipe, the second is thke initial starting point for the pipe





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
write x*-y

Since there is no standard convention with bitwise operators,
all have the same precedence, and parentheses must be used
grouping

Compliment is the l's compliment

It is assumed that all arithmetic and bit operations take place
the mode and style of the machine running the code. Anyone
takes advantage of word lengths, two's compliment arithmetic, etc
will eventually have problems





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.
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?
also wants to get rid of real numbers!!

CONJUNCTIVE



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
which is not a sum need not have a value, and may be
using jumps in the code. Reference to the conjunct is made
in places where a logical decision is called for (e.g. if
while statements).

We hope that most compilers will be smart enough to
unnecessary evaluations at run time. I.e a conjunct in which
left part is false or a disjunct with the left part true need
have the corresponding right part evaluated

ARITHMETIC



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
else part is optional while in expressions it is mandatory.
is a side effect of the way the left part of the syntax rules
ordered

SEMI-TREE MANIPULATION AND



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

controlst = gost / subst / loopstr / casest

GO TO

gost = "GO" "TO" (labelv / .id);

assignlabel = "ASSIGN" .id "TO" labelv



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
the named co-routine

LOOP



loopst = whilest / untilst / forst

whilest = "WHILE" conjunct "DO" statement

untilst = "UNTIL" conjunct "DO" statement

forst = "FOR" integerv '- exp ("BY" exp / .empty) "TO"

"DO" statements

The value of while and until statements is defined to be
and true (or 0 and non-zero) respectively

For statements evaluate their initial exp, by part, and to
once, at initialization time. The running index of
statements is not available for change within the loop, it
only be read. If, some compilers can take advantage of
(say put it in a register) all the better. The increment
the to bound will both be rounded to integers during
initialization

CASE



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

null = "NULL";

I/O

iost = messagest / dspyst ;





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



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

The screen is taken to be a square. The coordinates
normalized from -1 to +1 on both axes

Associated with the screen is a position register,
PREG. The register is a triple where x and y
specify a point on the screen and r is a rotation
radians, counter clockwise, from the x-axis

The intensity, called INTENSITY, is a real number in
range from 0 to 1. 0 is black, 1 is as light as
display can go, and numbers in between specify the
log of the intensity difference

Character frame size

Blink bit

BUFFER

The terminal nodes of semi-trees are either semi-tree
or display buffers. A display buffer is a series of
entities, called bufstuff

When the buffer is initilized, it is empty. If
parameters are initially appended, those in effect at
end of the display of the last node in the semi-tree will be
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
closed, and further appends are prohibited. It is only
buffername has been established that it may be used in a
building statement

LOGICAL INPUT



Joy





Light



AUDIO OUTPUT

.


SAMPLE

Program to run display and keyboard as tty

to run

input

display

DEMAND MESSAGE

While LENGTH " O

ITHCASE GETBYTE OF

ITHCASE GETBYTE OF %file area uipdate%

%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

Steve
Department of Computer
University of
Salt Lake City, Utah 84112
Phone 801-322-7211 X8224

Steve

Boelter
University of
Los Angeles,
Phone 213-825-4864

Jeff

Stanford Research
333
Menlo Park, California 94035
Phone 415-326-6200 X4116

Ron

Computer Research
University of
Santa Barbara, California 93106
Phone 805-961-3221

Mehmet

Corey
University of
Berkeley, California 94720
Phone 415-843-2621











if you see any problems within the linking, don't worry be happy,
this is version 0.1 of the Relevance System and you gotta expect some crappy subroutines sometimes,
just be content we did not write this in Java, which would have made this "bigger and better" HAHAHHA.




RFC documents can be found at I.E.T.F.



Relevance System Copyright © 2002 Spectrum WorldResearch
other technical nosh by ServerMasters Corporation
collaboration of BobX







Spectrum