DIRECTORY Atom USING [ MakeAtom ], Booting USING [ RegisterProcs, CheckpointProc ], Intervoice USING [ Handle, Open, Play ], Process USING [ Detach, MsecToTicks, Pause ], Rope USING [ ROPE ], UserProfile USING [ Token ] ; PlayNoiseImpl: CEDAR PROGRAM IMPORTS Atom, Booting, Intervoice, Process, UserProfile = { reallyBoot: BOOL_TRUE; didOurBest: BOOL; maxTime: CARDINAL _ 4000; PlayTheRollbackButton: Booting.CheckpointProc = TRUSTED { PlayAButton["Rollback"]; IF ~reallyBoot THEN rejection _ "Just pretending"; }; PlayAButton: PROC[name: Rope.ROPE] = TRUSTED { didOurBest _ FALSE; Process.Detach[FORK ReallyPlayAButton[name]]; FOR i: NAT IN [0..100) DO Process.Pause[Process.MsecToTicks[maxTime/100]]; IF didOurBest THEN EXIT; ENDLOOP; }; ReallyPlayAButton: PROC[name: Rope.ROPE] = { C: PROC[complaint: Rope.ROPE] = {NULL}; -- Don't bother complaining. handle: Intervoice.Handle = Intervoice.Open[Complain: C]; Intervoice.Play[handle: handle, refID: name, refIDType: "SysNoises", wait: TRUE]; didOurBest _ TRUE; }; IF Atom.MakeAtom[UserProfile.Token["Finch.NoisyBoot", "FALSE"]] = $TRUE THEN Booting.RegisterProcs[c: PlayTheRollbackButton, r: NIL, b: PlayTheRollbackButton]; }. VPlayNoiseImpl.mesa Last Edited by: Swinehart, January 30, 1986 4:04:41 pm PST Ê­˜J™J™:J™šÏk ˜ Jšœœ˜J˜0Jšœ œ˜(Jšœœ ˜-Jšœœœ˜Jšœ œ ˜J˜J˜—šœœœ˜š˜Jšœ/˜/—J˜J˜Jšœ œœ˜Jšœ œ˜Jšœ œ˜J˜šÏbœœ˜9J˜Jšœ œ˜2J˜J˜—šÐbn œœ œœ˜.Jšœ œ˜Jšœœ˜-šœœœ ˜J˜0Jšœ œœ˜Jšœ˜—J˜J˜—šÏnœœ œ˜,Jš  œœœœÏc˜DJ˜9JšœKœ˜QJšœ œ˜J˜J˜—šœF˜LJšœ3œ˜R—J˜—J˜—…—¤§