=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/Doc/ox.sm1,v retrieving revision 1.40 retrieving revision 1.59 diff -u -p -r1.40 -r1.59 --- OpenXM/src/kan96xx/Doc/ox.sm1 2004/08/22 02:00:24 1.40 +++ OpenXM/src/kan96xx/Doc/ox.sm1 2015/08/03 21:12:54 1.59 @@ -1,4 +1,4 @@ -%%%%%%%%%%% $OpenXM: OpenXM/src/kan96xx/Doc/ox.sm1,v 1.39 2004/03/08 08:24:42 takayama Exp $ +%%%%%%%%%%% $OpenXM: OpenXM/src/kan96xx/Doc/ox.sm1,v 1.58 2013/09/19 10:15:11 takayama Exp $ /ox.sm1.myname (ox-new.sm1) def @@ -48,12 +48,21 @@ ox.version [(Version)] system_variable gt /@@@.Xm_noX Xm_noX def }{ } ifelse /Xm_noX @@@.Xm_noX def +/Xm_engineLogToStdout 0 def /oxNoX { /Xm_noX 1 def } def +(@@@.monitor) boundp { +}{ + /@@@.monitor ( ) def +} ifelse +/oxMonitor { + /@@@.monitor ( -monitor ) def +} def + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% basic functions for OX-RFC 100 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -103,6 +112,7 @@ ox.version [(Version)] system_variable gt (client oxpushcmotag) ( ) (client oxgetsp --- get stack pointer, client oxgeterrors --- get all errors) + (client oxclearstack --- clear the stack of the ox server.) (cleint oxisData, client oxreset, client oxshutdown) (oxhelp for this message) ([(oxWatch) client] extension to start a log.) @@ -116,6 +126,8 @@ ox.version [(Version)] system_variable gt $ ex 2. (ox.sm1) run oxNoX (x^2-1). fctr pmat ; $ $ $ $cf. extension-oxLog $ + (oxMonitor : ox_sm1 server outputs packet dumps.) + $ ex 1. (ox.sm1) run oxMonitor sm1connectr $ ] ] putUsages @@ -348,11 +360,12 @@ ox.verbose { oxhelp } { } ifelse %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /ox_launch_nox { - /@@@.ox_launch_nox 1 def + Xm_noX /ox_launch_nox.save set + oxNoX ox_launch_aux + /Xm_noX ox_launch_nox.save def } def /ox_launch { - /@@@.ox_launch_nox 0 def ox_launch_aux } def @@ -360,7 +373,7 @@ ox.verbose { oxhelp } { } ifelse /arg1 set [/in-launch_nox /pass /peer /data /control /name /machine /your-peer /comm /remoteOpenXMbin /remoteServer /myhost - /argNumber /aaa + /argNumber /aaa /myssh ] pushVariables [ /aaa arg1 def @@ -370,36 +383,42 @@ ox.verbose { oxhelp } { } ifelse 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 + /remoteServer aaa 1 get def + /name aaa 2 get def } ifelse - /pass [(oxGenPass)] extension def + /myssh [(which) (ssh)] oxshell def + myssh tag 0 eq { + (ssh is not found.) error + } { } ifelse + + [(gethostname)] extension /myhost set + + /pass ox_encrypt_104_genPass 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 - ( ") + peer 0 get -1 eq { + (Error in oxGetPort) error + } { } ifelse + [myssh ( -X -f ) machine ( -l ) name ( ) + [ + (ox100start ) % it must be on a path of the remote host + @@@.quiet { ( -quiet ) } { } ifelse + Xm_noX { ( -nox ) } { } ifelse + ( -oxserver ) remoteServer ( -e ) + ( -reverse ) + ( -host ) myhost + ( -data ) data ( -control ) control pass [1 2] get + ] cat ] cat /comm set - (Executing the command : ) messagen comm message message - comm system - (sleep 5) system-csh - [(oxCreateClient2) peer 1 pass] extension /your-peer set + (Executing the command : ) messagen comm message + comm execve 0 lt { + (Fork exec failed) error + } { } ifelse +% ipmask must be 1 to accept from a global address. + [(oxCreateClient2) peer 1 , pass 0 get] extension /your-peer set /LLL.end /arg1 your-peer def ] pop @@ -408,22 +427,24 @@ ox.verbose { oxhelp } { } ifelse } def [(ox_launch) -[( [remote remote-OpenXM-bin remote-ox-server remote-login-name myhostname] ) +[( [remote-machine remote-ox-server-name remote-login-name] ) ( ox_launch client ) $or $ $ [(localhost) ox-server-name] ox_launch client$ + (This command launches ox server via ssh.) + (My hostname is set by the function gethostname.) (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 $ + $ [(orange2-clone) $ + $ (bin/ox_sm1) (taka)$ + $ ] ox_launch /@@@.oxsm1 set $ ]] putUsages [(ox_launch_nox) -[( [remote remote-OpenXM-bin remote-ox-server remote-login-name myhostname] ) +[( [remote-machine remote-ox-server-name remote-login-name] ) ( 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) $ + $ [(tau.math.kobe-u.ac.jp) $ + $ (bin/ox_math) (taka) $ $ ] ox_launch_nox /@@@.oxmath set $ ]] putUsages @@ -433,16 +454,20 @@ ox.verbose { oxhelp } { } ifelse /my-peer] pushVariables [ /oxserver arg1 def - /pass [(oxGenPass)] extension def + /pass ox_encrypt_104_genPass 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 + [ + oxstart100 + @@@.quiet { ( -quiet ) } { } ifelse + Xm_noX { ( -nox ) } { } ifelse + ( -oxserver ) oxserver ( -e ) + ( -reverse ) + ( -data ) data ( -control ) control pass [1 2] get + ] cat execve + [(oxCreateClient2) peer 0 pass 0 get] extension /my-peer set %% 0 means connect from only localhost. /arg1 my-peer def ] pop @@ -502,7 +527,7 @@ ox.verbose { oxhelp } { } ifelse /sm1StartControl101 { [/in-sm1connectr /pass /peer /data /control ] pushVariables [ - /pass [(oxGenPass)] extension def + /pass ox_encrypt_104_genPass def /peer [(oxGetPort1) (localhost)] extension def /data peer 1 get toString def peer message @@ -662,7 +687,7 @@ ox.verbose { oxhelp } { } ifelse [(getServerEnv) (bin/ox_sm1)] extension tag 0 eq { (Server bin/ox_sm1 is not found.) error }{ } ifelse - /pass [(oxGenPass)] extension def + /pass ox_encrypt_104_genPass def /peer [(oxGetPort) (localhost)] extension def /data peer 1 get toString def /control peer 3 get toString def @@ -671,10 +696,11 @@ ox.verbose { oxhelp } { } ifelse oxstart100 @@@.quiet { ( -quiet ) } { } ifelse Xm_noX { ( -nox ) } { } ifelse - ( -oxserver bin/ox_sm1 -e ) ( -reverse ) - ( -data ) data ( -control ) control ( -pass ) pass + Xm_engineLogToStdout { ( -nox -engineLogToStdout ) } { } ifelse %bug.onlyForsm1 + ( -oxserver bin/ox_sm1 -e ) ( -reverse ) @@@.monitor + ( -data ) data ( -control ) control pass [1 2] get ( )] cat execve - [(oxCreateClient2) peer 0 pass] extension /oxsm1.ccc set + [(oxCreateClient2) peer 0 pass 0 get] extension /oxsm1.ccc set %% 0 means connect from only localhost. (The server is binded to the variable oxsm1.ccc) message-quiet /ox.ccc oxsm1.ccc def @@ -703,7 +729,7 @@ ox.verbose { oxhelp } { } ifelse /machine arg1 0 get def /name arg1 1 get def - /pass [(oxGenPass)] extension def + /pass ox_encrypt_104_genPass def /peer [(oxGetPort) myhostname-ssh] extension def /data peer 1 get toString def /control peer 3 get toString def @@ -711,14 +737,14 @@ ox.verbose { oxhelp } { } ifelse [(ssh -f ) machine ( -l ) name ( ") oxpath.oxlog.xterm-ssh oxpath.ox-ssh ( -reverse -ox ) oxpath.oxsm1-ssh ( -host ) myhostname-ssh - ( -data ) data ( -control ) control ( -pass ) pass + ( -data ) data ( -control ) control pass [1 2] get 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 + [(oxCreateClient2) peer 1 pass 0 get] extension /your-peer set /arg1 your-peer def ] pop popVariables @@ -727,7 +753,7 @@ ox.verbose { oxhelp } { } ifelse [(sm1connectr-ssh) [([hostname login-name] sm1connectr-ssh client) (Starting oxpath.oxsm1-ssh by the launcher oxpath.ox-ssh on the "hostname".) - (cf. oxNoX ) + (cf. oxNoX ox ) (Set the following varialbes to appropriate values:) (oxpath.oxlog.xterm-ssh oxpath.oxsm1-ssh oxpath.ox-ssh myhostname-ssh ) $Example 1: $ @@ -757,7 +783,7 @@ ox.verbose { oxhelp } { } ifelse [(getServerEnv) (bin/ox_ntl)] extension tag 0 eq { (Server bin/ox_ntl is not found.) error }{ } ifelse - /pass [(oxGenPass)] extension def + /pass ox_encrypt_104_genPass def /peer [(oxGetPort) (localhost)] extension def /data peer 1 get toString def /control peer 3 get toString def @@ -766,9 +792,9 @@ ox.verbose { oxhelp } { } ifelse oxstart100 Xm_noX { ( -nox ) } { } ifelse ( -oxserver bin/ox_ntl -e ) ( -reverse ) - ( -data ) data ( -control ) control ( -pass ) pass + ( -data ) data ( -control ) control pass [1 2] get ( )] cat execve - [(oxCreateClient2) peer 0 pass] extension /oxntl.ccc set + [(oxCreateClient2) peer 0 pass 0 get] extension /oxntl.ccc set %% 0 means connect from only localhost. (The server is binded to the variable oxntl.ccc) message-quiet % oxntl.ccc.init @@ -780,7 +806,14 @@ ox.verbose { oxhelp } { } ifelse %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Aux functions for ox_asir %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -/ox_asirConnectMethod { asirconnectr /oxasir.ccc set } def +/ox_asirConnectMethod { + asirconnectr /oxasir.ccc set + [(getenv) (OX_ASIR_LOAD_FILE)] extension tag 0 eq { 0 } + { /oxasir.loadfile [$load("$[(getenv) (OX_ASIR_LOAD_FILE)] extension $");$] + cat def + oxasir.ccc oxasir.loadfile oxsubmit + oxasir.ccc oxpopcmo } ifelse +} def /oxasir.loadmethod 1 def %% "..." oxsendcmo (load) ox... /oxasir.verbose 0 def /oxasir.ccc load isArray @@ -1053,7 +1086,7 @@ oxasir.verbose { f 0 get isPolynomial { /r f 0 get (ring) dc def - /vvv vvv { r ,, } map def + /vvv vvv { r __ } map def } { [vvv from_records ring_of_polynomials 0] define_ring @@ -1095,6 +1128,7 @@ oxasir.verbose { arg1 } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /polygcd { /arg1 set [/pp /f /g /comm /vv] pushVariables @@ -1164,6 +1198,67 @@ oxasir.verbose { ] ] putUsages +/asir_red { + /arg1 set + [/pp /f /g /rr /vv] pushVariables + [(CurrentRingp)] pushEnv + [ + /pp arg1 def + oxasir.ccc [ ] eq { + (Starting ox_asir server.) message + ox_asirConnectMethod + } { } ifelse + { + pp isRational { + /f pp numerator def + /g pp denominator def + [[f g]] reduceByAsir /rr set + }{ } ifelse + exit + + pp isArray { + /vv pp 2 get def + /f pp 0 get 0 get def + /g pp 0 get 1 get def + [[f toString g toString] vv] reduceByAsir /rr set + } { } ifelse + exit + + (asir_red: not implemented) error exit + } loop + + rr 1 get isPolynomial { + rr 0 get rr 1 get div /rr set + }{ + rr 1 get (1).. eq { + rr 0 get /rr set + }{ + rr 0 get rr 1 get div /rr set + } ifelse + } ifelse + + /arg1 rr def + ] pop + popEnv + popVariables + arg1 +} def +[(asir_red) + [(Calling the function red of asir. It simplifies a rational function.) + (cf. cancel) + (Example: (x^2). (x). div asir_red ) +]] putUsages + +/asir_fctr { fctr } def +[(asir_fctr) + [(Calling the factorizer of asir.) +]] putUsages + +/asir_primadec { primadec } def +[(asir_primadec) + [(Calling the primadec of asir.) +]] putUsages + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% [(chattr) 0 /findIntegralRoots] extension pop /findIntegralRoots { @@ -1634,6 +1729,52 @@ oxasir.verbose { $ [1 2 ] ] asir.wgr $ ]] putUsages +/print_tex_form.aux { + /arg1 set + [/f /ans] pushVariables + [ + arg1 /f set + [(UseDsmall)] system_variable /vv set + [(UseDsmall) 1] system_variable + f isArray { + f { print_tex_form.aux } map /ans set + }{ + [$quote($, f toString, $) $] cat /ans set + } ifelse + [(UseDsmall) vv] system_variable + ans /arg1 set + ] pop + popVariables + arg1 +} def + +/print_tex_form { + /arg1 set + [/f /comm /vv] pushVariables + [(CurrentRingp)] pushEnv + [ + /f arg1 def + oxasir.ccc [ ] eq { + (Starting ox_asir server.) message + ox_asirConnectMethod + } { } ifelse + + oxasir.ccc ( quotetotex_env("conv_rule",7); ) oxsubmit + oxasir.ccc oxpopcmo ; + + f print_tex_form.aux /f set + [$ print_tex_form($, f $); $] cat /comm set + oxasir.ccc comm oxsubmit + oxasir.ccc oxpopcmo /arg1 set + ] pop + popEnv + popVariables + arg1 +} def + +[(print_tex_form) +[ (obj print_tex_form str) +]] putUsages %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% functions to start ox_asir %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -1644,7 +1785,7 @@ oxasir.verbose { (Server bin/ox_sm1 is not found.) error }{ } ifelse - /pass [(oxGenPass)] extension def + /pass ox_encrypt_104_genPass def /peer [(oxGetPort) (localhost)] extension def /data peer 1 get toString def /control peer 3 get toString def @@ -1653,10 +1794,11 @@ oxasir.verbose { oxstart100 @@@.quiet { ( -quiet ) } { } ifelse Xm_noX { ( -nox ) } { } ifelse + Xm_engineLogToStdout { ( -nox -engineLogToStdout ) } { } ifelse %bug.onlyForasir ( -oxserver bin/ox_asir -e ) ( -reverse ) - ( -data ) data ( -control ) control ( -pass ) pass + ( -data ) data ( -control ) control pass [1 2] get ( )] cat execve - [(oxCreateClient2) peer 0 pass] extension /oxasir.ccc set + [(oxCreateClient2) peer 0 pass 0 get] extension /oxasir.ccc set %% 0 means connect from only localhost. oxasir.ccc asir.init /arg1 oxasir.ccc def @@ -1691,7 +1833,7 @@ oxasir.verbose { (Server bin/ox_sm1 is not found.) error }{ } ifelse - /pass [(oxGenPass)] extension def + /pass ox_encrypt_104_genPass def /peer [(oxGetPort) (localhost)] extension def /data peer 1 get toString def /control peer 3 get toString def @@ -1700,9 +1842,9 @@ oxasir.verbose { oxstart100 Xm_noX { ( -nox ) } { } ifelse ( -oxserver bin/ox_k0 -e ) ( -reverse ) - ( -data ) data ( -control ) control ( -pass ) pass + ( -data ) data ( -control ) control pass [1 2] get ( )] cat execve - [(oxCreateClient2) peer 0 pass] extension /oxk0.ccc set + [(oxCreateClient2) peer 0 pass 0 get] extension /oxk0.ccc set %% 0 means connect from only localhost. (The server is binded to the variable oxk0.ccc) message-quiet ox.k0.init @@ -1715,5 +1857,174 @@ oxasir.verbose { /ox_server_mode { /:: { } def % do nothing +} def -} def \ No newline at end of file +%% Encryption methods +/ox_encrypt_104.NONE 0 def +/ox_encrypt_104.FILE 1 def +/ox_encrypt_104.RSA 2 def +/@@@.ox_encrypt_104.method ox_encrypt_104.NONE def +/ox_encrypt_104.1 { + /arg1 set + [/sss /rrr] pushVariables + [ + /sss arg1 def + sss toString /sss set + { + @@@.ox_encrypt_104.method ox_encrypt_104.NONE eq { + /rrr [sss] def + exit + } { } ifelse + (The encryption method has not yet been implemented.) error + } loop + /arg1 rrr def + ] pop + popVariables + arg1 +} def + +%< +% Usages: ox_encrypt_104_genPass +% [[ c-pass d-pass ] [c-pass-encrypted d-pass-encrypted ox-command-str ] ...] +%> +/ox_encrypt_104_genPass { + [/sss /p1 /p2 /e1 /e2 /rrr] pushVariables + [ + /r1 [(oxGenPass)] extension def + /r2 [(oxGenPass)] extension def + r1 ox_encrypt_104.1 /e1 set + r2 ox_encrypt_104.1 /e2 set + { + @@@.ox_encrypt_104.method ox_encrypt_104.NONE eq { + [( -passControl ) e1 0 get ( -passData ) e2 0 get ( )] cat /sss set + [[r1 r2] [e1 0 get , e2 0 get , sss]] /rrr set + exit + } { } ifelse + (The encryption method has not been implemented.) error + } loop + rrr /arg1 set + ] pop + popVariables + arg1 +} def + +[[(lines),[10,-1]], + [(where),[(shell), (length)]], + [(reason_of_error), (invalid argument)], + [(asir_where),[[(toplevel),10],[(string),(foo),3],[(string),(hoge),-1]] +]] +/i1 set +%% /translateErrorForCfep.sampleInput set + +[(translateErrorForCfep) +[ + (translate the error packet defined in ox-rfc-103 into series of commands for cfep.) +] +] putUsages +/translateErrorForCfep { + /arg1 set + [/ee /ans /tt /lf /i /nn /ee.orig /tt2] pushVariables + [ + /ee arg1 def + { + ee etag 257 eq { + ee (body) dc 1 get /ee set ee /ee.orig set + ee length 3 gt { + ee 3 get /ee set + ee [[(reason_of_error) ee.orig 2 get toString ]] join /ee set + }{ + %% nn should be 2, [serial, common error no, short message] + ee length /nn set + nn 0 gt { + /ee [(reason_of_error) ee nn 1 sub get toString ] def + } { /ee [ ] def } ifelse + } ifelse + }{ } ifelse + ee etag 6 eq not { /ans [ ] def exit } { } ifelse + /ans [ ] def + /lf 12 (string) dc def % line feed. + ans [(Begin) nl lf] join /ans set + + ee (lines) getNode /tt set + tt tag 0 eq { + ee (parse_error_at) getNode /tt set + } { } ifelse + tt isArray { + tt length 0 gt { + ans + [(gotoLine, ) tt 0 get toString nl lf] join /ans set + }{ } ifelse + } { } ifelse + tt isInteger { + [(gotoLine, ) tt toString nl lf] join /ans set + } { } ifelse + + ee (where) getNode /tt set + tt isArray { + tt length 0 gt { + ans + [(findAndSelect, ) tt 0 get (string) dc nl lf] join /ans set + }{ } ifelse + 1 1, tt length 1 sub { + /i set + ans + [(findAndShow, ) tt i get (string) dc nl lf] join /ans set + } for + } { } ifelse + + ee (reason_of_error) getNode /tt set + tt tag 0 eq { + ee (reason_of_parse_error) getNode /tt set + } { } ifelse + tt tag 0 eq not { + ans [(printErrorMessage, ) + tt (string) dc localizedString % for translation. + nl lf] join /ans set + }{ } ifelse + +%% Keyword from asir. [(asir_where) [[(toplevel),3],[(string),(foo),3],[(filename),(func),4]]] + ee (asir_where) getNode /tt set + tt (toplevel) getNode /tt2 set + tt2 isInteger, tt2 tag 15 eq, or { + ans [(gotoLine, ) tt2 toString nl lf] join /ans set + } { } ifelse + tt isArray { + 0 1 tt length 1 sub { + /i set + tt i get /tt2 set + tt2 (string) getNode tag 0 eq { } + { + tt2 length 2 gt { + tt2 2 get /tt2 set + tt2 isInteger, tt2 tag 15 eq, or { + tt2 toString .. /tt2 set + tt2 (-1).. gt, tt2 (4294967295).. lt, and { + ans [(gotoLine, ) tt2 toString nl lf] join /ans set + } { } ifelse + } { } ifelse + }{ } ifelse + } ifelse + } for + }{ } ifelse + + exit + } loop + ans [(End) nl lf] join /ans set + ans cat /arg1 set + ] pop + popVariables + arg1 +} def + +/oxclearstack { + /arg1 set + [/cl /n] pushVariables + [ + /cl arg1 def + cl oxgetsp /n set + n tag 0 eq { /n 0 def } { } ifelse + n tag 15 eq { n (integer) dc /n set } { } ifelse + cl n oxpops + ] pop + popVariables +} def