urbit/ape/dojo.hoon

1004 lines
35 KiB
Plaintext
Raw Normal View History

2015-09-10 03:52:55 +03:00
:: :: ::
2015-12-21 00:16:39 +03:00
:::: /hoon+dojo+app :: ::::
2015-05-07 05:31:54 +03:00
:: :: ::
/? 314 :: arvo kelvin
2015-09-26 03:23:06 +03:00
/- sole :: console structures
2015-05-07 05:31:54 +03:00
/+ sole :: console library
2015-09-02 01:20:17 +03:00
[. sole]
2015-05-07 05:31:54 +03:00
:: :: ::
:::: :: ::::
!: :: ::
=> |% :: external structures
++ house :: all state
2015-12-14 10:58:14 +03:00
$: $4
2015-12-20 23:50:45 +03:00
egg/@u :: command count
hoc/(map bone session) :: conversations
2015-05-07 05:31:54 +03:00
== ::
++ session :: per conversation
2015-12-20 23:50:45 +03:00
$: say/sole-share :: command-line state
dir/beam :: active path
poy/(unit dojo-project) :: working
2015-12-21 00:16:39 +03:00
{lib/(list hoof) arc/(list hoof)} :: lib+sur
2015-12-20 23:50:45 +03:00
var/(map term cage) :: variable state
old/(set term) :: used TLVs
buf/tape :: multiline buffer
2015-05-07 05:31:54 +03:00
== ::
++ dojo-command ::
2015-12-14 10:58:14 +03:00
$^ (pair dojo-sink dojo-source) :: route value
2015-12-20 23:50:45 +03:00
{$brev p/term} :: unbind variable
2015-12-09 04:54:26 +03:00
::
2015-09-29 22:15:33 +03:00
++ dojo-sink ::
2015-12-20 23:50:45 +03:00
$% {$flat p/path} :: atom to unix
{$pill p/path} :: noun to unix pill
:: {$tree p/path} :: noun to unix tree
{$file p/beam} :: save to clay
{$http p/?($post $put) q/purl} :: http outbound
{$poke p/goal} :: poke app
2015-12-26 13:07:50 +03:00
{$show p/?($0 $1 $2 $3)} :: print val+span+twig
2015-12-20 23:50:45 +03:00
{$verb p/term} :: store variable
2015-05-07 05:31:54 +03:00
== ::
++ dojo-source :: construction node
2015-12-20 23:50:45 +03:00
$: p/@ud :: assembly index
q/dojo-build :: general build
2015-05-07 05:31:54 +03:00
== ::
++ dojo-build :: one ford step
2015-12-20 23:50:45 +03:00
$% {$ur p/purl} :: http GET request
{$ge p/dojo-model} :: generator
{$dv p/path} :: core from source
{$ex p/twig} :: hoon expression
{$as p/mark q/dojo-source} :: simple transmute
{$do p/twig q/dojo-source} :: gate apply
{$tu p/(list dojo-source)} :: tuple
2015-05-07 05:31:54 +03:00
== ::
++ dojo-model :: data construction
2015-12-20 23:50:45 +03:00
$: p/dojo-server :: core source
q/dojo-config :: configuration
2015-05-07 05:31:54 +03:00
== ::
++ dojo-server :: numbered device
2015-12-20 23:50:45 +03:00
$: p/@ud :: assembly index
q/path :: gate path
2015-05-07 05:31:54 +03:00
== ::
++ dojo-config :: configuration
2015-12-20 23:50:45 +03:00
$: p/(list dojo-source) :: by order
q/(map term (unit dojo-source)) :: by keyword
2015-05-07 05:31:54 +03:00
== ::
++ dojo-project :: construction state
2015-12-20 23:50:45 +03:00
$: mad/dojo-command :: operation
num/@ud :: number of tasks
cud/(unit dojo-source) :: now solving
pux/(unit path) :: ford working
pro/(unit vase) :: prompting loop
per/(unit sole-edit) :: pending reverse
job/(map @ud dojo-build) :: problems
rez/(map @ud cage) :: results
2015-05-07 05:31:54 +03:00
== ::
2015-12-20 23:50:45 +03:00
++ bead {p/(set beam) q/cage} :: computed result
++ goal {p/ship q/term} :: flat application
2015-05-07 05:31:54 +03:00
++ clap :: action, user
2015-12-20 23:50:45 +03:00
$% {$peer p/path} :: subscribe
{$poke p/(cask)} :: apply
2015-12-09 04:54:26 +03:00
{$pull $~} :: unsubscribe
2015-05-07 05:31:54 +03:00
== ::
++ club :: action, system
2015-12-20 23:50:45 +03:00
$% {$peer p/path} :: subscribe
{$poke p/cage} :: apply
2015-12-09 04:54:26 +03:00
{$pull $~} :: unsubscribe
2015-05-07 05:31:54 +03:00
== ::
++ card :: general card
2015-12-14 10:58:14 +03:00
$% {$diff $sole-effect sole-effect} ::
2015-12-09 04:54:26 +03:00
{$send wire {ship term} clap} ::
{$hiss wire mark {$hiss hiss}} ::
{$exec wire @p (unit {beak silk})} ::
{$deal wire sock term club} ::
{$info wire @p toro} ::
2015-05-07 05:31:54 +03:00
== ::
++ move (pair bone card) :: user-level move
++ sign ::
2015-12-20 23:50:45 +03:00
$% {$made p/@uvH q/gage} ::
{$unto p/cuft} ::
2015-05-07 05:31:54 +03:00
== ::
-- ::
2015-09-09 00:05:40 +03:00
!: ::
2015-05-07 05:31:54 +03:00
:::: ::
:: ::
2015-12-20 23:50:45 +03:00
|_ $: hid/bowl :: system state
2015-05-07 05:31:54 +03:00
house :: program state
== ::
++ he :: per session
2015-12-20 23:50:45 +03:00
|_ {moz/(list move) session} ::
2015-05-07 05:31:54 +03:00
++ dp :: dojo parser
|%
2015-09-11 02:01:43 +03:00
++ dp-default-app %hood
2015-09-29 22:15:33 +03:00
++ dp-message :: %poke
2015-12-20 23:50:45 +03:00
|= {gol/goal mod/dojo-model} ^- dojo-command
2015-09-29 22:15:33 +03:00
[[%poke gol] [0 [%ge mod(q.p [q.gol q.p.mod])]]]
2015-09-11 02:01:43 +03:00
::
2015-09-04 01:10:18 +03:00
++ dp-command-line ;~(sfix dp-command (just '\0a'))
2015-09-29 22:15:33 +03:00
++ dp-variable :: %verb or %brev
2015-12-20 23:50:45 +03:00
|* {sym/rule src/rule}
2015-09-29 22:15:33 +03:00
%- cook :_ ;~(plug sym (punt src))
2015-12-20 23:50:45 +03:00
|= {a/term b/(unit dojo-source)} ^- dojo-command
2015-09-29 22:15:33 +03:00
?~(b [%brev a] [[%verb a] u.b])
::
2015-05-07 05:31:54 +03:00
++ dp-command :: ++dojo-command
2015-10-07 21:58:17 +03:00
:: =< ;~(less |-(;~(pose (jest '|*') ;~(pfix next (knee ** |.(^$))))) .)
2015-05-07 05:31:54 +03:00
%+ knee *dojo-command |. ~+
2015-09-29 22:15:33 +03:00
;~ pose
;~ pfix bar
%+ cook dp-message
2015-09-12 00:15:25 +03:00
(stag [our.hid dp-default-app] dp-model)
2015-06-01 23:46:22 +03:00
==
::
2015-09-29 22:15:33 +03:00
;~ pfix col
2015-05-07 05:31:54 +03:00
%+ cook
2015-12-20 23:50:45 +03:00
|= {a/goal b/$^(dojo-model dojo-source)}
2015-09-29 22:15:33 +03:00
?@ -.b [[%poke a] b]
(dp-message a b)
2015-05-07 05:31:54 +03:00
;~ plug
dp-goal
2015-09-11 02:01:43 +03:00
;~ pose
2015-09-12 00:15:25 +03:00
;~(pfix bar dp-model)
;~(pfix ace dp-source)
2015-05-07 05:31:54 +03:00
==
==
==
::
2015-11-12 23:43:41 +03:00
;~ pfix tis
;~ pose
2015-12-01 14:31:29 +03:00
(dp-variable (jest %dir) ;~(pfix ace :(stag 0 %ex dp-rood)))
(dp-variable sym ;~(pfix ace dp-source))
==
2015-11-12 23:43:41 +03:00
==
::
2015-09-29 22:15:33 +03:00
;~ pfix fas
2015-09-16 02:27:19 +03:00
;~ pose
2015-09-29 22:15:33 +03:00
(dp-variable (cold %arc hep) ;~(pfix gap dp-hooves))
(dp-variable (cold %lib lus) ;~(pfix gap dp-hooves))
2015-09-16 02:27:19 +03:00
==
==
2015-05-07 05:31:54 +03:00
::
2015-09-29 22:15:33 +03:00
;~((glue ace) dp-sink dp-source)
(stag [%show %0] dp-source)
==
++ dp-sink
;~ pose
;~(plug (cold %file tar) dp-beam)
;~(plug (cold %flat pat) (most fas qut))
2015-09-29 22:15:33 +03:00
;~(plug (cold %pill dot) (most fas sym))
;~(plug (cold %http lus) (easy %post) auri:epur)
;~(plug (cold %http hep) (easy %put) auri:epur)
2015-12-14 10:58:14 +03:00
(stag %show (cook $?($1 $2 $3) (cook lent (stun [1 3] wut))))
2015-05-07 05:31:54 +03:00
==
2015-09-16 02:27:19 +03:00
++ dp-hooves :: hoof list
2015-12-21 23:45:47 +03:00
:(stag 0 %ex %clsg (most ;~(plug com gaw) dp-hoof))
2015-09-16 02:27:19 +03:00
::
++ dp-hoof :: ++ford-hoof twig
2015-12-20 23:50:45 +03:00
%+ cook |*(a/* ~!(+.a `twig`a))
2015-09-16 02:27:19 +03:00
;~ plug
2015-12-21 08:05:19 +03:00
:(stag %rock %tas sym)
2015-09-16 02:27:19 +03:00
%- dp-twig-punt
;~ (glue fas)
;~(pfix fas (sear dp-case-twig nuck:so))
2015-12-21 08:05:19 +03:00
(stag %rock ;~(plug (cold %p sig) fed:ag))
2015-09-16 02:27:19 +03:00
==
==
::
++ dp-twig-punt :: twig of unit
2015-12-21 08:05:19 +03:00
|*(a/rule ;~(pose (stag [%bust %null] a) (easy [%bust %null])))
2015-09-16 02:27:19 +03:00
::
++ dp-case-twig
2015-12-20 23:50:45 +03:00
|= a/coin ^- (unit twig)
2015-12-09 04:54:26 +03:00
?. ?=({$~ case} a) ~
2015-09-16 02:27:19 +03:00
%+ some
2015-12-21 08:05:19 +03:00
[%blob %tas p.p.a]
[%rock p.a]
2015-09-16 02:27:19 +03:00
::
2015-05-07 05:31:54 +03:00
++ dp-source (stag 0 dp-build) :: ++dojo-source
++ dp-build :: ++dojo-build
%+ knee *dojo-build |. ~+
;~ pose
2015-09-12 00:15:25 +03:00
;~(plug (cold %ur lus) auri:epur)
2015-09-12 03:07:50 +03:00
;~(plug (cold %ge lus) dp-model)
;~(plug (cold %as pam) sym ;~(pfix ace dp-source))
;~(plug (cold %do cab) dp-twig ;~(pfix ace dp-source))
2015-09-10 01:57:25 +03:00
dp-value
2015-05-07 05:31:54 +03:00
==
::
2015-05-26 23:56:21 +03:00
++ dp-goal :: ++goal
2015-12-20 23:50:45 +03:00
%+ cook |=(a/goal a)
2015-05-07 05:31:54 +03:00
;~ pose
;~ plug
2015-09-11 02:01:43 +03:00
;~(pfix sig fed:ag)
;~(pose ;~(pfix fas sym) (easy dp-default-app))
2015-05-07 05:31:54 +03:00
==
2015-09-11 02:01:43 +03:00
%+ stag our.hid
;~(pose sym (easy dp-default-app))
2015-05-07 05:31:54 +03:00
==
2015-09-04 02:17:34 +03:00
++ dp-beam :: ++beam
2015-12-20 23:50:45 +03:00
%+ cook |=(a/path =+((tome a) ?^(- u [he-beak (flop a)])))
2015-09-29 22:15:33 +03:00
=+ vez=(vang | dp-path)
2015-09-04 02:17:34 +03:00
(sear plex:vez (stag %clsg poor:vez))
::
2015-09-12 00:15:25 +03:00
++ dp-model ;~(plug dp-server dp-config) :: ++dojo-model
++ dp-path (tope he-beam) :: ++path
++ dp-server (stag 0 (most fas sym)) :: ++dojo-server
2015-09-29 22:15:33 +03:00
++ dp-twig tall:(vang | dp-path) :: ++twig
++ dp-rood :: 'dir' twig
=> (vang | (tope dir))
;~ pose
rood
::
=- ;~(pfix cen (stag %clsg -)) :: XX refactor ++scat
2015-12-20 23:50:45 +03:00
%+ sear |=({a/@ud b/tyke} (posh ~ ~ a b))
;~ pose
porc
2015-12-20 23:50:45 +03:00
(cook |=(a/(list) [(lent a) ~]) (star cen))
==
==
2015-05-07 05:31:54 +03:00
++ dp-value :: ++dojo-source
;~ pose
(stag %ex dp-twig)
2015-09-30 02:47:30 +03:00
(stag %tu (ifix [sel ser] (most ace dp-source)))
2015-05-07 05:31:54 +03:00
==
::
++ dp-config :: ++dojo-config
;~ plug
2015-09-10 01:57:25 +03:00
(star ;~(pfix ace (stag 0 dp-value)))
2015-05-07 05:31:54 +03:00
%+ cook
~(gas by *(map term (unit dojo-source)))
2015-09-04 02:17:34 +03:00
%- star
2015-05-07 05:31:54 +03:00
;~ plug
2015-09-04 02:17:34 +03:00
;~(pfix com ace tis sym)
2015-09-10 01:57:25 +03:00
(punt ;~(pfix ace (stag 0 dp-value)))
2015-05-07 05:31:54 +03:00
==
==
--
::
++ dy :: project work
|_ dojo-project ::
++ dy-abet +>(poy `+<) :: resolve
2015-10-02 23:55:34 +03:00
++ dy-amok +>(poy ~) :: terminate
2015-05-07 05:31:54 +03:00
++ dy-ford :: send work to ford
2015-12-20 23:50:45 +03:00
|= {way/wire kas/silk}
2015-05-07 05:31:54 +03:00
^+ +>+>
2015-12-09 04:54:26 +03:00
?> ?=($~ pux)
2015-09-04 04:29:34 +03:00
(he-card(poy `+>+<(pux `way)) %exec way our.hid `[he-beak kas])
2015-05-07 05:31:54 +03:00
::
2015-09-09 02:58:48 +03:00
++ dy-eyre :: send work to eyre
2015-12-20 23:50:45 +03:00
|= {way/wire req/hiss}
2015-09-09 02:58:48 +03:00
^+ +>+>
2015-12-09 04:54:26 +03:00
?> ?=($~ pux)
2015-09-11 02:01:43 +03:00
(he-card(poy `+>+<(pux `way)) %hiss way %httr %hiss req)
2015-09-09 02:58:48 +03:00
::
2015-05-07 05:31:54 +03:00
++ dy-stop :: stop work
^+ +>
2015-10-07 21:58:17 +03:00
=. poy ~
2015-05-07 05:31:54 +03:00
?~ pux +>
2015-10-02 23:55:34 +03:00
%. [%txt "! cancel {<u.pux>}"]
2015-10-07 21:58:17 +03:00
he-diff:(he-card %exec u.pux our.hid ~)
2015-05-07 05:31:54 +03:00
::
++ dy-slam :: call by ford
2015-12-20 23:50:45 +03:00
|= {way/wire gat/vase sam/vase}
2015-05-07 05:31:54 +03:00
^+ +>+>
(dy-ford way %call [%$ %noun gat] [%$ %noun sam])
2015-05-07 05:31:54 +03:00
::
++ dy-diff :: send effects, abet
2015-12-20 23:50:45 +03:00
|= fec/sole-effect
2015-05-07 05:31:54 +03:00
^+ +>+>
(he-diff(poy `+>+<) fec)
::
++ dy-rash :: send effects, amok
2015-12-20 23:50:45 +03:00
|= fec/sole-effect
2015-05-07 05:31:54 +03:00
^+ +>+>
(he-diff(poy ~) fec)
::
++ dy-init-command :: ++dojo-command
2015-12-20 23:50:45 +03:00
|= mad/dojo-command
2015-05-07 05:31:54 +03:00
^+ [mad +>]
2015-09-29 22:15:33 +03:00
?@ -.mad [mad +>.$]
=. q.mad
2015-12-10 12:17:19 +03:00
?+(-.p.mad q.mad $http [0 %as %mime q.mad])
2015-09-29 22:15:33 +03:00
=^ src +>.$ (dy-init-source q.mad)
[mad(q src) +>.$]
2015-05-07 05:31:54 +03:00
::
++ dy-init-source :: ++dojo-source
2015-12-20 23:50:45 +03:00
|= src/dojo-source
2015-05-07 05:31:54 +03:00
^+ [src +>]
=^ bul +> (dy-init-build q.src)
=: p.src num
q.src bul
==
2015-09-10 01:57:25 +03:00
[src +>.$(num +(num), job (~(put by job) src))]
2015-05-07 05:31:54 +03:00
::
2015-09-29 22:15:33 +03:00
++ dy-init-source-unit :: (unit dojo-source)
2015-12-20 23:50:45 +03:00
|= urc/(unit dojo-source)
2015-09-29 22:15:33 +03:00
^+ [urc +>]
?~ urc [~ +>]
=^ src +> (dy-init-source u.urc)
[`src +>.$]
::
2015-05-07 05:31:54 +03:00
++ dy-init-build :: ++dojo-build
2015-12-20 23:50:45 +03:00
|= bul/dojo-build
2015-05-07 05:31:54 +03:00
^+ [bul +>]
?- -.bul
2015-12-09 04:54:26 +03:00
$ex [bul +>.$]
$dv [bul +>.$]
$as =^(mor +>.$ (dy-init-source q.bul) [bul(q mor) +>.$])
$do =^(mor +>.$ (dy-init-source q.bul) [bul(q mor) +>.$])
$ge =^(mod +>.$ (dy-init-model p.bul) [[%ge mod] +>.$])
$ur [bul +>.$]
$tu =^ dof +>.$
2015-05-07 05:31:54 +03:00
|- ^+ [p.bul +>.^$]
?~ p.bul [~ +>.^$]
=^ dis +>.^$ (dy-init-source i.p.bul)
=^ mor +>.^$ $(p.bul t.p.bul)
[[dis mor] +>.^$]
[[%tu dof] +>.$]
==
::
++ dy-init-model :: ++dojo-model
2015-12-20 23:50:45 +03:00
|= mol/dojo-model
2015-05-07 05:31:54 +03:00
^+ [mol +>]
=^ one +>.$ (dy-init-server p.mol)
=^ two +>.$ (dy-init-config q.mol)
[[one two] +>.$]
::
++ dy-init-server :: ++dojo-server
2015-12-20 23:50:45 +03:00
|= srv/dojo-server
2015-05-07 05:31:54 +03:00
=. p.srv num
2015-09-12 00:15:25 +03:00
[srv +>.$(num +(num), job (~(put by job) num [%dv [%gen q.srv]]))]
2015-05-07 05:31:54 +03:00
::
++ dy-init-config :: prepare config
2015-12-20 23:50:45 +03:00
|= cig/dojo-config
2015-05-07 05:31:54 +03:00
^+ [cig +>]
=^ ord +>.$ (dy-init-ordered p.cig)
=^ key +>.$ (dy-init-named q.cig)
[[ord key] +>.$]
::
++ dy-init-ordered :: (list dojo-source)
2015-12-20 23:50:45 +03:00
|= ord/(list dojo-source)
2015-05-07 05:31:54 +03:00
^+ [ord +>]
?~ ord [~ +>.$]
=^ fir +>.$ (dy-init-source i.ord)
=^ mor +>.$ $(ord t.ord)
[[fir mor] +>.$]
::
++ dy-init-named :: (map @tas dojo-src)
2015-12-20 23:50:45 +03:00
|= key/(map term (unit dojo-source))
2015-05-07 05:31:54 +03:00
^+ [key +>.$]
?~ key [~ +>.$]
=^ top +>.$ (dy-init-source-unit q.n.key)
=^ lef +>.$ $(key l.key)
=^ rit +>.$ $(key r.key)
[[[p.n.key top] lef rit] +>.$]
::
++ dy-init :: full initialize
^+ .
=^(dam . (dy-init-command mad) +(mad dam))
::
++ dy-hand :: complete step
2015-12-20 23:50:45 +03:00
|= cag/cage
2015-05-07 05:31:54 +03:00
^+ +>+>
?> ?=(^ cud)
(dy-step(cud ~, rez (~(put by rez) p.u.cud cag)) +(p.u.cud))
::
++ dy-meal :: vase to cage
2015-12-20 23:50:45 +03:00
|= vax/vase
2015-05-07 05:31:54 +03:00
?. &(?=(@ -.q.vax) ((sane %tas) -.q.vax))
~& %dy-meal-cage
(dy-rash %bel ~)
(dy-hand -.q.vax (slot 3 vax))
::
++ dy-made-edit :: sole edit
2015-12-20 23:50:45 +03:00
|= cag/cage
2015-05-07 05:31:54 +03:00
^+ +>+>
?> ?=(^ per)
?: ?| ?=(^ q.q.cag)
=((lent buf.say) q.q.cag)
2015-12-09 04:54:26 +03:00
!&(?=($del -.u.per) =(+(p.u.per) (lent buf.say)))
2015-05-07 05:31:54 +03:00
==
dy-abet(per ~)
2015-09-02 01:20:17 +03:00
=^ lic say (~(transmit sole say) u.per)
2015-05-07 05:31:54 +03:00
(dy-diff(per ~) %mor [%det lic] [%err q.q.cag] ~)
::
++ dy-done :: dialog submit
2015-12-20 23:50:45 +03:00
|= txt/tape
2015-12-09 04:54:26 +03:00
?: |(?=(^ per) ?=(^ pux) ?=($~ pro))
~& %dy-no-prompt
(dy-diff %bel ~)
2015-05-07 05:31:54 +03:00
(dy-slam /dial u.pro !>(txt))
::
2015-09-09 00:05:40 +03:00
++ dy-cast
2015-12-20 23:50:45 +03:00
|* {typ/_* bun/vase}
|= a/vase ^- typ
2015-09-09 00:05:40 +03:00
?> (~(nest ut p.bun) & p.a)
;;(typ q.a)
::
2015-05-07 05:31:54 +03:00
++ dy-over :: finish construction
^+ +>
2015-12-09 04:54:26 +03:00
?: ?=({$show $3} -.mad)
2015-09-29 22:15:33 +03:00
(dy-rash %tan (dy-show-source q.mad) ~) :: XX separate command
2015-12-09 04:54:26 +03:00
?: ?=($brev -.mad)
2015-09-29 22:15:33 +03:00
=. var (~(del by var) p.mad)
=< dy-amok
?+ p.mad .
2015-12-14 10:58:14 +03:00
$?($eny $now $our) !!
2015-12-09 04:54:26 +03:00
$lib .(lib ~)
$arc .(arc ~)
2015-12-21 00:16:39 +03:00
$dir .(dir [[our.hid %home ud+0] /])
2015-09-29 22:15:33 +03:00
==
=+ cay=(~(got by rez) p.q.mad)
?- -.p.mad
2015-12-09 04:54:26 +03:00
$verb
2015-09-29 22:15:33 +03:00
=. var (~(put by var) p.p.mad cay)
2015-12-21 00:16:39 +03:00
~| bad-set+[p.p.mad p.q.cay]
2015-09-29 22:15:33 +03:00
=< dy-amok
?+ p.p.mad .
2015-12-09 04:54:26 +03:00
$eny ~|(%entropy-is-eternal !!)
$now ~|(%time-is-immutable !!)
$our ~|(%self-is-immutable !!)
$lib .(lib ((dy-cast (list hoof) !>(*(list hoof))) q.cay))
$arc .(arc ((dy-cast (list hoof) !>(*(list hoof))) q.cay))
$dir =+ ^= pax ^- path
=+ pax=((dy-cast path !>(*path)) q.cay)
2015-12-09 04:54:26 +03:00
?: ?=($~ pax) ~[(scot %p our.hid) %home '0']
?: ?=({@ $~} pax) ~[i.pax %home '0']
?: ?=({@ @ $~} pax) ~[i.pax i.t.pax '0']
pax
=. dir (need (tome pax))
=- +>(..dy (he-diff %tan - ~))
2015-12-21 00:16:39 +03:00
rose+[" " `~]^~[leaf+"=%" (smyt (tope he-beak s.dir))]
2015-09-29 22:15:33 +03:00
==
::
2015-12-09 04:54:26 +03:00
$poke
2015-05-07 05:31:54 +03:00
%- he-card(poy ~)
:* %deal
/poke
2015-09-29 22:15:33 +03:00
[our.hid p.p.p.mad]
q.p.p.mad
2015-05-07 05:31:54 +03:00
%poke
2015-09-29 22:15:33 +03:00
cay
2015-05-07 05:31:54 +03:00
==
2015-09-04 02:17:34 +03:00
::
2015-12-09 04:54:26 +03:00
$file
2015-09-04 02:17:34 +03:00
%- he-card(poy ~) :*
%info
/file
our.hid
2015-09-29 22:15:33 +03:00
(foal (tope p.p.mad) cay)
2015-09-04 02:17:34 +03:00
==
2015-05-07 05:31:54 +03:00
::
2015-12-09 04:54:26 +03:00
$flat
2015-09-29 22:15:33 +03:00
?^ q.q.cay
2015-05-07 05:31:54 +03:00
(dy-rash %tan [%leaf "not an atom"]~)
2015-09-29 22:15:33 +03:00
(dy-rash %sav p.p.mad q.q.cay)
2015-05-07 05:31:54 +03:00
::
2015-12-09 04:54:26 +03:00
$pill
2015-09-29 22:15:33 +03:00
(dy-rash %sag p.p.mad q.q.cay)
2015-09-11 02:01:43 +03:00
::
2015-12-09 04:54:26 +03:00
$http
?> ?=($mime p.cay)
2015-09-11 02:01:43 +03:00
=+ mim=;;(mime q.q.cay)
2015-12-26 13:07:50 +03:00
=+ maf=(~(add ja *math) content-span+(moon p.mim))
2015-09-29 22:15:33 +03:00
(dy-eyre /show [q.p.mad p.p.mad maf ~ q.mim])
2015-05-07 05:31:54 +03:00
::
2015-12-09 04:54:26 +03:00
$show
2015-09-29 22:15:33 +03:00
%+ dy-print cay
?- p.p.mad
2015-12-09 04:54:26 +03:00
$0 ~
$1 [%rose [~ " " ~] (skol p.q.cay) ~]~
2015-12-26 13:07:50 +03:00
$2 [%rose [~ " " ~] (dy-show-span-noun p.q.cay) ~]~
2015-09-29 22:15:33 +03:00
==
2015-09-11 02:01:43 +03:00
==
::
2015-12-20 23:50:45 +03:00
++ dy-show |=(cay/cage (dy-print cay ~))
2015-09-29 22:15:33 +03:00
++ dy-print
2015-12-20 23:50:45 +03:00
|= {cay/cage tan/tang}
2015-09-11 02:01:43 +03:00
%+ dy-rash %tan
2015-09-29 22:15:33 +03:00
%- welp :_ tan
2015-09-11 02:01:43 +03:00
?+ p.cay [(sell q.cay)]~
2015-12-09 04:54:26 +03:00
$tang ;;(tang q.q.cay)
$httr
2015-09-11 02:01:43 +03:00
=+ hit=;;(httr q.q.cay)
=- (flop (turn `wall`- |=(a/tape leaf+(dash:us a ''))))
2015-09-11 02:01:43 +03:00
:- "HTTP {<p.hit>}"
%+ weld
2015-12-20 23:50:45 +03:00
(turn q.hit |=({a/@t b/@t} "{(trip a)}: {(trip b)}"))
2015-09-11 02:01:43 +03:00
(turn `wain`?~(r.hit ~ (lore q.u.r.hit)) trip)
2015-05-07 05:31:54 +03:00
==
::
2015-12-26 13:07:50 +03:00
++ dy-show-span-noun
|= a/span ^- tank
2015-09-29 22:15:33 +03:00
=- >[-]<
2015-12-14 10:58:14 +03:00
|- ^- $? $% {$atom @tas}
{$moat @tas (unit @)}
2015-12-15 01:21:10 +03:00
{$cell _$ _$}
{$cube * _$}
2015-12-27 08:43:40 +03:00
{$face tusk _$}
2015-12-15 01:21:10 +03:00
{$fork _$ _$}
{$hold (list {_$ twig})}
2015-09-29 22:15:33 +03:00
==
wain :: "<|core|>"
2015-12-14 10:58:14 +03:00
$?($noun $void)
2015-09-29 22:15:33 +03:00
==
?+ a a
2015-12-14 10:58:14 +03:00
{$?($cube $face) ^} a(q $(a q.a))
{$?($cell $fork) ^} a(p $(a p.a), q $(a q.a))
2015-12-09 10:12:11 +03:00
{$core ^} `wain`/core
2015-12-26 13:07:50 +03:00
{$hold *} a(p (turn p.a |=({b/span c/twig} [^$(a b) c])))
2015-09-29 22:15:33 +03:00
==
::
++ dy-show-source
2015-12-20 23:50:45 +03:00
|= a/dojo-source ^- tank
2015-09-29 22:15:33 +03:00
=- >[-]<
2015-12-20 23:50:45 +03:00
=+ `{@ bil/dojo-build}`a
2015-12-15 01:21:10 +03:00
|- ^- $^ [_$ _$]
2015-12-14 10:58:14 +03:00
$? twig
$% {$ur purl}
2015-12-09 10:12:11 +03:00
{$dv path}
2015-12-15 01:21:10 +03:00
{$as mark _$}
{$do twig _$}
{$ge path (list _$) (map term (unit _$))}
2015-09-29 22:15:33 +03:00
==
==
?- -.bil
2015-12-14 10:58:14 +03:00
$?($ur $dv) bil
2015-12-10 12:17:19 +03:00
$ex ?. ?=({$cltr *} p.bil) p.bil
|- ^- twig
?~ p.p.bil !!
?~ t.p.p.bil i.p.p.bil
[i.p.p.bil $(p.p.bil t.p.p.bil)]
2015-12-09 04:54:26 +03:00
$tu ?~ p.bil !!
2015-09-29 22:15:33 +03:00
|-
?~ t.p.bil ^$(bil q.i.p.bil)
[^$(bil q.i.p.bil) $(p.bil t.p.bil)]
2015-12-09 04:54:26 +03:00
$as bil(q $(bil q.q.bil))
$do bil(q $(bil q.q.bil))
$ge :+ %ge q.p.p.bil
2015-09-29 22:15:33 +03:00
[(turn p.q.p.bil ..$) (~(run by q.q.p.bil) (lift ..$))]
==
::
2015-05-07 05:31:54 +03:00
++ dy-edit :: handle edit
2015-12-20 23:50:45 +03:00
|= cal/sole-change
2015-05-07 05:31:54 +03:00
^+ +>+>
2015-09-02 01:20:17 +03:00
=^ dat say (~(transceive sole say) cal)
2015-12-09 04:54:26 +03:00
?: |(?=(^ per) ?=(^ pux) ?=($~ pro))
2015-05-07 05:31:54 +03:00
~& %dy-edit-busy
2015-09-02 01:20:17 +03:00
=^ lic say (~(transmit sole say) dat)
2015-05-07 05:31:54 +03:00
(dy-diff %mor [%det lic] [%bel ~] ~)
(dy-slam(per `dat) /edit u.pro !>((tufa buf.say)))
::
2015-12-26 13:07:50 +03:00
++ dy-span :: sole action
2015-12-20 23:50:45 +03:00
|= act/sole-action
2015-05-07 05:31:54 +03:00
?- -.act
2015-12-10 12:17:19 +03:00
$det (dy-edit +.act)
$ret (dy-done (tufa buf.say))
$clr dy-stop
2015-05-07 05:31:54 +03:00
==
::
2015-12-20 23:50:45 +03:00
++ dy-cage |=(num/@ud (~(got by rez) num)) :: known cage
++ dy-vase |=(num/@ud q:(dy-cage num)) :: known vase
++ dy-silk-vase |=(vax/vase [%$ %noun vax]) :: vase to silk
2015-09-12 00:15:25 +03:00
++ dy-silk-sources :: sources to silk
2015-12-20 23:50:45 +03:00
|= src/(list dojo-source) ^- silk
2015-09-12 00:15:25 +03:00
%- dy-silk-vase
|-
?~ src !>(~)
(slop (dy-vase p.i.src) $(src t.src))
2015-05-07 05:31:54 +03:00
::
2015-09-12 00:15:25 +03:00
++ dy-silk-config :: configure
2015-12-20 23:50:45 +03:00
|= {cay/cage cig/dojo-config}
2015-12-10 12:17:19 +03:00
^- {wire silk}
2015-09-12 00:15:25 +03:00
:- ?+ -.q.q.cay ~|(%bad-gen ~_((sell (slot 2 q.cay)) !!))
2015-12-09 10:12:11 +03:00
$say /gent
$ask /dial
$get /scar
2015-09-12 00:15:25 +03:00
==
=+ gat=(slot 3 q.cay)
:+ %call (dy-silk-vase gat)
:+ (dy-silk-vase !>([now=now.hid eny=eny.hid bec=he-beak]))
(dy-silk-sources p.cig)
2015-09-12 03:24:51 +03:00
:+ %mute (dy-silk-vase (fall (slew 27 gat) !>(~)))
2015-09-12 00:15:25 +03:00
%+ turn (~(tap by q.cig))
2015-12-20 23:50:45 +03:00
|= {a/term b/(unit dojo-source)}
2015-09-12 00:15:25 +03:00
^- (pair wing silk)
:- [a ~]
%- dy-silk-vase
?~(b !>([~ ~]) (dy-vase p.u.b))
2015-05-07 05:31:54 +03:00
::
2015-05-11 22:09:41 +03:00
++ dy-twig-head :: dynamic state
2015-09-04 04:29:34 +03:00
^- cage
:- %noun
2015-12-20 23:50:45 +03:00
=+ sloop=|=({a/vase b/vase} ?:(=(*vase a) b ?:(=(*vase b) a (slop a b))))
2015-09-10 01:57:25 +03:00
%+ sloop
%- ~(rep by var)
2015-12-20 23:50:45 +03:00
|= {{a/term @ b/vase} c/vase} ^- vase
2015-12-21 00:16:39 +03:00
(sloop b(p face+[a p.b]) c)
2015-09-12 00:15:25 +03:00
!>([our=our now=now eny=eny]:hid)
2015-05-11 22:09:41 +03:00
::
2015-05-07 05:31:54 +03:00
++ dy-made-dial :: dialog product
2015-12-20 23:50:45 +03:00
|= cag/cage
2015-05-07 05:31:54 +03:00
^+ +>+>
?. ?=(^ q.q.cag)
(dy-diff %err q.q.cag)
=+ tan=((list tank) +2.q.q.cag)
=. +>+>.$ (he-diff %tan tan)
=+ vax=(spec (slot 3 q.cag))
?+ -.q.vax !!
$&
2015-05-07 05:31:54 +03:00
?~ +.q.vax
~& %dy-made-dial-abort
(dy-rash %bel ~)
(dy-meal (slot 7 vax))
::
$|
2015-05-07 05:31:54 +03:00
=< he-pone
2015-12-21 08:05:19 +03:00
%- dy-diff(pro `(slap (slot 7 vax) [%limb %q]))
2015-05-07 05:31:54 +03:00
=+ pom=(sole-prompt +<.q.vax)
[%pro pom(cad [':' ' ' cad.pom])]
==
::
2015-09-12 01:46:16 +03:00
++ dy-made-scar :: scraper product
2015-12-20 23:50:45 +03:00
|= cag/cage
2015-09-12 01:46:16 +03:00
^+ +>+>
?. ?=(^ q.q.cag)
(dy-diff %err q.q.cag)
=+ tan=((list tank) +2.q.q.cag)
=. +>+>.$ (he-diff %tan tan)
=+ vax=(spec (slot 3 q.cag))
~_ (sell q.cag)
?+ -.q.vax !!
$&
2015-09-12 01:46:16 +03:00
?~ +.q.vax
~& %dy-made-scar-abort
(dy-rash %bel ~)
(dy-meal (slot 7 vax))
::
$|
2015-09-12 01:46:16 +03:00
=+ hiz=;;(hiss +<.q.vax)
2015-12-21 00:16:39 +03:00
=. ..dy (he-diff %tan leaf+"< {(earn p.hiz)}" ~)
2015-12-21 08:05:19 +03:00
(dy-eyre(pro `(slap (slot 7 vax) limb+%q)) /scar hiz)
2015-09-12 01:46:16 +03:00
==
::
++ dy-sigh-scar :: scraper result
2015-12-20 23:50:45 +03:00
|= dat/cage
2015-09-12 01:46:16 +03:00
?~ pro
~& %dy-no-scraper
(dy-show dat)
(dy-slam(pux ~) /scar u.pro q.dat)
::
2015-05-07 05:31:54 +03:00
++ dy-made-gent :: generator product
2015-12-20 23:50:45 +03:00
|= cag/cage
2015-05-07 05:31:54 +03:00
(dy-meal q.cag)
::
++ dy-make :: build step
^+ +>
?> ?=(^ cud)
2015-09-10 01:57:25 +03:00
=+ bil=q.u.cud :: XX =*
2015-12-09 04:54:26 +03:00
?: ?=($ur -.bil)
2015-09-11 02:01:43 +03:00
(dy-eyre /hand [p.bil %get ~ ~])
2015-05-07 05:31:54 +03:00
%- dy-ford
^- (pair path silk)
2015-09-12 00:15:25 +03:00
?- -.bil
2015-12-09 10:12:11 +03:00
$ge (dy-silk-config (dy-cage p.p.p.bil) q.p.bil)
$dv [/hand [%core he-beak (flop p.bil)]]
$ex [/hand (dy-mare p.bil)]
$as [/hand [%cast p.bil [%$ (dy-cage p.q.bil)]]]
$do [/hand [%call (dy-mare p.bil) [%$ (dy-cage p.q.bil)]]]
$tu :- /hand
:- %$
2015-05-07 05:31:54 +03:00
:- %noun
|- ^- vase
2015-09-10 01:57:25 +03:00
?~ p.bil !!
=+ hed=(dy-vase p.i.p.bil)
?~ t.p.bil hed
(slop hed $(p.bil t.p.bil))
2015-05-07 05:31:54 +03:00
==
::
2015-09-09 00:05:40 +03:00
++ dy-twig-mark :: XX architect
=+ ^= ope
2015-12-20 23:50:45 +03:00
|= gen/twig ^- twig
2015-12-10 12:17:19 +03:00
?: ?=(?($sggl $sggr) -.gen)
2015-09-09 00:05:40 +03:00
$(gen q.gen)
=+ ~(open ap gen)
?.(=(gen -) $(gen -) gen)
2015-12-20 23:50:45 +03:00
|= gen/twig ^- (unit mark)
2015-09-09 00:05:40 +03:00
=. gen (ope gen)
2015-12-10 12:17:19 +03:00
?: ?=({$cnts {@ $~} $~} gen)
2015-09-10 01:57:25 +03:00
(bind (~(get by var) i.p.gen) head)
2015-12-09 04:54:26 +03:00
?. ?=($dtkt -.gen) ~
2015-09-09 00:05:40 +03:00
=. p.gen (ope p.gen)
?@ -.p.gen ~
?+ ~(feck ap p.p.gen) ~
2015-12-10 12:17:19 +03:00
{$~ $cx}
2015-09-09 00:05:40 +03:00
=+ gin=(ope q.p.gen)
|-
?@ -.gin ~
=. q.gin (ope q.gin)
?^ -.q.gin $(gin q.gin)
=. p.gin (ope p.gin)
2015-12-21 08:05:19 +03:00
?. ?=({{?($blob $rock) @ @} {$blob $n $~}} gin)
2015-09-09 00:05:40 +03:00
~
(some q.p.gin)
==
::
2015-06-02 21:36:56 +03:00
++ dy-mare :: build expression
2015-12-20 23:50:45 +03:00
|= gen/twig
2015-06-02 21:36:56 +03:00
^- silk
=+ too=(dy-twig-mark gen)
=- ?~(too - [%cast u.too -])
2015-09-04 04:29:34 +03:00
:+ %ride gen
:- [%$ dy-twig-head]
2015-09-10 03:52:55 +03:00
[%plan he-beam / zuse arc lib ~ ~]
2015-06-02 21:36:56 +03:00
::
2015-05-07 05:31:54 +03:00
++ dy-step :: advance project
2015-12-20 23:50:45 +03:00
|= nex/@ud
2015-05-07 05:31:54 +03:00
^+ +>+>
2015-12-09 04:54:26 +03:00
?> ?=($~ cud)
2015-12-10 12:17:19 +03:00
?: ?=({$show $3} -.mad)
he-easter:dy-over
2015-05-07 05:31:54 +03:00
?: =(nex num)
he-easter:dy-over
2015-05-07 05:31:54 +03:00
dy-make(cud `[nex (~(got by job) nex)])
--
::
++ he-dope :: sole user of ++dp
2015-12-20 23:50:45 +03:00
|= txt/tape ::
2015-12-21 00:16:39 +03:00
^- (each (unit (each dojo-command tape)) hair) :: prefix+result
2015-09-04 01:10:18 +03:00
=+ len=+((lent txt)) :: line length
=. txt :(weld buf txt "\0a") ::
=+ vex=((full dp-command-line):dp [1 1] txt) ::
?: =(q.p.vex len) :: matched to line end
2015-09-04 01:10:18 +03:00
[%& ~] ::
2015-12-20 23:50:45 +03:00
?: =(p.p.vex +((lent (skim txt |=(a/@ =(10 a)))))) :: parsed all lines
2015-12-21 00:16:39 +03:00
[%& ~ ?~(q.vex [%| txt] `p.u.q.vex)] :: new buffer+complete
2015-09-04 01:10:18 +03:00
[%| p.p.vex (dec q.p.vex)] :: syntax error
2015-05-07 05:31:54 +03:00
::
++ he-duke :: ++he-dope variant
2015-12-20 23:50:45 +03:00
|= txt/tape
2015-12-09 10:12:11 +03:00
^- (each (unit (each dojo-command tape)) @ud)
2015-05-07 05:31:54 +03:00
=+ foy=(he-dope txt)
?- -.foy
$| [%| q.p.foy]
$& [%& p.foy]
2015-05-07 05:31:54 +03:00
==
::
++ he-easter :: hint messages
^+ .
=. egg +(egg)
2015-12-21 00:16:39 +03:00
=- ?~(msg ..he-diff (he-diff %tan leaf+u.msg ~))
2015-12-20 23:50:45 +03:00
^- msg/(unit tape)
?+ (clan our.hid) ~
2015-12-10 12:17:19 +03:00
$pawn ?+ egg ~
$5 `":: To request a planet, run |ask 'your@email.co'"
== ==
::
2015-05-07 05:31:54 +03:00
++ he-abet :: resolve
[(flop moz) %_(+> hoc (~(put by hoc) ost.hid +<+))]
::
++ he-abut :: discard
=> he-stop
[(flop moz) %_(+> hoc (~(del by hoc) ost.hid))]
2015-05-07 05:31:54 +03:00
::
2015-09-10 03:52:55 +03:00
++ he-beak -:he-beam
++ he-beam :: logical beam
^- beam
2015-12-21 00:16:39 +03:00
?. =(ud+0 r.dir) dir
2015-09-10 03:52:55 +03:00
dir(r [%da now.hid])
2015-05-07 05:31:54 +03:00
::
++ he-card :: emit gift
2015-12-20 23:50:45 +03:00
|= cad/card
2015-05-07 05:31:54 +03:00
^+ +>
%_(+> moz [[ost.hid cad] moz])
2015-05-07 05:31:54 +03:00
::
++ he-send
2015-12-20 23:50:45 +03:00
|= {way/wire him/ship dap/term cop/clap}
2015-05-07 05:31:54 +03:00
^+ +>
(he-card %send way [him dap] cop)
::
++ he-diff :: emit update
2015-12-20 23:50:45 +03:00
|= fec/sole-effect
2015-05-07 05:31:54 +03:00
^+ +>
(he-card %diff %sole-effect fec)
::
++ he-stop :: abort work
^+ .
?~(poy . ~(dy-stop dy u.poy))
::
++ he-peer :: subscribe to
2015-12-20 23:50:45 +03:00
|=(pax/path ?>(=(~ pax) he-prom))
2015-05-07 05:31:54 +03:00
::
++ he-pine :: restore prompt
^+ .
?^ poy .
he-prom:he-pone
::
++ he-pone :: clear prompt
^+ .
2015-09-02 01:20:17 +03:00
=^ cal say (~(transmit sole say) [%set ~])
2015-05-07 05:31:54 +03:00
(he-diff %mor [%det cal] ~)
::
++ he-prow :: where we are
^- tape
?: &(=(our.hid p.dir) =(%home q.dir) =([%ud 0] r.dir) =(~ s.dir)) ~
%+ weld
?: &(=(our.hid p.dir) =([%ud 0] r.dir))
(weld "/" (trip q.dir))
;: weld
"/" ?:(=(our.hid p.dir) "=" (scow %p p.dir))
"/" ?:(=(%home q.dir) "=" (trip q.dir))
"/" ?:(=([%ud 0] r.dir) "=" (scow r.dir))
==
?:(=(~ s.dir) "" (spud s.dir))
::
2015-05-07 05:31:54 +03:00
++ he-prom :: send prompt
%- he-diff
:- %pro
[& %$ (weld he-prow ?~(buf "> " "< "))]
2015-05-07 05:31:54 +03:00
::
++ he-made :: result from ford
2015-12-20 23:50:45 +03:00
|= {way/wire dep/@uvH reg/gage}
2015-05-07 05:31:54 +03:00
^+ +>
?> ?=(^ poy)
=< he-pine
2015-05-08 22:43:11 +03:00
?- -.reg
$& %. p.reg
=+ dye=~(. dy u.poy(pux ~))
?+ way !!
{$hand $~} dy-hand:dye
{$dial $~} dy-made-dial:dye
{$gent $~} dy-made-gent:dye
{$scar $~} dy-made-scar:dye
{$edit $~} dy-made-edit:dye
==
$| (he-diff(poy ~) %tan p.reg)
2015-12-10 12:17:19 +03:00
$tabl !!
2015-05-07 05:31:54 +03:00
==
::
2015-09-11 02:01:43 +03:00
++ he-sigh :: result from eyre
2015-12-20 23:50:45 +03:00
|= {way/wire hit/httr}
2015-09-09 02:58:48 +03:00
^+ +>
?> ?=(^ poy)
2015-09-11 02:01:43 +03:00
=< he-pine
%. [%httr !>(hit)]
=+ dye=~(. dy u.poy(pux ~))
?+ way !!
2015-12-09 10:12:11 +03:00
{$hand $~} dy-hand:dye
{$show $~} dy-show:dye
{$scar $~} dy-sigh-scar:dye
2015-09-11 02:01:43 +03:00
==
2015-09-09 02:58:48 +03:00
::
2015-05-07 05:31:54 +03:00
++ he-unto :: result from behn
2015-12-20 23:50:45 +03:00
|= {way/wire cit/cuft}
2015-05-07 05:31:54 +03:00
^+ +>
2015-12-09 04:54:26 +03:00
?. ?=($coup -.cit)
~& [%strange-unto cit]
+>
2015-05-07 05:31:54 +03:00
?~ p.cit
(he-diff %txt ">=")
(he-diff %tan u.p.cit)
::
++ he-like :: accept line
2015-12-20 23:50:45 +03:00
|= buf/(list @c)
2015-05-07 05:31:54 +03:00
=(%& -:(he-dope (tufa buf)))
::
++ he-stir :: apply change
2015-12-20 23:50:45 +03:00
|= cal/sole-change
2015-05-07 05:31:54 +03:00
^+ +>
:: ~& [%his-clock ler.cal]
:: ~& [%our-clock ven.say]
2015-09-02 01:20:17 +03:00
=^ dat say (~(transceive sole say) cal)
2015-12-09 04:54:26 +03:00
?. ?& ?=($del -.dat)
2015-05-07 05:31:54 +03:00
=(+(p.dat) (lent buf.say))
==
+>.$
=+ foy=(he-dope (tufa buf.say))
2015-12-09 04:54:26 +03:00
?: ?=($& -.foy) +>.$
2015-05-07 05:31:54 +03:00
:: ~& [%bad-change dat ted.cal]
2015-09-02 01:20:17 +03:00
=^ lic say (~(transmit sole say) dat)
2015-05-07 05:31:54 +03:00
:: ~& [%our-leg leg.say]
(he-diff %mor [%det lic] [%err q.p.foy] ~)
::
++ he-plan :: execute command
2015-12-20 23:50:45 +03:00
|= mad/dojo-command
2015-05-07 05:31:54 +03:00
^+ +>
2015-12-09 04:54:26 +03:00
?> ?=($~ poy)
2015-09-04 01:10:18 +03:00
he-pine:(dy-step:~(dy-init dy %*(. *dojo-project mad mad)) 0)
2015-05-07 05:31:54 +03:00
::
++ he-done :: parse command
2015-12-20 23:50:45 +03:00
|= txt/tape
2015-05-07 05:31:54 +03:00
^+ +>
?~ txt
2015-09-10 03:52:55 +03:00
=< he-prom(buf ~)
2015-05-07 05:31:54 +03:00
%- he-diff
:~ %mor
[%txt "> "]
[%nex ~]
==
=+ doy=(he-duke txt)
?- -.doy
$| (he-diff [%err p.doy])
$&
2015-09-04 01:10:18 +03:00
?~ p.doy
(he-diff [%err (lent txt)])
2015-09-04 04:40:30 +03:00
=+ old=(weld ?~(buf "> " " ") (tufa buf.say))
2015-09-02 01:20:17 +03:00
=^ cal say (~(transmit sole say) [%set ~])
2015-12-21 00:16:39 +03:00
=. +>.$ (he-diff %mor txt+old nex+~ det+cal ~)
2015-09-04 01:10:18 +03:00
?- -.u.p.doy
$& (he-plan(buf ~) p.u.p.doy)
$| he-prom(buf p.u.p.doy)
2015-05-07 05:31:54 +03:00
==
==
::
2015-12-26 13:07:50 +03:00
++ he-span :: apply input
2015-12-20 23:50:45 +03:00
|= act/sole-action
2015-05-07 05:31:54 +03:00
^+ +>
?^ poy
2015-12-26 13:07:50 +03:00
he-pine:(~(dy-span dy u.poy) act)
2015-05-07 05:31:54 +03:00
?- -.act
2015-12-09 10:12:11 +03:00
$det (he-stir +.act)
$ret (he-done (tufa buf.say))
$clr he-pine(buf "")
2015-05-07 05:31:54 +03:00
==
::
++ he-lame :: handle error
2015-12-20 23:50:45 +03:00
|= {wut/term why/tang}
^+ +>
%- (slog (flop `tang`[>%dojo-lame wut< why]))
?^ poy
he-pine:~(dy-amok dy u.poy)
he-pine :: XX give mean to original keystroke
2015-05-07 05:31:54 +03:00
--
::
2015-09-04 01:10:18 +03:00
++ prep
2015-12-15 01:21:10 +03:00
=+ session-1==+(*session _-(poy *(unit)))
2015-12-15 01:24:20 +03:00
=+ session-0==+(*session-1 _[_say syd=desk * _|2.-])
2015-09-10 01:57:25 +03:00
:: ,_`..prep
2015-09-29 22:15:33 +03:00
=+ ^= hoze
2015-12-20 23:50:45 +03:00
$% {$0 p/(map bone session-0)}
{$1 p/(map bone session-1)}
{$2 p/(map bone session-1)}
{$3 p/(map bone session)}
2015-09-29 22:15:33 +03:00
==
2015-12-20 23:50:45 +03:00
|= old/(unit ?(house hoze)) ^+ [~ ..prep]
2015-09-04 01:10:18 +03:00
?~ old `..prep
2015-12-10 12:17:19 +03:00
?+ -.u.old !!
2015-12-09 10:12:11 +03:00
$4 `..prep(+<+ u.old)
2015-09-12 00:15:25 +03:00
==
2015-09-04 01:10:18 +03:00
::
2015-09-09 03:10:42 +03:00
:: pattern: ++ foo |=(data he-abet:(~(he-foo he (~(got by hoc) ost)) data))
++ arm (arm-session ~ (~(got by hoc) ost.hid))
2015-09-09 03:10:42 +03:00
++ arm-session
2015-12-20 23:50:45 +03:00
|= {moz/(list move) ses/session}
=> ~(. he moz ses)
2015-09-09 03:10:42 +03:00
=- [wrap=- +]
2015-12-26 13:07:50 +03:00
|* he-arm/_he-span
2015-12-15 01:21:10 +03:00
|= _+<.he-arm
2015-12-10 12:17:19 +03:00
^- (quip move ..he)
2015-09-09 03:10:42 +03:00
he-abet:(he-arm +<)
::
++ peer-sole
2015-09-10 03:52:55 +03:00
~? !=(src.hid our.hid) [%dojo-peer-stranger ost.hid src.hid]
2015-05-28 09:51:32 +03:00
:: ?> =(src.hid our.hid)
=^ moz .
?. (~(has by hoc) ost.hid) [~ .]
~& [%dojo-peer-replaced ost.hid]
~(he-abut he ~ (~(got by hoc) ost.hid))
2015-12-21 00:16:39 +03:00
=+ ses=%*(. *session -.dir [our.hid %home ud+0])
(wrap he-peer):(arm-session moz ses)
2015-05-07 05:31:54 +03:00
::
++ poke-sole-action
2015-12-21 00:16:39 +03:00
|= act/sole-action ~| poke+act %. act
2015-12-26 13:07:50 +03:00
(wrap he-span):arm
2015-09-09 03:10:42 +03:00
++ made (wrap he-made):arm
2015-09-09 23:59:28 +03:00
++ sigh-httr (wrap he-sigh):arm
2015-12-20 23:50:45 +03:00
++ sigh-tang |=({a/wire b/tang} ~|(`term`(cat 3 'sigh-' -.a) (mean b)))
2015-09-09 03:10:42 +03:00
++ lame (wrap he-lame):arm
++ unto (wrap he-unto):arm
2015-05-07 05:31:54 +03:00
++ pull
2015-12-20 23:50:45 +03:00
|= {pax/path}
2015-05-07 05:31:54 +03:00
^- (quip move +>)
=^ moz +> ~(he-abut he ~ (~(got by hoc) ost.hid))
2015-05-28 09:51:32 +03:00
[moz +>.$(hoc (~(del by hoc) ost.hid))]
2015-05-07 05:31:54 +03:00
--