この文書はRFC1014の日本語訳(和訳)です。 この文書の翻訳内容の正確さは保障できないため、 正確な知識を求める方は原文を参照してください。 翻訳者はこの文書によって読者が被り得る如何なる損害の責任をも負いません。 この翻訳内容に誤りがある場合、訂正版の公開や、 誤りの指摘は適切です。 この文書の配布は元のRFC同様に無制限です。


Network Working Group                             Sun Microsystems, Inc.
Request for Comments: 1014                                     June 1987
 
 
               XDR: External Data Representation Standard
                   XDR:外部のデータ表現標準
 
STATUS OF THIS MEMO
この文書の状態

 
   This RFC describes a standard that Sun Microsystems, Inc., and others
   are using, one we wish to propose for the Internet's consideration.
   Distribution of this memo is unlimited.
   このRFCはサン・マイクロシステムズ社と他の人たちが使っている標準で、
   我々がインターネットでの考慮を提案することを望むものを記述します。こ
   のメモの配布は無制限です。
 
1. INTRODUCTION
1. はじめに
 
   XDR is a standard for the description and encoding of data.  It is
   useful for transferring data between different computer
   architectures, and has been used to communicate data between such
   diverse machines as the SUN WORKSTATION*, VAX*, IBM-PC*, and Cray*.
   XDR fits into the ISO presentation layer, and is roughly analogous in
   purpose to X.409, ISO Abstract Syntax Notation.  The major difference
   between these two is that XDR uses implicit typing, while X.409 uses
   explicit typing.
   XDRはデータの記述とコーディングの標準です。これは異なったコンピュー
   タアーキテクチャの間でデータを転送することに役立ち、SUN WORKSTATION*、
   VAX*、IBM-PC*、Cray*のような多様なマシンの間にデータを伝達するために使
   われていました。XDRはISOプレゼンテーションレイヤに対応し、だいた
   いX.409.ISO要約構文論表記法に類似しています。これらの2つの主な相違は
   XDRが暗黙の型を決めることを使うのに対し、他方X.409が明白な型を使い
   ます。
 
   XDR uses a language to describe data formats.  The language can only
   be used only to describe data; it is not a programming language.
   This language allows one to describe intricate data formats in a
   concise manner. The alternative of using graphical representations
   (itself an informal language) quickly becomes incomprehensible when
   faced with complexity.  The XDR language itself is similar to the C
   language [1], just as Courier [4] is similar to Mesa. Protocols such
   as Sun RPC (Remote Procedure Call) and the NFS* (Network File System)
   use XDR to describe the format of their data.
   XDRはデータフォーマットを記述するために言語を使います。言語はデータ
   を記述するという事のためだけに使われます;これはプログラム言語ではあり
   ません。この言語は1つの簡潔な方法で複雑なデータフォーマットを記述する
   ことを許します。グラフィックの表現を使うと(それ自身非公式の言語)複雑
   になった時に、すぐ理解できなくなります。Courier[4]がMesaに類似してい
   るように、XDR言語それ自身は、C言語[1]に類似しています。サンRPC
   (リモート手続要求)とNFS*(ネットワーク・ファイルシステム)のような
   プロトコルのデータのフォーマットを記述するためにXDRを使います。
 
   The XDR standard makes the following assumption: that bytes (or
   octets) are portable, where a byte is defined to be 8 bits of data.
   A given hardware device should encode the bytes onto the various
   media in such a way that other hardware devices may decode the bytes
   without loss of meaning.  For example, the Ethernet* standard
   suggests that bytes be encoded in "little-endian" style [2], or least
   significant bit first.
   XDR標準は以下の仮定をします:バイト(あるいはオクテット)に移植性
   があり、1バイトが8ビットのデータであると定義されること。他のハード
   ウェア装置が意味の損失無しでバイトを解読できる方法で、所定のハードウェ
   ア装置が様々なメディアにバイトをコード化するべきです。例えば、イーサ
   ネット*標準はバイトが「リトルエンディアン」スタイル[2]、あるいは最下
   位ビットを最初としてコード化されることを示唆します。
 
2. BASIC BLOCK SIZE
2. BASICブロックの大きさ
 
   The representation of all items requires a multiple of four bytes (or
   32 bits) of data.  The bytes are numbered 0 through n-1.  The bytes
   are read or written to some byte stream such that byte m always
   precedes byte m+1.  If the n bytes needed to contain the data are not
   a multiple of four, then the n bytes are followed by enough (0 to 3)
   residual zero bytes, r, to make the total byte count a multiple of 4.
   すべての項目の表現は4バイト(あるいは32ビット)の倍数のデータを必
   要とします。バイトは0からn - 1の番号を振ります。バイトはバイトm
   が常にバイトm+1より先にあるように、あるバイトストリームから読み込
   まれるか書き込まれます。もしデータを含むに必要なnバイトが4の倍数で
   はないなら、nバイトの後にいくつか(0から3)0の値のバイトを付け、
   全体のバイト数が4の倍数になるようにします。
 
   We include the familiar graphic box notation for illustration and
   comparison.  In most illustrations, each box (delimited by a plus
   sign at the 4 corners and vertical bars and dashes) depicts a byte.
   Ellipses (...) between boxes show zero or more additional bytes where
   required.
   我々は例と比較のためによく知られたグラフィックの箱の表現を示します。
   たいていのイラストで、それぞれの(4つの角のプラス記号と、直立した線
   と、ダッシュでくくられた)ボックスが1バイトを描写します。ボックスの
   間の省略記号(・・・)が、必要な場合に、ゼロ個以上の追加のバイトを示
   します。
 
        +--------+--------+...+--------+--------+...+--------+
        | byte 0 | byte 1 |...|byte n-1|    0   |...|    0   |   BLOCK
        +--------+--------+...+--------+--------+...+--------+
        |<-----------n bytes---------->|<------r bytes------>|
        |<-----------n+r (where (n+r) mod 4 = 0)>----------->|
 
3. XDR DATA TYPES
3. XDRデータタイプ
 
   Each of the sections that follow describes a data type defined in the
   XDR standard, shows how it is declared in the language, and includes
   a graphic illustration of its encoding.
   後に続く章は各XDR標準で定義されたデータタイプを記述し、その言語表示
   と、コーディングイラストを含む方法を示します。
 
   For each data type in the language we show a general paradigm
   declaration.  Note that angle brackets (< and >) denote
   variablelength sequences of data and square brackets ([ and ]) denote
   fixed-length sequences of data.  "n", "m" and "r" denote integers.
   For the full language specification and more formal definitions of
   terms such as "identifier" and "declaration", refer to section 5:
   "The XDR Language Specification".
   言語の各データタイプで一般的な例を示します。山カッコ( < と> )が可変
   長のデータの連続を示し、角カッコ([と])が固定長さのデータの連続を意
   味します。「n」、「m」と「r」が整数を示します。言語の完全な仕様と、
   「identifier」と「declaration」のような用語の正式の定義は、5章を参照
   してください:「XDR言語仕様」。
 
   For some data types, more specific examples are included.  A more
   extensive example of a data description is in section 6:  "An Example
   of an XDR Data Description".
   あるデータタイプで、もっと多くの個々の事例が含まれます。データ記述のよ
   り広範囲の例が6章にあります:「XDRデータ記述の例」。
 
