=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/Doc/ox.sm1,v retrieving revision 1.9 retrieving revision 1.22 diff -u -p -r1.9 -r1.22 --- OpenXM/src/kan96xx/Doc/ox.sm1 2000/01/19 10:02:11 1.9 +++ OpenXM/src/kan96xx/Doc/ox.sm1 2003/01/01 02:03:41 1.22 @@ -1,4 +1,6 @@ -%%%%%%%%%%% $OpenXM: OpenXM/src/kan96xx/Doc/ox.sm1,v 1.8 2000/01/19 08:33:27 takayama Exp $ +%%%%%%%%%%% $OpenXM: OpenXM/src/kan96xx/Doc/ox.sm1,v 1.21 2002/11/08 14:18:00 takayama Exp $ + +/ox.sm1.loaded 1 def %%%%%%%%%%%% 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 @@ -44,7 +46,12 @@ oxpath.oxlog.xterm message } def -/ox.ccc.init { ox.ccc ( [(oxPrintMessage) 0] extension pop ) oxsubmit } def +/ox.ccc.init { + ox.ccc ( [(oxPrintMessage) 0] extension pop ) oxsubmit + (Ox103_loaded) boundp + { ox.ccc ox103_sm1_init } + { } ifelse +} def /ox.verbose 0 def /ox.version (2.981105) def @@ -53,7 +60,7 @@ ox.version [(Version)] system_variable gt (Please get it from http://www.math.kobe-u.ac.jp/KAN) message error } { } ifelse -(ox.sm1, --- open sm1 protocol module 11/11,1999 (C) N.Takayama. oxhelp for help) message-quiet +(ox.sm1, ---OpenXM protocol module 08/22, 2001 (C) N.Takayama. oxhelp for help) message-quiet /ox.ccc load isArray { } @@ -73,7 +80,7 @@ ox.version [(Version)] system_variable gt /SM_popCMO 262 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_pops 265 def @@ -87,6 +94,7 @@ ox.version [(Version)] system_variable gt /SM_control_kill 1024 def /SM_control_reset_connection 1030 def +/SM_control_spawn_server 1027 def /Etag_error 257 def @@ -142,6 +150,7 @@ ox.version [(Version)] system_variable gt (oxpopcmo1, oxpopcmo2, sm1connect2, sm1connect3) (sm1connectr ox_launch, ox_launch_nox) (oxNoX : set an environment to invoke oxlog without xterm and to call oxlog with >& /dev/null) + (oxresetAll, oxIsInterruptable, [(oxGetClientList)] extension ) $ ex 1. (ox.sm1) run oxNoX sm1connectr $ $ ex 2. (oxasir.sm1) run oxNoX (x^2-1). fctr pmat ; $ ] @@ -355,7 +364,7 @@ ox.verbose { oxhelp } { } ifelse /oxreset { /arg1 set [(oxReq) arg1 SM_control_reset_connection] extension pop - [(oxGetFromControl) arg1 ] extension pop +%% [(oxGetFromControl) arg1 ] extension pop [(oxGet) arg1] extension message } def @@ -811,13 +820,21 @@ ox.verbose { /arg1 set [/in-launch_nox /pass /peer /data /control /name /machine /your-peer /comm /remoteOpenXMbin /remoteServer /myhost + /argNumber /aaa ] pushVariables [ - /machine arg1 0 get def - /remoteOpenXMbin arg1 1 get def - /remoteServer arg1 2 get def - /name arg1 3 get def - /myhost arg1 4 get def + /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 /pass [(oxGenPass)] extension def /peer [(oxGetPort) myhost] extension def @@ -843,6 +860,7 @@ ox.verbose { comm system (sleep 5) system-csh [(oxCreateClient2) peer 1 pass] extension /your-peer set + /LLL.end /arg1 your-peer def ] pop popVariables @@ -852,6 +870,8 @@ ox.verbose { [(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) $ @@ -880,5 +900,251 @@ ox.verbose { popVariables } def +/ox_launch_localhost { + /arg1 set + [/in-ox_launch_localhost /pass /peer /data /control /oxserver + /my-peer] pushVariables + [ + /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. + (The server is binded to the variable ox.ccc) message + /arg1 my-peer def + ] pop + popVariables + arg1 +} def -initializePathNamesForOx %% This should be +%% Test code for oxCreateControl_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 + + [(oxCreateControl_RFC_101) peer 0 pass] extension /ox.ccc set + %% 0 means connect from only localhost. + (The server is binded to the variable ox.ccc) message + ox.ccc + ] pop + popVariables +} def + +/sm1StartEngine101 { + [/in-sm1StartEngine101 /peer /data /control /engineID] pushVariables + [ + /peer [(oxGetPort1) (localhost)] extension def + /data peer 1 get def + + ox.ccc data oxpushcmo + ox.ccc (/home/nobuki/OpenXM/bin/ox_sm1) oxpushcmo + [(oxPushCMD) ox.ccc SM_control_spawn_server] extension + ox.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 + +/OxWorkDirCreated false def +/oxWorkDir { + [/in-oxWorkDir /workHome /work] pushVariables + [ + [(getenv) (OpenXM_tmp)] extension tag 0 eq { + /workHome [ + [(getenv) (HOME)] extension + (/OpenXM_tmp) + ] cat def + }{ + /workHome + [(getenv) (OpenXM_tmp)] extension + def + }ifelse + /work [workHome (/) [(getpid)] extension toString] cat def + + OxWorkDirCreated not { + [(stat) workHome] extension 0 get tag 0 eq { + [(Working directory ) workHome ( will be created.)] cat + message + [(mkdir ) workHome] cat system + }{ + } ifelse + + [(stat) work] extension 0 get tag 0 eq { + [(Working directory ) work ( will be created.)] cat + message + [(mkdir ) work] cat system + }{ + } ifelse + /OxWorkDirCreated true def + }{ } ifelse + /arg1 work def + ] pop + popVariables + arg1 +} def +[(oxWorkDir) + [(oxWorkDir returns a name of working directory for OpenXM processes.) + (If the working direcotry does not exist, it creates ~/OpenXM_tmp/[pid].) + (The name can be changed by setting a value to the environmental variable) + (OpenXM_tmp. cf. oxNewFileName) + ] +] putUsages + +/OxFileName 0 def +/oxNewFileName { + [/in-oxNewFileName /name] pushVariables + [ + /name [(work) OxFileName toString] cat def + /OxFileName OxFileName 1 add def + /arg1 name def + ] pop + popVariables + arg1 +} def +[(oxNewFileName) + [(oxNewFileName returns a unique file name for a working file.) + (cf. oxWorkDir) + ] +] putUsages + +/ox_get_os { + [/in-ox_get_ox /os1 /os2] pushVariables + [ + /os1 [(ostype)] extension 0 get def + os1 (windows) eq { + [(getenv) (WINDOWID)] extension tag 0 eq not { + %% expect cygwin X + /os2 (xcygwin) def + }{ + [(getenv) (OSTYPE)] extension tag 0 eq not + [(getenv) (MACHTYPE)] extension tag 0 eq not or + [(getenv) (PWD)] extension tag 0 eq not or + { + %% expect cygwin environment + /os2 (cygwin) def + }{ + %% expect the native windows environment + /os2 (native) def + } ifelse + } ifelse + }{ + /os2 null def + } ifelse + /arg1 [os1 os2] def + ] pop + popVariables + arg1 +} def + +/ox.ostype ox_get_os def + +/ox_backslash_to_slash { + /arg1 set + [/in-ox_backslash_to_slash /sss ] pushVariables + [ + /sss arg1 def + sss (array) dc /sss set + sss { dup 92 eq { pop 47 } { } ifelse } map + { (string) dc } map cat /arg1 set + ] pop + popVariables + arg1 +} def +/ox_slash_to_backslash { + /arg1 set + [/in-ox_slash_to_backslash /sss ] pushVariables + [ + /sss arg1 def + sss (array) dc /sss set + sss { dup 47 eq { pop 92 } { } ifelse } map + { (string) dc } map cat /arg1 set + ] pop + popVariables + arg1 +} def + +/oxIsInterruptable { + /arg1 set % Client Object + [/in-ox_get_server_name /mcap /ans /sname] pushVariables + [ + /mcap arg1 def + /ans 0 def + mcap tag 6 eq { + mcap 10 get tag 6 eq { + mcap 10 get 1 get 0 get 1 get /sname set + }{ /sname ( ) def } ifelse + }{ + /sname ( ) def + } ifelse + (ox_sm1) sname isSubstr -1 eq { + } { /ans 1 def } ifelse + (ox_asir) sname isSubstr -1 eq { + } { /ans 1 def } ifelse + /arg1 ans def + ] pop + popVariables + arg1 +} def + +/oxresetAll { + [(oxGetClientList)] extension + { dup oxIsInterruptable { oxreset } { pop } ifelse } map +} def + +/oxrpc2 { + /arg2 set + /arg1 set + [/in-oxrpc2 /pid /n /comm /i] pushVariables + [ + /pid arg1 def + /comm arg2 def + /n comm length def + n 1 sub -1 1 { + /i set + pid comm i get oxsendcmo + } for + pid n 1 sub oxsendcmo + pid comm 0 get oxexec + ] pop + popVariables +} def + +[(oxrpc2) + [(Remote procedure call by using oxexec) + (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 + + +[(ostype)] extension 0 get +(windows) eq { + (ox-win.sm1.loaded) boundp { + }{ + [(parse) (ox-win.sm1) pushfile] extension + } ifelse +}{ + initializePathNamesForOx %% This should be +} ifelse