Windows版 OpenXM

Windows版 OpenXM
高山信毅 (神戸大学)、2002.3.18
[email protected]
OX-RFC-100
http://www.openxm.org
Noro, Takayama (1997—2000), Ohara, Okutani,Tamura
• データ構造(数、多項式、リスト、文字列)
• Stackmachine API
• コントロール&エンジンモデル
[713] print_ox_rfc100_xml_form(x^2);
<cmo_recursive_polynomial>
<cmo_list><cmo_int32 for="length">1 </cmo_int32>
<cmo_string>"x"</cmo_string>
</cmo_list>
<cmo_polynomial_in_one_variable><cmo_int32 for="number of
terms">1</cmo_int32>
<cmo_int32 for="variable name">0</cmo_int32>
<cmo_int32 for="exponent">2</cmo_int32>
</cmo_polynomial_in_one_variable>
</cmo_recursive_polynomial>
<cmo_zz>1</cmo_zz>
[718] ox_rpc(fctr,x^2-1);
0
[719] ox_pop_cmo(0);
error([12,executeFunction : invalid function name])
[720] ox_rpc(0,"fctr",x^2-1);
0
[721] ox_pop_cmo(0);
[[1,1],[x-1,1],[x+1,1]]
[722]
OX-RFC100 Control&Engineモ
デルの実装
• Thread, event driven (Omproxy.java 田村
(2000)、 asirgui 野呂(1998?))  unix用
ソースコードの大幅な書き換えが必要、保
守が大変
• Unix signal  Windowsでは使えない
 cygwin (cygwin1.dll) の利用、 unix
のソースコードの変更が最小限ですみ保
守が容易
Setjmp,longjmp
• Setjmp
• Longjmp
•
•
•
•
•
•
#if defined(__CYGWIN__)
#define SETJMP(b) sigsetjmp(b,~0)
#else
#define SETJMP(b) setjmp(b)
#endif
Siglongjmp
system
• system
• Sh を起動できない
• Fork & exec
プログラムの起動
• Xterm が使えない  start で代用
• パス名の混乱 (\OpenXM\bin\ox,
/OpenXM/bin/ox, c:/OpenXM/bin/ox,
/cygdrive/c/OpenXM/bin/ox)
• cygwin 環境での起動とWindows環境での
起動での動作の違い
• 環境変数の扱い
• Cppがない  oxpp
/asirconnectr {
[(getenv) (OSTYPE)] extension tag 0 eq {
asirconnectr_win
}{
[(getenv) (OSTYPE)] extension (cygwin) eq
{
asirconnectr_cygwin
}{
asirconnectr_win
}ifelse
} ifelse
} def
成果と課題
• Asir-contrib の多くのコマンドがWindowsで
も動作するようになった(雑用)
• WebAsir の実験(まだ遊び)
• 起動をきれいに行うためには broker-like
な仕組みが必要であることがよくわかった。
(OX-RFC101(小原)、Javaでの起動(田
村)  発展版が必要)
Asir-Contrib(2002,1.2.1)
• Sm1, gnuplot, phc, tigers, om,math,dsolv
(2000, 1.1.1)
• Base
• Print (xdvi, tex,xml,…)
• Matrix (okutani lib)
• Poly, …
Document generation system
•
•
•
•
Weave,tangle(Knuth, 1980’s), javadoc (1990’s)
Gentexi (特に新しいアイディアなし  雑用)
/*&usage begin: base_cancel(S)
It simplifies {S} by canceling the common factors
of
• denominators and numerators.
• example: base_cancel([(x-1)/(x^2-1), (x-1)/(x^31)]);
• end: */
参考ソースコード
•
•
•
•
•
OpenXM/src/asir-contrib
OpenXM/misc/packages/Windows
OpenXM/src/kan96xx/lib/*win*
OpenXM/src/kan96xx/lib/httpd.sm1
#defined(__CYGWIN__)
OpenXM_contrib2/asir2000,
OpenXM/src/kan96xx/Kan
• 参考記事:Cygwin、藤枝和宏(unixマガジン、20
00、11月号よりの連載