3.1 Integer
3.1 整数
 
   An XDR signed integer is a 32-bit datum that encodes an integer in
   the range [-2147483648,2147483647].  The integer is represented in
   two's complement notation.  The most and least significant bytes are
   0 and 3, respectively.  Integers are declared as follows:
   XDR符号付整数は範囲が[-2147483648,2147483647]の整数をコード化する
   32ビットデータです。整数は2の補数表現で表されます。最上位バイトは
   0番で、最下位バイトは3番です。整数が次のように宣言されます:
 
         int identifier;
 
           (MSB)                   (LSB)
         +-------+-------+-------+-------+
         |byte 0 |byte 1 |byte 2 |byte 3 |                      INTEGER
         +-------+-------+-------+-------+
         <------------32 bits------------>
 
 
3.2.Unsigned Integer
3.2 符号なし整数
 
   An XDR unsigned integer is a 32-bit datum that encodes a nonnegative
   integer in the range [0,4294967295].  It is represented by an
   unsigned binary number whose most and least significant bytes are 0
   and 3, respectively.  An unsigned integer is declared as follows:
   XDR符号なしの整数は[0,4294967295]の範囲の非負整数をコード化する
   32ビットデータです。これは符号なし2進数で表現され、最上位バイト
   が0番で、最下位バイトが3番です。符号なしの整数が次のように宣言さ
   れます:
 
         unsigned int identifier;
 
           (MSB)                   (LSB)
         +-------+-------+-------+-------+
         |byte 0 |byte 1 |byte 2 |byte 3 |             UNSIGNED INTEGER
         +-------+-------+-------+-------+
         <------------32 bits------------>
 
3.3 Enumeration
3.3 列挙
 
   Enumerations have the same representation as signed integers.
   Enumerations are handy for describing subsets of the integers.
   Enumerated data is declared as follows:
   列挙が、符号付整数と同じ表現を持っています。列挙は整数の部分集合を記
   述することに対して有用です。列挙されたデータが次のように宣言されます:
 
         enum { name-identifier = constant, ... } identifier;
 
   For example, the three colors red, yellow, and blue could be
   described by an enumerated type:
   例えば、赤、黄色、青の3色は列挙タイプで記述できます:
 
         enum { RED = 2, YELLOW = 3, BLUE = 5 } colors;
 
   It is an error to encode as an enum any other integer than those that
   have been given assignments in the enum declaration.
   enum宣言で割当てられていない整数をenumとしてコード化するのはエラーです。
 
3.4 Boolean
3.4 ブール
 
   Booleans are important enough and occur frequently enough to warrant
   their own explicit type in the standard.  Booleans are declared as
   follows:
   Booleansは重要で、標準でそれら自身の明示的なタイプを正当化するために
   つかいます。Booleans は次のように宣言されます:
 
      bool identifier;
 
      This is equivalent to:
      これは以下と同等です:
 
         enum { FALSE = 0, TRUE = 1 } identifier;
 
3.5 Hyper Integer and Unsigned Hyper Integer
3.5 ハイパー整数と符号なしハイパー整数
 
   The standard also defines 64-bit (8-byte) numbers called hyper
   integer and unsigned hyper integer.  Their representations are the
   obvious extensions of integer and unsigned integer defined above.
   They are represented in two's complement notation.  The most and
   least significant bytes are 0 and 7, respectively.  Their
   declarations:
   この標準はハイパー整数とハイパー符号なし整数と呼ばれる64ビット(8
   バイトの)の数を定義します。これらの表現は上に定義される整数と符号なし
   の整数の明白な拡張です。これらは2の補数で表現されます。最上位バイトは
   0番で最下位バイトは7番です。宣言は以下です:
 
   hyper identifier; unsigned hyper identifier;
 
        (MSB)                                                   (LSB)
      +-------+-------+-------+-------+-------+-------+-------+-------+
      |byte 0 |byte 1 |byte 2 |byte 3 |byte 4 |byte 5 |byte 6 |byte 7 |
      +-------+-------+-------+-------+-------+-------+-------+-------+
      <----------------------------64 bits---------------------------->
                                                 HYPER INTEGER
                                                 UNSIGNED HYPER INTEGER
 
3.6 Floating-point
3.6 浮動小数点
 
   The standard defines the floating-point data type "float" (32 bits or
   4 bytes).  The encoding used is the IEEE standard for normalized
   single-precision floating-point numbers [3].  The following three
   fields describe the single-precision floating-point number:
   この標準は浮動小数点のデータタイプ"float"(32ビットあるいは4バイ
   ト)を定義します。使われたコーディングはIEEE標準の正規化されたシン
   グル精度の浮動小数点小数[3]です。次の3つのフィールドはシングル精度
   の浮動小数点小数を記述します:
 
      S: The sign of the number.  Values 0 and 1 represent positive and
         negative, respectively.  One bit.
      S: 数の符号。価0がプラス、1がマイナスを表します。1ビット。
 
      E: The exponent of the number, base 2.  8 bits are devoted to this
         field.  The exponent is biased by 127.
      E: 数の2を基とした指数。8ビットがこのフィールドに使われます。指数
         は127のバイアスがかけられます。
 
      F: The fractional part of the number's mantissa, base 2.  23 bits
         are devoted to this field.
      F: 数の2を基とした仮数部。23ビットがこのフィードに使われます。
 
   Therefore, the floating-point number is described by:
   そして、浮動小数点小数は以下の様に記述されます:
 
         (-1)**S * 2**(E-Bias) * 1.F
 
 
   It is declared as follows:
   これは以下の様に宣言されます:
 
         float identifier;
 
         +-------+-------+-------+-------+
         |byte 0 |byte 1 |byte 2 |byte 3 |              SINGLE-PRECISION
         S|   E   |           F          |         FLOATING-POINT NUMBER
         +-------+-------+-------+-------+
         1|<- 8 ->|<-------23 bits------>|
         <------------32 bits------------>
 
   Just as the most and least significant bytes of a number are 0 and 3,
   the most and least significant bits of a single-precision floating-
   point number are 0 and 31.  The beginning bit (and most significant
   bit) offsets of S, E, and F are 0, 1, and 9, respectively.  Note that
   these numbers refer to the mathematical positions of the bits, and
   NOT to their actual physical locations (which vary from medium to
   medium).
   最上位と最下位バイトが0番目と3番目で、シングル精度浮動小数点小数の
   最上位と最下位ビットが0番目と31番目です。SとEとFの最初のビット
   (最上位ビット)は、それぞれ0番目、1番目、9番目です。これらの数が
   (メディアからメディアまで変動する)実際の物理的な場所ではなく、ビッ
   トの数学的な位置であることに注意して下さい。
 
   The EEE specifications should be consulted concerning the encoding
   for signed zero, signed infinity (overflow), and denormalized numbers
   (underflow) [3].  According to IEEE specifications, the "NaN" (not a
   number) is system dependent and should not be used externally.
   符号付0と符号付無限大(オーバーフロー)と非正規化数(アンダーフロー)
   のコーディングに関してIEEE仕様を調べるべきです。IEEE仕様書に
   よれば「NaN 」(数ではない)はシステム依存で、外部的に使われるべきでは
   ありません。
 
