Annotation of OpenXM/doc/OpenXM-specs/cmo-basic0.tex, Revision 1.6
1.6 ! takayama 1: %% $OpenXM: OpenXM/doc/OpenXM-specs/cmo-basic0.tex,v 1.5 2000/09/08 17:14:54 takayama Exp $
1.5 takayama 2: //&jp \section{CMO Primitive object}
1.2 noro 3: //&eg \section{CMO Primitive object}
4: \label{sec:basic0}
1.1 noro 5: /*&jp
1.2 noro 6: CMO (Common Mathematical Object format) グループ Primitive の Object は,
1.1 noro 7: ローレベルのデータ型, {\tt int} , {\tt string}
8: などに対応する object である.
9: この CMO はすべての OpenXM が実装していると仮定される.
1.2 noro 10: この節では, イントロダクションとして, グループ Primitive に属する CMObject
1.1 noro 11: (Common Mathematical Object) を形式的な方法をつかわず導入しよう.
12: */
13: /*&eg
1.2 noro 14: Objects in CMO (Common Mathematical Object format) group Primitive
1.1 noro 15: are primitive data such as {\tt int}, {\tt string}.
16: All OpenXM compliant systems should implement all data types
1.2 noro 17: in the group Primitive.
1.1 noro 18: In this section, as an introduction, we will introduce
1.2 noro 19: CMObject (Common Mathematical Object) of the group Primitive without
1.1 noro 20: using the Backus-Nauer form.
21: */
22: /*&jp
23: このグループの正式な名前は,
1.2 noro 24: CMObject/Primitive である.
1.1 noro 25: 以下, {\tt int32} で2の補数表現された
26: 32 bit integer をあらわす
27: (これはよく使われる計算機での C 言語の int の内部表現).
28: {\tt byte} で 8 bit データをあらわす.
29: */
30: /*&eg
31: The canonical name of this group is
1.2 noro 32: CMObject/Primitive.
1.1 noro 33: In the sequel,
34: {\tt int32} means the signed 32 bit integer expressed by two's complement
35: (internal expressions of {\tt int} of the language C usually use
36: this expression).
37: {\tt byte} means 8 bit data.
38: */
39:
40: //&C
41: /*&jp
42: CMObject の TCP/IP 用の実装では,
43: CMO の object は \\
44: \begin{tabular}{|c|c|}
45: \hline
46: {\tt cmo\_tag}& {\tt cmo\_body} \\
47: \hline
48: \end{tabular} \\
49: なる形をしている.
50: ここで, {\tt cmo\_tag} は, 正の
51: {\tt int32} で表現するものと規約する.
52: */
53: /*&eg
54: In our encoding of the CMO's for TCP/IP,
55: any CMObject consists of a tag and a body: \\
56: \begin{tabular}{|c|c|}
57: \hline
58: {\tt cmo\_tag}& {\tt cmo\_body} \\
59: \hline
60: \end{tabular} \\
61: {\tt cmo\_tag} should be given by a positive
62: {\tt int32}.
63: */
64:
65: /*&C
66:
67: */
68: /*&jp
69: {\tt cmo\_tag} は object のタイプをあらわすタグであり,
70: 以下のように決めている.
71: */
1.2 noro 72: //&eg The following is a list of tags of CMObject/Primitive.
1.1 noro 73: /*&C
74: @../SSkan/plugin/cmotag.h
75: \begin{verbatim}
1.4 takayama 76: #define LARGEID 0x7f000000 /* 2130706432 */
1.1 noro 77: #define CMO_ERROR2 (LARGEID+2)
78: #define CMO_NULL 1
79: #define CMO_INT32 2
80: #define CMO_DATUM 3
81: #define CMO_STRING 4
82: #define CMO_MATHCAP 5
83: #define CMO_LIST 17
84: \end{verbatim}
85: */
86:
87: /*&jp
88: 以下, 各 object の フォーマットを説明する.
89: サーバ, クライアントはすべての object の CMO 形式をサポートする必要はないが,
90: {\tt CMO\_ERROR2}, {\tt CMO\_NULL},
91: {\tt CMO\_INT32}, {\tt CMO\_STRING}, {\tt CMO\_MATHCAP}, {\tt CMO\_LIST}
92: は最も基本的なデータであり,
93: また全てのサーバ, クライアントが実装すべき CMO データである.
94: */
95: /*&eg
96: We will explain each object format.
97: Servers and clients do not need to implement all CMO's.
98: However,
99: {\tt CMO\_ERROR2}, {\tt CMO\_NULL},
100: {\tt CMO\_INT32}, {\tt CMO\_STRING}, {\tt CMO\_MATHCAP}, {\tt CMO\_LIST}
101: are primitive data and
102: all servers and clients have to implement them.
103: */
104:
105: /*&C
106:
107: \medbreak \noindent
108: */
109: //&jp CMObject Error2 は \\
110: //&eg CMObject Error2 is of the form \\
111: /*&C
112: \begin{tabular}{|c|c|}
113: \hline
114: {\tt int32 CMO\_ERROR2} & {\sl CMObject} {\rm ob} \\
115: \hline
116: \end{tabular} \\
117: */
118: /*&jp
119: なる形で表現する.
120: エラーの時に push する object であり, {\it CMObject} ob の
121: 部分に詳細なエラー情報がはいる.
122: ob はリストであり, TCP/IP によるストリーム型接続の場合,
123: 最初の成分はエラーを起こした OX メッセージ(後述)
124: のシリアル番号でないといけない.
125: シリアル番号は Integer32 で表現する.
1.3 noro 126:
127: \noindent
128: Remark: 歴史的な理由により, エラーオブジェクトの CMO タグは {\it
129: CMO\_ERROR2} と名付けられている. 次の版の仕様書では {\tt CMO\_ERROR}
130: に変更する予定である.
1.1 noro 131: */
132: /*&eg
133: It is an object used when a server makes an error.
134: {\it CMObject} ob carries error informations.
1.6 ! takayama 135: The instance ob is a list and, in case of a stream connection like TCP/IP,
1.1 noro 136: the first element must be the serial number of the OX message
137: that caused the error.
138: The serial number is given by the data type Integer32.
1.3 noro 139:
140: \noindent
141: Remark: For a historical reason the CMO tag of the error object is
142: named {\tt CMO\_ERROR2}. In the next vesion of OpenXM specification
1.6 ! takayama 143: we may rename it {\tt CMO\_ERROR}.
1.1 noro 144: */
145:
146: /*&C
147:
148: \medbreak \noindent
149: */
150:
151: //&jp CMObject Null は \\
152: //&eg CMObject Null has the format \\
153: /*&C
154: \begin{tabular}{|c|c|}
155: \hline
156: {\tt int32 CMO\_NULL} \\
157: \hline
158: \end{tabular} \\
159: */
160: /*&jp
161: なる形で表現する.
162: */
163:
164: /*&C
165:
166: \noindent
167: */
168:
169: //&jp 32 bit integer n は CMObject としては Integer32 と呼ばれ, \\
170: //&eg 32 bit integer n is called Integer32 as a CMObject and has the format \\
171: /*&C
172: \begin{tabular}{|c|c|}
173: \hline
174: {\tt int32 CMO\_INT32}& {\tt int32} {\rm n} \\
175: \hline
176: \end{tabular} \\
177: */
178: //&jp なる形で表現する.
179:
180: /*&C
181:
182: \medbreak \noindent
183: */
184:
185:
186: //&jp 長さ n の バイト列 data は CMObject としては, Datum 型とよばれ \\
187: //&eg A byte array of the length n is called Datum as a CMObject and has the format \\
188: /*&C
189: \begin{tabular}{|c|c|c|c|}
190: \hline
191: {\tt int32 CMO\_DATUM}& {\tt int32} {\rm n} & {\tt byte} {\rm data[0]}
192: & {\tt byte} {\rm data[1]} \\
193: \hline
194: $\cdots$ & {\tt byte} {\rm data[n-1]} \\
195: \cline{1-2}
196: \end{tabular} \\
197: */
198: //&jp と表現する.
199:
200: /*&C
201:
202: \noindent
203: */
204:
205: //&jp 長さ n の 文字列 data は, CMObject としては, Cstring 型とよばれ \\
206: //&eg String of n bytes is called Cstring as CMObject and has the format \\
207: /*&C
208: \begin{tabular}{|c|c|c|c|}
209: \hline
210: {\tt int32 CMO\_STRING}& {\tt int32} {\rm n} & {\tt byte} {\rm data[0]}
211: & {\tt byte} {\rm data[1]} \\
212: \hline
213: $\cdots$ & {\tt byte} {\rm data[n-1]} \\
214: \cline{1-2}
215: \end{tabular} \\
216: */
217: /*&jp
218: と表現する. C 言語で普通用いられる, 文字列のおわりの {\tt 0} は文字列
219: に含めない.
220: */
221:
222: /*&C
223:
224: \noindent
225: */
226: //&jp CMObject Mathcap は \\
227: //&eg CMObject Mathcap has the format \\
228: /*&C
229: \begin{tabular}{|c|c|}
230: \hline
231: {\tt int32 CMO\_MATHCAP} & {\it CMObject} {\rm ob} \\
232: \hline
233: \end{tabular} \\
234: */
235: /*&jp
236: なる形で表現する.
237: {\tt ob} はリストであり少なくとも3つの要素をもつ.
238: 0 番目の要素は, Integer32 で表した OpenXM protocol version number と,
239: Cstring で表したシステム名, Server version, CPU type, その他の情報
240: のリストである.
241: 1 番目の要素は, システム xxx が扱うことの可能な
242: SM タグを, Integer32 で表現したものを集めたリストである.
243: 3 番目の要素は, システム xxx があつかうことの可能な
244: データ形式をあつめたリストである.
1.6 ! takayama 245: 詳細は mathcap の節 \ref{subsubsection:mathcap} で説明する.
1.1 noro 246: */
247: /*&eg
248: ob is a list of which length is more than or equal to three.
249: The first element is a list of
250: OpenXM protocol version number in Integer32,
251: the server name in Cstring,
252: the server version and CPU type in Cstring,
253: and extra informations.
254: The second element is a list of SM tags in Integer 32.
255: The third element is a list of data type tags which the server or the client
256: can understand.
1.6 ! takayama 257: The details will be explained in the section on mathcap \ref{subsubsection:mathcap}.
1.1 noro 258: */
259:
260: /*&C
261:
262: \medbreak \noindent
263: */
264: //&jp 長さ m のリストは \\
265: //&eg A list of the length m has the form \\
266: /*&C
267: \begin{tabular}{|c|c|c|c|c|}
268: \hline
269: {\tt int32 CMO\_LIST}& {\tt int32} {\rm m} & {\tt CMObject}\, ob[0] & $\cdots$ &
270: {\tt CMObject}\, ob[$m-1$] \\
271: \hline
272: \end{tabular}\\
273: */
274: //&jp で表現する.
275:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>