=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/Doc/ox.sm1,v retrieving revision 1.11 retrieving revision 1.22 diff -u -p -r1.11 -r1.22 --- OpenXM/src/kan96xx/Doc/ox.sm1 2000/02/02 02:03:42 1.11 +++ 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.10 2000/01/30 10:09:44 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 { } @@ -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 @@ -915,5 +924,227 @@ ox.verbose { arg1 } def +%% 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 -initializePathNamesForOx %% This should be + [(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