3.7 Double-precision Floating-point
3.7 倍精度浮動小数点
 
   The standard defines the encoding for the double-precision floating-
   point data type "double" (64 bits or 8 bytes).  The encoding used is
   the IEEE standard for normalized double-precision floating-point
   numbers [3].  The standard encodes the following three fields, which
   describe the double-precision floating-point number:
   この標準は倍精度浮動小数点データタイプ"double"(64ビットあるいは8
   バイト)のコーディングを定義します。使われたコーディングはIEEE標
   準の正規化された倍精度の浮動小数点小数[3]です。この標準は倍精度の浮
   動小数点小数を記述する次の3つのフィールドをコード化します:
 
      S: The sign of the number.  Values 0 and 1 represent positive and
         negative, respectively.  One bit.
      S: 数の符号。価0がプラス、1がマイナスを表します。1ビット。
 
      E: The exponent of the number, base 2.  11 bits are devoted to
         this field.  The exponent is biased by 1023.
      E: 数の2を基とした指数。11ビットがこのフィールドに使われます。
         指数は1023のバイアスがかけられます。
 
      F: The fractional part of the number's mantissa, base 2.  52 bits
         are devoted to this field.
      F: 数の2を基とした仮数部。52ビットがこのフィードに使われます。
 
   Therefore, the floating-point number is described by:
   そして、浮動小数点小数は以下の様に記述されます:
 
         (-1)**S * 2**(E-Bias) * 1.F
 
   It is declared as follows:
   これは次のように宣言されます
 
         double identifier;
 
         +------+------+------+------+------+------+------+------+
         |byte 0|byte 1|byte 2|byte 3|byte 4|byte 5|byte 6|byte 7|
         S|    E   |                    F                        |
         +------+------+------+------+------+------+------+------+
         1|<--11-->|<-----------------52 bits------------------->|
         <-----------------------64 bits------------------------->
                                        DOUBLE-PRECISION FLOATING-POINT
 
   Just as the most and least significant bytes of a number are 0 and 3,
   the most and least significant bits of a double-precision floating-
   point number are 0 and 63.  The beginning bit (and most significant
   bit) offsets of S, E , and F are 0, 1, and 12, respectively.  Note
   that these numbers refer to the mathematical positions of the bits,
   and NOT to their actual physical locations (which vary from medium to
   medium).
   最上位バイトが0番目で最下位バイトが3番目なので、倍精度浮浮動小数点
   小数の最上位ビットは0番目で最下位ビットは63番目です。SとEとFの
   最初のビット(最上位ビット)のオフセットは、それぞれ0番目と1番目と
   12番目です。これらの数が(メディア毎に変動する)実際の物理的な場所
   ではなく、ビットの数学的な位置であることに注意を払ってください。
 
   The IEEE specifications should be consulted concerning the encoding
   for signed zero, signed infinity (overflow), and denormalized numbers
   (underflow) [3].  According to IEEE specifications, the "NaN" (not a
   number) is system dependent and should not be used externally.
   符号付0と符号付無限大(オーバーフロー)と非正規化数(アンダーフロー)
   のコーディングに関してIEEE仕様を調べるべきです。IEEE仕様書に
   よれば「NaN 」(数ではない)はシステム依存で、外部的に使われるべきでは
   ありません。
 
3.8 Fixed-length Opaque Data
3.8 固定長さの不透明なデータ
 
   At times, fixed-length uninterpreted data needs to be passed among
   machines.  This data is called "opaque" and is declared as follows:
   ときどき、固定長の不透明なデータが機械の間を通過する必要があります。
   このデータは"opaque"と呼ばれて、そして次のように宣言されます:。
 
         opaque identifier[n];
 
   where the constant n is the (static) number of bytes necessary to
   contain the opaque data.  If n is not a multiple of four, then the n
   bytes are followed by enough (0 to 3) residual zero bytes, r, to make
   the total byte count of the opaque object a multiple of four.
   固定値nが不透明なデータに必要なバイト(定)数です。もしnが4の倍数
   ではないなら、nバイトのあとに余計なゼロ値の(0から3)バイトが続き、
   不透明なオブジェクトの全体のバイト数を4の倍数にします。
 
          0        1     ...
      +--------+--------+...+--------+--------+...+--------+
      | byte 0 | byte 1 |...|byte n-1|    0   |...|    0   |
      +--------+--------+...+--------+--------+...+--------+
      |<-----------n bytes---------->|<------r bytes------>|
      |<-----------n+r (where (n+r) mod 4 = 0)------------>|
                                                   FIXED-LENGTH OPAQUE
 
