[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
ox_launch
, ox_launch_nox
, ox_shutdown
:: 遠隔プロセスの起動および通信を開始する.
:: 遠隔プロセスを終了させ, 通信を終了する.
整数
文字列または 0
文字列
整数
ox_launch()
は, ホスト host 上でコマンド command を起動し,
このプロセスと通信を開始する.
引数が 3 つの場合, host 上で,
dir にある ‘ox_launch’ というサーバ起動用プログラムを立ち上げる.
‘ox_launch’ は command を起動する.
host が 0 の時, Asir が動作している
マシン上でコマンドを起動する.
無引数の場合, host は 0, dir は get_rootdir()
で返されるディレクトリ, command は同じディレクトリの ‘ox_asir’
を意味する.
get_rootdir()
で返される
ディレクトリとなる.
ox_launch()
は, command の標準出力, 標準
エラー出力を表示するための ‘xterm’ を起動する.
ox_launch_nox()
は, X
なしの環境の場合, あるいは ‘xterm’
を起動せずにサーバを立ち上げる場合に用いる. この場合,
command の出力は ‘/dev/null’ に接続される.
ox_launch()
の場合でも, 環境変数 DISPLAY
が設定されていない
場合には, ox_launch_nox()
と同じ動作をする.
A
, 通信相手のプロセス
が起動されるホストを B
とする.
B
の ‘~/.rhosts’ に, ホスト A
のホスト
名を登録する.
X
とのコネクションも用いられる場合,
Xserver
に対し, 必要なホストを authorize させる.
xhost
で必要なホスト名を追加すればよい.
limit stacksize 16m
などと指定する.
DISPLAY
の値を用いる.
ASIR_RSH
がセットされている場合, サーバの立ち上げプログラム
として‘rsh’ の代わりにこの変数の値が用いられる. 例えば,
% setenv ASIR_RSH "ssh -f -X -A "
により, サーバの立ち上げに ‘ssh’ が用いられ, X11 の通信が forwarding される. 詳しくは ‘ssh’ のマニュアルを 参照.
ox_shutdown()
は識別子 id に対応する遠隔プロセス
を終了させる.
ps
などを起動して, もし Asir から起動
したプロセスが残っている場合, kill
する必要がある.
ox_xterm*iconic:on ox_xterm*scrollBar:on ox_xterm*saveLines:1000
により, icon で起動, scrollbar つき, scrollbar で参照できる行数 が最大 1000 行, という指定ができる.
[219] ox_launch(); 0 [220] ox_rpc(0,"fctr",x^10-y^10); 0 [221] ox_pop_local(0); [[1,1],[x^4+y*x^3+y^2*x^2+y^3*x+y^4,1], [x^4-y*x^3+y^2*x^2-y^3*x+y^4,1],[x-y,1],[x+y,1]] [222] ox_shutdown(0); 0
ox_rpc
, ox_cmo_rpc
, ox_execute_string
,
ox_pop_cmo
, ox_pop_local
,
ifplot
, conplot
, plot
, polarplot
, plotover
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
ox_launch_generic
:: 遠隔プロセスの起動および通信を開始する.
整数
文字列または 0
文字列
整数
ox_launch_generic()
は,
ホスト host 上で, コントロールプロセス launch および
サーバプロセス server を起動する. その他の引数は, 使用する
protocol の種類, X の使用/不使用, rsh/ssh によるプロセス起動, connect
方法の指定などを行うスイッチである.
[342] LIB=get_rootdir(); /export/home/noro/ca/Kobe/build/OpenXM/lib/asir [343] ox_launch_generic(0,LIB+"/ox_launch",LIB+"/ox_asir",0,0,0,0); 1 [344] ox_launch_generic(0,LIB+"/ox_launch",LIB+"/ox_asir",1,0,0,0); 2 [345] ox_launch_generic(0,LIB+"/ox_launch",LIB+"/ox_asir",1,1,0,0); 3 [346] ox_launch_generic(0,LIB+"/ox_launch",LIB+"/ox_asir",1,1,1,0); 4 [347] ox_launch_generic(0,LIB+"/ox_launch",LIB+"/ox_asir",1,1,1,1); 5 [348] ox_launch_generic(0,LIB+"/ox_launch",LIB+"/ox_asir",1,1,0,1); 6
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
generate_port
, try_bind_listen
, try_connect
, try_accept
, register_server
:: port の生成
:: port に対して bind, listen
:: port に対して connect
:: connect 要求を accept
:: connection の成立した control socket, server socket の登録
generate_port()
のみ整数または文字列. その他は整数.
0 または 1
文字列
整数または文字列
整数
generate_port()
は通信のための port を生成する. 無引数あるいは
引数が 0 の場合, Internet domain の socket のための port 番号, それ
以外の場合には, UNIX domain (host-internal protocol) のための, ファイル名
を生成する. port 番号は random に生成されるが, その port が使用中でない
保証はない.
try_bind_listen()
は, 与えられた port に対し, その protocol に
対応した socket を生成し, bind, listen する. 成功した場合,
socket 識別子を返す. 失敗した場合, -1 が返る.
try_connect()
は, ホスト host の port port に対し
connect を試みる. 成功した場合, socket 識別子を返す. 失敗した場合 -1 が返る.
try_accept()
は, socket に対する connect 要求を accept
し, 新たに生成された socket を返す. 失敗した場合 -1 が返る.
いずれの場合にも, socket は自動的に close される.
引数 port は, socket の protocol を判別するために与える.
register_server()
は, control, server それぞれの socket を
一組にして, server list に登録し, ox_push_cmo()
などで用いる
プロセス識別子を返す.
shell()
または手動で行う.
[340] CPort=generate_port(); 39896 [341] SPort=generate_port(); 37222 [342] CSocket=try_bind_listen(CPort); 3 [343] SSocket=try_bind_listen(SPort); 5 /* ここで, ox_launch を起動 : % ox_launch "127.1" 0 39716 37043 ox_asir "shio:0" */ [344] CSocket=try_accept(CSocket,CPort); 6 [345] SSocket=try_accept(SSocket,SPort); 3 [346] register_server(CSocket,CPort,SSocket,SPort); 0
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
‘ox_asir’ は, Asir のほぼ全ての機能を OpenXM サーバ
として提供する.
‘ox_asir’ は, ox_launch
または ox_launch_nox
で
起動する. 後者は X 環境を用いない場合のために用意されている.
[5] ox_launch(); 0
[5] ox_launch_nox("127.0.0.1","/usr/local/lib/asir", "/usr/local/lib/asir/ox_asir"); 0
[7] RemoteLibDir = "/usr/local/lib/asir/"$ [8] Machines = ["sumire","rokkaku","genkotsu","shinpuku"]; [sumire,rokkaku,genkotsu,shinpuku] [9] Servers = map(ox_launch,Machines,RemoteLibDir, RemoteLibDir+"ox_asir"); [0,1,2,3]
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
ox_rpc
, ox_cmo_rpc
, ox_execute_string
"func"
,arg0,...)"func"
,arg0,...)"command"
,...):: プロセスの函数呼び出し
0
数 (プロセス識別子)
函数名
文字列
任意 (引数)
ox_rpc()
は, サーバが ‘ox_asir’ の場合のみ用いることができる.
それ以外の場合は, ox_cmo_rpc()
を用いる.
ox_pop_local()
, ox_pop_cmo()
により取り出す.
ox_execute_string
は, 送った文字列 command をサーバが自らの
ユーザ言語パーザで解析し, 評価した結果をサーバのスタックに置くように
指示する.
[234] ox_cmo_rpc(0,"dp_ht",dp_ptod((x+y)^10,[x,y])); 0 [235] ox_pop_cmo(0); (1)*<<10,0>> [236] ox_execute_string(0,"12345 % 678;"); 0 [237] ox_pop_cmo(0); 141
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
ox_reset
,ox_intr
,register_handler
:: プロセスのリセット
:: プロセスのに SIGINT
送付
:: プロセスのリセットのための関数登録
1
数 (プロセス識別子)
関数子または 0
ox_reset()
は, 識別子 number のプロセスをリセットし, コマン
ド受け付け状態にする.
ox_intr()
は, 識別子 number のプロセスをに対して
SIGINT
を送付する. SIGINT
に対するプロセスの動作は
規定されていないが, ‘ox_asir’ の場合, ただちに debug mode に
入る. X 上で動作している場合, デバッグコマンド入力用のウィンドウが
ポップアップする.
register_handler()
は, C-c などによる割り込みの際に,
u を指定することで, 無引数ユーザ定義関数 func() が呼び出される
ように設定する. この関数に, ox_reset()
を呼び出させることで,
割り込みの際に自動的に OpenXM server のリセットを行うことができる.
[10] ox_launch(); 0 [11] ox_rpc(0,"fctr",x^100-y^100); 0 [12] ox_reset(0); /* xterm のウィンドウには */ 1 /* usr1 : return to toplevel by SIGUSR1 が表示される. */
[340] Procs=[ox_launch(),ox_launch()]; [0,1] [341] def reset() { extern Procs; map(ox_reset,Procs);} [342] map(ox_rpc,Procs,"fctr",x^100-y^100); [0,0] [343] register_handler(reset); 1 [344] interrupt ?(q/t/c/d/u/w/?) u Abort this computation? (y or n) y Calling the registered exception handler...done. return to toplevel
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
ox_push_cmo
, ox_push_local
:: obj を識別子 number のプロセスに送信
0
数(プロセス識別子)
オブジェクト
ox_push_cmo
は, Asir 以外の Open_XM サーバに送信
する際に用いる.
ox_push_local
は, ‘ox_asir’, ‘ox_plot’ に
データを送る場合に用いることができる.
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
ox_pop_cmo
, ox_pop_local
:: プロセス識別子 number からデータを受信する.
受信データ
数 (プロセス識別子)
ox_pop_cmo
は, Asir 以外の Open_XM サーバから受信
する際に用いる.
ox_pop_local
は, ‘ox_asir’, ‘ox_plot’ から
データを受け取る場合に用いることができる.
ox_push_cmd
で SM_popCMO
(262) または SM_popSerializedLocalObject
(258) を送っておき, ox_select
でプロセスが ready
になっていることを確かめてから ox_get
すればよい.
[341] ox_cmo_rpc(0,"fctr",x^2-1); 0 [342] ox_pop_cmo(0); [[1,1],[x-1,1],[x+1,1]] [343] ox_cmo_rpc(0,"newvect",3); 0 [344] ox_pop_cmo(0); error([41,cannot convert to CMO object]) [345] ox_pop_local(0); [ 0 0 0 ]
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
ox_push_cmd
, ox_sync
:: プロセス識別子 number のプロセスにコマンド command を送信する.
:: プロセス識別子 number のプロセスに OX_SYNC_BALL を送信する.
0
数 (プロセス識別子)
数 (コマンド識別子)
ox_reset
による計算中断, 復帰の際に送受信される
が, これを個別に送りたい場合に用いる. なお, 通常状態では OX_SYNC_BALL
は無視される.
[3] ox_rpc(0,"fctr",x^100-y^100); 0 [4] ox_push_cmd(0,258); 0 [5] ox_select([0]); [0] [6] ox_get(0); [[1,1],[x^2+y^2,1],[x^4-y*x^3+y^2*x^2-y^3*x+y^4,1],...]
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
ox_get
:: プロセス識別子 number のプロセスからデータを受信する.
受信データ
数(プロセス識別子)
ox_push_cmd
と組み合わせて用いる.
ox_pop_cmo
, ox_pop_local
は, ox_push_cmd
と
ox_get
の組み合わせで実現されている.
[11] ox_push_cmo(0,123); 0 [12] ox_push_cmd(0,262); /* 262=OX_popCMO */ 0 [13] ox_get(0); 123
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
ox_pops
:: プロセス識別子 number のプロセスのスタックからデータを取り除く.
0
数 (プロセス識別子)
自然数
[69] for(I=1;I<=10;I++)ox_push_cmo(0,I); [70] ox_pops(0,4); 0 [71] ox_pop_cmo(0); 6
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
ox_select
:: 読み出し可能なプロセスの識別子を返す.
リスト
数 (子プロセス識別子) のリスト
数
ox_push_cmd()
で SM_popCMO
あるいは
SM_popSerializedLocalObject
を送っておき, ox_select()
で
ready 状態のプロセスを調べてox_get()
することで,
ox_pop_local()
, ox_pop_cmo()
で待ち状態に入るのを防ぐことが
できる.
ox_launch(); 0 [220] ox_launch(); 1 [221] ox_launch(); 2 [222] ox_rpc(2,"fctr",x^500-y^500); 0 [223] ox_rpc(1,"fctr",x^100-y^100); 0 [224] ox_rpc(0,"fctr",x^10-y^10); 0 [225] P=[0,1,2]; [0,1,2] [226] map(ox_push_cmd,P,258); [0,0,0] [227] ox_select(P); [0] [228] ox_get(0); [[1,1],[x^4+y*x^3+y^2*x^2+y^3*x+y^4,1], [x^4-y*x^3+y^2*x^2-y^3*x+y^4,1],[x-y,1],[x+y,1]]
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
ox_flush
:: 送信バッファの強制 flush
1
子プロセス識別子
"ctrl"
コマンドの "ox_batch"
スイッチ
で on/off できる.
ctrl("ox_batch",1)
でバッチモードを on にすると, バッファがいっぱいになった場合にのみ flush
されるため, overhead が小さくなる場合がある. ただしこの場合には, 最後に
ox_flush(id)
を実行して, バッファを強制的に flush する必要が
ある.
ox_pop_cmo
, ox_pop_local
のように, コマンド送信後
ただちにデータ待ちに入る関数がハングしないよう, これらの関数の内部では
強制 flush が実行されている.
[340] ox_launch_nox(); 0 [341] cputime(1); 0 7e-05sec + gc : 4.8e-05sec(0.000119sec) [342] for(I=0;I<10000;I++)ox_push_cmo(0,I); 0.232sec + gc : 0.006821sec(0.6878sec) [343] ctrl("ox_batch",1); 1 4.5e-05sec(3.302e-05sec) [344] for(I=0;I<10000;I++)ox_push_cmo(0,I); ox_flush(0); 0.08063sec + gc : 0.06388sec(0.4408sec) [345] 1 9.6e-05sec(0.01317sec)
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
ox_get_serverinfo
:: server の Mathcap, 動作中のプロセス識別子の取得
リスト
子プロセス識別子
[343] ox_get_serverinfo(0); [[199909080,Ox_system=ox_sm1.plain,Version=2.991118,HOSTTYPE=FreeBSD], [262,263,264,265,266,268,269,272,273,275,276], [[514],[2130706434,1,2,4,5,17,19,20,22,23,24,25,26,30,31,60,61,27, 33,40,16,34]]] [344] ox_get_serverinfo(); [[0,[[199909080,Ox_system=ox_sm1.plain,Version=2.991118, HOSTTYPE=FreeBSD], [262,263,264,265,266,268,269,272,273,275,276], [[514],[2130706434,1,2,4,5,17,19,20,22,23,24,25,26,30,31,60,61,27,33, 40,16,34]]]], [1,[[199901160,ox_asir], [276,275,258,262,263,266,267,268,274,269,272,265,264,273,300,270,271], [[514,2144202544], [1,2,3,4,5,2130706433,2130706434,17,19,20,21,22,24,25,26,31,27,33,60], [0,1]]]]]
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
ifplot
, conplot
, plot
, polarplot
, plotover
:: 2 変数関数の実数上での零点を表示する.
:: 2 変数関数の実数上での等高線を表示する.
:: 1 変数関数のグラフを表示する.
:: 極形式で与えられた曲線を表示する.
:: すでに存在しているウィンドウへ描画する.
整数
多項式
リスト
整数
文字列
ifplot()
は, 2 変数関数 func の実数上での零点の
グラフの表示を行う. conplot()
は, 同様の引数に対し,
等高線の表示を行う.
plot()
は 1 変数関数のグラフの表示を行う.
polarplot()
は 極形式 r=f(theta) で表された曲線のグラフの表示を行う.
ox_launch_nox()
が自動的に実行されて, ‘ox_plot’ が
立ち上がり, それが用いられる.
ウィンドウのサイズをドット単位で [x,y] で指定する.
([300
,300
]. )
変数の範囲の指定で, [v,vmin,vmax] で指定する.
(いずれの変数も [v,-2
,2
].)
この指定がない場合, func に含まれる変数の内変数順序の上の変数
が ‘x’, 下の変数が ‘y’ として扱われる. これを避けるためには
xrange, yrange を指定する. また, func が 1 変数の
場合, これらの指定は必須となる.
conplot()
の場合のみ指定できる. 形式は
[v,vmin,vmax [
,step ]
] で, step が指定され
た場合には, 等高線の間隔が (vmax-vmin)/step となる.
([z,-2
,2
,16
].)
遠隔プロセスの番号, すなわち ox_launch()
が返した番号を指定する.
(一番最近に作られ, かつアクティブなプロセスに対応する番号.)
ウィンドウの名前. (Plot
.)
生成されたウィンドウのタイトルは name:n/m となる.
これは, プロセス番号 n のプロセスの, m 番のウィンドウを意味する.
この番号は, plotover()
で用いられる.
plotover()
は, 指定したウィンドウ上に, 引数である 2 変数多項式の
零点を上書きする.
precise
が on の場合,
選択した領域が同一 window 上で書き直される.
conplot()
で生成したウィンドウにおいて, ウィンドウの右側のマーカを
中ボタンでドラッグすると, 対応する等高線の色が変わり, 右上の
ウィンドウに対応するレベルが表示される.
quit
window を破壊する. 計算を中断する場合, ox_reset()
を用いる.
wide (トグル)
現在の表示部分を縦横各 10 倍した領域を表示する. 現在表示されている範囲は この表示において中央部に長方形で示される. この表示で範囲指定を行うと, その範囲が新しいウィンドウに描画される.
precise (トグル)
選択領域を, 整数演算により, より正確に再描画する. これは, func が 有理数係数の 2 変数多項式の場合にのみ有効である. このモードでは Sturm 列 と二分法により, 区間内の零点の個数を正確に求めていくもので, デフォルトの 計算法よりも正確な描画が期待できる. ただし, 描画時間は余計にかかる場合が 多い. この説明から明らかなように, この機能は有理数係数の多項式の描画に対 してのみ有効である. ((x^2+y^2-1)^2 の描画で試してみよ.)
formula
対応する式を表示する.
noaxis (トグル)
座標軸を消す.
limit stacksize 16m
などと指定する.
X
では、ウインドウの各部分について resource により
色付けや、ボタンの形を変えることができる。
resource の指定の仕方は以下の通り。(デフォルトを示しておく)
plot*form*shapeStyle
は、rectangle, oval, ellipse, roundedRectangle
が、指定できる。
plot*background:white plot*form*shapeStyle:rectangle plot*form*background:white plot*form*quit*background:white plot*form*wide*background:white plot*form*precise*background:white plot*form*formula*background:white plot*form*noaxis*background:white plot*form*xcoord*background:white plot*form*ycoord*background:white plot*form*level*background:white plot*form*xdone*background:white plot*form*ydone*background:white
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
open_canvas
, clear_canvas
, draw_obj
, draw_string
:: 描画用ウィンドウ (キャンバス) を生成する.
:: キャンバスをクリアする.
:: キャンバス上に点または線分を描画する.
:: キャンバス上に文字列を描画する.
0
整数
リスト
文字列
open_canvas
は, 描画用のウィンドウ(キャンバス)を生成する.
geometry によりウィンドウのサイズを pixel 単位で [x,y] で指定する.
default size は [300
,300
].
キャンバスの識別子として, 整数値を OpenXM サーバのスタックに push する.
この識別子は draw_obj
の呼び出しに必要であり, ox_pop_cmo
に
より取り出して保持する必要がある.
clear_canvas
は, サーバ id id, キャンバス id index
で指定されるキャンバスをクリアする.
draw_obj
は, サーバ id id, キャンバス id index
で指定されるキャンバスに点または線分を描画する. pointorsegment
が [x,y] の場合点の座標, [x,y,u,v] の場合 [x,y],
[u,v] を結ぶ線分を表すと見なされる.
キャンバスの座標は, 左上隅を原点として横方向に
第一座標, 縦方向に第二座標をとる. 値は pixel 単位で指定する.
color の指定がある場合, color/65536 mod 256,
color/256 mod 256, color mod 256 をそれぞれ Red, Green, Blue
の値 (最大 255) とみなす.
draw_string
は, サーバ id id, キャンバス id index
で指定されるキャンバスに文字列を描画する. 位置は [x,y] により指定する.
[182] Id=ox_launch_nox(0,"ox_plot"); 0 [183] open_canvas(Id); 0 [184] Ind=ox_pop_cmo(Id); 0 [185] draw_obj(Id,Ind,[100,100]); 0 [186] draw_obj(Id,Ind,[200,200],0xffff); 0 [187] draw_obj(Id,Ind,[10,10,50,50],0xff00ff); 0 [187] draw_string(Id,Ind,[100,50],"hello",0xffff00); 0 [189] clear_canvas(Id,Ind); 0
ox_launch
, ox_launch_nox
, ox_shutdown
, ox_reset
,ox_intr
,register_handler
, ox_pop_cmo
, ox_pop_local
.
[ << ] | [ < ] | [上] | [ > ] | [ >> ] |
この文書は12月 21, 2024にtexi2html 5.0を用いて生成されました。