[BACK]Return to README CVS log [TXT][DIR] Up to [local] / OpenXM / src / ox_toolkit

Annotation of OpenXM/src/ox_toolkit/README, Revision 1.15

1.1       ohara       1: # Author: 小原功任 @ 金沢大学理学部計算科学教室
                      2: # URI:    http://omega.s.kanazawa-u.ac.jp/ohara/
1.15    ! ohara       3: # $OpenXM: OpenXM/src/ox_toolkit/README,v 1.14 2000/11/20 17:59:34 ohara Exp $
1.1       ohara       4:
1.4       ohara       5: /*&ja ox_toolkit ユーザガイド
1.1       ohara       6:
1.4       ohara       7: */
1.6       ohara       8: /*&en A user's guide for OpenXM C library.
1.4       ohara       9:
                     10: */
1.7       ohara      11: /* &ja いきさつ
                     12: このライブラリは ox_math および math2ox を開発するために設計された。
                     13: ライブラリ自身には、 Mathematica に依存した部分はない。
                     14: */
                     15: /* &en Introduction
                     16:
                     17: */
1.4       ohara      18: /*&ja
1.1       ohara      19: libox.a を利用するには次のヘッダファイルをインクルードする必要があります。
1.4       ohara      20: */
                     21: /*&en
                     22: How to use OpenXM C library?
                     23:
1.6       ohara      24: In order to use libox.a, you need to include the following header files:
1.4       ohara      25: */
                     26: /*&common
1.1       ohara      27:
1.10      ohara      28: #include <ox_toolkit.h>
1.1       ohara      29:
1.4       ohara      30: */
                     31: /*&ja
1.2       ohara      32: 1. データ型
1.1       ohara      33:
1.2       ohara      34: このツールキットで定義されている各構造体の生成については次節を参照せよ。
                     35:
                     36: 1.1 CMO (Common Math Object)
1.1       ohara      37: 次のデータ型(構造体)が用意されている。
1.4       ohara      38: */
                     39: /*&en
                     40: 1. Types
                     41:
                     42: 1.1 CMO (Common Math Object)
1.10      ohara      43: The following structures are defined in ox_toolkit.h:
1.4       ohara      44: */
                     45: /*&common
1.1       ohara      46:
                     47: cmo
                     48: cmo_null
                     49: cmo_int32
                     50: cmo_datum
                     51: cmo_string
                     52: cmo_mathcap
                     53: cmo_list
                     54: cmo_monomial32
                     55: cmo_zz
                     56: cmo_qq
                     57: cmo_zero
                     58: cmo_dms_generic
                     59: cmo_ring_by_name
                     60: cmo_distributed_polynomial
                     61: cmo_indeterminate
                     62: cmo_error2
                     63:
1.4       ohara      64: */
                     65: /*&ja
1.1       ohara      66: このうち cmo 型はいわば抽象基底クラスに相当するものであり、この型のオ
1.2       ohara      67: ブジェクトを明示的には生成されない。このクラスはポインタ型のキャストの
                     68: ために用意されている。また cmo_distributed_polynomial は cmo_list の派
                     69: 生クラスであると思ってもよい。
                     70:
1.4       ohara      71: */
                     72: /*&en
1.7       ohara      73: The cmo above is abstract base class; you never make an object of cmo
                     74: class.
1.4       ohara      75:
                     76: */
                     77: /*&ja
1.2       ohara      78: 1.2 OX オブジェクト
                     79: 次のデータ型(構造体)が用意されている。
1.4       ohara      80: */
                     81: /*&en
                     82: 1.2 OX objects
1.10      ohara      83: The following structures are defined in ox_toolkit.h:
1.4       ohara      84: */
                     85: /*&common
1.2       ohara      86:
                     87: ox
                     88: ox_command
                     89: ox_data
                     90:
1.4       ohara      91: */
                     92: /*&ja
1.2       ohara      93: このうち、ox 型は抽象基底クラスなので、オブジェクトをつくってはいけない。
                     94:
1.4       ohara      95: */
                     96: /*&en
                     97: The ox above is abstract base class.
                     98:
                     99: */
                    100: /*&ja
1.2       ohara     101: 2. オブジェクトの生成
                    102:
                    103: オブジェクトを生成するために、new 関数群が用意されている。それぞれの関
                    104: 数はオブジェクトを生成して、そのオブジェクトへのポインタを返す。
1.4       ohara     105: */
                    106: /*&en
                    107: 2. How to make CMObjects?
                    108:
1.7       ohara     109: Use the following functions to generate an object.  It returns a
                    110: pointer to the object.  */ /*&common
1.1       ohara     111:
                    112: new_cmo_null();
                    113: new_cmo_int32(int i);
                    114: new_cmo_string(char* s);
                    115: new_cmo_mathcap(cmo* ob);
                    116: new_cmo_list();
                    117: new_cmo_monomial32();
                    118: new_cmo_monomial32_size(int size);
                    119: new_cmo_zz();
                    120: new_cmo_zz_size(int size);
                    121: new_cmo_zz_set_si(int integer);
                    122: new_cmo_zz_noinit();
                    123: new_cmo_zero();
                    124: new_cmo_distributed_polynomial();
                    125: new_cmo_dms_generic();
                    126: new_cmo_ring_by_name(cmo* ob);
                    127: new_cmo_indeterminate(cmo* ob);
                    128: new_cmo_error2(cmo* ob);
                    129:
1.4       ohara     130: */
                    131: /*&ja
1.12      ohara     132: 3. コネクション
1.11      ohara     133:
                    134: OXFILE は OpenXM での通信路を表現するクラスである。このクラスのオブジェ
                    135: クトを明示的には生成しないこと。必ずコンストラクタを利用しなければなら
                    136: ない。これはクライアントとサーバで接続時の手順が異なることに由来する。
                    137: バイトオーダに関連した処理はこのクラスのメソッドで実現される。このクラ
                    138: スのメソッドとして次のものが用意されている。
                    139:
1.12      ohara     140: 3.1 コンストラクタ
                    141:
1.11      ohara     142: OXFILE *oxf_connect_active(char *hostname, short port);
1.12      ohara     143:
                    144: 能動的に接続する場合のコンストラクタ。通常、サーバで利用する。
                    145:
1.11      ohara     146: OXFILE *oxf_connect_passive(int listened);
1.12      ohara     147:
                    148: 受動的に接続するためのコンストラクタ。
                    149: 内部で accept() を呼ぶので、listened には mysocketListen() の返した値が必要。
                    150:
1.11      ohara     151: OXFILE *oxf_open(int fd);
                    152:
1.12      ohara     153: インスタンスを生成するだけで、接続は行わない。すでにオープンされたファ
                    154: イルディスクリプタを fd に指定する。計算サーバでの利用を想定。
                    155:
                    156: 3.2 認証に関連したメソッド
                    157:
1.11      ohara     158: int  oxf_confirm_client(OXFILE *oxfp, char *passwd);
1.12      ohara     159:
                    160: クライアント側での認証を行う。返り値が1のときに成功、0のときに失敗。
                    161:
1.11      ohara     162: int  oxf_confirm_server(OXFILE *oxfp, char *passwd);
1.12      ohara     163:
                    164: サーバ側での認証を行う。常に成功する。
                    165:
1.11      ohara     166: void oxf_determine_byteorder_client(OXFILE *oxfp);
                    167: void oxf_determine_byteorder_server(OXFILE *oxfp);
1.12      ohara     168:
                    169: oxfp の指す通信路でのバイトオーダを決定し、oxfp のインスタンスを書き換える。
                    170:
1.11      ohara     171: void oxf_setopt(OXFILE *oxfp, int mode);
                    172:
1.12      ohara     173: oxfp の設定を行う。oxf_determine_byteorder_XXX() で用いられている。
                    174:
                    175: 3.3 その他のメソッド
                    176:
1.11      ohara     177: int oxf_read(void *buffer, size_t size, size_t num, OXFILE *oxfp);
                    178: int oxf_write(void *buffer, size_t size, size_t num, OXFILE *oxfp);
                    179: void oxf_flush(OXFILE *oxfp);
                    180: void oxf_close(OXFILE *oxfp);
                    181:
1.12      ohara     182: fread, fwrite, fflush, fclose に準拠。
                    183:
1.11      ohara     184: */
                    185: /*&ja
1.12      ohara     186: 4. 高水準 API(この記述は古いので使わないこと)
1.2       ohara     187:
                    188: 高水準 API は「OpenXM クライアント」から利用することを前提に設計されている。
                    189:
1.12      ohara     190: 4.1 通信の開始
1.2       ohara     191:
                    192: 通信を開始する場合には、次の関数のいずれかを利用する。
1.4       ohara     193: */
                    194: /*&en
1.12      ohara     195: 4. High-level API
1.4       ohara     196:
1.6       ohara     197: High-level API is prepared to help an implementation of OpenXM clients.
1.4       ohara     198:
1.12      ohara     199: 4.1 How to make connections to OpenXM servers?
1.4       ohara     200:
1.7       ohara     201: In order to open a connection to an OpenXM server, you need to call
                    202: ox_start() or to call ox_start_insecure_nonreverse().
1.4       ohara     203: */
                    204: /*&common
1.2       ohara     205:
1.11      ohara     206: OXFILE *ox_start(char* host, char* prog1, char* prog2);
                    207: OXFILE *ox_start_insecure_nonreverse(char* host, short portControl, short portStream);
1.2       ohara     208:
1.4       ohara     209: */
                    210: /*&ja
1.2       ohara     211: 第一の関数は、ローカルマシン上に OpenXM サーバを起動し、そのサーバとの
                    212: 間に"reverse モード"で通信路を開設する。通信に使われるポート番号は自動
                    213: 的に生成される。host はローカルマシンのホスト名(あるいは "localhost")、
                    214: prog1 はコントロールサーバの実行ファイル名、
                    215: prog2 は計算サーバの実行ファイル名でなければならない。
                    216:
                    217: 第二の関数は、リモートマシン上に既に起動されている OpenXM サーバとの間に
                    218: 通信路を開設する。通信に使われるポート番号は明示的に与えなければならない。
                    219: host はリモートマシンのホスト名、
                    220: portControl はコントロールサーバとの通信のためのポート番号、
                    221: portStream は計算サーバとの通信のためのポート番号である。
                    222:
                    223: それぞれの関数はサーバ(正確には二つのサーバの組)の識別子を返す。
                    224: この識別子は高水準 API の各関数で利用される。
                    225:
1.4       ohara     226: */
1.7       ohara     227: /*&en
                    228: The ox_start() function invoke an OpenXM server on its local machine
                    229: and open a connection to the server with "reverse" mode.  The client
                    230: choose a port number of TCP/IP automatically.
                    231:
                    232: The ox_start_insecure_nonreverse() function open a connection to an
                    233: OpenXM server run on a remote host and you need to provide port numbers.
                    234:
                    235: */
