このグループの正式な名前は, CMObject/Primitive である. 以下, int32 で2の補数表現された 32 bit integer をあらわす (これはよく使われる計算機での C 言語の int の内部表現). byte で 8 bit データをあらわす.
CMObject の TCP/IP 用の実装では,
CMO の object は
cmo_tag | cmo_body |
cmo_tag は object のタイプをあらわすタグであり, 以下のように決めている.
@../SSkan/plugin/cmotag.h
#define LARGEID 0x7f000000 /* 2130706432 */ #define CMO_ERROR2 (LARGEID+2) #define CMO_NULL 1 #define CMO_INT32 2 #define CMO_DATUM 3 #define CMO_STRING 4 #define CMO_MATHCAP 5 #define CMO_LIST 17
以下, 各 object の フォーマットを説明する. サーバ, クライアントはすべての object の CMO 形式をサポートする必要はないが, CMO_ERROR2, CMO_NULL, CMO_INT32, CMO_STRING, CMO_MATHCAP, CMO_LIST は最も基本的なデータであり, また全てのサーバ, クライアントが実装すべき CMO データである.
CMObject Error2 は
int32 CMO_ERROR2 | CMObject ob |
なる形で表現する. エラーの時に push する object であり, CMObject ob の 部分に詳細なエラー情報がはいる. ob はリストであり, TCP/IP によるストリーム型接続の場合, 最初の成分はエラーを起こした OX メッセージ(後述) のシリアル番号でないといけない. シリアル番号は Integer32 で表現する.
Remark: 歴史的な理由により, エラーオブジェクトの CMO タグは CMO_ERROR2 と名付けられている. 次の版の仕様書では CMO_ERROR に変更する予定である.
CMObject Null は
int32 CMO_NULL |
なる形で表現する.
32 bit integer n は CMObject としては Integer32 と呼ばれ,
int32 CMO_INT32 | int32 n |
なる形で表現する.
長さ n の バイト列 data は CMObject としては, Datum 型とよばれ
int32 CMO_DATUM | int32 n | byte data[0] | byte data[1] |
byte data[n-1] |
と表現する.
長さ n の 文字列 data は, CMObject としては, Cstring 型とよばれ
int32 CMO_STRING | int32 n | byte data[0] | byte data[1] |
byte data[n-1] |
と表現する. C 言語で普通用いられる, 文字列のおわりの 0 は文字列 に含めない.
CMObject Mathcap は
int32 CMO_MATHCAP | CMObject ob |
なる形で表現する. ob はリストであり少なくとも3つの要素をもつ. 0 番目の要素は, Integer32 で表した OpenXM protocol version number と, Cstring で表したシステム名, Server version, CPU type, その他の情報 のリストである. 1 番目の要素は, システム xxx が扱うことの可能な SM タグを, Integer32 で表現したものを集めたリストである. 3 番目の要素は, システム xxx があつかうことの可能な データ形式をあつめたリストである. 詳細は mathcap の節 5.1.2 で説明する.
長さ m のリストは
int32 CMO_LIST | int32 m | CMObject ob[0] | CMObject ob[] |
で表現する.