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

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

1.1       ohara       1: # Author: 小原功任 @ 金沢大学理学部計算科学教室
                      2: # URI:    http://omega.s.kanazawa-u.ac.jp/ohara/
1.10    ! ohara       3: # $OpenXM: OpenXM/src/ox_toolkit/README,v 1.9 2000/01/20 17:18:55 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.2       ohara     132: 3. 高水準 API
                    133:
                    134: 高水準 API は「OpenXM クライアント」から利用することを前提に設計されている。
                    135:
                    136: 3.1 通信の開始
                    137:
                    138: 通信を開始する場合には、次の関数のいずれかを利用する。
1.4       ohara     139: */
                    140: /*&en
                    141: 3. High-level API
                    142:
1.6       ohara     143: High-level API is prepared to help an implementation of OpenXM clients.
1.4       ohara     144:
1.6       ohara     145: 3.1 How to make connections to OpenXM servers?
1.4       ohara     146:
1.7       ohara     147: In order to open a connection to an OpenXM server, you need to call
                    148: ox_start() or to call ox_start_insecure_nonreverse().
1.4       ohara     149: */
                    150: /*&common
1.2       ohara     151:
                    152: ox_file_t ox_start(char* host, char* prog1, char* prog2);
                    153: ox_file_t ox_start_insecure_nonreverse(char* host, short portControl, short portStream);
                    154:
1.4       ohara     155: */
                    156: /*&ja
1.2       ohara     157: 第一の関数は、ローカルマシン上に OpenXM サーバを起動し、そのサーバとの
                    158: 間に"reverse モード"で通信路を開設する。通信に使われるポート番号は自動
                    159: 的に生成される。host はローカルマシンのホスト名(あるいは "localhost")、
                    160: prog1 はコントロールサーバの実行ファイル名、
                    161: prog2 は計算サーバの実行ファイル名でなければならない。
                    162:
                    163: 第二の関数は、リモートマシン上に既に起動されている OpenXM サーバとの間に
                    164: 通信路を開設する。通信に使われるポート番号は明示的に与えなければならない。
                    165: host はリモートマシンのホスト名、
                    166: portControl はコントロールサーバとの通信のためのポート番号、
                    167: portStream は計算サーバとの通信のためのポート番号である。
                    168:
                    169: それぞれの関数はサーバ(正確には二つのサーバの組)の識別子を返す。
                    170: この識別子は高水準 API の各関数で利用される。
                    171:
1.4       ohara     172: */
1.7       ohara     173: /*&en
                    174: The ox_start() function invoke an OpenXM server on its local machine
                    175: and open a connection to the server with "reverse" mode.  The client
                    176: choose a port number of TCP/IP automatically.
                    177:
                    178: The ox_start_insecure_nonreverse() function open a connection to an
                    179: OpenXM server run on a remote host and you need to provide port numbers.
                    180:
                    181: */