3.9 Variable-length Opaque Data
3.9 可変的長不透明データ 
 
   The standard also provides for variable-length (counted) opaque data,
   defined as a sequence of n (numbered 0 through n-1) arbitrary bytes
   to be the number n encoded as an unsigned integer (as described
   below), and followed by the n bytes of the sequence.
   この標準は(数えられる)可変長不透明データを提供します、これは長さn
   の(0番目からn−1番目の)属性のシーケンスと定義され、、nは非負整数
   としてコード化され、nバイトのデータが続きます。
 
   Byte m of the sequence always precedes byte m+1 of the sequence, and
   byte 0 of the sequence always follows the sequence's length (count).
   If n is not a multiple of four, then the n bytes are followed by
   enough (0 to 3) residual zero bytes, r, to make the total byte count
   a multiple of four.  Variable-length opaque data is declared in the
   following way:
   シーケンスのバイトmが常にシーケンスのバイトm+1より前にあり、シー
   ケンスのバイト0が常にシーケンスの長さ(カウント)の後に続きます。も
   しnが4の倍数ではないなら、nバイトの後に(0から3個の)ゼロ値のバ
   イトが続き、全体のバイトを4の倍数にします。可変長の不透明データが次
   の方法で宣言されます:
 
         opaque identifier<m>;
      or
         opaque identifier<>;
 
   The constant m denotes an upper bound of the number of bytes that the
   sequence may contain.  If m is not specified, as in the second
   declaration, it is assumed to be (2**32) - 1, the maximum length.
   The constant m would normally be found in a protocol specification.
   For example, a filing protocol may state that the maximum data
   transfer size is 8192 bytes, as follows:
   定数mはシーケンスに含まれるかもしれないバイト数の上限を意味します。
   2番目の宣言の様に、もしmが指定されないなら、これは最大(2**32)−1
   と考えられます。定数mは通常プロトコル仕様書で見いだされるでしょう。
   例えば、ファイリングプロトコルが最大のデータ転送サイズが、次のように、
   8192バイトであると述べるかもしれません:。
 
         opaque filedata<8192>;
 
            0     1     2     3     4     5   ...
         +-----+-----+-----+-----+-----+-----+...+-----+-----+...+-----+
         |        length n       |byte0|byte1|...| n-1 |  0  |...|  0  |
         +-----+-----+-----+-----+-----+-----+...+-----+-----+...+-----+
         |<-------4 bytes------->|<------n bytes------>|<---r bytes--->|
                                 |<----n+r (where (n+r) mod 4 = 0)---->|
                                                  VARIABLE-LENGTH OPAQUE
 
   It is an error to encode a length greater than the maximum described
   in the specification.
   仕様書で記述した最大値より大きい長さのコード化はエラーです。
 
3.10 String
3.10 文字列
 
   The standard defines a string of n (numbered 0 through n-1) ASCII
   bytes to be the number n encoded as an unsigned integer (as described
   above), and followed by the n bytes of the string.  Byte m of the
   string always precedes byte m+1 of the string, and byte 0 of the
   string always follows the string's length.  If n is not a multiple of
   four, then the n bytes are followed by enough (0 to 3) residual zero
   bytes, r, to make the total byte count a multiple of four.  Counted
   byte strings are declared as follows:
   この標準はn個の(0番からn−1番の)ASCIIバイト文字列を定義し、
   nは(上記)符号なしの整数でコード化され、その後にnバイトの文字列が続
   きます。文字列のmバイトは常にm+1バイトの前にあり、文字列の0バイト
   は文字列の長さの後にあります。もしnが4の倍数ではないなら、(0から3
   個の)ゼロ値のバイトが続き、全体のバイト数を4の倍数にします。バイト文
   字列が次のように宣言されます:
 
         string object<m>;
      or
         string object<>;
 
 
   The constant m denotes an upper bound of the number of bytes that a
   string may contain.  If m is not specified, as in the second
   declaration, it is assumed to be (2**32) - 1, the maximum length.
   The constant m would normally be found in a protocol specification.
   For example, a filing protocol may state that a file name can be no
   longer than 255 bytes, as follows:
   定数mは文字列の含むバイト数の上限を意味します。2番目の様にもしmが
   指定されないなら、(2** 32)−1を最大長と考えます。定数mは通常プ
   ロトコル仕様書で見いだされるでしょう。例えば、ファイリングプロトコル
   がファイル名が255バイトより長くないと、次の通り述べるかもしれませ
   ん:
 
         string filename<255>;
 
            0     1     2     3     4     5   ...
         +-----+-----+-----+-----+-----+-----+...+-----+-----+...+-----+
         |        length n       |byte0|byte1|...| n-1 |  0  |...|  0  |
         +-----+-----+-----+-----+-----+-----+...+-----+-----+...+-----+
         |<-------4 bytes------->|<------n bytes------>|<---r bytes--->|
                                 |<----n+r (where (n+r) mod 4 = 0)---->|
                                                                  STRING
 
   It is an error to encode a length greater than the maximum described
   in the specification.
   仕様書で記述した最大値より長いコード化はエラーです。
 
3.11 Fixed-length Array
3.11 固定長配列
 
   Declarations for fixed-length arrays of homogeneous elements are in
   the following form:
   同種の要素の固定長配列の宣言は次の形式です:
 
         type-name identifier[n];
 
   Fixed-length arrays of elements numbered 0 through n-1 are encoded by
   individually encoding the elements of the array in their natural
   order, 0 through n-1.  Each element's size is a multiple of four
   bytes. Though all elements are of the same type, the elements may
   have different sizes.  For example, in a fixed-length array of
   strings, all elements are of type "string", yet each element will
   vary in its length.
   0からn−1の番号を付けた要素の固定長配列は、それらを自然な順序で並
   べてコード化したものです。各要素の大きさは4バイトの倍数です。各要素
   が同じタイプのであるが、要素の大きさは異なるかもしれません。例えば、
   文字列の固定長配列で、全要素は"文字列"タイプですが、各要素の長さは異
   なるでしょう。
 
         +---+---+---+---+---+---+---+---+...+---+---+---+---+
         |   element 0   |   element 1   |...|  element n-1  |
         +---+---+---+---+---+---+---+---+...+---+---+---+---+
         |<--------------------n elements------------------->|
 
                                               FIXED-LENGTH ARRAY
 
 
3.12 Variable-length Array
3.12 可変長配列
 
   Counted arrays provide the ability to encode variable-length arrays
   of homogeneous elements.  The array is encoded as the element count n
   (an unsigned integer) followed by the encoding of each of the array's
   elements, starting with element 0 and progressing through element n-
   1.  The declaration for variable-length arrays follows this form:
   数えられる配列が可変長の同種の要素の配列をコード化する能力を供給しま
   す。配列は要素数n(符号なし整数)で始まり、各配列要素が、要素0から
   要素n−1まで続く形でコード化されます。可変長さ配列の宣言は以下の通
   りです:
 
         type-name identifier<m>;
      or
         type-name identifier<>;
 
   The constant m specifies the maximum acceptable element count of an
   array; if m is not specified, as in the second declaration, it is
   assumed to be (2**32) - 1.
   定数mは配列の最大の要素数を指定します;もし2番目の宣言のようにmが
   指定されないなら、これは(2**32)−1であると考えられます。
 
           0  1  2  3
         +--+--+--+--+--+--+--+--+--+--+--+--+...+--+--+--+--+
         |     n     | element 0 | element 1 |...|element n-1|
         +--+--+--+--+--+--+--+--+--+--+--+--+...+--+--+--+--+
         |<-4 bytes->|<--------------n elements------------->|
                                                         COUNTED ARRAY
 
   It is an error to encode a value of n that is greater than the
   maximum described in the specification.
   仕様書で記述した最大より大きいn値をコード化することはエラーです。
 