1.4       ohara     236: /*&ja
1.12      ohara     237: 4.2 通信の終了
1.2       ohara     238:
                    239: 通信の終了のためには次の二つの関数が用意されている。
                    240:
1.4       ohara     241: */
                    242: /*&en
1.12      ohara     243: 4.2 How to close connections to OpenXM servers?
1.4       ohara     244:
1.7       ohara     245: In order to close a connection to an OpenXM server, you need to call
                    246: ox_close() or to call ox_shutdown().
1.4       ohara     247:
                    248: */
                    249: /*&common
1.11      ohara     250: void ox_close(OXFILE *sv);
                    251: void ox_shutdown(OXFILE *sv);
1.2       ohara     252:
1.4       ohara     253: */
                    254: /*&ja
1.2       ohara     255: 第一の関数はコントロールサーバに SM_control_kill を送ることによって、
                    256: サーバを終了させる。第二の関数は計算サーバに SM_shutdown を送ることに
                    257: よって、サーバを終了させる(予定)。
                    258:
1.7       ohara     259: */
1.4       ohara     260: /*&ja
1.12      ohara     261: 4.3 SM コマンドの送信
1.4       ohara     262: */
                    263: /*&en
1.12      ohara     264: 4.3 How to command to OpenXM stack machines?
1.4       ohara     265: */
                    266: /*&common
1.5       ohara     267:
1.11      ohara     268: void  ox_push_cmd(OXFILE *sv, int sm_code);
1.2       ohara     269:
1.4       ohara     270: */
                    271: /*&ja
1.2       ohara     272: サーバにスタックマシンコマンドを送る。コマンドはコマンド番号で与える。
1.7       ohara     273:
1.4       ohara     274: */
                    275: /*&en
1.5       ohara     276: ox_push_cmd() sends an operation code to an OpenXM stack machine.
1.10      ohara     277: See OpenXM/include/ox_toolkit_tags.h for a list of operation codes.
1.7       ohara     278:
1.4       ohara     279: */
                    280: /*&ja
1.12      ohara     281: 4.4 CMO の送受信
1.7       ohara     282: */
                    283: /*&en
1.12      ohara     284: 4.4 How to receive a CMO?
1.7       ohara     285: */
                    286: /*&common
1.2       ohara     287:
1.11      ohara     288: void  ox_push_cmo(OXFILE *sv, cmo *c);
                    289: cmo*  ox_pop_cmo(OXFILE *sv);
                    290: char* ox_popString(OXFILE *sv);
1.2       ohara     291:
1.7       ohara     292: */
                    293: /*&ja
1.2       ohara     294: ox_push_cmo は cmo を送信、ox_pop_cmo は cmo を受信する。ox_popString
                    295: は cmo を文字列形式に変換して受信するが、変換の結果はサーバによって異
                    296: なる。
                    297:
1.7       ohara     298: */
                    299: /*&en
                    300: */
                    301: /*&ja
1.12      ohara     302: 4.5 スタック処理
1.7       ohara     303: */
                    304: /*&common
1.2       ohara     305:
1.11      ohara     306: int ox_pops(OXFILE *sv, int num);
1.2       ohara     307:
1.7       ohara     308: */
                    309: /*&ja
1.2       ohara     310: スタック上の num 個のオブジェクトを廃棄する。
                    311:
1.7       ohara     312: */
                    313: /*&ja
1.12      ohara     314: 4.6 通信路のフラッシュ
1.7       ohara     315: */
                    316: /*&common
1.2       ohara     317:
1.11      ohara     318: int ox_flush(OXFILE *sv);
1.2       ohara     319:
1.7       ohara     320: */
                    321: /*&ja
1.2       ohara     322: 通信路を flush する(実際には何もしない)。
                    323:
1.7       ohara     324: */
                    325: /*&ja
1.12      ohara     326: 4.7 通信の中断
1.7       ohara     327: */
                    328: /*&common
1.2       ohara     329:
1.11      ohara     330: void ox_reset(OXFILE *sv);
1.2       ohara     331:
1.7       ohara     332: */
                    333: /*&ja
1.2       ohara     334: 計算を中断する。
                    335:
1.7       ohara     336: */
                    337: /*&ja
1.12      ohara     338: 4.8 ローカル言語で書かれたコマンドの評価
1.7       ohara     339: */
                    340: /*&common
1.2       ohara     341:
1.11      ohara     342: void ox_execute_string(OXFILE *sv, char* str);
1.2       ohara     343:
1.7       ohara     344: */
                    345: /*&ja
1.2       ohara     346: サーバのローカル言語で書かれた命令を評価し、結果をスタックに積む。
                    347:
1.7       ohara     348: */
                    349: /*&ja
1.12      ohara     350: 4.9 関数呼び出し
1.7       ohara     351: */
                    352: /*&common
1.2       ohara     353:
1.11      ohara     354: int ox_cmo_rpc(OXFILE *sv, char *function, int argc, cmo *argv[]);
1.2       ohara     355:
1.7       ohara     356: */
                    357: /*&ja
1.2       ohara     358: function(argv[1], ...) を計算し、結果をスタックに積む。
                    359:
1.7       ohara     360: */
                    361: /*&ja
1.12      ohara     362: 4.10 Mathcap の受信
1.2       ohara     363:
1.7       ohara     364: */
                    365: /*&common
1.11      ohara     366: cmo_mathcap* ox_mathcap(OXFILE *sv);
1.2       ohara     367:
1.7       ohara     368: */
                    369: /*&ja
1.2       ohara     370: Mathcap を受け取る。現在は Mathcap の処理はユーザプログラムに任されている。
                    371: いずれこの関数は廃止される予定。
1.4       ohara     372: */
                    373: /*&ja
1.5       ohara     374:
1.12      ohara     375: 5. 低水準 API
1.1       ohara     376:
1.3       ohara     377: 低水準 API はファイルディスクリプタを直接利用する。
1.1       ohara     378:
1.12      ohara     379: 5.1 通信に使われるバイトオーダの決定
1.4       ohara     380: */
                    381: /*&en
1.5       ohara     382:
1.12      ohara     383: 5. Low-level API.
1.4       ohara     384:
1.5       ohara     385: In this section, ``fd'' is an identifier of an OpenXM connection.
                    386:
1.12      ohara     387: 5.1 How to decide a byte order of integers?
1.7       ohara     388:
1.4       ohara     389: */
                    390: /*&common
1.3       ohara     391: int decideByteOrderServer(int fd, int order);
                    392:
1.4       ohara     393: */
                    394: /*&ja
1.3       ohara     395: このツールキットは、サーバが開始されるときにはすでに通信路が設定されて
                    396: いるが、その通信路に用いるバイトオーダの決定は行われていないと仮定して
                    397: いる。詳しくは、高山-野呂, "OpenXM の設計と実装" を参照せよ。
                    398:
                    399: (注意) クライアント側でのバイトオーダの設定は、高水準 API で自動的に行われる。
1.5       ohara     400: */
                    401: /*&en
1.6       ohara     402: You need to call it when your OpenXM server is initialized.
                    403: This function always choose the network byte order
                    404: as an expression for integers.
1.4       ohara     405: */
                    406: /*&common
1.5       ohara     407:
1.12      ohara     408: 5.2
1.3       ohara     409:
1.7       ohara     410: */
                    411: /*&common
1.3       ohara     412: int send_int32(int fd, int integer);
1.5       ohara     413: int receive_int32(int fd);
1.3       ohara     414:
1.4       ohara     415: */
                    416: /*&ja
1.3       ohara     417: fd に 32bit 整数を書き込む。
1.5       ohara     418: fd から 32bit 整数を読み込む。
                    419: */
                    420: /*&en
                    421: send_int32() writes 32bits integer to an OpenXM connection.
                    422: receive_int32() reads 32bits integer from an OpenXM connection.
1.4       ohara     423: */
                    424: /*&common
1.3       ohara     425:
1.12      ohara     426: 5.3
1.3       ohara     427:
1.7       ohara     428: */
                    429: /*&common
1.3       ohara     430: int  send_cmo(int fd, cmo* m);
1.5       ohara     431: cmo* receive_cmo(int fd);
1.3       ohara     432:
1.4       ohara     433: */
                    434: /*&ja
1.3       ohara     435: fd に cmo を書き込む。
1.5       ohara     436: fd から cmo を読み込む。
                    437: */
                    438: /*&en
                    439: send_cmo() writes an CMObject to an OpenXM connection.
                    440: receive_cmo() reads an CMObject from an OpenXM connection.
1.4       ohara     441: */
                    442: /*&common
1.3       ohara     443:
1.12      ohara     444: 5.4
1.3       ohara     445:
1.7       ohara     446: */
                    447: /*&common
1.3       ohara     448: int next_serial();
                    449:
1.5       ohara     450: */
                    451: /*&ja
1.3       ohara     452: シリアルナンバを生成する。
1.5       ohara     453: */
                    454: /*&en
1.6       ohara     455: next_serial() generates a serial number for ox message.
1.5       ohara     456: */
                    457: /*&common
1.3       ohara     458:
1.12      ohara     459: 5.5
1.3       ohara     460:
1.7       ohara     461: */
                    462: /*&common
1.3       ohara     463: int  send_ox_tag(int fd, int tag);
                    464: int  receive_ox_tag(int fd);
                    465:
1.5       ohara     466: */
                    467: /*&ja
                    468: fd に OX メッセージのヘッダ(tag+serial#)を書き込む。シリアル番号は
                    469: 自動的に生成される。
                    470: fd から OX メッセージのヘッダ(tag+serial#)を読み込む。
                    471: */
                    472: /*&en
1.6       ohara     473: send_ox_tag() writes a tag and an automatically generated serial number
1.5       ohara     474: of an ox message to an OpenXM conection.
1.6       ohara     475: receive_ox_tag() reads a tag and a serial number of an ox message.
1.5       ohara     476: */
                    477: /*&common
1.3       ohara     478:
1.12      ohara     479: 5.6 Sending OX messages.
1.3       ohara     480:
1.7       ohara     481: */
                    482: /*&common
1.3       ohara     483: int  send_ox(int fd, ox* m);
                    484: int  send_ox_cmo(int fd, cmo* m);
                    485: void send_ox_command(int fd, int sm_command);
                    486:
1.5       ohara     487: */
                    488: /*&ja
1.9       ohara     489: OX メッセージを送信する。
1.6       ohara     490: */
                    491:
                    492: /*&ja
                    493:
1.12      ohara     494: 6. OX expression パーサ
1.6       ohara     495:
1.7       ohara     496: */
1.9       ohara     497: /*&en
                    498:
1.12      ohara     499: 6. Parser for OX expressions
1.9       ohara     500:
                    501: */