1.4       ohara     182: /*&ja
1.2       ohara     183: 3.2 通信の終了
                    184:
                    185: 通信の終了のためには次の二つの関数が用意されている。
                    186:
1.4       ohara     187: */
                    188: /*&en
1.6       ohara     189: 3.2 How to close connections to OpenXM servers?
1.4       ohara     190:
1.7       ohara     191: In order to close a connection to an OpenXM server, you need to call
                    192: ox_close() or to call ox_shutdown().
1.4       ohara     193:
                    194: */
                    195: /*&common
1.2       ohara     196: void ox_close(ox_file_t sv);
                    197: void ox_shutdown(ox_file_t sv);
                    198:
1.4       ohara     199: */
                    200: /*&ja
1.2       ohara     201: 第一の関数はコントロールサーバに SM_control_kill を送ることによって、
                    202: サーバを終了させる。第二の関数は計算サーバに SM_shutdown を送ることに
                    203: よって、サーバを終了させる(予定)。
                    204:
1.7       ohara     205: */
1.4       ohara     206: /*&ja
1.2       ohara     207: 3.3 SM コマンドの送信
1.4       ohara     208: */
                    209: /*&en
1.6       ohara     210: 3.3 How to command to OpenXM stack machines?
1.4       ohara     211: */
                    212: /*&common
1.5       ohara     213:
1.2       ohara     214: void  ox_push_cmd(ox_file_t sv, int sm_code);
                    215:
1.4       ohara     216: */
                    217: /*&ja
1.2       ohara     218: サーバにスタックマシンコマンドを送る。コマンドはコマンド番号で与える。
1.7       ohara     219:
1.4       ohara     220: */
                    221: /*&en
1.5       ohara     222: ox_push_cmd() sends an operation code to an OpenXM stack machine.
1.10    ! ohara     223: See OpenXM/include/ox_toolkit_tags.h for a list of operation codes.
1.7       ohara     224:
1.4       ohara     225: */
                    226: /*&ja
1.2       ohara     227: 3.4 CMO の送受信
1.7       ohara     228: */
                    229: /*&en
                    230: 3.4 How to receive a CMO?
                    231: */
                    232: /*&common
1.2       ohara     233:
                    234: void  ox_push_cmo(ox_file_t sv, cmo *c);
                    235: cmo*  ox_pop_cmo(ox_file_t sv);
                    236: char* ox_popString(ox_file_t sv);
                    237:
1.7       ohara     238: */
                    239: /*&ja
1.2       ohara     240: ox_push_cmo は cmo を送信、ox_pop_cmo は cmo を受信する。ox_popString
                    241: は cmo を文字列形式に変換して受信するが、変換の結果はサーバによって異
                    242: なる。
                    243:
1.7       ohara     244: */
                    245: /*&en
                    246: */
                    247: /*&ja
1.2       ohara     248: 3.5 スタック処理
1.7       ohara     249: */
                    250: /*&common
1.2       ohara     251:
                    252: int ox_pops(ox_file_t sv, int num);
                    253:
1.7       ohara     254: */
                    255: /*&ja
1.2       ohara     256: スタック上の num 個のオブジェクトを廃棄する。
                    257:
1.7       ohara     258: */
                    259: /*&ja
                    260: 3.6 通信路のフラッシュ
                    261: */
                    262: /*&common
1.2       ohara     263:
                    264: int ox_flush(ox_file_t sv);
                    265:
1.7       ohara     266: */
                    267: /*&ja
1.2       ohara     268: 通信路を flush する(実際には何もしない)。
                    269:
1.7       ohara     270: */
                    271: /*&ja
                    272: 3.7 通信の中断
                    273: */
                    274: /*&common
1.2       ohara     275:
                    276: void ox_reset(ox_file_t sv);
                    277:
1.7       ohara     278: */
                    279: /*&ja
1.2       ohara     280: 計算を中断する。
                    281:
1.7       ohara     282: */
                    283: /*&ja
                    284: 3.8 ローカル言語で書かれたコマンドの評価
                    285: */
                    286: /*&common
1.2       ohara     287:
                    288: void ox_execute_string(ox_file_t sv, char* str);
                    289:
1.7       ohara     290: */
                    291: /*&ja
1.2       ohara     292: サーバのローカル言語で書かれた命令を評価し、結果をスタックに積む。
                    293:
1.7       ohara     294: */
                    295: /*&ja
                    296: 3.9 関数呼び出し
                    297: */
                    298: /*&common
1.2       ohara     299:
1.6       ohara     300: int ox_cmo_rpc(ox_file_t sv, char *function, int argc, cmo *argv[]);
1.2       ohara     301:
1.7       ohara     302: */
                    303: /*&ja
1.2       ohara     304: function(argv[1], ...) を計算し、結果をスタックに積む。
                    305:
1.7       ohara     306: */
                    307: /*&ja
                    308: 3.10 Mathcap の受信
1.2       ohara     309:
1.7       ohara     310: */
                    311: /*&common
1.2       ohara     312: cmo_mathcap* ox_mathcap(ox_file_t sv);
                    313:
1.7       ohara     314: */
                    315: /*&ja
1.2       ohara     316: Mathcap を受け取る。現在は Mathcap の処理はユーザプログラムに任されている。
                    317: いずれこの関数は廃止される予定。
1.4       ohara     318: */
                    319: /*&ja
1.5       ohara     320:
1.2       ohara     321: 4. 低水準 API
1.1       ohara     322:
1.3       ohara     323: 低水準 API はファイルディスクリプタを直接利用する。
1.1       ohara     324:
1.3       ohara     325: 4.1 通信に使われるバイトオーダの決定
1.4       ohara     326: */
                    327: /*&en
1.5       ohara     328:
1.4       ohara     329: 4. Low-level API.
                    330:
1.5       ohara     331: In this section, ``fd'' is an identifier of an OpenXM connection.
                    332:
1.4       ohara     333: 4.1 How to decide a byte order of integers?
1.7       ohara     334:
1.4       ohara     335: */
                    336: /*&common
1.3       ohara     337: int decideByteOrderServer(int fd, int order);
                    338:
1.4       ohara     339: */
                    340: /*&ja
1.3       ohara     341: このツールキットは、サーバが開始されるときにはすでに通信路が設定されて
                    342: いるが、その通信路に用いるバイトオーダの決定は行われていないと仮定して
                    343: いる。詳しくは、高山-野呂, "OpenXM の設計と実装" を参照せよ。
                    344:
                    345: (注意) クライアント側でのバイトオーダの設定は、高水準 API で自動的に行われる。
1.5       ohara     346: */
                    347: /*&en
1.6       ohara     348: You need to call it when your OpenXM server is initialized.
                    349: This function always choose the network byte order
                    350: as an expression for integers.
1.4       ohara     351: */
                    352: /*&common
1.5       ohara     353:
1.3       ohara     354: 4.2
                    355:
1.7       ohara     356: */
                    357: /*&common
1.3       ohara     358: int send_int32(int fd, int integer);
1.5       ohara     359: int receive_int32(int fd);
1.3       ohara     360:
1.4       ohara     361: */
                    362: /*&ja
1.3       ohara     363: fd に 32bit 整数を書き込む。
1.5       ohara     364: fd から 32bit 整数を読み込む。
                    365: */
                    366: /*&en
                    367: send_int32() writes 32bits integer to an OpenXM connection.
                    368: receive_int32() reads 32bits integer from an OpenXM connection.
1.4       ohara     369: */
                    370: /*&common
1.3       ohara     371:
                    372: 4.3
                    373:
1.7       ohara     374: */
                    375: /*&common
1.3       ohara     376: int  send_cmo(int fd, cmo* m);
1.5       ohara     377: cmo* receive_cmo(int fd);
1.3       ohara     378:
1.4       ohara     379: */
                    380: /*&ja
1.3       ohara     381: fd に cmo を書き込む。
1.5       ohara     382: fd から cmo を読み込む。
                    383: */
                    384: /*&en
                    385: send_cmo() writes an CMObject to an OpenXM connection.
                    386: receive_cmo() reads an CMObject from an OpenXM connection.
1.4       ohara     387: */
                    388: /*&common
1.3       ohara     389:
                    390: 4.4
                    391:
1.7       ohara     392: */
                    393: /*&common
1.3       ohara     394: int next_serial();
                    395:
1.5       ohara     396: */
                    397: /*&ja
1.3       ohara     398: シリアルナンバを生成する。
1.5       ohara     399: */
                    400: /*&en
1.6       ohara     401: next_serial() generates a serial number for ox message.
1.5       ohara     402: */
                    403: /*&common
1.3       ohara     404:
                    405: 4.5
                    406:
1.7       ohara     407: */
                    408: /*&common
1.3       ohara     409: int  send_ox_tag(int fd, int tag);
                    410: int  receive_ox_tag(int fd);
                    411:
1.5       ohara     412: */
                    413: /*&ja
                    414: fd に OX メッセージのヘッダ(tag+serial#)を書き込む。シリアル番号は
                    415: 自動的に生成される。
                    416: fd から OX メッセージのヘッダ(tag+serial#)を読み込む。
                    417: */
                    418: /*&en
1.6       ohara     419: send_ox_tag() writes a tag and an automatically generated serial number
1.5       ohara     420: of an ox message to an OpenXM conection.
1.6       ohara     421: receive_ox_tag() reads a tag and a serial number of an ox message.
1.5       ohara     422: */
                    423: /*&common
1.3       ohara     424:
1.9       ohara     425: 4.6 Sending OX messages.
1.3       ohara     426:
1.7       ohara     427: */
                    428: /*&common
1.3       ohara     429: int  send_ox(int fd, ox* m);
                    430: int  send_ox_cmo(int fd, cmo* m);
                    431: void send_ox_command(int fd, int sm_command);
                    432:
1.5       ohara     433: */
                    434: /*&ja
1.9       ohara     435: OX メッセージを送信する。
1.6       ohara     436: */
                    437:
                    438: /*&ja
                    439:
                    440: 5. OX expression パーサ
                    441:
1.7       ohara     442: */
1.9       ohara     443: /*&en
                    444:
                    445: 5. Parser for OX expressions
                    446:
                    447: */
