DIRECTORY EditNotify; UndoEvent: CEDAR DEFINITIONS = BEGIN Ref: TYPE = REF EventBody; EventBody: PUBLIC TYPE = RECORD [subevents: SubEvent]; SubEvent: TYPE = REF SubEventBody; SubEventBody: TYPE = RECORD [ next: SubEvent, undoProc: UndoProc, undoRef: REF Change ]; Change: TYPE = EditNotify.Change; UndoProc: TYPE = PROC [undoRef: REF Change, currentEvent: Ref]; Create: PROC RETURNS [Ref]; Note: PROC [event: Ref, undoProc: UndoProc, undoRef: REF Change]; Undo: PROC [undoEvent: Ref, currentEvent: Ref _ NIL]; Reset: PROC [event: Ref]; Empty: PROC [event: Ref] RETURNS [BOOLEAN]; Start: PROC; -- initialization END. ô-- UndoEvent.mesa -- written by Bill Paxton, June 1981 -- last edit by Bill Paxton, April 5, 1982 12:39 pm -- an undo event is a series of actions that are to be undone as a unit -- the event record contains sufficient information to undo the actions -- undo list contains changes. -- procedure supplied by client to undo the effects of a particular subevent -- adds to list of subevents -- otherwise, calls undoProc[undoRef,currentEvent] for each subevent -- in reverse order that subevents originally happened -- currentEvent arg is to record the effects of Undo so it too will be undoable -- resets the list of subevents to NIL -- Undo automatically does a Reset when it is finished -- returns true if subevents list is empty ʵ˜JšÏc™Jš$™$Jš3™3J˜JšG™GJšG™GJ˜JšÏk ˜ J˜ J˜Jšœ žœ˜Jšž˜J˜Jšœžœžœ ˜Jšœ žœžœžœ˜6J˜Jšœ žœžœ˜"šœžœžœ˜J˜J˜Jšœ žœ˜J˜J˜—šœžœ˜!Jš™J˜—šÏnœžœžœ žœ˜?JšL™LJ˜—JšŸœžœžœ˜J˜šŸœžœ+žœ ˜AJš0™0J˜—šŸœžœ&žœ˜5JšE™EJš6™6JšO™OJ˜—šŸœžœ˜Jš&™&Jš6™6J˜—šŸœžœžœžœ˜+Jš*™*J˜—JšŸœžœ˜J˜Jšžœ˜J˜J˜J˜—…—|%