resource Piglet import driver op squeak(message: string[*]) body Piglet(dc: cap driver) write("Piglet resource is alive") proc squeak(message) write("I am", message); dc.done("Piglet") end squeak end Piglet resource Strangelove import Piglet op goodbye() body Strangelove(pc: cap Piglet) write("Strangelove resource is alive") proc goodbye() write("Goodbye"); pc.squeak("Strangelove") end goodbye end Strangelove resource Zhivago import Strangelove, Piglet op hello(message: string[*]) body Zhivago(sc: cap Strangelove; pc: cap Piglet) write("Zhivago resource is alive") proc hello(message) pc.squeak("Zhivago"); write("Hello", message); sc.goodbye() end hello end Zhivago resource driver import Piglet, Strangelove, Zhivago op done(message: string[*]) body driver() proc done(message) write(message, "is done") end done var pc: cap Piglet, dc: cap driver, sc: cap Strangelove, zc: cap Zhivago write("main driver resource is alive") dc := myresource(); pc := create Piglet(dc) sc := create Strangelove(pc); zc := create Zhivago(sc, pc) sc.goodbye(); zc.hello("from driver") end driver /* ............... Example compile and run(s) % sr -o multiple multiple.sr % ./multiple main driver resource is alive Piglet resource is alive Strangelove resource is alive Zhivago resource is alive Goodbye I am Strangelove Piglet is done I am Zhivago Piglet is done Hello from driver Goodbye I am Strangelove Piglet is done */