3.13 Structure
3.13 構造体
 
   Structures are declared as follows:
   構造体は以下の様に宣言されます
 
         struct {
            component-declaration-A;
            component-declaration-B;
            ...
         } identifier;
 
   The components of the structure are encoded in the order of their
   declaration in the structure.  Each component's size is a multiple of
   four bytes, though the components may be different sizes.
   構造体の要素は、構造体で宣言される順番でコード化されます。各要素の大
   きさは、要素の大きさがそれぞれ異なっているかもしれないが、4バイトの
   倍数です。
 
         +-------------+-------------+...
         | component A | component B |...                      STRUCTURE
         +-------------+-------------+...
 
3.14 Discriminated Union
3.14 区別された共用体
 
   A discriminated union is a type composed of a discriminant followed
   by a type selected from a set of prearranged types according to the
   value of the discriminant.  The type of discriminant is either "int",
   "unsigned int", or an enumerated type, such as "bool".  The component
   types are called "arms" of the union, and are preceded by the value
   of the discriminant which implies their encoding.  Discriminated
   unions are declared as follows:
   区別された共用体は区別値と、区別値に従って選択されたタイプから構成さ
   れたタイプである。区別値のタイプは "int"か"unsigned int"か"bool"の様
   な列挙型です。構成するタイプは共用体の「腕」と呼ばれて、それらのコー
   ディングを暗示する区別値の後に続きます。区別された共用体が次のように
   宣言されます:
 
         union switch (discriminant-declaration) {
         case discriminant-value-A:
            arm-declaration-A;
         case discriminant-value-B:
            arm-declaration-B;
         ...
         default: default-declaration;
         } identifier;
 
   Each "case" keyword is followed by a legal value of the discriminant.
   The default arm is optional.  If it is not specified, then a valid
   encoding of the union cannot take on unspecified discriminant values.
   The size of the implied arm is always a multiple of four bytes.
   キーワード"case"の後に正しい区別値が続かれます。デフォルトは指定しな
   くてもかまいません。もしデフォルトが指定されないなら、共用体でコーディ
   ングが特定されていない区別値を指定できません。暗黙の腕の大きさは常に
   4バイトの倍数です。
 
   The discriminated union is encoded as its discriminant followed by
   the encoding of the implied arm.
   区別された共用体区別値と、続く腕のコーディングでコード化されます。
 
           0   1   2   3
         +---+---+---+---+---+---+---+---+
         |  discriminant |  implied arm  |          DISCRIMINATED UNION
         +---+---+---+---+---+---+---+---+
         |<---4 bytes--->|
 
3.15 Void
3.15 虚無
 
   An XDR void is a 0-byte quantity.  Voids are useful for describing
   operations that take no data as input or no data as output. They are
   also useful in unions, where some arms may contain data and others do
   not.  The declaration is simply as follows:
   XDR空虚は0バイトの量です。空虚は入力データや、出力データをとらな
   いオペレーションを記述する際に有用です。これらはある腕がデータを含ん
   でなく他が含んでいる共用体でも有用です。宣言はただ次の通りです:
 
         void;
 
   Voids are illustrated as follows:
   空虚が次のように説明されます:
 
           ++
           ||                                                     VOID
           ++
         --><-- 0 bytes
 
3.16 Constant
3.16 定数
 
   The data declaration for a constant follows this form:
   定数のデータ宣言は以下の通りです:
 
         const name-identifier = n;
 
   "const" is used to define a symbolic name for a constant; it does not
   declare any data.  The symbolic constant may be used anywhere a
   regular constant may be used.  For example, the following defines a
   symbolic constant DOZEN, equal to 12.
   "const"が定数の象徴的な名前を定義するために使います;これはデータを宣
   言しません。象徴的定数は通常の定数が使えるところのどこででも使えます。
   例えば、次は12と等しい象徴的な定数ダースを定義します。
 
         const DOZEN = 12;
 
3.17 Typedef
3.17 タイプ定義
 
   "typedef" does not declare any data either, but serves to define new
   identifiers for declaring data. The syntax is:
   "typedef"がデータを宣言しませんが、データを宣言する新しい識別子を定義
   するのに役立ちます。構文は以下です:
 
         typedef declaration;
 
   The new type name is actually the variable name in the declaration
   part of the typedef.  For example, the following defines a new type
   called "eggbox" using an existing type called "egg":
   新しいタイプ名はtypedefのdeclaration部の変数名です。例えば、以下は
   "egg"と呼ばれる既存のタイプを使って"eggbox"と呼ばれる新しいタイプを
   定義します:
 
         typedef egg eggbox[DOZEN];
 
   Variables declared using the new type name have the same type as the
   new type name would have in the typedef, if it was considered a
   variable.  For example, the following two declarations are equivalent
   in declaring the variable "fresheggs":
   新しいタイプ名を使って宣言された変数が、もしそれが変数であるなら、
   typedefの新しいタイプ名がと同じタイプを持っています。例えば、次の2つ
   の宣言は変数な"fresheggs"を宣言することにおいて等しいです:
 
         eggbox  fresheggs;
         egg     fresheggs[DOZEN];
 
   When a typedef involves a struct, enum, or union definition, there is
   another (preferred) syntax that may be used to define the same type.
   In general, a typedef of the following form:
   typedefが構造体や列挙型や共用体定義を含む時、同じタイプを定義するため
   に使われるかもしれないもう1つの(優先)構文があります。一般にtypedef
   は次の形式です:
 
         typedef <<struct, union, or enum definition>> identifier;
 
   may be converted to the alternative form by removing the "typedef"
   part and placing the identifier after the "struct", "union", or
   "enum" keyword, instead of at the end.  For example, here are the two
   ways to define the type "bool":
   "typedef"部を取り去り、キーワード"struct"や"union"や"enum"の後に識別子
   を置くことで代わりの書式に変換されます。例えば、"bool"タイプを定義する
   2つの方法があります:
 
         typedef enum {    /* using typedef */
            FALSE = 0,
            TRUE = 1
         } bool;
 
         enum bool {       /* preferred alternative */
            FALSE = 0,
            TRUE = 1
         };
 
   The reason this syntax is preferred is one does not have to wait
   until the end of a declaration to figure out the name of the new
   type.
   この構文が好まれる理由の1つは宣言の終わりまで新しいタイプの名前
   を理解するのを待たなくてもよいということです。
 
