urbit/base/arvo/dill.hoon

523 lines
23 KiB
Plaintext
Raw Normal View History

2014-10-22 06:59:05 +04:00
!:
2013-09-29 00:21:18 +04:00
:: dill (4d), terminal handling
::
2013-12-15 09:42:27 +04:00
|= pit=vase
2014-06-09 01:27:04 +04:00
=> |% :: interface tiles
2015-03-18 19:40:40 +03:00
++ console-action :: console to app
$% [%det console-change] :: edit prompt line
[%inn ~] :: enter session
[%out ~] :: exit session
[%ret ~] :: submit and clear
== ::
++ console-buffer (list ,@c) :: command state
++ console-change :: network change
$: ler=console-clock :: destination clock
haw=@uvH :: source hash
ted=console-edit :: state change
== ::
++ console-clock ,[own=@ud his=@ud] :: vector clock
++ console-edit :: shared state change
$% [%del p=@ud] :: delete one at
[%ins p=@ud q=@c] :: insert at
[%mor p=(list console-edit)] :: combination
[%nop ~] :: no-op
[%set p=console-buffer] :: discontinuity
== ::
++ console-effect :: app to console
$% [%bel ~] :: beep
[%blk p=@ud q=@c] :: blink/match char at
[%clr ~] :: clear screen
[%det console-change] :: edit input
[%nex ~] :: save and clear input
[%tan p=(list tank)] :: classic tank
:: [%taq p=tanq] :: modern tank
[%txt p=tape] :: text line
== ::
++ dill-belt :: console input
$% [%aro p=?(%d %l %r %u)] :: arrow key
[%bac ~] :: true backspace
[%cru p=@tas q=(list tank)] :: echo error
2015-04-08 02:07:10 +03:00
[%ctl p=@c] :: control-key
2015-03-18 19:40:40 +03:00
[%del ~] :: true delete
2015-04-08 02:07:10 +03:00
[%met p=@c] :: meta-key
2015-03-18 19:40:40 +03:00
[%ret ~] :: return
[%rez p=@ud q=@ud] :: resize, cols, rows
[%txt p=(list ,@c)] :: utf32 text
[%yow p=gill] :: connect to app
== ::
++ dill-blit :: console output
$% [%bel ~] :: make a noise
[%clr ~] :: clear the screen
[%hop p=@ud] :: set cursor position
2015-03-25 01:56:11 +03:00
[%mor p=(list dill-blit)] :: multiple blits
2015-03-18 19:40:40 +03:00
[%pro p=(list ,@c)] :: show as cursor/line
2015-04-01 23:56:43 +03:00
[%qit ~] :: close console
2015-03-18 19:40:40 +03:00
[%out p=(list ,@c)] :: send output line
[%sag p=path q=*] :: save to jamfile
[%sav p=path q=@] :: save to file
== ::
2015-03-23 01:46:42 +03:00
++ gill (pair ship term) :: general contact
2015-03-18 19:40:40 +03:00
-- ::
=> |% :: console protocol
2015-05-06 22:55:47 +03:00
++ axle :: all dill state
$: %3 ::
ore=(unit ship) :: identity once set
hey=(unit duct) :: default duct
dug=(map duct axon) :: conversations
$= hef :: other weights
$: a=(unit mass) ::
c=(unit mass) ::
e=(unit mass) ::
f=(unit mass) ::
g=(unit mass) ::
t=(unit mass) ::
== ::
== ::
2015-03-18 19:40:40 +03:00
++ axon :: dill per duct
$: ram=term :: console program
tem=(unit (list dill-belt)) :: pending, reverse
wid=_80 :: terminal width
pos=@ud :: cursor position
see=(list ,@c) :: current line
== ::
-- => ::
|% :: protocol below
++ blew ,[p=@ud q=@ud] :: columns rows
++ belt :: raw console input
$% [%aro p=?(%d %l %r %u)] :: arrow key
[%bac ~] :: true backspace
2015-04-08 02:07:10 +03:00
[%ctl p=@c] :: control-key
2015-03-18 19:40:40 +03:00
[%del ~] :: true delete
2015-04-08 02:07:10 +03:00
[%met p=@c] :: meta-key
2015-03-18 19:40:40 +03:00
[%ret ~] :: return
[%txt p=(list ,@c)] :: utf32 text
== ::
++ blit :: raw console output
$% [%bel ~] :: make a noise
[%clr ~] :: clear the screen
[%hop p=@ud] :: set cursor position
[%lin p=(list ,@c)] :: set current line
[%mor ~] :: newline
[%sag p=path q=*] :: save to jamfile
[%sav p=path q=@] :: save to file
== ::
++ flog :: sent to %dill
2015-05-06 22:55:47 +03:00
$% [%crud p=@tas q=(list tank)] :: error with trace
[%heft ~] :: system memory
[%text p=tape] :: print text
2015-03-18 19:40:40 +03:00
[%veer p=@ta q=path r=@t] :: install vane
[%vega p=path] :: reboot by path
[%verb ~] :: verbose mode
== ::
2014-06-03 09:07:32 +04:00
++ gift :: out result <-$
2015-03-18 19:40:40 +03:00
$% [%bbye ~] :: reset prompt
[%blit p=(list blit)] :: terminal output
[%init p=@p] :: set owner
[%logo ~] :: logout
2015-05-06 22:55:47 +03:00
[%mass p=mass] :: memory usage
2015-03-18 19:40:40 +03:00
[%veer p=@ta q=path r=@t] :: install vane
[%vega p=path] :: reboot by path
[%verb ~] :: verbose mode
== ::
2014-06-03 09:07:32 +04:00
++ kiss :: in request ->$
2015-03-18 19:40:40 +03:00
$% [%belt p=belt] :: terminal input
[%blew p=blew] :: terminal config
[%boot p=*] :: weird %dill boot
[%crud p=@tas q=(list tank)] :: error with trace
[%flog p=flog] :: wrapped error
[%flow p=@tas q=(list gill)] :: terminal config
[%hail ~] :: terminal refresh
2015-05-06 22:55:47 +03:00
[%heft ~] :: system memory
2015-03-18 19:40:40 +03:00
[%hook ~] :: this term hung up
[%harm ~] :: all terms hung up
[%init p=ship] :: after gall ready
[%noop ~] :: no operation
[%talk p=tank] ::
[%text p=tape] ::
[%veer p=@ta q=path r=@t] :: install vane
[%vega p=path] :: reboot by path
[%verb ~] :: verbose mode
== ::
-- => ::
|% :: protocol outward
++ mess ::
$% [%dill-belt p=(hypo dill-belt)] ::
== ::
2014-06-22 09:49:10 +04:00
++ move ,[p=duct q=(mold note gift)] :: local move
2015-03-18 19:40:40 +03:00
++ note-ames :: weird ames move
$% [%make p=(unit ,@t) q=@ud r=@ s=?] ::
[%sith p=@p q=@uw r=?] ::
== ::
2015-04-30 01:48:45 +03:00
++ note-clay ::
$% [%font p=@p q=@tas r=@p s=@tas] ::
[%warp p=sock q=riff] :: wait for clay, hack
2015-03-18 19:40:40 +03:00
== ::
++ note-dill :: note to self, odd
$% [%crud p=@tas q=(list tank)] ::
2015-05-06 22:55:47 +03:00
[%heft ~] ::
2015-04-08 21:27:51 +03:00
[%init p=ship] ::
2015-03-18 19:40:40 +03:00
[%text p=tape] ::
[%veer p=@ta q=path r=@t] :: install vane
[%vega p=path] :: reboot by path
[%verb ~] :: verbose mode
== ::
++ note-gall :: outbound message
$% [%mess p=[ship q=path] q=ship r=mess] ::
[%nuke p=[p=ship q=path] q=ship] ::
[%show p=[p=ship q=path] q=ship r=path] ::
[%took p=[p=ship q=path] q=ship] ::
== ::
++ note ::
2015-05-07 05:25:41 +03:00
$? [?(%a %c %e %f %g %t) %wegh ~] ::
2015-03-18 19:40:40 +03:00
$% [%a note-ames] :: out request $->
2015-04-08 21:27:51 +03:00
[%c note-clay] ::
2015-03-18 19:40:40 +03:00
[%d note-dill] ::
[%g note-gall] ::
2015-05-07 05:25:41 +03:00
== == ::
2014-10-28 04:50:07 +03:00
++ riff ,[p=desk q=(unit rave)] :: see %clay
2015-03-18 19:40:40 +03:00
++ sign-ames ::
$% [%nice ~] ::
[%init p=ship] ::
== ::
++ sign-clay ::
2015-04-30 01:48:45 +03:00
$% [%mere p=(each (set path) (pair term tang))] ::
[%note p=@tD q=tank] ::
2015-03-18 19:40:40 +03:00
[%writ p=riot] ::
== ::
2015-03-19 01:01:47 +03:00
++ sign-dill ::
$% [%blit p=(list blit)] ::
== ::
2015-03-18 19:40:40 +03:00
++ sign-gall ::
$% [%crud p=@tas q=(list tank)] ::
[%mean p=ares] ::
[%nice ~] ::
[%rush %dill-blit dill-blit] ::
== ::
++ sign-time ::
$% [%wake ~] ::
== ::
2014-06-22 09:49:10 +04:00
++ sign :: in result $<-
2015-05-06 22:55:47 +03:00
$? [?(%a %c %e %f %g %t) %mass p=mass] ::
2015-03-18 19:40:40 +03:00
$% [%a sign-ames] ::
[%c sign-clay] ::
2015-03-19 01:01:47 +03:00
[%d sign-dill] ::
2015-03-18 19:40:40 +03:00
[%g sign-gall] ::
[%t sign-time] ::
2015-05-06 22:55:47 +03:00
== == ::
2014-06-09 01:27:04 +04:00
:::::::: :: dill tiles
2015-03-18 19:40:40 +03:00
--
=| all=axle
|= [now=@da eny=@ ski=sled] :: current invocation
=> |%
++ as :: per cause
|_ $: [moz=(list move) hen=duct our=ship]
axon
==
2015-03-18 19:40:40 +03:00
++ abet :: resolve
^- [(list move) axle]
[(flop moz) all(dug (~(put by dug.all) hen +<+))]
2013-09-29 00:21:18 +04:00
::
2015-03-18 19:40:40 +03:00
++ call :: receive input
|= kyz=kiss
^+ +>
?+ -.kyz ~& [%strange-kiss -.kyz] +>
%flow +>
%harm +>
%hail +>
%belt (send `dill-belt`p.kyz)
2015-03-19 01:01:47 +03:00
%text (from %out (tuba p.kyz))
%crud :: (send `dill-belt`[%cru p.kyz q.kyz])
(crud p.kyz q.kyz)
2015-03-18 19:40:40 +03:00
%blew (send %rez p.p.kyz q.p.kyz)
2015-05-06 22:55:47 +03:00
%heft heft
2015-03-18 19:40:40 +03:00
%veer (dump kyz)
%vega (dump kyz)
%verb (dump kyz)
2013-09-29 00:21:18 +04:00
==
::
2015-03-19 01:01:47 +03:00
++ crud
|= [err=@tas tac=(list tank)]
=+ ^= wol ^- wall
:- (trip err)
(zing (turn tac |=(a=tank (~(win re a) [0 wid]))))
|- ^+ +>.^$
?~ wol +>.^$
$(wol t.wol, +>.^$ (from %out (tuba i.wol)))
2013-09-29 00:21:18 +04:00
::
2015-03-18 19:40:40 +03:00
++ dump :: pass down to hey
|= git=gift
?> ?=(^ hey.all)
+>(moz [[u.hey.all %give git] moz])
2013-09-29 00:21:18 +04:00
::
2015-03-18 19:40:40 +03:00
++ done :: return gift
|= git=gift
+>(moz :_(moz [hen %give git]))
2015-02-09 00:22:33 +03:00
::
2015-03-18 19:40:40 +03:00
++ from :: receive belt
|= bit=dill-blit
^+ +>
2015-03-25 01:56:11 +03:00
?: ?=(%mor -.bit)
|- ^+ +>.^$
?~ p.bit +>.^$
$(p.bit t.p.bit, +>.^$ ^$(bit i.p.bit))
2015-03-18 19:40:40 +03:00
?: ?=(%out -.bit)
%+ done %blit
:~ [%lin p.bit]
[%mor ~]
[%lin see]
[%hop pos]
2013-09-29 00:21:18 +04:00
==
2015-03-18 19:40:40 +03:00
?: ?=(%pro -.bit)
(done(see p.bit) %blit [[%lin p.bit] [%hop pos] ~])
?: ?=(%hop -.bit)
(done(pos p.bit) %blit [bit ~])
2015-04-01 23:56:43 +03:00
?: ?=(%qit -.bit)
(dump %logo ~)
2015-03-18 19:40:40 +03:00
(done %blit [bit ~])
2013-09-29 00:21:18 +04:00
::
2015-05-06 22:55:47 +03:00
++ heft
%_ .
moz
:* [hen %pass /heft/ames %a %wegh ~]
2015-05-07 05:25:41 +03:00
[hen %pass /heft/clay %c %wegh ~]
[hen %pass /heft/eyre %e %wegh ~]
[hen %pass /heft/ford %f %wegh ~]
[hen %pass /heft/gall %g %wegh ~]
[hen %pass /heft/time %t %wegh ~]
2015-05-06 22:55:47 +03:00
moz
==
==
::
2015-03-18 19:40:40 +03:00
++ init :: initialize
2015-03-25 01:56:11 +03:00
~& [%dill-init our]
2015-03-18 19:40:40 +03:00
=+ myt=(flop (need tem))
=. tem ~
2015-04-30 01:48:45 +03:00
=. moz :_(moz [hen %pass / %c %font our %home our %base])
=. moz :_(moz [hen %pass / %g %show [our [ram ~]] our ~])
2015-03-18 19:40:40 +03:00
|- ^+ +>
?~ myt +>
$(myt t.myt, +> (send i.myt))
::
++ into :: preinitialize
|= gyl=(list gill)
%_ +>
tem `(turn gyl |=(a=gill [%yow a]))
moz
:_ moz
:* hen
2015-04-30 01:48:45 +03:00
%pass
/
%c
[%warp [our our] %base `[%sing %y [%ud 1] /]]
2013-09-29 00:21:18 +04:00
==
==
::
2015-03-18 19:40:40 +03:00
++ send :: send action
|= bet=dill-belt
?^ tem
+>(tem `[bet u.tem])
%_ +>
moz
:_ moz
[hen %pass ~ %g %mess [our [ram ~]] our [%dill-belt -:!>(bet) bet]]
2013-09-29 00:21:18 +04:00
==
2015-03-18 19:40:40 +03:00
::
++ took :: send rush ack
%_ .
moz
:_(moz [hen %pass ~ %g %took [our [ram ~]] our])
==
::
2015-05-06 22:55:47 +03:00
++ wegh
^- mass
2015-05-13 00:18:34 +03:00
:- %dill
2015-05-06 22:55:47 +03:00
:- %|
2015-05-13 00:18:34 +03:00
:~ all/`[ore hey dug]:all
2015-05-06 22:55:47 +03:00
==
::
++ wegt
|= [lal=?(%a %c %e %f %g %t) mas=mass]
^+ +>
=. hef.all
?- lal
2015-05-07 05:25:41 +03:00
%a ~?(?=(^ a.hef.all) %double-mass-a hef.all(a `mas))
%c ~?(?=(^ c.hef.all) %double-mass-c hef.all(c `mas))
%e ~?(?=(^ e.hef.all) %double-mass-e hef.all(e `mas))
%f ~?(?=(^ f.hef.all) %double-mass-f hef.all(f `mas))
%g ~?(?=(^ g.hef.all) %double-mass-g hef.all(g `mas))
%t ~?(?=(^ t.hef.all) %double-mass-t hef.all(t `mas))
2015-05-06 22:55:47 +03:00
==
?. ?& ?=(^ a.hef.all)
?=(^ c.hef.all)
?=(^ e.hef.all)
?=(^ f.hef.all)
?=(^ g.hef.all)
?=(^ t.hef.all)
==
2015-05-07 05:25:41 +03:00
+>.$
2015-05-06 22:55:47 +03:00
%+ done(hef.all [~ ~ ~ ~ ~ ~])
%mass
=> [hef.all d=wegh]
2015-05-13 00:18:34 +03:00
[%vanes %| ~[u.a u.c d u.e u.f u.g u.t]]
2015-05-06 22:55:47 +03:00
::
2015-03-18 19:40:40 +03:00
++ take :: receive
2015-05-06 22:55:47 +03:00
|= [tea=wire sih=sign]
2015-03-18 19:40:40 +03:00
^+ +>
?- sih
2015-05-06 22:55:47 +03:00
[?(%a %c %e %f %g %t) %mass *]
(wegt -.sih p.sih)
::
2015-03-18 19:40:40 +03:00
[%a %nice *]
:: ~& [%take-nice-ames sih]
+>
::
[%a %init *]
+>(moz :_(moz [hen %give +.sih]))
2015-04-30 01:48:45 +03:00
::
2015-05-06 22:55:47 +03:00
[%c %mere *] :: i don't think we get these anymore
2015-04-30 01:48:45 +03:00
?: ?=(%& -.p.sih)
+>.$
~| %dill-mere-fail
~| p.p.p.sih
|-
?~ q.p.p.sih !!
2015-05-06 22:55:47 +03:00
~> %mean.|.(i.q.p.p.sih) :: interpolate ford fail into stack trace
2015-04-30 01:48:45 +03:00
$(q.p.p.sih t.q.p.p.sih)
2015-03-18 19:40:40 +03:00
::
[%c %note *]
2015-05-01 03:21:31 +03:00
(from %out (tuba p.sih ' ' ~(ram re q.sih)))
2015-03-18 19:40:40 +03:00
::
[%c %writ *]
init
2015-03-19 01:01:47 +03:00
::
[%d %blit *]
(done +.sih)
2015-03-18 19:40:40 +03:00
::
[%g %crud *]
2015-03-19 01:01:47 +03:00
(crud p.+.sih q.+.sih)
:: (send %cru p.+.sih q.+.sih)
2015-03-18 19:40:40 +03:00
::
[%g %mean *]
2015-04-01 23:56:43 +03:00
~& %dill-take-mean
+>
2015-03-18 19:40:40 +03:00
::
[%g %nice *]
:: ~& [%take-nice sih]
+>
::
[%g %rush %dill-blit *]
took:(from +>+.sih)
2015-03-18 19:40:40 +03:00
::
[%t %wake *]
:: ~& %dill-wake
+>
==
--
2014-10-22 06:59:05 +04:00
::
2015-03-18 19:40:40 +03:00
++ ax :: make ++as
|= [hen=duct kyz=kiss] ::
?~ ore.all ~
=+ nux=(~(get by dug.all) hen)
?^ nux
(some ~(. as [~ hen u.ore.all] u.nux))
?. ?=(%flow -.kyz) ~
%- some
%. q.kyz
%~ into as
:- [~ hen u.ore.all]
:* p.kyz
[~ ~]
80
0
(tuba "<{(trip p.kyz)}>")
2014-10-22 06:59:05 +04:00
==
2015-03-18 19:40:40 +03:00
--
2014-06-06 02:14:49 +04:00
|% :: poke/peek pattern
++ call :: handle request
|= $: hen=duct
hic=(hypo (hobo kiss))
==
^- [p=(list move) q=_..^$]
=> %= . :: XX temporary
q.hic
^- kiss
?: ?=(%soft -.q.hic)
:: ~& [%dill-call-soft (,@tas `*`-.p.q.hic)]
((hard kiss) p.q.hic)
?: (~(nest ut -:!>(*kiss)) | p.hic) q.hic
~& [%dill-call-flub (,@tas `*`-.q.hic)]
((hard kiss) q.hic)
==
2015-03-18 19:40:40 +03:00
?: ?=(%boot -.q.hic)
:_(..^$ [hen %pass ~ (note %a p.q.hic)]~)
2014-06-06 02:14:49 +04:00
?: ?=(%flog -.q.hic)
2015-03-19 01:01:47 +03:00
:: ~& [%dill-flog +.q.hic]
2015-04-08 21:27:51 +03:00
?: ?=([%crud %hax-init [%leaf *] ~] p.q.hic)
=+ him=(slav %p (crip p.i.q.p.q.hic))
:_(..^$ ?~(hey.all ~ [u.hey.all %give %init him]~))
2015-03-18 19:40:40 +03:00
:_(..^$ ?~(hey.all ~ [u.hey.all %slip %d p.q.hic]~))
=. hey.all ?^(hey.all hey.all `hen)
2015-03-19 01:01:47 +03:00
?: ?=(%init -.q.hic)
2015-04-08 05:19:31 +03:00
:: ~& [%call-init hen]
2015-03-19 01:01:47 +03:00
?: =(ore.all `p.q.hic)
2015-04-08 21:27:51 +03:00
[[hen %give q.hic]~ ..^$]
2015-03-19 01:01:47 +03:00
=: ore.all `p.q.hic
dug.all ~
==
2015-03-23 07:37:01 +03:00
=+ ^= flo ^- (list (pair ship term))
=+ myr=(clan p.q.hic)
?: =(%pawn myr)
2015-04-06 22:57:23 +03:00
[[p.q.hic %dojo] ~]
2015-03-23 07:37:01 +03:00
?: =(%earl myr)
=+ fap=(sein p.q.hic)
2015-03-28 01:53:35 +03:00
[[fap %dojo] [fap %talk] ~]
[[p.q.hic %dojo] [p.q.hic %talk] ~]
2015-03-25 21:03:40 +03:00
=^ moz all abet:(need (ax (need hey.all) [%flow %sole flo]))
2015-04-08 05:19:31 +03:00
?: |((lth p.q.hic 256) (gte p.q.hic (bex 64))) [moz ..^$] :: XX HORRIBLE
[:_(moz [(need hey.all) %give %init p.q.hic]) ..^$]
2015-03-18 19:40:40 +03:00
=+ nus=(ax hen q.hic)
?~ nus
~& [%dill-no-flow q.hic]
[~ ..^$]
=^ moz all abet:(call:u.nus q.hic)
[moz ..^$]
2014-05-22 21:39:51 +04:00
::
2013-09-29 00:21:18 +04:00
++ doze
2013-12-15 09:42:27 +04:00
|= [now=@da hen=duct]
2013-09-29 00:21:18 +04:00
^- (unit ,@da)
~
::
2015-03-19 01:01:47 +03:00
++ load :: trivial
2015-05-13 00:18:34 +03:00
|= old=axle
2015-03-19 01:01:47 +03:00
..^$(all old)
:: |= old=* :: diable
:: ..^$(ore.all `~zod)
2013-09-29 00:21:18 +04:00
::
++ scry
2014-05-27 00:43:40 +04:00
|= [fur=(unit (set monk)) ren=@tas his=ship syd=desk lot=coin tyl=path]
2015-02-27 09:35:41 +03:00
^- (unit (unit cage))
2015-03-18 19:40:40 +03:00
[~ ~]
::
++ stay all
2013-09-29 00:21:18 +04:00
::
2014-06-06 02:14:49 +04:00
++ take :: process move
2014-06-22 09:49:10 +04:00
|= [tea=wire hen=duct hin=(hypo sign)]
2014-06-06 02:14:49 +04:00
^- [p=(list move) q=_..^$]
2015-03-18 19:40:40 +03:00
?: =(~ ore.all)
?: ?=([%a %init *] q.hin)
2015-04-08 05:19:31 +03:00
:: ~& [%take-init hen]
2015-03-19 01:01:47 +03:00
=. hey.all ?^(hey.all hey.all `hen)
2015-03-18 19:40:40 +03:00
[[[hen %give +.q.hin] ~] ..^$]
2015-04-08 05:19:31 +03:00
:: [~ ..^$]
2015-03-18 19:40:40 +03:00
~& [%take-back q.hin]
[~ ..^$]
?. (~(has by dug.all) hen)
~& [%take-weird-sign q.hin]
~& [%take-weird-hen hen]
[~ ..^$]
=+ our=?>(?=(^ ore.all) u.ore.all)
=^ moz all
2015-05-06 22:55:47 +03:00
abet:(~(take as [~ hen our] (~(got by dug.all) hen)) tea q.hin)
2015-03-18 19:40:40 +03:00
[moz ..^$]
2013-09-29 00:21:18 +04:00
--