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>