diff options
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/remote.apl | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/runtime/remote.apl b/runtime/remote.apl new file mode 100644 index 0000000..f696a15 --- /dev/null +++ b/runtime/remote.apl @@ -0,0 +1,28 @@ +REMOTE←{ + fd←⎕PIPE ⍵ + out←{ + msg←{1(2⊃⍵)}⍇⍬ + raw←0 ⎕SERIAL msg + len←(4⍴255)⊤≢raw + _←fd ⎕WRITE len,raw + ∇⍵ + } + in←{ + m←1 ⎕serial fd ⎕read (4⍴255)⊥fd ⎕read 4 + _←m⍈⍵ + ∇⍵ + } + remote←{ + 0≡≢⍵: ⍺∇out&'remote out'⊢⎕self ⍝ Spawn out thread + 1≡≢⍵: ⍺∇⍵,in&'remote in'⊢⎕self ⍝ Spawn in thread + (outid inid)←⍵ + master←⍺ + (from msg)←{1 ⍵}⍇⍬ + _←{ + from≡master: msg⍈outid + from≢master: msg⍈master + }⍬ + ⍺∇⍵ + } + ⎕self remote&'remote'⊢⍬ +} |