=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/Doc/ox.sm1,v retrieving revision 1.3 retrieving revision 1.21 diff -u -p -r1.3 -r1.21 --- OpenXM/src/kan96xx/Doc/ox.sm1 1999/11/03 00:45:43 1.3 +++ OpenXM/src/kan96xx/Doc/ox.sm1 2002/11/08 14:18:00 1.21 @@ -1,4 +1,6 @@ -%%%%%%%%%%% $OpenXM: OpenXM/src/kan96xx/Doc/ox.sm1,v 1.2 1999/11/01 03:49:47 takayama Exp $ +%%%%%%%%%%% $OpenXM: OpenXM/src/kan96xx/Doc/ox.sm1,v 1.20 2002/08/03 06:02:35 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 @@ -7,7 +9,8 @@ /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 ( >& /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 @@ -52,7 +55,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 10/1,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 { } @@ -72,7 +75,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 @@ -86,6 +89,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 @@ -139,8 +143,9 @@ ox.version [(Version)] system_variable gt (oxhelp for this message, [(oxWatch) client] extension to start a log.) ([(oxSerial)] extension serial-number-of-out-going-ox-packet.) (oxpopcmo1, oxpopcmo2, sm1connect2, sm1connect3) - (sm1connectr ) + (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 ; $ ] @@ -160,13 +165,13 @@ ox.verbose { oxhelp } { } ifelse /sm1connect2 { [oxpath.oxlog.xterm oxpath.ox ( -ox ) oxpath.oxsm1 oxpath.null - ( &)] cat system + ( &)] 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 + (sleep 5) system-csh [(localhost) 1300 1200] oxconnect /ox.ccc set (The server is binded to the variable ox.ccc) message ox.ccc.init @@ -176,13 +181,13 @@ ox.verbose { oxhelp } { } ifelse [oxpath.oxlog.xterm oxpath.ox ( -ox ) oxpath.oxsm1 ( -data 2300 -control 2200 ) oxpath.null - ( &)] cat system -% (kterm -iconic -e /home/nobuki/kxx/ox -ox /home/nobuki/kxx/ox_sm1 -data 2300 -control 2200 &) system + ( &)] 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 +%(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 + (sleep 5) system-csh [(localhost) 2300 2200] oxconnect /ox.ccc2 set (The server is binded to the variable ox.ccc2) message } def @@ -193,8 +198,8 @@ ox.verbose { oxhelp } { } ifelse [oxpath.oxlog.xterm oxpath.ox ( -ox ) oxpath.oxsm1 ( -portfile ) ox.ccc.portfile oxpath.null - ( &)] cat system - (sleep 5) system + ( &)] 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 @@ -354,7 +359,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 @@ -484,7 +489,7 @@ def /exhausted 0 def % clear the busy flag. /busy [1 1 enginesN { pop 0 } for ] def - (date) system + (date) system-csh {{ exhausted 0 eq { 0 1 enginesN 1 sub { @@ -513,7 +518,7 @@ def } { } ifelse } for } loop } timer - (date) system + (date) system-csh (result is in result) message (Number of s-pairs checked is ) messagen result length message } def @@ -585,7 +590,7 @@ ox.verbose { [oxpath.oxlog.xterm oxpath.ox ( -reverse -ox ) oxpath.oxsm1 ( -data ) data ( -control ) control ( -pass ) pass oxpath.null - ( &)] cat system + ( &)] cat system-csh [(oxCreateClient2) peer 0 pass] extension /ox.ccc set %% 0 means connect from only localhost. (The server is binded to the variable ox.ccc) message @@ -617,7 +622,7 @@ ox.verbose { ] cat /comm set (Executing the command : ) messagen comm message message comm system - (sleep 5) system + (sleep 5) system-csh [(oxCreateClient2) peer 1 pass] extension /your-peer set /arg1 your-peer def ] pop @@ -695,6 +700,19 @@ ox.verbose { } { } ifelse } { } ifelse + %% Else first try to find it in OpenXM_HOME + [(getenv) (OpenXM_HOME)] extension /tname set + tname isString + { + tname addSlash /tname set + [tname (lib/sm1/)] cat /tname set + [(stat) [tname fname] cat] extension + 0 get isInteger %% The file was found. + { /fullname [tname fname] cat def + /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. @@ -705,8 +723,11 @@ ox.verbose { %% Otherwise error. [(getPathNameSm1: The file ) fname ( could not be found ) - (neigher in LOAD_SM1_PATH=) + (neigher in LOAD\_SM1\_PATH=) [(getenv) (LOAD_SM1_PATH)] extension + ( nor in OpenXM\_HOME/lib/sm1=) + [(getenv) (OpenXM_HOME)] extension + (/lib/sm1) ( nor in /usr/local/lib/sm1) ] cat /getPathNameSm1.errorMessage set getPathNameSm1.errorMessage message @@ -721,8 +742,9 @@ ox.verbose { [(getPathNameSm1) [([fname] getPathNameSm1 fullname) (string fname, fullname) - (This command searches the fname in /usr/local/lib/sm1 and LOAD_SM1_PATH) - (and returns the fullname.) + (This command searches the fname in LOAD_SM1_PATH, ) + (OpenXM_HOME/lib/sm1, and /usr/local/lib/sm1) + (It returns the fullname.) ]] putUsages /getPathNameAsir { @@ -737,13 +759,6 @@ ox.verbose { /getPathNameAsir.LLL goto } { } ifelse - %% Else first try to find it in /usr/local/lib/asir - [(stat) [(/usr/local/lib/asir/) fname] cat] extension - 0 get isInteger %% The file was found. - { /fullname [(/usr/local/lib/asir/) fname] cat def - /getPathNameAsir.LLL goto - } { } ifelse - %% Else try to find it in ASIR_LIBDIR [(getenv) (ASIR_LIBDIR)] extension /tname set tname isString @@ -756,10 +771,19 @@ ox.verbose { } { } ifelse + %% Else try to find it in /usr/local/lib/asir + [(stat) [(/usr/local/lib/asir/) fname] cat] extension + 0 get isInteger %% The file was found. + { /fullname [(/usr/local/lib/asir/) fname] cat def + /getPathNameAsir.LLL goto + } { } ifelse + %% Otherwise error. - [ (getPathNameAsir: The file ) fname + [ (getPathNameAsir: The file ) + fname (ox_asir) eq + {(ox\_asir)} { fname }ifelse ( could not be found ) - (neigher in /usr/local/lib/asir nor in ASIR_LIBDIR. ) + (neigher in /usr/local/lib/asir nor in ASIR\_LIBDIR. ) ] cat /getPathNameAsir.errorMessage set getPathNameAsir.errorMessage message ] pop popVariables getPathNameAsir.errorMessage error @@ -778,5 +802,314 @@ ox.verbose { ]] putUsages +/ox_launch_nox { + /@@@.ox_launch_nox 1 def + ox_launch_aux +} def +/ox_launch { + /@@@.ox_launch_nox 0 def + ox_launch_aux +} def -initializePathNamesForOx %% This should be +/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 + + /pass [(oxGenPass)] extension def + /peer [(oxGetPort) myhost] extension def + /data peer 1 get toString def + /control peer 3 get toString def + peer message + [(ssh -f ) machine ( -l ) name ( ") + + @@@.ox_launch_nox { + } { + remoteOpenXMbin(/oxlog ) + ( /usr/X11R6/bin/xterm -icon -e ) + } ifelse + + ( ) remoteOpenXMbin (/ox ) + ( -reverse -ox ) remoteServer + ( -host ) myhost + ( -data ) data ( -control ) control ( -pass ) pass + oxpath.null + ( ") + ] cat /comm set + (Executing the command : ) messagen comm message message + comm system + (sleep 5) system-csh + [(oxCreateClient2) peer 1 pass] extension /your-peer set + /LLL.end + /arg1 your-peer def + ] pop + popVariables + arg1 +} 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 + +[(ox_launch_nox) +[( [remote remote-OpenXM-bin remote-ox-server remote-login-name myhostname] ) + ( ox_launch_nox 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_nox /@@@.oxmath set $ +]] putUsages + +/system-csh { + /arg1 set + [/in-system-csh /com /com2] pushVariables + [ + /com arg1 def + [(/bin/csh -c ") com (")] cat + /com2 set + %%com2 message + com2 system + ] pop + 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 + +%% 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 + +[(ostype)] extension 0 get +(windows) eq { + (ox-win.sm1.loaded) boundp { + }{ + [(parse) (ox-win.sm1) pushfile] extension + } ifelse +}{ + initializePathNamesForOx %% This should be +} ifelse