From c14d6b4d0538a5de51d96bab8874e981c31b217f Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Fri, 12 Sep 2014 02:11:03 +0000 Subject: [PATCH] basic terminal and shell apps --- arvo/gall.hoon | 47 +++++++++++--- arvo/hoon.hoon | 1 + main/app/shell/core.hook | 46 ++++++++++++++ main/app/terminal/core.hook | 118 +++++++++++++++++++++++++++++++++++ main/app/test/core.hook | 34 ++++++++-- main/mar/term-line/door.hook | 15 +++++ main/mar/txt/door.hook | 14 +++++ main/sur/term-line/gate.hook | 1 + 8 files changed, 262 insertions(+), 14 deletions(-) create mode 100644 main/app/shell/core.hook create mode 100644 main/app/terminal/core.hook create mode 100644 main/mar/term-line/door.hook create mode 100644 main/mar/txt/door.hook create mode 100644 main/sur/term-line/gate.hook diff --git a/arvo/gall.hoon b/arvo/gall.hoon index 3879f49ae..62cf7c0db 100644 --- a/arvo/gall.hoon +++ b/arvo/gall.hoon @@ -1,4 +1,4 @@ -!: :: %gall, user-level applications +:: :: %gall, user-level applications !? 164 :::: |= pit=vase @@ -33,6 +33,7 @@ == :: ++ knob :: pending action $% [%boot ~] :: begin boot + [%cide p=span] :: subprocessicide [%crud p=@tas q=(list tank)] :: error [%load p=cage] :: continue boot [%mess p=ship q=cage] :: typed message @@ -103,6 +104,7 @@ act=@ud :: action number lat=@da :: last change orm=(unit ,@da) :: build date + cub=(map span term) :: offspring sup=(map bone (pair ship path)) :: subscribers pus=(jug path bone) :: srebircsbus peq=(map bone ,@uvI) :: peekers @@ -184,12 +186,21 @@ :- ?~(p.u.a ~ ?~(p.u.b ~ `(grom u.p.u.b u.p.u.a))) (grom q.u.b q.u.a) :: +++ lamp + |= con=(unit coin) + ^- (unit path) + ?. ?=([~ %many *] con) ~ + %- zl:jo + %+ turn p.u.con + |= tem=coin + ?.(?=([%$ %ta @] tem) ~ (some q.p.tem)) +:: ++ lump :: position |= pax=path ^- [p=hapt q=path] ?> ?=([@ @ *] pax) :- :- (slav %p i.pax) - ((hard path) (cue (slav %uw i.t.pax))) + (need (lamp (slay i.t.pax))) t.t.pax -- . == :: end preface @@ -486,7 +497,8 @@ :: ++ away :: application path |= pax=path ^- path - [%a (scot %p our) (scot %uw (jam imp)) pax] + =+ imc=[%many (turn imp |=(a=span [%$ %ta a]))] + [%a (scot %p our) ~(rent co imc) pax] :: ++ bear :: write backward |= hen=duct @@ -601,7 +613,7 @@ :+ %mute kas :_ ~ :- [%$ 12]~ - (cave !>([[our app.sat imp] sup.sat pus.sat [act.sat eny now]])) + (cave !>([[our app.sat imp] cub.sat sup.sat pus.sat [act.sat eny now]])) ++ core |=(vax=vase (cove %core vax)) :: core as silk ++ cove :: cage as silk |= cay=cage @@ -623,6 +635,13 @@ [%show q.i.pys] == :: + ++ deff + |= [wir=wire hon=duct caq=vase] + ^- toil + ?> ?=([%pass p=* q=%g r=[p=%cide q=span]] q.caq) + :: [[[%g wir] hon] r.q.caq] + [hon r.q.caq] + :: ++ drug :: set dependencies |= pen=(set (pair ship desk)) :: ~& [%drug %pen pen] @@ -909,6 +928,7 @@ [%pass p=* q=@tas r=[p=@tas q=*]] =+ wir=(away %u ((hard path) p.q.caq)) ?: ?=(%sire p.r.q.caq) [%| (birf wir hon caq)] + ?: ?=(%cide p.r.q.caq) [%| (deff wir hon caq)] :+ %& hon :^ %pass wir (need ((sand %tas) ((hard ,@) q.q.caq))) @@ -957,6 +977,15 @@ ?. (warm %park) [%done ~ %$ (slot 13 u.huv.sat)] (harm %park (conf (core u.huv.sat))) + :: + %cide + ?. (~(has by bum.mat) [p.kon imp]) + ~& %cide-missed +>.$(qic.sat ~) + %_ +>.$ + bum.mat (~(del by bum.mat) [p.kon imp]) + cub.sat (~(del by cub.sat) p.kon) + qic.sat ~ + == :: %load =+ [hom=(slot 2 q.p.kon) old=(slot 3 q.p.kon)] @@ -1005,10 +1034,12 @@ (give(qic.sat ~) %dumb ~) :: %sire - =. qic.sat ~ ?: (~(has by bum.mat) [q.kon imp]) - ~& %sire-redundant +>.$ - =. bum.mat + ~& %sire-redundant +>.$(qic.sat ~) + %_ +>.$ + cub.sat (~(put by cub.sat) q.kon p.kon) + qic.sat ~ + bum.mat %+ ~(put by bum.mat) [q.kon imp] %* . *seat app p.kon @@ -1018,7 +1049,7 @@ [[hun.mat 0 ~] ~ ~] [[0 hun.mat] ~ ~] == - +>.$ + == :: %take ?. (warm %pour) diff --git a/arvo/hoon.hoon b/arvo/hoon.hoon index 67ea31479..b5c4820a1 100644 --- a/arvo/hoon.hoon +++ b/arvo/hoon.hoon @@ -9579,6 +9579,7 @@ app=term :: app identity imp=path :: app instance == :: + cub=(map span term) :: offspring sup=(map bone (pair ship path)) :: subscription set pus=(jug path bone) :: noitpircsbus set $: act=@ud :: change number diff --git a/main/app/shell/core.hook b/main/app/shell/core.hook new file mode 100644 index 000000000..259cfc8ca --- /dev/null +++ b/main/app/shell/core.hook @@ -0,0 +1,46 @@ +:: Terminal +:: +:::: /hook/core/terminal/app + :: +/? 314 +/- term-line +:: +:::: structures + :: +|% :: +++ gift :: + $% [%mean p=ares] :: + [%nice ~] :: + == :: +++ hapt ,[p=ship q=path] :: +++ move ,[p=bone q=(mold note gift)] :: +++ note :: + $% $: %g :: + $% [%show p=hapt q=ship r=path] :: + [%mess p=hapt q=ship r=[%term-line vase]] :: + == == == :: +++ sign :: + $% $: %g :: + $% [%nice ~] :: + [%mean p=ares] :: + == == == :: +-- +!: +:::: program + :: +|_ [hid=hide ~] +++ poke-txt + |= [ost=bone you=ship txt=cord] + ^- [(list move) _+>] + :_ +>.$ :_ ~ + :* ost %pass / %g %mess + [our.hid +.imp.hid] you + %term-line !>(`term-line`[(crip ) leaf/(trip txt) ~]) + == +:: +++ pour + |= [ost=bone pax=path sih=sign] + ^- [(list move) _+>] + :_ +>.$ + [ost %give +.sih]~ +-- diff --git a/main/app/terminal/core.hook b/main/app/terminal/core.hook new file mode 100644 index 000000000..f8bea3edc --- /dev/null +++ b/main/app/terminal/core.hook @@ -0,0 +1,118 @@ +:: Terminal +:: +:::: /hook/core/terminal/app + :: +/? 314 :: need urbit 314 +/- term-line +:: +:::: structures + :: +|% :: +++ axle $: %0 :: + hiz=term-line :: + == :: +++ gilt :: + $% [%term-line p=term-line] :: + [%hymn p=manx] :: + [%json p=json] :: + == :: +++ gift :: + $% [%rush gilt] :: + [%rust gilt] :: + [%mean p=ares] :: + [%nice ~] :: + == :: +++ hapt ,[p=ship q=path] :: +++ move ,[p=bone q=(mold note gift)] :: +++ note :: + $% $: %g :: + $% [%show p=hapt q=ship r=path] :: + [%sire p=term q=span] :: + [%mess p=hapt q=ship r=[%txt vase]] :: + == == == :: +++ sign :: + $% $: %g :: + $% [%nice ~] :: + [%mean p=ares] :: + == == == +-- +!: +:::: program + :: +|_ [hid=hide axle] +++ page + ^- manx + =+ jpok=|=([a=term b=cord] "urb.send(\{data: \{{(trip a)}:{(trip b)}}})") + ;html + ;head + ;title: Hi + ;script(src "/gon/main/lib/urb.js"); + ;script: urb.appl = "{(trip app.hid)}" + == + ;body + ;p: Hello + ;button(onclick (jpok %new '"shell"')): Boot + ;input#prom; ;button(onclick (jpok %line 'prom.value')): Set + ;pre#cont; ;script:''' + urb.subscribe({path: '/lines'}, function(e, dat){ + if(dat.data.ok) return; + cont.textContent = JSON.stringify(dat.data) + }) + ''' + == + == +:: +++ peer + |= [ost=bone you=ship pax=path] + ^- [(list move) _+>] + :_ +>.$ :_ ~ + ?~ pax + [ost %give %rust %hymn page] + ?+ -.pax !! + %lines [ost %give %rust %json (tel-to-jon hiz)] + == +:: +++ poke-json + |= [ost=bone you=ship jon=json] + ^- [(list move) _+>] + :_ +>.$ + =+ jof=(need ((of line/so new/so ~):jo jon)) + ?- -.jof + %new + ~& poke-sire/jof + :- [ost %give %nice ~] + [ost %pass /hi %g %sire [+ +]:jof]~ + %line + %+ turn (~(tap by cub.hid)) + |= [p=span q=term] + [ost %pass /txt/[p] %g %mess [our.hid p imp.hid] you %txt !>(+.jof)] + == +:: +++ poke-term-line + |= [ost=bone you=ship tel=term-line] + ^- [(list move) _+>] + =. hiz [p.tel (weld q.tel q.hiz)] + :_ +>.$ + :- [ost %give %nice ~] + %+ turn (~(tap in (~(get ju pus.hid) /lines))) + |= a=bone + [a %give %rush %json (tel-to-jon tel)] +:: +++ pour + |= [ost=bone you=ship sih=sign] + ^- [(list move) _+>] + :_ +>.$ + [ost %give +.sih]~ +:: +++ tel-to-jon + |= tel=term-line + %- jobe + :~ [%prompt %s p.tel] + :+ %lines %a + %- turn :_ jape + ^- wall %- zing + ^- (list wall) + %- flop + (turn q.tel (cury wash 0 80)) + == +-- diff --git a/main/app/test/core.hook b/main/app/test/core.hook index 641f07510..408967fb9 100644 --- a/main/app/test/core.hook +++ b/main/app/test/core.hook @@ -32,6 +32,7 @@ ++ note :: system request $% $: %g :: to %gall $% [%mess p=hapt q=ship r=cage] :: + [%cide p=span] :: [%show p=hapt q=ship r=path] :: [%sire p=term q=span] :: == == == :: @@ -69,6 +70,30 @@ ^- [(list move) _+>] !! -- + ++ cide + ^- test + => |% + ++ sign + $% $: %g + $% [%nice ~] + [%rust %hymn p=manx] + == == == + -- + |% + ++ poke + |+ [ost=bone you=ship] + ^- [(list move) _+>] + ~& [%cide-poke cub.hid sup.hid our.hid] + :_ +>.$ + :~ + [ost %pass /cide/hi %g %cide %baby] + [ost %give %nice ~] + == + ++ pour + |+ [ost=bone pax=path sih=*] + ^- [(list move) _+>] + !! + -- ++ sire ^- test => |% @@ -86,12 +111,6 @@ :~ [ost %pass /sire/hi %g %sire %demo %baby] [ost %pass /sire/ho %g %mess our.hid^baby/imp.hid you %json !>(*json)] - [ost %pass /sire/ho %g %mess our.hid^baby/imp.hid you %json !>(*json)] - [ost %pass /sire/ho %g %mess our.hid^baby/imp.hid you %json !>(*json)] - [ost %pass /sire/ho %g %mess our.hid^baby/imp.hid you %json !>(*json)] - [ost %pass /sire/ho %g %mess our.hid^baby/imp.hid you %json !>(*json)] - [ost %pass /sire/ho %g %mess our.hid^baby/imp.hid you %json !>(*json)] - [ost %pass /sire/ho %g %mess our.hid^baby/imp.hid you %json !>(*json)] [ost %pass /sire/ho %g %show our.hid^baby/imp.hid you /] == ++ pour @@ -230,6 +249,7 @@ => et :~ [%succeed succeed] [%sire sire] + [%cide cide] [%ze ze] [%poke-local poke-local] == @@ -238,6 +258,7 @@ ++ peer :: accept subscriber |= [ost=bone you=ship pax=path] ^- [(list move) _+>] + ~& [%test-peer hid] ?~ pax [[ost %give %rust %hymn front]~ +>.$] ?: ?=(%tests -.pax) [[ost %give %rust %json tests-json:et]~ +>.$] @@ -249,6 +270,7 @@ ++ poke-json :: browser message |= [ost=bone you=ship jon=json] ^- [(list move) _+>] + ~& [%test-poke hid] =+ tes=((of [%test so] ~):jo jon) ?~ tes [[ost %give %mean ~ %strange-json ~]~ +>.$] =+ tst=(~(get by tests) +.u.tes) diff --git a/main/mar/term-line/door.hook b/main/mar/term-line/door.hook new file mode 100644 index 000000000..626fb74ae --- /dev/null +++ b/main/mar/term-line/door.hook @@ -0,0 +1,15 @@ +:: +:::: /hook/door/term-line/mar + :: +/? 314 +/- term-line +|_ tel=term-line +:: +++ grab :: convert from + |% + ++ noun :: convert from %noun + |= src=* + ^+ +>+ + +>+(tel (term-line src)) + -- +-- diff --git a/main/mar/txt/door.hook b/main/mar/txt/door.hook new file mode 100644 index 000000000..f08332586 --- /dev/null +++ b/main/mar/txt/door.hook @@ -0,0 +1,14 @@ +:: +:::: /hook/door/term-line/mar + :: +/? 314 +|_ txt=cord +:: +++ grab :: convert from + |% + ++ noun :: convert from %noun + |= src=* + ^+ +>+ + +>+(txt (cord src)) + -- +-- diff --git a/main/sur/term-line/gate.hook b/main/sur/term-line/gate.hook new file mode 100644 index 000000000..87799ba44 --- /dev/null +++ b/main/sur/term-line/gate.hook @@ -0,0 +1 @@ +,[p=cord q=(list tank)]