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>