DIRECTORY Imager, Process, Rope, ViewerClasses ; StopWatch: CEDAR DEFINITIONS = { Milliseconds: TYPE ~ Process.Milliseconds; Viewer: TYPE ~ ViewerClasses.Viewer; ROPE: TYPE ~ Rope.ROPE; VEC: TYPE ~ Imager.VEC; HandData: TYPE ~ REF HandDataRep; HandDataRep: TYPE ~ RECORD [ width: INT ¬ 0, length: REAL ¬ 0, angle: REAL ¬ 0, oldPos: VEC ¬ [0, 0] ]; WatchData: TYPE ~ REF WatchDataRep; WatchDataRep: TYPE ~ MONITORED RECORD [ secondHand: HandData ¬ NIL, minuteHand: HandData ¬ NIL, hourHand: HandData ¬ NIL, oldPosValid: BOOL ¬ FALSE, startTime: REF ANY ¬ NIL, frameCount: INT ¬ 0, rate: Milliseconds ¬ STOPWATCHSLEEP, resumed: CONDITION, paused: BOOLEAN ¬ FALSE, done: BOOLEAN ¬ FALSE, cleanUp: BOOLEAN ¬ FALSE ]; STOPWATCHSLEEP: INT = 1000; ShowStopWatch: PROC [v: Viewer, hours, minutes, seconds: INT, frames: INT]; ChangeRate: PROC [wd: WatchData, newRate: Milliseconds ¬ STOPWATCHSLEEP]; Pause: PROC [wd: WatchData]; Resume: PROC [wd: WatchData]; End: PROC [wd: WatchData]; CreateViewer: PROC [vName: ROPE] RETURNS [viewer: Viewer]; }. δ StopWatch.mesa Copyright Σ 1992 by Xerox Corporation. All rights reserved. Buchanan, August 26, 1992 12:59 pm PDT Constants At this rate, the stop watch shows 1 frame per second (i.e., it acts just like a real clock). ΚΝ–"cedarcode" style•NewlineDelimiter ™šœ™Jšœ Οeœ1™