urbit/arvo/ames.hoon

1791 lines
69 KiB
Plaintext
Raw Normal View History

2016-01-25 06:37:41 +03:00
!: :: ames (4a), networking
2013-09-29 00:21:18 +04:00
::
2015-12-20 23:50:45 +03:00
|= pit/vase
2013-09-29 00:21:18 +04:00
=> =~
2014-06-03 09:07:32 +04:00
:: structures
|%
++ move {p/duct q/(wind note gift-ames)} :: local move
2014-06-03 09:07:32 +04:00
++ note :: out request $->
2015-12-14 10:58:14 +03:00
$? $: $d :: to %dill
2015-12-20 23:50:45 +03:00
$% {$flog p/flog} ::
2015-03-20 23:14:53 +03:00
== == ::
2015-12-14 10:58:14 +03:00
$: $a :: to %ames
2015-12-20 23:50:45 +03:00
$% {$kick p/@da} ::
2015-06-23 03:47:19 +03:00
== == ::
2015-12-14 10:58:14 +03:00
$: $g :: to %gall
2015-12-20 23:50:45 +03:00
$% {$deal p/sock q/cush} ::
2015-03-20 23:14:53 +03:00
== == ::
2015-12-14 10:58:14 +03:00
$: @tas :: to any
2015-12-20 23:50:45 +03:00
$% {$init p/@p} ::
{$wart p/sock q/@tas r/path s/*} ::
{$west p/sack q/path r/*} ::
2014-06-22 02:06:42 +04:00
== == == ::
2015-12-06 00:01:00 +03:00
++ sign :: in result _<-
$? $: $g :: from %gall
2015-12-20 23:50:45 +03:00
$% {$unto p/cuft} ::
{$mean p/ares} :: XX old clean up
2015-12-06 00:01:00 +03:00
{$nice $~} ::
2015-03-20 23:14:53 +03:00
== == ::
2015-12-14 10:58:14 +03:00
$: @tas ::
2015-12-20 23:50:45 +03:00
$% {$crud p/@tas q/(list tank)} :: by any
{$mack p/(unit tang)} :: message ack
2014-06-22 02:06:42 +04:00
== == == ::
2014-06-03 09:07:32 +04:00
--
2013-09-29 00:21:18 +04:00
::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 4aA, identity logic ::
::
|%
::
++ grip :: extend will
2015-12-20 23:50:45 +03:00
|= {wet/will law/will}
2013-09-29 00:21:18 +04:00
^- will
?~ wet law
?: =(wet law) law
?^ t.wet
?>((meld i.wet i.t.wet) [i.wet $(wet t.wet)])
?~ law
?>((pier i.wet) [i.wet ~])
?~ q.p.q.i.wet
?>((meld i.wet i.law) [i.wet law])
=+ rul=(sein r.p.q.i.wet)
|- ^- will
?: ?& =(rul r.p.q.i.law)
=(p.p.q.i.law u.q.p.q.i.wet)
==
?>((meld i.wet i.law) [i.wet law])
?>(?=(^ t.law) $(law t.law))
::
++ meld :: verify connect
2015-12-20 23:50:45 +03:00
|= {new/deed old/deed}
2015-12-08 10:35:55 +03:00
^- $&
2013-09-29 00:21:18 +04:00
?> (melt new old)
2016-08-11 20:50:58 +03:00
?> =((shaf %meld (sham q.new)) (need (sure:as:(com:nu:crub r.q.old) *code p.new)))
2013-09-29 00:21:18 +04:00
%&
::
++ melt :: proper connect
2015-12-20 23:50:45 +03:00
|= {new/deed old/deed}
2013-09-29 00:21:18 +04:00
^- ?
=+ rac=(clan r.p.q.new)
?& =(r.new r.old) :: match fake
?~ q.p.q.new
?& =(r.p.q.old r.p.q.new)
2013-09-29 00:21:18 +04:00
&(!=(%earl rac) =(p.p.q.old (dec p.p.q.new)))
==
?& &(!=(%pawn rac) !=(%czar rac))
|(=(0 p.p.q.new) =(%earl rac))
=(r.p.q.old (sein r.p.q.new))
=(p.p.q.old u.q.p.q.new)
==
==
::
++ pare :: shorten against
2015-12-20 23:50:45 +03:00
|= {fou/will law/will}
2013-09-29 00:21:18 +04:00
:: ~& [%pare-fou fou]
:: ~& [%pare-law law]
^- will
=+ [ouf=(flop fou) wal=(flop law)]
%- flop
2013-09-29 00:21:18 +04:00
|- ^- will
?~ ouf wal
2016-01-25 06:37:41 +03:00
?~ wal !!
2013-09-29 00:21:18 +04:00
?. =(i.wal i.ouf) ouf
$(wal t.wal, ouf t.ouf)
::
2014-06-04 03:39:28 +04:00
++ pier !: :: initial deed
2015-12-20 23:50:45 +03:00
|= wed/deed
2015-12-08 10:35:55 +03:00
^- $&
2013-09-29 00:21:18 +04:00
?> =+ rac=(clan r.p.q.wed)
2016-08-11 20:50:58 +03:00
=+ loy=(com:nu:crub r.q.wed)
2014-06-04 03:39:28 +04:00
?: &(r.wed =(rac %czar)) %&
2013-09-29 00:21:18 +04:00
?> =(0 p.p.q.wed)
2015-12-06 00:01:00 +03:00
?> =(fig:ex:loy ?+(rac !! $czar (zeno r.p.q.wed), $pawn r.p.q.wed))
2014-04-10 04:28:22 +04:00
?> =((shaf %self (sham q.wed)) (need (sure:as:loy *code p.wed)))
2013-09-29 00:21:18 +04:00
%&
%&
::
++ real :: validate
2015-12-20 23:50:45 +03:00
|= {mac/mace law/will}
2013-09-29 00:21:18 +04:00
?> ?& |- ^- ?
?~ mac &
?> ?& ?=(^ law)
(lth p.p.q.i.law 9) :: 9-lives rule
=(p.p.q.i.law p.i.mac)
2016-08-11 20:50:58 +03:00
=(r.q.i.law pub:ex:(nol:nu:crub q.i.mac))
2013-09-29 00:21:18 +04:00
==
$(mac t.mac, law t.law)
==
%&
2013-09-29 00:21:18 +04:00
::
++ rice :: mace at life
2015-12-20 23:50:45 +03:00
|= {mar/life mac/mace}
2013-09-29 00:21:18 +04:00
^- (unit mace)
?~ mac ~
?: =(mar p.i.mac) [~ mac]
?: (gth mar p.i.mac) ~
$(mac t.mac)
::
++ rick :: will at life
2015-12-20 23:50:45 +03:00
|= {mar/life lag/ship law/will}
2013-09-29 00:21:18 +04:00
^- (unit will)
?~ law ~
?: =(mar p.p.q.i.law) [~ law]
?: (gth mar p.p.q.i.law) ~
2015-12-06 00:01:00 +03:00
?: |(?=($~ q.p.q.i.law) !=(lag r.p.q.i.law)) ~
2013-09-29 00:21:18 +04:00
$(law t.law)
::
++ zeno :: imperial keyprint
2015-12-20 23:50:45 +03:00
|= zar/@pD
2013-09-29 00:21:18 +04:00
^- @uvH ^- @
%+ snag zar
2015-12-08 10:35:55 +03:00
^- (list @uw)
:~ 0wN.ymbEn.wyNdE.RFNRb.SnEQH :: 0, ~zod, urbit.org
2016-05-18 22:50:24 +03:00
0w0 :: 1, ~nec, Curtis Yarvin
0w0 :: 2, ~bud, Tlon Investor 1
0w0 :: 3, ~wes, Tlon Investor 2
0w0 :: 4, ~sev, Tlon Investor 2
0wt.cKYxs.Yb5VZ.boSwm.l0yYc :: 5, ~per, Tlon Investor 3 (oldkey)
2016-05-18 22:50:24 +03:00
0w0 :: 6, ~sut, Tlon Investor 4
0w0 :: 7, ~let, Tlon Investor 4
0w0 :: 8, ~ful, Tlon Investor 4
0w0 :: 9, ~pen, Tlon Investor 4
0w0 :: 10, ~syt, Tlon Investor 4
0w0 :: 11, ~dur, Tlon Investor 4
0w0 :: 12, ~wep, Sam Putman
0w0 :: 13, ~ser, Tlon Investor 5
0w3j.H0sty.jHa3F.JlD26.4LPwV :: 14, ~wyl, Zimran Ahmed (oldkey)
0w3F.QdvV-.toAsR.hvUNk.fHjW6 :: 15, ~sun, Colin Smith (oldkey)
2016-05-18 22:50:24 +03:00
0w0 :: 16, ~ryp, Tlon Investor 6
0w0 :: 17, ~syx, Tlon Investor 6
0w0 :: 18, ~dyr, Tlon Investor 6
0w0 :: 19, ~nup, Tlon Investor 6
0w0 :: 20, ~heb, Tlon Investor 6
0w0 :: 21, ~peg, Tlon Investor 6
0w0 :: 22, ~lup, Tlon Investor 6
0w0 :: 23, ~dep, Tlon Investor 6
0w0 :: 24, ~dys, Mike Gogulski
0w0 :: 25, ~put, Tlon Investor 7
0w0 :: 26, ~lug, Tlon Investor 8
0w0 :: 27, ~hec, Tlon Investor 8
0w0 :: 28, ~ryt, Tlon Investor 8
0w0 :: 29, ~tyv, Tlon Investor 8
0w0 :: 30, ~syd, Jennifer Kollmer
0wp.BgRGJ.kslnv.PLAqb.TRKbr :: 31, ~nex, Prakhar Goel (oldkey)
2016-05-18 22:50:24 +03:00
0w0 :: 32, ~lun, Tlon Investor 9
0w0 :: 33, ~mep, Tlon Investor 9
0w0 :: 34, ~lut, Tlon Investor 9
0w0 :: 35, ~sep, Tlon Investor 9
0w0 :: 36, ~pes, Jennifer Kollmer
0w10.5s1K0.dv9NT.02fPe.PyDYa :: 37, ~del, Kingdon Barrett
0w1w.KF-J1.5I63F.khFyv.h0n4J :: 38, ~sul, John Burnham (oldkey)
2017-02-04 19:42:56 +03:00
0w1A.OcPXS.oQi8K.g-E0d.zTRph :: 39, ~ped, Jeremy Wall
0w2.Mr2Id.SX8xI.MAs-j.5Y-1W :: 40, ~tem, Tlon Investor 10 (oldkey)
2016-05-18 22:50:24 +03:00
0w0 :: 41, ~led, Nick Caruso
0w0 :: 42, ~tul, Susan Yarvin
0w0 :: 43, ~met, Susan Yarvin
0w0 :: 44, ~wen, Susan Yarvin
0w0 :: 45, ~byn, Susan Yarvin
0w0 :: 46, ~hex, James Torre
0w0 :: 47, ~feb, urbit.org
0wK.GoKEY.rMjfn.ZcvFQ.n4BmX :: 48, ~pyl, Michael Hartl (oldkey)
2016-05-18 22:50:24 +03:00
0w0 :: 49, ~dul, Jennifer Kollmer
0w0 :: 50, ~het, Jennifer Kollmer
0w0 :: 51, ~mev, Herbert Yarvin
0w0 :: 52, ~rut, Herbert Yarvin
0w2L.M6-o5.DDTFL.R4sFL.7Zuay :: 53, ~tyl, Tlon Investor 11 (oldkey)
2016-05-18 22:50:24 +03:00
0w0 :: 54, ~wyd, Curtis Yarvin
0w0 :: 55, ~tep, Sibyl Kollmer
0w0 :: 56, ~bes, Sibyl Kollmer
0w0 :: 57, ~dex, Jared Hance
0w0 :: 58, ~sef, Owen Rescher
0w0 :: 59, ~wyc, Galen Wolfe-Pauly
0w0 :: 60, ~bur, Galen Wolfe-Pauly
0w0 :: 61, ~der, Galen Wolfe-Pauly
0w0 :: 62, ~nep, Galen Wolfe-Pauly
0w0 :: 63, ~pur, Herbert Yarvin
0w30.VtXvV.S~xIV.iMCL~.j9zTC :: 64, ~rys, Charlie Cummings (oldkey)
2016-05-18 22:50:24 +03:00
0w0 :: 65, ~reb, Herbert Yarvin
0wp.LslIa.IFSM9.mIp-z.KBIBh :: 66, ~den, Michael Hartl (oldkey)
2016-05-18 22:50:24 +03:00
0w0 :: 67, ~nut, Henry Yarvin
0w0 :: 68, ~sub, Henry Yarvin
0w0 :: 69, ~pet, Henry Yarvin
0w0 :: 70, ~rul, Henry Yarvin
0w0 :: 71, ~syn, Henry Ault
0w0 :: 72, ~reg, Henry Ault
0w0 :: 73, ~tyd, Henry Ault
0w0 :: 74, ~sup, Henry Ault
0w0 :: 75, ~sem, Michael Livshin
0w0 :: 76, ~wyn, Anton Dyudin
0w0 :: 77, ~rec, urbit.org
0w0 :: 78, ~meg, Tlon
0w2L.tavpW.Lk4R-.elm7E.4KEqZ :: 79, ~net, Anthony Martinez (oldkey)
2016-05-18 22:50:24 +03:00
0w0 :: 80, ~sec, Curtis Yarvin
0w0 :: 81, ~mul, Curtis Yarvin
0w1F.Tqroo.wyq2m.cBaTM.9MbG- :: 82, ~nym, Max Greer (oldkey)
2016-05-18 22:50:24 +03:00
0w0 :: 83, ~tev, Sibyl Kollmer
0w2x.~ldho.Oo7kE.QqNSx.XteFh :: 84, ~web, Ar Vicco (oldkey)
2016-05-18 22:50:24 +03:00
0w0 :: 85, ~sum, Philip Monk
0w0 :: 86, ~mut, Philip Monk
0w0 :: 87, ~nyx, Philip Monk
0w30.UUr19.iBPlD.wfyJD.2CWPv :: 88, ~rex, Tlon Investor 12 (oldkey)
2016-05-18 22:50:24 +03:00
0w0 :: 89, ~teb, Sibyl Kollmer
0w0 :: 90, ~fus, Tlon Corporation
0w0 :: 91, ~hep, urbit.org
0w0 :: 92, ~ben, urbit.org
0w0 :: 93, ~mus, urbit.org
0w0 :: 94, ~wyx, urbit.org
0w0 :: 95, ~sym, urbit.org
0w0 :: 96, ~sel, urbit.org
0w0 :: 97, ~ruc, urbit.org
0w0 :: 98, ~dec, urbit.org
0w1L.NQ-5f.ABF9R.kVwVJ.zRfn2 :: 99, ~wex, Pax Dickinson (oldkey)
2016-05-18 22:50:24 +03:00
0w0 :: 100, ~syr, urbit.org
0w0 :: 101, ~wet, urbit.org
0w0 :: 102, ~dyl, urbit.org
0w0 :: 103, ~myn, urbit.org
0w0 :: 104, ~mes, urbit.org
0w0 :: 105, ~det, urbit.org
0w0 :: 106, ~bet, urbit.org
0w0 :: 107, ~bel, urbit.org
0w0 :: 108, ~tux, Tlon Investor 13
0w1D.JV9n0.9z~YK.yAWyi.c9~Lu :: 109, ~tug, Philip Monk (oldkey)
2016-05-18 22:50:24 +03:00
0w0 :: 110, ~myr, urbit.org
0w0 :: 111, ~pel, urbit.org
0w0 :: 112, ~syp, urbit.org
0w0 :: 113, ~ter, urbit.org
0w0 :: 114, ~meb, urbit.org
0w0 :: 115, ~set, urbit.org
0w0 :: 116, ~dut, urbit.org
0w0 :: 117, ~deg, urbit.org
0w0 :: 118, ~tex, urbit.org
0w0 :: 119, ~sur, urbit.org
0w0 :: 120, ~fel, urbit.org
0w0 :: 121, ~tud, urbit.org
0w0 :: 122, ~nux, urbit.org
0w0 :: 123, ~rux, urbit.org
0w0 :: 124, ~ren, urbit.org
0w0 :: 125, ~wyt, urbit.org
0w0 :: 126, ~nub, urbit.org
0w0 :: 127, ~med, urbit.org
0w20.GGLXx.aqxaQ.w4Iob.wdmmr :: 128, ~lyt, Arthur Breitman (oldkey)
2016-05-18 22:50:24 +03:00
0w0 :: 129, ~dus, urbit.org
0w0 :: 130, ~neb, urbit.org
0w0 :: 131, ~rum, urbit.org
0w0 :: 132, ~tyn, urbit.org
0w0 :: 133, ~seg, urbit.org
0w0 :: 134, ~lyx, urbit.org
0w0 :: 135, ~pun, Anton Dyudin
2016-05-18 22:50:24 +03:00
0w0 :: 136, ~res, urbit.org
0w0 :: 137, ~red, Alex Kravets
0w3J.15iJA.0pbNk.mZXyh.A~uKb :: 138, ~fun, Aaron Beckerman (oldkey)
2016-05-18 22:50:24 +03:00
0w0 :: 139, ~rev, urbit.org
0w3m.Cqumo.ZC7-e.794A4.Bqhh8 :: 140, ~ref, Matt Brubeck (oldkey)
2016-05-18 22:50:24 +03:00
0w0 :: 141, ~mec, urbit.org
0w0 :: 142, ~ted, urbit.org
0w2d.GLlYg.-MwtO.ZCPBE.OqGB9 :: 143, ~rus, Stephen Burnham (oldkey)
2016-05-18 22:50:24 +03:00
0w0 :: 144, ~bex, urbit.org
0w0 :: 145, ~leb, Justin LeBlanc
0w0 :: 146, ~dux, urbit.org
0w0 :: 147, ~ryn, urbit.org
0w0 :: 148, ~num, Tlon
0w0 :: 149, ~pyx, Katherine McFall
0w2g.gLmg4.MtrHQ.A5VmH.WPk6G :: 150, ~ryg, Dan Haffey (oldkey)
2016-05-18 22:50:24 +03:00
0w0 :: 151, ~ryx, Tlon
0w0 :: 152, ~fep, Tlon
0w2j.T1u2s.BfXjV.ldOGR.aiZrQ :: 153, ~tyr, Steve Dee (oldkey)
2016-05-18 22:50:24 +03:00
0w0 :: 154, ~tus, Tlon
0w0 :: 155, ~tyc, Tlon
0w0 :: 156, ~leg, Tlon
0w0 :: 157, ~nem, Tlon
0w0 :: 158, ~fer, Tlon
0w0 :: 159, ~mer, Tlon
0w1E.bDeR7.cuQmt.Uc5CS.OSyMx :: 160, ~ten, Tlon
2016-05-18 22:50:24 +03:00
0w0 :: 161, ~lus, Tlon
0w0 :: 162, ~nus, Tlon
0w0 :: 163, ~syl, Tlon
0w0 :: 164, ~tec, Tlon
0w0 :: 165, ~mex, Tlon
0w24.TfzCX.qmRm9.ukapQ.It6tG :: 166, ~pub, Tlon
2016-05-18 22:50:24 +03:00
0w0 :: 167, ~rym, Tlon
0w0 :: 168, ~tuc, Tlon
0w0 :: 169, ~fyl, Tlon
0w0 :: 170, ~lep, Tlon
0w0 :: 171, ~deb, Tlon
0w0 :: 172, ~ber, Tlon
0w0 :: 173, ~mug, Tlon
0w0 :: 174, ~hut, Tlon
0w0 :: 175, ~tun, Tlon
0w0 :: 176, ~byl, Tlon
0w0 :: 177, ~sud, Tlon
0w0 :: 178, ~pem, Tlon
0wQ.uJzGo.M94yL.L7yw6.nGyfW :: 179, ~dev, Tlon
2016-05-18 22:50:24 +03:00
0w0 :: 180, ~lur, Tlon
0w0 :: 181, ~def, Tlon
0w1m.CxbiW.SKF5E.11JQ6.yW~T4 :: 182, ~bus, Tlon
2016-05-18 22:50:24 +03:00
0w0 :: 183, ~bep, Tlon
0w0 :: 184, ~run, Tlon
0w0 :: 185, ~mel, Tlon
0w0 :: 186, ~pex, Tlon
0w0 :: 187, ~dyt, Tlon
0w0 :: 188, ~byt, Tlon
0w0 :: 189, ~typ, Anton Dyudin
2016-05-18 22:50:24 +03:00
0w0 :: 190, ~lev, Tlon
0w0 :: 191, ~myl, Tlon
0w0 :: 192, ~wed, Tlon
0w0 :: 193, ~duc, Tlon
0w0 :: 194, ~fur, Tlon
0w0 :: 195, ~fex, Tlon
0w0 :: 196, ~nul, Tlon
0w0 :: 197, ~luc, Tlon
0w0 :: 198, ~len, Tlon
0w0 :: 199, ~ner, Tlon
0wv.aixe9.7gG2w.7cJiy.i3Mg8 :: 200, ~lex, Michael Hartl (oldkey)
2016-05-18 22:50:24 +03:00
0w0 :: 201, ~rup, Owen Rescher
0w0 :: 202, ~ned, Tlon
0w0 :: 203, ~lec, Tlon
0w0 :: 204, ~ryd, Tlon
0w1U.n361n.FC3jj.9cX26.V1Wif :: 205, ~lyd, Adam Bliss (oldkey)
2016-05-18 22:50:24 +03:00
0w0 :: 206, ~fen, Tlon
0w0 :: 207, ~wel, Tlon
0w0 :: 208, ~nyd, Tlon
0w0 :: 209, ~hus, Tlon
0w0 :: 210, ~rel, Tlon
0w0 :: 211, ~rud, Tlon
0w0 :: 212, ~nes, Tlon
0w16.~8NZV.VyMmf.4toMO.pui1R :: 213, ~hes, Tlon Investor 14 (oldkey)
2016-05-18 22:50:24 +03:00
0w0 :: 214, ~fet, Tlon
0w0 :: 215, ~des, Tlon
0w0 :: 216, ~ret, Tlon
0w0 :: 217, ~dun, Tlon
0w0 :: 218, ~ler, Tlon
0w10.w0AUz.QVdks.HCNvf.ja~TO :: 219, ~nyr, Ivan Matosevic (oldkey)
2016-05-18 22:50:24 +03:00
0w0 :: 220, ~seb, Tlon
0w0 :: 221, ~hul, Tlon
0w0 :: 222, ~ryl, Tlon
0w0 :: 223, ~lud, Tlon
0w0 :: 224, ~rem, Tlon
0w0 :: 225, ~lys, Tlon
0w3C.YXlEl.pFbYV.9pYWI.d7cla :: 226, ~fyn, Stephen Burnham (oldkey)
2016-05-18 22:50:24 +03:00
0w0 :: 227, ~wer, Tlon
0w0 :: 228, ~ryc, Tlon
0w0 :: 229, ~sug, Tlon
0w0 :: 230, ~nys, Tlon
0w0 :: 231, ~nyl, Tlon
0w0 :: 232, ~lyn, Tlon
0w0 :: 233, ~dyn, Tlon
0w0 :: 234, ~dem, Tlon
0w0 :: 235, ~lux, Tlon Investor 15
2017-05-19 21:42:37 +03:00
0w1O.Jq9xt.YFg7U.qg13U.WFNGJ :: 236, ~fed, Iceman
2016-05-18 22:50:24 +03:00
0w0 :: 237, ~sed, Tlon
0w0 :: 238, ~bec, Tlon
0w0 :: 239, ~mun, Tlon
0w0 :: 240, ~lyr, Tlon
0w0 :: 241, ~tes, Tlon
0w0 :: 242, ~mud, Ian Rowan
0w4.yybWD.F1BgE.ynzlF.47neH :: 243, ~nyt, Byrne Hobart (oldkey)
2016-05-18 22:50:24 +03:00
0w0 :: 244, ~byr, Tlon
0w0 :: 245, ~sen, Tlon
0w0 :: 246, ~weg, Tlon
0w28.bRVMq.Oi3tM.zOCNV.j00Yq :: 247, ~fyr, Anton Dyudin (oldkey)
2016-05-18 22:50:24 +03:00
0w0 :: 248, ~mur, Tlon
0w0 :: 249, ~tel, Tlon
2016-08-27 00:00:58 +03:00
0w3w.V54nF.e9eNv.1fLkl.PiUo- :: 250, ~rep, Raymond Pasco
2016-05-18 22:50:24 +03:00
0w0 :: 251, ~teg, Tlon
0w0 :: 252, ~pec, Tlon
0w0 :: 253, ~nel, Tlon
0w0 :: 254, ~nev, Tlon
0wY.a0HAU.7Lbkf.6V514.OsJBv :: 255, ~fes, John Burnham (oldkey)
2013-09-29 00:21:18 +04:00
==
--
::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 4aB, packet format ::
::
|%
++ bite :: packet to cake
2015-12-20 23:50:45 +03:00
|= pac/rock ^- cake
2013-09-29 00:21:18 +04:00
=+ [mag=(end 5 1 pac) bod=(rsh 5 1 pac)]
=+ :* vez=(end 0 3 mag) :: protocol version
chk=(cut 0 [3 20] mag) :: checksum
wix=(bex +((cut 0 [23 2] mag))) :: width of receiver
vix=(bex +((cut 0 [25 2] mag))) :: width of sender
tay=(cut 0 [27 5] mag) :: message type
==
?> =(6 vez)
2013-09-29 00:21:18 +04:00
?> =(chk (end 0 20 (mug bod)))
:+ [(end 3 wix bod) (cut 3 [wix vix] bod)]
(kins tay)
(rsh 3 (add wix vix) bod)
::
2015-12-20 23:50:45 +03:00
++ kins |=(tay/@ (snag tay `(list skin)`[%none %open %fast %full ~]))
++ ksin |=(sin/skin `@`?-(sin $none 0, $open 1, $fast 2, $full 3))
2013-09-29 00:21:18 +04:00
++ spit :: cake to packet
2015-12-20 23:50:45 +03:00
|= kec/cake ^- @
2013-09-29 00:21:18 +04:00
=+ wim=(met 3 p.p.kec)
=+ dum=(met 3 q.p.kec)
=+ yax=?:((lte wim 2) 0 ?:((lte wim 4) 1 ?:((lte wim 8) 2 3)))
=+ qax=?:((lte dum 2) 0 ?:((lte dum 4) 1 ?:((lte dum 8) 2 3)))
=+ wix=(bex +(yax))
=+ vix=(bex +(qax))
=+ bod=:(mix p.p.kec (lsh 3 wix q.p.kec) (lsh 3 (add wix vix) r.kec))
=+ tay=(ksin q.kec)
%+ mix
%+ can 0
:~ [3 6]
2013-09-29 00:21:18 +04:00
[20 (mug bod)]
[2 yax]
[2 qax]
[5 tay]
==
(lsh 5 1 bod)
--
::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 4aC, PKI engine ::
::
|%
++ go :: go
2015-12-20 23:50:45 +03:00
|_ ton/town :: ames state
2013-09-29 00:21:18 +04:00
++ as :: as:go
2015-12-20 23:50:45 +03:00
|_ {our/ship saf/sufi} :: per server
2013-09-29 00:21:18 +04:00
++ born :: born:as:go
2015-12-20 23:50:45 +03:00
|= {now/@da her/@p tic/@pG ges/gens pub/pass} :: register user
2015-12-15 01:21:10 +03:00
^- {(unit will) _+>}
2013-09-29 00:21:18 +04:00
?. =(our (sein her)) [~ +>.$]
=+ nes=sen
=+ ryt=(end 6 1 (shaf %tick (mix her (shax sec:ex:q.nes))))
?. =(tic ryt)
~& [%ames-wrong-ticket `@p`ryt]
2013-09-29 00:21:18 +04:00
[~ +>.$]
=+ rad=(~(get by hoc.saf) her)
?^ rad
2014-06-01 00:22:49 +04:00
?. ?=(^ lew.wod.u.rad)
$(hoc.saf (~(del by hoc.saf) her)) :: XX how can this be?
2013-09-29 00:21:18 +04:00
?. =(pub r.q.i.lew.wod.u.rad) [~ +>.$]
[[~ lew.wod.u.rad] +>.$]
2013-09-29 00:21:18 +04:00
=+ syp=[[0 [~ p.nes] her now] ges pub]
2014-06-04 03:39:28 +04:00
=+ ded=[(sign:as:q.nes *code (shaf %meld (sham syp))) syp fak.ton]
2013-09-29 00:21:18 +04:00
=+ wil=[ded law.saf]
?> =(wil (grip wil ~))
:- [~ wil]
2014-06-19 22:53:16 +04:00
+>.$(hoc.saf (~(put by hoc.saf) her [[~31337.1.1 ~ wil] ~ *clot]))
::
2013-09-29 00:21:18 +04:00
++ lax :: lax:as:go
2015-12-20 23:50:45 +03:00
|_ {her/ship dur/dore} :: per client
2013-09-29 00:21:18 +04:00
++ cluy :: cluy:lax:as:go
2015-12-20 23:50:45 +03:00
^- {p/life q/gens r/acru} :: client crypto
2013-09-29 00:21:18 +04:00
?~ lew.wod.dur !!
?. =(fak.ton r.i.lew.wod.dur) ~|([%client-wrong-fake her] !!)
:+ p.p.q.i.lew.wod.dur
q.q.i.lew.wod.dur
2016-08-11 20:50:58 +03:00
(com:nu:crub r.q.i.lew.wod.dur)
2013-09-29 00:21:18 +04:00
::
++ clon
^- life
?~(lew.wod.dur 0 p.p.q.i.lew.wod.dur)
::
++ deng
2015-12-20 23:50:45 +03:00
|= law/will
2013-09-29 00:21:18 +04:00
%_(+> lew.wod.dur (grip law lew.wod.dur))
::
++ griz :: griz:lax:as:go
2015-12-20 23:50:45 +03:00
|= now/@da :: generate key for
^- {p/code q/_+>}
2013-09-29 00:21:18 +04:00
=+ key=(shas %enty (mix now any.ton))
:- key
%= +>.$
any.ton (shax (mix now any.ton))
heg.caq.dur (~(put by heg.caq.dur) (shaf %hand key) key)
==
::
++ pode :: pode:lax:as:go
2015-12-20 23:50:45 +03:00
|= now/@da :: timeout route
^+ +>
?: (lth her 256) +>(lun.wod.dur [~ %if ~2000.1.1 0 (mix her .0.0.1.0)])
+>(lun.wod.dur ~)
2013-09-29 00:21:18 +04:00
::
++ kuch :: kuch:lax:as:go
2015-12-20 23:50:45 +03:00
|= had/hand :: hear key tag
2015-12-15 01:21:10 +03:00
^- (unit {code _+>})
2013-09-29 00:21:18 +04:00
=+ wey=(~(get by heg.caq.dur) had)
?^ wey
=+ key=u.wey
:+ ~ key
%= ..kuch
yed.caq.dur [~ had u.wey]
heg.caq.dur (~(del by heg.caq.dur) had)
qim.caq.dur (~(put by qim.caq.dur) had key)
==
=+ dyv=(~(get by qim.caq.dur) had)
?~ dyv ~
[~ u.dyv ..kuch]
::
++ wasc :: wasc:lax:as:go
2015-12-20 23:50:45 +03:00
|= key/code :: hear foreign code
2013-09-29 00:21:18 +04:00
^+ +>
=+ had=(shaf %hand key)
2014-01-07 05:09:03 +04:00
%_ ..wasc
yed.caq.dur [~ had key]
qim.caq.dur (~(put by qim.caq.dur) had key)
2013-09-29 00:21:18 +04:00
==
::
++ wast :: wast:lax:as:go
2015-12-20 23:50:45 +03:00
|= ryn/lane :: set route
2013-09-29 00:21:18 +04:00
^+ +>
%= +>
lun.wod.dur
2015-12-08 10:35:55 +03:00
?: ?=({$ix *} ryn)
?: ?| ?=($~ lun.wod.dur)
?=({$ix *} u.lun.wod.dur)
?& ?=({$if *} u.lun.wod.dur)
2014-06-04 01:01:40 +04:00
(gth p.ryn (add ~s10 p.u.lun.wod.dur))
2013-09-29 00:21:18 +04:00
==
==
[~ ryn]
lun.wod.dur
[~ ryn]
==
::
++ wist :: wist:lax:as:go
2015-12-20 23:50:45 +03:00
|= $: now/@da :: route via
waz/(list @p)
ryn/(unit lane)
pac/rock
2013-09-29 00:21:18 +04:00
==
^- (list boon)
?: =(our her) [[%ouzo *lane pac] ~]
?~ waz ~
=+ dyr=?:(=(her i.waz) dur (gur i.waz))
?. ?& !=(our i.waz)
?=(^ lun.wod.dyr)
==
$(waz t.waz)
2015-12-06 00:01:00 +03:00
:_ ?: ?=($ix -.u.lun.wod.dyr)
2013-09-29 00:21:18 +04:00
$(waz t.waz)
~
:+ %ouzo u.lun.wod.dyr
?: &(=(i.waz her) =(~ ryn)) pac
=+ mal=(jam `meal`[%fore her ryn pac])
%- spit
^- cake
:* [our i.waz]
?~ yed.caq.dyr [%none mal]
:- %fast
%^ cat 7
p.u.yed.caq.dyr
2016-08-11 20:50:58 +03:00
(en:crub q.u.yed.caq.dyr mal)
2013-09-29 00:21:18 +04:00
==
::
++ xeno :: xeno:lax:as:go
^- (list ship) :: foreign canon
(saxo her)
::
++ xong :: xong:lax:as:go
^- (list ship) :: route unto
=+ [fro=xen too=xeno]
=+ ^= oot ^- (list ship)
2015-12-20 23:50:45 +03:00
=| oot/(list ship)
2013-09-29 00:21:18 +04:00
|- ^+ oot
?~ too ~
2015-12-20 23:50:45 +03:00
?: (lien fro |=(a/ship =(a i.too))) ~
2013-09-29 00:21:18 +04:00
[i.too $(too t.too)]
:: ~& [%xong-to [our her] (weld oot ?>(?=(^ fro) t.fro))]
(weld oot ?>(?=(^ fro) t.fro))
::
++ zuul :: zuul:lax:as:go
2015-12-20 23:50:45 +03:00
|= {now/@da ham/meal} :: encode message
^- {p/(list rock) q/_+>}
2013-09-29 00:21:18 +04:00
=< weft
|%
++ wasp :: null security
2015-12-20 23:50:45 +03:00
^-({p/skin q/@} [%none (jam ham)])
2013-09-29 00:21:18 +04:00
::
++ weft :: fragment message
2015-12-20 23:50:45 +03:00
^- {p/(list rock) q/_+>.$}
2013-09-29 00:21:18 +04:00
=^ gim ..weft wisp
:_ +>.$
^- (list rock)
2015-03-20 01:19:19 +03:00
=+ wit=(met ?:(fak.ton 16 13) q.gim)
2013-09-29 00:21:18 +04:00
?< =(0 wit)
?: =(1 wit)
=+ yup=(spit [our her] p.gim q.gim)
[yup ~]
2015-03-20 01:19:19 +03:00
=+ ruv=(rip ?:(fak.ton 16 13) q.gim)
2013-09-29 00:21:18 +04:00
=+ gom=(shaf %thug q.gim)
=+ inx=0
|- ^- (list rock)
?~ ruv ~
=+ ^= vie
%+ spit
[our her]
wasp(ham [%carp (ksin p.gim) inx wit gom i.ruv])
:- vie
$(ruv t.ruv, inx +(inx))
::
++ wisp :: generate message
2015-12-20 23:50:45 +03:00
^- {{p/skin q/@} q/_..wisp}
2013-09-29 00:21:18 +04:00
?: =(%carp -.ham)
[wasp ..wisp]
?: !=(~ yed.caq.dur)
2013-12-24 00:49:15 +04:00
?> ?=(^ yed.caq.dur)
2013-09-29 00:21:18 +04:00
:_ ..wisp
:- %fast
%^ cat 7
p.u.yed.caq.dur
2013-09-29 00:21:18 +04:00
(en:r:cluy q.u.yed.caq.dur (jam ham))
?: &(=(~ lew.wod.dur) =(%back -.ham))
2013-09-29 00:21:18 +04:00
[wasp ..wisp]
=^ tuy +>.$
?:(=(~ lew.wod.dur) [*code +>.$] (griz now))
:_ ..wisp
=+ yig=sen
:: =+ bil=`will`(pare wyl.dur law.saf) :: XX not set
=+ bil=law.saf :: XX send whole will
=+ hom=(jam ham)
2013-09-29 00:21:18 +04:00
?: =(~ lew.wod.dur)
:- %open
%^ jam
[~ `life`p.yig]
bil
(sign:as:q.yig tuy hom)
2013-09-29 00:21:18 +04:00
:- %full
=+ cay=cluy
%^ jam
[`life`p.cay `life`p.yig]
bil
(seal:as:q.yig pub:ex:r.cay tuy hom)
2013-09-29 00:21:18 +04:00
-- :: --zuul:lax:as:go
-- :: --lax:as:go
::
2014-07-21 07:15:02 +04:00
++ gur :: default dore
2015-12-20 23:50:45 +03:00
|= her/ship
2014-07-21 07:15:02 +04:00
^- dore
2014-06-04 01:01:40 +04:00
=+ def=?.((lth her 256) ~ [~ %if ~2000.1.1 0 (mix her .0.0.1.0)])
2014-06-19 22:53:16 +04:00
[[~2100.1.1 def ~] ~ *clot]
2013-09-29 00:21:18 +04:00
::
2014-07-21 07:15:02 +04:00
++ myx :: dore by ship
2015-12-20 23:50:45 +03:00
|= her/ship
2013-09-29 00:21:18 +04:00
^+ lax
=+ fod=(~(get by hoc.saf) her)
~(. lax [her ?~(fod (gur her) u.fod)])
::
2014-07-21 07:15:02 +04:00
++ nux :: install dore
2015-12-20 23:50:45 +03:00
|= new/_lax
2013-09-29 00:21:18 +04:00
^+ +>
+>(hoc.saf (~(put by hoc.saf) her.new dur.new))
::
++ sen :: current crypto
2015-12-20 23:50:45 +03:00
^- {p/life q/acru}
2013-09-29 00:21:18 +04:00
?~(val.saf !! [p.i.val.saf r.i.val.saf])
::
++ sev :: crypto by life
2015-12-20 23:50:45 +03:00
|= mar/life
^- {p/? q/acru}
2013-09-29 00:21:18 +04:00
?~ val.saf !!
?: =(mar p.i.val.saf)
[& r.i.val.saf]
?> (lth mar p.i.val.saf)
:- |
2014-04-10 04:28:22 +04:00
|- ^- acru
2013-12-24 00:49:15 +04:00
?> ?=(^ t.val.saf)
?: =(mar p.i.t.val.saf)
r.i.t.val.saf
2013-09-29 00:21:18 +04:00
$(t.val.saf t.t.val.saf)
::
++ sex :: export secrets
|- ^- mace
?~ val.saf ~
:- [p.i.val.saf sec:ex:r.i.val.saf]
2013-09-29 00:21:18 +04:00
$(val.saf t.val.saf)
::
++ xen :: canon
|- ^- (list ship)
(saxo our)
::
++ yew :: best will for
2015-12-20 23:50:45 +03:00
|= her/ship
2013-09-29 00:21:18 +04:00
^- will
=+ gel=(~(get by hoc.saf) her)
?^ gel
lew.wod.u.gel
?:((lth her 256) ~ $(her (sein her)))
-- :: --as:go
::
2014-06-04 03:39:28 +04:00
++ ha !: :: adopt new license
2015-12-20 23:50:45 +03:00
|= {our/ship mac/mace wil/will}
2014-06-27 08:02:05 +04:00
^- town
?> !=(~ mac)
?> ?=(^ wil)
:: ?> =(our r.p.q.i.wil)
2013-09-29 00:21:18 +04:00
?> =(wil (grip wil ~))
?> (real mac wil)
%_ ton
2014-06-04 03:39:28 +04:00
fak r.i.wil
2013-09-29 00:21:18 +04:00
urb
%+ ~(put by urb.ton)
our
:* %- flop
|- ^- (list ship)
2013-09-29 00:21:18 +04:00
?:((lth our 256) ~ =+(seg=(sein our) [seg $(our seg)]))
::
2016-08-11 20:50:58 +03:00
(turn mac |=({p/life q/ring} [p q (nol:nu:crub q)]))
wil
2013-09-29 00:21:18 +04:00
~
~
==
==
::
++ su :: install safe
2015-12-20 23:50:45 +03:00
|= new/_as
2014-06-27 08:02:05 +04:00
^- town
2013-09-29 00:21:18 +04:00
ton(urb (~(put by urb.ton) our.new saf.new))
::
++ ti :: expire by time
2015-12-20 23:50:45 +03:00
|= now/@da
2014-06-27 08:02:05 +04:00
^- town
2013-09-29 00:21:18 +04:00
!!
::
++ us :: produce safe
2015-12-20 23:50:45 +03:00
|= our/ship
2015-12-15 01:21:10 +03:00
^- (unit _as)
2013-09-29 00:21:18 +04:00
=+ goh=(~(get by urb.ton) our)
?~ goh ~
[~ ~(. as [our u.goh])]
-- :: --go
--
::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 4aF, packet pump ::
|%
++ pu :: packet pump
|_ shed
++ abet +<
++ ahoy :: ahoy:pu
^+ . :: initialize
%_ .
rtt ~s1
rto ~s4
rtn ~
rue ~
nus 0
nif 0
nep 0
caw 2
cag 64
diq ~
pyz ~
puq ~
==
::
++ bick :: bick:pu
2015-12-20 23:50:45 +03:00
|= {now/@da fap/flap} :: ack by hash
^- {{p/(unit soup) q/(list rock)} _+>}
2013-09-29 00:21:18 +04:00
=+ sun=(~(get by diq) fap)
?~ sun
:: ~& [%bick-none `@p`(mug fap)] :: not a real error
[[~ ~] +>.$]
:: ~& [%bick-good `@p`(mug fap) u.sun]
=. diq (~(del by diq) fap)
=^ gub +>.$ (bock now u.sun)
=^ yop +>.$ (harv now)
[[gub yop] +>.$]
::
++ bilk :: bilk:pu
2015-12-20 23:50:45 +03:00
|= now/@da :: inbound packet
2013-09-29 00:21:18 +04:00
^+ +>
=+ trt=(mul 2 rtt)
%= +>.$
rue [~ now]
rto trt
rtn ?~(puq ~ [~ (add now trt)])
==
::
2013-10-09 22:55:23 +04:00
++ boom :: boom:pu
2015-12-20 23:50:45 +03:00
|= now/@da ^- ? :: address timeout
2015-12-08 10:35:55 +03:00
|(?=($~ rue) (gte (sub now u.rue) ~m1))
2013-10-09 22:55:23 +04:00
::
2013-09-29 00:21:18 +04:00
++ bust :: bust:pu
^- ? :: not responding
&(?=(^ rtn) (gte rto ~s16))
::
++ bike :: bike:pu
^+ . :: check stats
?> .= nif
|- ^- @
?~ puq 0
:(add !liv.q.n.puq $(puq l.puq) $(puq r.puq))
.
::
++ beet :: beet:pu
^+ . :: advance unacked
=- +(nep ?~(foh nus u.foh))
^= foh
2015-12-06 00:01:00 +03:00
|- ^- (unit @ud)
2013-09-29 00:21:18 +04:00
?~ puq ~
?: (lte p.n.puq nep) $(puq l.puq)
=+ rig=$(puq r.puq)
?^(rig rig [~ p.n.puq])
::
++ bine :: bine:pu
2015-12-20 23:50:45 +03:00
|= {now/@da num/@ud} :: apply ack
2015-12-15 01:21:10 +03:00
^- {(unit soup) _+>}
2013-09-29 00:21:18 +04:00
?~ puq !!
?. =(num p.n.puq)
?: (gth num p.n.puq)
=+ lef=$(puq l.puq)
[-.lef +.lef(puq [n.puq puq.lef r.puq])]
=+ rig=$(puq r.puq)
[-.rig +.rig(puq [n.puq l.puq puq.rig])]
=: rtt ?. &(liv.q.n.puq =(1 nux.q.n.puq)) rtt
=+ gap=(sub now lys.q.n.puq)
:: ~& [%bock-trip num (div gap (div ~s1 1.000))]
(div (add (mul 2 rtt) gap) 3)
nif (sub nif !liv.q.n.puq)
==
=+ lez=(dec (need (~(get by pyz) gom.q.n.puq)))
=^ gub pyz
?: =(0 lez)
2013-09-29 00:21:18 +04:00
[[~ gom.q.n.puq] (~(del by pyz) gom.q.n.puq)]
[~ (~(put by pyz) gom.q.n.puq lez)]
:- gub
+>.$(puq ~(nap to puq))
::
++ bock :: bock:pu
2015-12-20 23:50:45 +03:00
|= {now/@da num/@ud} :: ack by sequence
2015-12-15 01:21:10 +03:00
^- {(unit soup) _+>}
2013-09-29 00:21:18 +04:00
=^ gym +> (bine now num)
:- gym
?: (gth num nep)
=+ cam=(max 2 (div caw 2))
2013-09-29 00:21:18 +04:00
:: ~& [%bock-hole num nep cam]
beet:(wept(nep num, cag cam, caw cam) nep num)
=. caw ?: (lth caw cag) +(caw)
(add caw !=(0 (mod (mug now) caw)))
?: =(num nep)
2013-09-29 00:21:18 +04:00
:: ~& [%bock-fine num nif caw cag]
beet
:: ~& [%bock-fill num nif caw cag]
+>.$
2013-09-29 00:21:18 +04:00
::
++ harv :: harv:pu
2015-12-20 23:50:45 +03:00
|= now/@da :: harvest queue
2015-12-15 01:21:10 +03:00
^- {(list rock) _+>}
2013-09-29 00:21:18 +04:00
?: =(~ puq) [~ +>(rtn ~)]
?. (gth caw nif) [~ +>]
=+ wid=(sub caw nif)
2015-12-20 23:50:45 +03:00
=| rub/(list rock)
2013-09-29 00:21:18 +04:00
=< abet =< apse
|%
++ abet
2013-09-29 00:21:18 +04:00
?~ rub [~ +>.$]
[(flop rub) +>.$(rtn [~ (add rto now)])]
::
++ apse
^+ .
?~ puq .
?: =(0 wid) .
=> rigt =< left
2013-12-24 00:49:15 +04:00
?> ?=(^ puq)
2013-09-29 00:21:18 +04:00
?: =(0 wid) .
?. =(| liv.q.n.puq) .
:: ~& [%harv nux.q.n.puq p.n.puq]
%_ .
wid (dec wid)
rub [pac.q.n.puq rub]
nif +(nif)
liv.q.n.puq &
nux.q.n.puq +(nux.q.n.puq)
lys.q.n.puq now
==
::
++ left
2013-12-24 00:49:15 +04:00
?> ?=(^ puq)
^+(. =+(lef=apse(puq l.puq) lef(puq [n.puq puq.lef r.puq])))
++ rigt
2013-12-24 00:49:15 +04:00
?> ?=(^ puq)
^+(. =+(rig=apse(puq r.puq) rig(puq [n.puq l.puq puq.rig])))
2013-09-29 00:21:18 +04:00
--
::
++ wack :: wack:pu
2015-12-20 23:50:45 +03:00
|= now/@da :: wakeup (timeout)
2015-12-15 01:21:10 +03:00
^- {(list rock) _+>}
2013-12-24 00:49:15 +04:00
?. &(!=(~ rtn) ?>(?=(^ rtn) (gte now u.rtn))) [~ +>]
2013-09-29 00:21:18 +04:00
:: ~& [%slow (div rto (div ~s1 1.000))]
=. +> (wept 0 nus)
?> =(0 nif)
=+ oub=(gte rto ~s16)
=: caw 2
rto ;: min
(mul 2 rto)
2017-05-16 23:56:54 +03:00
~m2
(mul ~s16 ?~(rue 1 +((div (sub now u.rue) ~d1))))
2013-09-29 00:21:18 +04:00
==
==
(harv now)
::
++ wept :: wept:pu
2015-12-20 23:50:45 +03:00
|= {fip/@ud lap/@ud} :: fip thru lap-1
2013-09-29 00:21:18 +04:00
=< abet =< apse
|%
++ abet +>.$
++ apse
^+ .
?~ puq .
?: (lth p.n.puq fip) ?~(l.puq . left)
?: (gte p.n.puq lap) ?~(r.puq . rigt)
=> rigt =< left
2013-12-24 00:49:15 +04:00
?> ?=(^ puq)
2013-09-29 00:21:18 +04:00
?.(liv.q.n.puq . .(nif (dec nif), liv.q.n.puq |))
::
++ left
2013-12-24 00:49:15 +04:00
?> ?=(^ puq)
^+(. =+(lef=apse(puq l.puq) lef(puq [n.puq puq.lef r.puq])))
++ rigt
2013-12-24 00:49:15 +04:00
?> ?=(^ puq)
^+(. =+(rig=apse(puq r.puq) rig(puq [n.puq l.puq puq.rig])))
2013-09-29 00:21:18 +04:00
--
::
++ whap :: whap:pu
2015-12-20 23:50:45 +03:00
|= {now/@da gom/soup wyv/(list rock)} :: send a message
2015-12-15 01:21:10 +03:00
^- {(list rock) _+>}
2013-09-29 00:21:18 +04:00
=. pyz (~(put by pyz) gom (lent wyv))
=. +>
|- ^+ +>.^$
?~ wyv +>.^$
%= $
wyv t.wyv
nus +(nus)
diq (~(put by diq) (shaf %flap i.wyv) nus)
puq (~(put to puq) [nus `soul`[gom 0 | ~2000.1.1 i.wyv]])
==
(harv now)
--
--
::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 4aG, protocol engine ::
::
|%
++ am :: am
2015-12-20 23:50:45 +03:00
|_ {now/@da fox/fort} :: protocol engine
2013-09-29 00:21:18 +04:00
++ boot :: boot:am
2014-06-27 08:02:05 +04:00
^- fort :: restore from noun
2013-09-29 00:21:18 +04:00
%= fox
urb.ton
2014-04-10 04:28:22 +04:00
%- ~(gas by *(map ship sufi))
2013-09-29 00:21:18 +04:00
%+ turn
(~(tap by urb.ton.fox) ~)
2015-12-20 23:50:45 +03:00
|= {p/ship q/sufi} ^- {p/ship q/sufi}
2013-09-29 00:21:18 +04:00
:- p
%= q
val
2016-08-11 20:50:58 +03:00
(turn val.q |=({p/life q/ring r/acru} [p q (nol:nu:crub q)]))
2013-09-29 00:21:18 +04:00
==
==
++ come :: come:am
2015-12-20 23:50:45 +03:00
|= {ges/(unit @t) wid/@ bur/@ fak/?} :: instantiate pawn
^- {p/{p/ship q/@uvG} q/fort}
2016-08-11 20:50:58 +03:00
=+ loy=(pit:nu:crub wid bur)
2013-09-29 00:21:18 +04:00
=+ rig=sec:ex:loy
=+ our=`@p`fig:ex:loy
=+ syp=[[0 ~ our now] [%en %pawn ges] pub:ex:loy]
:- [our pac:ex:loy]
%_ fox
ton
%^ ~(ha go ton.fox)
our
`mace`[[0 rig] ~]
2014-10-31 06:13:40 +03:00
`will`[[(sign:as:loy *@ (shaf %self (sham syp))) syp fak] ~]
fak.ton
fak
2013-09-29 00:21:18 +04:00
==
::
2014-06-04 03:39:28 +04:00
++ czar !: :: czar:am
2015-12-20 23:50:45 +03:00
|= {our/ship ger/@uw fak/?} :: instantiate emperor
^- {p/(list boon) q/fort}
2016-08-11 20:50:58 +03:00
=+ loy=?:(fak (pit:nu:crub 512 our) (pit:nu:crub 512 ger)) :: fake uses carrier /
2014-06-04 03:39:28 +04:00
=+ fim==(fig:ex:loy (zeno our))
?: &(!fak !fim) !! :: not fake & bad fig
2013-09-29 00:21:18 +04:00
=+ mac=`mace`[[0 sec:ex:loy] ~]
=+ syp=`step`[`bray`[0 ~ our now] [%en %czar ~] pub:ex:loy]
2014-10-31 06:13:40 +03:00
=+ ded=`deed`[(sign:as:loy *@ (shaf %self (sham syp))) syp fak]
2013-09-29 00:21:18 +04:00
=+ buq=`buck`[mac [ded ~]]
=: ton.fox (~(ha go ton.fox) our buq)
2014-01-21 01:50:54 +04:00
zac.fox (~(put by zac.fox) our *corn)
2014-06-04 03:39:28 +04:00
fak.ton.fox fak
2013-09-29 00:21:18 +04:00
==
[[[%beer our pac:ex:loy] ~] fox]
::
++ gnaw :: gnaw:am
2015-12-20 23:50:45 +03:00
|= {kay/cape ryn/lane pac/rock} :: process packet
^- {p/(list boon) q/fort}
?. =(6 (end 0 3 pac)) [~ fox]
2013-09-29 00:21:18 +04:00
=+ kec=(bite pac)
2013-10-08 09:56:57 +04:00
?: (goop p.p.kec) [~ fox]
2013-09-29 00:21:18 +04:00
?. (~(has by urb.ton.fox) q.p.kec)
[~ fox]
=< zork
=< zank
2014-05-29 23:20:27 +04:00
:: ~& [%hear p.p.kec ryn `@p`(mug (shaf %flap pac))]
2013-09-29 00:21:18 +04:00
%- ~(chew la:(ho:(um q.p.kec) p.p.kec) kay ryn %none (shaf %flap pac))
[q.kec r.kec]
::
2015-05-07 05:00:58 +03:00
++ goop :: blacklist
2015-12-20 23:50:45 +03:00
|= him/ship
2013-10-10 21:58:41 +04:00
|
2013-10-08 09:56:57 +04:00
::
2013-09-29 00:21:18 +04:00
++ hall :: hall:am
^- (list sock) :: all sockets
2015-12-20 23:50:45 +03:00
=| sox/(list sock) :: XX hideous
|- ^+ sox
2013-09-29 00:21:18 +04:00
?~ zac.fox sox
=. sox $(zac.fox l.zac.fox)
=. sox $(zac.fox r.zac.fox)
|- ^+ sox
?~ wab.q.n.zac.fox sox
=. sox $(wab.q.n.zac.fox l.wab.q.n.zac.fox)
=. sox $(wab.q.n.zac.fox r.wab.q.n.zac.fox)
2013-09-29 00:21:18 +04:00
[[p.n.zac.fox p.n.wab.q.n.zac.fox] sox]
::
++ have :: have:am
2015-12-20 23:50:45 +03:00
|= {our/ship buq/buck} :: acquire license
^- {p/(list boon) q/fort}
2013-09-29 00:21:18 +04:00
=: ton.fox (~(ha go ton.fox) our buq)
2014-01-21 01:50:54 +04:00
zac.fox (~(put by zac.fox) our *corn)
2013-09-29 00:21:18 +04:00
==
[[[%beer our pac:ex:q:sen:(need (~(us go ton.fox) our))] ~] fox]
::
++ kick :: kick:am
2015-12-20 23:50:45 +03:00
|= hen/duct :: refresh net
=+ aks=(turn (~(tap by urb.ton.fox) ~) |=({p/ship q/sufi} p))
|- ^- {p/(list boon) q/fort}
2013-09-29 00:21:18 +04:00
?~ aks [~ fox]
=^ buz fox zork:(kick:(um i.aks) hen)
=^ biz fox $(aks t.aks)
[(weld p.buz p.biz) fox]
::
2014-07-24 06:02:50 +04:00
++ rack :: rack:am
2015-12-20 23:50:45 +03:00
|= {soq/sock cha/path cop/coop} :: e2e ack
2014-07-24 06:02:50 +04:00
=+ oh=(ho:(um p.soq) q.soq)
2014-11-26 04:02:48 +03:00
=^ gud oh (cook:oh cop cha ~)
?. gud oh
2014-07-24 06:02:50 +04:00
(cans:oh cha)
::
2013-09-29 00:21:18 +04:00
++ wake :: wake:am
2015-12-20 23:50:45 +03:00
|= hen/duct :: harvest packets
^- {p/(list boon) q/fort}
2013-09-29 00:21:18 +04:00
=+ sox=hall
2015-12-20 23:50:45 +03:00
=| bin/(list boon)
|- ^- {p/(list boon) q/fort}
?~ sox
2013-10-09 22:55:23 +04:00
=^ ban fox (kick hen)
[(weld bin p.ban) fox]
2013-09-29 00:21:18 +04:00
=^ bun fox zork:zank:thaw:(ho:(um p.i.sox) q.i.sox)
$(sox t.sox, bin (weld p.bun bin))
::
++ wise :: wise:am
2017-05-22 02:32:33 +03:00
|= {soq/sock hen/duct cha/path val/*} :: send a statement
2015-12-20 23:50:45 +03:00
^- {p/(list boon) q/fort}
2017-05-22 02:32:33 +03:00
zork:zank:(wool:(ho:(um p.soq) q.soq) hen cha val)
2013-09-29 00:21:18 +04:00
::
++ um :: per server
2015-12-20 23:50:45 +03:00
|= our/ship
2013-09-29 00:21:18 +04:00
=+ gus=(need (~(us go ton.fox) our))
2014-01-21 01:50:54 +04:00
=+ ^= weg ^- corn
2013-09-29 00:21:18 +04:00
=+ weg=(~(get by zac.fox) our)
2014-01-21 01:50:54 +04:00
?^(weg u.weg *corn)
2015-12-20 23:50:45 +03:00
=| bin/(list boon)
2013-09-29 00:21:18 +04:00
|%
++ ho :: ho:um:am
2015-12-20 23:50:45 +03:00
|= her/ship :: per friend
2013-09-29 00:21:18 +04:00
=+ diz=(myx:gus her)
=+ bah=(~(get by wab.weg) her)
=+ puz=?~(bah ahoy:pu %*(. pu +< sop.u.bah))
=> .(bah `bath`?~(bah [abet:puz ~ ~] u.bah))
|%
++ busk :: busk:ho:um:am
2015-12-20 23:50:45 +03:00
|= {waz/(list ship) pax/(list rock)} :: send packets
2013-09-29 00:21:18 +04:00
%_ +>
bin
|- ^+ bin
?~ pax bin
$(pax t.pax, bin (weld (flop (wist:diz now waz ~ i.pax)) bin))
==
::
2014-07-24 06:02:50 +04:00
++ cans :: cans:ho:um:am
2015-12-20 23:50:45 +03:00
|= cha/path
2014-07-24 06:02:50 +04:00
=+ rum=(need (~(get by raz.bah) cha))
=. rum
%= rum
did +(did.rum)
2014-07-26 06:10:24 +04:00
mis (~(del by mis.rum) did.rum)
2014-07-24 06:02:50 +04:00
==
(coat cha rum)
::
++ coat :: coat:ho:um:am
2015-12-20 23:50:45 +03:00
|= {cha/path rum/race} :: update input race
2014-07-24 06:02:50 +04:00
^+ +>
=+ cun=(~(get by mis.rum) did.rum)
?~ cun
+>.$(raz.bah (~(put by raz.bah) cha rum))
?. =(%good p.u.cun) +>.$
2014-07-26 06:10:24 +04:00
?> ?=(^ s.u.cun)
%= +>.$
raz.bah (~(put by raz.bah) cha rum(dod |))
2014-07-24 06:02:50 +04:00
bin
:_ bin
:^ %milk
2014-07-24 06:02:50 +04:00
[our her]
`soap`[[p:sen:gus clon:diz] cha did.rum]
2014-07-26 06:10:24 +04:00
u.s.u.cun
2014-07-24 06:02:50 +04:00
==
::
++ cook :: cook:ho:um:am
2015-12-20 23:50:45 +03:00
|= {cop/coop cha/path ram/(unit {ryn/lane dam/flap})}
^- {gud/? con/_+>} :: acknowledgment
2014-07-26 06:10:24 +04:00
:: ~& [%cook cop num cha ram]
2014-07-24 06:02:50 +04:00
=+ rum=(need (~(get by raz.bah) cha))
=+ lat=(~(get by mis.rum) did.rum)
2015-12-08 10:35:55 +03:00
?: &(?=($~ lat) ?=($~ ram))
2014-11-26 04:02:48 +03:00
~& %ack-late-or-redundant
[%| +>.$]
:- %&
2015-12-20 23:50:45 +03:00
=+ ^- {ryn/lane dam/flap}
2014-07-26 06:10:24 +04:00
?^ ram [ryn.u.ram dam.u.ram]
2015-12-08 10:35:55 +03:00
?< ?=($~ lat)
[q r]:u.lat
2014-07-26 06:10:24 +04:00
=. raz.bah
2014-08-01 06:44:49 +04:00
?^ ram raz.bah
2014-07-26 06:10:24 +04:00
%+ ~(put by raz.bah) cha
2014-08-01 06:44:49 +04:00
rum(dod &, bum ?~(cop bum.rum (~(put by bum.rum) did.rum u.cop)))
=^ roc diz (zuul:diz now [%back cop dam ~s0])
2014-07-24 06:02:50 +04:00
(busk(diz (wast:diz ryn)) xong:diz roc)
::
2013-09-29 00:21:18 +04:00
++ done :: done:ho:um:am
2015-12-20 23:50:45 +03:00
|= {cha/path num/@ud} :: complete outgoing
2015-12-15 01:21:10 +03:00
^- {(unit duct) _+>}
2013-09-29 00:21:18 +04:00
=+ rol=(need (~(get by ryl.bah) cha))
=+ rix=(~(get by san.rol) num)
?~ rix [~ +>.$]
:- rix
%_ +>.$
ryl.bah
2013-09-29 00:21:18 +04:00
(~(put by ryl.bah) cha rol(san (~(del by san.rol) num)))
==
::
++ la :: la:ho:um:am
2015-12-20 23:50:45 +03:00
|_ {kay/cape ryn/lane aut/skin dam/flap} :: per packet
2013-09-29 00:21:18 +04:00
::
++ chew :: chew:la:ho:um:am
2015-12-20 23:50:45 +03:00
|= {sin/skin msg/@} :: receive
2013-09-29 00:21:18 +04:00
^+ +>
=< apse
|%
2013-09-29 00:21:18 +04:00
++ apse
^+ +>.$
=+ oub=bust:puz
=+ neg==(~ yed.caq.dur.diz)
=. +>.$ east
=+ eng==(~ yed.caq.dur.diz)
=+ bou=bust:puz
=. bin
?. &(oub !bou) bin
2013-09-29 00:21:18 +04:00
:_(bin [%wine [our her] " is ok"])
=. bin
?. &(neg !eng) bin
:_(bin [%wine [our her] " is your neighbor"])
+>.$
::
++ east
^+ +>.$
?- sin
2015-12-06 00:01:00 +03:00
$none
2013-09-29 00:21:18 +04:00
:: ~& %chew-none
2013-12-28 05:21:11 +04:00
=. puz (bilk:puz now)
2013-09-29 00:21:18 +04:00
(chow ((hard meal) (cue msg)))
::
2015-12-06 00:01:00 +03:00
$fast
2013-09-29 00:21:18 +04:00
:: ~& %chew-fast
=+ [mag=`hand`(end 7 1 msg) bod=(rsh 7 1 msg)]
=+ dey=(kuch:diz mag)
?~ dey
2014-09-26 22:32:21 +04:00
:: ~& [%bad-key her mag]
2013-12-29 08:59:45 +04:00
+>.$ :: ignore unknown key
2013-12-28 05:21:11 +04:00
=. puz (bilk:puz now)
2013-09-29 00:21:18 +04:00
=^ key diz u.dey
(chow(aut sin) ((hard meal) (cue (dy:q:sen:gus key bod))))
::
2015-12-06 00:01:00 +03:00
$full
2013-09-29 00:21:18 +04:00
:: ~& %chew-full
2015-12-20 23:50:45 +03:00
=+ mex=((hard {p/{p/life q/life} q/will r/@}) (cue msg))
=. diz (deng:diz q.mex)
=+ wug=cluy:diz
?> =(q.p.mex p.wug)
=+ gey=(sev:gus p.p.mex)
=+ mes=(need (tear:as:q.gey pub:ex:r.wug r.mex))
2013-09-29 00:21:18 +04:00
=. diz (wasc:diz p.mes)
2013-12-28 05:21:11 +04:00
=. puz (bilk:puz now)
(west(msg q.mes))
2013-09-29 00:21:18 +04:00
::
2015-12-06 00:01:00 +03:00
$open
2013-09-29 00:21:18 +04:00
:: ~& %chew-open
2015-12-20 23:50:45 +03:00
=+ mex=((hard {p/{$~ q/life} q/will r/@}) (cue msg))
=. diz (deng:diz q.mex)
=+ wug=cluy:diz
?> =(q.p.mex p.wug)
=+ mes=(need (sure:as:r.wug *code r.mex))
2013-12-28 05:21:11 +04:00
=. puz (bilk:puz now)
(west(msg mes))
2013-09-29 00:21:18 +04:00
==
++ west
2015-12-08 10:35:55 +03:00
|= $~
=+ vib=(cue msg)
=+ mal=(meal vib)
?. =(mal vib)
2013-10-08 06:04:08 +04:00
~& [%bad-meal her]
+>.^$
(chow(aut sin) mal)
2013-09-29 00:21:18 +04:00
--
::
++ chow :: chow:la:ho:um:am
2015-12-20 23:50:45 +03:00
|= fud/meal :: interpret meal
2013-09-29 00:21:18 +04:00
^+ +>
=. diz ?:(=(%none aut) diz (wast:diz ryn))
(dine fud)
::
++ cuck :: cuck:la:ho:um:am
^+ . :: send new ack
2013-09-29 00:21:18 +04:00
:: ~& [%back kay dam]
=* cop `coop`?:(=(%good kay) ~ ``[%dead-packet ~])
=^ pax diz (zuul:diz now [%back cop dam ~s0])
2013-09-29 00:21:18 +04:00
+(+> (busk(diz (wast:diz ryn)) xong:diz pax))
::
2014-07-24 06:02:50 +04:00
++ deer :: deer:la:ho:um:am
2015-12-20 23:50:45 +03:00
|= {cha/path num/@ud dut/(unit)} :: interpret message
2014-07-24 06:02:50 +04:00
^+ +>
2017-05-17 20:32:32 +03:00
::
:: these patches are both hacks and result in
:: unnecessary transmissions. but they should
:: solve the problem that needs to be solved:
:: acknowledging messages after a bad skip.
::
=. kay ?.((~(has in bad.fox) her) kay %dead)
=. +> ?.(=(%dead kay) +> cuck)
2014-07-26 06:10:24 +04:00
=+ rum=(fall (~(get by raz.bah) cha) *race)
2014-07-24 06:02:50 +04:00
%= +>.$
+>
2014-07-26 06:10:24 +04:00
?. (gte num did.rum) :: always ack a dup
:: ~& [%deer-1 num]
2014-11-26 04:02:48 +03:00
con:(cook (~(get by bum.rum) num) cha ~ ryn dam)
2014-07-26 06:10:24 +04:00
?: dod.rum
:: ~& [%deer-2 num]
(coat cha rum(mis (~(put by mis.rum) num [kay ryn dam dut])))
:: ~& [%deer-3 num]
%= +>.+>.$
raz.bah
%+ ~(put by raz.bah) cha
rum(mis (~(put by mis.rum) num [kay ryn dam dut]))
==
2014-07-24 06:02:50 +04:00
==
2013-09-29 00:21:18 +04:00
::
++ dine :: dine:la:ho:um:am
2015-12-20 23:50:45 +03:00
|= fud/meal :: interpret meal
2013-09-29 00:21:18 +04:00
^+ +>
?- -.fud
$back
=. +> ?.(=(%full aut) +> cuck) :: finish key exch
2014-07-24 06:02:50 +04:00
+>(..la (tock p.fud q.fud r.fud))
::
$bond
:: ~& [%bond q.fud r.fud]
2014-07-24 06:02:50 +04:00
?> =(p:sen:gus p.fud)
2015-12-06 00:01:00 +03:00
(deer q.fud r.fud ?-(kay $dead ~, $good [~ s.fud]))
2013-09-29 00:21:18 +04:00
::
2015-12-06 00:01:00 +03:00
$carp
2015-06-07 08:00:18 +03:00
:: =+ zol=(~(get by olz.weg) s.fud)
:: ?^ zol cuck(kay u.zol)
2013-09-29 00:21:18 +04:00
=^ neb nys.weg
=+ neb=(~(get by nys.weg) s.fud)
?^ neb [u.neb nys.weg]
=+ neb=`bait`[(kins p.fud) 0 r.fud ~]
[neb (~(put by nys.weg) s.fud neb)]
?> (lth q.fud p.r.neb)
?> =((kins p.fud) p.neb)
?> =(r.fud p.r.neb)
2015-12-06 00:01:00 +03:00
=+ doy=`(unit @)`(~(get by q.r.neb) q.fud)
?^ doy cuck
2013-09-29 00:21:18 +04:00
=> ^+ . %= .
q.r.neb (~(put by q.r.neb) q.fud t.fud)
q.neb +(q.neb)
==
:: ~& [%carp q.fud s.fud q.neb p.r.neb]
?: =(q.neb p.r.neb)
=: nys.weg (~(del by nys.weg) s.fud)
2015-06-07 08:00:18 +03:00
:: olz.weg (~(put by olz.weg) s.fud kay)
2013-09-29 00:21:18 +04:00
==
(golf p.neb r.neb)
=. +>.$ cuck
2013-09-29 00:21:18 +04:00
+>.$(nys.weg (~(put by nys.weg) s.fud neb))
::
2015-12-06 00:01:00 +03:00
$fore
2013-09-29 00:21:18 +04:00
=+ ^= lyn ^- lane
?~ q.fud ryn
2015-12-06 00:01:00 +03:00
?. ?=($if -.u.q.fud) u.q.fud
2014-06-04 01:01:40 +04:00
[%ix +.u.q.fud]
2013-09-29 00:21:18 +04:00
:: u.q.fud
?: =(our p.fud)
(emit %mead lyn r.fud)
2013-09-29 00:21:18 +04:00
=+ zid=(myx:gus p.fud)
(emir (wist:zid now xong:zid [~ lyn] r.fud))
==
::
++ emir :: emir:la:ho:um:am
2015-12-20 23:50:45 +03:00
|= ben/(list boon) :: emit boons
2013-09-29 00:21:18 +04:00
^+ +>
?~(ben +> $(ben t.ben, bin [i.ben bin]))
::
++ emit :: emit:la:ho:um:am
2015-12-20 23:50:45 +03:00
|= bun/boon :: emit a boon
+>(bin [bun bin])
2013-09-29 00:21:18 +04:00
::
++ golf :: golf:la:ho:um:am
2015-12-20 23:50:45 +03:00
|= {sin/skin duv/dove} :: assemble fragments
2013-09-29 00:21:18 +04:00
^+ +>
%+ chew sin
2015-12-08 10:35:55 +03:00
=+ [nix=0 rax=*(list @)]
2013-09-29 00:21:18 +04:00
|- ^- @
?: =(p.duv nix)
2015-12-20 23:50:45 +03:00
(can ?:(fak.ton.fox 16 13) (turn (flop rax) |=(a/@ [1 a])))
2013-09-29 00:21:18 +04:00
$(nix +(nix), rax [(need (~(get by q.duv) nix)) rax])
-- :: --la:ho:um:am
::
++ pong :: pong:ho:um:am
2015-12-20 23:50:45 +03:00
|= hen/duct :: test connection
2013-10-09 22:55:23 +04:00
^+ +>
?. ?& =(~ puq.puz)
?| bust:puz
2015-12-08 10:35:55 +03:00
?=($~ rue.puz)
2013-10-09 22:55:23 +04:00
(gth now (add ~s32 u.rue.puz))
(lth u.rue.puz hop.fox)
==
2014-04-23 21:02:36 +04:00
==
+>.$
2015-06-04 02:07:17 +03:00
(wool [/a/ping hen] /q/pi ~ |)
2013-09-29 00:21:18 +04:00
::
++ thaw :: thaw:ho:um:am
^+ . :: wakeup bomb
=+ oub=bust:puz
=^ yem puz (wack:puz now)
=+ bou=bust:puz
=. bin
?. &(bou !oub) bin
2014-11-21 01:26:31 +03:00
:_(bin [%wine [our her] " not responding still trying"])
=. diz ?:((boom:puz now) (pode:diz now) diz)
2013-09-29 00:21:18 +04:00
(busk xong:diz yem)
::
2014-07-24 06:02:50 +04:00
++ tock :: tock:ho:um:am
2015-12-20 23:50:45 +03:00
|= {cop/coop fap/flap cot/@dr} :: e2e ack by hash
2014-07-24 06:02:50 +04:00
^+ +>
=^ yoh puz (bick:puz now fap)
=. +>.$
?~ p.yoh +>.$
=^ hud +>.$
(done p.u.p.yoh q.u.p.yoh)
?~ hud +>.$
%= +>.$
bin
:_ bin
`boon`[%cake [our her] [[p:sen:gus clon:diz] u.p.yoh] cop u.hud]
==
(busk xong:diz q.yoh)
::
2013-09-29 00:21:18 +04:00
++ wind :: wind:ho:um:am
2015-12-20 23:50:45 +03:00
|= {gom/soup ham/meal}
2013-09-29 00:21:18 +04:00
:: ~& [%wind her gom]
^+ +>
=^ wyv diz (zuul:diz now ham)
=^ feh puz (whap:puz now gom wyv)
(busk xong:diz feh)
::
++ wool :: wool:ho:um:am
2017-05-22 02:32:33 +03:00
|= {hen/duct cha/path val/*} :: send a statement
2013-09-29 00:21:18 +04:00
^+ +>
=+ ^= rol ^- rill
=+ rol=(~(get by ryl.bah) cha)
?~(rol *rill u.rol)
=+ sex=sed.rol
2013-11-14 02:41:08 +04:00
:: ~& [%tx [our her] cha sex]
=. ryl.bah
2013-09-29 00:21:18 +04:00
%+ ~(put by ryl.bah) cha
rol(sed +(sed.rol), san (~(put by san.rol) sex hen))
=+ cov=[p=p:sen:gus q=clon:diz]
2014-07-24 06:02:50 +04:00
%+ wind [cha sex]
[%bond q.cov cha sex val]
2013-09-29 00:21:18 +04:00
::
2013-10-08 09:56:57 +04:00
++ zest :: zest:ho:um:am
2013-10-10 06:45:57 +04:00
:~ :~ :* [%rtt rtt.sop.bah]
[%rto rto.sop.bah]
[%rtn rtn.sop.bah]
[%rue rue.sop.bah]
==
:* [%nus nus.sop.bah]
[%nif nif.sop.bah]
[%nep nep.sop.bah]
[%caw caw.sop.bah]
[%cag cag.sop.bah]
==
=+ qup=(~(tap to puq.sop.bah) ~)
:- %qup
%+ turn qup
2015-12-20 23:50:45 +03:00
|= {a/@ud b/soul}
:* a
2013-10-10 06:45:57 +04:00
nux.b
liv.b
lys.b
`@p`(mug (shaf %flap pac.b))
gom.b
==
==
::
:- %raz
=+ zar=(~(tap by raz.bah) ~)
%+ turn zar
2015-12-20 23:50:45 +03:00
|= {a/path b/race}
2013-10-10 06:45:57 +04:00
:+ a
did.b
=+ ciy=(~(tap by mis.b) ~)
%+ turn ciy
2015-12-20 23:50:45 +03:00
|= {c/@ud d/{p/cape q/lane r/flap s/(unit)}}
2014-07-26 06:10:24 +04:00
[c p.d r.d]
2013-10-10 06:45:57 +04:00
::
[%ryl (~(tap to ryl.bah) ~)]
[%lun lun.wod.dur.diz]
2013-10-10 06:45:57 +04:00
[%caq caq.dur.diz]
[%lew lew.wod.dur.diz]
==
2013-10-08 09:56:57 +04:00
::
2013-09-29 00:21:18 +04:00
++ zank :: zank:ho:um:am
%= +>.$ :: resolve
gus (nux:gus diz)
wab.weg (~(put by wab.weg) her bah(sop abet:puz))
==
-- :: --ho:um:am
::
++ kick :: kick:um:am
2015-12-20 23:50:45 +03:00
|= hen/duct :: test connection
2013-10-09 22:55:23 +04:00
^+ +>
2013-09-29 00:21:18 +04:00
=+ hoy=hoy.saf.gus
|- ^+ +>.^$
?~ hoy
+>.^$
2013-10-09 22:55:23 +04:00
$(hoy t.hoy, +>.^$ (pong i.hoy hen))
2013-09-29 00:21:18 +04:00
::
++ pals :: pals:um:am
2015-12-06 00:01:00 +03:00
^- (list @p) :: active neighbors
%+ turn
2013-10-10 00:28:49 +04:00
%+ skim (~(tap by wab.weg) ~)
2015-12-20 23:50:45 +03:00
|= {a/ship b/bath}
2013-10-10 00:28:49 +04:00
!(~(boom pu sop.b) now)
2015-12-20 23:50:45 +03:00
|=({a/ship b/bath} a)
2013-09-29 00:21:18 +04:00
::
++ pong :: pong:um:am
2015-12-20 23:50:45 +03:00
|= {her/ship hen/duct} :: test neighbor
2013-10-09 22:55:23 +04:00
^+ +>
zank:(pong:(ho her) hen)
2013-09-29 00:21:18 +04:00
::
++ zork :: zork:um:am
2015-12-20 23:50:45 +03:00
^- {p/(list boon) q/fort} :: resolve
2013-09-29 00:21:18 +04:00
:- (flop bin)
%_ fox
ton (~(su go ton.fox) gus)
zac (~(put by zac.fox) our.gus weg)
==
-- :: --um:am
-- :: --am
--
2014-01-04 11:28:16 +04:00
. ==
2013-09-29 00:21:18 +04:00
::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 4aH, protocol vane ::
::
2015-12-20 23:50:45 +03:00
=| $: fox/fort :: kernel state
2013-09-29 00:21:18 +04:00
== ::
|= {now/@da eny/@ ski/sley} :: current invocation
2013-09-29 00:21:18 +04:00
^? :: opaque core
=<
2013-09-29 00:21:18 +04:00
|% :: vane interface
2014-06-06 03:48:13 +04:00
++ call :: handle request
2015-12-20 23:50:45 +03:00
|= $: hen/duct
hic/(hypo (hobo kiss-ames))
2014-06-06 03:48:13 +04:00
==
=> %= . :: XX temporary
q.hic
2015-05-12 23:10:22 +03:00
^- kiss-ames
2015-12-06 00:01:00 +03:00
?: ?=($soft -.q.hic)
2015-05-12 23:10:22 +03:00
((hard kiss-ames) p.q.hic)
?: (~(nest ut -:!>(*kiss-ames)) | p.hic) q.hic
2015-12-08 10:35:55 +03:00
~& [%ames-call-flub (@tas `*`-.q.hic)]
2015-05-12 23:10:22 +03:00
((hard kiss-ames) q.hic)
2014-06-06 03:48:13 +04:00
==
2015-12-20 23:50:45 +03:00
^- {p/(list move) q/_..^$}
2014-06-06 03:48:13 +04:00
=^ duy ..knob
(knob hen q.hic)
2013-09-29 00:21:18 +04:00
[duy ..^$]
::
++ doze
2015-12-20 23:50:45 +03:00
|= {now/@da hen/duct}
2015-12-08 10:35:55 +03:00
=+ doz=`(unit @da)`[~ (add now ~s32)]
2013-09-29 00:21:18 +04:00
|- ^+ doz
?~ zac.fox doz
=. doz $(zac.fox l.zac.fox)
=. doz $(zac.fox r.zac.fox)
=+ yem=q.n.zac.fox
|- ^+ doz
?~ wab.yem doz
=. doz $(wab.yem l.wab.yem)
=. doz $(wab.yem r.wab.yem)
=+ bah=q.n.wab.yem
(hunt doz rtn.sop.bah)
::
++ load
2017-05-16 23:56:54 +03:00
|= old/?(fort furt)
2015-05-07 05:00:58 +03:00
~& %ames-reload
2017-05-16 23:56:54 +03:00
%_ ..^$
fox
?- -.old
$0 [%1 gad.old hop.old ~ ton.old zac.old]
$1 old
==
==
2013-09-29 00:21:18 +04:00
::
++ scry
2015-12-20 23:50:45 +03:00
|= {fur/(unit (set monk)) ren/@tas who/ship syd/desk lot/coin tyl/path}
2015-02-27 09:35:41 +03:00
^- (unit (unit cage))
2014-05-31 08:58:37 +04:00
?~ tyl [~ ~]
=+ hun=(slaw %p i.tyl)
?~ hun [~ ~]
2016-01-25 06:37:41 +03:00
?. =(`@`0 ren) ~
2013-09-29 00:21:18 +04:00
?+ lot ~
2015-12-08 10:35:55 +03:00
{$$ $ud @}
(perm who u.hun q.p.lot [syd t.tyl])
2013-09-29 00:21:18 +04:00
::
2015-12-08 10:35:55 +03:00
{$$ $da @}
2013-09-29 00:21:18 +04:00
?. =(now q.p.lot) ~
(temp who u.hun [syd t.tyl])
2013-09-29 00:21:18 +04:00
==
::
2014-05-31 23:40:02 +04:00
++ stay fox
2014-06-06 03:48:13 +04:00
++ take :: accept response
2015-12-20 23:50:45 +03:00
|= {tea/wire hen/duct hin/(hypo sign)}
^- {p/(list move) q/_..^$}
2014-06-06 03:48:13 +04:00
=^ duy ..knap
2014-06-22 02:06:42 +04:00
(knap tea hen q.hin)
2014-06-06 03:48:13 +04:00
[duy ..^$]
2013-09-29 00:21:18 +04:00
--
|%
2015-12-20 23:50:45 +03:00
++ claw |=(our/ship ^-(duct hen:(need (~(get by zac.fox) our))))
2013-09-29 00:21:18 +04:00
++ clop
2015-12-20 23:50:45 +03:00
|= {now/@da hen/duct bon/boon}
2015-12-06 00:01:00 +03:00
^- {(list move) fort}
2013-09-29 00:21:18 +04:00
?- -.bon
2015-12-06 00:01:00 +03:00
$beer
2014-01-21 01:50:54 +04:00
:_ fox(zac (~(put by zac.fox) p.bon `corn`[hen ~ ~ ~]))
2014-05-26 00:35:07 +04:00
:* [hen [%slip %c %init p.bon]]
2014-05-24 00:46:43 +04:00
[hen [%give %init p.bon]]
2014-05-26 00:35:07 +04:00
[hen [%slip %a %kick now]]
[hen [%slip %e %init p.bon]]
2014-06-14 01:47:08 +04:00
[hen [%slip %g %init p.bon]]
2014-10-22 06:59:05 +04:00
[hen [%slip %d %init p.bon]] :: must be after gall
~
2013-09-29 00:21:18 +04:00
==
2014-07-24 06:02:50 +04:00
::
2015-12-06 00:01:00 +03:00
$cake
2014-07-24 06:02:50 +04:00
:_ fox
:~ [s.bon %give %woot q.p.bon r.bon]
==
2013-09-29 00:21:18 +04:00
::
2015-12-06 00:01:00 +03:00
$mead :_(fox [[hen [%give %hear p.bon q.bon]] ~])
$milk
:: ~& [%milk p.bon q.bon]
2015-12-06 00:01:00 +03:00
?> ?=({@ @ *} q.q.bon)
?> ?=(?($a $c $e $g) i.q.q.bon)
2015-06-23 00:02:27 +03:00
=+ pax=[(scot %p p.p.bon) (scot %p q.p.bon) q.q.bon]
:_ fox [hen %pass pax i.q.q.bon %west p.bon t.q.q.bon r.bon]~
2013-09-29 00:21:18 +04:00
::
2015-12-06 00:01:00 +03:00
$ouzo
2014-07-12 03:44:33 +04:00
:: ~& [%send now p.bon `@p`(mug (shaf %flap q.bon))]
2013-09-29 00:21:18 +04:00
:_ fox
[[gad.fox [%give %send p.bon q.bon]] ~]
::
2015-12-06 00:01:00 +03:00
$wine
2013-09-29 00:21:18 +04:00
:_ fox
=+ fom=~(rend co %$ %p q.p.bon)
2014-05-24 00:46:43 +04:00
:~ :- hen
2014-05-26 00:35:07 +04:00
:+ %slip %d
2013-09-29 00:21:18 +04:00
:+ %flog %text
;: weld
"; "
fom
2013-09-29 00:21:18 +04:00
q.bon
==
==
==
::
++ knap
2015-12-20 23:50:45 +03:00
|= {tea/wire hen/duct sih/sign}
2015-12-15 01:21:10 +03:00
^- {(list move) _+>}
2014-06-22 02:06:42 +04:00
?- +<.sih
2015-12-06 00:01:00 +03:00
$crud [[[hen [%slip %d %flog +.sih]] ~] +>]
$mack ?~ +>.sih $(sih [%g %nice ~]) :: XX using old code
2015-05-07 05:00:58 +03:00
$(sih [%g %mean `[%mack +>+.sih]])
2015-12-06 00:01:00 +03:00
$unto [~ +>]
?($mean $nice) :: XX obsolete
?: ?=({$ye $~} tea)
2014-11-23 09:10:35 +03:00
[~ +>.$]
2015-12-06 00:01:00 +03:00
?> ?=({@ @ @ *} tea)
2014-07-24 06:02:50 +04:00
=+ soq=[(slav %p i.tea) (slav %p i.t.tea)]
2014-08-01 06:44:49 +04:00
=+ pax=t.t.tea
2014-07-24 06:02:50 +04:00
=+ ^= fuy
=< zork =< zank
2014-08-27 05:45:26 +04:00
%^ ~(rack am [now fox]) soq pax
2015-05-07 05:00:58 +03:00
:: ~& [%knap-ack ?-(+<.sih %mean `p.+.sih, %nice ~)]
2015-12-06 00:01:00 +03:00
?-(+<.sih $mean `p.+.sih, $nice ~)
2014-07-24 06:02:50 +04:00
=> %_(. fox q.fuy)
2015-12-20 23:50:45 +03:00
=| out/(list move)
|- ^- {p/(list move) q/_+>.^$}
2014-07-24 06:02:50 +04:00
?~ p.fuy
[(flop out) +>.^$]
=^ toe fox (clop now hen i.p.fuy)
$(p.fuy t.p.fuy, out (weld (flop toe) out))
2014-06-06 23:11:36 +04:00
==
2014-06-06 03:48:13 +04:00
::
++ knob
2015-12-20 23:50:45 +03:00
|= {hen/duct kyz/kiss-ames}
2015-12-15 01:21:10 +03:00
^- {(list move) _+>}
2015-12-06 00:01:00 +03:00
?: ?=($crud -.kyz)
2014-06-06 03:48:13 +04:00
[[[hen [%slip %d %flog kyz]] ~] +>]
2015-12-06 00:01:00 +03:00
?: ?=($west -.kyz)
?> ?=({$ta $~} q.kyz)
2015-12-20 23:50:45 +03:00
=+ gox=((hard {p/@p q/@pG r/gens s/pass}) r.kyz)
2015-06-23 03:47:19 +03:00
=+ gus=(need (~(us go ton.fox) p.p.kyz))
=^ wyl gus (born:gus now gox)
=. ton.fox (~(su go ton.fox) gus)
:_ +>.$
=+ ^= pax
:+ (scot %p p.p.kyz)
(scot %p q.p.kyz)
q.kyz
[hen %pass pax %g %deal p.kyz %hood %poke %will !>(wyl)]~
2015-12-06 00:01:00 +03:00
?: ?=($wegh -.kyz)
2015-05-07 05:25:41 +03:00
~& %ames-weighing
[[hen %give %mass wegh]~ +>]
=+ ^= fuy
2015-12-20 23:50:45 +03:00
^- {p/(list boon) q/fort}
2014-06-06 03:48:13 +04:00
?- -.kyz
2015-12-06 00:01:00 +03:00
$barn
[~ fox(gad hen)]
2015-12-06 00:01:00 +03:00
$cash
2014-06-06 03:48:13 +04:00
(~(have am [now fox]) p.kyz q.kyz)
2013-09-29 00:21:18 +04:00
::
2015-12-06 00:01:00 +03:00
$hear
2014-06-06 03:48:13 +04:00
(~(gnaw am [now fox]) %good p.kyz q.kyz)
2013-09-29 00:21:18 +04:00
::
2015-12-06 00:01:00 +03:00
$hole
2014-06-06 03:48:13 +04:00
(~(gnaw am [now fox]) %dead p.kyz q.kyz)
2013-09-29 00:21:18 +04:00
::
2015-12-06 00:01:00 +03:00
$junk
2014-06-06 03:48:13 +04:00
[~ fox(any.ton (shax (mix any.ton.fox p.kyz)))]
2013-09-29 00:21:18 +04:00
::
2015-12-06 00:01:00 +03:00
$kick
2014-06-06 03:48:13 +04:00
(~(kick am [now fox(hop p.kyz)]) hen)
2013-09-29 00:21:18 +04:00
::
2015-12-06 00:01:00 +03:00
$make
2014-06-06 03:48:13 +04:00
=+ vun=(~(come am [now fox]) p.kyz (bex q.kyz) r.kyz s.kyz)
2013-09-29 00:21:18 +04:00
[[[%beer p.vun] ~] q.vun]
::
2015-12-06 00:01:00 +03:00
$sith
2014-06-06 03:48:13 +04:00
(~(czar am [now fox]) p.kyz q.kyz r.kyz)
2017-05-16 23:56:54 +03:00
::
$nuke
:- ~
?: (~(has in bad.fox) p.kyz)
~& [%unblock p.kyz]
fox(bad (~(del in bad.fox) p.kyz))
~& [%block p.kyz]
fox(bad (~(put in bad.fox) p.kyz))
2013-09-29 00:21:18 +04:00
::
2015-12-06 00:01:00 +03:00
$wake
2013-10-09 22:55:23 +04:00
(~(wake am [now fox]) hen)
2014-07-24 06:02:50 +04:00
::
$want
2017-05-22 02:32:33 +03:00
(~(wise am [now fox]) p.kyz hen q.kyz r.kyz)
2013-09-29 00:21:18 +04:00
==
=> %_(. fox q.fuy)
2015-12-20 23:50:45 +03:00
=| out/(list move)
|- ^- {p/(list move) q/_+>.^$}
2013-09-29 00:21:18 +04:00
?~ p.fuy
[(flop out) +>.^$]
=^ toe fox (clop now hen i.p.fuy)
2013-09-29 00:21:18 +04:00
$(p.fuy t.p.fuy, out (weld (flop toe) out))
::
++ perm
2015-12-20 23:50:45 +03:00
|= {our/ship his/ship mar/@ud tyl/path}
^- (unit (unit cage))
2013-09-29 00:21:18 +04:00
?~ tyl ~
2015-12-06 00:01:00 +03:00
?: ?=({$name $~} tyl)
2013-09-29 00:21:18 +04:00
=+ wul=$(tyl [%will ~])
``[%noun !>(?~(wul (scot %p his) (gnow his q.q.q:((hard deed) -.u.wul))))]
2015-12-06 00:01:00 +03:00
?: ?=({$gcos $~} tyl)
2013-10-27 07:55:53 +04:00
=+ wul=$(tyl [%will ~])
?~(wul ~ ``[%noun !>(`gcos`q.q.q:((hard deed) -.u.wul))])
2013-09-29 00:21:18 +04:00
=+ gys=(~(us go ton.fox) our)
?~ gys ~
?. =(our his)
2015-12-06 00:01:00 +03:00
?: ?=({$will $~} tyl)
2013-09-29 00:21:18 +04:00
=+ fod=(~(get by hoc.saf.u.gys) his)
?~ fod ~
%+ bind (rick mar his lew.wod.u.fod)
|=(a/will `[%noun !>(a)])
2015-12-06 00:01:00 +03:00
?: ?=({$tick $~} tyl)
2014-06-01 00:22:49 +04:00
?. =(our (sein his)) ~
``[%noun !>((end 6 1 (shaf %tick (mix his (shax sec:ex:q:sen:u.gys)))))]
2013-09-29 00:21:18 +04:00
~
2015-12-06 00:01:00 +03:00
?: ?=({$buck $~} tyl)
2013-09-29 00:21:18 +04:00
=+ muc=(rice mar sex:u.gys)
=+ luw=(rick mar our law.saf.u.gys)
?. &(?=(^ muc) ?=(^ luw)) ~
``[%noun !>(`buck`[u.muc u.luw])]
2015-12-06 00:01:00 +03:00
?: ?=({$code $~} tyl)
``[%noun !>((end 6 1 (shaf %pass (shax sec:ex:q:sen:u.gys))))]
2015-12-06 00:01:00 +03:00
?: ?=({$will $~} tyl)
(bind (rick mar our law.saf.u.gys) |=(a/will `[%noun !>(a)]))
2013-09-29 00:21:18 +04:00
~
::
++ temp
2015-12-20 23:50:45 +03:00
|= {our/ship his/ship tyl/path}
^- (unit (unit cage))
2015-12-06 00:01:00 +03:00
?: ?=({?($show $tell) *} tyl)
?^ t.tyl [~ ~]
2013-10-08 09:56:57 +04:00
=+ gys=(~(us go ton.fox) our)
?~ gys [~ ~]
2013-10-08 09:56:57 +04:00
=+ zet=zest:(ho:(~(um am [now fox]) our) his)
``[%noun ?:(=(%show i.tyl) !>(>zet<) !>(zet))]
2015-12-06 00:01:00 +03:00
?: ?=({$pals $~} tyl)
?. =(our his)
~
``[%noun !>(pals:(~(um am [now fox]) our))]
2015-12-06 00:01:00 +03:00
?. ?=({$life $~} tyl)
2013-09-29 00:21:18 +04:00
=+ muc=$(tyl [%life ~])
2015-12-08 10:35:55 +03:00
(perm our his ?~(muc 0 (@ud u.muc)) tyl)
2013-09-29 00:21:18 +04:00
=+ gys=(~(us go ton.fox) our)
?~ gys ~
?. =(our his)
=+ fod=(~(get by hoc.saf.u.gys) his)
?~ fod ~
?~ lew.wod.u.fod ~
``[%noun !>(`@ud`p.p.q.i.lew.wod.u.fod)]
2013-09-29 00:21:18 +04:00
?~ val.saf.u.gys ~
``[%noun !>(`@ud`p.i.val.saf.u.gys)]
2015-05-07 05:25:41 +03:00
::
++ wegh
^- mass
2015-05-13 00:18:34 +03:00
:- %ames
2015-05-07 05:25:41 +03:00
:- %|
2015-12-29 01:01:44 +03:00
:~ fox+[%& fox]
2015-05-07 05:25:41 +03:00
==
2013-09-29 00:21:18 +04:00
--