1.7       ohara     502: /*&ja
1.9       ohara     503: OpenXM C library には 文字列表現された OX expression および CMO
                    504: expression から、ox 構造体または cmo 構造体を生成するためのパーサが付
                    505: 属している。ここではこのパーサについて説明する。
                    506: */
                    507: /*&en
                    508: We have a parser which generate an OX object or a CMO from a string
                    509: encoded OX/CMO expression.  In this section, we explain the parser.
                    510: */
                    511: /*&en
1.6       ohara     512:
1.12      ohara     513: 6.1 Setting an option
1.9       ohara     514: */
                    515: /*&ja
1.6       ohara     516:
1.12      ohara     517: 6.1 オプション
1.7       ohara     518: */
                    519: /*&common
1.9       ohara     520:
1.6       ohara     521: int setflag_parse(int flag);
                    522:
1.7       ohara     523: */
                    524: /*&ja
1.6       ohara     525: setflag_parse(PFLAG_ADDREV) によって、CMO の短縮表現を許す。
1.9       ohara     526: */
                    527: /*&en
                    528: We set an option for the parser.  If we call
                    529: setflag_parse(PFLAG_ADDREV), then the parser admits external
                    530: expressios.
                    531: */
                    532: /*&en
1.6       ohara     533:
1.12      ohara     534: 6.2 Initializing
1.9       ohara     535: */
                    536: /*&ja
                    537:
1.12      ohara     538: 6.2 初期化
1.7       ohara     539: */
                    540: /*&common
1.9       ohara     541:
1.6       ohara     542: int init_parser(char *str);
                    543:
1.7       ohara     544: */
                    545: /*&ja
1.6       ohara     546: パーサが処理すべき文字列をセットする。
1.9       ohara     547: */
                    548: /*&en
                    549: We give the parser an OX/CMO expression, that is, a Lisp style string.
                    550: */
                    551: /*&en
1.6       ohara     552:
1.12      ohara     553: 6.3 Getting an object
1.9       ohara     554: */
                    555: /*&ja
                    556:
1.12      ohara     557: 6.3 結果を得る
1.7       ohara     558: */
                    559: /*&common
1.9       ohara     560:
1.6       ohara     561: cmo *parse();
                    562:
1.7       ohara     563: */
                    564: /*&ja
1.6       ohara     565: Lisp 表現による OX expression, CMO expression の構文解析器。あらかじめ
                    566: 設定された文字列を解析して ox 構造体、あるいは cmo 構造体を生成する。
                    567: */
