DIRECTORY ButtonsImpl USING [ ButtonData ], FinchSmarts USING [ PlaybackMessage ], FinchTool USING [ CheckActive, finchToolHandle ], IO, Log USING [ Problem, Report ], Menus USING [ ClickProc ], Noises, Rope USING [ Concat, ROPE ], ThMessageDB USING [ GetMessage, GetMessageListLength, MessageInstance ], ViewerClasses USING [ Viewer ], ViewerOps USING [ FindViewer ] ; NoisesImpl: PROGRAM IMPORTS FinchSmarts, FinchTool, IO, Log, Rope, ThMessageDB, ViewerOps EXPORTS Noises SHARES ButtonsImpl = { OPEN IO; Noise: PUBLIC PROC[noiseName: Rope.ROPE, noiseNum: NAT_LAST[NAT]] = { noiseSpec: Rope.ROPE=noiseName.Concat[".Lark"]; inst: ThMessageDB.MessageInstance; noiseNum _ MIN[noiseNum, ThMessageDB.GetMessageListLength[noiseSpec]]; IF ~FinchTool.CheckActive[FinchTool.finchToolHandle] THEN { Log.Report["No record player", $Finch]; RETURN; }; inst _ ThMessageDB.GetMessage[noiseSpec, noiseNum]; IF inst = NIL THEN Log.Problem[IO.PutFR["Noise %s #%d not found", rope[noiseName], card[noiseNum]], $Finch]; FinchSmarts.PlaybackMessage[instance: inst, queueIt: TRUE]; }; SavedOldRollback: Menus.ClickProc; LetsDoTheRollBack: Menus.ClickProc = TRUSTED { Noise["Rollback"]; SavedOldRollback[parent, clientData, mouseButton, shift, control]; }; EnableHack: PROC = { v: ViewerClasses.Viewer = ViewerOps.FindViewer["Rollback"]; IF v#NIL THEN { bd: ButtonsImpl.ButtonData _ NARROW[v.data]; IF bd#NIL THEN { SavedOldRollback_bd.proc; bd.proc _ LetsDoTheRollBack; }; }; }; }. JNoisesImpl.mesa Last Edited by: Swinehart, August 9, 1983 1:57 pm ÊΘJ™J™1J™šÏk ˜ Jšœ œ˜!Jšœ œ˜&Jšœ œ"˜1Jšœ˜Jšœœ˜Jšœœ˜J˜Jšœœ œ˜Jšœ œ7˜HJšœœ ˜Jšœ œ˜J˜—J˜šœ ˜Jšœœ#˜EJšœ˜Jšœ˜Jšœœ˜—J˜š Ïnœ œœ œœœ˜EJšœœ˜/J˜"Jšœ œ8˜FJšœ3œ*œ˜nJ˜3šœœ˜Jšœ œK˜Y—Jšœ5œ˜;J˜—J˜J˜"J˜šžœœ˜.Jšœ˜J˜BJ˜—J˜šž œœ˜J˜;šœœœ˜Jšœœ ˜,šœœœ˜J˜J˜J˜—J˜—J˜—J˜J˜—…—¾Ö