3.18 Optional-data
3.18 オプションデータ
 
   Optional-data is one kind of union that occurs so frequently that we
   give it a special syntax of its own for declaring it.  It is declared
   as follows:
   オプションデータは共用体の1種ですが、この宣言のために特別な構文を作る
   ほどしばしばあるものです。これは次のように宣言されます:
 
         type-name *identifier;
 
   This is equivalent to the following union:
   これは次の共用体と等価です:
 
         union switch (bool opted) {
         case TRUE:
            type-name element;
         case FALSE:
            void;
         } identifier;
 
   It is also equivalent to the following variable-length array
   declaration, since the boolean "opted" can be interpreted as the
   length of the array:
   ブール変数"opted"が配列の長さに翻訳できるので、以下の可変長配列宣言と
   も等しいです:
 
         type-name identifier<1>;
 
   Optional-data is not so interesting in itself, but it is very useful
   for describing recursive data-structures such as linked-lists and
   trees.  For example, the following defines a type "stringlist" that
   encodes lists of arbitrary length strings:
   任意のデータはこれだけでそれほど面白くありませんが、リンクされたリス
   トと木のような再帰的なデータ構造を記述する際に非常に役立ちます。例え
   ば、次のことが任意の長さの文字列のリストをコード化する"stringlist"タ
   イプを定義します:
 
         struct *stringlist {
            string item<>;
            stringlist next;
         };
 
   It could have been equivalently declared as the following union:
   これは次の共用体の様に宣言できます:
 
         union stringlist switch (bool opted) {
         case TRUE:
            struct {
               string item<>;
               stringlist next;
            } element;
         case FALSE:
            void;
         };
 
      or as a variable-length array:
      または可変長配列として:
 
         struct stringlist<1> {
            string item<>;
            stringlist next;
         };
 
   Both of these declarations obscure the intention of the stringlist
   type, so the optional-data declaration is preferred over both of
   them.  The optional-data type also has a close correlation to how
   recursive data structures are represented in high-level languages
   such as Pascal or C by use of pointers. In fact, the syntax is the
   same as that of the C language for pointers.
   これらの宣言の両方ともがstringlistタイプの意図を不明瞭にするので、
   オプションデータ電源はそれらのどちらよりも好まれます。オプションデー
   タタイプは再帰的なデータ構造がポインタの使用によってPascalやCのよ
   うな高レベル言語で表される方法に近い相互関係を持っています。実際、構
   文はC言語のポインタと同じです。
 
3.19 Areas for Future Enhancement
3.19 未来の拡張のためのエリア
 
   The XDR standard lacks representations for bit fields and bitmaps,
   since the standard is based on bytes.  Also missing are packed (or
   binary-coded) decimals.
   XDR標準は、バイトに基づいているので、ビットフィールドとビットマップ
   の表現に欠けます。パックされた(か、あるいは2進コード化された)10進
   数も欠けています。
 
   The intent of the XDR standard was not to describe every kind of data
   that people have ever sent or will ever want to send from machine to
   machine. Rather, it only describes the most commonly used data-types
   of high-level languages such as Pascal or C so that applications
   written in these languages will be able to communicate easily over
   some medium.
   XDR標準の意図は人々の送るあらゆる種類のデータや、あらゆる機械間のデー
   のを記述の記述ではありません。どちらかと言うと、PascalやCのような高レ
   ベル言語が一般に使うデータタイプを記述するだけで、これらの言語で書かれ
   たアプリケーションがいずれかのメディア上で容易に通信を可能とするように
   意図されます 。
 
   One could imagine extensions to XDR that would let it describe almost
   any existing protocol, such as TCP.  The minimum necessary for this
   are support for different block sizes and byte-orders.  The XDR
   discussed here could then be considered the 4-byte big-endian member
   of a larger XDR family.
   TCPのような既存のプロトコルも記述できるようにXDRの拡張を想像す
   ることはできます。これに少なくとも必要ものは異なったブロックサイズの
   サポートとバイト順序です。ここで論じられたXDRは4バイトビッグエン
   ディアンのXDRファミリーと考える事ができす。
 
4. DISCUSSION
4. 議論
 
   (1) Why use a language for describing data?  What's wrong with
   diagrams?
   (1) なぜデータ記述に言語を使うのか?図ではだめなのか?
 
   There are many advantages in using a data-description language such
   as  XDR  versus using  diagrams.   Languages are  more  formal than
   diagrams   and   lead  to less  ambiguous   descriptions  of  data.
   Languages are also easier  to understand and allow  one to think of
   other   issues instead of  the   low-level details of bit-encoding.
   Also,  there is  a close analogy  between the  types  of XDR and  a
   high-level language   such  as C   or    Pascal.   This makes   the
   implementation of XDR encoding and decoding modules an easier task.
   Finally, the language specification itself  is an ASCII string that
   can be passed from  machine to machine  to perform  on-the-fly data
   interpretation.
   XDRを使うことは、図のようなデータ記述を使うより、多くの利点があり
   ます。言語は図よりもフォーマルで、あいまいさが少ないです。言語は理解
   することがより容易であり、人にビットコーディングの低レベルの細部では
   なく、他の問題を考えることを許します。同じく、XDRタイプとCあるい
   はパスカルのような高レベル言語の間に近い類似があります。これはXDR
   コーディングとモジュールを解読することをより容易な仕事にします。最終
   的に、言語仕様書それ自身は、機械から機械に転送可能で、その場その場で
   データ解釈を行うASCII文字列です。
 
   (2) Why is there only one byte-order for an XDR unit?
   (2) なぜXDRはバイト順序を1つにしてるのか?
 
   Supporting two byte-orderings requires a higher level protocol for
   determining in which byte-order the data is encoded.  Since XDR is
   not a protocol, this can't be done.  The advantage of this, though,
   is that data in XDR format can be written to a magnetic tape, for
   example, and any machine will be able to interpret it, since no
   higher level protocol is necessary for determining the byte-order.
   2つのバイト順序をサポートすることはどのバイト順序でデータがコード
   化されるか決定するより高いレベルのプロトコルを必要とします。XDR
   はプロトコルでないので、これはできません。この利点は、XDRフォー
   マットでのデータが、例えば磁気テープに書き込むことができ、マシンが
   バイトオーダーを決定する際に、高レベルプロトコルが必要ではないので、
   翻訳が可能だということです。
 
   (3) Why is the XDR byte-order big-endian instead of little-endian?
   Isn't this unfair to little-endian machines such as the VAX(r), which
   has to convert from one form to the other?
   (3) なぜXDRのバイト順序はリトルエンディアンではなくビッグエンディ
   アンなのですか?これは他の形式に変換しなければならないVAXのようなリ
   トルエンディアンマシンに不公平ではありませんか?
 
   Yes, it is unfair, but having only one byte-order means you have to
   be unfair to somebody.  Many architectures, such as the Motorola
   68000* and IBM 370*, support the big-endian byte-order.
   はい不公平です、しかしバイト順序を1つに決めることは誰かに対して不公
   平でなければならないことを意味します。Motorola 68000*やIBM 370*など
   多くのアーキテクチャがビッグエンディアンをサポートします。
 
   (4) Why is the XDR unit four bytes wide?
   (4) なぜXDRユニットは4バイト幅なのですか?
 
   There is a tradeoff in choosing the XDR unit size.  Choosing a small
   size such as two makes the encoded data small, but causes alignment
   problems for machines that aren't aligned on these boundaries.  A
   large size such as eight means the data will be aligned on virtually
   every machine, but causes the encoded data to grow too big.  We chose
   four as a compromise.  Four is big enough to support most
   architectures efficiently, except for rare machines such as the
   eight-byte aligned Cray*.  Four is also small enough to keep the
   encoded data restricted to a reasonable size.
   XDRのユニットサイズを選択することにトレードオフがあります。2のよ
   うな小さいサイズの選択はコード化されたデータを小さくしますが、整列し
   ていないデータを扱えない機械の整列問題を起こします。8のような大きい
   大きさがデータがほとんどあらゆる機械の上で整列できることを意味します
   が、コード化されたデータをあまりにも大きくします。我々は4を妥当と選
   びました。4が効率的にたいていのアーキテクチャをサポートし、8バイト
   で整列したCray*のようなマシンは珍しいです。4が同じくコード化された
   データを合理的な大きさに限定するのに十分なぐらい小さいです。
 
   (5) Why must variable-length data be padded with zeros?
   (5) なぜ可変長データをゼロでパディングするのですか?
 
   It is desirable that the same data encode into the same thing on all
   machines, so that encoded data can be meaningfully compared or
   checksummed.  Forcing the padded bytes to be zero ensures this.
   同じデータがすべての機械で同じにコード化されることは望ましく、そうす
   ればコード化されたデータが意味的に比較でき、チェックサムを付けれます。
   パディングゼロバイトがこれを保証します。
 
   (6) Why is there no explicit data-typing?
   (6) なぜ明示的なデータ種別がないのですか?
 
   Data-typing has a relatively high cost for what small advantages it
   may have.  One cost is the expansion of data due to the inserted type
   fields.  Another is the added cost of interpreting these type fields
   and acting accordingly.  And most protocols already know what type
   they expect, so data-typing supplies only redundant information.
   However, one can still get the benefits of data-typing using XDR. One
   way is to encode two things: first a string which is the XDR data
   description of the encoded data, and then the encoded data itself.
   Another way is to assign a value to all the types in XDR, and then
   define a universal type which takes this value as its discriminant
   and for each value, describes the corresponding data type.
   データ種別は小さい利点のために比較的高い犠牲を持ちます。1つのコストは
   挿入されたタイプフィールドのためのデータの拡大です。もう1つはこれらの
   タイプフィールドを解釈して、それ相応に行動をすることについてのコスト増
   です。たいていのプロトコルがすでにそれらが何のタイプか予想できるので、
   データタイプががただ冗長な情報だけを供給します。しかしながら、XDRで
   データタイプを使って利益を得ることができます。一つの方法は2つのことを
   コード化することです:最初にコード化されたデータそれ自身のXDRデータ
   記述の文字列を置き、次にコード化されたデータを置きます。もう1つの方法
   はXDRで値をすべてのタイプに割り当て、各値を区別のためのユニバーサル
   タイプを定義し、対応するデータタイプが記述します。
 
 
