--marcs
? def sealSystemMaker new(name) : any {
> def privateCurrentContent := null
> def privateContentLoaded := false
> def sysUnsealer {
> to unseal(box) : any {
> privateCurrentContent := null
> privateContentLoaded := false
> box offerContent
> def content := privateCurrentContent
> privateCurrentContent := null
> if (!privateContentLoaded)
> throw(import:java.lang.Exception new("unsealer/box
mismatch"))
> }
> privateContentLoaded := false
> content
> }
> to printOn(out) {out print("<sysUnsealer " + name + ">")}
> }
> def boxMaker new(message) : any {
> def box {
> to offerContent {
> privateCurrentContent := message
> privateContentLoaded := true
> }
> to printOn(out) {out print("<sysSealed by " + name + ">")}
> }
> }
> def sysSealer {
> to seal(message) : any {boxMaker new(message)}
> to printOn(out) {out print("<sysSealer " + name + ">")}
> }
> [sysSealer,sysUnsealer]
> }
# value: <sealSystemMaker>
? def [sealer1,unsealer1] := sealSystemMaker new("marcs") # value: [<sysSealer marcs>, <sysUnsealer marcs>]
? def envelope := sealer1 seal("sealed message") # value: <sysSealed by marcs>
? unsealer1 unseal(envelope)
# value: sealed message
? def [sealer2,unsealer2] := sealSystemMaker new("BATF") # value: [<sysSealer BATF>, <sysUnsealer BATF>]
? unsealer2 unseal(envelope)
# problem: <Exception: unsealer/box mismatch> # # <statics of org.erights.e.elang.interp.Thrower>(<Exception: unsealer/boxmismatch>)
?