DIRECTORY TiogaPrivate USING [Change, Event, EventBody, SubEvent, SubEventBody, UndoProc, World]; UndoEventImpl: CEDAR PROGRAM EXPORTS TiogaPrivate = BEGIN OPEN TiogaPrivate; CreateEvent: PUBLIC PROC RETURNS [Event] = { RETURN [NEW[EventBody _ [subevents: NIL]]] }; NoteEvent: PUBLIC PROC [world: World, undoProc: UndoProc, undoRef: REF Change] = { event: Event ~ IF world=NIL THEN NIL ELSE world.currentEvent; IF event = NIL THEN RETURN; event.subevents _ NEW[SubEventBody _ [next: event.subevents, undoProc: undoProc, undoRef: undoRef]]; }; UndoEvent: PUBLIC PROC [world: World, undoEvent: Event] = { sub: SubEvent; IF undoEvent=NIL THEN RETURN; sub _ undoEvent.subevents; undoEvent.subevents _ NIL; UNTIL sub=NIL DO sub.undoProc[world, sub.undoRef]; sub _ sub.next; ENDLOOP; }; ResetEvent: PUBLIC PROC [event: Event] = { IF event # NIL THEN event.subevents _ NIL }; EmptyEvent: PUBLIC PROC [event: Event] RETURNS [BOOL] = { RETURN [event=NIL OR event.subevents=NIL] }; END. >UndoEventImpl.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:38 pm Doug Wyatt, September 17, 1986 11:11:43 am PDT calls undoProc[undoRef] for each subevent in reverse order that subevents originally happened ΚΕ˜codešœ™Kšœ Οmœ7™BKšœ!™!Kšœ1™1K™.—K˜šΟk ˜ Kšœ žœE˜W—K˜KšΠbl œžœžœ˜Kšžœ˜Kšžœžœ˜K˜KšΟn œžœžœžœ žœžœžœ˜ZK˜š  œžœžœ-žœ ˜RKš œžœžœžœžœžœ˜=Kšžœ žœžœžœ˜šœžœ˜$K˜?—˜K˜——š  œžœžœ%˜;Kšœ*™*Kšœ3™3K˜Kšžœ žœžœžœ˜Kšœ1žœ˜5Kšžœžœžœ3žœ˜KKšœ˜K˜—Kš  œžœžœžœ žœžœžœ˜WK˜Kš  œžœžœžœžœžœžœžœžœ˜fK˜Kšžœ˜—…—άί