version 1.5, 1999/11/11 01:35:07 |
version 1.32, 2004/02/24 00:45:33 |
|
|
%%%%%%%%%%% $OpenXM: OpenXM/src/kan96xx/Doc/ox.sm1,v 1.4 1999/11/04 12:08:43 takayama Exp $ |
%%%%%%%%%%% $OpenXM: OpenXM/src/kan96xx/Doc/ox.sm1,v 1.31 2004/02/05 03:04:40 takayama Exp $ |
%%%%%%%%%%%% Configuration: Specify your server path |
|
%%%%% ox, ox_sm1, oxlog are contained in kxx.tgz |
|
%%%%% These should be under /usr/local/lib/sm1 or LOAD_SM1_PATH |
|
/oxpath.ox (bin/ox) def |
|
/oxpath.oxsm1 (bin/ox_sm1) def |
|
/oxpath.oxlog (bin/oxlog) def |
|
/oxpath.xterm (/usr/X11R6/bin/xterm -icon -e ) def |
|
/oxpath.null ( ) def |
|
/oxpath.null00 ( >& /dev/null ) def %%cf. oxNoX |
|
/oxpath.null00-pure-sh ( 2>&1 >/dev/null) def %%TODO:It does not work in our case |
|
%%%%%%%%%%%%% The following is used only for sm1connectr-ssh. |
|
%%%%%%%%%%%%% Configure path for ox and ox_sm1 on your remote machine. |
|
/oxpath.oxlog.xterm-ssh (/home/taka/OpenXM/bin/oxlog /usr/X11R6/bin/xterm -icon -e ) def |
|
/oxpath.oxsm1-ssh (/home/taka/OpenXM/bin/ox_sm1) def |
|
/oxpath.ox-ssh (/home/taka/OpenXM/bin/ox) def |
|
/myhostname-ssh (yama.math.kobe-u.ac.jp) def |
|
%% for debugging. |
|
%/oxpath.oxlog.xterm-ssh ( ) def |
|
%/oxpath.oxsm1-ssh (/home/nobuki/OpenXM/bin/ox_sm1) def |
|
%/oxpath.ox-ssh (/home/nobuki/OpenXM/bin/ox) def |
|
%/myhostname-ssh (localhost) def |
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
%% Old full path. |
|
%/oxpath.ox (/home/nobuki/kxx/ox) def |
|
%/oxpath.oxsm1 (/home/nobuki/kxx/ox_sm1) def |
|
%/oxpath.oxlog (/home/nobuki/kxx/oxlog) def |
|
%/oxpath.xterm (/usr/X11R6/bin/xterm -icon -e ) def |
|
|
|
%% This macro is invoked when this package is loaded. |
/ox.sm1.myname (ox-new.sm1) def |
/initializePathNamesForOx { |
|
[oxpath.ox] getPathNameSm1 /oxpath.ox set |
|
[oxpath.oxsm1] getPathNameSm1 /oxpath.oxsm1 set |
|
[oxpath.oxlog] getPathNameSm1 /oxpath.oxlog set |
|
/oxpath.oxlog.xterm [oxpath.oxlog ( ) oxpath.xterm] cat def |
|
} def |
|
|
|
%% Execute this macro, then xterm will not be executed and the output |
[(ostype)] extension 0 get (unix) eq { |
%% will be redirected to /dev/null. |
/oxstart100 |
/oxNoX { |
[[(getenv) (OpenXM_HOME)] extension (/bin/ox100start )] cat |
/oxpath.null oxpath.null00 def |
def |
/oxpath.oxlog.xterm [oxpath.oxlog ( )] cat def |
} { |
(oxpath.oxlog.xterm is set to ) messagen |
/oxstart100 |
oxpath.oxlog.xterm message |
[[(getenv) (OpenXM_HOME)] extension |
} def |
(/bin/ox100start.exe )] cat |
|
def |
|
} ifelse |
|
[(getenv) (OXSTART100)] extension tag 0 eq not { |
|
/oxstart100 [(getenv) (OXSTART100)] extension def |
|
} { } ifelse |
|
oxstart100 message |
|
|
/ox.ccc.init { ox.ccc ( [(oxPrintMessage) 0] extension pop ) oxsubmit } def |
/ox.sm1.loaded 1 def |
|
/oxasir.sm1.loaded 1 def |
|
/ox.k0.loaded 1 def |
|
/Ox103_loaded 1 def |
|
|
/ox.verbose 0 def |
/ox.verbose 0 def |
/ox.version (2.981105) def |
/ox.version (3.030000) def |
ox.version [(Version)] system_variable gt |
ox.version [(Version)] system_variable gt |
{ (This package requires the latest version of kan/sm1) message |
{ (This package requires the latest version of kan/sm1) message |
(Please get it from http://www.math.kobe-u.ac.jp/KAN) message |
(Please get it from http://www.math.kobe-u.ac.jp/KAN) message |
error |
error |
} { } ifelse |
} { } ifelse |
(ox.sm1, --- open sm1 protocol module 11/11,1999 (C) N.Takayama. oxhelp for help) message-quiet |
(ox.sm1, ---OpenXM protocol module 07/20, 2003 (C) N.Takayama.) message-quiet |
|
( for ox_sm1, ox_asir, ox_k0 ) message-quiet |
|
|
/ox.ccc load isArray |
/ox.ccc load isArray |
{ } |
{ } |
{ /ox.ccc [ ] def } ifelse |
{ /ox.ccc [ ] def } ifelse |
|
/oxsm1.ccc load isArray |
|
{ } |
|
{ /oxsm1.ccc [ ] def } ifelse |
|
/ox.takelog 0 def |
|
|
|
(@@@.Xm_noX) boundp { |
|
}{ |
|
/@@@.Xm_noX 0 def |
|
} ifelse |
|
(Xm_noX) boundp { |
|
/@@@.Xm_noX Xm_noX def |
|
}{ } ifelse |
|
/Xm_noX @@@.Xm_noX def |
|
|
|
/oxNoX { |
|
/Xm_noX 1 def |
|
} def |
|
|
/ox.logsize 10 def |
|
/ox.log [1 1 ox.logsize {pop 0} for ] def |
|
/ox.mod { dup ox.logsize idiv ox.logsize mul sub } def |
|
/ox.takelog 1 def |
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
%%% basic functions for OX-RFC 100 |
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
/SM_executeStringByLocalParser 268 def |
/SM_executeStringByLocalParser 268 def |
/SM_execute 268 def |
/SM_execute 268 def |
/SM_popString 263 def |
/SM_popString 263 def |
Line 73 ox.version [(Version)] system_variable gt |
|
Line 64 ox.version [(Version)] system_variable gt |
|
|
|
/SM_popCMO 262 def |
/SM_popCMO 262 def |
/SM_executeFunction 269 def |
/SM_executeFunction 269 def |
/SM_DUMMY_sendcmo 280 def |
/SM_DUMMY_sendcmo 2147418112 1 add def %%% SM_PRIVATE+1 |
/SM_sync_ball 281 def |
/SM_sync_ball 281 def |
|
|
/SM_pops 265 def |
/SM_pops 265 def |
Line 87 ox.version [(Version)] system_variable gt |
|
Line 78 ox.version [(Version)] system_variable gt |
|
|
|
/SM_control_kill 1024 def |
/SM_control_kill 1024 def |
/SM_control_reset_connection 1030 def |
/SM_control_reset_connection 1030 def |
|
/SM_control_spawn_server 1027 def |
|
|
/Etag_error 257 def |
/Etag_error 257 def |
|
|
/enginesList [ |
|
[(localhost) 1300 1200] |
|
[(localhost) 2300 2200] |
|
] def |
|
%% cf. startengines |
|
/enginesList.2 [ |
|
[(dc1) 1300 1200] |
|
[(dc2) 2300 2200] |
|
] def |
|
%% cf. se12 |
|
|
|
/oxconnect { |
|
/arg1 set |
|
[(oxCreateClient) arg1 aload pop] extension |
|
} def |
|
[(oxconnect) |
|
[([hostname data-port control-port] oxconnect pid) |
|
(oxconnect is used to connect this to a server on the hostname with data-port) |
|
(and control-port) |
|
(Example 1: ox -ox ox_sm1 -data 1300 -control 1200 <== on server.) |
|
( [$localhost$ 1300 1200] oxconnect /ox.ccc set <== on client.) |
|
(Example 2: ox -ox ox_sm1 -host s.OpenXM.org -insecure -data 1300 -control 1200 <== on server.) |
|
( [$s.OpenXM.org$ 1300 1200] oxconnect /ox.ccc set <== on client.) |
|
(Example 3: ox -ox ox_sm1 -data 1300 -control 1200 >& /dev/null &<== on server.) |
|
( [$localhost$ 1300 1200] oxconnect /ox.ccc set <== on client.) |
|
( cf. oxNoX) |
|
(See also ox) |
|
] |
|
] putUsages |
|
|
|
[(ox) |
[(ox) |
[ |
[ |
(client aa oxpushcmo (oxsendcmo), client oxpopcmo dd, client popstring dd, client ss oxrpc) |
(client aa oxpushcmo (oxsendcmo), client oxpopcmo dd, client popstring dd, client ss oxrpc) |
(Example: ox.ccc [1 2 3] oxpushcmo ox.ccc oxpopcmo /ff set ff :: ) |
(Example: oxsm1.ccc [1 2 3] oxpushcmo oxsm1.ccc oxpopcmo /ff set ff :: ) |
( ) |
( ) |
(client ss oxexecutestring(oxsubmit) <<executeString>>, client ss oxexec <<executeFunction>>) |
(client ss oxexecutestring(oxsubmit) <<executeString>>, client ss oxexec <<executeFunction>>) |
|
|
(Example: ox.ccc (0 1 10 { pop $Hello$ message } for) oxexecutestring ) |
(Example: oxsm1.ccc (0 1 10 { pop $Hello$ message } for) oxexecutestring ) |
(Example: ox.ccc (2).. oxpushcmo ox.ccc (10).. oxpushcmo ) |
(Example: oxsm1.ccc (2).. oxpushcmo oxsm1.ccc (10).. oxpushcmo ) |
( ox.ccc (power) oxexec ox.ccc oxpopcmo :: ) |
( oxsm1.ccc (power) oxexec oxsm1.ccc oxpopcmo :: ) |
( ) |
( ) |
(client str oxevalname, client str oxsetname, client num oxpops, client oxget) |
(client str oxevalname, client str oxsetname, client num oxpops, client oxget) |
( ) |
( ) |
Line 137 ox.version [(Version)] system_variable gt |
|
Line 99 ox.version [(Version)] system_variable gt |
|
( ) |
( ) |
(client oxgetsp --- get stack pointer, client oxgeterrors --- get all errors) |
(client oxgetsp --- get stack pointer, client oxgeterrors --- get all errors) |
(cleint oxisData, client oxreset, client oxshutdown) |
(cleint oxisData, client oxreset, client oxshutdown) |
(oxhelp for this message, [(oxWatch) client] extension to start a log.) |
(oxhelp for this message) |
|
([(oxWatch) client] extension to start a log.) |
|
$ ex 1. (ox.sm1) run sm1connectr [(oxWatch) oxsm1.ccc] extension $ |
|
$ oxsm1.ccc ( [(cmoLispLike) 0] extension ) oxsubmit $ |
|
$ oxsm1.ccc ( [(cmoLispLike) 1] extension ) oxsubmit $ |
([(oxSerial)] extension serial-number-of-out-going-ox-packet.) |
([(oxSerial)] extension serial-number-of-out-going-ox-packet.) |
(oxpopcmo1, oxpopcmo2, sm1connect2, sm1connect3) |
(oxpopcmo1, oxpopcmo2, sm1connectr ox_launch, ox_launch_nox) |
(sm1connectr ox_launch, ox_launch_nox) |
|
(oxNoX : set an environment to invoke oxlog without xterm and to call oxlog with >& /dev/null) |
(oxNoX : set an environment to invoke oxlog without xterm and to call oxlog with >& /dev/null) |
$ ex 1. (ox.sm1) run oxNoX sm1connectr $ |
$ ex 1. (ox.sm1) run oxNoX sm1connectr $ |
$ ex 2. (oxasir.sm1) run oxNoX (x^2-1). fctr pmat ; $ |
$ ex 2. (ox.sm1) run oxNoX (x^2-1). fctr pmat ; $ |
|
$ $ |
|
$cf. extension-oxLog $ |
] |
] |
] putUsages |
] putUsages |
|
|
/oxhelp { |
[(extension-oxLog) |
(oxconnect) usage |
[ |
( ) message |
$Take the log of communication in files.$ |
(ox) usage |
$[(oxLog) client logfile_for_incomming_data logfile_for_outgoing_data] extension $ |
} def |
$Example:$ |
[(oxhelp) |
$ [(parse) (ox.sm1) pushfile] extension$ |
[(oxhelp outputs help messages for ox commands.) |
$ sm1connectr$ |
|
$ (i.t) (w) file /ii set$ |
|
$ (o.t) (w) file /oo set$ |
|
$ [(oxLog) oxsm1.ccc ii oo] extension $ |
|
$ [(oxWatch) oxsm1.ccc ] extension$ |
|
$ oxsm1.ccc 1 oxpushcmo ;$ |
|
$ oxsm1.ccc oxpopcmo ;$ |
|
$ [(oxLogStop) oxsm1.ccc] extension$ |
]] putUsages |
]] putUsages |
|
|
ox.verbose { oxhelp } { } ifelse |
/oxconnect { |
|
/arg1 set |
/sm1connect2 { |
[(oxCreateClient) arg1 aload pop] extension |
[oxpath.oxlog.xterm oxpath.ox ( -ox ) oxpath.oxsm1 |
|
oxpath.null |
|
( &)] cat system-csh |
|
% (kterm -iconic -e /home/nobuki/kxx/ox -ox /home/nobuki/kxx/ox_sm1 &) system |
|
% For MSRI, or Eterm, |
|
%(xterm -icon -e /u/nobuki/tmp/kxx/ox -ox /u/nobuki/tmp/Ox/ox_sm1 &) system |
|
(If you start the server automatically, you may have a trouble to) message |
|
(oxreset. In order to avoid this trouble, start the server by hand.) message |
|
(sleep 5) system-csh |
|
[(localhost) 1300 1200] oxconnect /ox.ccc set |
|
(The server is binded to the variable ox.ccc) message |
|
ox.ccc.init |
|
} def |
} def |
|
|
/sm1connect3 { |
ox.verbose { oxhelp } { } ifelse |
[oxpath.oxlog.xterm oxpath.ox ( -ox ) oxpath.oxsm1 |
|
( -data 2300 -control 2200 ) |
|
oxpath.null |
|
( &)] cat system-csh |
|
% (kterm -iconic -e /home/nobuki/kxx/ox -ox /home/nobuki/kxx/ox_sm1 -data 2300 -control 2200 &) system-csh |
|
% For MSRI |
|
%(xterm -icon -e /u/nobuki/tmp/kxx/ox -ox /u/nobuki/tmp/Ox/ox_sm1 -data 2300 -control 2200&) system-csh |
|
(If you start the server automatically, you may have a trouble to) message |
|
(oxreset. In order to avoid this trouble, start the server by hand.) message |
|
(sleep 5) system-csh |
|
[(localhost) 2300 2200] oxconnect /ox.ccc2 set |
|
(The server is binded to the variable ox.ccc2) message |
|
} def |
|
|
|
/sm1connect4 { |
|
%% test version. |
|
/ox.ccc.portfile oxgenportfile def |
|
[oxpath.oxlog.xterm oxpath.ox ( -ox ) oxpath.oxsm1 |
|
( -portfile ) ox.ccc.portfile |
|
oxpath.null |
|
( &)] cat system-csh |
|
(sleep 5) system-csh |
|
[(oxReadPortFile) ox.ccc.portfile] extension /ox.ccc.control set |
|
ox.ccc.control message |
|
[(localhost) ox.ccc.control 1200] /ox.ccc set |
|
(The server is binded to the variable ox.ccc) message |
|
oxremoveportfile |
|
} def |
|
|
|
/oxpushcmo { oxsendcmo } def |
/oxpushcmo { oxsendcmo } def |
/oxsendcmo { |
/oxsendcmo { |
/arg1 set |
/arg1 set |
Line 259 ox.verbose { oxhelp } { } ifelse |
|
Line 193 ox.verbose { oxhelp } { } ifelse |
|
] pop |
] pop |
popVariables |
popVariables |
} def |
} def |
/oxsetmathcap.old { |
|
/arg1 set |
|
[(oxReq) |
|
arg1 SM_setMathCap |
|
[(mathcap-object) |
|
[[199901160 (sm1)] |
|
[2130706434 , 1 , 2 , 4 , 17 , 19 , 20 , 22 , 23 , 24 , 25 , 26 , 30 ] |
|
%% mathcap for sm1. |
|
%% [1 2 3 4 5] %% for test. cf. cmoCheckMathCap, Sm1_mathcap() |
|
] |
|
] %% Never write a broken data here. |
|
] extension pop |
|
} def |
|
/oxpopcmo1 { %% ask of the transmission. |
/oxpopcmo1 { %% ask of the transmission. |
/arg1 set |
/arg1 set |
[(oxReq) arg1 SM_popCMO ] extension pop |
[(oxReq) arg1 SM_popCMO ] extension pop |
Line 355 ox.verbose { oxhelp } { } ifelse |
|
Line 277 ox.verbose { oxhelp } { } ifelse |
|
/oxreset { |
/oxreset { |
/arg1 set |
/arg1 set |
[(oxReq) arg1 SM_control_reset_connection] extension pop |
[(oxReq) arg1 SM_control_reset_connection] extension pop |
[(oxGetFromControl) arg1 ] extension pop |
%% [(oxGetFromControl) arg1 ] extension pop |
[(oxGet) arg1] extension message |
[(oxGet) arg1] extension message |
} def |
} def |
|
|
Line 398 ox.verbose { oxhelp } { } ifelse |
|
Line 320 ox.verbose { oxhelp } { } ifelse |
|
}def |
}def |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
/enginescmd |
/ox_launch_nox { |
$ /computesp { |
/@@@.ox_launch_nox 1 def |
/arg1 set |
ox_launch_aux |
[arg1 myid] arg1 message |
} def |
} def |
/ox_launch { |
$ |
/@@@.ox_launch_nox 0 def |
def |
ox_launch_aux |
|
} def |
|
|
|
/ox_launch_aux { |
|
/arg1 set |
|
[/in-launch_nox /pass /peer /data /control /name /machine |
|
/your-peer /comm /remoteOpenXMbin /remoteServer /myhost |
|
/argNumber /aaa |
|
] pushVariables |
|
[ |
|
/aaa arg1 def |
|
/argNumber aaa length def |
|
/machine aaa 0 get def |
|
machine (localhost) eq argNumber 5 lt and { |
|
aaa 1 get ox_launch_localhost /your-peer set |
|
/LLL.end goto |
|
} { |
|
/remoteOpenXMbin aaa 1 get def |
|
/remoteServer aaa 2 get def |
|
/name aaa 3 get def |
|
/myhost aaa 4 get def |
|
} ifelse |
|
|
/genPairs { |
/pass [(oxGenPass)] extension def |
/arg1 set |
/peer [(oxGetPort) myhost] extension def |
[/n /i /j] pushVariables |
/data peer 1 get toString def |
[ |
/control peer 3 get toString def |
/n arg1 def |
peer message |
/genPairs.list [ ] def |
[(ssh -f ) machine ( -l ) name ( ") |
/genPairs.i 0 def |
|
0 1 n 1 sub { |
|
/i set |
|
i 1 add 1 n 1 sub { |
|
/j set |
|
genPairs.list [i j] append /genPairs.list set |
|
} for |
|
} for |
|
/genPairs.n genPairs.list length def |
|
] pop |
|
popVariables |
|
} def |
|
|
|
/getPair { |
@@@.ox_launch_nox { |
[/i ] pushVariables |
} { |
[ |
remoteOpenXMbin(/oxlog ) |
genPairs.i genPairs.n lt { |
( /usr/X11R6/bin/xterm -icon -e ) |
genPairs.list genPairs.i get /ans set |
} ifelse |
genPairs.i 1 add /genPairs.i set |
|
} |
|
{ [-1 -1] /ans set} ifelse |
|
/arg1 ans def |
|
] pop |
|
popVariables |
|
arg1 |
|
} def |
|
|
|
/sumUp { |
( ) remoteOpenXMbin (/ox ) |
/arg1 set |
( -reverse -ox ) remoteServer |
[/ans /v /i /n] pushVariables |
( -host ) myhost |
[ |
( -data ) data ( -control ) control ( -pass ) pass |
/v arg1 def |
oxpath.null |
/n v length def |
( ") |
/ans 0 def |
] cat /comm set |
0 1 n 1 sub { |
(Executing the command : ) messagen comm message message |
/i set |
comm system |
ans v i get add /ans set |
(sleep 5) system-csh |
} for |
[(oxCreateClient2) peer 1 pass] extension /your-peer set |
/arg1 ans def |
/LLL.end |
] pop |
/arg1 your-peer def |
popVariables |
] pop |
arg1 |
popVariables |
|
arg1 |
} def |
} def |
|
|
|
[(ox_launch) |
|
[( [remote remote-OpenXM-bin remote-ox-server remote-login-name myhostname] ) |
|
( ox_launch client ) |
|
$or $ |
|
$ [(localhost) ox-server-name] ox_launch client$ |
|
(Example 1: ) |
|
$ [(tau.math.kobe-u.ac.jp) (/home/taka/OpenXM/bin) $ |
|
$ (/home/taka/OpenXM/src/ox_math/ox_math) (taka) (dc4.math.kobe-u.ac.jp) $ |
|
$ ] ox_launch /@@@.oxmath set $ |
|
]] putUsages |
|
|
/dist { |
[(ox_launch_nox) |
/dist.debug 0 def |
[( [remote remote-OpenXM-bin remote-ox-server remote-login-name myhostname] ) |
/result [ ] def |
( ox_launch_nox client ) |
enginesList {oxconnect} map /engines set |
(Example 1: ) |
/enginesN engines length def |
$ [(tau.math.kobe-u.ac.jp) (/home/taka/OpenXM/bin) $ |
% broadcast the program. |
$ (/home/taka/OpenXM/src/ox_math/ox_math) (taka) (dc4.math.kobe-u.ac.jp) $ |
(ox-1.sm1) pushfile /enginescmd set %% read a file. |
$ ] ox_launch_nox /@@@.oxmath set $ |
[(parse) enginescmd] extension |
]] putUsages |
engines {enginescmd oxsubmit} map |
|
engines { (slave-start) oxsubmit} map %% initialize slave codes. |
|
%% send pid. |
|
0 1 enginesN 1 sub { |
|
/i set |
|
engines i get i oxsendcmo |
|
engines i get (/myid set) oxsubmit |
|
} for |
|
|
|
master-start %% initialize master codes |
/ox_launch_localhost { |
%% gbsize genPairs %% obsolete |
/arg1 set |
/gbsize ans length def |
[/in-ox_launch_localhost /pass /peer /data /control /oxserver |
ans makePairs /genPairs.list set |
/my-peer] pushVariables |
/genPairs.i 0 def /genPairs.n genPairs.list length def |
[ |
|
/oxserver arg1 def |
|
/pass [(oxGenPass)] extension def |
|
/peer [(oxGetPort) (localhost)] extension def |
|
/data peer 1 get toString def |
|
/control peer 3 get toString def |
|
peer message |
|
[oxpath.oxlog.xterm oxpath.ox ( -reverse -ox ) oxserver |
|
( -data ) data ( -control ) control ( -pass ) pass |
|
oxpath.null |
|
( &)] cat system-csh |
|
[(oxCreateClient2) peer 0 pass] extension /my-peer set |
|
%% 0 means connect from only localhost. |
|
/arg1 my-peer def |
|
] pop |
|
popVariables |
|
arg1 |
|
} def |
|
|
/exhausted 0 def |
/oxrpc2 { |
% clear the busy flag. |
/arg2 set |
/busy [1 1 enginesN { pop 0 } for ] def |
/arg1 set |
(date) system-csh |
[/in-oxrpc2 /pid /n /comm /i] pushVariables |
{{ |
[ |
exhausted 0 eq { |
/pid arg1 def |
0 1 enginesN 1 sub { |
/comm arg2 def |
/i set |
/n comm length def |
busy i get 0 eq { |
n 1 sub -1 1 { |
getPair /p set |
/i set |
p 0 get -1 eq {/exhausted 1 def exit} { } ifelse |
pid comm i get oxsendcmo |
busy i 1 put |
} for |
engines i get p oxsendcmo |
pid n 1 sub oxsendcmo |
engines i get ( computesp ) oxsubmit |
pid comm 0 get oxexec |
engines i get oxpopcmo1 |
] pop |
} { } ifelse |
popVariables |
} for |
|
} { } ifelse |
|
dist.debug { (busy=) messagen busy message } { } ifelse |
|
busy sumUp 0 eq { result message exit error } { } ifelse |
|
[(oxMultiSelect) engines -1] extension /status set |
|
/datastatus status 1 get def |
|
dist.debug { (datastatus=) messagen datastatus message } { } ifelse |
|
0 1 enginesN 1 sub { |
|
/i set |
|
datastatus i get 1 eq { |
|
engines i get oxpopcmo2 /ans set |
|
busy i 0 put |
|
result ans append /result set |
|
} { } ifelse |
|
} for |
|
} loop } timer |
|
(date) system-csh |
|
(result is in result) message |
|
(Number of s-pairs checked is ) messagen result length message |
|
} def |
} def |
|
|
ox.verbose { |
[(oxrpc2) |
(dist for experiments for distributed computing. cf. startengines) message |
[(Remote procedure call by using oxexec) |
} { } ifelse |
(client [function-name arg1 arg2 ...] oxrpc2 ) |
|
(cf. ox-cmo-rpc in Risa/Asir) |
|
(Example: ) |
|
$ (oxasir.sm1) run (x^2-1). fctr $ |
|
(oxasir.ccc [(igcd) (6).. (10)..] oxrpc2) |
|
(oxasir.ccc oxpopcmo :: ) |
|
] |
|
] putUsages |
|
|
/oxIsServerReady { |
/oxIsServerReady { |
/arg1 set |
/arg1 set |
|
|
arg1 |
arg1 |
} def |
} def |
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
%%% Functions to start server by OX-RFC-101 |
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
/sm1StartControl101 { |
|
[/in-sm1connectr /pass /peer /data /control ] pushVariables |
|
[ |
|
/pass [(oxGenPass)] extension def |
|
/peer [(oxGetPort1) (localhost)] extension def |
|
/data peer 1 get toString def |
|
peer message |
|
[(/home/nobuki/OpenXM/src/oxc/oxc) |
|
( -c ) pass ( -h ) (localhost) ( -p ) data ( -x ) |
|
oxpath.null |
|
( &)] cat system-csh |
|
|
%%%%%%%%%%%%%%% tests |
[(oxCreateControl_RFC_101) peer 0 pass] extension /oxsm1.ccc set |
ox.verbose { |
%% 0 means connect from only localhost. |
(test10 : test to read and write ox-data and ox-command to a file) message |
/ox.ccc oxsm1.ccc def |
} { } ifelse |
(The server is binded to the variable oxsm1.ccc) message |
|
oxsm1.ccc |
|
] pop |
|
popVariables |
|
} def |
|
|
/test10 { |
/sm1StartEngine101 { |
[(oxCreateClientFile) (afo) (w)] extension /ccc set |
[/in-sm1StartEngine101 /peer /data /control /engineID] pushVariables |
[(oxWatch) ccc] extension |
[ |
ccc (x-1). oxsendcmo |
/peer [(oxGetPort1) (localhost)] extension def |
[(oxReq) ccc SM_executeStringByLocalParser |
/data peer 1 get def |
( dup add message )] extension pop |
|
ccc (quit) oxsendcmo |
|
|
|
[(oxCloseClient) ccc] extension |
oxsm1.ccc data oxpushcmo |
|
oxsm1.ccc (/home/nobuki/OpenXM/bin/ox_sm1) oxpushcmo |
|
[(oxPushCMD) oxsm1.ccc SM_control_spawn_server] extension |
|
oxsm1.ccc oxpopcmo /engineID set |
|
[(oxCreateEngine_RFC_101) peer 0 (Empty) engineID] extension |
|
/ox.ddd set |
|
(The engine is binded to the variables ox.ddd) message |
|
] pop |
|
popVariables |
|
arg1 |
} def |
} def |
|
|
/test11 { |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
[(oxCreateClientFile) (afo) (r)] extension /ccc set |
%%% Functions for OX-RFC 103 |
[(oxGet) ccc] extension :: |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
[(oxGet) ccc] extension :: |
[(chattr) 0 /ctrlC-hook] extension |
|
/ctrlC-hook { |
|
ox103_reset |
} def |
} def |
|
/ox103_disable { |
|
[(chattr) 0 /ctrlC-hook] extension |
|
/ctrlC-hook { } def |
|
} def |
|
|
ox.verbose { |
[(ox103_reset) |
(test12 : ccc is the client. ff poly in Q<x,y,z,dx,dy,dz> ) message |
[(ox103_reset broadcasts the OX reset to all processes) |
} { } ifelse |
(cf. ctrlC-hook, register_hander) |
/test12 { |
]] putUsages |
[(localhost) 1300 1200] oxconnect /ccc set |
/ox103_reset { |
[(x,y,z) ring_of_differential_operators ( ) elimination_order 0] define_ring |
[/in-ox103_reset /L /n /i] pushVariables |
(x+y). /ff set |
[ |
/eee (hello) (error) dc def |
/L [(oxGetClientList)] extension def |
/eee0 eee (error) dc def |
(In ox103_reset...) message |
(eee is the CMO_ERROR2 object [CMO_ERROR2 hello], eee0 is the CMO_ERROR object) message |
(killall in oxshell...) message [(killall)] oxshell pop |
|
/n L length def |
|
0 1 n 1 sub { |
|
/i set |
|
L i get oxreset |
|
} for |
|
(Done) message |
|
] pop |
|
popVariables |
} def |
} def |
|
|
|
%%%%%%% |
|
/ox103_asir_init { |
|
/arg1 set |
|
[/ttt] pushVariables |
|
[ |
|
/ttt arg1 def |
|
%% ttt oxsetmathcap ttt oxmathcap %% It is done in asir.init |
|
%% Do nothing special for now. |
|
] pop |
|
popVariables |
|
} def |
|
/ox103_sm1_init { |
|
/arg1 set |
|
[/ttt] pushVariables |
|
[ |
|
/ttt arg1 def |
|
ttt oxsetmathcap |
|
ttt oxmathcap |
|
ttt ([(parse) (oxrfc103.sm1) pushfile] extension ) oxsubmit |
|
] pop |
|
popVariables |
|
} def |
|
%%% |
|
|
|
/Xm_rfc103_shared [ ] def |
|
|
|
[(ox103_set_shared_variable) |
|
[(value name 2 ox103_set_shared_variable) |
|
(It broadcasts the <<value>> of a shared variable <<name>>) |
|
(to all processes.) |
|
(cf. Xm_rfc103_shared, ) |
|
$Example: (2).. (hoge) 2 ox103_set_shared_variable$ |
|
]] putUsages |
|
/ox103_set_shared_variable { |
|
/arg0 set %% Dummy to be called by rpc2. Number of args |
|
/arg1 set %% Name |
|
/arg2 set %% Value, [Name Value] not [Value Name] |
|
[/in-ox103_set_shared_variable /Name /Value |
|
/Found /N /i /L |
|
] pushVariables |
|
[ |
|
/Name arg1 def |
|
/Value arg2 def |
|
Value message |
|
/Found 0 def |
|
/N Xm_rfc103_shared length def |
|
0 1 N 1 sub { |
|
/i set |
|
Xm_rfc103_shared i get 0 get |
|
Name eq { |
|
Xm_rfc103_shared i [Name Value] put |
|
/Found 1 def |
|
exit |
|
} { } ifelse |
|
} for |
|
Found 1 eq { } |
|
{ |
|
Xm_rfc103_shared [Name Value] append |
|
/Xm_rfc103_shared set |
|
} ifelse |
|
/L [(oxGetClientList)] extension def |
|
0 1 L length 1 sub { |
|
/i set |
|
L i get [(ox103_set_shared_variable) Name Value] oxrpc2 |
|
} for |
|
|
|
(ox103_set_shared_variable: Xm_rfc103_shared=) message |
|
Xm_rfc103_shared message |
|
%% [(parse) [(/) Name ( ) Value toString ( def )] cat] extension |
|
%% Add $ $ when Value is a string. |
|
|
|
/arg1 [Name Value] def |
|
] pop |
|
popVariables |
|
arg1 |
|
} def |
|
|
|
/ox103_test { |
|
(x^2-1). fctr |
|
oxasir.ccc ( sm1_start(); ) oxexecutestring |
|
sm1connectr |
|
} def |
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
%%%%%%%% Starting ox_sm1. |
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
/sm1connectr { |
/sm1connectr { |
[/in-sm1connectr /pass /peer /data /control ] pushVariables |
[/in-sm1connectr /pass /peer /data /control ] pushVariables |
[ |
[ |
|
[(getServerEnv) (bin/ox_sm1)] extension tag 0 eq { |
|
(Server bin/ox_sm1 is not found.) error |
|
}{ } ifelse |
/pass [(oxGenPass)] extension def |
/pass [(oxGenPass)] extension def |
/peer [(oxGetPort) (localhost)] extension def |
/peer [(oxGetPort) (localhost)] extension def |
/data peer 1 get toString def |
/data peer 1 get toString def |
/control peer 3 get toString def |
/control peer 3 get toString def |
peer message |
peer message |
[oxpath.oxlog.xterm oxpath.ox ( -reverse -ox ) oxpath.oxsm1 |
[ |
|
oxstart100 |
|
Xm_noX { ( -nox ) } { } ifelse |
|
( -oxserver bin/ox_sm1 -e ) ( -reverse ) |
( -data ) data ( -control ) control ( -pass ) pass |
( -data ) data ( -control ) control ( -pass ) pass |
oxpath.null |
( )] cat execve |
( &)] cat system-csh |
[(oxCreateClient2) peer 0 pass] extension /oxsm1.ccc set |
[(oxCreateClient2) peer 0 pass] extension /ox.ccc set |
|
%% 0 means connect from only localhost. |
%% 0 means connect from only localhost. |
(The server is binded to the variable ox.ccc) message |
(The server is binded to the variable oxsm1.ccc) message |
ox.ccc.init |
/ox.ccc oxsm1.ccc def |
|
oxsm1.ccc.init |
|
oxsm1.ccc |
] pop |
] pop |
popVariables |
popVariables |
} def |
} def |
|
|
|
/oxsm1.ccc.init { |
|
oxsm1.ccc ( [(oxPrintMessage) 0] extension pop ) oxsubmit |
|
Xm_noX { oxsm1.ccc ( /@@@.Xm_noX 1 def ) oxsubmit } |
|
{ oxsm1.ccc ( /@@@.Xm_noX 0 def ) oxsubmit } ifelse |
|
(Ox103_loaded) boundp |
|
{ oxsm1.ccc ox103_sm1_init } |
|
{ } ifelse |
|
} def |
|
|
/sm1connectr-ssh { |
/sm1connectr-ssh { |
|
%% It has not yet implemented. |
/arg1 set |
/arg1 set |
[/in-sm1connectr /pass /peer /data /control /name /machine |
[/in-sm1connectr /pass /peer /data /control /name /machine |
/your-peer /comm |
/your-peer /comm |
|
|
$ [(dc2.math.kobe-u.ac.jp) (taka)] sm1connectr-ssh /ox.ccc set $ |
$ [(dc2.math.kobe-u.ac.jp) (taka)] sm1connectr-ssh /ox.ccc set $ |
]] putUsages |
]] putUsages |
|
|
/addSlash { |
%%% ntl |
|
/ntlconnectr { |
|
[/in-ntlconnectr /pass /peer /data /control ] pushVariables |
|
[ |
|
[(getServerEnv) (bin/ox_ntl)] extension tag 0 eq { |
|
(Server bin/ox_ntl is not found.) error |
|
}{ } ifelse |
|
/pass [(oxGenPass)] extension def |
|
/peer [(oxGetPort) (localhost)] extension def |
|
/data peer 1 get toString def |
|
/control peer 3 get toString def |
|
peer message |
|
[ |
|
oxstart100 |
|
Xm_noX { ( -nox ) } { } ifelse |
|
( -oxserver bin/ox_ntl -e ) ( -reverse ) |
|
( -data ) data ( -control ) control ( -pass ) pass |
|
( )] cat execve |
|
[(oxCreateClient2) peer 0 pass] extension /oxntl.ccc set |
|
%% 0 means connect from only localhost. |
|
(The server is binded to the variable oxntl.ccc) message |
|
% oxntl.ccc.init |
|
oxntl.ccc |
|
] pop |
|
popVariables |
|
} def |
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
%%% Aux functions for ox_asir |
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
/ox_asirConnectMethod { asirconnectr /oxasir.ccc set } def |
|
/oxasir.loadmethod 1 def %% "..." oxsendcmo (load) ox... |
|
/oxasir.verbose 0 def |
|
/oxasir.ccc load isArray |
|
{ } |
|
{ /oxasir.ccc [ ] def } ifelse |
|
/loadAsirFile { |
/arg1 set |
/arg1 set |
[/in-addSlash /ss /aaa /ans] pushVariables |
[/in-loadAsirFile /peer /fname] pushVariables |
[ |
[ |
/ss arg1 def |
/peer arg1 0 get def |
ss (array) dc /aaa set |
/fname arg1 1 get def |
aaa length 0 eq { |
oxasir.loadmethod { |
/ans (/) def |
peer fname oxsendcmo peer 1 oxsendcmo |
|
peer (load) oxexec |
}{ |
}{ |
aaa aaa length 1 sub get 47 eq %% The last equals / ? |
peer [$load("$ fname $");$] cat oxsubmit |
{ |
}ifelse |
/ans ss def |
|
}{ |
|
/ans [ss (/)] cat def |
|
} ifelse |
|
} ifelse |
|
/arg1 ans def |
|
] pop |
] pop |
arg1 |
popVariables |
} def |
} def |
|
[(loadAsirFile) |
|
[$[client fname] loadAsirFile (ox_asir function)$ |
|
$Load a file into the client$ |
|
]] putUsages |
|
|
/getPathNameSm1 { |
/set_oxasir.rr_path { |
|
[(ostype)] extension 0 get (windows) eq { |
|
[(getenv) (OSTYPE)] extension tag 0 eq { |
|
/oxasir.rr.name (oxasir-win.rr) def |
|
}{ |
|
[(getenv) (OSTYPE)] extension (cygwin) eq { |
|
/oxasir.rr.name (oxasir.asir) def |
|
}{ |
|
/oxasir.rr.name (oxasir-win.rr) def |
|
} ifelse |
|
} ifelse |
|
}{ |
|
/oxasir.rr.name (oxasir.asir) def |
|
} ifelse |
|
} def |
|
set_oxasir.rr_path |
|
/oxasirpath.asirlib [[(getenv) (OpenXM_HOME)] extension |
|
(/lib/sm1/) oxasir.rr.name] cat def |
|
oxasir.verbose { |
|
oxasirpath.asirlib message |
|
} { } ifelse |
|
|
|
%% Note. oxasir.asir is under OpenXM/src/kan96xx/lib/ |
|
%% oxasir-win.asir is generated under OpenXM/misc/packages/Windows |
|
%% They are installed under $OpenXM_HOME/lib/sm1 |
|
%% Todo: ox_asir has to understand /cygdrive/c/... on windows-native. |
|
%% Since ox_asir is generated by cygwin, it will be OK. |
|
/asir.init { |
|
%% gr and primdec are loaded by .asirrc |
|
/asir.init.peer set |
|
[(ostype)] extension 0 get (windows) eq { |
|
[(getenv) (OSTYPE)] extension tag 0 eq { |
|
[asir.init.peer (oxasir-win.rr)] oxasirParseFile |
|
}{ |
|
[(getenv) (OSTYPE)] extension (cygwin) eq { |
|
[asir.init.peer oxasirpath.asirlib] loadAsirFile |
|
}{ |
|
[asir.init.peer (oxasir-win.rr)] oxasirParseFile |
|
} ifelse |
|
} ifelse |
|
}{ |
|
[asir.init.peer oxasirpath.asirlib] loadAsirFile |
|
} ifelse |
|
asir.init.peer oxmathcap |
|
asir.init.peer oxsetmathcap |
|
Xm_noX { |
|
asir.init.peer (Xm_noX=1;) oxsubmit |
|
}{ |
|
asir.init.peer (Xm_noX=0;) oxsubmit |
|
} ifelse |
|
(Ox103_loaded) boundp |
|
{ |
|
asir.init.peer ox103_asir_init |
|
}{ } ifelse |
|
} def |
|
|
|
[(asir) |
|
[(pid [asir-command, asir-arg1, asir-arg2, ...] asir result (ox_asir function)) |
|
(Call open asir server. You need to install ox_asir on your system) |
|
(to use this function. cf. primadec, fctr, asirconnect2, asirconnectr.) |
|
(If you interrupted the computation by typing ctrl-C, type in ) |
|
( oxasir.ccc oxreset ; ) |
|
(to interrupt the ox_asir server.) |
|
(Example: oxasir.ccc [(fctr) (x^10-1).] asir ) |
|
( ) |
|
(This function requires plugins cmo, socket and ox_asir server. cf. oxasir) |
|
(See, ftp://endeavor.fujitsu.co.jp/pub/isis/asir on asir) |
|
] |
|
] putUsages |
|
|
|
/asir { |
|
/arg2 set |
/arg1 set |
/arg1 set |
[/in-getPathNameSm1 /fname /fullname /tname] pushVariables |
[/pid /asir-comm /comm /n /i /rr] pushVariables |
|
[(CurrentRingp)] pushEnv |
[ |
[ |
/fname arg1 0 get def |
/pid arg1 def |
%% If fullname is given, use it. |
/asir-comm arg2 def |
fname (array) dc 0 get |
pid tag 6 eq { } { (Invalid pid. See asir.) error } ifelse |
(/) (array) dc 0 get eq |
pid 0 get (client) eq { } { (Invalid pid. See asir.) error } ifelse |
{ /fullname fname def |
asir-comm tag 6 eq { } { (Invalid argument asir-comm. See asir) error } ifelse |
/getPathNameSm1.LLL goto |
|
} { } ifelse |
|
|
|
%% Else first try to find it in LOAD_SM1_PATH |
[ %% Change the current ring if necessary to send a correct OxVlist. |
[(getenv) (LOAD_SM1_PATH)] extension /tname set |
asir-comm oxasir.changeRing |
tname isString |
] pop |
{ |
%%% Setting OxVlist to tell asir a way to change dist-poly <==> poly. |
tname addSlash /tname set |
(OxVlist=) getVlist2 toString (;) 3 cat_n /comm set |
[(stat) [tname fname] cat] extension |
%% comm message |
0 get isInteger %% The file was found. |
pid comm oxsubmit |
{ /fullname [tname fname] cat def |
pid (print(OxVlist);) oxsubmit |
/getPathNameSm1.LLL goto |
|
} { } ifelse |
|
} { } ifelse |
|
|
|
%% Else try to find it in /usr/local/lib/sm1 |
|
[(stat) [(/usr/local/lib/sm1/) fname] cat] extension |
|
0 get isInteger %% The file was found. |
|
{ /fullname [(/usr/local/lib/sm1/) fname] cat def |
|
/getPathNameSm1.LLL goto |
|
} { } ifelse |
|
|
|
%% Otherwise error. |
/n asir-comm length def |
[(getPathNameSm1: The file ) fname |
n 1 sub -1 1 { |
( could not be found ) |
/i set |
(neigher in LOAD_SM1_PATH=) |
pid asir-comm i get oxsendcmo |
[(getenv) (LOAD_SM1_PATH)] extension |
pid 1 oxsendcmo pid (ox_dtop) oxexec |
( nor in /usr/local/lib/sm1) |
} for |
] cat /getPathNameSm1.errorMessage set |
pid n 1 sub oxsendcmo |
getPathNameSm1.errorMessage message |
pid asir-comm 0 get oxexec |
] pop popVariables getPathNameSm1.errorMessage error |
|
|
|
/getPathNameSm1.LLL |
pid 1 oxsendcmo pid (ox_ptod) oxexec |
/arg1 fullname def |
pid oxpopcmo /arg1 set |
|
|
|
|
] pop |
] pop |
|
popEnv |
popVariables |
popVariables |
arg1 |
arg1 |
} def |
} def |
[(getPathNameSm1) |
|
[([fname] getPathNameSm1 fullname) |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
(string fname, fullname) |
%%% Mathematical functions for asir |
(This command searches the fname in /usr/local/lib/sm1 and LOAD_SM1_PATH) |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
(and returns the fullname.) |
/oxasir.changeRing { |
|
/arg1 set |
|
[/in-oxasir.changeRing /f /rr] pushVariables |
|
[ |
|
/f arg1 def |
|
f isArray { |
|
f {oxasir.changeRing} map |
|
}{ |
|
f isPolynomial { |
|
f (0). eq { } |
|
{ f (ring) dc /rr set [(CurrentRingp) rr] system_variable } ifelse |
|
} { } ifelse |
|
} ifelse |
|
] pop |
|
popVariables |
|
} def |
|
|
|
/fctr { |
|
/arg1 set |
|
[/f /comm /vv] pushVariables |
|
[(CurrentRingp)] pushEnv |
|
[ |
|
/f arg1 def |
|
oxasir.ccc [ ] eq { |
|
(Starting ox_asir server.) message |
|
ox_asirConnectMethod |
|
} { } ifelse |
|
|
|
f isPolynomial not { |
|
/vv f 1 get def |
|
vv isArray { /vv vv from_records def } { } ifelse |
|
/f f 0 get def |
|
[vv ring_of_polynomials 0] define_ring |
|
f . /f set |
|
}{ } ifelse |
|
oxasir.ccc [(fctr) f] asir /arg1 set |
|
] pop |
|
popEnv |
|
popVariables |
|
arg1 |
|
} def |
|
|
|
[(fctr) |
|
[(You need to install ox_asir server to use this function. (ox_asir function)) |
|
(f fctr g) |
|
(poly f; array g;) |
|
([f v] fctr g ; string f, string or array of string v) |
|
(This function factors the polynomial f over Q.) |
|
( ) |
|
(Example 1: [(x^10-y^10) (x,y)] fctr ::) |
|
(Example 2: (x^10-1). fctr ::) |
|
( ) |
|
(If you interrupted the computation by typing ctrl-C, type in ) |
|
( oxasir.ccc oxreset ; ) |
|
(to interrupt the ox_asir server.) |
|
( ) |
|
(This function requires plugins cmo, socket and ox_asir server. cf.oxasir) |
]] putUsages |
]] putUsages |
|
|
/getPathNameAsir { |
|
|
[(primadec) |
|
[(You need to install ox_asir server to use this function. (ox_asir function)) |
|
([ ii ] primadec [[q1 p1] [q2 p2] ... ] ) |
|
( array of poly ii; array of poly q1, p1, q2, p2 ...;) |
|
( q1, q2, ... are primary components of the primary ideal decomposition) |
|
( of the ideal generated by << ii >>.) |
|
( ) |
|
([ ii v ] primadec [[q1 p1] [q2 p2] ... ] ) |
|
( array of poly or string ii; array of string v; array of poly q1, p1, q2, p2 ...;) |
|
(<< v >> is an array of independent variables.) |
|
( ) |
|
([ ii v ] primadec [[q1 p1] [q2 p2] ... ] ) |
|
( array of poly or string ii; array of string v; array of poly q1, p1, q2, p2 ...;) |
|
( v is a string of variables separated by , ) |
|
( ) |
|
(Example: [(x,y) ring_of_polynomials 0] define_ring) |
|
( [ [(x^2-1). (x y).] ] primadec pmat ;) |
|
( ) |
|
(Example: [ [(x^2-1) (x y)] [(x) (y)]] primadec pmat ;) |
|
( ) |
|
(If you interrupted the computation by typing ctrl-C, type in ) |
|
( oxasir.ccc oxreset ; ) |
|
(to interrupt the ox_asir server.) |
|
( ) |
|
(This function requires plugins cmo, socket and ox_asir server. cf.oxasir) |
|
]] putUsages |
|
|
|
/primadec { |
/arg1 set |
/arg1 set |
[/in-getPathNameAsir /fname /fullname /tname] pushVariables |
[/in-primadec /aa /f /comm /vvv /r /setarg] pushVariables |
|
[(CurrentRingp)] pushEnv |
[ |
[ |
/fname arg1 0 get def |
/aa arg1 def |
%% If fullname is given, use it. |
aa isArray { } { (<<array>> primadec) error } ifelse |
fname (array) dc 0 get |
/setarg 0 def |
(/) (array) dc 0 get eq |
oxasir.ccc [ ] eq { |
{ /fullname fname def |
(Starting ox_asir server.) message |
/getPathNameAsir.LLL goto |
ox_asirConnectMethod |
} { } ifelse |
} { } ifelse |
|
aa { tag } map /typev set |
|
typev [ ArrayP ] eq |
|
{ /f aa 0 get def |
|
f 0 get (ring) dc /r set |
|
[(CurrentRingp) r] system_variable |
|
/vvv getVariableNames def |
|
/setarg 1 def |
|
} { } ifelse |
|
typev [ArrayP StringP] eq |
|
{ /f aa 0 get def |
|
/vvv [ aa 1 get to_records pop ] def |
|
/setarg 1 def |
|
} { } ifelse |
|
typev [ArrayP ArrayP] eq |
|
{ /f aa 0 get def |
|
/vvv aa 1 get {toString} map def |
|
/setarg 1 def |
|
} { } ifelse |
|
setarg { } { (primadec : Argument mismatch) error } ifelse |
|
|
%% Else first try to find it in /usr/local/lib/asir |
f 0 get isPolynomial { |
[(stat) [(/usr/local/lib/asir/) fname] cat] extension |
/r f 0 get (ring) dc def |
0 get isInteger %% The file was found. |
/vvv vvv { r ,, } map def |
{ /fullname [(/usr/local/lib/asir/) fname] cat def |
} |
/getPathNameAsir.LLL goto |
{ |
} { } ifelse |
[vvv from_records ring_of_polynomials 0] define_ring |
|
f { toString . } map /f set |
|
vvv { . } map /vvv set |
|
} ifelse |
|
oxasir.ccc [(primadec) f vvv] asir /arg1 set |
|
] pop |
|
popEnv |
|
popVariables |
|
arg1 |
|
} def |
|
|
%% Else try to find it in ASIR_LIBDIR |
|
[(getenv) (ASIR_LIBDIR)] extension /tname set |
/getVlist2 { |
tname isString |
[/n /i ] pushVariables |
{ |
[ |
[(stat) [tname (/) fname] cat] extension |
/n [(N)] system_variable def |
0 get isInteger %% The file was found. |
[ |
{ /fullname [tname (/) fname] cat def |
0 1 n 1 sub { /i set (x) i (dollar) dc 2 cat_n } for |
/getPathNameAsir.LLL goto |
0 1 n 1 sub { /i set (d) i (dollar) dc 2 cat_n } for |
} { } ifelse |
] /arg1 set |
|
] pop |
|
popVariables |
|
arg1 |
|
} def |
|
|
|
%%%%%%%%%%%%%%%%%%% |
|
/getVlist { |
|
[/n /i ] pushVariables |
|
[ |
|
/n [(N)] system_variable def |
|
[ |
|
0 1 n 1 sub { /i set [(x) (var) i] system_variable } for |
|
0 1 n 1 sub { /i set [(D) (var) i] system_variable } for |
|
] /arg1 set |
|
] pop |
|
popVariables |
|
arg1 |
|
} def |
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
[(chattr) 0 /findIntegralRoots] extension pop |
|
/findIntegralRoots { |
|
/arg1 set |
|
[/in-findIntegralRoots /pp ] pushVariables |
|
[ |
|
/pp arg1 def |
|
oxasir.ccc [ ] eq { |
|
(Starting ox_asir server.) message |
|
ox_asirConnectMethod |
|
} { } ifelse |
|
oxasir.ccc oxIsServerReady |
|
{ pp findIntegralRoots.oxasir /arg1 set} |
|
{ pp findIntegralRoots.slow /arg1 set} ifelse |
|
] pop |
|
popVariables |
|
arg1 |
|
} def |
|
|
|
/findIntegralRoots.oxasir { |
|
/arg1 set |
|
[/in-findIntegralRoots /f /r /g /aa /rlist] pushVariables |
|
[(CurrentRingp) (KanGBmessage)] pushEnv |
|
[ |
|
/f arg1 def |
|
[(s) ring_of_polynomials 0] define_ring |
|
f toString . /f set |
|
f fctr rest /g set |
|
g { |
|
0 get /aa set |
|
aa (s). degree 1 eq { |
|
aa (s). coeff 1 get /aa set |
|
aa length 1 eq { 0 } |
|
{ aa 0 get (1). eq { |
|
0 << aa 1 get (integer) dc >> sub |
|
} { } ifelse |
|
} ifelse |
|
}{ } ifelse |
|
} map |
|
/rlist set |
|
%% rlist :: |
|
[-1000000] rlist join shell rest /arg1 set |
|
] pop |
|
popEnv |
|
popVariables |
|
arg1 |
|
} def |
|
|
|
%%%%%%%%%%%%% From gbhg3/Int/intw.sm1 |
|
%% This function needs solv1.asir and ox_asir. |
|
%% See solv1.asir for the usage of this function. |
|
/rationalRoots2 { |
|
/arg1 set |
|
[/in-rationalRoots2 /aa /f /comm /vvv /r /setarg |
|
/w /ans |
|
] pushVariables |
|
[(CurrentRingp) (KanGBmessage)] pushEnv |
|
[ |
|
/aa arg1 def |
|
aa isArray { } { (<<array>> rationalRoots2) error } ifelse |
|
/setarg 0 def |
|
oxasir.ccc [ ] eq { |
|
(Starting ox_asir server.) message |
|
ox_asirConnectMethod |
|
} { } ifelse |
|
aa { tag } map /typev set |
|
typev [ArrayP StringP ArrayP] eq |
|
{ /f aa 0 get def |
|
/vvv [ aa 1 get to_records pop ] def |
|
/w aa 2 get def |
|
/setarg 1 def |
|
} { } ifelse |
|
typev [ArrayP ArrayP ArrayP] eq |
|
{ /f aa 0 get def |
|
/vvv aa 1 get {toString} map def |
|
/setarg 1 def |
|
/w aa 2 get def |
|
} { } ifelse |
|
setarg { } { (rationalRoots2 : Argument mismatch) error } ifelse |
|
|
|
|
|
[vvv from_records ring_of_polynomials 0] define_ring |
|
f { toString . } map /f set |
|
vvv { . } map /vvv set |
|
w { toString . } map /w set |
|
|
|
(rationalRoots2 -- f = ) messagen f messagen |
|
( , vvv= ) messagen vvv messagen ( , w = ) messagen w message |
|
|
|
vvv length 1 eq w 0 get (1). eq and |
|
{ |
|
[(KanGBmessage) 0] system_variable |
|
[f] groebner_sugar 0 get /f set |
|
vvv 0 get toString (s) eq { |
|
}{ [[vvv 0 get toString (s)] from_records ring_of_polynomials 0] define_ring} |
|
ifelse |
|
f 0 get toString . [[vvv 0 get toString . (s).]] replace |
|
findIntegralRoots /ans set |
|
} |
|
{ |
|
oxasir.ccc [(sm1_rationalRoots2) f vvv w] asir |
|
{(integer) dc} map |
|
/ans set |
|
} ifelse |
|
|
|
/arg1 ans def |
|
] pop |
|
popEnv |
|
popVariables |
|
arg1 |
|
} def |
|
[(rationalRoots2) |
|
[(rationalRoots2 (ox_asir function) called from intw.sm1 to analyze integral) |
|
(roots.) |
|
]] putUsages |
|
|
|
/ptozp_subst { |
|
/arg1 set |
|
[/in-ptozp_subst /aaa /fff /xxx /vvv /vlist] pushVariables |
|
[(CurrentRingp)] pushEnv |
|
[ |
|
/aaa arg1 def |
|
/fff aaa 0 get def |
|
/xxx aaa 1 get toString def |
|
/vvv aaa 2 get {toString ..} map def |
|
aaa length 4 eq { |
|
/vlist aaa 3 get def |
|
} { |
|
/vlist 0 def |
|
} ifelse |
|
oxasir.ccc [ ] eq { |
|
(Starting ox_asir server.) message |
|
ox_asirConnectMethod |
} { } ifelse |
} { } ifelse |
|
fff isPolynomial { |
%% Otherwise error. |
fff (ring) dc ring_def |
[ (getPathNameAsir: The file ) fname |
fff toString /fff set |
( could not be found ) |
} |
(neigher in /usr/local/lib/asir nor in ASIR_LIBDIR. ) |
{ vlist isInteger { (ptozp_subst: need variable names.) error } { } ifelse |
] cat /getPathNameAsir.errorMessage set |
[vlist ring_of_differential_operators 0] define_ring |
getPathNameAsir.errorMessage message |
} ifelse |
] pop popVariables getPathNameAsir.errorMessage error |
oxasir.ccc [(sm1_ptozp_subst) fff . xxx . vvv] asir |
|
/arg1 set |
|
] pop |
|
popEnv |
|
popVariables |
|
arg1 |
|
} def |
|
|
/getPathNameAsir.LLL |
[(ptozp_subst) |
/arg1 fullname def |
[$[f s [p q] v] ptozp_subst g (ox_asir function)$ |
|
$It returns ptozp(subst(f,s,p/q))$ |
|
$Example 1: [ (x Dx - s) (s) [2 3] (x,s)] ptozp_subst $ |
|
$ ===> 3 x Dx - 2 $ |
|
]] putUsages |
|
|
|
/reduceByAsir { |
|
/arg1 set |
|
[/in-reduceByAsir /aaa /fff /fff0 /fff1 /vlist] pushVariables |
|
[(CurrentRingp)] pushEnv |
|
[ |
|
/aaa arg1 def |
|
/fff aaa 0 get def |
|
aaa length 2 eq { |
|
/vlist aaa 1 get def |
|
} { |
|
/vlist 0 def |
|
} ifelse |
|
oxasir.ccc [ ] eq { |
|
(Starting ox_asir server.) message |
|
ox_asirConnectMethod |
|
} { } ifelse |
|
fff isArray { |
|
fff length 2 eq { |
|
/fff0 fff 0 get def |
|
/fff1 fff 1 get def |
|
} { |
|
([ << [f g] >> vlist ] reduceByAsir ) error |
|
} ifelse |
|
} { |
|
([ << [f g] >> vlist ] reduceByAsir ) error |
|
} ifelse |
|
fff0 isPolynomial fff1 isPolynomial and { |
|
fff0 (ring) dc ring_def |
|
fff0 toString . /fff0 set |
|
fff1 (ring) dc ring_def |
|
fff1 toString . /fff1 set |
|
} |
|
{ vlist isInteger { (reduceByAsir: need variable names.) error } { } ifelse |
|
[vlist ring_of_differential_operators 0] define_ring |
|
fff0 toString . /fff0 set |
|
fff1 toString . /fff1 set |
|
} ifelse |
|
oxasir.ccc [(sm1_rat2plist2) [fff0 fff1]] asir |
|
/arg1 set |
] pop |
] pop |
|
popEnv |
popVariables |
popVariables |
arg1 |
arg1 |
} def |
} def |
[(getPathNameAsir) |
|
[([fname] getPathNameAsir fullname) |
[(reduceByAsir) |
(string fname, fullname) |
[$ [[f g] v] reduceByAsir [ff gg] (ox_asir function)$ |
(This command searches the fname in /usr/local/lib/asir and ASIR_LIBDIR) |
$ [[f g]] reduceByAsir [ff gg] $ |
(and returns the fullname.) |
$Example 1: [[(2 x -2) (4 x - 8)] (x)] reduceByAsir $ |
|
(Note that there may be a gcd that is more than 1 among the coefficients.) |
]] putUsages |
]] putUsages |
|
|
|
%% File should be preprocessed by OpenXM/misc/packages/Windows/oxpp |
|
%% and ./oxapp --removeSharp |
|
[(oxasirParseFile) |
|
[$[peer filename] oxasirParseFile $ |
|
$File should be preprocessed by OpenXM/misc/packages/Windows/oxpp$ |
|
$and ./oxapp --removeSharp $ |
|
]] putUsages |
|
|
/ox_launch_nox { |
/oxasirParseFile { |
/@@@.ox_launch_nox 1 def |
/arg1 set |
ox_launch_aux |
[/in-oxasirParseFile /fname /sss] pushVariables |
|
[ |
|
/fname arg1 1 get def |
|
/peer arg1 0 get def |
|
fname pushfile /sss set |
|
peer |
|
[$if (1) { ; $ sss (}$)] cat |
|
oxsubmit |
|
] pop |
|
popVariables |
} def |
} def |
/ox_launch { |
|
/@@@.ox_launch_nox 0 def |
[(bfct) |
ox_launch_aux |
[ |
|
( f bfct b ) |
|
( poly f; poly b) |
|
([f v] bfct b) |
|
( string f ) |
|
( b is the global b-function of the polynomial f.) |
|
(Example: [(x^3-y^2) (x,y)] bfct fctr :: ) |
|
(Algorithm: M.Noro, Mathematical Software, icms 2002, pp.147--157.) |
|
( ) |
|
(If you interrupted the computation by typing ctrl-C, type in ) |
|
( oxasir.ccc oxreset ; ) |
|
(to interrupt the ox_asir server.) |
|
( ) |
|
(This function requires plugins cmo, socket and ox_asir server. cf.oxasir) |
|
(You need to install ox_asir server to use this function. (ox_asir function)) |
|
]] putUsages |
|
|
|
/bfct { |
|
/arg1 set |
|
[/in-bfct /f /comm /vv] pushVariables |
|
[(CurrentRingp)] pushEnv |
|
[ |
|
/f arg1 def |
|
oxasir.ccc [ ] eq { |
|
(Starting ox_asir server.) message |
|
ox_asirConnectMethod |
|
} { } ifelse |
|
|
|
f isPolynomial not { |
|
/vv f 1 get def |
|
vv isArray { /vv vv from_records def } { } ifelse |
|
/f f 0 get def |
|
[vv ring_of_polynomials 0] define_ring |
|
f . /f set |
|
}{ } ifelse |
|
oxasir.ccc [(oxasir_bfct) f] asir /f set |
|
[(s) ring_of_polynomials 0] define_ring |
|
f . /f set |
|
[f f fctr] /arg1 set |
|
] pop |
|
popEnv |
|
popVariables |
|
arg1 |
} def |
} def |
|
|
/ox_launch_aux { |
[(generic_bfct) |
/arg1 set |
|
[/in-launch_nox /pass /peer /data /control /name /machine |
|
/your-peer /comm /remoteOpenXMbin /remoteServer /myhost |
|
] pushVariables |
|
[ |
[ |
/machine arg1 0 get def |
( [ii weight] generic_bfct b ) |
/remoteOpenXMbin arg1 1 get def |
( list of poly ii; list weight) |
/remoteServer arg1 2 get def |
([ii weight variables] generic_bfct b) |
/name arg1 3 get def |
( list of string ii; list weight; list variables) |
/myhost arg1 4 get def |
( b is the general b-function of the ideal ii w.r.t the weight.) |
|
(Example: [[(Dx^2) (Dy^2)] [(x) -1 (Dx) 1] [(x) (y)]] generic_bfct :: ) |
|
(Notion: Saito, Sturmfels, Takayama, Grobner deformations of hypergeometric differential equaitons) |
|
(Algorithm: M.Noro, Mathematical Software, icms 2002, pp.147--157.) |
|
( ) |
|
(If you interrupted the computation by typing ctrl-C, type in ) |
|
( oxasir.ccc oxreset ; ) |
|
(to interrupt the ox_asir server.) |
|
( ) |
|
(This function requires plugins cmo, socket and ox_asir server. cf.oxasir) |
|
(You need to install ox_asir server to use this function. (ox_asir function)) |
|
]] putUsages |
|
|
/pass [(oxGenPass)] extension def |
/generic_bfct { |
/peer [(oxGetPort) myhost] extension def |
/arg1 set |
/data peer 1 get toString def |
[/in-generic_bfct /aa /f /comm /vvv0 /n /vvv /ddd /r /setarg |
/control peer 3 get toString def |
/bf /wt ] pushVariables |
peer message |
[(CurrentRingp)] pushEnv |
[(ssh -f ) machine ( -l ) name ( ") |
[ |
|
/aa arg1 def |
|
aa isArray { } { (<<array>> generic_bfct) error } ifelse |
|
/setarg 0 def |
|
aa { tag } map /typev set |
|
typev [ ArrayP ArrayP] eq |
|
{ /f aa 0 get def |
|
f 0 tag PolyP { } { (The first argument must be a list of differential operators. Give the third variable: a list of variables) error } ifelse |
|
f 0 get (ring) dc /r set |
|
[(CurrentRingp) r] system_variable |
|
/wt aa 1 get def |
|
|
@@@.ox_launch_nox { |
/vvv0 getVariableNames def |
} { |
/n [(N)] system_variable def |
remoteOpenXMbin(/oxlog ) |
/vvv vvv0 n carN rest reverse rest reverse def |
( /usr/X11R6/bin/xterm -icon -e ) |
/ddd vvv0 reverse n carN reverse |
} ifelse |
rest reverse rest reverse def |
|
|
( ) remoteOpenXMbin (/ox ) |
/wt wt generic_bfct.aux1 def |
( -reverse -ox ) remoteServer |
|
( -host ) myhost |
/setarg 1 def |
|
} { } ifelse |
|
typev [ArrayP ArrayP StringP] eq |
|
{ /f aa 0 get def |
|
/vvv [ aa 2 get to_records pop ] def |
|
/wt aa 1 get def |
|
|
|
/n vvv length def |
|
/ddd vvv { (D) 2 1 roll 2 cat_n } map def |
|
|
|
/setarg 1 def |
|
} { } ifelse |
|
typev [ArrayP ArrayP ArrayP] eq |
|
{ /f aa 0 get def |
|
/vvv aa 2 get {toString} map def |
|
/wt aa 1 get def |
|
|
|
/n vvv length def |
|
/ddd vvv { (D) 2 1 roll 2 cat_n } map def |
|
|
|
/setarg 1 def |
|
} { } ifelse |
|
setarg { } { (generic_bfct : Argument mismatch) error } ifelse |
|
|
|
f 0 get isPolynomial { |
|
|
|
} |
|
{ |
|
[vvv from_records ring_of_differential_operators 0] define_ring |
|
f { toString . } map /f set |
|
vvv { . } map /vvv set |
|
ddd { . } map /ddd set |
|
/wt wt generic_bfct.aux1 def |
|
} ifelse |
|
[f vvv ddd wt] message |
|
|
|
oxasir.ccc [ ] eq { |
|
(Starting ox_asir server.) message |
|
ox_asirConnectMethod |
|
} { } ifelse |
|
|
|
oxasir.ccc [(oxasir_generic_bfct) f vvv ddd wt] asir /bf set |
|
[(s) ring_of_polynomials 0] define_ring |
|
bf . /bf set |
|
[bf bf fctr] /arg1 set |
|
] pop |
|
popEnv |
|
popVariables |
|
arg1 |
|
} def |
|
|
|
/generic_bfct.aux1 { |
|
/arg1 set |
|
[/in-generic_bfct.aux1 /wt /wtx /wtd /n] pushVariables |
|
[ |
|
arg1 /wt set |
|
/n [(N)] system_variable def |
|
wt { dup tag PolyP eq { toString } { } ifelse } map /wt set |
|
wt weightv /wt set |
|
/wtx wt n carN rest reverse rest reverse def |
|
/wtd wt reverse n carN reverse |
|
rest reverse rest reverse def |
|
wtx wtd join /wt set |
|
wt { dup tag IntegerP eq { (universalNumber) dc } { } ifelse } map /wt set |
|
wt /arg1 set |
|
] pop |
|
popVariables |
|
arg1 |
|
} def |
|
/verbose.wgr 1 def |
|
%[ ff vv ww ] asir.wgb [gb init] |
|
/asir.wgr { |
|
/arg1 set |
|
[/in-asir.gb /ff /vv /ww /vvx /vvd /avv /comm /wvec /i] pushVariables |
|
[ |
|
/ff arg1 0 get def |
|
/vv arg1 1 get def |
|
/ww arg1 2 get def |
|
|
|
oxasir.ccc [ ] eq { |
|
(Starting ox_asir server.) message |
|
ox_asirConnectMethod |
|
} { } ifelse |
|
|
|
vv isArray { |
|
vv from_records /vv set |
|
} { } ifelse |
|
oxasir.ccc [(dp_gr_print) (2)..] asir |
|
[vv to_records pop] /vvx set |
|
vvx { toString (D) 2 1 roll 2 cat_n } map /vvd set |
|
|
|
[ |
|
0 1 vvx length 1 sub { |
|
/i set |
|
vvx i get |
|
0 ww i get sub |
|
vvd i get |
|
ww i get |
|
} for |
|
] /wvec set |
|
|
|
[vv ring_of_differential_operators |
|
[wvec] weight_vector |
|
0] define_ring |
|
|
|
ff { . dehomogenize homogenize } map /ff set |
|
vvx { . } map /vvx set %%ex [x,y] |
|
vvd { . } map /vvd set %%ex [Dx,Dy] |
|
vvx vvd join [(h).] join /avv set |
|
|
|
verbose.wgr { |
|
(Asir (-w,w) gb in the Weyl algebra) message |
|
(wvec=) messagen wvec message |
|
(ff=) messagen ff message |
|
(avv=) messagen avv message |
|
} { } ifelse |
|
|
|
[$dp_weyl_set_weight(newvect($ ww length toString $,$ |
|
ww toString $));$ ] cat /comm set |
|
|
|
verbose.wgr { |
|
comm message |
|
} { } ifelse |
|
|
|
oxasir.ccc comm oxsubmit ; |
|
|
|
oxasir.ccc [(dp_weyl_gr_main) ff avv (0).. (1).. (11)..] asir |
|
/arg1 set |
|
] pop |
|
popVariables |
|
arg1 |
|
} def |
|
[(asir.wgr) |
|
[([ ff vv ww ] asir.wgr g) |
|
$It computes the (-ww,ww) Grobner basis of ff in the homogenized Weyl algebra.$ |
|
(Homogenization is automatically done.) |
|
$Example 1: $ |
|
$ [ [(x*Dx+y*Dy-1) (Dx*Dy)] $ |
|
$ (x,y) $ |
|
$ [1 2 ] ] asir.wgr $ |
|
]] putUsages |
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
%%% functions to start ox_asir |
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
/asirconnectr { |
|
[/in-asirconnectr /pass /peer /data /control /oxasir] pushVariables |
|
[ |
|
[(getServerEnv) (bin/ox_asir)] extension tag 0 eq { |
|
(Server bin/ox_sm1 is not found.) error |
|
}{ } ifelse |
|
|
|
/pass [(oxGenPass)] extension def |
|
/peer [(oxGetPort) (localhost)] extension def |
|
/data peer 1 get toString def |
|
/control peer 3 get toString def |
|
peer message |
|
[ |
|
oxstart100 |
|
Xm_noX { ( -nox ) } { } ifelse |
|
( -oxserver bin/ox_asir -e ) ( -reverse ) |
( -data ) data ( -control ) control ( -pass ) pass |
( -data ) data ( -control ) control ( -pass ) pass |
oxpath.null |
( )] cat execve |
( ") |
[(oxCreateClient2) peer 0 pass] extension /oxasir.ccc set |
] cat /comm set |
%% 0 means connect from only localhost. |
(Executing the command : ) messagen comm message message |
oxasir.ccc asir.init |
comm system |
/arg1 oxasir.ccc def |
(sleep 5) system-csh |
|
[(oxCreateClient2) peer 1 pass] extension /your-peer set |
|
/arg1 your-peer def |
|
] pop |
] pop |
popVariables |
popVariables |
arg1 |
arg1 |
} def |
} def |
|
|
[(ox_launch) |
[(asirconnectr) |
[( [remote remote-OpenXM-bin remote-ox-server remote-login-name myhostname] ) |
[(asirconnectr server (ox_asir function)) |
( ox_launch client ) |
(array server;) |
(Example 1: ) |
(Example: asirconnectr /oxasir.ccc set) |
$ [(tau.math.kobe-u.ac.jp) (/home/taka/OpenXM/bin) $ |
|
$ (/home/taka/OpenXM/src/ox_math/ox_math) (taka) (dc4.math.kobe-u.ac.jp) $ |
|
$ ] ox_launch /@@@.oxmath set $ |
|
]] putUsages |
]] putUsages |
|
|
[(ox_launch_nox) |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
[( [remote remote-OpenXM-bin remote-ox-server remote-login-name myhostname] ) |
%%% functions to start ox_k0 |
( ox_launch_nox client ) |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
(Example 1: ) |
/oxk0.ccc load isArray |
$ [(tau.math.kobe-u.ac.jp) (/home/taka/OpenXM/bin) $ |
{ } |
$ (/home/taka/OpenXM/src/ox_math/ox_math) (taka) (dc4.math.kobe-u.ac.jp) $ |
{ /oxk0.ccc [ ] def } ifelse |
$ ] ox_launch_nox /@@@.oxmath set $ |
|
]] putUsages |
|
|
|
/system-csh { |
/ox.k0.init { |
/arg1 set |
% oxk0.ccc ( Print("Hello!"); ) oxsubmit |
[/in-system-csh /com /com2] pushVariables |
Xm_noX { oxk0.ccc (Xm_noX=true;) oxsubmit } |
[ |
{ oxk0.ccc (Xm_noX=false;) oxsubmit } ifelse |
/com arg1 def |
|
[(/bin/csh -c ") com (")] cat |
|
/com2 set |
|
%% com2 message |
|
com2 system |
|
] pop |
|
popVariables |
|
} def |
} def |
|
|
|
/k0connectr { |
|
[/in-k0connectr /pass /peer /data /control ] pushVariables |
|
[ |
|
[(getServerEnv) (bin/ox_k0)] extension tag 0 eq { |
|
(Server bin/ox_sm1 is not found.) error |
|
}{ } ifelse |
|
|
initializePathNamesForOx %% This should be |
/pass [(oxGenPass)] extension def |
|
/peer [(oxGetPort) (localhost)] extension def |
|
/data peer 1 get toString def |
|
/control peer 3 get toString def |
|
peer message |
|
[ |
|
oxstart100 |
|
Xm_noX { ( -nox ) } { } ifelse |
|
( -oxserver bin/ox_k0 -e ) ( -reverse ) |
|
( -data ) data ( -control ) control ( -pass ) pass |
|
( )] cat execve |
|
[(oxCreateClient2) peer 0 pass] extension /oxk0.ccc set |
|
%% 0 means connect from only localhost. |
|
(The server is binded to the variable oxk0.ccc) message |
|
ox.k0.init |
|
/arg1 oxk0.ccc def |
|
] pop |
|
popVariables |
|
arg1 |
|
} def |
|
/@@@polymake.k0.ccc [ ] def |
|
|