wrapper.hoon 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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. ~& build-hash+hash
  52. =< .(desk-hash.outer `hash)
  53. |_ outer=outer-state
  54. +* inner-fort ~(. inner internal.outer)
  55. ++ load
  56. |= old=outer-state
  57. ?+ -.old ~&("wrapper +load: invalid old state" !!)
  58. %0
  59. =/ new-internal (load:inner-fort internal.old)
  60. ..load(internal.outer new-internal)
  61. ==
  62. ::
  63. ++ peek
  64. |= arg=path
  65. ^- (unit (unit *))
  66. =/ pax ((soft path) arg)
  67. ?~ pax
  68. ~> %slog.[0 leaf+"wrapper +poke: arg is not a path"]
  69. ~
  70. (peek:inner-fort u.pax)
  71. ::
  72. ++ wish
  73. |= txt=@
  74. ^- *
  75. q:(slap !>(~) (ream txt))
  76. ::
  77. ++ poke
  78. |= [num=@ ovum=*]
  79. ^- [(list *) _..poke]
  80. =/ effects=(list *) ?:(crash ~[exit/0] ~)
  81. ?+ ovum ~&("wrapper +poke invalid arg: {<ovum>}" effects^..poke)
  82. [[%$ %arvo ~] *]
  83. =/ g ((soft crud) +.ovum)
  84. ?~ g ~&(%invalid-goof effects^..poke)
  85. =- [effects ..poke]
  86. (slog tang.goof.u.g)
  87. ::
  88. [[%poke *] *]
  89. =/ ovum ((soft ^ovum) ovum)
  90. ?~ ovum ~&("wrapper +poke invalid arg: {<ovum>}" ~^..poke)
  91. =/ o ((soft input) input.u.ovum)
  92. ?~ o
  93. ~& "wrapper: could not mold poke type: {<ovum>}"
  94. ~^..poke
  95. =^ effects internal.outer
  96. (poke:inner-fort u.ovum)
  97. [effects ..poke(internal.outer internal.outer)]
  98. ==
  99. --
  100. --