Annotation of OpenXM/src/ox_toolkit/README, Revision 1.5
1.1 ohara 1: # Author: 小原功任 @ 金沢大学理学部計算科学教室
2: # URI: http://omega.s.kanazawa-u.ac.jp/ohara/
1.5 ! ohara 3: # $OpenXM: OpenXM/src/ox_toolkit/README,v 1.4 1999/12/15 08:04:50 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 コマンドの送信
1.4 ohara 193: */
194: /*&en
195: 3.3 How to command to OpenXM stack machine?
196: */
197: /*&common
1.5 ! ohara 198:
1.2 ohara 199: void ox_push_cmd(ox_file_t sv, int sm_code);
200:
1.4 ohara 201: */
202: /*&ja
1.2 ohara 203: サーバにスタックマシンコマンドを送る。コマンドはコマンド番号で与える。
1.4 ohara 204: */
205: /*&en
1.5 ! ohara 206: ox_push_cmd() sends an operation code to an OpenXM stack machine.
1.4 ohara 207: Table of opecode is defined in oxtag.h.
208: */
209: /*&ja
1.5 ! ohara 210:
1.2 ohara 211: 3.4 CMO の送受信
212:
213: void ox_push_cmo(ox_file_t sv, cmo *c);
214: cmo* ox_pop_cmo(ox_file_t sv);
215: char* ox_popString(ox_file_t sv);
216:
217: ox_push_cmo は cmo を送信、ox_pop_cmo は cmo を受信する。ox_popString
218: は cmo を文字列形式に変換して受信するが、変換の結果はサーバによって異
219: なる。
220:
221: 3.5 スタック処理
222:
223: int ox_pops(ox_file_t sv, int num);
224:
225: スタック上の num 個のオブジェクトを廃棄する。
226:
227: 3.6
228:
229: int ox_flush(ox_file_t sv);
230:
231: 通信路を flush する(実際には何もしない)。
232:
233: 3.7
234:
235: void ox_reset(ox_file_t sv);
236:
237: 計算を中断する。
238:
239: 3.8
240:
241: void ox_execute_string(ox_file_t sv, char* str);
242:
243: サーバのローカル言語で書かれた命令を評価し、結果をスタックに積む。
244:
245: 3.9
246:
247: int ox_cmo_rpc(ox_file_t sv, char *function, int argc, cmo *argv[]);
248:
249: function(argv[1], ...) を計算し、結果をスタックに積む。
250:
251: 3.10
252:
253: cmo_mathcap* ox_mathcap(ox_file_t sv);
254:
255: Mathcap を受け取る。現在は Mathcap の処理はユーザプログラムに任されている。
256: いずれこの関数は廃止される予定。
1.4 ohara 257: */
258: /*&ja
1.5 ! ohara 259:
1.2 ohara 260: 4. 低水準 API
1.1 ohara 261:
1.3 ohara 262: 低水準 API はファイルディスクリプタを直接利用する。
1.1 ohara 263:
1.3 ohara 264: 4.1 通信に使われるバイトオーダの決定
1.4 ohara 265: */
266: /*&en
1.5 ! ohara 267:
1.4 ohara 268: 4. Low-level API.
269:
1.5 ! ohara 270: In this section, ``fd'' is an identifier of an OpenXM connection.
! 271:
1.4 ohara 272: 4.1 How to decide a byte order of integers?
273: */
274: /*&common
1.5 ! ohara 275:
1.3 ohara 276: int decideByteOrderServer(int fd, int order);
277:
1.4 ohara 278: */
279: /*&ja
1.3 ohara 280: このツールキットは、サーバが開始されるときにはすでに通信路が設定されて
281: いるが、その通信路に用いるバイトオーダの決定は行われていないと仮定して
282: いる。詳しくは、高山-野呂, "OpenXM の設計と実装" を参照せよ。
283:
284: (注意) クライアント側でのバイトオーダの設定は、高水準 API で自動的に行われる。
1.5 ! ohara 285: */
! 286: /*&en
! 287: You must call it when your OpenXM server is initialized.
! 288: This function always choose the network byte order for integers.
1.4 ohara 289: */
290: /*&common
1.5 ! ohara 291:
1.3 ohara 292: 4.2
293:
294: int send_int32(int fd, int integer);
1.5 ! ohara 295: int receive_int32(int fd);
1.3 ohara 296:
1.4 ohara 297: */
298: /*&ja
1.3 ohara 299: fd に 32bit 整数を書き込む。
1.5 ! ohara 300: fd から 32bit 整数を読み込む。
! 301: */
! 302: /*&en
! 303: send_int32() writes 32bits integer to an OpenXM connection.
! 304: receive_int32() reads 32bits integer from an OpenXM connection.
1.4 ohara 305: */
306: /*&common
1.3 ohara 307:
308: 4.3
309:
310: int send_cmo(int fd, cmo* m);
1.5 ! ohara 311: cmo* receive_cmo(int fd);
1.3 ohara 312:
1.4 ohara 313: */
314: /*&ja
1.3 ohara 315: fd に cmo を書き込む。
1.5 ! ohara 316: fd から cmo を読み込む。
! 317: */
! 318: /*&en
! 319: send_cmo() writes an CMObject to an OpenXM connection.
! 320: receive_cmo() reads an CMObject from an OpenXM connection.
1.4 ohara 321: */
322: /*&common
1.3 ohara 323:
324: 4.4
325:
326: int next_serial();
327:
1.5 ! ohara 328: */
! 329: /*&ja
1.3 ohara 330: シリアルナンバを生成する。
1.5 ! ohara 331: */
! 332: /*&en
! 333: next_serial() generates serial number for ox message.
! 334: */
! 335: /*&common
1.3 ohara 336:
337: 4.5
338:
339: int send_ox_tag(int fd, int tag);
340: int receive_ox_tag(int fd);
341:
1.5 ! ohara 342: */
! 343: /*&ja
! 344: fd に OX メッセージのヘッダ(tag+serial#)を書き込む。シリアル番号は
! 345: 自動的に生成される。
! 346: fd から OX メッセージのヘッダ(tag+serial#)を読み込む。
! 347: */
! 348: /*&en
! 349: send_ox_tag() writes a tag and automatically generated serial number
! 350: of an ox message to an OpenXM conection.
! 351: receive_ox_tag() reads a tag and serial number of an ox message.
! 352: */
! 353: /*&common
1.3 ohara 354:
355: 4.6
356:
357: int send_ox(int fd, ox* m);
358: int send_ox_cmo(int fd, cmo* m);
359: void send_ox_command(int fd, int sm_command);
360:
1.5 ! ohara 361: */
! 362: /*&ja
1.3 ohara 363: ox メッセージを送信する。
1.4 ohara 364: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>