Annotation of OpenXM/src/kan96xx/Doc/ox.sm1, Revision 1.1
1.1 ! maekawa 1: %%%%%%%%%%%% Configuration: Specify your server path
! 2: %%%%% ox, ox_sm1, oxlog are contained in kxx.tgz
! 3: %%%%% These should be under /usr/local/lib/sm1 or LOAD_SM1_PATH
! 4: /oxpath.ox (bin/ox) def
! 5: /oxpath.oxsm1 (bin/ox_sm1) def
! 6: /oxpath.oxlog (bin/oxlog) def
! 7: /oxpath.xterm (/usr/X11R6/bin/xterm -icon -e ) def
! 8: /oxpath.null ( ) def
! 9: /oxpath.null00 ( >& /dev/null ) def %% cf oxNoX
! 10: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 11: %% Old full path.
! 12: %/oxpath.ox (/home/nobuki/kxx/ox) def
! 13: %/oxpath.oxsm1 (/home/nobuki/kxx/ox_sm1) def
! 14: %/oxpath.oxlog (/home/nobuki/kxx/oxlog) def
! 15: %/oxpath.xterm (/usr/X11R6/bin/xterm -icon -e ) def
! 16:
! 17: %% This macro is invoked when this package is loaded.
! 18: /initializePathNamesForOx {
! 19: [oxpath.ox] getPathNameSm1 /oxpath.ox set
! 20: [oxpath.oxsm1] getPathNameSm1 /oxpath.oxsm1 set
! 21: [oxpath.oxlog] getPathNameSm1 /oxpath.oxlog set
! 22: /oxpath.oxlog.xterm [oxpath.oxlog ( ) oxpath.xterm] cat def
! 23: } def
! 24:
! 25: %% Execute this macro, then xterm will not be executed and the output
! 26: %% will be redirected to /dev/null.
! 27: /oxNoX {
! 28: /oxpath.null oxpath.null00 def
! 29: /oxpath.oxlog.xterm [oxpath.oxlog ( )] cat def
! 30: (oxpath.oxlog.xterm is set to ) messagen
! 31: oxpath.oxlog.xterm message
! 32: } def
! 33:
! 34: /ox.ccc.init { ox.ccc ( [(oxPrintMessage) 0] extension pop ) oxsubmit } def
! 35:
! 36: /ox.verbose 0 def
! 37: /ox.version (2.981105) def
! 38: ox.version [(Version)] system_variable gt
! 39: { (This package requires the latest version of kan/sm1) message
! 40: (Please get it from http://www.math.kobe-u.ac.jp/KAN) message
! 41: error
! 42: } { } ifelse
! 43: (ox.sm1, --- open sm1 protocol module 10/1,1999 (C) N.Takayama. oxhelp for help) message-quiet
! 44:
! 45: /ox.ccc load isArray
! 46: { }
! 47: { /ox.ccc [ ] def } ifelse
! 48:
! 49:
! 50:
! 51: /ox.logsize 10 def
! 52: /ox.log [1 1 ox.logsize {pop 0} for ] def
! 53: /ox.mod { dup ox.logsize idiv ox.logsize mul sub } def
! 54: /ox.takelog 1 def
! 55:
! 56: /SM_executeStringByLocalParser 268 def
! 57: /SM_execute 268 def
! 58: /SM_popString 263 def
! 59: /SM_mathcap 264 def
! 60:
! 61: /SM_popCMO 262 def
! 62: /SM_executeFunction 269 def
! 63: /SM_DUMMY_sendcmo 280 def
! 64: /SM_sync_ball 281 def
! 65:
! 66: /SM_pops 265 def
! 67: /SM_setName 266 def
! 68: /SM_evalName 267 def
! 69:
! 70: /SM_setMathCap 273 def
! 71:
! 72: /SM_getsp 275 def
! 73: /SM_dupErrors 276 def
! 74:
! 75: /SM_control_kill 1024 def
! 76: /SM_control_reset_connection 1030 def
! 77:
! 78: /Etag_error 257 def
! 79:
! 80: /enginesList [
! 81: [(localhost) 1300 1200]
! 82: [(localhost) 2300 2200]
! 83: ] def
! 84: %% cf. startengines
! 85: /enginesList.2 [
! 86: [(dc1) 1300 1200]
! 87: [(dc2) 2300 2200]
! 88: ] def
! 89: %% cf. se12
! 90:
! 91: /oxconnect {
! 92: /arg1 set
! 93: [(oxCreateClient) arg1 aload pop] extension
! 94: } def
! 95: [(oxconnect)
! 96: [([hostname data-port control-port] oxconnect pid)
! 97: (oxconnect is used to connect this to a server on the hostname with data-port)
! 98: (and control-port)
! 99: (Example 1: ox -ox ox_sm1 -data 1300 -control 1200 <== on server.)
! 100: ( [$localhost$ 1300 1200] oxconnect /ox.ccc set <== on client.)
! 101: (Example 2: ox -ox ox_sm1 -host s.OpenXM.org -insecure -data 1300 -control 1200 <== on server.)
! 102: ( [$s.OpenXM.org$ 1300 1200] oxconnect /ox.ccc set <== on client.)
! 103: (Example 3: ox -ox ox_sm1 -data 1300 -control 1200 >& /dev/null &<== on server.)
! 104: ( [$localhost$ 1300 1200] oxconnect /ox.ccc set <== on client.)
! 105: ( cf. oxNoX)
! 106: (See also ox)
! 107: ]
! 108: ] putUsages
! 109:
! 110: [(ox)
! 111: [
! 112: (client aa oxpushcmo (oxsendcmo), client oxpopcmo dd, client popstring dd, client ss oxrpc)
! 113: (Example: ox.ccc [1 2 3] oxpushcmo ox.ccc oxpopcmo /ff set ff :: )
! 114: ( )
! 115: (client ss oxexecutestring(oxsubmit) <<executeString>>, client ss oxexec <<executeFunction>>)
! 116:
! 117: (Example: ox.ccc (0 1 10 { pop $Hello$ message } for) oxexecutestring )
! 118: (Example: ox.ccc (2).. oxpushcmo ox.ccc (10).. oxpushcmo )
! 119: ( ox.ccc (power) oxexec ox.ccc oxpopcmo :: )
! 120: ( )
! 121: (client str oxevalname, client str oxsetname, client num oxpops, client oxget)
! 122: ( )
! 123: (client oxmathcap, client oxsetmathcap, oxgenportfile, oxremoveportfile)
! 124: ( )
! 125: (client oxgetsp --- get stack pointer, client oxgeterrors --- get all errors)
! 126: (cleint oxisData, client oxreset, client oxshutdown)
! 127: (oxhelp for this message, [(oxWatch) client] extension to start a log.)
! 128: ([(oxSerial)] extension serial-number-of-out-going-ox-packet.)
! 129: (oxpopcmo1, oxpopcmo2, sm1connect2, sm1connect3)
! 130: (sm1connectr )
! 131: (oxNoX : set an environment to invoke oxlog without xterm and to call oxlog with >& /dev/null)
! 132: $ ex 1. (ox.sm1) run oxNoX sm1connectr $
! 133: $ ex 2. (oxasir.sm1) run oxNoX (x^2-1). fctr pmat ; $
! 134: ]
! 135: ] putUsages
! 136:
! 137: /oxhelp {
! 138: (oxconnect) usage
! 139: ( ) message
! 140: (ox) usage
! 141: } def
! 142: [(oxhelp)
! 143: [(oxhelp outputs help messages for ox commands.)
! 144: ]] putUsages
! 145:
! 146: ox.verbose { oxhelp } { } ifelse
! 147:
! 148: /sm1connect2 {
! 149: [oxpath.oxlog.xterm oxpath.ox ( -ox ) oxpath.oxsm1
! 150: oxpath.null
! 151: ( &)] cat system
! 152: % (kterm -iconic -e /home/nobuki/kxx/ox -ox /home/nobuki/kxx/ox_sm1 &) system
! 153: % For MSRI, or Eterm,
! 154: %(xterm -icon -e /u/nobuki/tmp/kxx/ox -ox /u/nobuki/tmp/Ox/ox_sm1 &) system
! 155: (If you start the server automatically, you may have a trouble to) message
! 156: (oxreset. In order to avoid this trouble, start the server by hand.) message
! 157: (sleep 5) system
! 158: [(localhost) 1300 1200] oxconnect /ox.ccc set
! 159: (The server is binded to the variable ox.ccc) message
! 160: ox.ccc.init
! 161: } def
! 162:
! 163: /sm1connect3 {
! 164: [oxpath.oxlog.xterm oxpath.ox ( -ox ) oxpath.oxsm1
! 165: ( -data 2300 -control 2200 )
! 166: oxpath.null
! 167: ( &)] cat system
! 168: % (kterm -iconic -e /home/nobuki/kxx/ox -ox /home/nobuki/kxx/ox_sm1 -data 2300 -control 2200 &) system
! 169: % For MSRI
! 170: %(xterm -icon -e /u/nobuki/tmp/kxx/ox -ox /u/nobuki/tmp/Ox/ox_sm1 -data 2300 -control 2200&) system
! 171: (If you start the server automatically, you may have a trouble to) message
! 172: (oxreset. In order to avoid this trouble, start the server by hand.) message
! 173: (sleep 5) system
! 174: [(localhost) 2300 2200] oxconnect /ox.ccc2 set
! 175: (The server is binded to the variable ox.ccc2) message
! 176: } def
! 177:
! 178: /sm1connect4 {
! 179: %% test version.
! 180: /ox.ccc.portfile oxgenportfile def
! 181: [oxpath.oxlog.xterm oxpath.ox ( -ox ) oxpath.oxsm1
! 182: ( -portfile ) ox.ccc.portfile
! 183: oxpath.null
! 184: ( &)] cat system
! 185: (sleep 5) system
! 186: [(oxReadPortFile) ox.ccc.portfile] extension /ox.ccc.control set
! 187: ox.ccc.control message
! 188: [(localhost) ox.ccc.control 1200] /ox.ccc set
! 189: (The server is binded to the variable ox.ccc) message
! 190: oxremoveportfile
! 191: } def
! 192:
! 193: /oxpushcmo { oxsendcmo } def
! 194: /oxsendcmo {
! 195: /arg1 set
! 196: /arg2 set
! 197: ox.takelog { ox.log [(oxSerial)] extension ox.mod arg1 put
! 198: } { } ifelse
! 199: [(oxReq) arg2 SM_DUMMY_sendcmo arg1] extension pop
! 200: } def
! 201:
! 202: /oxpopcmo {
! 203: /arg1 set
! 204: [(oxReq) arg1 SM_popCMO ] extension pop
! 205: [(oxGet) arg1] extension
! 206: } def
! 207:
! 208: /oxgetsp {
! 209: /arg1 set
! 210: [(oxReq) arg1 SM_getsp ] extension pop
! 211: [(oxReq) arg1 SM_popCMO ] extension pop
! 212: [(oxGet) arg1] extension
! 213: } def
! 214:
! 215: /oxgeterrors {
! 216: /arg1 set
! 217: [(oxReq) arg1 SM_dupErrors ] extension pop
! 218: [(oxReq) arg1 SM_popCMO ] extension pop
! 219: [(oxGet) arg1] extension
! 220: } def
! 221:
! 222: /oxmathcap0 {
! 223: /arg1 set
! 224: [(oxReq) arg1 SM_mathcap ] extension pop
! 225: } def
! 226: /oxmathcap {
! 227: /arg1 set
! 228: [/in-oxmathcap /mypeer /mmm] pushVariables
! 229: [ /mypeer arg1 def
! 230: mypeer oxmathcap0
! 231: mypeer oxpopcmo /mmm set
! 232: mypeer 10 mmm put %% set math cap.
! 233: ] pop
! 234: popVariables
! 235: } def
! 236: /oxsetmathcap {
! 237: /arg1 set
! 238: [/in-oxsetmathcap /mypeer /mymathcap] pushVariables
! 239: [
! 240: /mypeer arg1 def
! 241: /mymathcap [(cmoMathCap)] extension (array) dc def
! 242: [(oxReq)
! 243: mypeer SM_setMathCap
! 244: mymathcap
! 245: ] extension pop
! 246: ] pop
! 247: popVariables
! 248: } def
! 249: /oxsetmathcap.old {
! 250: /arg1 set
! 251: [(oxReq)
! 252: arg1 SM_setMathCap
! 253: [(mathcap-object)
! 254: [[199901160 (sm1)]
! 255: [2130706434 , 1 , 2 , 4 , 17 , 19 , 20 , 22 , 23 , 24 , 25 , 26 , 30 ]
! 256: %% mathcap for sm1.
! 257: %% [1 2 3 4 5] %% for test. cf. cmoCheckMathCap, Sm1_mathcap()
! 258: ]
! 259: ] %% Never write a broken data here.
! 260: ] extension pop
! 261: } def
! 262: /oxpopcmo1 { %% ask of the transmission.
! 263: /arg1 set
! 264: [(oxReq) arg1 SM_popCMO ] extension pop
! 265: } def
! 266: /oxpopcmo2 { %% wait the data.
! 267: /arg1 set
! 268: [(oxGet) arg1] extension
! 269: } def
! 270:
! 271:
! 272: /oxpopstring {
! 273: /arg1 set
! 274: [(oxReq) arg1 SM_popString ] extension pop
! 275: [(oxGet) arg1] extension
! 276: } def
! 277:
! 278: /oxrpc {
! 279: /arg1 set
! 280: /arg2 set
! 281: [/ans /ff] pushVariables
! 282: [
! 283: /ff arg2 def
! 284: ox.takelog { ox.log [(oxSerial)] extension ox.mod arg1 put
! 285: ox.log [(oxSerial)] extension 1 add ox.mod (executeString) put
! 286: } { } ifelse
! 287: [(oxReq) ff SM_execute arg1] extension pop
! 288: [(oxReq) ff SM_popCMO] extension pop
! 289: [(oxGet) ff] extension /ans set
! 290: ans etag Etag_error eq {
! 291: (Got an error object.) message
! 292: /arg1 ans def
! 293: }
! 294: { /arg1 ans def
! 295: } ifelse
! 296: ] pop
! 297: popVariables
! 298: arg1
! 299: } def
! 300:
! 301: /oxexecutestring { oxsubmit } def
! 302: /oxsubmit {
! 303: /arg1 set
! 304: /arg2 set
! 305: ox.takelog { ox.log [(oxSerial)] extension ox.mod arg1 put
! 306: ox.log [(oxSerial)] extension 1 add ox.mod (executeString) put
! 307: } { } ifelse
! 308: [(oxReq) arg2 SM_execute arg1] extension pop
! 309: } def
! 310:
! 311: /oxexec {
! 312: /arg1 set
! 313: /arg2 set
! 314: ox.takelog { ox.log [(oxSerial)] extension ox.mod arg1 put
! 315: ox.log [(oxSerial)] extension 1 add ox.mod (executeFunction) put
! 316: } { } ifelse
! 317: [(oxReq) arg2 SM_executeFunction arg1] extension pop
! 318: } def
! 319: /oxsubmit2 {
! 320: oxexec
! 321: } def
! 322:
! 323: /oxpops {
! 324: /arg1 set
! 325: /arg2 set
! 326: [(oxReq) arg2 SM_pops arg1] extension pop
! 327: } def
! 328:
! 329: /oxsetname {
! 330: /arg1 set
! 331: /arg2 set
! 332: [(oxReq) arg2 SM_setName arg1] extension pop
! 333: } def
! 334:
! 335: /oxevalname {
! 336: /arg1 set
! 337: /arg2 set
! 338: [(oxReq) arg2 SM_evalName arg1] extension pop
! 339: } def
! 340:
! 341:
! 342: /oxreset {
! 343: /arg1 set
! 344: [(oxReq) arg1 SM_control_reset_connection] extension pop
! 345: [(oxGetFromControl) arg1 ] extension pop
! 346: [(oxGet) arg1] extension message
! 347: } def
! 348:
! 349: /oxisData {
! 350: /arg1 set
! 351: [/pp /ff] pushVariables
! 352: [
! 353: /ff arg1 def
! 354: [(oxMultiSelect) [ff] 10] extension /pp set
! 355: pp message
! 356: pp 0 get 1 eq {
! 357: pp 1 get 0 get 1 eq { %% data is in the data stream.
! 358: /arg1 [(oxGet) ff] extension def
! 359: } {/arg1 (no data) def } ifelse
! 360: }
! 361: { /arg1 (no data) def }
! 362: ifelse
! 363: ] pop
! 364: popVariables
! 365: arg1
! 366: } def
! 367:
! 368: /oxget {
! 369: oxisData
! 370: } def
! 371:
! 372:
! 373: /oxshutdown {
! 374: /arg1 set
! 375: [(fp2fclose) arg1 1 get] extension
! 376: [(oxReq) arg1 SM_control_kill] extension
! 377: arg1 0 (closed) put
! 378: } def
! 379:
! 380: /oxgenportfile {
! 381: [(oxGenPortFile)] extension
! 382: }def
! 383: /oxremoveportfile {
! 384: [(oxRemovePortFile)] extension
! 385: }def
! 386:
! 387: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 388: /enginescmd
! 389: $ /computesp {
! 390: /arg1 set
! 391: [arg1 myid] arg1 message
! 392: } def
! 393: $
! 394: def
! 395:
! 396:
! 397: /genPairs {
! 398: /arg1 set
! 399: [/n /i /j] pushVariables
! 400: [
! 401: /n arg1 def
! 402: /genPairs.list [ ] def
! 403: /genPairs.i 0 def
! 404: 0 1 n 1 sub {
! 405: /i set
! 406: i 1 add 1 n 1 sub {
! 407: /j set
! 408: genPairs.list [i j] append /genPairs.list set
! 409: } for
! 410: } for
! 411: /genPairs.n genPairs.list length def
! 412: ] pop
! 413: popVariables
! 414: } def
! 415:
! 416: /getPair {
! 417: [/i ] pushVariables
! 418: [
! 419: genPairs.i genPairs.n lt {
! 420: genPairs.list genPairs.i get /ans set
! 421: genPairs.i 1 add /genPairs.i set
! 422: }
! 423: { [-1 -1] /ans set} ifelse
! 424: /arg1 ans def
! 425: ] pop
! 426: popVariables
! 427: arg1
! 428: } def
! 429:
! 430: /sumUp {
! 431: /arg1 set
! 432: [/ans /v /i /n] pushVariables
! 433: [
! 434: /v arg1 def
! 435: /n v length def
! 436: /ans 0 def
! 437: 0 1 n 1 sub {
! 438: /i set
! 439: ans v i get add /ans set
! 440: } for
! 441: /arg1 ans def
! 442: ] pop
! 443: popVariables
! 444: arg1
! 445: } def
! 446:
! 447:
! 448: /dist {
! 449: /dist.debug 0 def
! 450: /result [ ] def
! 451: enginesList {oxconnect} map /engines set
! 452: /enginesN engines length def
! 453: % broadcast the program.
! 454: (ox-1.sm1) pushfile /enginescmd set %% read a file.
! 455: [(parse) enginescmd] extension
! 456: engines {enginescmd oxsubmit} map
! 457: engines { (slave-start) oxsubmit} map %% initialize slave codes.
! 458: %% send pid.
! 459: 0 1 enginesN 1 sub {
! 460: /i set
! 461: engines i get i oxsendcmo
! 462: engines i get (/myid set) oxsubmit
! 463: } for
! 464:
! 465: master-start %% initialize master codes
! 466: %% gbsize genPairs %% obsolete
! 467: /gbsize ans length def
! 468: ans makePairs /genPairs.list set
! 469: /genPairs.i 0 def /genPairs.n genPairs.list length def
! 470:
! 471:
! 472: /exhausted 0 def
! 473: % clear the busy flag.
! 474: /busy [1 1 enginesN { pop 0 } for ] def
! 475: (date) system
! 476: {{
! 477: exhausted 0 eq {
! 478: 0 1 enginesN 1 sub {
! 479: /i set
! 480: busy i get 0 eq {
! 481: getPair /p set
! 482: p 0 get -1 eq {/exhausted 1 def exit} { } ifelse
! 483: busy i 1 put
! 484: engines i get p oxsendcmo
! 485: engines i get ( computesp ) oxsubmit
! 486: engines i get oxpopcmo1
! 487: } { } ifelse
! 488: } for
! 489: } { } ifelse
! 490: dist.debug { (busy=) messagen busy message } { } ifelse
! 491: busy sumUp 0 eq { result message exit error } { } ifelse
! 492: [(oxMultiSelect) engines -1] extension /status set
! 493: /datastatus status 1 get def
! 494: dist.debug { (datastatus=) messagen datastatus message } { } ifelse
! 495: 0 1 enginesN 1 sub {
! 496: /i set
! 497: datastatus i get 1 eq {
! 498: engines i get oxpopcmo2 /ans set
! 499: busy i 0 put
! 500: result ans append /result set
! 501: } { } ifelse
! 502: } for
! 503: } loop } timer
! 504: (date) system
! 505: (result is in result) message
! 506: (Number of s-pairs checked is ) messagen result length message
! 507: } def
! 508:
! 509: ox.verbose {
! 510: (dist for experiments for distributed computing. cf. startengines) message
! 511: } { } ifelse
! 512:
! 513: /oxIsServerReady {
! 514: /arg1 set
! 515: [/in-isServerReady /sdata /ans] pushVariables
! 516: [
! 517: /sdata arg1 def
! 518: /ans 0 def
! 519: sdata isArray {
! 520: sdata length 1 gt {
! 521: sdata 0 get (client) eq { /ans 1 def } { } ifelse
! 522: } { } ifelse
! 523: } { } ifelse
! 524: /arg1 ans def
! 525: ] pop
! 526: popVariables
! 527: arg1
! 528: } def
! 529:
! 530:
! 531: %%%%%%%%%%%%%%% tests
! 532: ox.verbose {
! 533: (test10 : test to read and write ox-data and ox-command to a file) message
! 534: } { } ifelse
! 535:
! 536: /test10 {
! 537: [(oxCreateClientFile) (afo) (w)] extension /ccc set
! 538: [(oxWatch) ccc] extension
! 539: ccc (x-1). oxsendcmo
! 540: [(oxReq) ccc SM_executeStringByLocalParser
! 541: ( dup add message )] extension pop
! 542: ccc (quit) oxsendcmo
! 543:
! 544: [(oxCloseClient) ccc] extension
! 545: } def
! 546:
! 547: /test11 {
! 548: [(oxCreateClientFile) (afo) (r)] extension /ccc set
! 549: [(oxGet) ccc] extension ::
! 550: [(oxGet) ccc] extension ::
! 551: } def
! 552:
! 553: ox.verbose {
! 554: (test12 : ccc is the client. ff poly in Q<x,y,z,dx,dy,dz> ) message
! 555: } { } ifelse
! 556: /test12 {
! 557: [(localhost) 1300 1200] oxconnect /ccc set
! 558: [(x,y,z) ring_of_differential_operators ( ) elimination_order 0] define_ring
! 559: (x+y). /ff set
! 560: /eee (hello) (error) dc def
! 561: /eee0 eee (error) dc def
! 562: (eee is the CMO_ERROR2 object [CMO_ERROR2 hello], eee0 is the CMO_ERROR object) message
! 563: } def
! 564:
! 565: /sm1connectr {
! 566: [/in-sm1connectr /pass /peer /data /control ] pushVariables
! 567: [
! 568: /pass [(oxGenPass)] extension def
! 569: /peer [(oxGetPort) (localhost)] extension def
! 570: /data peer 1 get toString def
! 571: /control peer 3 get toString def
! 572: peer message
! 573: [oxpath.oxlog.xterm oxpath.ox ( -reverse -ox ) oxpath.oxsm1
! 574: ( -data ) data ( -control ) control ( -pass ) pass
! 575: oxpath.null
! 576: ( &)] cat system
! 577: [(oxCreateClient2) peer 0 pass] extension /ox.ccc set
! 578: %% 0 means connect from only localhost.
! 579: (The server is binded to the variable ox.ccc) message
! 580: ox.ccc.init
! 581: ] pop
! 582: popVariables
! 583: } def
! 584:
! 585: /addSlash {
! 586: /arg1 set
! 587: [/in-addSlash /ss /aaa /ans] pushVariables
! 588: [
! 589: /ss arg1 def
! 590: ss (array) dc /aaa set
! 591: aaa length 0 eq {
! 592: /ans (/) def
! 593: }{
! 594: aaa aaa length 1 sub get 47 eq %% The last equals / ?
! 595: {
! 596: /ans ss def
! 597: }{
! 598: /ans [ss (/)] cat def
! 599: } ifelse
! 600: } ifelse
! 601: /arg1 ans def
! 602: ] pop
! 603: arg1
! 604: } def
! 605:
! 606: /getPathNameSm1 {
! 607: /arg1 set
! 608: [/in-getPathNameSm1 /fname /fullname /tname] pushVariables
! 609: [
! 610: /fname arg1 0 get def
! 611: %% If fullname is given, use it.
! 612: fname (array) dc 0 get
! 613: (/) (array) dc 0 get eq
! 614: { /fullname fname def
! 615: /getPathNameSm1.LLL goto
! 616: } { } ifelse
! 617:
! 618: %% Else first try to find it in LOAD_SM1_PATH
! 619: [(getenv) (LOAD_SM1_PATH)] extension /tname set
! 620: tname isString
! 621: {
! 622: tname addSlash /tname set
! 623: [(stat) [tname fname] cat] extension
! 624: 0 get isInteger %% The file was found.
! 625: { /fullname [tname fname] cat def
! 626: /getPathNameSm1.LLL goto
! 627: } { } ifelse
! 628: } { } ifelse
! 629:
! 630: %% Else try to find it in /usr/local/lib/sm1
! 631: [(stat) [(/usr/local/lib/sm1/) fname] cat] extension
! 632: 0 get isInteger %% The file was found.
! 633: { /fullname [(/usr/local/lib/sm1/) fname] cat def
! 634: /getPathNameSm1.LLL goto
! 635: } { } ifelse
! 636:
! 637: %% Otherwise error.
! 638: [(getPathNameSm1: The file ) fname
! 639: ( could not be found )
! 640: (neigher in LOAD_SM1_PATH=)
! 641: [(getenv) (LOAD_SM1_PATH)] extension
! 642: ( nor in /usr/local/lib/sm1)
! 643: ] cat /getPathNameSm1.errorMessage set
! 644: getPathNameSm1.errorMessage message
! 645: ] pop popVariables getPathNameSm1.errorMessage error
! 646:
! 647: /getPathNameSm1.LLL
! 648: /arg1 fullname def
! 649: ] pop
! 650: popVariables
! 651: arg1
! 652: } def
! 653: [(getPathNameSm1)
! 654: [([fname] getPathNameSm1 fullname)
! 655: (string fname, fullname)
! 656: (This command searches the fname in /usr/local/lib/sm1 and LOAD_SM1_PATH)
! 657: (and returns the fullname.)
! 658: ]] putUsages
! 659:
! 660: /getPathNameAsir {
! 661: /arg1 set
! 662: [/in-getPathNameAsir /fname /fullname /tname] pushVariables
! 663: [
! 664: /fname arg1 0 get def
! 665: %% If fullname is given, use it.
! 666: fname (array) dc 0 get
! 667: (/) (array) dc 0 get eq
! 668: { /fullname fname def
! 669: /getPathNameAsir.LLL goto
! 670: } { } ifelse
! 671:
! 672: %% Else first try to find it in /usr/local/lib/asir
! 673: [(stat) [(/usr/local/lib/asir/) fname] cat] extension
! 674: 0 get isInteger %% The file was found.
! 675: { /fullname [(/usr/local/lib/asir/) fname] cat def
! 676: /getPathNameAsir.LLL goto
! 677: } { } ifelse
! 678:
! 679: %% Else try to find it in ASIR_LIBDIR
! 680: [(getenv) (ASIR_LIBDIR)] extension /tname set
! 681: tname isString
! 682: {
! 683: [(stat) [tname (/) fname] cat] extension
! 684: 0 get isInteger %% The file was found.
! 685: { /fullname [tname (/) fname] cat def
! 686: /getPathNameAsir.LLL goto
! 687: } { } ifelse
! 688:
! 689: } { } ifelse
! 690:
! 691: %% Otherwise error.
! 692: [ (getPathNameAsir: The file ) fname
! 693: ( could not be found )
! 694: (neigher in /usr/local/lib/asir nor in ASIR_LIBDIR. )
! 695: ] cat /getPathNameAsir.errorMessage set
! 696: getPathNameAsir.errorMessage message
! 697: ] pop popVariables getPathNameAsir.errorMessage error
! 698:
! 699: /getPathNameAsir.LLL
! 700: /arg1 fullname def
! 701: ] pop
! 702: popVariables
! 703: arg1
! 704: } def
! 705: [(getPathNameAsir)
! 706: [([fname] getPathNameAsir fullname)
! 707: (string fname, fullname)
! 708: (This command searches the fname in /usr/local/lib/asir and ASIR_LIBDIR)
! 709: (and returns the fullname.)
! 710: ]] putUsages
! 711:
! 712:
! 713:
! 714: initializePathNamesForOx %% This should be
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>