summaryrefslogtreecommitdiff
path: root/runtime/remote.apl
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/remote.apl')
-rw-r--r--runtime/remote.apl28
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'⊢⍬
+}