% the technology of faucets declare fun {MakeFaucet Filename Stream} F={New Open.file init(name:Filename flags: [write create])} in F#{NewCell true}#Stream end proc {TurnOffFaucet F#OK#_} OK := false {F close} end proc {TeeFaucet F#OK#Stream VSifier} if @OK then case Stream of X|Xs then {F write(vs:{VSifier X})} {TeeFaucet F#OK#Xs VSifier} [] nil then skip end else skip end end %% EXAMPLE % make your own % declare MyStream Portal % {NewPort MyStream Portal} % PricePfister={MakeFaucet 'pricepfister.txt' MyStream} % run these commands % thread {TeeFaucet PricePfister} end % {Send Portal 'howdy\n'} % {Send Portal 'another friendly message\n'} % {TurnOffFaucet PricePfister}