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

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

1.1       ohara       1: # Author: 小原功任 @ 金沢大学理学部計算科学教室
                      2: # URI:    http://omega.s.kanazawa-u.ac.jp/ohara/
1.6     ! ohara       3: # $OpenXM: OpenXM/src/ox_toolkit/README,v 1.5 1999/12/15 09:24:46 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: */
                     11: /*&ja
1.1       ohara      12: libox.a を利用するには次のヘッダファイルをインクルードする必要があります。
1.4       ohara      13: */
                     14: /*&en
                     15: How to use OpenXM C library?
                     16:
1.6     ! ohara      17: In order to use libox.a, you need to include the following header files:
1.4       ohara      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)
1.6     ! ohara      38: The following structures are defined in ox.h:
1.4       ohara      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
1.6     ! ohara      68: The cmo above is abstract base class;
1.4       ohara      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
1.6     ! ohara      78: The following structures are defined in ox.h:
1.4       ohara      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:
1.6     ! ohara     104: Use the following functions to generate an object.
        !           105: It returns a pointer to the object.
1.4       ohara     106: */
                    107: /*&common
1.1       ohara     108:
                    109: new_cmo_null();
                    110: new_cmo_int32(int i);
                    111: new_cmo_string(char* s);
                    112: new_cmo_mathcap(cmo* ob);
                    113: new_cmo_list();
                    114: new_cmo_monomial32();
                    115: new_cmo_monomial32_size(int size);
                    116: new_cmo_zz();
                    117: new_cmo_zz_size(int size);
                    118: new_cmo_zz_set_si(int integer);
                    119: new_cmo_zz_noinit();
                    120: new_cmo_zero();
                    121: new_cmo_distributed_polynomial();
                    122: new_cmo_dms_generic();
                    123: new_cmo_ring_by_name(cmo* ob);
                    124: new_cmo_indeterminate(cmo* ob);
                    125: new_cmo_error2(cmo* ob);
                    126:
1.4       ohara     127: */
                    128: /*&ja
1.2       ohara     129: 3. 高水準 API
                    130:
                    131: 高水準 API は「OpenXM クライアント」から利用することを前提に設計されている。
                    132:
                    133: 3.1 通信の開始
                    134:
                    135: 通信を開始する場合には、次の関数のいずれかを利用する。
1.4       ohara     136: */
                    137: /*&en
                    138: 3. High-level API
                    139:
1.6     ! ohara     140: High-level API is prepared to help an implementation of OpenXM clients.
1.4       ohara     141:
1.6     ! ohara     142: 3.1 How to make connections to OpenXM servers?
1.4       ohara     143:
1.6     ! ohara     144: In order to open a connection to an OpenXM server,
        !           145: you need to call ox_start() or to call ox_start_insecure_nonreverse().
1.4       ohara     146: */
                    147: /*&common
1.2       ohara     148:
                    149: ox_file_t ox_start(char* host, char* prog1, char* prog2);
                    150: ox_file_t ox_start_insecure_nonreverse(char* host, short portControl, short portStream);
                    151:
1.4       ohara     152: */
                    153: /*&ja
1.2       ohara     154: 第一の関数は、ローカルマシン上に OpenXM サーバを起動し、そのサーバとの
                    155: 間に"reverse モード"で通信路を開設する。通信に使われるポート番号は自動
                    156: 的に生成される。host はローカルマシンのホスト名(あるいは "localhost")、
                    157: prog1 はコントロールサーバの実行ファイル名、
                    158: prog2 は計算サーバの実行ファイル名でなければならない。
                    159:
                    160: 第二の関数は、リモートマシン上に既に起動されている OpenXM サーバとの間に
                    161: 通信路を開設する。通信に使われるポート番号は明示的に与えなければならない。
                    162: host はリモートマシンのホスト名、
                    163: portControl はコントロールサーバとの通信のためのポート番号、
                    164: portStream は計算サーバとの通信のためのポート番号である。
                    165:
                    166: それぞれの関数はサーバ(正確には二つのサーバの組)の識別子を返す。
                    167: この識別子は高水準 API の各関数で利用される。
                    168:
1.4       ohara     169: */
                    170: /*&ja
1.2       ohara     171: 3.2 通信の終了
                    172:
                    173: 通信の終了のためには次の二つの関数が用意されている。
                    174:
1.4       ohara     175: */
                    176: /*&en
1.6     ! ohara     177: 3.2 How to close connections to OpenXM servers?
1.4       ohara     178:
1.6     ! ohara     179: In order to close a connection to an OpenXM server,
        !           180: you need to call ox_close() or to call ox_shutdown().
1.4       ohara     181:
                    182: */
                    183: /*&common
1.2       ohara     184: void ox_close(ox_file_t sv);
                    185: void ox_shutdown(ox_file_t sv);
                    186:
1.4       ohara     187: */
                    188: /*&ja
1.2       ohara     189: 第一の関数はコントロールサーバに SM_control_kill を送ることによって、
                    190: サーバを終了させる。第二の関数は計算サーバに SM_shutdown を送ることに
                    191: よって、サーバを終了させる(予定)。
                    192:
1.4       ohara     193: /*
                    194: /*&ja
1.2       ohara     195: 3.3 SM コマンドの送信
1.4       ohara     196: */
                    197: /*&en
1.6     ! ohara     198: 3.3 How to command to OpenXM stack machines?
1.4       ohara     199: */
                    200: /*&common
1.5       ohara     201:
1.2       ohara     202: void  ox_push_cmd(ox_file_t sv, int sm_code);
                    203:
1.4       ohara     204: */
                    205: /*&ja
1.2       ohara     206: サーバにスタックマシンコマンドを送る。コマンドはコマンド番号で与える。
1.4       ohara     207: */
                    208: /*&en
1.5       ohara     209: ox_push_cmd() sends an operation code to an OpenXM stack machine.
1.6     ! ohara     210: See oxtag.h.
1.4       ohara     211: */
                    212: /*&ja
1.5       ohara     213:
1.2       ohara     214: 3.4 CMO の送受信
                    215:
                    216: void  ox_push_cmo(ox_file_t sv, cmo *c);
                    217: cmo*  ox_pop_cmo(ox_file_t sv);
                    218: char* ox_popString(ox_file_t sv);
                    219:
                    220: ox_push_cmo は cmo を送信、ox_pop_cmo は cmo を受信する。ox_popString
                    221: は cmo を文字列形式に変換して受信するが、変換の結果はサーバによって異
                    222: なる。
                    223:
                    224: 3.5 スタック処理
                    225:
                    226: int ox_pops(ox_file_t sv, int num);
                    227:
                    228: スタック上の num 個のオブジェクトを廃棄する。
                    229:
                    230: 3.6
                    231:
                    232: int ox_flush(ox_file_t sv);
                    233:
                    234: 通信路を flush する(実際には何もしない)。
                    235:
                    236: 3.7
                    237:
                    238: void ox_reset(ox_file_t sv);
                    239:
                    240: 計算を中断する。
                    241:
                    242: 3.8
                    243:
                    244: void ox_execute_string(ox_file_t sv, char* str);
                    245:
                    246: サーバのローカル言語で書かれた命令を評価し、結果をスタックに積む。
                    247:
                    248: 3.9
                    249:
1.6     ! ohara     250: int ox_cmo_rpc(ox_file_t sv, char *function, int argc, cmo *argv[]);
1.2       ohara     251:
                    252: function(argv[1], ...) を計算し、結果をスタックに積む。
                    253:
                    254: 3.10
                    255:
                    256: cmo_mathcap* ox_mathcap(ox_file_t sv);
                    257:
                    258: Mathcap を受け取る。現在は Mathcap の処理はユーザプログラムに任されている。
                    259: いずれこの関数は廃止される予定。
1.4       ohara     260: */
                    261: /*&ja
1.5       ohara     262:
1.2       ohara     263: 4. 低水準 API
1.1       ohara     264:
1.3       ohara     265: 低水準 API はファイルディスクリプタを直接利用する。
1.1       ohara     266:
1.3       ohara     267: 4.1 通信に使われるバイトオーダの決定
1.4       ohara     268: */
                    269: /*&en
1.5       ohara     270:
1.4       ohara     271: 4. Low-level API.
                    272:
1.5       ohara     273: In this section, ``fd'' is an identifier of an OpenXM connection.
                    274:
1.4       ohara     275: 4.1 How to decide a byte order of integers?
                    276: */
                    277: /*&common
1.5       ohara     278:
1.3       ohara     279: int decideByteOrderServer(int fd, int order);
                    280:
1.4       ohara     281: */
                    282: /*&ja
1.3       ohara     283: このツールキットは、サーバが開始されるときにはすでに通信路が設定されて
                    284: いるが、その通信路に用いるバイトオーダの決定は行われていないと仮定して
                    285: いる。詳しくは、高山-野呂, "OpenXM の設計と実装" を参照せよ。
                    286:
                    287: (注意) クライアント側でのバイトオーダの設定は、高水準 API で自動的に行われる。
1.5       ohara     288: */
                    289: /*&en
1.6     ! ohara     290: You need to call it when your OpenXM server is initialized.
        !           291: This function always choose the network byte order
        !           292: as an expression for integers.
1.4       ohara     293: */
                    294: /*&common
1.5       ohara     295:
1.3       ohara     296: 4.2
                    297:
                    298: int send_int32(int fd, int integer);
1.5       ohara     299: int receive_int32(int fd);
1.3       ohara     300:
1.4       ohara     301: */
                    302: /*&ja
1.3       ohara     303: fd に 32bit 整数を書き込む。
1.5       ohara     304: fd から 32bit 整数を読み込む。
                    305: */
                    306: /*&en
                    307: send_int32() writes 32bits integer to an OpenXM connection.
                    308: receive_int32() reads 32bits integer from an OpenXM connection.
1.4       ohara     309: */
                    310: /*&common
1.3       ohara     311:
                    312: 4.3
                    313:
                    314: int  send_cmo(int fd, cmo* m);
1.5       ohara     315: cmo* receive_cmo(int fd);
1.3       ohara     316:
1.4       ohara     317: */
                    318: /*&ja
1.3       ohara     319: fd に cmo を書き込む。
1.5       ohara     320: fd から cmo を読み込む。
                    321: */
                    322: /*&en
                    323: send_cmo() writes an CMObject to an OpenXM connection.
                    324: receive_cmo() reads an CMObject from an OpenXM connection.
1.4       ohara     325: */
                    326: /*&common
1.3       ohara     327:
                    328: 4.4
                    329:
                    330: int next_serial();
                    331:
1.5       ohara     332: */
                    333: /*&ja
1.3       ohara     334: シリアルナンバを生成する。
1.5       ohara     335: */
                    336: /*&en
1.6     ! ohara     337: next_serial() generates a serial number for ox message.
1.5       ohara     338: */
                    339: /*&common
1.3       ohara     340:
                    341: 4.5
                    342:
                    343: int  send_ox_tag(int fd, int tag);
                    344: int  receive_ox_tag(int fd);
                    345:
1.5       ohara     346: */
                    347: /*&ja
                    348: fd に OX メッセージのヘッダ(tag+serial#)を書き込む。シリアル番号は
                    349: 自動的に生成される。
                    350: fd から OX メッセージのヘッダ(tag+serial#)を読み込む。
                    351: */
                    352: /*&en
1.6     ! ohara     353: send_ox_tag() writes a tag and an automatically generated serial number
1.5       ohara     354: of an ox message to an OpenXM conection.
1.6     ! ohara     355: receive_ox_tag() reads a tag and a serial number of an ox message.
1.5       ohara     356: */
                    357: /*&common
1.3       ohara     358:
                    359: 4.6
                    360:
                    361: int  send_ox(int fd, ox* m);
                    362: int  send_ox_cmo(int fd, cmo* m);
                    363: void send_ox_command(int fd, int sm_command);
                    364:
1.5       ohara     365: */
                    366: /*&ja
1.3       ohara     367: ox メッセージを送信する。
1.6     ! ohara     368: */
        !           369:
        !           370: /*&ja
        !           371:
        !           372: 5. OX expression パーサ
        !           373:
        !           374: OpenXM C library には 文字列表現された
        !           375: OX expression および CMO expression から、
        !           376: ox 構造体または cmo 構造体を生成するためのパーサが付属している。
        !           377:
        !           378: ここではこのパーサについて説明する。
        !           379:
        !           380: int setflag_parse(int flag);
        !           381:
        !           382: setflag_parse(PFLAG_ADDREV) によって、CMO の短縮表現を許す。
        !           383:
        !           384: int init_parser(char *str);
        !           385:
        !           386: パーサが処理すべき文字列をセットする。
        !           387:
        !           388: cmo *parse();
        !           389:
        !           390: Lisp 表現による OX expression, CMO expression の構文解析器。あらかじめ
        !           391: 設定された文字列を解析して ox 構造体、あるいは cmo 構造体を生成する。
        !           392: */
        !           393: /*&ja
        !           394:
        !           395: 7. 付属プログラムについて
        !           396:
        !           397: testclient
        !           398:
        !           399: テスト用の小さな OpenXM クライアント。OX expression を入力して送信する
        !           400: ことのみ可能。SM_popCMO, SM_popString を含むメッセージを送信した場合に
        !           401: は、サーバから送られてくるメッセージを表示する。
        !           402:
        !           403: bconv
        !           404:
        !           405: バイトコードエンコーダ。OX expression あるいは CMO expression を入力す
        !           406: ると、対応するバイト列を表示する。
        !           407:
        !           408: ox_Xsample
        !           409:
        !           410: GUI 表示する OpenXM サーバのサンプル。
        !           411:
        !           412: */

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