Annotation of OpenXM/src/kan96xx/Doc/ox.sm1, Revision 1.22
1.22 ! takayama 1: %%%%%%%%%%% $OpenXM: OpenXM/src/kan96xx/Doc/ox.sm1,v 1.21 2002/11/08 14:18:00 takayama Exp $
1.18 takayama 2:
3: /ox.sm1.loaded 1 def
1.1 maekawa 4: %%%%%%%%%%%% Configuration: Specify your server path
5: %%%%% ox, ox_sm1, oxlog are contained in kxx.tgz
6: %%%%% These should be under /usr/local/lib/sm1 or LOAD_SM1_PATH
7: /oxpath.ox (bin/ox) def
8: /oxpath.oxsm1 (bin/ox_sm1) def
9: /oxpath.oxlog (bin/oxlog) def
10: /oxpath.xterm (/usr/X11R6/bin/xterm -icon -e ) def
11: /oxpath.null ( ) def
1.5 takayama 12: /oxpath.null00 ( >& /dev/null ) def %%cf. oxNoX
13: /oxpath.null00-pure-sh ( 2>&1 >/dev/null) def %%TODO:It does not work in our case
1.2 takayama 14: %%%%%%%%%%%%% The following is used only for sm1connectr-ssh.
15: %%%%%%%%%%%%% Configure path for ox and ox_sm1 on your remote machine.
16: /oxpath.oxlog.xterm-ssh (/home/taka/OpenXM/bin/oxlog /usr/X11R6/bin/xterm -icon -e ) def
17: /oxpath.oxsm1-ssh (/home/taka/OpenXM/bin/ox_sm1) def
18: /oxpath.ox-ssh (/home/taka/OpenXM/bin/ox) def
19: /myhostname-ssh (yama.math.kobe-u.ac.jp) def
20: %% for debugging.
21: %/oxpath.oxlog.xterm-ssh ( ) def
22: %/oxpath.oxsm1-ssh (/home/nobuki/OpenXM/bin/ox_sm1) def
23: %/oxpath.ox-ssh (/home/nobuki/OpenXM/bin/ox) def
24: %/myhostname-ssh (localhost) def
1.1 maekawa 25: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
26: %% Old full path.
27: %/oxpath.ox (/home/nobuki/kxx/ox) def
28: %/oxpath.oxsm1 (/home/nobuki/kxx/ox_sm1) def
29: %/oxpath.oxlog (/home/nobuki/kxx/oxlog) def
30: %/oxpath.xterm (/usr/X11R6/bin/xterm -icon -e ) def
31:
32: %% This macro is invoked when this package is loaded.
33: /initializePathNamesForOx {
34: [oxpath.ox] getPathNameSm1 /oxpath.ox set
35: [oxpath.oxsm1] getPathNameSm1 /oxpath.oxsm1 set
36: [oxpath.oxlog] getPathNameSm1 /oxpath.oxlog set
37: /oxpath.oxlog.xterm [oxpath.oxlog ( ) oxpath.xterm] cat def
38: } def
39:
40: %% Execute this macro, then xterm will not be executed and the output
41: %% will be redirected to /dev/null.
42: /oxNoX {
43: /oxpath.null oxpath.null00 def
44: /oxpath.oxlog.xterm [oxpath.oxlog ( )] cat def
45: (oxpath.oxlog.xterm is set to ) messagen
46: oxpath.oxlog.xterm message
47: } def
48:
1.22 ! takayama 49: /ox.ccc.init {
! 50: ox.ccc ( [(oxPrintMessage) 0] extension pop ) oxsubmit
! 51: (Ox103_loaded) boundp
! 52: { ox.ccc ox103_sm1_init }
! 53: { } ifelse
! 54: } def
1.1 maekawa 55:
56: /ox.verbose 0 def
57: /ox.version (2.981105) def
58: ox.version [(Version)] system_variable gt
59: { (This package requires the latest version of kan/sm1) message
60: (Please get it from http://www.math.kobe-u.ac.jp/KAN) message
61: error
62: } { } ifelse
1.16 takayama 63: (ox.sm1, ---OpenXM protocol module 08/22, 2001 (C) N.Takayama. oxhelp for help) message-quiet
1.1 maekawa 64:
65: /ox.ccc load isArray
66: { }
67: { /ox.ccc [ ] def } ifelse
68:
69:
70:
71: /ox.logsize 10 def
72: /ox.log [1 1 ox.logsize {pop 0} for ] def
73: /ox.mod { dup ox.logsize idiv ox.logsize mul sub } def
74: /ox.takelog 1 def
75:
76: /SM_executeStringByLocalParser 268 def
77: /SM_execute 268 def
78: /SM_popString 263 def
79: /SM_mathcap 264 def
80:
81: /SM_popCMO 262 def
82: /SM_executeFunction 269 def
1.11 takayama 83: /SM_DUMMY_sendcmo 2147418112 1 add def %%% SM_PRIVATE+1
1.1 maekawa 84: /SM_sync_ball 281 def
85:
86: /SM_pops 265 def
87: /SM_setName 266 def
88: /SM_evalName 267 def
89:
90: /SM_setMathCap 273 def
91:
92: /SM_getsp 275 def
93: /SM_dupErrors 276 def
94:
95: /SM_control_kill 1024 def
96: /SM_control_reset_connection 1030 def
1.15 takayama 97: /SM_control_spawn_server 1027 def
1.1 maekawa 98:
99: /Etag_error 257 def
100:
101: /enginesList [
102: [(localhost) 1300 1200]
103: [(localhost) 2300 2200]
104: ] def
105: %% cf. startengines
106: /enginesList.2 [
107: [(dc1) 1300 1200]
108: [(dc2) 2300 2200]
109: ] def
110: %% cf. se12
111:
112: /oxconnect {
113: /arg1 set
114: [(oxCreateClient) arg1 aload pop] extension
115: } def
116: [(oxconnect)
117: [([hostname data-port control-port] oxconnect pid)
118: (oxconnect is used to connect this to a server on the hostname with data-port)
119: (and control-port)
120: (Example 1: ox -ox ox_sm1 -data 1300 -control 1200 <== on server.)
121: ( [$localhost$ 1300 1200] oxconnect /ox.ccc set <== on client.)
122: (Example 2: ox -ox ox_sm1 -host s.OpenXM.org -insecure -data 1300 -control 1200 <== on server.)
123: ( [$s.OpenXM.org$ 1300 1200] oxconnect /ox.ccc set <== on client.)
124: (Example 3: ox -ox ox_sm1 -data 1300 -control 1200 >& /dev/null &<== on server.)
125: ( [$localhost$ 1300 1200] oxconnect /ox.ccc set <== on client.)
126: ( cf. oxNoX)
127: (See also ox)
128: ]
129: ] putUsages
130:
131: [(ox)
132: [
133: (client aa oxpushcmo (oxsendcmo), client oxpopcmo dd, client popstring dd, client ss oxrpc)
134: (Example: ox.ccc [1 2 3] oxpushcmo ox.ccc oxpopcmo /ff set ff :: )
135: ( )
136: (client ss oxexecutestring(oxsubmit) <<executeString>>, client ss oxexec <<executeFunction>>)
137:
138: (Example: ox.ccc (0 1 10 { pop $Hello$ message } for) oxexecutestring )
139: (Example: ox.ccc (2).. oxpushcmo ox.ccc (10).. oxpushcmo )
140: ( ox.ccc (power) oxexec ox.ccc oxpopcmo :: )
141: ( )
142: (client str oxevalname, client str oxsetname, client num oxpops, client oxget)
143: ( )
144: (client oxmathcap, client oxsetmathcap, oxgenportfile, oxremoveportfile)
145: ( )
146: (client oxgetsp --- get stack pointer, client oxgeterrors --- get all errors)
147: (cleint oxisData, client oxreset, client oxshutdown)
148: (oxhelp for this message, [(oxWatch) client] extension to start a log.)
149: ([(oxSerial)] extension serial-number-of-out-going-ox-packet.)
150: (oxpopcmo1, oxpopcmo2, sm1connect2, sm1connect3)
1.4 takayama 151: (sm1connectr ox_launch, ox_launch_nox)
1.1 maekawa 152: (oxNoX : set an environment to invoke oxlog without xterm and to call oxlog with >& /dev/null)
1.21 takayama 153: (oxresetAll, oxIsInterruptable, [(oxGetClientList)] extension )
1.1 maekawa 154: $ ex 1. (ox.sm1) run oxNoX sm1connectr $
155: $ ex 2. (oxasir.sm1) run oxNoX (x^2-1). fctr pmat ; $
156: ]
157: ] putUsages
158:
159: /oxhelp {
160: (oxconnect) usage
161: ( ) message
162: (ox) usage
163: } def
164: [(oxhelp)
165: [(oxhelp outputs help messages for ox commands.)
166: ]] putUsages
167:
168: ox.verbose { oxhelp } { } ifelse
169:
170: /sm1connect2 {
171: [oxpath.oxlog.xterm oxpath.ox ( -ox ) oxpath.oxsm1
172: oxpath.null
1.5 takayama 173: ( &)] cat system-csh
1.1 maekawa 174: % (kterm -iconic -e /home/nobuki/kxx/ox -ox /home/nobuki/kxx/ox_sm1 &) system
175: % For MSRI, or Eterm,
176: %(xterm -icon -e /u/nobuki/tmp/kxx/ox -ox /u/nobuki/tmp/Ox/ox_sm1 &) system
177: (If you start the server automatically, you may have a trouble to) message
178: (oxreset. In order to avoid this trouble, start the server by hand.) message
1.5 takayama 179: (sleep 5) system-csh
1.1 maekawa 180: [(localhost) 1300 1200] oxconnect /ox.ccc set
181: (The server is binded to the variable ox.ccc) message
182: ox.ccc.init
183: } def
184:
185: /sm1connect3 {
186: [oxpath.oxlog.xterm oxpath.ox ( -ox ) oxpath.oxsm1
187: ( -data 2300 -control 2200 )
188: oxpath.null
1.5 takayama 189: ( &)] cat system-csh
190: % (kterm -iconic -e /home/nobuki/kxx/ox -ox /home/nobuki/kxx/ox_sm1 -data 2300 -control 2200 &) system-csh
1.1 maekawa 191: % For MSRI
1.5 takayama 192: %(xterm -icon -e /u/nobuki/tmp/kxx/ox -ox /u/nobuki/tmp/Ox/ox_sm1 -data 2300 -control 2200&) system-csh
1.1 maekawa 193: (If you start the server automatically, you may have a trouble to) message
194: (oxreset. In order to avoid this trouble, start the server by hand.) message
1.5 takayama 195: (sleep 5) system-csh
1.1 maekawa 196: [(localhost) 2300 2200] oxconnect /ox.ccc2 set
197: (The server is binded to the variable ox.ccc2) message
198: } def
199:
200: /sm1connect4 {
201: %% test version.
202: /ox.ccc.portfile oxgenportfile def
203: [oxpath.oxlog.xterm oxpath.ox ( -ox ) oxpath.oxsm1
204: ( -portfile ) ox.ccc.portfile
205: oxpath.null
1.5 takayama 206: ( &)] cat system-csh
207: (sleep 5) system-csh
1.1 maekawa 208: [(oxReadPortFile) ox.ccc.portfile] extension /ox.ccc.control set
209: ox.ccc.control message
210: [(localhost) ox.ccc.control 1200] /ox.ccc set
211: (The server is binded to the variable ox.ccc) message
212: oxremoveportfile
213: } def
214:
215: /oxpushcmo { oxsendcmo } def
216: /oxsendcmo {
217: /arg1 set
218: /arg2 set
219: ox.takelog { ox.log [(oxSerial)] extension ox.mod arg1 put
220: } { } ifelse
221: [(oxReq) arg2 SM_DUMMY_sendcmo arg1] extension pop
222: } def
223:
224: /oxpopcmo {
225: /arg1 set
226: [(oxReq) arg1 SM_popCMO ] extension pop
227: [(oxGet) arg1] extension
228: } def
229:
230: /oxgetsp {
231: /arg1 set
232: [(oxReq) arg1 SM_getsp ] extension pop
233: [(oxReq) arg1 SM_popCMO ] extension pop
234: [(oxGet) arg1] extension
235: } def
236:
237: /oxgeterrors {
238: /arg1 set
239: [(oxReq) arg1 SM_dupErrors ] extension pop
240: [(oxReq) arg1 SM_popCMO ] extension pop
241: [(oxGet) arg1] extension
242: } def
243:
244: /oxmathcap0 {
245: /arg1 set
246: [(oxReq) arg1 SM_mathcap ] extension pop
247: } def
248: /oxmathcap {
249: /arg1 set
250: [/in-oxmathcap /mypeer /mmm] pushVariables
251: [ /mypeer arg1 def
252: mypeer oxmathcap0
253: mypeer oxpopcmo /mmm set
254: mypeer 10 mmm put %% set math cap.
255: ] pop
256: popVariables
257: } def
258: /oxsetmathcap {
259: /arg1 set
260: [/in-oxsetmathcap /mypeer /mymathcap] pushVariables
261: [
262: /mypeer arg1 def
263: /mymathcap [(cmoMathCap)] extension (array) dc def
264: [(oxReq)
265: mypeer SM_setMathCap
266: mymathcap
267: ] extension pop
268: ] pop
269: popVariables
270: } def
271: /oxsetmathcap.old {
272: /arg1 set
273: [(oxReq)
274: arg1 SM_setMathCap
275: [(mathcap-object)
276: [[199901160 (sm1)]
277: [2130706434 , 1 , 2 , 4 , 17 , 19 , 20 , 22 , 23 , 24 , 25 , 26 , 30 ]
278: %% mathcap for sm1.
279: %% [1 2 3 4 5] %% for test. cf. cmoCheckMathCap, Sm1_mathcap()
280: ]
281: ] %% Never write a broken data here.
282: ] extension pop
283: } def
284: /oxpopcmo1 { %% ask of the transmission.
285: /arg1 set
286: [(oxReq) arg1 SM_popCMO ] extension pop
287: } def
288: /oxpopcmo2 { %% wait the data.
289: /arg1 set
290: [(oxGet) arg1] extension
291: } def
292:
293:
294: /oxpopstring {
295: /arg1 set
296: [(oxReq) arg1 SM_popString ] extension pop
297: [(oxGet) arg1] extension
298: } def
299:
300: /oxrpc {
301: /arg1 set
302: /arg2 set
303: [/ans /ff] pushVariables
304: [
305: /ff arg2 def
306: ox.takelog { ox.log [(oxSerial)] extension ox.mod arg1 put
307: ox.log [(oxSerial)] extension 1 add ox.mod (executeString) put
308: } { } ifelse
309: [(oxReq) ff SM_execute arg1] extension pop
310: [(oxReq) ff SM_popCMO] extension pop
311: [(oxGet) ff] extension /ans set
312: ans etag Etag_error eq {
313: (Got an error object.) message
314: /arg1 ans def
315: }
316: { /arg1 ans def
317: } ifelse
318: ] pop
319: popVariables
320: arg1
321: } def
322:
323: /oxexecutestring { oxsubmit } def
324: /oxsubmit {
325: /arg1 set
326: /arg2 set
327: ox.takelog { ox.log [(oxSerial)] extension ox.mod arg1 put
328: ox.log [(oxSerial)] extension 1 add ox.mod (executeString) put
329: } { } ifelse
330: [(oxReq) arg2 SM_execute arg1] extension pop
331: } def
332:
333: /oxexec {
334: /arg1 set
335: /arg2 set
336: ox.takelog { ox.log [(oxSerial)] extension ox.mod arg1 put
337: ox.log [(oxSerial)] extension 1 add ox.mod (executeFunction) put
338: } { } ifelse
339: [(oxReq) arg2 SM_executeFunction arg1] extension pop
340: } def
341: /oxsubmit2 {
342: oxexec
343: } def
344:
345: /oxpops {
346: /arg1 set
347: /arg2 set
348: [(oxReq) arg2 SM_pops arg1] extension pop
349: } def
350:
351: /oxsetname {
352: /arg1 set
353: /arg2 set
354: [(oxReq) arg2 SM_setName arg1] extension pop
355: } def
356:
357: /oxevalname {
358: /arg1 set
359: /arg2 set
360: [(oxReq) arg2 SM_evalName arg1] extension pop
361: } def
362:
363:
364: /oxreset {
365: /arg1 set
366: [(oxReq) arg1 SM_control_reset_connection] extension pop
1.13 takayama 367: %% [(oxGetFromControl) arg1 ] extension pop
1.1 maekawa 368: [(oxGet) arg1] extension message
369: } def
370:
371: /oxisData {
372: /arg1 set
373: [/pp /ff] pushVariables
374: [
375: /ff arg1 def
376: [(oxMultiSelect) [ff] 10] extension /pp set
377: pp message
378: pp 0 get 1 eq {
379: pp 1 get 0 get 1 eq { %% data is in the data stream.
380: /arg1 [(oxGet) ff] extension def
381: } {/arg1 (no data) def } ifelse
382: }
383: { /arg1 (no data) def }
384: ifelse
385: ] pop
386: popVariables
387: arg1
388: } def
389:
390: /oxget {
391: oxisData
392: } def
393:
394:
395: /oxshutdown {
396: /arg1 set
397: [(fp2fclose) arg1 1 get] extension
398: [(oxReq) arg1 SM_control_kill] extension
399: arg1 0 (closed) put
400: } def
401:
402: /oxgenportfile {
403: [(oxGenPortFile)] extension
404: }def
405: /oxremoveportfile {
406: [(oxRemovePortFile)] extension
407: }def
408:
409: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
410: /enginescmd
411: $ /computesp {
412: /arg1 set
413: [arg1 myid] arg1 message
414: } def
415: $
416: def
417:
418:
419: /genPairs {
420: /arg1 set
421: [/n /i /j] pushVariables
422: [
423: /n arg1 def
424: /genPairs.list [ ] def
425: /genPairs.i 0 def
426: 0 1 n 1 sub {
427: /i set
428: i 1 add 1 n 1 sub {
429: /j set
430: genPairs.list [i j] append /genPairs.list set
431: } for
432: } for
433: /genPairs.n genPairs.list length def
434: ] pop
435: popVariables
436: } def
437:
438: /getPair {
439: [/i ] pushVariables
440: [
441: genPairs.i genPairs.n lt {
442: genPairs.list genPairs.i get /ans set
443: genPairs.i 1 add /genPairs.i set
444: }
445: { [-1 -1] /ans set} ifelse
446: /arg1 ans def
447: ] pop
448: popVariables
449: arg1
450: } def
451:
452: /sumUp {
453: /arg1 set
454: [/ans /v /i /n] pushVariables
455: [
456: /v arg1 def
457: /n v length def
458: /ans 0 def
459: 0 1 n 1 sub {
460: /i set
461: ans v i get add /ans set
462: } for
463: /arg1 ans def
464: ] pop
465: popVariables
466: arg1
467: } def
468:
469:
470: /dist {
471: /dist.debug 0 def
472: /result [ ] def
473: enginesList {oxconnect} map /engines set
474: /enginesN engines length def
475: % broadcast the program.
476: (ox-1.sm1) pushfile /enginescmd set %% read a file.
477: [(parse) enginescmd] extension
478: engines {enginescmd oxsubmit} map
479: engines { (slave-start) oxsubmit} map %% initialize slave codes.
480: %% send pid.
481: 0 1 enginesN 1 sub {
482: /i set
483: engines i get i oxsendcmo
484: engines i get (/myid set) oxsubmit
485: } for
486:
487: master-start %% initialize master codes
488: %% gbsize genPairs %% obsolete
489: /gbsize ans length def
490: ans makePairs /genPairs.list set
491: /genPairs.i 0 def /genPairs.n genPairs.list length def
492:
493:
494: /exhausted 0 def
495: % clear the busy flag.
496: /busy [1 1 enginesN { pop 0 } for ] def
1.5 takayama 497: (date) system-csh
1.1 maekawa 498: {{
499: exhausted 0 eq {
500: 0 1 enginesN 1 sub {
501: /i set
502: busy i get 0 eq {
503: getPair /p set
504: p 0 get -1 eq {/exhausted 1 def exit} { } ifelse
505: busy i 1 put
506: engines i get p oxsendcmo
507: engines i get ( computesp ) oxsubmit
508: engines i get oxpopcmo1
509: } { } ifelse
510: } for
511: } { } ifelse
512: dist.debug { (busy=) messagen busy message } { } ifelse
513: busy sumUp 0 eq { result message exit error } { } ifelse
514: [(oxMultiSelect) engines -1] extension /status set
515: /datastatus status 1 get def
516: dist.debug { (datastatus=) messagen datastatus message } { } ifelse
517: 0 1 enginesN 1 sub {
518: /i set
519: datastatus i get 1 eq {
520: engines i get oxpopcmo2 /ans set
521: busy i 0 put
522: result ans append /result set
523: } { } ifelse
524: } for
525: } loop } timer
1.5 takayama 526: (date) system-csh
1.1 maekawa 527: (result is in result) message
528: (Number of s-pairs checked is ) messagen result length message
529: } def
530:
531: ox.verbose {
532: (dist for experiments for distributed computing. cf. startengines) message
533: } { } ifelse
534:
535: /oxIsServerReady {
536: /arg1 set
537: [/in-isServerReady /sdata /ans] pushVariables
538: [
539: /sdata arg1 def
540: /ans 0 def
541: sdata isArray {
542: sdata length 1 gt {
543: sdata 0 get (client) eq { /ans 1 def } { } ifelse
544: } { } ifelse
545: } { } ifelse
546: /arg1 ans def
547: ] pop
548: popVariables
549: arg1
550: } def
551:
552:
553: %%%%%%%%%%%%%%% tests
554: ox.verbose {
555: (test10 : test to read and write ox-data and ox-command to a file) message
556: } { } ifelse
557:
558: /test10 {
559: [(oxCreateClientFile) (afo) (w)] extension /ccc set
560: [(oxWatch) ccc] extension
561: ccc (x-1). oxsendcmo
562: [(oxReq) ccc SM_executeStringByLocalParser
563: ( dup add message )] extension pop
564: ccc (quit) oxsendcmo
565:
566: [(oxCloseClient) ccc] extension
567: } def
568:
569: /test11 {
570: [(oxCreateClientFile) (afo) (r)] extension /ccc set
571: [(oxGet) ccc] extension ::
572: [(oxGet) ccc] extension ::
573: } def
574:
575: ox.verbose {
576: (test12 : ccc is the client. ff poly in Q<x,y,z,dx,dy,dz> ) message
577: } { } ifelse
578: /test12 {
579: [(localhost) 1300 1200] oxconnect /ccc set
580: [(x,y,z) ring_of_differential_operators ( ) elimination_order 0] define_ring
581: (x+y). /ff set
582: /eee (hello) (error) dc def
583: /eee0 eee (error) dc def
584: (eee is the CMO_ERROR2 object [CMO_ERROR2 hello], eee0 is the CMO_ERROR object) message
585: } def
586:
587: /sm1connectr {
588: [/in-sm1connectr /pass /peer /data /control ] pushVariables
589: [
590: /pass [(oxGenPass)] extension def
591: /peer [(oxGetPort) (localhost)] extension def
592: /data peer 1 get toString def
593: /control peer 3 get toString def
594: peer message
595: [oxpath.oxlog.xterm oxpath.ox ( -reverse -ox ) oxpath.oxsm1
596: ( -data ) data ( -control ) control ( -pass ) pass
597: oxpath.null
1.5 takayama 598: ( &)] cat system-csh
1.1 maekawa 599: [(oxCreateClient2) peer 0 pass] extension /ox.ccc set
600: %% 0 means connect from only localhost.
601: (The server is binded to the variable ox.ccc) message
602: ox.ccc.init
603: ] pop
604: popVariables
605: } def
1.2 takayama 606:
607: /sm1connectr-ssh {
608: /arg1 set
609: [/in-sm1connectr /pass /peer /data /control /name /machine
610: /your-peer /comm
611: ] pushVariables
612: [
613: /machine arg1 0 get def
614: /name arg1 1 get def
615:
616: /pass [(oxGenPass)] extension def
617: /peer [(oxGetPort) myhostname-ssh] extension def
618: /data peer 1 get toString def
619: /control peer 3 get toString def
620: peer message
621: [(ssh -f ) machine ( -l ) name ( ")
622: oxpath.oxlog.xterm-ssh oxpath.ox-ssh ( -reverse -ox ) oxpath.oxsm1-ssh
623: ( -host ) myhostname-ssh
624: ( -data ) data ( -control ) control ( -pass ) pass
625: oxpath.null
626: ( ")
627: ] cat /comm set
628: (Executing the command : ) messagen comm message message
629: comm system
1.5 takayama 630: (sleep 5) system-csh
1.2 takayama 631: [(oxCreateClient2) peer 1 pass] extension /your-peer set
632: /arg1 your-peer def
633: ] pop
634: popVariables
635: arg1
636: } def
637: [(sm1connectr-ssh)
638: [([hostname login-name] sm1connectr-ssh client)
639: (Starting oxpath.oxsm1-ssh by the launcher oxpath.ox-ssh on the "hostname".)
1.3 takayama 640: (cf. oxNoX )
641: (Set the following varialbes to appropriate values:)
642: (oxpath.oxlog.xterm-ssh oxpath.oxsm1-ssh oxpath.ox-ssh myhostname-ssh )
643: $Example 1: $
644: $ *** Path names on the remote machine dc1.math.kobe-u.ac.jp $
645: $ /oxpath.oxlog.xterm-ssh (/home/taka/OpenXM/bin/oxlog /usr/X11R6/bin/xterm -icon -e ) def $
646: $ /oxpath.oxsm1-ssh (/home/taka/OpenXM/bin/ox_sm1) def $
647: $ /oxpath.ox-ssh (/home/taka/OpenXM/bin/ox) def $
648: $ *** The machine name on which you are running sm1. $
649: $ /myhostname-ssh (yama.math.kobe-u.ac.jp) def $
650: $ [(dc1.math.kobe-u.ac.jp) (taka)] sm1connectr-ssh /ox.ccc set $
651: $Example 2: $
652: $ *** Path names on the remote machine dc2.math.kobe-u.ac.jp $
653: $ *** We will not use X11 debug windows. $
654: $ oxNoX $
655: $ /oxpath.oxlog.xterm-ssh (/home/taka/OpenXM/bin/oxlog ) def $
656: $ /oxpath.oxsm1-ssh (/home/taka/OpenXM/bin/ox_sm1) def $
657: $ /oxpath.ox-ssh (/home/taka/OpenXM/bin/ox) def $
658: $ *** the machine name on which you are running sm1. $
659: $ /myhostname-ssh (dc1.math.kobe-u.ac.jp) def $
660: $ [(dc2.math.kobe-u.ac.jp) (taka)] sm1connectr-ssh /ox.ccc set $
1.2 takayama 661: ]] putUsages
1.1 maekawa 662:
663: /addSlash {
664: /arg1 set
665: [/in-addSlash /ss /aaa /ans] pushVariables
666: [
667: /ss arg1 def
668: ss (array) dc /aaa set
669: aaa length 0 eq {
670: /ans (/) def
671: }{
672: aaa aaa length 1 sub get 47 eq %% The last equals / ?
673: {
674: /ans ss def
675: }{
676: /ans [ss (/)] cat def
677: } ifelse
678: } ifelse
679: /arg1 ans def
680: ] pop
681: arg1
682: } def
683:
684: /getPathNameSm1 {
685: /arg1 set
686: [/in-getPathNameSm1 /fname /fullname /tname] pushVariables
687: [
688: /fname arg1 0 get def
689: %% If fullname is given, use it.
690: fname (array) dc 0 get
691: (/) (array) dc 0 get eq
692: { /fullname fname def
693: /getPathNameSm1.LLL goto
694: } { } ifelse
695:
696: %% Else first try to find it in LOAD_SM1_PATH
697: [(getenv) (LOAD_SM1_PATH)] extension /tname set
698: tname isString
699: {
700: tname addSlash /tname set
701: [(stat) [tname fname] cat] extension
702: 0 get isInteger %% The file was found.
703: { /fullname [tname fname] cat def
704: /getPathNameSm1.LLL goto
705: } { } ifelse
706: } { } ifelse
707:
1.6 takayama 708: %% Else first try to find it in OpenXM_HOME
709: [(getenv) (OpenXM_HOME)] extension /tname set
710: tname isString
711: {
712: tname addSlash /tname set
713: [tname (lib/sm1/)] cat /tname set
714: [(stat) [tname fname] cat] extension
715: 0 get isInteger %% The file was found.
716: { /fullname [tname fname] cat def
717: /getPathNameSm1.LLL goto
718: } { } ifelse
719: } { } ifelse
720:
1.1 maekawa 721: %% Else try to find it in /usr/local/lib/sm1
722: [(stat) [(/usr/local/lib/sm1/) fname] cat] extension
723: 0 get isInteger %% The file was found.
724: { /fullname [(/usr/local/lib/sm1/) fname] cat def
725: /getPathNameSm1.LLL goto
726: } { } ifelse
727:
728: %% Otherwise error.
729: [(getPathNameSm1: The file ) fname
730: ( could not be found )
1.8 takayama 731: (neigher in LOAD\_SM1\_PATH=)
1.1 maekawa 732: [(getenv) (LOAD_SM1_PATH)] extension
1.8 takayama 733: ( nor in OpenXM\_HOME/lib/sm1=)
1.6 takayama 734: [(getenv) (OpenXM_HOME)] extension
735: (/lib/sm1)
1.1 maekawa 736: ( nor in /usr/local/lib/sm1)
737: ] cat /getPathNameSm1.errorMessage set
738: getPathNameSm1.errorMessage message
739: ] pop popVariables getPathNameSm1.errorMessage error
740:
741: /getPathNameSm1.LLL
742: /arg1 fullname def
743: ] pop
744: popVariables
745: arg1
746: } def
747: [(getPathNameSm1)
748: [([fname] getPathNameSm1 fullname)
749: (string fname, fullname)
1.6 takayama 750: (This command searches the fname in LOAD_SM1_PATH, )
751: (OpenXM_HOME/lib/sm1, and /usr/local/lib/sm1)
752: (It returns the fullname.)
1.1 maekawa 753: ]] putUsages
754:
755: /getPathNameAsir {
756: /arg1 set
757: [/in-getPathNameAsir /fname /fullname /tname] pushVariables
758: [
759: /fname arg1 0 get def
760: %% If fullname is given, use it.
761: fname (array) dc 0 get
762: (/) (array) dc 0 get eq
763: { /fullname fname def
764: /getPathNameAsir.LLL goto
765: } { } ifelse
766:
767: %% Else try to find it in ASIR_LIBDIR
768: [(getenv) (ASIR_LIBDIR)] extension /tname set
769: tname isString
770: {
771: [(stat) [tname (/) fname] cat] extension
772: 0 get isInteger %% The file was found.
773: { /fullname [tname (/) fname] cat def
774: /getPathNameAsir.LLL goto
775: } { } ifelse
776:
777: } { } ifelse
778:
1.9 takayama 779: %% Else try to find it in /usr/local/lib/asir
780: [(stat) [(/usr/local/lib/asir/) fname] cat] extension
781: 0 get isInteger %% The file was found.
782: { /fullname [(/usr/local/lib/asir/) fname] cat def
783: /getPathNameAsir.LLL goto
784: } { } ifelse
785:
1.1 maekawa 786: %% Otherwise error.
1.7 takayama 787: [ (getPathNameAsir: The file )
788: fname (ox_asir) eq
789: {(ox\_asir)} { fname }ifelse
1.1 maekawa 790: ( could not be found )
1.7 takayama 791: (neigher in /usr/local/lib/asir nor in ASIR\_LIBDIR. )
1.1 maekawa 792: ] cat /getPathNameAsir.errorMessage set
793: getPathNameAsir.errorMessage message
794: ] pop popVariables getPathNameAsir.errorMessage error
795:
796: /getPathNameAsir.LLL
797: /arg1 fullname def
798: ] pop
799: popVariables
800: arg1
801: } def
802: [(getPathNameAsir)
803: [([fname] getPathNameAsir fullname)
804: (string fname, fullname)
805: (This command searches the fname in /usr/local/lib/asir and ASIR_LIBDIR)
806: (and returns the fullname.)
807: ]] putUsages
1.4 takayama 808:
809:
810: /ox_launch_nox {
811: /@@@.ox_launch_nox 1 def
812: ox_launch_aux
813: } def
814: /ox_launch {
815: /@@@.ox_launch_nox 0 def
816: ox_launch_aux
817: } def
818:
819: /ox_launch_aux {
820: /arg1 set
821: [/in-launch_nox /pass /peer /data /control /name /machine
822: /your-peer /comm /remoteOpenXMbin /remoteServer /myhost
1.10 takayama 823: /argNumber /aaa
1.4 takayama 824: ] pushVariables
825: [
1.10 takayama 826: /aaa arg1 def
827: /argNumber aaa length def
828: /machine aaa 0 get def
829: machine (localhost) eq argNumber 5 lt and {
830: aaa 1 get ox_launch_localhost /your-peer set
831: /LLL.end goto
832: } {
833: /remoteOpenXMbin aaa 1 get def
834: /remoteServer aaa 2 get def
835: /name aaa 3 get def
836: /myhost aaa 4 get def
837: } ifelse
1.4 takayama 838:
839: /pass [(oxGenPass)] extension def
840: /peer [(oxGetPort) myhost] extension def
841: /data peer 1 get toString def
842: /control peer 3 get toString def
843: peer message
844: [(ssh -f ) machine ( -l ) name ( ")
845:
846: @@@.ox_launch_nox {
847: } {
848: remoteOpenXMbin(/oxlog )
849: ( /usr/X11R6/bin/xterm -icon -e )
850: } ifelse
851:
852: ( ) remoteOpenXMbin (/ox )
853: ( -reverse -ox ) remoteServer
854: ( -host ) myhost
855: ( -data ) data ( -control ) control ( -pass ) pass
856: oxpath.null
857: ( ")
858: ] cat /comm set
859: (Executing the command : ) messagen comm message message
860: comm system
1.5 takayama 861: (sleep 5) system-csh
1.4 takayama 862: [(oxCreateClient2) peer 1 pass] extension /your-peer set
1.10 takayama 863: /LLL.end
1.4 takayama 864: /arg1 your-peer def
865: ] pop
866: popVariables
867: arg1
868: } def
869:
870: [(ox_launch)
871: [( [remote remote-OpenXM-bin remote-ox-server remote-login-name myhostname] )
872: ( ox_launch client )
1.10 takayama 873: $or $
874: $ [(localhost) ox-server-name] ox_launch client$
1.4 takayama 875: (Example 1: )
876: $ [(tau.math.kobe-u.ac.jp) (/home/taka/OpenXM/bin) $
877: $ (/home/taka/OpenXM/src/ox_math/ox_math) (taka) (dc4.math.kobe-u.ac.jp) $
878: $ ] ox_launch /@@@.oxmath set $
879: ]] putUsages
880:
881: [(ox_launch_nox)
882: [( [remote remote-OpenXM-bin remote-ox-server remote-login-name myhostname] )
883: ( ox_launch_nox client )
884: (Example 1: )
885: $ [(tau.math.kobe-u.ac.jp) (/home/taka/OpenXM/bin) $
886: $ (/home/taka/OpenXM/src/ox_math/ox_math) (taka) (dc4.math.kobe-u.ac.jp) $
887: $ ] ox_launch_nox /@@@.oxmath set $
888: ]] putUsages
889:
1.5 takayama 890: /system-csh {
891: /arg1 set
892: [/in-system-csh /com /com2] pushVariables
893: [
894: /com arg1 def
895: [(/bin/csh -c ") com (")] cat
896: /com2 set
1.6 takayama 897: %%com2 message
1.5 takayama 898: com2 system
899: ] pop
900: popVariables
1.10 takayama 901: } def
902:
903: /ox_launch_localhost {
904: /arg1 set
905: [/in-ox_launch_localhost /pass /peer /data /control /oxserver
906: /my-peer] pushVariables
907: [
908: /oxserver arg1 def
909: /pass [(oxGenPass)] extension def
910: /peer [(oxGetPort) (localhost)] extension def
911: /data peer 1 get toString def
912: /control peer 3 get toString def
913: peer message
914: [oxpath.oxlog.xterm oxpath.ox ( -reverse -ox ) oxserver
915: ( -data ) data ( -control ) control ( -pass ) pass
916: oxpath.null
917: ( &)] cat system-csh
918: [(oxCreateClient2) peer 0 pass] extension /my-peer set
919: %% 0 means connect from only localhost.
920: (The server is binded to the variable ox.ccc) message
921: /arg1 my-peer def
922: ] pop
923: popVariables
924: arg1
1.5 takayama 925: } def
1.1 maekawa 926:
1.12 takayama 927: %% Test code for oxCreateControl_RFC_101
1.15 takayama 928: /sm1StartControl101 {
1.12 takayama 929: [/in-sm1connectr /pass /peer /data /control ] pushVariables
930: [
931: /pass [(oxGenPass)] extension def
1.14 takayama 932: /peer [(oxGetPort1) (localhost)] extension def
1.12 takayama 933: /data peer 1 get toString def
934: peer message
935: [(/home/nobuki/OpenXM/src/oxc/oxc)
936: ( -c ) pass ( -h ) (localhost) ( -p ) data ( -x )
937: oxpath.null
938: ( &)] cat system-csh
939:
940: [(oxCreateControl_RFC_101) peer 0 pass] extension /ox.ccc set
941: %% 0 means connect from only localhost.
942: (The server is binded to the variable ox.ccc) message
943: ox.ccc
944: ] pop
945: popVariables
1.14 takayama 946: } def
947:
948: /sm1StartEngine101 {
1.15 takayama 949: [/in-sm1StartEngine101 /peer /data /control /engineID] pushVariables
1.14 takayama 950: [
951: /peer [(oxGetPort1) (localhost)] extension def
952: /data peer 1 get def
1.15 takayama 953:
1.14 takayama 954: ox.ccc data oxpushcmo
955: ox.ccc (/home/nobuki/OpenXM/bin/ox_sm1) oxpushcmo
956: [(oxPushCMD) ox.ccc SM_control_spawn_server] extension
1.15 takayama 957: ox.ccc oxpopcmo /engineID set
958: [(oxCreateEngine_RFC_101) peer 0 (Empty) engineID] extension
959: /ox.ddd set
960: (The engine is binded to the variables ox.ddd) message
1.14 takayama 961: ] pop
962: popVariables
963: arg1
1.12 takayama 964: } def
1.16 takayama 965:
966: /OxWorkDirCreated false def
967: /oxWorkDir {
968: [/in-oxWorkDir /workHome /work] pushVariables
969: [
970: [(getenv) (OpenXM_tmp)] extension tag 0 eq {
971: /workHome [
972: [(getenv) (HOME)] extension
973: (/OpenXM_tmp)
974: ] cat def
975: }{
976: /workHome
977: [(getenv) (OpenXM_tmp)] extension
978: def
979: }ifelse
980: /work [workHome (/) [(getpid)] extension toString] cat def
981:
982: OxWorkDirCreated not {
983: [(stat) workHome] extension 0 get tag 0 eq {
984: [(Working directory ) workHome ( will be created.)] cat
985: message
986: [(mkdir ) workHome] cat system
987: }{
988: } ifelse
989:
990: [(stat) work] extension 0 get tag 0 eq {
991: [(Working directory ) work ( will be created.)] cat
992: message
993: [(mkdir ) work] cat system
994: }{
995: } ifelse
996: /OxWorkDirCreated true def
997: }{ } ifelse
998: /arg1 work def
999: ] pop
1000: popVariables
1001: arg1
1002: } def
1003: [(oxWorkDir)
1004: [(oxWorkDir returns a name of working directory for OpenXM processes.)
1005: (If the working direcotry does not exist, it creates ~/OpenXM_tmp/[pid].)
1006: (The name can be changed by setting a value to the environmental variable)
1007: (OpenXM_tmp. cf. oxNewFileName)
1008: ]
1009: ] putUsages
1010:
1011: /OxFileName 0 def
1012: /oxNewFileName {
1013: [/in-oxNewFileName /name] pushVariables
1014: [
1015: /name [(work) OxFileName toString] cat def
1016: /OxFileName OxFileName 1 add def
1017: /arg1 name def
1018: ] pop
1019: popVariables
1020: arg1
1021: } def
1022: [(oxNewFileName)
1023: [(oxNewFileName returns a unique file name for a working file.)
1024: (cf. oxWorkDir)
1025: ]
1026: ] putUsages
1.20 takayama 1027:
1028: /ox_get_os {
1029: [/in-ox_get_ox /os1 /os2] pushVariables
1030: [
1031: /os1 [(ostype)] extension 0 get def
1032: os1 (windows) eq {
1033: [(getenv) (WINDOWID)] extension tag 0 eq not {
1034: %% expect cygwin X
1035: /os2 (xcygwin) def
1036: }{
1037: [(getenv) (OSTYPE)] extension tag 0 eq not
1038: [(getenv) (MACHTYPE)] extension tag 0 eq not or
1039: [(getenv) (PWD)] extension tag 0 eq not or
1040: {
1041: %% expect cygwin environment
1042: /os2 (cygwin) def
1043: }{
1044: %% expect the native windows environment
1045: /os2 (native) def
1046: } ifelse
1047: } ifelse
1048: }{
1049: /os2 null def
1050: } ifelse
1051: /arg1 [os1 os2] def
1052: ] pop
1053: popVariables
1054: arg1
1055: } def
1056:
1057: /ox.ostype ox_get_os def
1058:
1059: /ox_backslash_to_slash {
1060: /arg1 set
1061: [/in-ox_backslash_to_slash /sss ] pushVariables
1062: [
1063: /sss arg1 def
1064: sss (array) dc /sss set
1065: sss { dup 92 eq { pop 47 } { } ifelse } map
1066: { (string) dc } map cat /arg1 set
1067: ] pop
1068: popVariables
1069: arg1
1070: } def
1071: /ox_slash_to_backslash {
1072: /arg1 set
1073: [/in-ox_slash_to_backslash /sss ] pushVariables
1074: [
1075: /sss arg1 def
1076: sss (array) dc /sss set
1077: sss { dup 47 eq { pop 92 } { } ifelse } map
1078: { (string) dc } map cat /arg1 set
1079: ] pop
1080: popVariables
1081: arg1
1.21 takayama 1082: } def
1083:
1084: /oxIsInterruptable {
1085: /arg1 set % Client Object
1086: [/in-ox_get_server_name /mcap /ans /sname] pushVariables
1087: [
1088: /mcap arg1 def
1089: /ans 0 def
1090: mcap tag 6 eq {
1091: mcap 10 get tag 6 eq {
1092: mcap 10 get 1 get 0 get 1 get /sname set
1093: }{ /sname ( ) def } ifelse
1094: }{
1095: /sname ( ) def
1096: } ifelse
1097: (ox_sm1) sname isSubstr -1 eq {
1098: } { /ans 1 def } ifelse
1099: (ox_asir) sname isSubstr -1 eq {
1100: } { /ans 1 def } ifelse
1101: /arg1 ans def
1102: ] pop
1103: popVariables
1104: arg1
1105: } def
1106:
1107: /oxresetAll {
1108: [(oxGetClientList)] extension
1109: { dup oxIsInterruptable { oxreset } { pop } ifelse } map
1.20 takayama 1110: } def
1.22 ! takayama 1111:
! 1112: /oxrpc2 {
! 1113: /arg2 set
! 1114: /arg1 set
! 1115: [/in-oxrpc2 /pid /n /comm /i] pushVariables
! 1116: [
! 1117: /pid arg1 def
! 1118: /comm arg2 def
! 1119: /n comm length def
! 1120: n 1 sub -1 1 {
! 1121: /i set
! 1122: pid comm i get oxsendcmo
! 1123: } for
! 1124: pid n 1 sub oxsendcmo
! 1125: pid comm 0 get oxexec
! 1126: ] pop
! 1127: popVariables
! 1128: } def
! 1129:
! 1130: [(oxrpc2)
! 1131: [(Remote procedure call by using oxexec)
! 1132: (client [function-name arg1 arg2 ...] oxrpc2 )
! 1133: (cf. ox-cmo-rpc in Risa/Asir)
! 1134: (Example: )
! 1135: $ (oxasir.sm1) run (x^2-1). fctr $
! 1136: (oxasir.ccc [(igcd) (6).. (10)..] oxrpc2)
! 1137: (oxasir.ccc oxpopcmo :: )
! 1138: ]
! 1139: ] putUsages
! 1140:
1.1 maekawa 1141:
1.17 takayama 1142: [(ostype)] extension 0 get
1143: (windows) eq {
1.19 takayama 1144: (ox-win.sm1.loaded) boundp {
1.18 takayama 1145: }{
1146: [(parse) (ox-win.sm1) pushfile] extension
1147: } ifelse
1.17 takayama 1148: }{
1149: initializePathNamesForOx %% This should be
1150: } ifelse
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>