1.9       ohara     568: /*&en
                    569: The parser returns an OX/CMO object.  If the given string is illegal,
                    570: then the parser returns NULL.
                    571: */
1.6       ohara     572: /*&ja
                    573:
1.15    ! ohara     574: 7. Mathcap クラス
        !           575: データベース
1.13      ohara     576:
1.14      ohara     577: 7.1. 概要
                    578:
1.15    ! ohara     579: Mathcap クラスは OpenXM アプリケーションの Mathcap を表現するクラスで
        !           580: ある。これは cmo_mathcap とは別物である。Mathcap クラスのインスタンス
        !           581: は各通信路ごとに生成され、OXFILE クラスのメンバになる。このことは、複
        !           582: 数の計算プロセスと同時に通信するクライアントを作成するためである。さて、
        !           583: Mathcap クラスは、静的メンバももつ。これら静的メンバは、通信路から独立
        !           584: した、 OpenXM アプリケーション自体の情報を保持するために用いられる。また。
        !           585: インスタンスの生成時にもその情報は利用される。
1.14      ohara     586:
                    587: 7.2. メソッド
1.13      ohara     588:
1.15    ! ohara     589: Mathcap クラスは mathcap.c で実装されている。ユーザは次の関数を介して、
        !           590: Mathcap クラスにアクセスすることができる。
1.13      ohara     591:
1.15    ! ohara     592: void mathcap_init(int version, char *id, char *sysname, int cmo[], sm_cmd[]);
1.13      ohara     593:
1.15    ! ohara     594: 静的メンバを初期化する。Mathcap クラスのインスタンスを生成するまえに、
        !           595: したがって、クライアントおよびサーバはプログラムを開始するときに、この
        !           596: 関数を呼ばなければならない。cmo は、そのアプリケーションの利用する CMO
        !           597: のタグのリストであって、0 で終端しなければならない。NULL のときには既
        !           598: 定値が用いられる。sm_cmd も同様。
1.13      ohara     599:
1.14      ohara     600: cmo_mathcap *mathcap_get(mathcap *this);
1.13      ohara     601:
1.14      ohara     602: Mathcap クラスのインスタンスを cmo_mathcap クラスのインスタンスに変換する。
1.13      ohara     603:
1.14      ohara     604: mathcap *mathcap_update(mathcap *this, cmo_mathcap *mc);
1.13      ohara     605:
1.15    ! ohara     606: 通信相手から入手した cmo_mathcap オブジェクトを用いて、Mathcap クラスの
        !           607: インスタンスを更新する。
1.13      ohara     608:
                    609: */
                    610: /*&ja
                    611:
                    612: 8. 付属プログラムについて
1.6       ohara     613:
1.7       ohara     614: */
                    615: /*&en
                    616:
1.13      ohara     617: 8. Sample programs.
1.7       ohara     618:
                    619: */
                    620: /*&common
1.6       ohara     621: testclient
                    622:
1.7       ohara     623: */
                    624: /*&ja
1.6       ohara     625: テスト用の小さな OpenXM クライアント。OX expression を入力して送信する
                    626: ことのみ可能。SM_popCMO, SM_popString を含むメッセージを送信した場合に
                    627: は、サーバから送られてくるメッセージを表示する。
                    628:
1.7       ohara     629: */
                    630: /*&en
                    631: This is a small OpenXM client.  We send an OX message by inputting an
                    632: OX expression and display data messages gotten from a server.
                    633:
                    634: */
                    635: /*&common
1.6       ohara     636: bconv
                    637:
1.7       ohara     638: */
                    639: /*&ja
1.6       ohara     640: バイトコードエンコーダ。OX expression あるいは CMO expression を入力す
                    641: ると、対応するバイト列を表示する。
                    642:
1.7       ohara     643: */
                    644: /*&en
                    645: A byte code encoder.  It shows a byte stream which corresponds to an
                    646: OX expression.
                    647:
1.9       ohara     648: */
1.7       ohara     649: /*&common
1.6       ohara     650: ox_Xsample
                    651:
1.7       ohara     652: */
                    653: /*&ja
1.6       ohara     654: GUI 表示する OpenXM サーバのサンプル。
                    655:
                    656: */