5. THE XDR LANGUAGE SPECIFICATION
5. XDR言語仕様
 
   5.1 Notational Conventions
   5.1 表記方法
 
   This specification uses an extended Back-Naur Form notation for
   describing the XDR language.  Here is a brief description of the
   notation:
   この仕様書はXDR言語を記述するため拡張されたBNF記法を使います。
   ここに表記の短い記述があります:。
 
   (1) The characters '|', '(', ')', '[', ']', '"', and '*' are special.
   (1) 文字'|'と'('と')'と'['と']'と'"'と'*'は特殊文字です。
   (2) Terminal symbols are strings of any characters surrounded by
   double quotes.
   (2) 終端シンボルは二重引用符で囲まれる任意の文字の文字列です。
   (3) Non-terminal symbols are strings of non-special characters.
   (3) 非終端シンボルは非特殊文字の文字列です。
   (4) Alternative items are separated by a vertical bar ("|").
   (4) 代用項目は直立バー("|")によって分離されます。
   (5) Optional items are enclosed in brackets.
   (5) オプション項目がカッコにされます。
   (6) Items are grouped together by enclosing them in parentheses.
   (6) 項目が括弧にで囲むことでグループ化されます。
   (7) A '*' following an item means 0 or more occurrences of that item.
   (7) 項目の後の'*'は、その項目が0個以上あることを意味します。
 
   For example,  consider  the  following pattern:
   例えば、次のパターンを考えてください:
 
         "a " "very" (", " "very")* [" cold " "and "]  " rainy "
         ("day" | "night")
 
   An infinite number of strings match this pattern. A few of them are:
   無限の数の文字列がこのパターンに一致します。いくつかは以下の通りです:
 
         "a very rainy day"
         "a very, very rainy day"
         "a very cold and  rainy day"
         "a very, very, very cold and  rainy night"
 
5.2 Lexical Notes
5.2 語彙のメモ
 
   (1) Comments begin with '/*' and terminate with '*/'.
   (1) コメントが'/*'で始まり'*/'で終わります。
   (2) White space serves to separate items and is otherwise ignored.
   (2) 空白スペースが項目を分離するのに役立つか、無視されます。
   (3) An identifier is a letter followed by an optional sequence of
   letters, digits or underbar ('_'). The case of identifiers is not
   ignored.
   (3) 識別子は文字で始まり文字か数字か下線('_')の連続が続きます。
   識別子の大文字小文字は区別します。
   (4) A constant is a sequence of one or more decimal digits,
   optionally preceded by a minus-sign ('-').
   (4) 定数が1つ以上の数字で、その前にマイナス記号('-')があるかもしれません。
 
5.3 Syntax Information
5.3 構文情報
 
      declaration:
      宣言:
           type-specifier identifier
         | type-specifier identifier "[" value "]"
         | type-specifier identifier "<" [ value ] ">"
         | "opaque" identifier "[" value "]"
         | "opaque" identifier "<" [ value ] ">"
         | "string" identifier "<" [ value ] ">"
         | type-specifier "*" identifier
         | "void"
 
      value:
      値:
           constant
         | identifier
 
      type-specifier:
      タイプ識別:
           [ "unsigned" ] "int"
         | [ "unsigned" ] "hyper"
         | "float"
         | "double"
         | "bool"
         | enum-type-spec
         | struct-type-spec
         | union-type-spec
         | identifier
 
      enum-type-spec:
      列挙型識別:
         "enum" enum-body
 
      enum-body:
      列挙本体:
         "{"
            ( identifier "=" value )
            ( "," identifier "=" value )*
         "}"
 
      struct-type-spec:
      構造体識別:
         "struct" struct-body
 
      struct-body:
      構造体本体:
         "{"
            ( declaration ";" )
            ( declaration ";" )*
         "}"
 
      union-type-spec:
      共用体識別:
         "union" union-body
 
      union-body:
      共用体本体:
         "switch" "(" declaration ")" "{"
            ( "case" value ":" declaration ";" )
            ( "case" value ":" declaration ";" )*
            [ "default" ":" declaration ";" ]
         "}"
 
      constant-def:
      定数定義:
         "const" identifier "=" constant ";"
 
      type-def:
      型定義:
           "typedef" declaration ";"
         | "enum" identifier enum-body ";"
         | "struct" identifier struct-body ";"
         | "union" identifier union-body ";"
 
      definition:
      定義:
           type-def
         | constant-def
 
      specification:
      指定:
           definition *
 
