[BACK]Return to ox.sm1 CVS log [TXT][DIR] Up to [local] / OpenXM / src / kan96xx / Doc

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>