DIRECTORY IO USING [STREAM], Process USING [Ticks], Rope USING [ROPE]; SimpleTerminalBackdoor: CEDAR DEFINITIONS = BEGIN ROPE: TYPE ~ Rope.ROPE; STREAM: TYPE ~ IO.STREAM; Ticks: TYPE ~ Process.Ticks; FullTurnOn: PROC [bannerLeft, bannerRight: ROPE _ NIL] RETURNS [in, out: STREAM]; DefaultBannerLeft: PROC RETURNS [ROPE]; DefaultBannerRight: PROC RETURNS [ROPE]; Impl: TYPE ~ REF ImplRep; ImplRep: TYPE ~ RECORD [ CaptureOriginalState: PROC [impl: Impl], Start: PROC [impl: Impl, bannerLeft, bannerRight: ROPE] RETURNS [in, out: STREAM], ReStart: PROC [impl: Impl], TurnOff: PROC [impl: Impl, ShutdownNeeded: PROC RETURNS [BOOL]], SetInputTimeout: PROC [impl: Impl, ticks: Ticks], DisableCursorTracking: PROC [impl: Impl], EnableCursorTracking: PROC [impl: Impl], data: REF ANY _ NIL ]; StartShutdown: PROC RETURNS [needed: BOOL]; ShuttingDown: PROC RETURNS [BOOL]; FinishShutdown: PROC; SetImpl: PROC [Impl] RETURNS [ok: BOOL]; UnsetImpl: PROC [Impl]; defaultImpl: Impl; END. ΔSimpleTerminalBackdoor.mesa Copyright Σ 1985, 1986 by Xerox Corporation. All rights reserved. Levin on September 22, 1983 12:21 pm Doug Wyatt, February 27, 1985 10:22:06 am PST Mike Spreitzer March 4, 1987 12:05:06 pm PST If either banner is NIL, a default is used. So TurnOff can restore it. Called on transition from off to on. Effects the transition from off to on. Done when TurnOn called while already on. Consults ShutdownNeeded, and if so, closes down the simple terminal. If ShutdownNeeded, someone must eventually call StartShutdown before any further state change can proceed. CaptureOriginalState, Start, ReStart, and TurnOff are never called concurrently. CaptureOriginalState and ReStart must not call StartShutdown, ShuttingDown, FinishShutdown, SetImpl, or UnsetImpl. If called between ShutdownNeeded and FinishShutdown, will return TRUE, and shutdown should proceed. Otherwise returns FALSE, and shutdown should not proceed. Call this to find out if we're between StartShutdown and FinishShutdown. Call this to indicate shutdown complete. If not ok, the implementation is currently ambushed by something else. Otherwise ambush has been successful. Called between successful calls to SetImpl. Κˆ˜codešœ™KšœB™BKšœ$™$K™-K™,—K˜šΟk ˜ Kšœœœ˜Kšœœ ˜Kšœœœ˜—K˜KšΠblœœ ˜)Kšœ˜K˜Kšœœœ˜Kšœœœœ˜Kšœœ˜K˜š Οn œœœœœ œ˜QK™+—K˜KšŸœœœœ˜'KšŸœœœœ˜(K˜Kšœœœ ˜šœ œœ˜šŸœœ˜(Kšœ@™@—š Ÿœœ'œœ œ˜RK™&—šŸœœ˜Kšœ)™)—š ŸœœŸœœœœ˜@Kšœ°™°—KšŸœœ˜1KšŸœœ˜)KšŸœœ˜(Kšœœœ˜K˜KšœΔ™Δ—K˜šŸ œœœ œ˜+Kšœž™ž—K˜šŸ œœœœ˜"KšœH™HK˜—šŸœœ˜K™(—K˜šŸœœœœ˜(K™m—K˜šŸ œœ˜Kšœ+™+—K˜Kšœ˜K˜Kšœ˜—…—ΰ ,