5.4 Syntax Notes
5.4 文法のメモ
 
   (1) The following are keywords and cannot be used as identifiers:
   "bool", "case", "const", "default", "double", "enum", "float",
   "hyper", "opaque", "string", "struct", "switch", "typedef", "union",
   "unsigned" and "void".
   (1) 次の単語はキーワードで、識別子として用いることができません:
   "bool", "case", "const", "default", "double", "enum", "float",
   "hyper", "opaque", "string", "struct", "switch", "typedef",
   "union", "unsigned", "void"
 
   (2) Only unsigned constants may be used as size specifications for
   arrays.  If an identifier is used, it must have been declared
   previously as an unsigned constant in a "const" definition.
   (2) 符号なし定数だけが配列の大きさの仕様として用いることができます。
   もし識別子が使われるなら、前に"const"定義で符号なしの定数として宣言
   されたに違いありません。
 
   (3) Constant and type identifiers within the scope of a specification
   are in the same name space and must be declared uniquely within this
   scope.
   (3) 仕様書の範囲内の定数とタイプ識別子が同じ名前空間にあり、この範囲内
   でユニークに宣言されなくてはなりません。
 
   (4) Similarly, variable names must  be unique within  the scope  of
   struct and union declarations. Nested struct and union declarations
   create new scopes.
   (4) 同様に、変数名は構造体と共用体宣言の範囲内でユニークであるに違いあ
   りません。入れ子の構造体と共用体宣言が新しい範囲を作ります。
 
   (5) The discriminant of a union must be of a type that evaluates to
   an integer. That is, "int", "unsigned int", "bool", an enumerated
   type or any typedefed type that evaluates to one of these is legal.
   Also, the case values must be one of the legal values of the
   discriminant.  Finally, a case value may not be specified more than
   once within the scope of a union declaration.
   (5) 共用体の識別値は整数に評価されるタイプでなければなりません。すな
   わち"int"か"unsigned int"か"bool"か列挙型かこれらかた定義された型です。
   同じく、ケース値は識別値の正しい値の1つであるに違いありません。最終
   的に、ケース値が共用体宣言の範囲内で指定されないかもしれません。
 
6. AN EXAMPLE OF AN XDR DATA DESCRIPTION
6. XDRデータ記述の例
 
   Here is a short XDR data description of a thing called a "file",
   which might be used to transfer files from one machine to another.
   ここに1つのマシンからもう1つまでファイルを転送するために使われるか
   もしれない「ファイル」と呼ばれる、短いXDRデータ記述があります。
 
         const MAXUSERNAME = 32;     /* max length of a user name */
         const MAXFILELEN = 65535;   /* max length of a file      */
         const MAXNAMELEN = 255;     /* max length of a file name */
 
         /*
          * Types of files:
          */
         enum filekind {
            TEXT = 0,       /* ascii data */
            DATA = 1,       /* raw data   */
            EXEC = 2        /* executable */
         };
 
         /*
          * File information, per kind of file:
          */
         union filetype switch (filekind kind) {
         case TEXT:
            void;                           /* no extra information */
         case DATA:
            string creator<MAXNAMELEN>;     /* data creator         */
         case EXEC:
            string interpretor<MAXNAMELEN>; /* program interpretor  */
         };
 
         /*
          * A complete file:
          */
         struct file {
            string filename<MAXNAMELEN>; /* name of file    */
            filetype type;               /* info about file */
            string owner<MAXUSERNAME>;   /* owner of file   */
            opaque data<MAXFILELEN>;     /* file data       */
         };
 
   Suppose now that there is a user named "john" who wants to store his
   lisp program "sillyprog" that contains just the data "(quit)".  His
   file would be encoded as follows:
   今ユーザ"john"が、自分のリスププログラム"sillyprog"を登録したくて、こ
   のプログラムは"(quit)"だと考えて下さい。彼のファイルは次のようにコード
   化されるでしょう:
 
       OFFSET  HEX BYTES       ASCII    COMMENTS
       ------  ---------       -----    --------
        0      00 00 00 09     ....     -- length of filename = 9
        4      73 69 6c 6c     sill     -- filename characters
        8      79 70 72 6f     ypro     -- ... and more characters ...
       12      67 00 00 00     g...     -- ... and 3 zero-bytes of fill
       16      00 00 00 02     ....     -- filekind is EXEC = 2
       20      00 00 00 04     ....     -- length of interpretor = 4
       24      6c 69 73 70     lisp     -- interpretor characters
       28      00 00 00 04     ....     -- length of owner = 4
       32      6a 6f 68 6e     john     -- owner characters
       36      00 00 00 06     ....     -- length of file data = 6
       40      28 71 75 69     (qui     -- file data bytes ...
       44      74 29 00 00     t)..     -- ... and 2 zero-bytes of fill
 
7. REFERENCES
7. 参考文献
 
   [1]  Brian W. Kernighan & Dennis M. Ritchie, "The C Programming
        Language", Bell Laboratories, Murray Hill, New Jersey, 1978.
 
   [2]  Danny Cohen, "On Holy Wars and a Plea for Peace", IEEE Computer,
        October 1981.
 
   [3]  "IEEE Standard for Binary Floating-Point Arithmetic", ANSI/IEEE
        Standard 754-1985, Institute of Electrical and Electronics
        Engineers, August 1985.
 
   [4]  "Courier: The Remote Procedure Call Protocol", XEROX
        Corporation, XSIS 038112, December 1981.
 
8. TRADEMARKS AND OWNERS
8. トレードマークと所有者
 
        SUN WORKSTATION  Sun Microsystems, Inc.
        VAX              Digital Equipment Corporation
        IBM-PC           International Business Machines Corporation
        Cray             Cray Research
        NFS              Sun Microsystems, Inc.
        Ethernet         Xerox Corporation.
        Motorola 68000   Motorola, Inc.
        IBM 370          International Business Machines Corporation

Japanese translation by Ishida So