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

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

1.1       ohara       1: # Author: 小原功任 @ 金沢大学理学部計算科学教室
                      2: # URI:    http://omega.s.kanazawa-u.ac.jp/ohara/
1.4     ! ohara       3: # $OpenXM: OpenXM/src/ox_toolkit/README,v 1.3 1999/12/15 02:44:12 ohara Exp $
1.1       ohara       4:
1.4     ! ohara       5: /*&ja ox_toolkit ユーザガイド
1.1       ohara       6:
1.4     ! ohara       7: */
        !             8: /*&en A user's guide for ox_toolkit.
        !             9:
        !            10: */
        !            11: /*&ja
1.1       ohara      12: libox.a を利用するには次のヘッダファイルをインクルードする必要があります。
1.4     ! ohara      13: */
        !            14: /*&en
        !            15: How to use OpenXM C library?
        !            16:
        !            17: The OpenXM C libraiy has header files:
        !            18: */
        !            19: /*&common
1.1       ohara      20:
                     21: #include <oxtag.h>
                     22: #include <ox.h>
                     23: #include <parse.h>
                     24:
1.4     ! ohara      25: */
        !            26: /*&ja
1.2       ohara      27: 1. データ型
1.1       ohara      28:
1.2       ohara      29: このツールキットで定義されている各構造体の生成については次節を参照せよ。
                     30:
                     31: 1.1 CMO (Common Math Object)
1.1       ohara      32: 次のデータ型(構造体)が用意されている。
1.4     ! ohara      33: */
        !            34: /*&en
        !            35: 1. Types
        !            36:
        !            37: 1.1 CMO (Common Math Object)
        !            38: The following structures is defined in ox.h:
        !            39: */
        !            40: /*&common
1.1       ohara      41:
                     42: cmo
                     43: cmo_null
                     44: cmo_int32
                     45: cmo_datum
                     46: cmo_string
                     47: cmo_mathcap
                     48: cmo_list
                     49: cmo_monomial32
                     50: cmo_zz
                     51: cmo_qq
                     52: cmo_zero
                     53: cmo_dms_generic
                     54: cmo_ring_by_name
                     55: cmo_distributed_polynomial
                     56: cmo_indeterminate
                     57: cmo_error2
                     58:
1.4     ! ohara      59: */
        !            60: /*&ja
1.1       ohara      61: このうち cmo 型はいわば抽象基底クラスに相当するものであり、この型のオ
1.2       ohara      62: ブジェクトを明示的には生成されない。このクラスはポインタ型のキャストの
                     63: ために用意されている。また cmo_distributed_polynomial は cmo_list の派
                     64: 生クラスであると思ってもよい。
                     65:
1.4     ! ohara      66: */
        !            67: /*&en
        !            68: The cmo above is similer to abstract base class;
        !            69: you never make an object of cmo class.
        !            70:
        !            71: */
        !            72: /*&ja
1.2       ohara      73: 1.2 OX オブジェクト
                     74: 次のデータ型(構造体)が用意されている。
1.4     ! ohara      75: */
        !            76: /*&en
        !            77: 1.2 OX objects
        !            78: The following structures is defined in ox.h:
        !            79: */
        !            80: /*&common
1.2       ohara      81:
                     82: ox
                     83: ox_command
                     84: ox_data
                     85:
1.4     ! ohara      86: */
        !            87: /*&ja
1.2       ohara      88: このうち、ox 型は抽象基底クラスなので、オブジェクトをつくってはいけない。
                     89:
1.4     ! ohara      90: */
        !            91: /*&en
        !            92: The ox above is abstract base class.
        !            93:
        !            94: */
        !            95: /*&ja
1.2       ohara      96: 2. オブジェクトの生成
                     97:
                     98: オブジェクトを生成するために、new 関数群が用意されている。それぞれの関
                     99: 数はオブジェクトを生成して、そのオブジェクトへのポインタを返す。
1.4     ! ohara     100: */
        !           101: /*&en
        !           102: 2. How to make CMObjects?
        !           103:
        !           104: You may use new functions which generate an object and return its pointer.
        !           105: */
        !           106: /*&common
1.1       ohara     107:
                    108: new_cmo_null();
                    109: new_cmo_int32(int i);
                    110: new_cmo_string(char* s);
                    111: new_cmo_mathcap(cmo* ob);
                    112: new_cmo_list();
                    113: new_cmo_monomial32();
                    114: new_cmo_monomial32_size(int size);
                    115: new_cmo_zz();
                    116: new_cmo_zz_size(int size);
                    117: new_cmo_zz_set_si(int integer);
                    118: new_cmo_zz_noinit();
                    119: new_cmo_zero();
                    120: new_cmo_distributed_polynomial();
                    121: new_cmo_dms_generic();
                    122: new_cmo_ring_by_name(cmo* ob);
                    123: new_cmo_indeterminate(cmo* ob);
                    124: new_cmo_error2(cmo* ob);
                    125:
1.4     ! ohara     126: */
        !           127: /*&ja
1.2       ohara     128: 3. 高水準 API
                    129:
                    130: 高水準 API は「OpenXM クライアント」から利用することを前提に設計されている。
                    131:
                    132: 3.1 通信の開始
                    133:
                    134: 通信を開始する場合には、次の関数のいずれかを利用する。
1.4     ! ohara     135: */
        !           136: /*&en
        !           137: 3. High-level API
        !           138:
        !           139: High-level API is prepared for implementation of your OpenXM clients.
        !           140:
        !           141: 3.1 How to make connection to OpenXM server?
        !           142:
        !           143: You may call ox_start or ox_start_insecure_nonreverse.
        !           144: */
        !           145: /*&common
1.2       ohara     146:
                    147: ox_file_t ox_start(char* host, char* prog1, char* prog2);
                    148: ox_file_t ox_start_insecure_nonreverse(char* host, short portControl, short portStream);
                    149:
1.4     ! ohara     150: */
        !           151: /*&ja
1.2       ohara     152: 第一の関数は、ローカルマシン上に OpenXM サーバを起動し、そのサーバとの
                    153: 間に"reverse モード"で通信路を開設する。通信に使われるポート番号は自動
                    154: 的に生成される。host はローカルマシンのホスト名(あるいは "localhost")、
                    155: prog1 はコントロールサーバの実行ファイル名、
                    156: prog2 は計算サーバの実行ファイル名でなければならない。
                    157:
                    158: 第二の関数は、リモートマシン上に既に起動されている OpenXM サーバとの間に
                    159: 通信路を開設する。通信に使われるポート番号は明示的に与えなければならない。
                    160: host はリモートマシンのホスト名、
                    161: portControl はコントロールサーバとの通信のためのポート番号、
                    162: portStream は計算サーバとの通信のためのポート番号である。
                    163:
                    164: それぞれの関数はサーバ(正確には二つのサーバの組)の識別子を返す。
                    165: この識別子は高水準 API の各関数で利用される。
                    166:
1.4     ! ohara     167: */
        !           168: /*&ja
1.2       ohara     169: 3.2 通信の終了
                    170:
                    171: 通信の終了のためには次の二つの関数が用意されている。
                    172:
1.4     ! ohara     173: */
        !           174: /*&en
        !           175: 3.2 How to close connection to OpenXM server?
        !           176:
        !           177: You may call ox_close or ox_shutdown.
        !           178:
        !           179: */
        !           180: /*&common
1.2       ohara     181: void ox_close(ox_file_t sv);
                    182: void ox_shutdown(ox_file_t sv);
                    183:
1.4     ! ohara     184: */
        !           185: /*&ja
1.2       ohara     186: 第一の関数はコントロールサーバに SM_control_kill を送ることによって、
                    187: サーバを終了させる。第二の関数は計算サーバに SM_shutdown を送ることに
                    188: よって、サーバを終了させる(予定)。
                    189:
1.4     ! ohara     190: /*
        !           191: /*&ja
1.2       ohara     192: 3.3 SM コマンドの送信
                    193:
1.4     ! ohara     194: */
        !           195: /*&en
        !           196: 3.3 How to command to OpenXM stack machine?
        !           197:
        !           198: */
        !           199: /*&common
1.2       ohara     200: void  ox_push_cmd(ox_file_t sv, int sm_code);
                    201:
1.4     ! ohara     202: */
        !           203: /*&ja
1.2       ohara     204: サーバにスタックマシンコマンドを送る。コマンドはコマンド番号で与える。
1.1       ohara     205:
1.4     ! ohara     206: */
        !           207: /*&en
        !           208: This function send operation code to an OpenXM stack machine.
        !           209: Table of opecode is defined in oxtag.h.
        !           210: */
        !           211: /*&ja
1.2       ohara     212: 3.4 CMO の送受信
                    213:
                    214: void  ox_push_cmo(ox_file_t sv, cmo *c);
                    215: cmo*  ox_pop_cmo(ox_file_t sv);
                    216: char* ox_popString(ox_file_t sv);
                    217:
                    218: ox_push_cmo は cmo を送信、ox_pop_cmo は cmo を受信する。ox_popString
                    219: は cmo を文字列形式に変換して受信するが、変換の結果はサーバによって異
                    220: なる。
                    221:
                    222: 3.5 スタック処理
                    223:
                    224: int ox_pops(ox_file_t sv, int num);
                    225:
                    226: スタック上の num 個のオブジェクトを廃棄する。
                    227:
                    228: 3.6
                    229:
                    230: int ox_flush(ox_file_t sv);
                    231:
                    232: 通信路を flush する(実際には何もしない)。
                    233:
                    234: 3.7
                    235:
                    236: void ox_reset(ox_file_t sv);
                    237:
                    238: 計算を中断する。
                    239:
                    240: 3.8
                    241:
                    242: void ox_execute_string(ox_file_t sv, char* str);
                    243:
                    244: サーバのローカル言語で書かれた命令を評価し、結果をスタックに積む。
                    245:
                    246: 3.9
                    247:
                    248: int   ox_cmo_rpc(ox_file_t sv, char *function, int argc, cmo *argv[]);
                    249:
                    250: function(argv[1], ...) を計算し、結果をスタックに積む。
                    251:
                    252: 3.10
                    253:
                    254: cmo_mathcap* ox_mathcap(ox_file_t sv);
                    255:
                    256: Mathcap を受け取る。現在は Mathcap の処理はユーザプログラムに任されている。
                    257: いずれこの関数は廃止される予定。
1.1       ohara     258:
1.4     ! ohara     259: */
        !           260: /*&ja
1.2       ohara     261: 4. 低水準 API
1.1       ohara     262:
1.3       ohara     263: 低水準 API はファイルディスクリプタを直接利用する。
1.1       ohara     264:
1.3       ohara     265: 4.1 通信に使われるバイトオーダの決定
                    266:
1.4     ! ohara     267: */
        !           268: /*&en
        !           269: 4. Low-level API.
        !           270:
        !           271: 4.1 How to decide a byte order of integers?
        !           272:
        !           273: */
        !           274: /*&common
1.3       ohara     275: int decideByteOrderServer(int fd, int order);
                    276:
1.4     ! ohara     277: */
        !           278: /*&ja
1.3       ohara     279: このツールキットは、サーバが開始されるときにはすでに通信路が設定されて
                    280: いるが、その通信路に用いるバイトオーダの決定は行われていないと仮定して
                    281: いる。詳しくは、高山-野呂, "OpenXM の設計と実装" を参照せよ。
                    282:
                    283: (注意) クライアント側でのバイトオーダの設定は、高水準 API で自動的に行われる。
                    284:
1.4     ! ohara     285: */
        !           286: /*&common
1.3       ohara     287: 4.2
                    288:
                    289: int send_int32(int fd, int integer);
                    290:
1.4     ! ohara     291: */
        !           292: /*&ja
1.3       ohara     293: fd に 32bit 整数を書き込む。
                    294:
1.4     ! ohara     295: */
        !           296: /*&common
1.3       ohara     297: int receive_int32(int fd);
                    298:
1.4     ! ohara     299: */
        !           300: /*&ja
1.3       ohara     301: fd から 32bit 整数を読み込む。
                    302:
1.4     ! ohara     303: */
        !           304: /*&common
1.3       ohara     305: 4.3
                    306:
                    307: int  send_cmo(int fd, cmo* m);
                    308:
1.4     ! ohara     309: */
        !           310: /*&ja
1.3       ohara     311: fd に cmo を書き込む。
                    312:
1.4     ! ohara     313: */
        !           314: /*&common
1.3       ohara     315: cmo* receive_cmo(int fd);
                    316:
1.4     ! ohara     317: */
        !           318: /*&ja
1.3       ohara     319: fd から cmo を読み込む。
                    320:
                    321: 4.4
                    322:
                    323: int next_serial();
                    324:
                    325: シリアルナンバを生成する。
                    326:
                    327: 4.5
                    328:
                    329: int  send_ox_tag(int fd, int tag);
                    330:
                    331: fd に OX メッセージのヘッダ(tag+id)を書き込む。
                    332: シリアル番号は自動的に生成される。
                    333:
                    334: int  receive_ox_tag(int fd);
                    335:
                    336: fd から OX メッセージのヘッダ(tag+id)を読み込む。
                    337:
                    338: 4.6
                    339:
                    340: int  send_ox(int fd, ox* m);
                    341: int  send_ox_cmo(int fd, cmo* m);
                    342: void send_ox_command(int fd, int sm_command);
                    343:
                    344: ox メッセージを送信する。
1.4     ! ohara     345: */

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