<> <> <> <> DIRECTORY Basics, Core, CoreIO, CoreProperties, IO; BSCoreIOIFUPropsImpl: CEDAR PROGRAM IMPORTS Basics, CoreIO, CoreProperties, IO = BEGIN ROPE: TYPE = Core.ROPE; Sides: TYPE = MACHINE DEPENDENT {none(0), bottom(1), right(2), top(4), left(8), all(15)}; sides: PUBLIC ATOM _ CoreIO.RegisterProperty[ $CoreBlockSides, WriteSides, ReadSides ]; WriteSides: CoreIO.PropWriteProc = { refSides: REF Sides _ NARROW[value]; card: CARDINAL _ LOOPHOLE[refSides^]; IO.PutF[h.stream, "%g ", IO.card[card]]}; ReadSides: CoreIO.PropReadProc = { card: CARDINAL _ IO.GetCard[h.stream]; max: CARDINAL _ 15; IF card > max THEN Signal[]; RETURN[ NEW[Sides _ LOOPHOLE[Basics.BITAND[card, 15] ] ] ]}; drShiftIn: PUBLIC ATOM _ CoreIO.RegisterProperty[ CoreProperties.RegisterProperty[ $DShiftIn, CoreProperties.Props[ [CoreProperties.propPrint, NEW[CoreProperties.PropPrintProc _ PrintRopeIn ]] ]], WriteRope, ReadRope ]; drShiftOut: PUBLIC ATOM _ CoreIO.RegisterProperty[ CoreProperties.RegisterProperty[ $DShiftOut, CoreProperties.Props[ [CoreProperties.propPrint, NEW[CoreProperties.PropPrintProc _ PrintRopeOut]]]], WriteRope, ReadRope ]; WriteRope: CoreIO.PropWriteProc = {rope: ROPE _ NARROW[value]; CoreIO.WriteRope[h, rope]}; ReadRope: CoreIO.PropReadProc = {rope: ROPE _ CoreIO.ReadRope[h]; RETURN[ rope ]}; PrintRopeIn: CoreProperties.PropPrintProc = {rope: ROPE _ NARROW[val]; to.PutF["DShiftIn: %g", IO.rope[rope]]}; PrintRopeOut: CoreProperties.PropPrintProc = {rope: ROPE _ NARROW[val]; to.PutF["DShiftOut: %g", IO.rope[rope]]}; Signal: SIGNAL = CODE; END.