1.7       ohara     448: /*&ja
1.9       ohara     449: OpenXM C library には 文字列表現された OX expression および CMO
                    450: expression から、ox 構造体または cmo 構造体を生成するためのパーサが付
                    451: 属している。ここではこのパーサについて説明する。
                    452: */
                    453: /*&en
                    454: We have a parser which generate an OX object or a CMO from a string
                    455: encoded OX/CMO expression.  In this section, we explain the parser.
                    456: */
                    457: /*&en
1.6       ohara     458:
1.9       ohara     459: 5.1 Setting an option
                    460: */
                    461: /*&ja
1.6       ohara     462:
1.9       ohara     463: 5.1 オプション
1.7       ohara     464: */
                    465: /*&common
1.9       ohara     466:
1.6       ohara     467: int setflag_parse(int flag);
                    468:
1.7       ohara     469: */
                    470: /*&ja
1.6       ohara     471: setflag_parse(PFLAG_ADDREV) によって、CMO の短縮表現を許す。
1.9       ohara     472: */
                    473: /*&en
                    474: We set an option for the parser.  If we call
                    475: setflag_parse(PFLAG_ADDREV), then the parser admits external
                    476: expressios.
                    477: */
                    478: /*&en
1.6       ohara     479:
1.9       ohara     480: 5.2 Initializing
                    481: */
                    482: /*&ja
                    483:
                    484: 5.2 初期化
1.7       ohara     485: */
                    486: /*&common
1.9       ohara     487:
1.6       ohara     488: int init_parser(char *str);
                    489:
1.7       ohara     490: */
                    491: /*&ja
1.6       ohara     492: パーサが処理すべき文字列をセットする。
1.9       ohara     493: */
                    494: /*&en
                    495: We give the parser an OX/CMO expression, that is, a Lisp style string.
                    496: */
                    497: /*&en
1.6       ohara     498:
1.9       ohara     499: 5.3 Getting an object
                    500: */
                    501: /*&ja
                    502:
                    503: 5.3 結果を得る
1.7       ohara     504: */
                    505: /*&common
1.9       ohara     506:
1.6       ohara     507: cmo *parse();
                    508:
1.7       ohara     509: */
                    510: /*&ja
1.6       ohara     511: Lisp 表現による OX expression, CMO expression の構文解析器。あらかじめ
                    512: 設定された文字列を解析して ox 構造体、あるいは cmo 構造体を生成する。
                    513: */
