|
|
1.1 ! root 1: \ tag: Utility functions ! 2: \ ! 3: \ Utility functions ! 4: \ ! 5: \ Copyright (C) 2003, 2004 Samuel Rydh ! 6: \ ! 7: \ See the file "COPYING" for further information about ! 8: \ the copyright and warranty status of this work. ! 9: \ ! 10: ! 11: \ ------------------------------------------------------------------------- ! 12: \ package utils ! 13: \ ------------------------------------------------------------------------- ! 14: ! 15: ( method-str method-len package-str package-len -- xt|0 ) ! 16: : $find-package-method ! 17: find-package 0= if 2drop false exit then ! 18: find-method 0= if 0 then ! 19: ; ! 20: ! 21: \ like $call-parent but takes an xt ! 22: : call-parent ( ... xt -- ??? ) ! 23: my-parent call-package ! 24: ; ! 25: ! 26: : [active-package], ! 27: ['] (lit) , active-package , ! 28: ; immediate ! 29: ! 30: \ ------------------------------------------------------------------------- ! 31: \ word creation ! 32: \ ------------------------------------------------------------------------- ! 33: ! 34: : ?mmissing ( name len -- 1 name len | 0 ) ! 35: 2dup active-package find-method ! 36: if 3drop false else true then ! 37: ; ! 38: ! 39: \ install trivial open and close functions ! 40: : is-open ( -- ) ! 41: " open" ?mmissing if ['] true -rot is-xt-func then ! 42: " close" ?mmissing if 0 -rot is-xt-func then ! 43: ; ! 44: ! 45: \ is-relay installs a relay function (a function that calls ! 46: \ a function with the same name but belonging to a different node). ! 47: \ The execution behaviour of xt should be ( -- ptr-to-ihandle ). ! 48: \ ! 49: : is-relay ( xt ph name-str name-len -- ) ! 50: rot >r 2dup r> find-method 0= if ! 51: \ function missing (not necessarily an error) ! 52: 3drop exit ! 53: then ! 54: ! 55: -rot is-func-begin ! 56: ( xt method-xt ) ! 57: ['] (lit) , , \ ['] method ! 58: , ['] @ , \ xt @ ! 59: ['] call-package , \ call-package ! 60: is-func-end ! 61: ; ! 62: ! 63: \ ------------------------------------------------------------------------- ! 64: \ install deblocker bindings ! 65: \ ------------------------------------------------------------------------- ! 66: ! 67: : (open-deblocker) ( varaddr -- ) ! 68: " deblocker" find-package if ! 69: 0 0 rot open-package ! 70: else 0 then ! 71: swap ! ! 72: ; ! 73: ! 74: : is-deblocker ( -- ) ! 75: " deblocker" find-package 0= if exit then >r ! 76: " deblocker" is-ivariable ! 77: ! 78: \ create open-deblocker ! 79: " open-deblocker" is-func-begin ! 80: dup , ['] (open-deblocker) , ! 81: is-func-end ! 82: ! 83: \ create close-deblocker ! 84: " close-deblocker" is-func-begin ! 85: dup , ['] @ , ['] close-package , ! 86: is-func-end ! 87: ! 88: ( save-ph deblk-xt R: deblocker-ph ) ! 89: r> ! 90: 2dup " read" is-relay ! 91: 2dup " seek" is-relay ! 92: 2dup " write" is-relay ! 93: 2dup " tell" is-relay ! 94: 2drop ! 95: ;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.