1.8       ohara     657: /*&ja
1.13      ohara     658: 9. 付録
1.8       ohara     659:
1.13      ohara     660: 9.1 ox.c における関数の命名規則
1.8       ohara     661:
                    662: (1) receive_cmo 関数はCMOタグとデータ本体を受信する. この関数は CMOタ
                    663: グの値が事前に分からないときに使用する. 返り値として、cmo へのポインタ
                    664: を返す.
                    665: (2) receive_cmo_X 関数は, CMOタグを親の関数で受信してから呼び出される
                    666: 関数で、データ本体のみを受信し、cmo_X へのポインタを返す.  しかも、関
                    667: 数内部で new_cmo_X 関数を呼び出す.
                    668: (3) send_cmo 関数はCMOタグとデータ本体を送信する.
                    669: (4) send_cmo_X 関数はCMOタグを親の関数で送信してから呼び出される関数で、
                    670: データ本体のみを送信する.
                    671: (5) ただし receive_ox_tag を除いて, receive_ox_X 関数は作らない.
                    672: receive_cmo を利用する.
                    673: (6) send_ox_X 関数は OX タグを含めて送信する.
                    674: (7) ox_X 関数は一連の送受信を含むより抽象的な操作を表現する.  ox_X 関
                    675: 数は、第一引数として、ox_file_t型の変数 sv をとる.
                    676: (8) Y_cmo 関数と Y_cmo_X 関数の関係は次の通り:
                    677: まず Y_cmo 関数で cmo のタグを処理し、タグを除いた残りの部分をY_cmo_X
                    678: 関数が処理する.  cmo の内部に cmo_Z へのポインタがあるときには、その種
                    679: 類によらずに Y_cmo 関数を呼び出す.
                    680:
                    681: */
                    682:

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>