1.9       ohara     514: /*&en
                    515: The parser returns an OX/CMO object.  If the given string is illegal,
                    516: then the parser returns NULL.
                    517: */
1.6       ohara     518: /*&ja
                    519:
                    520: 7. 付属プログラムについて
                    521:
1.7       ohara     522: */
                    523: /*&en
                    524:
                    525: 7. Sample programs.
                    526:
                    527: */
                    528: /*&common
1.6       ohara     529: testclient
                    530:
1.7       ohara     531: */
                    532: /*&ja
1.6       ohara     533: テスト用の小さな OpenXM クライアント。OX expression を入力して送信する
                    534: ことのみ可能。SM_popCMO, SM_popString を含むメッセージを送信した場合に
                    535: は、サーバから送られてくるメッセージを表示する。
                    536:
1.7       ohara     537: */
                    538: /*&en
                    539: This is a small OpenXM client.  We send an OX message by inputting an
                    540: OX expression and display data messages gotten from a server.
                    541:
                    542: */
                    543: /*&common
1.6       ohara     544: bconv
                    545:
1.7       ohara     546: */
                    547: /*&ja
1.6       ohara     548: バイトコードエンコーダ。OX expression あるいは CMO expression を入力す
                    549: ると、対応するバイト列を表示する。
                    550:
1.7       ohara     551: */
                    552: /*&en
                    553: A byte code encoder.  It shows a byte stream which corresponds to an
                    554: OX expression.
                    555:
1.9       ohara     556: */
1.7       ohara     557: /*&common
1.6       ohara     558: ox_Xsample
                    559:
1.7       ohara     560: */
                    561: /*&ja
1.6       ohara     562: GUI 表示する OpenXM サーバのサンプル。
                    563:
                    564: */
1.8       ohara     565: /*&ja
                    566: 8. 付録
                    567:
                    568: 8.1 ox.c における関数の命名規則
                    569:
                    570: (1) receive_cmo 関数はCMOタグとデータ本体を受信する. この関数は CMOタ
                    571: グの値が事前に分からないときに使用する. 返り値として、cmo へのポインタ
                    572: を返す.
                    573: (2) receive_cmo_X 関数は, CMOタグを親の関数で受信してから呼び出される
                    574: 関数で、データ本体のみを受信し、cmo_X へのポインタを返す.  しかも、関
                    575: 数内部で new_cmo_X 関数を呼び出す.
                    576: (3) send_cmo 関数はCMOタグとデータ本体を送信する.
                    577: (4) send_cmo_X 関数はCMOタグを親の関数で送信してから呼び出される関数で、
                    578: データ本体のみを送信する.
                    579: (5) ただし receive_ox_tag を除いて, receive_ox_X 関数は作らない.
                    580: receive_cmo を利用する.
                    581: (6) send_ox_X 関数は OX タグを含めて送信する.
                    582: (7) ox_X 関数は一連の送受信を含むより抽象的な操作を表現する.  ox_X 関
                    583: 数は、第一引数として、ox_file_t型の変数 sv をとる.
                    584: (8) Y_cmo 関数と Y_cmo_X 関数の関係は次の通り:
                    585: まず Y_cmo 関数で cmo のタグを処理し、タグを除いた残りの部分をY_cmo_X
                    586: 関数が処理する.  cmo の内部に cmo_Z へのポインタがあるときには、その種
                    587: 類によらずに Y_cmo 関数を呼び出す.
                    588:
                    589: */
                    590:

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