<> <> <> <> DIRECTORY Xl, XlPrivate, XlWMOps; XlWMOpsImpl: CEDAR MONITOR LOCKS c USING c: Connection IMPORTS Xl, XlPrivate EXPORTS XlWMOps SHARES Xl, XlPrivate ~ BEGIN OPEN Xl, XlWMOps, XlPrivate; ChangeSaveSet: PUBLIC PROC [c: Connection, window: Window, op: InsertDelete, details: Details] = { action: PROC [c: Connection] ~ { BInit[c, 6, ORD[op], 2]; BPutDrawable[c, window]; FinishWithDetails[c, details]; }; DoWithLocks[c, action, details]; }; Int16: PROC [i: INT] RETURNS [INT16] = { <<--gracefully clip range>> IF i>=0 THEN RETURN [MIN[i, LAST[INT16]]] ELSE RETURN [MAX[i, FIRST[INT16]]] }; SetScreenSaver: PUBLIC PROC [c: Connection, timeout: INT ¬ -1, interval: INT ¬ -1, blanking: Maybe ¬ default, exposures: Maybe ¬ default, details: Details] ~ { action: PROC [c: Connection] ~ { BInit[c, 107, 0, 3]; BPutINT16[c, Int16[timeout]]; BPutINT16[c, Int16[interval]]; BPut8[c, ORD[blanking]]; BPut8[c, ORD[exposures]]; BPut16[c, 0]; --unused FinishWithDetails[c, details]; }; DoWithLocks[c, action, details]; }; ForceScreenSaver: PUBLIC PROC [c: Connection, mode: ResetActivate, details: Details] ~ { action: PROC [c: Connection] ~ { BInit[c, 115, ORD[mode], 1]; FinishWithDetails[c, details]; }; DoWithLocks[c, action, details]; }; SetAccessControl: PUBLIC PROC [c: Connection, enable: BOOL, details: Details] ~ { action: PROC [c: Connection] ~ { BInit[c, 111, IF enable THEN 1 ELSE 0, 1]; FinishWithDetails[c, details]; }; DoWithLocks[c, action, details]; }; SetCloseDownMode: PUBLIC PROC [c: Connection, mode: CloseDownMode, details: Details] ~ { action: PROC [c: Connection] ~ { BInit[c, 112, ORD[mode], 1]; FinishWithDetails[c, details]; }; IF mode#destroy THEN { Xl.PutConnectionProp[c, $XlImplSomeResource, NIL]; -- Xl.CloseConnection's impl checks for this property }; DoWithLocks[c, action, details]; }; KillClient: PUBLIC PROC [c: Connection, resource: ID, details: Details] ~ { action: PROC [c: Connection] ~ { BInit[c, 113, 0, 2]; BPut32[c, resource]; FinishWithDetails[c, details]; }; DoWithLocks[c, action, details]; }; END.