DIRECTORY EditNotify USING [Change]; 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. BUndoEvent.mesa Copyright Σ 1985, 1986, 1988 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, February 17, 1988 3:55:03 pm PST 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 Κ»˜codešœ™KšœH™HKšœ!™!Kšœ0™0K™,—K˜KšœE™EKšœE™EK˜šΟk ˜ Kšœ œ ˜—K˜KšΠbl œœ ˜Kšœ˜K˜Kšœœœ ˜Kšœ œœ˜/K˜Kšœ œœ˜"šœœœ˜K˜K˜Kšœ œ˜K˜K˜—šœœ˜!Kšœ™K˜—šœ œœ œ˜AKšœI™IK˜—K˜šΟnœœœ ˜K˜—šŸœœ-œ ˜CKšœ-™-K˜—šŸœœ*œ˜9KšœB™BKšœ3™3KšœL™LK˜—šŸœœ˜Kšœ#™#Kšœ3™3K˜—šŸœœœœ˜*Kšœ'™'K˜—K˜Kšœ˜—…—pm