--File: IPTopOpRecs.mesa
Last Edited by: CSChow, February 2, 1985 2:04:47 am PST
DIRECTORY
-- Intro: This interface defines all the records used by the undo and redo facility
-- NB: Any records whose names begin with FR means that the record is a Forward (ie.
-- redo) record, begins with IR (ie. undo) record, and begins with R (ie. used by both
-- undo and redo.)
Rope,
IPCoTab USING [Component, CornerTypes, CornerSpace],
IPCTG USING[Channel, ChType, Side],
IP USING [Orientation, OrientationTypes, IntVector, ShapeRep];
IPTopOpRecs: CEDAR DEFINITIONS = BEGIN
-- IR = InverseRecord--
IRFormCross: TYPE = REF IRFormCrossRec;
IRFormCrossRec: TYPE = RECORD[refCh, negCh, posCh: IPCTG.Channel];
IRBreakCross: TYPE = REF IRBreakCrossRec;
IRBreakCrossRec: TYPE = RECORD[refCh, chToBreak, newCh1: IPCTG.Channel];
IRRemoveCo1: TYPE = REF IRRemoveCo1Rec;
IRRemoveCo1Rec: TYPE = RECORD[co: IPCoTab.Component, shrinkDirectn: IPCTG.ChType, sideToClHint: IPCTG.Side];
IRInsertCo1: TYPE = REF IRInsertCo1Rec;
IRInsertCo1Rec: TYPE = RECORD[co: IPCoTab.Component, chToSplit, negBnd, posBnd: IPCTG.Channel, sideToOpHint: IPCTG.Side, newCh1: IPCTG.Channel];
IRRemoveCo2: TYPE = REF IRRemoveCo2Rec;
IRRemoveCo2Rec: TYPE = RECORD[co: IPCoTab.Component, shrinkDirectn: IPCTG.ChType, sideToClHint: IPCTG.Side];
IRInsertCo2: TYPE = REF IRInsertCo2Rec;
IRInsertCo2Rec: TYPE = RECORD[co: IPCoTab.Component, chToSplit, negBnd, posBnd: IPCTG.Channel, sideToOpHint: IPCTG.Side, newCh1: IPCTG.Channel];
IRRemoveZ: TYPE = REF IRRemoveZRec;
IRRemoveZRec: TYPE = RECORD[zSpine: IPCTG.Channel];
IRFormZ: TYPE = REF IRFormZRec;
IRFormZRec: TYPE = RECORD[refCh: IPCTG.Channel, negComp, posComp: IPCoTab.Component, zType: IPCTG.Side, newCh1, newCh2: IPCTG.Channel];
IRTtoL: TYPE = REF IRTtoLRec;
IRTtoLRec: TYPE = RECORD[refCh: IPCTG.Channel, whichEnd, lType: IPCTG.Side, endCo: IPCoTab.Component, newCh1: IPCTG.Channel];
IRLtoT: TYPE = REF IRLtoTRec;
IRLtoTRec: TYPE = RECORD[refCh: IPCTG.Channel, whichEnd: IPCTG.Side];
IRExtendKnee: TYPE = REF IRExtendKneeRec;
IRExtendKneeRec: TYPE = RECORD[shin: IPCTG.Channel];
IRFlexKnee: TYPE = REF IRFlexKneeRec;
IRFlexKneeRec: TYPE = RECORD[leg, floor: IPCTG.Channel, whichEnd, whichDirection: IPCTG.Side, newCh1: IPCTG.Channel];
IRRemoveCoAtCorner: TYPE = REF IRRemoveCoAtCornerRec;
IRRemoveCoAtCornerRec: TYPE = RECORD[host: IPCoTab.Component, corner: IPCoTab.CornerTypes];
IRInsertCoAtCorner: TYPE = REF IRInsertCoAtCornerRec;
IRInsertCoAtCornerRec: TYPE = RECORD[host, co: IPCoTab.Component, corner: IPCoTab.CornerTypes, newHCh1, newVCh1: IPCTG.Channel];
IRDestroyComp2: TYPE = REF IRDestroyComp2Rep;
IRDestroyComp2Rep: TYPE = RECORD[comp: IPCoTab.Component];
IRCreateComp2: TYPE = REF IRCreateComp2Rep;
IRCreateComp2Rep: TYPE = RECORD[comp: IPCoTab.Component];
IRSetCoCornerSpRec: TYPE = RECORD[co: IPCoTab.Component, corner: IPCoTab.CornerTypes, cornerSpace: IPCoTab.CornerSpace];
--This is used for doing the trick in IPTopEditOpsExtraImpl.FlipT
-- FR = ForwardRecord --
FRBreakCross: TYPE = REF FRBreakCrossRec;
FRBreakCrossRec: TYPE = RECORD[refCh, chToBreak: IPCTG.Channel];
FRFormCross: TYPE = REF FRFormCrossRec;
FRFormCrossRec: TYPE = RECORD[ch1, ch2: IPCTG.Channel];
FRFormZ: TYPE = REF FRFormZRec;
FRFormZRec: TYPE = RECORD[comp1, comp2: IPCoTab.Component, zType: IPCTG.Side];
FRRemoveZ: TYPE = REF FRRemoveZRec;
FRRemoveZRec: TYPE = RECORD[zSpine: IPCTG.Channel];
FRLtoT: TYPE = REF FRLtoTRec;
FRLtoTRec: TYPE = RECORD[ch: IPCTG.Channel, whichEnd: IPCTG.Side];
FRTtoL: TYPE = REF FRTtoLRec;
FRTtoLRec: TYPE = RECORD[co: IPCoTab.Component, ch: IPCTG.Channel, lType: IPCTG.Side];
FRFlexKnee: TYPE = REF FRFlexKneeRec;
FRFlexKneeRec: TYPE = RECORD[leg, floor: IPCTG.Channel, whichEnd: IPCTG.Side];
FRExtendKnee: TYPE = REF FRExtendKneeRec;
FRExtendKneeRec: TYPE = RECORD[shin: IPCTG.Channel];
FRGrow1: TYPE = REF FRGrow1Rec;
FRGrow1Rec: TYPE = RECORD[co, host: IPCoTab.Component, hostCorner: IPCoTab.CornerTypes];
FRShrink1: TYPE = REF FRShrink1Rec;
FRShrink1Rec: TYPE = RECORD[co: IPCoTab.Component];
FRInsertCo: TYPE = REF FRInsertCoRec;
FRInsertCoRec: TYPE = RECORD[co: IPCoTab.Component, chToSplit, negBnd, posBnd: IPCTG.Channel, sideHint: IPCTG.Side, whichFirstHint: [1..2]];
FRRemoveCo: TYPE = REF FRRemoveCoRec;
FRRemoveCoRec: TYPE = RECORD[co: IPCoTab.Component, shrinkDirectn: IP.OrientationTypes];
FRFlipT: TYPE = REF FRFlipTRec;
FRFlipTRec: TYPE = RECORD[chToBend, attachTo: IPCTG.Channel, whichEnd: IPCTG.Side];
FRSpawnComps: TYPE = REF FRSpawnCompsRep;
FRSpawnCompsRep: TYPE = RECORD[comp: IPCoTab.Component, splitDirection: IP.OrientationTypes, chkArgs: BOOL, negChild, posChild: IPCoTab.Component];
--Shared by both--
RSetCompShape: TYPE = REF RSetCompShapeRep;
RSetCompShapeRep: TYPE = RECORD[comp: IPCoTab.Component, shape: IP.ShapeRep, chkArgs: BOOL];
RSwapComponents: TYPE = REF RSwapComponentsRep;
RSwapComponentsRep: TYPE = RECORD[comp1, comp2: IPCoTab.Component];
ROrient: TYPE = REF ROrientRec;
ROrientRec: TYPE = RECORD[co: IPCoTab.Component, operation: IP.Orientation];
--NB: (i) This is shared by by both because it is a functional operation.
--(ii) orient is the operation to perform not the final state
RSetComponent: TYPE = REF RSetComponentRec;
RSetComponentRec: TYPE = RECORD[co: IPCoTab.Component, active: BOOL, atPosition: IP.IntVector];
RMoveComponent: TYPE = REF RMoveComponentRec;
RMoveComponentRec: TYPE = RECORD[co: IPCoTab.Component, by: IP.IntVector];
RAny: TYPE = REF;
RComposite: TYPE = LIST OF REF;
END.