NoisesImpl.mesa
Last Edited by: Swinehart, August 9, 1983 1:57 pm
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: NATLAST[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�.proc;
bd.proc ← LetsDoTheRollBack;
};
};
};
}.