DIRECTORY EditNotify USING [Change]; UndoEvent: CEDAR DEFINITIONS = BEGIN Ref: 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: 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 [BOOL]; END. 2UndoEvent.mesa Copyright c 1985 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, March 2, 1985 2:06:30 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šœ Οmœ1™