UndoEvent: CEDAR DEFINITIONS = BEGIN Event: TYPE = REF EventBody; EventBody: 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: Event]; Create: PROC RETURNS [Event]; Note: PROC [event: Event, undoProc: UndoProc, undoRef: REF Change]; Undo: PROC [undoEvent: Event, currentEvent: Event _ NIL]; Reset: PROC [event: Event]; Empty: PROC [event: Event] RETURNS [BOOL]; END. 2UndoEvent.mesa Copyright c 1985, 1986 by Xerox Corporation. All rights reserved. written by Bill Paxton, June 1981 last edit by Bill Paxton, April 5, 1982 12:39 pm Doug Wyatt, September 5, 1986 3:04:27 pm PDT 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 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 Κ­˜codešœ™Kšœ Οmœ7™BKšœ!™!Kšœ0™0K™,—K˜KšœE™EKšœE™EK˜KšΠbl œΟkœŸ ˜KšœŸ˜K˜KšœŸœŸœ ˜Kšœ ŸœŸœ˜/K˜Kšœ ŸœŸœ˜"šœŸœŸœ˜K˜K˜Kšœ Ÿœ˜K˜K˜—šœŸœΟc˜"Kšœ™K˜—šœ ŸœŸœ Ÿœ˜AKšœI™IK˜—K˜šΟnœŸœŸœ ˜K˜—š‘œŸœ-Ÿœ ˜CKšœ-™-K˜—š‘œŸœ*Ÿœ˜9Kšœ8™8Kšœ3™3KšœL™LK˜—š‘œŸœ˜Kšœ#™#Kšœ3™3K˜—š‘œŸœŸœŸœ˜*Kšœ'™'K˜—K˜KšŸœ˜—…—J)