| version 1.6, 1999/12/22 11:29:15 |
version 1.15, 2000/11/21 07:59:08 |
|
|
| # Author: 小原功任 @ 金沢大学理学部計算科学教室 |
# Author: 小原功任 @ 金沢大学理学部計算科学教室 |
| # URI: http://omega.s.kanazawa-u.ac.jp/ohara/ |
# URI: http://omega.s.kanazawa-u.ac.jp/ohara/ |
| # $OpenXM: OpenXM/src/ox_toolkit/README,v 1.5 1999/12/15 09:24:46 ohara Exp $ |
# $OpenXM: OpenXM/src/ox_toolkit/README,v 1.14 2000/11/20 17:59:34 ohara Exp $ |
| |
|
| /*&ja ox_toolkit ユーザガイド |
/*&ja ox_toolkit ユーザガイド |
| |
|
|
|
| /*&en A user's guide for OpenXM C library. |
/*&en A user's guide for OpenXM C library. |
| |
|
| */ |
*/ |
| |
/* &ja いきさつ |
| |
このライブラリは ox_math および math2ox を開発するために設計された。 |
| |
ライブラリ自身には、 Mathematica に依存した部分はない。 |
| |
*/ |
| |
/* &en Introduction |
| |
|
| |
*/ |
| /*&ja |
/*&ja |
| libox.a を利用するには次のヘッダファイルをインクルードする必要があります。 |
libox.a を利用するには次のヘッダファイルをインクルードする必要があります。 |
| */ |
*/ |
| Line 18 In order to use libox.a, you need to include the follo |
|
| Line 25 In order to use libox.a, you need to include the follo |
|
| */ |
*/ |
| /*&common |
/*&common |
| |
|
| #include <oxtag.h> |
#include <ox_toolkit.h> |
| #include <ox.h> |
|
| #include <parse.h> |
|
| |
|
| */ |
*/ |
| /*&ja |
/*&ja |
| Line 35 In order to use libox.a, you need to include the follo |
|
| Line 40 In order to use libox.a, you need to include the follo |
|
| 1. Types |
1. Types |
| |
|
| 1.1 CMO (Common Math Object) |
1.1 CMO (Common Math Object) |
| The following structures are defined in ox.h: |
The following structures are defined in ox_toolkit.h: |
| */ |
*/ |
| /*&common |
/*&common |
| |
|
|
|
| |
|
| */ |
*/ |
| /*&en |
/*&en |
| The cmo above is abstract base class; |
The cmo above is abstract base class; you never make an object of cmo |
| you never make an object of cmo class. |
class. |
| |
|
| */ |
*/ |
| /*&ja |
/*&ja |
| Line 75 you never make an object of cmo class. |
|
| Line 80 you never make an object of cmo class. |
|
| */ |
*/ |
| /*&en |
/*&en |
| 1.2 OX objects |
1.2 OX objects |
| The following structures are defined in ox.h: |
The following structures are defined in ox_toolkit.h: |
| */ |
*/ |
| /*&common |
/*&common |
| |
|
| Line 101 The ox above is abstract base class. |
|
| Line 106 The ox above is abstract base class. |
|
| /*&en |
/*&en |
| 2. How to make CMObjects? |
2. How to make CMObjects? |
| |
|
| Use the following functions to generate an object. |
Use the following functions to generate an object. It returns a |
| It returns a pointer to the object. |
pointer to the object. */ /*&common |
| */ |
|
| /*&common |
|
| |
|
| new_cmo_null(); |
new_cmo_null(); |
| new_cmo_int32(int i); |
new_cmo_int32(int i); |
| Line 126 new_cmo_error2(cmo* ob); |
|
| Line 129 new_cmo_error2(cmo* ob); |
|
| |
|
| */ |
*/ |
| /*&ja |
/*&ja |
| 3. 高水準 API |
3. コネクション |
| |
|
| |
OXFILE は OpenXM での通信路を表現するクラスである。このクラスのオブジェ |
| |
クトを明示的には生成しないこと。必ずコンストラクタを利用しなければなら |
| |
ない。これはクライアントとサーバで接続時の手順が異なることに由来する。 |
| |
バイトオーダに関連した処理はこのクラスのメソッドで実現される。このクラ |
| |
スのメソッドとして次のものが用意されている。 |
| |
|
| |
3.1 コンストラクタ |
| |
|
| |
OXFILE *oxf_connect_active(char *hostname, short port); |
| |
|
| |
能動的に接続する場合のコンストラクタ。通常、サーバで利用する。 |
| |
|
| |
OXFILE *oxf_connect_passive(int listened); |
| |
|
| |
受動的に接続するためのコンストラクタ。 |
| |
内部で accept() を呼ぶので、listened には mysocketListen() の返した値が必要。 |
| |
|
| |
OXFILE *oxf_open(int fd); |
| |
|
| |
インスタンスを生成するだけで、接続は行わない。すでにオープンされたファ |
| |
イルディスクリプタを fd に指定する。計算サーバでの利用を想定。 |
| |
|
| |
3.2 認証に関連したメソッド |
| |
|
| |
int oxf_confirm_client(OXFILE *oxfp, char *passwd); |
| |
|
| |
クライアント側での認証を行う。返り値が1のときに成功、0のときに失敗。 |
| |
|
| |
int oxf_confirm_server(OXFILE *oxfp, char *passwd); |
| |
|
| |
サーバ側での認証を行う。常に成功する。 |
| |
|
| |
void oxf_determine_byteorder_client(OXFILE *oxfp); |
| |
void oxf_determine_byteorder_server(OXFILE *oxfp); |
| |
|
| |
oxfp の指す通信路でのバイトオーダを決定し、oxfp のインスタンスを書き換える。 |
| |
|
| |
void oxf_setopt(OXFILE *oxfp, int mode); |
| |
|
| |
oxfp の設定を行う。oxf_determine_byteorder_XXX() で用いられている。 |
| |
|
| |
3.3 その他のメソッド |
| |
|
| |
int oxf_read(void *buffer, size_t size, size_t num, OXFILE *oxfp); |
| |
int oxf_write(void *buffer, size_t size, size_t num, OXFILE *oxfp); |
| |
void oxf_flush(OXFILE *oxfp); |
| |
void oxf_close(OXFILE *oxfp); |
| |
|
| |
fread, fwrite, fflush, fclose に準拠。 |
| |
|
| |
*/ |
| |
/*&ja |
| |
4. 高水準 API(この記述は古いので使わないこと) |
| |
|
| 高水準 API は「OpenXM クライアント」から利用することを前提に設計されている。 |
高水準 API は「OpenXM クライアント」から利用することを前提に設計されている。 |
| |
|
| 3.1 通信の開始 |
4.1 通信の開始 |
| |
|
| 通信を開始する場合には、次の関数のいずれかを利用する。 |
通信を開始する場合には、次の関数のいずれかを利用する。 |
| */ |
*/ |
| /*&en |
/*&en |
| 3. High-level API |
4. High-level API |
| |
|
| High-level API is prepared to help an implementation of OpenXM clients. |
High-level API is prepared to help an implementation of OpenXM clients. |
| |
|
| 3.1 How to make connections to OpenXM servers? |
4.1 How to make connections to OpenXM servers? |
| |
|
| In order to open a connection to an OpenXM server, |
In order to open a connection to an OpenXM server, you need to call |
| you need to call ox_start() or to call ox_start_insecure_nonreverse(). |
ox_start() or to call ox_start_insecure_nonreverse(). |
| */ |
*/ |
| /*&common |
/*&common |
| |
|
| ox_file_t ox_start(char* host, char* prog1, char* prog2); |
OXFILE *ox_start(char* host, char* prog1, char* prog2); |
| ox_file_t ox_start_insecure_nonreverse(char* host, short portControl, short portStream); |
OXFILE *ox_start_insecure_nonreverse(char* host, short portControl, short portStream); |
| |
|
| */ |
*/ |
| /*&ja |
/*&ja |
| Line 167 portStream は計算サーバとの通信のためのポート番号であ� |
|
| Line 224 portStream は計算サーバとの通信のためのポート番号であ� |
|
| この識別子は高水準 API の各関数で利用される。 |
この識別子は高水準 API の各関数で利用される。 |
| |
|
| */ |
*/ |
| |
/*&en |
| |
The ox_start() function invoke an OpenXM server on its local machine |
| |
and open a connection to the server with "reverse" mode. The client |
| |
choose a port number of TCP/IP automatically. |
| |
|
| |
The ox_start_insecure_nonreverse() function open a connection to an |
| |
OpenXM server run on a remote host and you need to provide port numbers. |
| |
|
| |
*/ |
| /*&ja |
/*&ja |
| 3.2 通信の終了 |
4.2 通信の終了 |
| |
|
| 通信の終了のためには次の二つの関数が用意されている。 |
通信の終了のためには次の二つの関数が用意されている。 |
| |
|
| */ |
*/ |
| /*&en |
/*&en |
| 3.2 How to close connections to OpenXM servers? |
4.2 How to close connections to OpenXM servers? |
| |
|
| In order to close a connection to an OpenXM server, |
In order to close a connection to an OpenXM server, you need to call |
| you need to call ox_close() or to call ox_shutdown(). |
ox_close() or to call ox_shutdown(). |
| |
|
| */ |
*/ |
| /*&common |
/*&common |
| void ox_close(ox_file_t sv); |
void ox_close(OXFILE *sv); |
| void ox_shutdown(ox_file_t sv); |
void ox_shutdown(OXFILE *sv); |
| |
|
| */ |
*/ |
| /*&ja |
/*&ja |
| Line 190 void ox_shutdown(ox_file_t sv); |
|
| Line 256 void ox_shutdown(ox_file_t sv); |
|
| サーバを終了させる。第二の関数は計算サーバに SM_shutdown を送ることに |
サーバを終了させる。第二の関数は計算サーバに SM_shutdown を送ることに |
| よって、サーバを終了させる(予定)。 |
よって、サーバを終了させる(予定)。 |
| |
|
| /* |
*/ |
| /*&ja |
/*&ja |
| 3.3 SM コマンドの送信 |
4.3 SM コマンドの送信 |
| */ |
*/ |
| /*&en |
/*&en |
| 3.3 How to command to OpenXM stack machines? |
4.3 How to command to OpenXM stack machines? |
| */ |
*/ |
| /*&common |
/*&common |
| |
|
| void ox_push_cmd(ox_file_t sv, int sm_code); |
void ox_push_cmd(OXFILE *sv, int sm_code); |
| |
|
| */ |
*/ |
| /*&ja |
/*&ja |
| サーバにスタックマシンコマンドを送る。コマンドはコマンド番号で与える。 |
サーバにスタックマシンコマンドを送る。コマンドはコマンド番号で与える。 |
| |
|
| */ |
*/ |
| /*&en |
/*&en |
| ox_push_cmd() sends an operation code to an OpenXM stack machine. |
ox_push_cmd() sends an operation code to an OpenXM stack machine. |
| See oxtag.h. |
See OpenXM/include/ox_toolkit_tags.h for a list of operation codes. |
| |
|
| */ |
*/ |
| /*&ja |
/*&ja |
| |
4.4 CMO の送受信 |
| |
*/ |
| |
/*&en |
| |
4.4 How to receive a CMO? |
| |
*/ |
| |
/*&common |
| |
|
| 3.4 CMO の送受信 |
void ox_push_cmo(OXFILE *sv, cmo *c); |
| |
cmo* ox_pop_cmo(OXFILE *sv); |
| |
char* ox_popString(OXFILE *sv); |
| |
|
| void ox_push_cmo(ox_file_t sv, cmo *c); |
*/ |
| cmo* ox_pop_cmo(ox_file_t sv); |
/*&ja |
| char* ox_popString(ox_file_t sv); |
|
| |
|
| ox_push_cmo は cmo を送信、ox_pop_cmo は cmo を受信する。ox_popString |
ox_push_cmo は cmo を送信、ox_pop_cmo は cmo を受信する。ox_popString |
| は cmo を文字列形式に変換して受信するが、変換の結果はサーバによって異 |
は cmo を文字列形式に変換して受信するが、変換の結果はサーバによって異 |
| なる。 |
なる。 |
| |
|
| 3.5 スタック処理 |
*/ |
| |
/*&en |
| |
*/ |
| |
/*&ja |
| |
4.5 スタック処理 |
| |
*/ |
| |
/*&common |
| |
|
| int ox_pops(ox_file_t sv, int num); |
int ox_pops(OXFILE *sv, int num); |
| |
|
| |
*/ |
| |
/*&ja |
| スタック上の num 個のオブジェクトを廃棄する。 |
スタック上の num 個のオブジェクトを廃棄する。 |
| |
|
| 3.6 |
*/ |
| |
/*&ja |
| |
4.6 通信路のフラッシュ |
| |
*/ |
| |
/*&common |
| |
|
| int ox_flush(ox_file_t sv); |
int ox_flush(OXFILE *sv); |
| |
|
| |
*/ |
| |
/*&ja |
| 通信路を flush する(実際には何もしない)。 |
通信路を flush する(実際には何もしない)。 |
| |
|
| 3.7 |
*/ |
| |
/*&ja |
| |
4.7 通信の中断 |
| |
*/ |
| |
/*&common |
| |
|
| void ox_reset(ox_file_t sv); |
void ox_reset(OXFILE *sv); |
| |
|
| |
*/ |
| |
/*&ja |
| 計算を中断する。 |
計算を中断する。 |
| |
|
| 3.8 |
*/ |
| |
/*&ja |
| |
4.8 ローカル言語で書かれたコマンドの評価 |
| |
*/ |
| |
/*&common |
| |
|
| void ox_execute_string(ox_file_t sv, char* str); |
void ox_execute_string(OXFILE *sv, char* str); |
| |
|
| |
*/ |
| |
/*&ja |
| サーバのローカル言語で書かれた命令を評価し、結果をスタックに積む。 |
サーバのローカル言語で書かれた命令を評価し、結果をスタックに積む。 |
| |
|
| 3.9 |
*/ |
| |
/*&ja |
| |
4.9 関数呼び出し |
| |
*/ |
| |
/*&common |
| |
|
| int ox_cmo_rpc(ox_file_t sv, char *function, int argc, cmo *argv[]); |
int ox_cmo_rpc(OXFILE *sv, char *function, int argc, cmo *argv[]); |
| |
|
| |
*/ |
| |
/*&ja |
| function(argv[1], ...) を計算し、結果をスタックに積む。 |
function(argv[1], ...) を計算し、結果をスタックに積む。 |
| |
|
| 3.10 |
*/ |
| |
/*&ja |
| |
4.10 Mathcap の受信 |
| |
|
| cmo_mathcap* ox_mathcap(ox_file_t sv); |
*/ |
| |
/*&common |
| |
cmo_mathcap* ox_mathcap(OXFILE *sv); |
| |
|
| |
*/ |
| |
/*&ja |
| Mathcap を受け取る。現在は Mathcap の処理はユーザプログラムに任されている。 |
Mathcap を受け取る。現在は Mathcap の処理はユーザプログラムに任されている。 |
| いずれこの関数は廃止される予定。 |
いずれこの関数は廃止される予定。 |
| */ |
*/ |
| /*&ja |
/*&ja |
| |
|
| 4. 低水準 API |
5. 低水準 API |
| |
|
| 低水準 API はファイルディスクリプタを直接利用する。 |
低水準 API はファイルディスクリプタを直接利用する。 |
| |
|
| 4.1 通信に使われるバイトオーダの決定 |
5.1 通信に使われるバイトオーダの決定 |
| */ |
*/ |
| /*&en |
/*&en |
| |
|
| 4. Low-level API. |
5. Low-level API. |
| |
|
| In this section, ``fd'' is an identifier of an OpenXM connection. |
In this section, ``fd'' is an identifier of an OpenXM connection. |
| |
|
| 4.1 How to decide a byte order of integers? |
5.1 How to decide a byte order of integers? |
| |
|
| */ |
*/ |
| /*&common |
/*&common |
| |
|
| int decideByteOrderServer(int fd, int order); |
int decideByteOrderServer(int fd, int order); |
| |
|
| */ |
*/ |
| Line 293 as an expression for integers. |
|
| Line 405 as an expression for integers. |
|
| */ |
*/ |
| /*&common |
/*&common |
| |
|
| 4.2 |
5.2 |
| |
|
| |
*/ |
| |
/*&common |
| int send_int32(int fd, int integer); |
int send_int32(int fd, int integer); |
| int receive_int32(int fd); |
int receive_int32(int fd); |
| |
|
| Line 309 receive_int32() reads 32bits integer from an OpenXM co |
|
| Line 423 receive_int32() reads 32bits integer from an OpenXM co |
|
| */ |
*/ |
| /*&common |
/*&common |
| |
|
| 4.3 |
5.3 |
| |
|
| |
*/ |
| |
/*&common |
| int send_cmo(int fd, cmo* m); |
int send_cmo(int fd, cmo* m); |
| cmo* receive_cmo(int fd); |
cmo* receive_cmo(int fd); |
| |
|
| Line 325 receive_cmo() reads an CMObject from an OpenXM connect |
|
| Line 441 receive_cmo() reads an CMObject from an OpenXM connect |
|
| */ |
*/ |
| /*&common |
/*&common |
| |
|
| 4.4 |
5.4 |
| |
|
| |
*/ |
| |
/*&common |
| int next_serial(); |
int next_serial(); |
| |
|
| */ |
*/ |
| Line 338 next_serial() generates a serial number for ox message |
|
| Line 456 next_serial() generates a serial number for ox message |
|
| */ |
*/ |
| /*&common |
/*&common |
| |
|
| 4.5 |
5.5 |
| |
|
| |
*/ |
| |
/*&common |
| int send_ox_tag(int fd, int tag); |
int send_ox_tag(int fd, int tag); |
| int receive_ox_tag(int fd); |
int receive_ox_tag(int fd); |
| |
|
| Line 356 receive_ox_tag() reads a tag and a serial number of an |
|
| Line 476 receive_ox_tag() reads a tag and a serial number of an |
|
| */ |
*/ |
| /*&common |
/*&common |
| |
|
| 4.6 |
5.6 Sending OX messages. |
| |
|
| |
*/ |
| |
/*&common |
| int send_ox(int fd, ox* m); |
int send_ox(int fd, ox* m); |
| int send_ox_cmo(int fd, cmo* m); |
int send_ox_cmo(int fd, cmo* m); |
| void send_ox_command(int fd, int sm_command); |
void send_ox_command(int fd, int sm_command); |
| |
|
| */ |
*/ |
| /*&ja |
/*&ja |
| ox メッセージを送信する。 |
OX メッセージを送信する。 |
| */ |
*/ |
| |
|
| /*&ja |
/*&ja |
| |
|
| 5. OX expression パーサ |
6. OX expression パーサ |
| |
|
| OpenXM C library には 文字列表現された |
*/ |
| OX expression および CMO expression から、 |
/*&en |
| ox 構造体または cmo 構造体を生成するためのパーサが付属している。 |
|
| |
|
| ここではこのパーサについて説明する。 |
6. Parser for OX expressions |
| |
|
| |
*/ |
| |
/*&ja |
| |
OpenXM C library には 文字列表現された OX expression および CMO |
| |
expression から、ox 構造体または cmo 構造体を生成するためのパーサが付 |
| |
属している。ここではこのパーサについて説明する。 |
| |
*/ |
| |
/*&en |
| |
We have a parser which generate an OX object or a CMO from a string |
| |
encoded OX/CMO expression. In this section, we explain the parser. |
| |
*/ |
| |
/*&en |
| |
|
| |
6.1 Setting an option |
| |
*/ |
| |
/*&ja |
| |
|
| |
6.1 オプション |
| |
*/ |
| |
/*&common |
| |
|
| int setflag_parse(int flag); |
int setflag_parse(int flag); |
| |
|
| |
*/ |
| |
/*&ja |
| setflag_parse(PFLAG_ADDREV) によって、CMO の短縮表現を許す。 |
setflag_parse(PFLAG_ADDREV) によって、CMO の短縮表現を許す。 |
| |
*/ |
| |
/*&en |
| |
We set an option for the parser. If we call |
| |
setflag_parse(PFLAG_ADDREV), then the parser admits external |
| |
expressios. |
| |
*/ |
| |
/*&en |
| |
|
| |
6.2 Initializing |
| |
*/ |
| |
/*&ja |
| |
|
| |
6.2 初期化 |
| |
*/ |
| |
/*&common |
| |
|
| int init_parser(char *str); |
int init_parser(char *str); |
| |
|
| |
*/ |
| |
/*&ja |
| パーサが処理すべき文字列をセットする。 |
パーサが処理すべき文字列をセットする。 |
| |
*/ |
| |
/*&en |
| |
We give the parser an OX/CMO expression, that is, a Lisp style string. |
| |
*/ |
| |
/*&en |
| |
|
| |
6.3 Getting an object |
| |
*/ |
| |
/*&ja |
| |
|
| |
6.3 結果を得る |
| |
*/ |
| |
/*&common |
| |
|
| cmo *parse(); |
cmo *parse(); |
| |
|
| |
*/ |
| |
/*&ja |
| Lisp 表現による OX expression, CMO expression の構文解析器。あらかじめ |
Lisp 表現による OX expression, CMO expression の構文解析器。あらかじめ |
| 設定された文字列を解析して ox 構造体、あるいは cmo 構造体を生成する。 |
設定された文字列を解析して ox 構造体、あるいは cmo 構造体を生成する。 |
| */ |
*/ |
| |
/*&en |
| |
The parser returns an OX/CMO object. If the given string is illegal, |
| |
then the parser returns NULL. |
| |
*/ |
| /*&ja |
/*&ja |
| |
|
| 7. 付属プログラムについて |
7. Mathcap クラス |
| |
データベース |
| |
|
| |
7.1. 概要 |
| |
|
| |
Mathcap クラスは OpenXM アプリケーションの Mathcap を表現するクラスで |
| |
ある。これは cmo_mathcap とは別物である。Mathcap クラスのインスタンス |
| |
は各通信路ごとに生成され、OXFILE クラスのメンバになる。このことは、複 |
| |
数の計算プロセスと同時に通信するクライアントを作成するためである。さて、 |
| |
Mathcap クラスは、静的メンバももつ。これら静的メンバは、通信路から独立 |
| |
した、 OpenXM アプリケーション自体の情報を保持するために用いられる。また。 |
| |
インスタンスの生成時にもその情報は利用される。 |
| |
|
| |
7.2. メソッド |
| |
|
| |
Mathcap クラスは mathcap.c で実装されている。ユーザは次の関数を介して、 |
| |
Mathcap クラスにアクセスすることができる。 |
| |
|
| |
void mathcap_init(int version, char *id, char *sysname, int cmo[], sm_cmd[]); |
| |
|
| |
静的メンバを初期化する。Mathcap クラスのインスタンスを生成するまえに、 |
| |
したがって、クライアントおよびサーバはプログラムを開始するときに、この |
| |
関数を呼ばなければならない。cmo は、そのアプリケーションの利用する CMO |
| |
のタグのリストであって、0 で終端しなければならない。NULL のときには既 |
| |
定値が用いられる。sm_cmd も同様。 |
| |
|
| |
cmo_mathcap *mathcap_get(mathcap *this); |
| |
|
| |
Mathcap クラスのインスタンスを cmo_mathcap クラスのインスタンスに変換する。 |
| |
|
| |
mathcap *mathcap_update(mathcap *this, cmo_mathcap *mc); |
| |
|
| |
通信相手から入手した cmo_mathcap オブジェクトを用いて、Mathcap クラスの |
| |
インスタンスを更新する。 |
| |
|
| |
*/ |
| |
/*&ja |
| |
|
| |
8. 付属プログラムについて |
| |
|
| |
*/ |
| |
/*&en |
| |
|
| |
8. Sample programs. |
| |
|
| |
*/ |
| |
/*&common |
| testclient |
testclient |
| |
|
| |
*/ |
| |
/*&ja |
| テスト用の小さな OpenXM クライアント。OX expression を入力して送信する |
テスト用の小さな OpenXM クライアント。OX expression を入力して送信する |
| ことのみ可能。SM_popCMO, SM_popString を含むメッセージを送信した場合に |
ことのみ可能。SM_popCMO, SM_popString を含むメッセージを送信した場合に |
| は、サーバから送られてくるメッセージを表示する。 |
は、サーバから送られてくるメッセージを表示する。 |
| |
|
| |
*/ |
| |
/*&en |
| |
This is a small OpenXM client. We send an OX message by inputting an |
| |
OX expression and display data messages gotten from a server. |
| |
|
| |
*/ |
| |
/*&common |
| bconv |
bconv |
| |
|
| |
*/ |
| |
/*&ja |
| バイトコードエンコーダ。OX expression あるいは CMO expression を入力す |
バイトコードエンコーダ。OX expression あるいは CMO expression を入力す |
| ると、対応するバイト列を表示する。 |
ると、対応するバイト列を表示する。 |
| |
|
| |
*/ |
| |
/*&en |
| |
A byte code encoder. It shows a byte stream which corresponds to an |
| |
OX expression. |
| |
|
| |
*/ |
| |
/*&common |
| ox_Xsample |
ox_Xsample |
| |
|
| |
*/ |
| |
/*&ja |
| GUI 表示する OpenXM サーバのサンプル。 |
GUI 表示する OpenXM サーバのサンプル。 |
| |
|
| */ |
*/ |
| |
/*&ja |
| |
9. 付録 |
| |
|
| |
9.1 ox.c における関数の命名規則 |
| |
|
| |
(1) receive_cmo 関数はCMOタグとデータ本体を受信する. この関数は CMOタ |
| |
グの値が事前に分からないときに使用する. 返り値として、cmo へのポインタ |
| |
を返す. |
| |
(2) receive_cmo_X 関数は, CMOタグを親の関数で受信してから呼び出される |
| |
関数で、データ本体のみを受信し、cmo_X へのポインタを返す. しかも、関 |
| |
数内部で new_cmo_X 関数を呼び出す. |
| |
(3) send_cmo 関数はCMOタグとデータ本体を送信する. |
| |
(4) send_cmo_X 関数はCMOタグを親の関数で送信してから呼び出される関数で、 |
| |
データ本体のみを送信する. |
| |
(5) ただし receive_ox_tag を除いて, receive_ox_X 関数は作らない. |
| |
receive_cmo を利用する. |
| |
(6) send_ox_X 関数は OX タグを含めて送信する. |
| |
(7) ox_X 関数は一連の送受信を含むより抽象的な操作を表現する. ox_X 関 |
| |
数は、第一引数として、ox_file_t型の変数 sv をとる. |
| |
(8) Y_cmo 関数と Y_cmo_X 関数の関係は次の通り: |
| |
まず Y_cmo 関数で cmo のタグを処理し、タグを除いた残りの部分をY_cmo_X |
| |
関数が処理する. cmo の内部に cmo_Z へのポインタがあるときには、その種 |
| |
類によらずに Y_cmo 関数を呼び出す. |
| |
|
| |
*/ |
| |
|