RFC5 Decode Encode Language (DEL)

0005 Decode Encode Language (DEL). J. Rulifson. June 1969. (Format: TXT=26408 bytes) (Status: UNKNOWN)

日本語訳
RFC一覧

参照

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"]; ["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)tif(net mode)nif(urt)>tif(imp ctrl)tif(urt) nif(d ctrl)>tif(prgm ctrl)nif(display)tif(dctrl)=" 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  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

一覧

 RFC 1〜100  RFC 1401〜1500  RFC 2801〜2900  RFC 4201〜4300 
 RFC 101〜200  RFC 1501〜1600  RFC 2901〜3000  RFC 4301〜4400 
 RFC 201〜300  RFC 1601〜1700  RFC 3001〜3100  RFC 4401〜4500 
 RFC 301〜400  RFC 1701〜1800  RFC 3101〜3200  RFC 4501〜4600 
 RFC 401〜500  RFC 1801〜1900  RFC 3201〜3300  RFC 4601〜4700 
 RFC 501〜600  RFC 1901〜2000  RFC 3301〜3400  RFC 4701〜4800 
 RFC 601〜700  RFC 2001〜2100  RFC 3401〜3500  RFC 4801〜4900 
 RFC 701〜800  RFC 2101〜2200  RFC 3501〜3600  RFC 4901〜5000 
 RFC 801〜900  RFC 2201〜2300  RFC 3601〜3700  RFC 5001〜5100 
 RFC 901〜1000  RFC 2301〜2400  RFC 3701〜3800  RFC 5101〜5200 
 RFC 1001〜1100  RFC 2401〜2500  RFC 3801〜3900  RFC 5201〜5300 
 RFC 1101〜1200  RFC 2501〜2600  RFC 3901〜4000  RFC 5301〜5400 
 RFC 1201〜1300  RFC 2601〜2700  RFC 4001〜4100  RFC 5401〜5500 
 RFC 1301〜1400  RFC 2701〜2800  RFC 4101〜4200 

スポンサーリンク

Slimbox

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る