wrapper.hoon 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. |%
  2. +$ goof [mote=term =tang]
  3. +$ wire path
  4. +$ ovum [=wire =input]
  5. +$ crud [=goof =input]
  6. +$ input [eny=@ our=@ux now=@da cause=*]
  7. ::
  8. ++ keep
  9. |* inner=mold
  10. =>
  11. |%
  12. +$ inner-state inner
  13. +$ outer-state
  14. $% [%0 desk-hash=(unit @uvI) internal=inner]
  15. ==
  16. +$ outer-fort
  17. $_ ^|
  18. |_ outer-state
  19. ++ load
  20. |~ arg=outer-state
  21. **
  22. ++ peek
  23. |~ arg=path
  24. *(unit (unit *))
  25. ++ poke
  26. |~ [num=@ ovum=*]
  27. *[(list *) *]
  28. ++ wish
  29. |~ txt=@
  30. **
  31. --
  32. ::
  33. +$ fort
  34. $_ ^|
  35. |_ state=inner-state
  36. ++ load
  37. |~ arg=inner-state
  38. *inner-state
  39. ++ peek
  40. |~ arg=path
  41. *(unit (unit *))
  42. ++ poke
  43. |~ arg=ovum
  44. [*(list *) *inner-state]
  45. --
  46. --
  47. ::
  48. |= crash=?
  49. |= inner=fort
  50. |= hash=@uvI
  51. =< .(desk-hash.outer `hash)
  52. |_ outer=outer-state
  53. +* inner-fort ~(. inner internal.outer)
  54. ++ load
  55. |= old=outer-state
  56. ?+ -.old ~&("wrapper +load: invalid old state" !!)
  57. %0
  58. =/ new-internal (load:inner-fort internal.old)
  59. ..load(internal.outer new-internal)
  60. ==
  61. ::
  62. ++ peek
  63. |= arg=path
  64. ^- (unit (unit *))
  65. (peek:inner-fort arg)
  66. ::
  67. ++ wish
  68. |= txt=@
  69. ^- *
  70. q:(slap !>(~) (ream txt))
  71. ::
  72. ++ poke
  73. |= [num=@ ovum=*]
  74. ^- [(list *) _..poke]
  75. =/ effects=(list *) ?:(crash ~[exit/0] ~)
  76. ?+ ovum ~&("wrapper +poke invalid arg: {<ovum>}" effects^..poke)
  77. [[%$ %arvo ~] *]
  78. =/ g ((soft crud) +.ovum)
  79. ?~ g ~&(%invalid-goof effects^..poke)
  80. =- [effects ..poke]
  81. (slog tang.goof.u.g)
  82. ::
  83. [[%poke *] *]
  84. =/ ovum ((soft ^ovum) ovum)
  85. ?~ ovum ~&("wrapper +poke invalid arg: {<ovum>}" ~^..poke)
  86. =/ o ((soft input) input.u.ovum)
  87. ?~ o
  88. ~& "wrapper: could not mold poke type: {<ovum>}"
  89. =+ (road |.(;;(^^ovum ovum)))
  90. ~^..poke
  91. =^ effects internal.outer
  92. (poke:inner-fort u.ovum)
  93. [effects ..poke(internal.outer internal.outer)]
  94. ==
  95. --
  96. --