summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc138.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc138.txt')
-rw-r--r--doc/rfc/rfc138.txt1291
1 files changed, 1291 insertions, 0 deletions
diff --git a/doc/rfc/rfc138.txt b/doc/rfc/rfc138.txt
new file mode 100644
index 0000000..3968365
--- /dev/null
+++ b/doc/rfc/rfc138.txt
@@ -0,0 +1,1291 @@
+
+
+
+
+
+
+Network Working Group Bob Anderson
+Request for Comments: 138 Rand
+NIC 6715 Vint Cerf
+ UCLA
+ Eric Harslem
+ John Heafner
+ Rand
+ Jim Madden
+ U. of Illinois
+ Bob Metcalfe
+ MIT
+ Arie Shoshani
+ SDC
+ Jim White
+ UCSB
+ David Wood
+ Mitre
+ 28 April 1971
+
+ STATUS REPORT ON PROPOSED DATA RECONFIGURATION SERVICE
+
+ CONTENTS
+ I. INTRODUCTION ................................. 2
+
+ Purpose of this RFC .......................... 2
+ Motivation ................................... 2
+
+ II. OVERVIEW OF DATA RECONFIGURATION SERVICE ..... 3
+
+ Elements of Data Reconfiguration Service ..... 3
+ Conceptual Network Connections ............... 3
+ Connection Protocols and Message Formats ..... 4
+ Example Connection Configurations ............ 6
+
+ III. THE FORM MACHINE ............................. 7
+
+ Input/Output Stream and Forms ................ 7
+ Form Machine BNF Syntax ...................... 7
+ Alternate Specification of Form Machine Syntax 8
+ Forms ........................................ 9
+ Rules ........................................ 10
+ Terms ........................................ 10
+
+ Term Format 1 .............................. 11
+ Term Format 2 .............................. 11
+ Term Format 3 .............................. 13
+ Term Format 4 .............................. 13
+ Application of a Term ...................... 14
+
+
+
+Anderson, et al. [Page 1]
+
+RFC 138 Data Reconfiguration Service April 1971
+
+
+ Restrictions and Interpretations of
+ Term Functions ........................... 14
+ Term and Rule Sequencing ..................... 16
+
+ IV. EXAMPLES ..................................... 16
+
+ Remarks ...................................... 16
+ Field Insertion .............................. 17
+ Deletion ..................................... 17
+ Variable Length Records ...................... 17
+ String Length Computation .................... 18
+ Transposition ................................ 18
+ Character Packing and Unpacking .............. 18
+
+ V. PROPOSED USES OF DATA RECONFIGURATION SERVICE 19
+
+ VI. IMPLEMENTATION PLANS ......................... 20
+
+ Appendix A ......................................... 21
+
+ Note 1 to the DRS Working Group .............. 21
+ Note 2 to the DRS Working Group .............. 22
+
+I. INTRODUCTION
+
+ PURPOSE OF THIS RFC
+
+ The purpose of this RFC is to describe, in part, a proposed Network
+ experiment and to solicit comments on any aspect of the experiment.
+ The experiment involves a software mechanism to reformat Network data
+ streams. The mechanism can be adapted to numerous Network
+ application programs. We hope that the results of the experiment
+ will lead to a further standard service that embodies the principles
+ described in this RFC. We would like comments on the
+ appropriateness of this work as a Network experiment and also
+ comments on particular Network data reformatting needs that could not
+ easily be accomplished using these techniques.
+
+MOTIVATION
+
+ Application programs require specific data I/O formats yet the
+ formats are different from program to program. We take the position
+ that the Network should adapt to the individual program requirements
+ rather than changing each program to comply with a standard. This
+ position doesn't preclude the use of standards that describe the
+ formats of regular message contents; it is merely an interpretation
+ of a standard as being a desirable mode of operation but not a
+ necessary one.
+
+
+
+Anderson, et al. [Page 2]
+
+RFC 138 Data Reconfiguration Service April 1971
+
+
+ In addition to differing program requirements, a format mismatch
+ problem occurs where users wish to employ many different kinds of
+ consoles to attach to a single service program. It is desirable to
+ have the Network adapt to individual console configurations rather
+ than requiring unique software packages for each console
+ transformation.
+
+ One approach to providing adaptation is for those sites with
+ substantial computing power to offer a data reconfiguration service;
+ a proposed example of such a service is described here.
+
+ The envisioned modus operandi of the service is that an applications
+ programmer defines _forms_ that describe data reconfigurations. The
+ service stores the forms by name. At a later time, a user (perhaps a
+ non-programmer) employs the service to accomplish a particular
+ transformation of a Network data stream, simply by calling the form
+ by name.
+
+ We have attempted to provide a notation tailored to some specifically
+ needed instances of data reformatting while keeping the notation and
+ its underlying implementation within some utility range that is
+ bounded on the lower end by a notation expressive enough to make the
+ experimental service useful, and that is bounded on the upper end by
+ a notation short of a general purpose programming language.
+
+
+II. OVERVIEW OF THE DATA RECONFIGURATION SERVICE
+
+ELEMENTS OF THE DATA RECONFIGURATION SERVICE
+
+ An implementation of the Data Reconfiguration Service (DRS) includes
+ modules for connection protocols, a handler of some requests that can
+ be made of the service, a compiler and/or interpreter (called the
+ Form Machine) to act on those requests, and a file storage module for
+ saving and retrieving definitions of data reconfigurations (forms).
+ This section highlights connection protocols and requests. The next
+ section covers the Form Machine language in some detail. File
+ storage is not described in this document because it is transparent
+ to the use of the service and its implementation is different at each
+ DRS host.
+
+CONCEPTUAL NETWORK CONNECTIONS
+
+ There are three conceptual Network connections to the DRS, see Fig.
+ 1.
+
+ 1) The control connection (CC) is between an originating user
+ and the DRS. A form specifying data reconfiguration is
+
+
+
+Anderson, et al. [Page 3]
+
+RFC 138 Data Reconfiguration Service April 1971
+
+
+ defined over this connection and is applied to data passing
+ over the two connections described below.
+ 2) The user connection (UC) is between a user process and the
+ DRS.
+ 3) The server connection (SC) is between the DRS and the
+ serving process.
+
+ Since the goal is to adapt the Network to user and server processes,
+ a minimum of requirements are imposed on the UC and SC.
+
+
+ +-------------+ CC +-----------+ SC +-----------+
+ | ORIGINATING +--------+ DRS +--------+ SERVER |
+ | USER | ^ | | ^ | PROCESS |
+ +-------------+ | +------+----+ | +-----------+
+ | / |
+ Telnet / <------ Simplex or Duplex
+ Protocol UC/ Connections
+ Connection /
+ /
+ +-----+-----+
+ | USER |
+ | PROCESS |
+ +-----------+
+
+ Figure 1. DRS Network Connections
+
+
+CONNECTION PROTOCOLS AND MESSAGE FORMATS
+
+ Over a control connection the dialog is directly between an
+ originating user and the DRS. Here the user is defining forms or
+ assigning forms to connections for reformatting.
+
+ The user connects to the DRS via the initial connection protocol
+ (ICP) specified in NWG/RFC #80, version 1. Rather than going through
+ a logger, the user calls on a particular socket on which the DRS
+ always listens. DRS switches the user to another socket pair.
+
+ Messages sent over a control connection are of the types and formats
+ to be specified for TELNET. Thus, a user at a terminal should be
+ able to connect to a DRS via his local TELNET, for example, as shown
+ in Fig. 2.
+
+
+
+
+
+
+
+
+Anderson, et al. [Page 4]
+
+RFC 138 Data Reconfiguration Service April 1971
+
+
+ +--------------+
+ +--------+ CC | |
+ +-------+ TELNET +-------+ DRS |
+ | +--------+ | |
+ | +--------------+
+ +----------+---------+
+ | USER |
+ |(TERMINAL OR PROGRAM|
+ +--------------------+
+
+ Figure 2. A TELNET Connection to DRS
+
+ When a user connects to DRS he supplies a six-character user ID (UID)
+ as a qualifier to guarantee the uniqueness of his form names. He
+ will have (at least) the following commands:
+
+ 1. DEFFORM (name)
+ 2. ENDFORM (name)
+
+ These two commands define a form, the text of which is
+ chronologically entered between them. The (name) is six
+ characters. The form is stored in the DRS local file
+ system.
+
+ 3. PURGE (name)
+
+ The named form, as qualified by the current UID, is purged
+ from the DRS file system.
+
+ 4. LISTNAMES (UID)
+
+ The unqualified names of all forms assigned to UID are
+ returned.
+
+ 5. LISTFORM (name)
+
+ The source text of a named form is returned.
+
+ 6. DUPLEXCONNECT (user site, user send, user receive,
+ user method, server site, server
+ send, server receive, server method,
+ user-to-server form, server-to-user form)
+
+ 7. SIMPLEXCONNECT (send site, send socket, send
+ method, receive site, receive
+ socket, receive method, form)
+
+
+
+
+
+Anderson, et al. [Page 5]
+
+RFC 138 Data Reconfiguration Service April 1971
+
+
+ Either one, both, or neither of the two parties specified in 6 or 7
+ may be at the same host as the party issuing the request. Sites and
+ sockets specify user and server for the connection. Method indicates
+ the way in which the connection is established. Three options are
+ provided:
+ 1) Site/socket already connected to DRS as a dummy
+ control connection. (A dummy control connection
+ should not also be the real control connection.)
+ 2) Connect via standard ICP. (Only for command no. 6.)
+ 3) Connect directly via STR, RTS.
+
+EXAMPLE CONNECTION CONFIGURATIONS
+
+ There are basically two modes of DRS operation: 1) the user wishes to
+ establish a DRS UC/SC connection(s) between two programs and 2) the
+ user wants to establish the same connection(s) where he (his
+ terminal) is at the end of the UC or the SC. The latter case is
+ appropriate when the user wishes to interact from his terminal with
+ the serving process (e.g., a logger).
+
+ In the first case (Fig. 1, where the originating user is either a
+ terminal or a program) the user issues the appropriate CONNECT
+ command. The UC/SC can be simplex or duplex.
+
+ The second case has two possible configurations, shown in Figs. 3 and
+ 4.
+
+ +--------+ CC +--------+ +------+
+ | +------+ | SC | |
+ +------+ /| TELNET | UC | DRS +------+ SP |
+ | |/ | +------+ | | |
+ | USER | /+--------+ +--------+ +------+
+ | |/
+ +------+
+
+ Figure 3. Use of Dummy Control Connection
+
+ +--------+
+ +------+ /| USER | CC +--------+ +------+
+ | |/ | SIDE +------+ | SC | |
+ | USER | +--------+ UC | DRS +------+ SP |
+ | |\ | SERVING+------+ | | |
+ +------+ \| SIDE | +--------+ +------+
+ +--------+
+
+ Figure 4. Use of Server TELNET
+
+
+
+
+
+Anderson, et al. [Page 6]
+
+RFC 138 Data Reconfiguration Service April 1971
+
+
+ In Fig. 3 the user instructs his TELNET to make two duplex
+ connections to DRS. One is used for control information (the CC) and
+ the other is a dummy. When he issues the CONNECT he references the
+ dummy duplex connection (UC) using the "already connected" option.
+
+ In Fig. 4 the user has his TELNET (user side) call the DRS. When he
+ issues the CONNECT the DRS calls the TELNET (server side) which
+ accepts the call on behalf of the console. This distinction is known
+ only to the user since to the DRS the configuration in Fig. 4 appears
+ identical to that in Fig. 1. Two points should be noted:
+
+ 1) TELNET protocol is needed only to define forms and direct
+ connections. It is not required for the using and serving
+ processes.
+ 2) The using and serving processes need only a minimum of
+ modification for Network use, i.e., an NCP interface.
+
+
+III. THE FORM MACHINE
+
+INPUT/OUTPUT STREAMS AND FORMS
+
+ This section describes the syntax and semantics of forms that specify
+ the data reconfigurations. The Form Machine gets an input stream,
+ reformats the input stream according to a form describing the
+ reconfiguration, and emits the reformatted data as an output stream.
+
+ In reading this section it will be helpful to envision the
+ application of a form to the data stream as depicted in Fig. 5. An
+ input stream pointer identifies the position of data (in the input
+ stream) that is being analyzed at any given time by a part of the
+ form. Likewise, an output stream pointer locates data being emitted
+ in the output stream.
+
+
+ /\/\ /\/\
+ ^ | | FORM | | ^
+ | | | ----------------- | | |
+ | | | +- ----------------- -+ | | |
+ | | | | CURRENT PART OF | | | |
+INPUT | |<= CURRENT < ----------------- > CURRENT => | | OUTPUT
+STREAM | | POINTER | FORM BEING APPLIED | POINTER | | STREAM
+ | | +- ----------------- -+ | |
+ | | ----------------- | |
+ | | ----------------- | |
+ | | ----------------- | |
+ \/\/ \/\/
+ Figure 5. Application of Form to Data Streams
+
+
+
+Anderson, et al. [Page 7]
+
+RFC 138 Data Reconfiguration Service April 1971
+
+
+FORM MACHINE BNF SYNTAX
+
+ form ::= rule | rule form
+
+ rule ;;= label inputstream outputstream ;
+
+ label ::= INTEGER | <null>
+
+ inputstream ::= terms | <null>
+
+ terms ::= term | terms , term
+
+ outputstream ::= : terms | <null>
+
+ term ::= identifier | identifier descriptor |
+ descriptor | comparator
+
+ identifier ::= an alpha character followed by 0 to 3
+ alphamerics
+
+ descriptor ::= (replicationexpression , datatype ,
+ valueexpression , lengthexpression control)
+
+ comparator ::= (value connective value control) |
+ (identifier .<=>. control)
+
+ replicationexpression ::= arithmeticexpression | <null>
+
+ datatype ::= B | O | X | E | A
+
+ valueexpression ::= value | <null>
+
+ lengthexpression ::= # | arithmeticexpression | <null>
+
+ connective ::= .LE. | .LT. | .GE. | .GT. | .EQ. | .NE.
+
+ value ::= literal | arithmeticexpression
+
+ arithmeticexpression ::= primary | primary operator
+ arithmeticexpression
+
+ primary ::= identifier | L(identifier) | V(identifier) |
+ INTEGER
+
+ operator ::= + | - | * | /
+
+ literal ::= literaltype "string"
+
+
+
+
+Anderson, et al. [Page 8]
+
+RFC 138 Data Reconfiguration Service April 1971
+
+
+ literaltype ::= B | O | X | E | A
+
+ string ::= from 0 to 256 characters
+
+ control ::= : options | <null>
+
+ options ::= S(where) | F(where) | U(where) |
+ S(where) , F(where) |
+ F(where) , S(where)
+
+ where ::= arithmeticexpression | R(arithmeticexpression)
+
+
+
+ALTERNATE SPECIFICATION OF FORM MACHINE SYNTAX
+
+ infinity
+form ::= {rule}
+ 1
+ 1 1 1
+rule ::= {INTEGER} {terms} {:terms} ;
+ 0 0 0
+ infinity
+terms ::= term {,term}
+ 0
+ 1
+term ::= identifier | {identifier} descriptor
+ 0
+ | comparator
+ 1
+descriptor ::= ({arithmeticexpression} , datatype ,
+ 0
+ 1 1 1
+ {value} , {lengthexpression} {:options}
+ 0 0 0
+ 1
+comparator ::= (value connective value {:options} ) |
+ 0
+ 1
+ (identifier .<=. value {:options} )
+ 0
+connective ::= .LE. | .LT. | .GE. | .GT. | .EQ. | .NE.
+
+lengthexpression ::= # | arithmeticexpression
+
+datatype ::= B | O | X | E | A
+
+value ::= literal | arithmeticexpression
+
+
+
+Anderson, et al. [Page 9]
+
+RFC 138 Data Reconfiguration Service April 1971
+
+
+ infinity
+arithmeticexpression ::= primary {operator primary}
+ 0
+operator ::= + | - | * | /
+
+primary ::= identifier | L(identifier) |
+ V(identifier) | INTEGER
+ 256
+literal ::= literaltype "{CHARACTER} "
+ 0
+literaltype ::= B | O | X | A | E
+ 1
+options ::= S(where) {,F(where)} |
+ 0
+ 1
+ F(where) {,S(where)} | U(where)
+ 0
+
+where ::= arithmeticexpression |
+ R(arithmeticexpression)
+ 3
+identifier ::= ALPHABETIC {ALPHAMERIC}
+ 0
+
+FORMS
+
+ A form is an ordered set of rules.
+
+ form ::= rule | rule form
+
+ The current rule is applied to the current position of the input
+ stream. If the (input stream part of a) rule fails to correctly
+ describe the contents of the current input then another rule is made
+ current and applied to the current position of the input stream. The
+ next rule to be made current is either explicitly specified by the
+ current term in the current rule or it is the next sequential rule by
+ default. Flow of control is more fully described under TERM AND RULE
+ SEQUENCING.
+
+ If the (input stream part of a) rule succeeds in correctly describing
+ the current input stream, then some data may be emitted at the
+ current position in the output stream according to the rule. The
+ input and output stream pointers are advanced over the described and
+ emitted data, respectively, and the next rule is applied to the now
+ current position of the input stream.
+
+ Application of the form is terminated when an explicit return
+ (R(arithmeticexpression)) is encountered in a rule. The user and
+
+
+
+Anderson, et al. [Page 10]
+
+RFC 138 Data Reconfiguration Service April 1971
+
+
+ server connections are closed and the return code
+ (arithmeticexpression) is sent to the originating user.
+
+RULES
+
+ A rule is a replacement, comparison, and/or an assignment operation
+ of the form shown below.
+
+ rule ::= label inputstream outputstream ;
+
+ A label is the name of a rule and it exists so that the rule may be
+ referenced elsewhere in the form for explicit rule transfer of
+ control. Labels are of the form below.
+
+ label ::= INTEGER | <null>
+
+ The optional integer labels are in the range 0 >= INTEGER >= 9999.
+ The rules need not be labeled in ascending numerical order.
+
+TERMS
+
+ The inputstream (describing the input stream to be matched) and the
+ outputstream (describing data to be emitted in the output stream)
+ consist of zero or more terms and are of the form shown below.
+
+ inputstream ::= terms | <null>
+ outputstream ::= :terms | <null>
+ terms ::= term | terms , term
+
+ Terms are of one of four formats as indicated below.
+
+ term ::= identifier | identifier descriptor |
+ descriptor | comparator
+
+Term Format 1
+
+ The first term format is shown below.
+
+ identifier
+
+ The identifier is a symbolic reference to a previously identified
+ term (term format 2) in the form. It takes on the same attributes
+ (value, length, type) as the term by that name. Term format 1 is
+ normally used to emit data in the output stream.
+
+ Identifiers are formed by an alpha character followed by 0 to 3
+ alphameric characters.
+
+
+
+
+Anderson, et al. [Page 11]
+
+RFC 138 Data Reconfiguration Service April 1971
+
+
+Term Format 2
+
+ The second term format is shown below.
+
+ identifier descriptor
+
+ Term format 2 is generally used as an input stream term but can be
+ used as an output stream term.
+
+ A descriptor is defined as shown below.
+
+ descriptor ::= (replicationexpression, datatype,
+ valueexpression, lengthexpression
+ control)
+
+ The identifier is the symbolic name of the term in the usual
+ programming language sense. It takes on the type, length, and value
+ attributes of the term and it may be referenced elsewhere in the
+ form.
+
+ The replication expression is defined below.
+
+ replicationexpression ::= arithmeticexpression | <null>
+ arithmeticexpression ::= primary | primary operator
+ arithmeticexpression
+ operator ::= + | - | * | /
+ primary ::= identifier | L(identifier) | V(identifier) |
+ INTEGER
+
+ The replication expression is a repeat function applied to the
+ combined data type and value expression. It expresses the number of
+ times that the value (of the data type/value expression) is to be
+ repeated within the field length denoted by the data type/length
+ expression.
+
+ A null replication expression has the value of one. Arithmetic
+ expressions are evaluated from left-to-right with no precedence. (It
+ is anticipated that this interpretation might be changed, if
+ necessary.)
+
+ The L(identifier) is a length operator that generates a 32-bit binary
+ integer corresponding to the length of the term named. The
+ V(identifier) is a value operator that generates a 32-bit binary
+ integer corresponding to the value of the term named. (See
+ Restrictions and Interpretations of Term Functions.) The value
+ operator is intended to convert character strings to their numerical
+ correspondents.
+
+
+
+
+Anderson, et al. [Page 12]
+
+RFC 138 Data Reconfiguration Service April 1971
+
+
+ The data type is defined below.
+
+ datatype ::= B | O | X | E | A
+
+ The data type describes the kind of data that the term represents.
+ (It is expected that additional data types, such as floating point
+ and user-defined types, will be added as needed.)
+
+ Data Type Meaning Unit Length
+
+ B Bit string 1 bit
+ O Bit string 3 bits
+ X Bit string 4 bits
+ E EBCDIC character 8 bits
+ A Network ASCII character 8 bits
+
+ The value expression is defined below.
+
+ valueexpression ::= value | <null>
+ value ::= literal | arithmeticexpression
+ literal ::= literaltype "string"
+ literaltype ::= B | O | X | E | A
+
+ The value expression is the unit value of a term expressed in the
+ format indicated by the data type. It is repeated according to the
+ replication expression, in a field whose length is constrained by the
+ length expression.
+
+ A null value expression in the input stream defaults to the data
+ present in the input stream. The data must comply with the datatype
+ attribute, however.
+
+ A null value expression generates padding according to Restrictions
+ and Interpretations of Term Functions.
+
+ The length expression is defined below.
+
+ lengthexpression ::= # | arithmeticexpression | <null>
+
+ The length expression states the length of the field containing the
+ value expression as expanded by the replication expression. If the
+ value of the length expression is less then the length implied by the
+ expanded value expression, then the expanded value expression is
+ truncated, see Restrictions and Interpretations of Term Functions.
+
+ The terminal symbol # means an arbitrary length, explicitly
+ terminated by the value of the next term. The # is legal only in the
+ input stream and not in the output stream.
+
+
+
+Anderson, et al. [Page 13]
+
+RFC 138 Data Reconfiguration Service April 1971
+
+
+ If the length expression is less than or equal to zero, the term
+ succeeds but the appropriate stream pointer is not advanced.
+ Positive lengths cause the appropriate stream pointer to be advanced
+ if the term otherwise succeeds.
+
+ Control is defined under TERM AND RULE SEQUENCING.
+
+Term Format 3
+
+ Term format 3 is shown below.
+
+ descriptor
+
+ It is identical to term format 2 with the omission of the identifier.
+ Term format 3 is generally used in the output stream. It is used in
+ the input stream where input data is to be passed over but not
+ retained for emission or later reference.
+
+Term Format 4
+
+ The fourth term format is shown below.
+
+ comparator ::= (value connective value control) |
+ (identifier .<=. value control)
+ value ::= literal | arithmeticexpression
+ literal ::= literaltype "string"
+ literaltype ::= B | O | X | E | A
+ string ::= from 0 to 256 characters
+ connective ::= .LE. | .LT. | .GE. | .GT. | .EQ. | .NE.
+
+ The fourth term format is used for assignment and comparison.
+
+ The assignment operator .<=. assigns the value to the identifier.
+ The connectives have their usual meaning. Values to be compared must
+ have the same type and length attributes or an error condition arises
+ and the form fails.
+
+The Application of a Term
+
+ The elements of a term are applied by the following sequence of
+ steps.
+
+ 1. The data type and value expression together specify a unit
+ value, call it x.
+
+ 2. The replication expression specifies the number of times x
+ is to be repeated (or copied) in concatenated fashion. The
+ value of the concatenated xs becomes, say, y of length L1.
+
+
+
+Anderson, et al. [Page 14]
+
+RFC 138 Data Reconfiguration Service April 1971
+
+
+ 3. The data type and the length expression together specify a
+ field length of the input area (call it L2) that begins at
+ the current stream pointer position.
+
+ 4. The value of y is truncated to y' if L1 > L2. Call the
+ truncated length L1'.
+
+ 5. If the term is an input stream term, then the value y' of
+ length L1' is compared to the input value beginning at the
+ current input pointer position.
+
+ 6. If the values are identical over the length L1' then the
+ input value of length L2 (may be greater than L1') starting
+ at the current pointer position in the input area, becomes
+ the value of the term.
+
+ In an output stream term, the procedure is the same except that the
+ source of input is the value of the term(s) named in the value
+ expression and the data is emitted in the output stream.
+
+ The above procedure is modified to include a one term look-ahead
+ where lengths are indefinite because of the arbitrary symbol, #.
+
+Restrictions and Interpretations of Term Functions
+
+ 1. Terms specifying indefinite lengths, through the use of the #
+ symbol must be separated by some type-specific data such as a
+ literal. (A literal isn't specifically required, however. An
+ arbitrary number of ASCII characters could be terminated by a
+ non-ASCII character.) # is legal only in the input stream, not
+ in the output stream.
+
+ 2. Truncation and padding is as follows:
+ a) Character to character (A <--> E) conversion is left
+ justified and truncated or padded on the right with blanks.
+ b) Character to numeric and numeric to numeric conversions are
+ right-justified and truncated or padded on the left with
+ zeros.
+ c) Numeric to character conversion is right-justified and
+ left-padded with blanks.
+
+ 3. The following are ignored in a form definition over the control
+ connection.
+ a) TAB, carriage return, etc.
+ b) blanks except within quotes.
+ c) /* string */ is treated as comments except within quotes.
+
+ 4. The following defaults prevail where the term part is omitted.
+
+
+
+Anderson, et al. [Page 15]
+
+RFC 138 Data Reconfiguration Service April 1971
+
+
+ a) The replication expression defaults to one.
+ b) The data type defaults to type B.
+ c) The value expression of an input stream term defaults to
+ the value found in the input stream, but the input stream
+ must conform to data type and length expression. The value
+ expression of an output stream term defaults to padding
+ only.
+ d) The length expression defaults to the size of the quantity
+ determined by replication expression, data type, and value
+ expression.
+ e) Control defaults to the next sequential term if a term is
+ successfully applied; else control defaults to the next
+ sequential rule. If _where_ evaluates to an undefined
+ _label_ the form fails.
+
+ 5. Arithmetic expressions are evaluated left-to-right with no
+ precedence.
+
+ 6. The following limits prevail.
+
+ a) Binary lengths are <= 32 bits
+ b) Character strings are <= 256 8-bit characters
+ c) Identifier names are <= 4 characters
+ d) Maximum number of identifiers is <= 256
+ e) Label integers are >= 0 and <= 9999
+
+ 7. Value and length operators product 32-bit binary integers. The
+ value operator is currently intended for converting A or E type
+ decimal character strings to their binary correspondents. For
+ example, the value of E'12' would be 0......01100. The value
+ of E'AB' would cause the form to fail.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Anderson, et al. [Page 16]
+
+RFC 138 Data Reconfiguration Service April 1971
+
+
+TERM AND RULE SEQUENCING
+
+ Sequencing may be explicitly controlled by including control in a
+ term.
+
+ control ::= :options | <null>
+ options ::= S(where) | F(where) | U(where)
+ S(where) , F(where) |
+ F(where) , S(where)
+
+ where ::= arithmeticexpression | R(arithmeticexpression)
+
+ S, F, and U denote success, fail, and unconditional transfers,
+ respectively. _Where_ evaluates to a _rule_ label, thus transfer can
+ be effected from within a rule (at the end of a term) to the
+ beginning of another rule. R means terminate the form and return the
+ evaluated expression to the initiator over the control connection (if
+ still open).
+
+ If terms are not explicitly sequenced, the following defaults
+ prevail.
+
+ 1) When a term fails go to the next sequential rule.
+ 2) When a term succeeds go to the next sequential
+ term within the rule.
+ (3) At the end of a rule, go to the next sequential
+ rule.
+
+ Note in the following example, the correlation between transfer of
+ control and movement of the input pointer.
+
+ 1 XYZ(,B,,8:S(2),F(3)) : XYZ ;
+ 2 . . . . . . .
+ 3 . . . . . . .
+
+ The value of XYZ will never be emitted in the output stream since
+ control is transferred out of the rule upon either success or
+ failure. If the term succeeds, the 8 bits of input will be assigned
+ as the value of XYZ and rule 2 will then be applied to the same input
+ stream data. That is, since the complete rule 1 was not successfully
+ applied, then the input stream pointer is not advanced.
+
+
+
+
+
+
+
+
+
+
+Anderson, et al. [Page 17]
+
+RFC 138 Data Reconfiguration Service April 1971
+
+
+IV. EXAMPLES
+
+REMARKS
+
+ The following examples (forms and also single rules) are simple
+ representative uses of the Form Machine. The examples are expressed
+ in a term-per-line format only to aid the explanation. Typically, a
+ single rule might be written as a single line.
+
+FIELD INSERTION
+
+ To insert a field, separate the input into the two terms to allow the
+ inserted field between them. For example, to do line numbering for a
+ 121 character/line printer with a leading carriage control character,
+ use the following form.
+
+ (NUMB.<=>.1); /*initialize line number counter to one*/
+ 1 CC(,E,,1:F(R(99))), /*pick up control character and save
+ as CC*/
+ /*return a code of 99 upon exhaustion*/
+ LINE(,E,,121 : F(R(98))) /*save text as LINE*/
+ :CC, /*emit control character*/
+ (,E,NUMB,2), /*emit counter in first two columns*/
+ (,E,E".",1), /*emit period after line number*/
+ (,E,LINE,117), /*emit text, truncated in 117 byte field*/
+ (NUMB.<=.NUMB+1:U(1)); /*increment line counter and go to
+ rule one*/;;
+
+DELETION
+
+ Data to be deleted should be isolated as separate terms on the left,
+ so they may be omitted (by not emitting them) on the right.
+
+ (,B,,8), /*isolate 8 bits to ignore*/
+ SAVE(,A,,10) /*extract 10 ASCII characters from
+ input stream*/
+ :(,E,SAVE,); /*emit the characters in SAVE as EBCDIC
+ characters whose length defaults to the
+ length of SAVE, i.e., 10, and advance to
+ the next rule*/
+
+ In the above example, if either input stream term fails,
+ the next sequential rule is applied.
+
+VARIABLE LENGTH RECORDS
+
+ Some devices, terminals and programs generate variable length
+ records. To following rule picks up variable length EBCDIC records
+
+
+
+Anderson, et al. [Page 18]
+
+RFC 138 Data Reconfiguration Service April 1971
+
+
+ and translates them to ASCII.
+
+ CHAR(,E,,#), /*pick up all (an arbitrary number of)
+ EBCDIC characters in the input stream*/
+ (,X,X"FF",2) /*followed by a hexadecimal literal,
+ FF (terminal signal)*/
+ :(,A,CHAR,), /*emit them as ASCII*/
+ (,X,X"25",2); /*emit an ASCII carriage return*/
+
+STRING LENGTH COMPUTATION
+
+ It is often necessary to prefix a length field to an arbitrarily long
+ character string. The following rule prefixes an EBCDIC string with
+ a one-byte length field.
+
+ Q(,E,,#), /*pick up all EBCDIC characters*/
+ TS(,X,X"FF",2) /*followed by a hexadecimal literal, FF*/
+ :(,B,L(Q)+2,8), /*emit the length of the characters
+ plus the length of the literal plus
+ the length of the count field itself,
+ in an 8-bit field*/
+ Q, */emit the characters*/
+ TS; */emit the terminal*/
+
+TRANSPOSITION
+
+ It is often desirable to reorder fields, such as the following
+ example.
+
+ Q(,E,,20), R(,E,,10) , S(,E,,15), T(,E,,5) : R, T, S, Q ;
+
+ The terms are emitted in a different order.
+
+CHARACTER PACKING AND UNPACKING
+
+ In systems such as HASP, repeated sequences of characters are packed
+ into a count followed by the character, for more efficient storage
+ and transmission. The first form packs multiple characters and the
+
+
+
+
+
+
+
+
+
+
+
+
+
+Anderson, et al. [Page 19]
+
+RFC 138 Data Reconfiguration Service April 1971
+
+
+ second unpacks them.
+ /*form to pack EBCDIC streams*/
+ /*returns 99 if OK, input exhausted*/
+ /*returns 98 if illegal EBCDIC*/
+ /*look for terminal signal FF which is not a legal EBCDIC*/
+ /*duplication count must be 0-254*/
+ 1 (,X,X"FF",2 : S(R(99))) ;
+ /*pick up the EBCDIC and initialize count/*
+ CHAR(,E,,1 : F(R(98))) , (CNT .<=. 1) ;
+ /*count consecutive EBCDICs like CHAR*/
+ 2 (,E,CHAR,1 : F(3)) , (CNT .<=. CNT+1 : U(2)) ;
+ /*emit count and current character*/
+ 3 : (,B,CNT,8), CHAR, (:U(1));
+ /*end of form*/;;
+
+ /*form to unpack EBCDIC streams*/
+ /*look for terminal*/
+ 1 (,X,X"FF",2 : S(R(99))) ;
+ /*emit character the number of times indicated*/
+ /*by the counter contents*/
+ CNT(,B,,8), CHAR(,E,,1) : (CNT,E,CHAR,CNT:U(1));
+ /*failure of form*/
+ (:U(R(98))) ;;
+
+
+V. PROPOSED USES OF DATA RECONFIGURATION SERVICE
+
+ The following are some proposed uses of the DRS that were submitted
+ by the sites indicated.
+
+ UCLA
+ 1. Pack/unpack text files.
+ 2. Preprocessor to scan META compiler input.
+ 3. Perhaps graphics.
+
+ MIT
+ 1. Reformatting within file transfer service.
+ 2. Character conversions.
+ 3. Possible graphics service (Evans and Sutherland output
+ format).
+ 4. Reformat arguments of subroutines remote to each other.
+
+ U. OF ILLINOIS
+ 1. Dependent upon remote use of DRS for many remote
+ services.
+
+ SDC
+ 1. Would be essential to data transfer in general.
+
+
+
+Anderson, et al. [Page 20]
+
+RFC 138 Data Reconfiguration Service April 1971
+
+
+ 2. Could be used in relation to data management language.
+
+ UCSB
+ 1. Checkout of I/O formats of file system.
+ 2. Debugging Network services in general.
+ 3. Mapping their services into future standards.
+
+ RAND
+ 1. To describe RJO/RJE message formats at UCSB.
+ 2. To describe RJS message formats at UCLA.
+ 3. To adapt Network to existing services, in general.
+
+ MITRE
+ 1. Character conversions.
+ 2. Testing data formats going into data bases for correct
+ field formatting.
+
+ VI. IMPLEMENTATION PLANS
+
+ Four sites currently plan to implement and offer the service on an
+ experimental basis.
+
+ 1. MIT Implementation of forms interpreter in MIDAS
+ (assembly). Perhaps Tree Meta compiler of
+ forms. Implementation on PDP-10.
+
+ 2. UCLA Implementation on SIGMA-7 employing META-7
+ to compile forms.
+
+ 3. UCSB Implementation on 360/75.
+
+ 4. RAND Initial implementation on 360/65; compiler to be written
+ in graphics CPS; compiled intermediate forms to be
+ interpreted by assembler language subroutine. Later
+ implemented on PDP-10.
+
+ In addition to the above sites, the University of Illinois and Mitre
+ plan to experiment with the service.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Anderson, et al. [Page 21]
+
+RFC 138 Data Reconfiguration Service April 1971
+
+
+ APPENDIX A
+
+Note 1 to the DRS Working Group
+
+ As you recall, we spent considerable time in discussing the use and
+ meaning of the arbitrary symbol, #. To summarize, it was clear that
+ inclusion of the # in both replication and length expressions led to
+ ambiguities. We settled on its restricted use in the length
+ expression of an input term, although no one was entirely satisfied
+ with this definition.
+
+ Recently, Jim White has again commented on the #. Jim feels that it
+ is curious that one can pick up an arbitrary number of EBCDIC
+ characters, for example, but can't pick up an arbitrary number of
+ specific EBCDIC characters such as EBCDIC A's. Jim feels that a more
+ natural way to interpret the length, value, and replication
+ expressions would be as the IBM OS assembler interprets the
+ attributes of the pseudo instruction, define constant (CD).
+
+ The IBM OS assembler uses the following format.
+
+ 1 2 3 4
+ duplication type modifiers nominal value
+ factor
+
+ The duplication factor, if specified, causes the constant to be
+ generated the number of times indicated by the factor. The type
+ defines the type of constant being specified. Modifiers describe the
+ length, scaling, and exponent of the constant. Nominal value
+ supplies the constant described by the subfields that precede it.
+
+ Assume that we use the # only as a duplication factor (replication
+ expression). Hence, in the example of the form to pack EBCDIC
+ characters, the counter and looping can be eliminated.
+
+ CHAR(,E,,1) ;
+ LEN(#,#,CHAR,1) : (,B,L(LEN)+1,*) , CHAR ;
+
+ The interpretation is that the data type, length expression, and
+ value expression make up the unit value. This quantity can then be
+ replicated. As our document now stands, only the data type and value
+ expression make up the unit value.
+
+ The application of a term according to Jim's suggestion is as
+ follows.
+ 1. The data type, value expression, and length expression together
+ specify a unit value, call it x.
+
+
+
+
+Anderson, et al. [Page 22]
+
+RFC 138 Data Reconfiguration Service April 1971
+
+
+ 2. The replication expression specifies the number of times x is to
+ be repeated. The value of the concatenated xs becomes y of
+ length L.
+ 3. If the term is an input stream term then the value beginning at
+ the current input pointer position.
+ 4. If the input value satisfies the constraints of y over length L
+ then the input value of length L becomes the value of the term.
+
+Note 2 to the DRS Working Group
+
+ There has been recent debate of whether the input pointer should be
+ advanced upon successful completion of a rule (as it now is defined)
+ or upon successful completion of each term. See the example on page
+ 22. If the input pointer is advanced upon successful completion of a
+ term, then rules become equivalent to terms.
+
+ I would like to for us to discuss at the SJCC both the term
+ attributes and the input pointer advance issues.
+
+ John
+
+
+ [ This RFC was put into machine readable form for entry ]
+ [ into the online RFC archives by Katsunori Tanaka 4/99 ]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Anderson, et al. [Page 23]
+