Merge nextbreach into soqdoqblok

This commit is contained in:
Anton Dyudin 2014-06-18 20:56:17 -07:00 committed by Anton Dyudin
commit 766afec656
13 changed files with 680 additions and 207 deletions

View File

@ -1,4 +1,4 @@
!: ::
:: dill (4d), terminal handling :: dill (4d), terminal handling
:: ::
|= pit=vase |= pit=vase

View File

@ -4,6 +4,7 @@
|= pit=vase |= pit=vase
=> =~ => =~
|% :: interfaces |% :: interfaces
++ bead ,[p=(set beam) q=cage] :: computed result
++ chop ,[p=@ud q=@da] :: see ++ chop ,[p=@ud q=@da] :: see
++ gift :: out result <-$ ++ gift :: out result <-$
$% [%thou p=httr] :: raw http response $% [%thou p=httr] :: raw http response
@ -41,9 +42,10 @@
++ riff ,[p=desk q=(unit rave)] :: see %clay ++ riff ,[p=desk q=(unit rave)] :: see %clay
++ sign :: in result $-< ++ sign :: in result $-<
$% [%crud p=@tas q=(list tank)] :: by any $% [%crud p=@tas q=(list tank)] :: by any
[%dumb p=chop] :: by %gall
[%helo p=path q=prod] :: by %batz [%helo p=path q=prod] :: by %batz
[%made p=(each bead (list tank))] :: by %ford [%made p=(each bead (list tank))] :: by %ford
[%rasp p=cage] :: by %gall [%rasp p=chop q=(unit cage)] :: by %gall
[%rush p=chop q=cage] :: by %gall [%rush p=chop q=cage] :: by %gall
[%rust p=chop q=cage] :: by %gall [%rust p=chop q=cage] :: by %gall
[%talk p=tank] :: by %batz [%talk p=tank] :: by %batz
@ -141,7 +143,7 @@
$: cnt=@ud :: updates produced $: cnt=@ud :: updates produced
toy=@ud :: updates sent toy=@ud :: updates sent
wan=(map ,@ud ,@ud) :: upno to reqno wan=(map ,@ud ,@ud) :: upno to reqno
red=(map ,@ud (each cage cage)) :: ready for pickup red=(map ,@ud (unit (each cage cage))) :: ready for pickup
== :: == ::
-- :: -- ::
|% |%
@ -209,8 +211,8 @@
?+ -.luv luv ?+ -.luv luv
%mid %mid
=+ str=(trip q.q.luv) =+ str=(trip q.q.luv)
=+ scr=|-(^-(tape ?~(mog "<head>" (xmlt & i.mog $(mog t.mog))))) =+ scr=|-(^-(tape ?~(mog ~ (xmlt & i.mog $(mog t.mog)))))
=+ rep=(need (repg "<head>" str scr)) =+ rep=(need (repg "<head>" str (weld "<head>" scr)))
[%mid p.luv (tact rep)] [%mid p.luv (tact rep)]
== ==
++ lofe :: variables in head ++ lofe :: variables in head
@ -279,6 +281,15 @@
?- -.sin ?- -.sin
%crud %crud
+>.$(mow [[hen %slip %d %flog sin] mow]) +>.$(mow [[hen %slip %d %flog sin] mow])
::
%dumb
?> ?=([%hoop @ @ @ @ ~] tea)
=+ ^= ouy
%- yolk:(gale (need (slaw %p i.t.tea)) i.t.t.tea)
(need (slaw %ud i.t.t.t.tea))
?~ ouy
+>.$
abet:work:abet:dumb:(yule:u.ouy i.t.t.t.t.tea)
:: ::
%made %made
?. ?=([%honk @ @ @ ~] tea) ?. ?=([%honk @ @ @ ~] tea)
@ -293,7 +304,11 @@
(need (slaw %ud i.t.t.t.tea)) (need (slaw %ud i.t.t.t.tea))
?~ ouy ?~ ouy
+>.$ +>.$
abet:work:abet:abet:(hear:(yule:u.ouy i.t.t.t.t.tea) %& p.sin) =+ woy=(yule:u.ouy i.t.t.t.t.tea)
=< abet =< work =< abet
?~ q.sin
dumb:woy
(hear:woy `[%& u.q.sin])
:: ::
?(%rush %rust) ?(%rush %rust)
=+ heq=?:(?=(%rust -.sin) [%& q.sin] [%| q.sin]) =+ heq=?:(?=(%rust -.sin) [%& q.sin] [%| q.sin])
@ -303,7 +318,7 @@
(need (slaw %ud i.t.t.t.tea)) (need (slaw %ud i.t.t.t.tea))
?~ ouy ?~ ouy
+>.$ +>.$
abet:work:abet:abet:(hear:(yule:u.ouy i.t.t.t.t.tea) heq) abet:work:abet:(hear:(yule:u.ouy i.t.t.t.t.tea) `heq)
:: ::
%thou :: remote return %thou :: remote return
?> ?=([@ @ *] tea) ?> ?=([@ @ *] tea)
@ -1013,13 +1028,13 @@
++ fapg :: dispatch %apg ++ fapg :: dispatch %apg
|= [fur=(unit term) you=@p paw=path] |= [fur=(unit term) you=@p paw=path]
^- (unit seam) ^- (unit seam)
?> ?=(^ fur) =+ for=?^(fur u.fur %html)
?> ?=(^ paw) ?> ?=(^ paw)
:- ~ :- ~
:* %apg :* %apg
(need ((sand %tas) i.paw)) (need ((sand %tas) i.paw))
you you
u.fur for
(turn t.paw |=(a=@ `@ta`(need ((sand %ta) a)))) (turn t.paw |=(a=@ `@ta`(need ((sand %ta) a))))
== ==
:: ::
@ -1337,13 +1352,22 @@
+>.$(..ya (hone our num ses)) +>.$(..ya (hone our num ses))
+>.$ +>.$
:: ::
++ busc :: seam result code ++ bush :: error response
|= som=seam |= [cod=@ud msg=@t num=@ud]
^- @ud ^+ +>
?.(?=(%sil -.som) 200 p.som) :: 203 means a diff =+ pup=(~(get by q.rey) num)
?~ pup +>.$
%= +>.$
q.rey
%+ ~(put by q.rey) num
%= u.pup
pez
`pest`[%fin %raw cod ~[content-type/'text/plain'] `(taco msg)]
==
==
:: ::
++ bust ++ bust :: no-content response
|= num=@ud |= [cod=@ud num=@ud]
^+ +> ^+ +>
=+ pup=(~(get by q.rey) num) =+ pup=(~(get by q.rey) num)
?~ pup +>.$ ?~ pup +>.$
@ -1351,7 +1375,7 @@
%= +>.$ %= +>.$
q.rey q.rey
%+ ~(put by q.rey) num %+ ~(put by q.rey) num
u.pup(pez [%fin %raw 204 *mess `*octs]) u.pup(pez [%fin %raw cod *mess `*octs])
== ==
:: ::
++ inch :: function built ++ inch :: function built
@ -1846,8 +1870,8 @@
|= [num=@ud app=term you=ship nap=@ud suc=term cnt=@ud] |= [num=@ud app=term you=ship nap=@ud suc=term cnt=@ud]
^+ +> ^+ +>
=+ yon=(yolk nap) =+ yon=(yolk nap)
?~ yon (bust num) ?~ yon (bust 204 num)
abet:abet:(hire:(yule:u.yon suc) cnt num) abet:(hire:(yule:u.yon suc) cnt num)
:: ::
++ yokg :: main call ++ yokg :: main call
|= [num=@ud app=term you=ship pax=path] |= [num=@ud app=term you=ship pax=path]
@ -1859,13 +1883,13 @@
|= [num=@ud app=term you=ship nap=@ud cnt=@ud jon=json] |= [num=@ud app=term you=ship nap=@ud cnt=@ud jon=json]
^+ +> ^+ +>
=+ yon=(yolk nap) =+ yon=(yolk nap)
?~ yon (bust num) ?~ yon (bust 204 num)
abet:(post:u.yon cnt num jon) abet:(post:u.yon cnt num jon)
:: ::
++ yoks :: subscribe ++ yoks :: subscribe
|= [num=@ud app=term you=ship nap=@ud suc=term pax=path] |= [num=@ud app=term you=ship nap=@ud suc=term pax=path]
=+ yon=(yolk nap) =+ yon=(yolk nap)
?~ yon (bust num) ?~ yon (bust 204 num)
abet:(scud:u.yon suc num pax) abet:(scud:u.yon suc num pax)
:: ::
++ yoku :: unsubscribe ++ yoku :: unsubscribe
@ -1918,18 +1942,18 @@
%post %post
`note`[%mess [our app] you [%json !>(jon)]] `note`[%mess [our app] you [%json !>(jon)]]
?. =(+(cnt) meg.siq) ?. =(+(cnt) meg.siq)
+>.$(..yo (bust num)) +>.$(..yo (bust 204 num))
abet:(hire:(yule %post) cnt num) (hire:(yule %post) cnt num)
:: ::
++ scud :: subscribe ++ scud :: subscribe
|= [suc=term num=@ud pax=path] |= [suc=term num=@ud pax=path]
=. +>.$ (toss suc `note`[%show [our app] you pax]) =. +>.$ (toss suc `note`[%show [our app] you pax])
abet:(hire:(yule suc) 0 num) (hire:(yule suc) 0 num)
:: ::
++ self :: request main ++ self :: request main
|= pax=path |= pax=path
^+ +> ^+ +>
abet:(hire:(yule:(toss %self [%show [our app] you pax]) %self) 0 nap) (hire:(yule:(toss %self [%show [our app] you pax]) %self) 0 nap)
:: ::
++ toss :: toss to gall ++ toss :: toss to gall
|= [suc=term noh=note] |= [suc=term noh=note]
@ -1951,7 +1975,7 @@
++ busk :: seam result ++ busk :: seam result
|= $: num=@ud |= $: num=@ud
cnt=@ud cnt=@ud
heq=(each cage cage) huq=(unit (each cage cage))
== ==
^+ +> ^+ +>
=+ pup=(~(get by q.rey) num) =+ pup=(~(get by q.rey) num)
@ -1980,19 +2004,28 @@
suc suc
(rsh 3 2 (scot %ui +(cnt))) (rsh 3 2 (scot %ui +(cnt)))
== ==
?~ huq +>.$(..yo (bust 404 num))
%= +>.$ %= +>.$
q.rey q.rey
%+ ~(put by q.rey) num %+ ~(put by q.rey) num
^- pimp ^- pimp
%= pip %= pip
pez %new pez %new
vaz [%instance (trip (rsh 3 2 (scot %ui nap)))]~ vaz :~ [%ship :(weld "\"" (trip (rsh 3 1 (scot %p our))) "\"")]
[%port (trip (rsh 3 2 (scot %ui nap)))]
[%auto "true"]
[%oryx "oryx"]
:- %user
:: ?: =(our you)
:: "null"
:(weld "\"" (trip (rsh 3 1 (scot %p you))) "\"")
==
sip sip sip sip
som ^- seam som ^- seam
:+ %sil :+ %sil
?:(-.heq 200 203) ?:(-.u.huq 200 203)
=+ bek=`beak`[our %main [%da now]] =+ bek=`beak`[our %main [%da now]]
=+ don=`silk`[%done ~ `cage`p.heq] =+ don=`silk`[%done ~ `cage`p.u.huq]
^- silk ^- silk
:^ %cast %mime bek :^ %cast %mime bek
?~ fur.pip don ?~ fur.pip don
@ -2000,9 +2033,17 @@
== ==
== ==
:: ::
++ dumb :: reset
^+ ..yu
=+ dum=(~(tap by wan.wig) ~)
|- ^+ ..yu
?~ dum amok
$(dum t.dum, ..yo (bust 404 q.i.dum))
::
++ hear :: produce ++ hear :: produce
|= heq=(each cage cage) |= huq=(unit (each cage cage))
^+ +> ^+ ..yu
=< abet
=+ cnt=cnt.wig =+ cnt=cnt.wig
=+ dul=(~(get by wan.wig) cnt) =+ dul=(~(get by wan.wig) cnt)
:: ~& :~ %yu-hear :: ~& :~ %yu-hear
@ -2012,13 +2053,14 @@
:: == :: ==
=: cnt.wig +(cnt.wig) =: cnt.wig +(cnt.wig)
wan.wig ?~(dul wan.wig (~(del by wan.wig) cnt.wig)) wan.wig ?~(dul wan.wig (~(del by wan.wig) cnt.wig))
red.wig (~(put by red.wig) cnt.wig heq) red.wig (~(put by red.wig) cnt.wig huq)
== ==
?~(dul +>.$ (busk u.dul cnt heq)) ?~(dul +>.$ (busk u.dul cnt huq))
:: ::
++ hire :: consume ++ hire :: consume
|= [cnt=@ud num=@ud] |= [cnt=@ud num=@ud]
^+ +> ^+ ..yu
=< abet
:: ~& :~ %yu-hire :: ~& :~ %yu-hire
:: [%instance nap] :: [%instance nap]
:: [%produced cnt.wig] :: [%produced cnt.wig]
@ -2028,16 +2070,16 @@
:: == :: ==
?: |((lth +(cnt) toy.wig) (gth cnt toy.wig)) ?: |((lth +(cnt) toy.wig) (gth cnt toy.wig))
~& [%hire-improper [%request cnt] [%dispatched toy.wig]] ~& [%hire-improper [%request cnt] [%dispatched toy.wig]]
+>.$(..yo (bust num)) +>.$(..yo (bust 204 num))
?: (gte cnt cnt.wig) ?: (gte cnt cnt.wig)
:: ~& %hire-wait :: ~& %hire-wait
=+ old=(~(get by wan.wig) cnt) =+ old=(~(get by wan.wig) cnt)
=. wan.wig (~(put by wan.wig) cnt num) =. wan.wig (~(put by wan.wig) cnt num)
+>.$(..yo ?~(old ..yo (bust u.old))) +>.$(..yo ?~(old ..yo (bust 204 u.old)))
=+ rud=(~(get by red.wig) cnt) =+ rud=(~(get by red.wig) cnt)
?~ rud ?~ rud
:: ~& %hire-bust :: ~& %hire-bust
+>.$(..yo (bust num)) +>.$(..yo (bust 204 num))
:: ~& %hire-send :: ~& %hire-send
(busk num cnt u.rud) (busk num cnt u.rud)
-- --

View File

@ -5,6 +5,7 @@
=> =~ => =~
:: structures :: structures
|% |%
++ bead ,[p=(set beam) q=cage] :: computed result
++ gift :: out result <-$ ++ gift :: out result <-$
$% [%made p=(each bead (list tank))] :: computed result $% [%made p=(each bead (list tank))] :: computed result
== :: == ::
@ -591,9 +592,14 @@
(fine cof [p.kas vax]) (fine cof [p.kas vax])
:: ::
%done [cof %0 p.kas q.kas] %done [cof %0 p.kas q.kas]
%dune %dude
?~ q.kas (flaw cof [%leaf "not ready"]~) =+ dog=$(kas q.kas)
[cof %0 p.kas u.q.kas] ?. ?=(%2 -.q.dog) dog
dog(p.q [p.kas p.q.dog])
::
%dune
?~ q.kas [cof [%2 [%leaf "no data"]~]]
$(kas [%done p.kas u.q.kas])
:: ::
%mute (kale cof p.kas q.kas) %mute (kale cof p.kas q.kas)
%pass %pass

View File

@ -8,17 +8,17 @@
$: %0 :: state version $: %0 :: state version
pol=(map ship mast) :: apps by ship pol=(map ship mast) :: apps by ship
== :: == ::
++ bead ,[p=(set beam) q=cage] :: computed result
++ bone ,@ud :: opaque duct ++ bone ,@ud :: opaque duct
++ chop ,[p=@ud q=@da] :: revision/date ++ chop ,[p=@ud q=@da] :: revision/date
++ gift :: out result <-$ ++ gift :: out result <-$
$% [%back p=?] :: %mess ack good/bad $% [%back p=?] :: %mess ack good/bad
[%crud p=@tas q=(list tank)] :: error [%crud p=@tas q=(list tank)] :: physical error
[%rasp p=cage] :: reaction message [%dumb p=chop] :: close duct
[%rump p=chop] :: updates stop [%rasp p=chop q=(unit cage)] :: reaction message
[%rush p=chop q=cage] :: difference [%rush p=chop q=cage] :: difference
[%rust p=chop q=cage] :: full update [%rust p=chop q=cage] :: full update
[%meta p=vase] :: meta-gift [%meta p=vase] :: meta-gift
== :: == ::
++ hasp ,[p=ship q=term] :: app identity ++ hasp ,[p=ship q=term] :: app identity
++ kiss :: in request ->$ ++ kiss :: in request ->$
@ -29,8 +29,9 @@
[%nuke p=hasp] :: clear duct [%nuke p=hasp] :: clear duct
== :: == ::
++ knob :: pending action ++ knob :: pending action
$% [%boot ~] :: boot/reboot $% [%boot ~] :: begin boot
[%crud p=@tas q=(list tank)] :: error [%crud p=@tas q=(list tank)] :: error
[%load p=cage] :: continue boot
[%mess p=ship q=cage] :: message [%mess p=ship q=cage] :: message
[%show p=ship q=path] :: subscribe [%show p=ship q=path] :: subscribe
[%nuke ~] :: clear duct [%nuke ~] :: clear duct
@ -60,12 +61,15 @@
++ seat :: the living app ++ seat :: the living app
$: huv=(unit vase) :: application vase $: huv=(unit vase) :: application vase
qic=(unit toil) :: current project qic=(unit toil) :: current project
oot=(map duct (set path)) :: live fords onz=(unit (pair duct path)) :: live fords
vey=(qeu toil) :: pending projects vey=(qeu toil) :: pending projects
nuc=(set duct) :: nuked ducts nuc=(set duct) :: nuked ducts
tik=@ud :: build number tik=@ud :: build number
act=@ud :: action number
lat=@da :: last change
orm=(unit ,@da) :: build date orm=(unit ,@da) :: build date
sup=(map bone (pair ship path)) :: subscribers sup=(map bone (pair ship path)) :: subscribers
peq=(map bone ,@uvI) :: peekers
ped=(set (pair ship desk)) :: active depends ped=(set (pair ship desk)) :: active depends
zam=scar :: opaque ducts zam=scar :: opaque ducts
== :: == ::
@ -345,7 +349,7 @@
^- silk ^- silk
[%done ~ cay] [%done ~ cay]
:: ::
++ deal :: advance tick ++ deal :: reboot
^+ . ^+ .
=. tik.sat +(tik.sat) =. tik.sat +(tik.sat)
=+ pys=(~(tap by sup.sat) ~) =+ pys=(~(tap by sup.sat) ~)
@ -371,7 +375,7 @@
|=(a=(pair ship desk) (~(has in ped.sat) a)) |=(a=(pair ship desk) (~(has in ped.sat) a))
|= a=(pair ship desk) |= a=(pair ship desk)
:- hun.mat :- hun.mat
:^ %toss %c (away %s %drug (scot %p p.a) q.a ~) :^ %toss %c (away %w %drug (scot %p p.a) q.a ~)
[%warp [our p.a] q.a ~ %| [%da now] [%da (add now ~d1000)]] [%warp [our p.a] q.a ~ %| [%da now] [%da (add now ~d1000)]]
=+ ^= old ^- (list move) =+ ^= old ^- (list move)
%+ turn %+ turn
@ -379,7 +383,7 @@
|=(a=(pair ship desk) (~(has in pen) a)) |=(a=(pair ship desk) (~(has in pen) a))
|= a=(pair ship desk) |= a=(pair ship desk)
:- hun.mat :- hun.mat
:^ %toss %c (away %s %drug (scot %p p.a) q.a ~) :^ %toss %c (away %w %drug (scot %p p.a) q.a ~)
[%warp [our p.a] q.a ~] [%warp [our p.a] q.a ~]
%_(+>.$ ped.sat pen, mow :(weld new old mow)) %_(+>.$ ped.sat pen, mow :(weld new old mow))
:: ::
@ -398,29 +402,16 @@
:: ::
++ ford :: exec to ford ++ ford :: exec to ford
|= [pax=path kas=silk] |= [pax=path kas=silk]
(gawk %f [%s pax] [%exec our `kas])
::
++ gawk :: toss a note
|= [lal=term pax=path noy=note]
^+ +> ^+ +>
%_ +> %_ +>
mow [[hen %toss lal (away pax) noy] mow] mow :_(mow [hen %toss %f (away pax) [%exec our `kas]])
oot.sat =+ vut=(~(get by oot.sat) hen) onz.sat `[hen pax]
=+ vit=?^(vut u.vut *(set path))
?< (~(has in vit) pax)
(~(put by oot.sat) hen (~(put in vit) pax))
== ==
:: ::
++ give :: give a gift ++ give :: give a gift
|= gip=gift |= gip=gift
%_(+> mow [[hen %give gip] mow]) %_(+> mow [[hen %give gip] mow])
:: ::
++ gone %_(. qic.sat ~) :: done work
++ game :: invoke core
|= [[arm=term pax=path] vax=vase sam=vase]
%+ ford pax
[%call (harm arm (conf (core vax))) (cove %$ sam)]
::
++ harm :: arm as silk ++ harm :: arm as silk
|= [arm=term kas=silk] |= [arm=term kas=silk]
^- silk ^- silk
@ -431,23 +422,112 @@
:+ %boil %core :+ %boil %core
[[our %main [%da now]] app %app ~] [[our %main [%da now]] app %app ~]
:: ::
++ mack :: apply standard
|= qin=sign
?> ?=(%made -.qin)
^- [(unit (list tank)) _+>]
?- -.p.qin
& :- ~
%- obey:(morn (slot 3 q.q.p.p.qin))
(slot 2 q.q.p.p.qin)
| [`p.p.qin (give %crud %made p.p.qin)]
==
::
++ meek :: apply peek
|= qin=sign
^- [(unit cage) _+>]
?> ?=(%made -.qin)
?- -.p.qin
& =+ vax=`vase`q.q.p.p.qin
?. &(?=(^ q.vax) ?=(@ -.q.vax))
[~ (give %crud %peek-lame *(list tank))]
:- `[((hard logo) -.q.vax) (slot 3 vax)]
+>.$
| [~ (give %crud %made p.p.qin)]
==
::
++ mick :: apply w/depends
|= qin=sign
?> ?=(%made -.qin)
^- [(unit (set beam)) _+>]
?- -.p.qin
& :- `p.p.p.qin
%- obey:(morn (slot 3 q.q.p.p.qin))
(slot 2 q.q.p.p.qin)
| [~ (give %crud %made p.p.qin)]
==
::
++ murk :: apply park
|= qin=sign
^- [(unit cage) _+>]
?> ?=(%made -.qin)
?- -.p.qin
& [`q.p.p.qin +>.$]
| [~ (give %crud %made p.p.qin)]
==
::
++ more :: accept result ++ more :: accept result
|= $: pax=path :: internal position |= $: pax=path :: internal position
hin=(hypo sign) :: typed event hin=(hypo sign) :: typed event
== ==
^+ +> ^+ +>
:: ~& [%more pax -.q.hin] ?+ -.pax !!
=. oot.sat %s :: core operation
?: ?=([%s %drug *] pax) oot.sat ?> ?& ?=([@ *] t.pax)
=+ vut=(~(get by oot.sat) hen) !=(~ qic.sat)
?~ vut =(`[hen pax] onz.sat)
~& [%more-lost-a our app hen] !! ==
?. (~(has in u.vut) pax) =: onz.sat ~
~& [%more-lost our app hen pax] !! qic.sat ~
?: =(~ u.vut) ==
(~(del by oot.sat) hen) ?+ i.t.pax !!
(~(put by oot.sat) hen (~(del in u.vut) pax)) %park
?: ?=([%u *] pax) =^ gyd +>.$ (murk q.hin)
?~ gyd
+>.$
(quen %load u.gyd)
::
%peek
?> ?=([@ *] t.t.pax)
=+ you=(need (slaw %p i.t.t.pax))
=^ gyd +>.$ (meek q.hin)
?~ gyd
(give [%dumb [tik.sat lat.sat]])
=+ kee=[you t.t.t.pax]
=+ ash=(sham q.q.u.gyd)
?: =(`ash (~(get by peq.sat) ost))
+>.$
%- %= give
peq.sat (~(put by peq.sat) ost ash)
sup.sat (~(put by sup.sat) ost kee)
==
[%rust [tik.sat lat.sat] u.gyd]
::
%peer
?> ?=([@ *] t.t.pax)
=+ you=(need (slaw %p i.t.t.pax))
=^ gud +>.$ (mack q.hin)
?^ gud
(give [%dumb [tik.sat lat.sat]])
+>.$(sup.sat (~(put by sup.sat) ost [you t.t.t.pax]))
::
%poke
=^ gud +>.$ (mack q.hin)
?^ gud (give %rasp [tik.sat lat.sat] ~)
+>.$
::
%prep
=^ gad +>.$ (mick q.hin)
?~ gad (drum ~)
deal:(drum u.gad)
::
%pull
=^ gud +>.$ (mack q.hin)
?^ gud +>.$
+>.$(sup.sat (~(del by sup.sat) ost))
==
::
%u :: user request
?. ?=(%ruse -.q.hin) ?. ?=(%ruse -.q.hin)
~& [%more-card -.q.hin pax] !! ~& [%more-card -.q.hin pax] !!
%_ +>.$ %_ +>.$
@ -455,21 +535,11 @@
%- ~(put to vey.sat) %- ~(put to vey.sat)
[hen [%take t.pax (spec (slot 3 hin))]] [hen [%take t.pax (spec (slot 3 hin))]]
== ==
?> ?=([%s @ *] pax)
?+ i.t.pax !!
%boot
?> ?=([~ * %boot ~] qic.sat)
?> ?=(%made -.q.hin)
?- -.p.q.hin
& ~& [%boot-good our app tik.sat]
deal:(drum:(morn:gone q.q.p.p.q.hin) p.p.p.q.hin)
| ~& [%boot-lost our app tik.sat]
(drum:(mort:gone p.p.q.hin) ~)
==
:: ::
%drug %w :: autoboot
?> ?=(%writ -.q.hin) ?> ?& ?=([%drug @ @ ~] t.pax)
?> ?=([@ @ ~] t.t.pax) ?=(%writ -.q.hin)
==
=+ :* our=(need (slaw %p i.t.t.pax)) =+ :* our=(need (slaw %p i.t.t.pax))
syd=(need ((sand %tas) i.t.t.t.pax)) syd=(need ((sand %tas) i.t.t.t.pax))
== ==
@ -477,66 +547,53 @@
?~ p.q.hin ?~ p.q.hin
+>.$ +>.$
+>.$(vey.sat (~(put to vey.sat) hen %boot ~)) +>.$(vey.sat (~(put to vey.sat) hen %boot ~))
::
%step
?> ?=(%made -.q.hin)
?- -.p.q.hin
& :: ~& %step-good
%- obey:(morn:gone (slot 3 q.q.p.p.q.hin))
(slot 2 q.q.p.p.q.hin)
| :: ~& %step-fail
(give %crud %made p.p.q.hin)
==
::
%show
?> ?=(%made -.q.hin)
?> ?=([@ *] t.t.pax)
=+ you=(need (slaw %p i.t.t.pax))
?- -.p.q.hin
& =. sup.sat (~(put by sup.sat) ost you t.t.t.pax)
%- obey:(morn:gone (slot 3 q.q.p.p.q.hin))
(slot 2 q.q.p.p.q.hin)
| :: ~& %step-fail
(give %crud %made p.p.q.hin)
==
== ==
:: ::
++ morn :: successful boot ++ morn :: install core
|= vax=vase |= vax=vase
^+ +> ^+ +>
%_(+> huv.sat `vax) =+ new=?~(huv.sat & !=(+>+.q.vax +>+.q.u.huv.sat))
=. huv.sat `vax
?. new +>.$
=: act.sat +(act.sat)
lat.sat now
==
=+ pex=(~(tap by peq.sat) ~)
|- ^+ +>.^$
?~ pex +>.^$
~& [%morn-peek p.i.pex (need (~(get by sup.sat) p.i.pex))]
%= $
pex t.pex
+>.^$ %- quem(hen (need (~(get by r.zam.sat) p.i.pex)))
[%show (need (~(get by sup.sat) p.i.pex))]
==
:: ::
++ mort :: failed boot ++ mort :: failed boot
|= tan=(list tank) |= tan=(list tank)
(give %crud %boot-lost tan) (give %crud %boot-lost tan)
:: ::
++ nile [%done ~ [%$ [%cube 0 [%atom %n]] ~]] :: null silk ++ nile [%done ~ [%$ [%cube 0 [%atom %n]] ~]] :: null silk
++ obey :: process result ++ obey :: process app moves
|= vax=vase |= vax=vase
%_(+> mow (weld (flop (said vax)) mow)) %_(+> mow (weld (flop (said vax)) mow))
:: ::
++ quem :: queue action ++ quem :: queue action
|= kon=knob :: content |= kon=knob :: content
^+ +> ^+ +>
?. ?=(%nuke -.kon) =. +> ?. ?=(%nuke -.kon) +>
+>.$(vey.sat (~(put to vey.sat) hen kon)) ?. &(?=(^ onz.sat) =(hen p.u.onz.sat)) +>
?: (~(has in nuc.sat) hen) %= +>
~& [%quem-renuke hen] onz.sat ~
+>.$ mow
=+ vut=(~(get by oot.sat) hen) :_(mow [hen %toss %f (away q.u.onz.sat) [%exec our ~]])
=+ ^= ded ^- (list path) ==
?~(vut ~ (~(tap by u.vut) ~)) +>.$(vey.sat (~(put to vey.sat) hen kon))
|- ^+ +>.^$ ::
?~ ded ++ quen :: push on front
%= +>.^$ |= kon=knob
qic.sat ?.(&(?=(^ qic.sat) =(hen p.u.qic.sat)) qic.sat ~) ^+ +>
nuc.sat (~(put in nuc.sat) hen) =+ yov=(~(tap by vey.sat) ~) :: XX ++pun
vey.sat (~(put to vey.sat) hen kon) +>.$(vey.sat (~(gas to *(qeu toil)) `_yov`[[hen kon] yov]))
==
%= $
ded t.ded
mow [[hen [%toss %f (away i.ded) [%exec our ~]]] mow]
==
:: ::
++ said ++ said
|= vud=vase |= vud=vase
@ -555,22 +612,25 @@
|= vig=vase |= vig=vase
^- gift ^- gift
?+ q.vig [%meta vig] ?+ q.vig [%meta vig]
[%dumb *] [%dumb [tik.sat lat.sat]]
[%rasp *] [%rasp *]
:+ %rasp =+ sec=(spec (slot 3 vig))
((hard lode) +<.q.vig) :+ %rasp [tik.sat lat.sat]
(slot 7 vig) :+ ~
((hard logo) -.q.sec)
(slot 3 sec)
:: ::
[%rush *] [%rush *]
:^ %rush =+ sec=(spec (slot 3 vig))
[tik.sat now] :+ %rush [tik.sat lat.sat]
((hard lode) +<.q.vig) :- ((hard logo) -.q.sec)
(slot 7 vig) (slot 3 sec)
:: ::
[%rust *] [%rust *]
:^ %rust =+ sec=(spec (slot 3 vig))
[tik.sat now] :+ %rust [tik.sat lat.sat]
((hard lode) +<.q.vig) :- ((hard logo) -.q.sec)
(slot 7 vig) (slot 3 sec)
== ==
:: ::
++ sump ++ sump
@ -587,13 +647,14 @@
:: ::
[%give p=[p=@tas q=*]] [%give p=[p=@tas q=*]]
[%give (sumo (spec (slot 3 caq)))] [%give (sumo (spec (slot 3 caq)))]
::
[%slip p=@tas q=[p=@tas q=*]]
:+ %slip
(need ((sand %tas) ((hard ,@) p.q.caq)))
[%meta (spec (slot 7 caq))]
== ==
:: ::
++ warm :: vase has arm
|= cog=@tas
^- ?
?~ huv.sat |
!=(~ q:(~(fino ut p.u.huv.sat) 0 %free cog))
::
++ work :: eat queue ++ work :: eat queue
|- ^+ + |- ^+ +
?: |(?=(^ qic.sat) =(~ vey.sat)) +.$ :: nothing to do ?: |(?=(^ qic.sat) =(~ vey.sat)) +.$ :: nothing to do
@ -601,6 +662,12 @@
?: (~(has in nuc.sat) p.yev) $ ?: (~(has in nuc.sat) p.yev) $
work:(yawn:(bing p.yev) q.yev) work:(yawn:(bing p.yev) q.yev)
:: ::
++ yawl :: invoke core
|= [[arm=term pax=path] vax=vase sam=vase]
^+ +>
%+ ford [%s arm pax]
[%call (harm arm (conf (core vax))) (cove %$ sam)]
::
++ yawn :: start event ++ yawn :: start event
|= kon=knob |= kon=knob
^+ +> ^+ +>
@ -609,43 +676,64 @@
?- -.kon ?- -.kon
%boot %boot
=. orm.sat `now =. orm.sat `now
%+ ford /boot %+ ford /s/park
^- silk ^- silk
:+ %call :- home
(harm %prep (conf home)) ?~ huv.sat nile
?~ huv.sat ?: =(~ q.u.huv.sat) nile
nile :- nile
[nile (harm %save (conf (core u.huv.sat)))] ?. (warm %park)
[%done ~ %$ (slot 13 u.huv.sat)]
(harm %park (conf (core u.huv.sat)))
::
%load
=+ [hom=(slot 2 q.p.kon) old=(slot 3 q.p.kon)]
%+ ford /s/prep
?. (warm(huv.sat `hom) %prep)
:- nile
?: =(~ q.old)
(core hom)
:+ %mute `silk`(core hom)
:~ [[%$ 13]~ (cave (slot 3 old))]
==
[%call (harm %prep (conf (core hom))) [nile (cave old)]]
:: ::
%crud %crud
?~ huv.sat (give(qic.sat ~) %crud p.kon q.kon)
~& [%crud-none our app]
gone:(give %crud p.kon q.kon)
%^ game [%pain /step] u.huv.sat
!>([ost use p.kon])
:: ::
%nuke %nuke
:: ~& %yawn-nuke ?. (warm %pull)
gone :: send unsubscribe +>.$(qic.sat ~)
?> ?=(^ huv.sat)
(yawl [%pull ~] u.huv.sat [[%atom %ud] ost])
:: ::
%mess %mess
?~ huv.sat =+ ^= cog ^- term
~& [%mess-none our app] ?: |(?=(^ p.q.kon) =(%$ p.q.kon))
gone:(give %back |) %poke
%^ game [%poke /step] u.huv.sat (cat 3 'poke-' p.q.kon)
:(slop [[%atom %ud] ost] [[%atom %p] p.kon] q.q.kon) ?. (warm cog)
(give(qic.sat ~) %rasp [tik.sat lat.sat] ~)
?> ?=(^ huv.sat)
=+ sam=:(slop [[%atom %ud] ost] [[%atom %p] p.kon] q.q.kon)
~& [%mess-poke cog]
%+ ford /s/poke
[%call (harm cog (conf (core u.huv.sat))) (cove %$ sam)]
:: ::
%show %show
?~ huv.sat ?: (warm %peer)
~& [%show-none our app] =+ sam=!>([ost p.kon q.kon])
gone ?> ?=(^ huv.sat)
%^ game [%peer [%show (scot %p p.kon) q.kon]] u.huv.sat =. peq.sat (~(del by peq.sat) ost)
!>([ost p.kon q.kon]) (yawl [%peer (scot %p p.kon) q.kon] u.huv.sat sam)
?: (warm %peek)
=+ sam=!>([p.kon q.kon])
?> ?=(^ huv.sat)
(yawl [%peek (scot %p p.kon) q.kon] u.huv.sat sam)
(give(qic.sat ~) %dumb [tik.sat lat.sat])
:: ::
%take %take
?> ?=(^ huv.sat) !!
%^ game [%peck /step] u.huv.sat
:(slop [[%atom %ud] ost] !>((ride use say)) !>(p.kon) q.kon)
== ==
-- --
-- --

View File

@ -100,6 +100,7 @@
++ mart (list ,[n=mane v=tape]) :: XML attributes ++ mart (list ,[n=mane v=tape]) :: XML attributes
++ marx $|(@tas [n=mane a=mart]) :: XML tag ++ marx $|(@tas [n=mane a=mart]) :: XML tag
++ metl ?(%gold %iron %zinc %lead) :: core variance ++ metl ?(%gold %iron %zinc %lead) :: core variance
++ noun ,*
++ null ,~ :: null, nil, etc ++ null ,~ :: null, nil, etc
++ odor ,@ta :: atom format ++ odor ,@ta :: atom format
++ tarp ,[d=@ud h=@ud m=@ud s=@ud f=(list ,@ux)] :: parsed time ++ tarp ,[d=@ud h=@ud m=@ud s=@ud f=(list ,@ux)] :: parsed time
@ -1917,6 +1918,12 @@
b b
$(a r.a, b [n.a $(a l.a)]) $(a r.a, b [n.a $(a l.a)])
:: ::
+- tur :: turn
|* b=$+([* *] *)
|-
?~ a ~
[n=[p=p.n.a q=(b p.n.a q.n.a)] l=$(a l.a) r=$(a r.a)]
::
+- uni :: union +- uni :: union
~/ %uni ~/ %uni
|* b=_a |* b=_a
@ -1984,7 +1991,7 @@
=+ b=get(+< l.a) =+ b=get(+< l.a)
bal(+< ^+(a [p.b q.b r.a])) bal(+< ^+(a [p.b q.b r.a]))
:: ::
+- put :: insert new head +- put :: insert new tail
|* b=* |* b=*
|- ^+ a |- ^+ a
?~ a ?~ a
@ -9236,12 +9243,13 @@
++ glob ,[p=logo q=ship r=mark] :: global brand ++ glob ,[p=logo q=ship r=mark] :: global brand
++ herd (hypo curd) :: typed card ++ herd (hypo curd) :: typed card
++ hide :: standard app state ++ hide :: standard app state
$: own=[p=ship q=@tas] :: static identity $: $: our=ship :: owner/operator
app=@tas :: app identity
== ::
sup=(map bone (pair ship path)) :: subscription set sup=(map bone (pair ship path)) :: subscription set
$= seq :: dynamic sequence
$: tik=@ud :: boot number $: tik=@ud :: boot number
num=@ud :: action number act=@ud :: action number
eny=@ :: entropy eny=@uvI :: entropy
lat=@da :: date of last tick lat=@da :: date of last tick
== == :: == == ::
++ hilt ?(0 1 2) :: lead iron gold ++ hilt ?(0 1 2) :: lead iron gold

View File

@ -2023,7 +2023,6 @@
raz=(map path race) :: statements inbound raz=(map path race) :: statements inbound
ryl=(map path rill) :: statements outbound ryl=(map path rill) :: statements outbound
== :: == ::
++ bead ,[p=(set beam) q=cage] :: computed result
++ beam ,[[p=ship q=desk r=case] s=path] :: global name ++ beam ,[[p=ship q=desk r=case] s=path] :: global name
++ beak ,[p=ship q=desk r=case] :: garnish with beak ++ beak ,[p=ship q=desk r=case] :: garnish with beak
++ bird :: packet in travel ++ bird :: packet in travel
@ -2410,6 +2409,7 @@
[%call p=silk q=silk] :: slam [%call p=silk q=silk] :: slam
[%cast p=logo q=beak r=silk] :: translate [%cast p=logo q=beak r=silk] :: translate
[%done p=(set beam) q=cage] :: literal [%done p=(set beam) q=cage] :: literal
[%dude p=tank q=silk] :: error wrap
[%dune p=(set beam) q=(unit cage)] :: unit literal [%dune p=(set beam) q=(unit cage)] :: unit literal
[%mute p=silk q=(list (pair wing silk))] :: mutant [%mute p=silk q=(list (pair wing silk))] :: mutant
[%pass p=silk q=sill] :: twig construction [%pass p=silk q=sill] :: twig construction

View File

@ -1,38 +1,103 @@
!: !:
=> |% => |%
++ foobug-state ++ axle
$% [%0 bug=@ud] $% [%0 p=@ud]
== ==
++ gilt
$% [%json p=json]
[%hymn p=manx]
==
++ gift
$% [%rust gilt]
[%rasp gilt]
==
++ move ,[p=bone q=[%give p=gift]]
-- --
|= * |= *
|_ [hid=hide foo=foobug-state] |_ [hid=hide vat=axle]
++ prep ++ page
|= old=(unit foobug-state)
?~ old +>
~& [%prep-hid hid]
+>(foo u.old)
::
++ save
^- foobug-state
foo(bug +(bug.foo))
::
++ peer
|= [ost=bone you=ship pax=path]
~& [%peer [ost you pax]]
:_ +> :_ ~
:+ ost %give
:- %rust
:- %html
%- crip
%+ xmlt |
:_ ~
^- manx ^- manx
;html ;html
;head ;head
;title: Hi, everyone! ;title: Foobug!
== ==
;body ;body
;p: Hello, world (instance {<bug.foo>}) ;p: Word: {<p.vat>}.
;button(onclick "goof()"): Goof!
;script
; var c = 0;
; var d = 1;
; var x = 0;
;
; function pickup() {
; xhr = new XMLHttpRequest();
;
; console.log("WTF???");
; xhr.open("GET", "/zod/goe/foobug/"+port+"/frog/"+d);
; xhr.onload = function() {
; console.log("pickup");
; console.log(this)
; change(JSON.parse(this.responseText))
; update();
; d++;
; pickup();
; }
; xhr.send();
; }
;
; function dude() {
; xhr = new XMLHttpRequest();
;
; xhr.open("POST", "/zod/pos/foobug/"+port+"/frog/goof");
; xhr.setRequestHeader("content-type", "text/json")
; xhr.onload = function() {
; console.log("dude");
; console.log(this)
; change(JSON.parse(this.responseText))
; update();
; pickup();
; }
; xhr.send("{\"a\":1}")
; }
; dude();
;
; function change(jon) {
; x = jon.x;
; }
;
; function update() {
; document.getElementsByTagName("p")[0].innerHTML = "WORD: " + x;
; }
;
; function goof() {
; xhr = new XMLHttpRequest();
; xhr.onload = function() {
; console.log("hi");
; console.log(arguments)
; c++
; }
; xhr.open("POST",
; "/zod/pom/foobug/"+port+"/"+c)
; xhr.setRequestHeader("content-type", "text/json")
; xhr.send("{\"a\":1}")
; }
==
== ==
== ==
::
++ peer
|= [ost=bone you=ship pax=path]
^- [(list move) _+>]
?: =(~ pax)
[[ost %give %rust %hymn page]~ +>]
:_ +>
[ost %give %rust %json `json`(joba %x [%n (rsh 3 2 (scot %ui p.vat))])]~
::
++ poke-json
|= [ost=bone you=ship jon=json]
^- [(list move) _+>]
~& [%poke [%state p.vat] ost you jon]
:_ +>(p.vat +(p.vat))
:~ [ost %give %rasp %json jon]
==
-- --

44
main/app/philbug/app.js Normal file
View File

@ -0,0 +1,44 @@
window.onload = function() {
data = {}
change = function(_data) {
for(i in _data) {
data[i] = _data[i]
}
}
update = function() {
for (var i in data) {
if ($('#'+i).length < 1) {
var e = document.createElement('tr')
e.id = i
$('#cont tbody').append(e)
}
$('#'+i).html("<td>~"+i+"</td><td>"+data[i]+"</td>")
}
$('#cont tbody').append([].sort.call($('#cont tr'), function (a, b) {
return parseInt(b.childNodes[1].innerText) -
parseInt(a.childNodes[1].innerText)
}))
}
goof = function(e) {
d = $.map($(".sel"), function(el) {return el.id})
window.urb.send(d)
}
window.urb.subscribe("frog","goof", function(err,res) {
if(err)
return console.log('cannot connect to frog/goof')
change(res.data)
update()
return true
})
$('#cont').on('click', 'tr', function (e) {
if (!e.ctrlKey) { $('.sel').removeClass('sel') }
$(this).addClass('sel')
})
}

101
main/app/philbug/core.hoon Normal file
View File

@ -0,0 +1,101 @@
!:
=> |%
++ axle
$% [%0 p=(map ,@p ,@ud)]
==
++ gilt
$% [%json p=json]
[%hymn p=manx]
==
++ gift
$% [%rust gilt]
[%rasp gilt]
==
++ move ,[p=bone q=[%give p=gift]]
--
|= *
|_ [hid=hide vat=axle]
++ incl
|= wal=wall
%+ turn wal
|= tape ;script(type "text/javascript", src +<);
::
++ root
/(scot %p our.hid)/main/(scot %da lat.hid)/app/[app.hid]
::
++ page
^- manx
;html
;head
;title: Foobug!
;style
; .sel {background: lightgray}
; #cont {border-collapse: collapse}
==
;* %- incl :~
"//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"
==
;script ;- (trip ;;(,@ .^(%cx (welp root /urb/js))))
==
;script ;- (trip ;;(,@ .^(%cx (welp root /app/js))))
==
==
;body
;p: Hello.
;table#cont ;tbody
;* %+ turn
%+ sort (~(tap by p.vat) ~)
|= [p=[u=@p n=@ud] q=[u=@p n=@ud]] (gth n.p n.q)
|= [u=@p n=@ud]
;tr(id (slag 1 <u>)):(td:(-<u>) td:(-<n>))
== ==
;p: Select a ship
;button(onclick "goof()"): Give 5 points
==
==
::
++ peer
|= [ost=bone you=ship pax=path]
^- [(list move) _+>]
?: =(~ pax)
=. p.vat (~(put by p.vat) you (fall (~(get by p.vat) you) _@ud))
[[ost %give %rust %hymn page]~ +>]
:_ +>
~[(send-vat ost (turn (~(tap by p.vat)) |=([p=@p q=@ud] p)))]
::
++ poke-json
|= [ost=bone you=ship jon=json]
^- [(list move) _+>]
~& [%poke [%state p.vat] ost you]
=+ j=(,[%a p=(list ,[%s p=@t])] jon)
=. p.vat
%- ~(tur by p.vat)
|= [u=@p n=@ud]
?. (lien p.j |=([%s p=@t] =((slav %p (cat 3 '~' p)) u)))
n
(add 5 n)
:_ +>+
:- [ost %give %rasp %json jon]
%+ turn
^- (list bone)
%+ ~(rep by sup.hid) *(list bone)
|= [p=[p=bone q=[ship path]] q=(list bone)] ^- (list bone)
?. =(/goof +.q.p) q
[p.p q]
|= o=bone
%+ send-vat o
%+ turn p.j
|= [%s p=@t]
(slav %p (cat 3 '~' p))
++ send-vat
|= [o=bone l=(list ,@p)]
:* o %give %rust %json %o
^- (map ,@t jval)
%- mo
%+ turn l
|= p=@p
:- (rsh 3 1 (scot %p p)) :- %n
%^ rsh 3 2
(scot %ui (fall (~(get by p.vat) p) _@ud))
==
--

111
main/app/philbug/urb.js Normal file
View File

@ -0,0 +1,111 @@
window.urb = {
ship: ship,
port: port,
auto: auto,
oryx: oryx,
user: user,
appn: "foobug",
seqn: 0,
seqp: 1,
dely: 0,
req: function(method,url,data,json,cb) {
var xhr = new XMLHttpRequest()
xhr.open(method.toUpperCase(), url)
if(json)
xhr.setRequestHeader("content-type", "text/json")
if(data)
xhr.send(JSON.stringify(data))
else
xhr.send()
if(cb) {
xhr.onload = function() {
cb(null,{
"status":this.status,
"data":JSON.parse(this.responseText)
})
}
xhr.onerror = function() {
cb({
"status":this.status,
"data":this.responseText
})
}
}
},
subscribe: function(stream,path,cb) {
if(!cb)
throw new Error("You must supply a callback to urb.subscribe.")
var method, perm, url, $this
method = "post"
perm = "pis"
url = [this.ship,perm,this.user,this.appn,this.port]
if(stream) {
url.push(stream)
if(path)
url.push(path)
}
url = "/"+url.join("/")
$this = this
this.req(method,url,{},true,function(err,data) {
cb.apply(this,arguments)
if(!err) { $this.poll(stream,cb); }
})
},
send: function(data,cb) {
if(!data) { data = {}; }
if(!cb) { cb = function() {}; }
var method, perm, url, $this
method = "post"
perm = "pim"
url = [this.ship,perm,this.user,this.appn,this.port,this.seqn]
url = "/"+url.join("/")
this.seqn++
$this = this
this.req(method,url,data,true,function(err,data) {
if(err) { $this.seqn--; }
cb.apply(this,arguments)
})
},
poll: function(stream,cb) {
if(!stream)
throw new Error("You must supply a stream to urb.poll.")
if(!cb)
throw new Error("You must supply a callback to urb.poll.")
var method, perm, url, $this
method = "get"
perm = "gie"
if(!stream) { return false; }
url = [this.ship,perm,this.user,this.appn,this.port,stream,this.seqp]
url = "/"+url.join("/")
$this = this
this.req(method,url,null,false,function(err,data) {
if(cb.apply(this,arguments) === false) { return; }
if(err)
$this.dely += 1000
else {
$this.dely = 0
$this.seqp++
}
setTimeout(function() {
$this.poll(stream,cb)
},$this.dely)
})
}
}

View File

@ -0,0 +1 @@
manx

View File

@ -0,0 +1,3 @@
|= *
|= man=manx
(crip (xmlt | man ~))

View File

@ -0,0 +1,4 @@
|= *
|= man=manx
=+ htm=(crip (xmlt | man ~))
[/text/html (met 3 htm) htm]