<> <> <> DIRECTORY Core, CoreBlock, CoreIO, CoreIOIFUProps, CoreProperties, IO; CoreIOIFUPropsImpl: CEDAR PROGRAM IMPORTS CoreBlock, CoreIO, CoreProperties, IO EXPORTS CoreIOIFUProps = BEGIN ROPE: TYPE = Core.ROPE; Sides: TYPE = CoreBlock.Sides; sides: PUBLIC ATOM _ CoreIO.RegisterProperty[ CoreProperties.RegisterProperty[ $CoreBlockSides, CoreProperties.Props[ [CoreProperties.propPrint, NEW[CoreProperties.PropPrintProc _ PrintSides ]] ] ], WriteSides, ReadSides ]; WriteSides: CoreIO.PropWriteProc = { refSides: REF Sides _ NARROW[value]; card: CARDINAL _ CoreBlock.SidesToWord[refSides^]; IO.PutF[h.stream, "%g ", IO.card[card]]}; ReadSides: CoreIO.PropReadProc = { card: CARDINAL _ IO.GetCard[h.stream]; max: CARDINAL _ CoreBlock.SidesToWord[all]; IF card > max THEN Signal[]; RETURN[ NEW[Sides _ CoreBlock.SidesFmWord[card]] ]}; PrintSides: CoreProperties.PropPrintProc = { refSides: REF Sides _ NARROW[val]; <> to.PutRope[" Sides: "]; IF refSides^=all THEN {to.PutRope[" All"]; RETURN}; IF refSides^=none THEN {to.PutRope[" None"]; RETURN}; IF CoreBlock.OnSide[bottom, refSides^] THEN to.PutRope[" Bottom"]; IF CoreBlock.OnSide[right, refSides^] THEN to.PutRope[" Right"]; IF CoreBlock.OnSide[top, refSides^] THEN to.PutRope[" Top"]; IF CoreBlock.OnSide[left, refSides^] THEN to.PutRope[" Left"]}; 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.