DIRECTORY Commander USING [CommandProc, Register], Idle USING [ IsIdle ], IO, RuntimeError USING [ UNCAUGHT ], UserCredentials USING [ Login ] ; WKLoginImpl: CEDAR PROGRAM IMPORTS Commander, Idle, IO, RuntimeError, UserCredentials ~ { disableIdleReqt: BOOL_FALSE; LoginCmd: Commander.CommandProc = { StartInteraction: PROC RETURNS[in, out: IO.STREAM] = { RETURN[cmd.in, cmd.err]; }; EndInteraction: PROC[in, out: IO.STREAM] = { NULL }; IF ~disableIdleReqt AND ~Idle.IsIdle[] THEN RETURN[$Failed, "** Can't change credentials when machine is not idle. **"]; UserCredentials.Login[startInteraction: StartInteraction, endInteraction: EndInteraction, options: [alwaysInteract: TRUE]]; }; Commander.Register["WKLogin", LoginCmd, "Really log in on this machine. Valid only when machine is idle."]; }. ΖWKLoginImpl.mesa Copyright Σ 1990 by Xerox Corporation. All rights reserved. Swinehart, August 6, 1990 6:06:49 pm PDT [cmd: Commander.Handle] RETURNS [result: REF ANY _ NIL, msg: ROPE _ NIL] Κ™•NewlineDelimiter – "cedar" style˜code™Kšœ<™K˜Kšœœœ˜K•StartOfExpansionL -- [cmd: Commander.Handle] RETURNS [result: REF ANY _ NIL, msg: ROPE _ NIL]˜–L -- [cmd: Commander.Handle] RETURNS [result: REF ANY _ NIL, msg: ROPE _ NIL]šΟnœ˜#Kš œœ œœœœœ™HKš ‘œœœ  œœ˜RKš‘œœ  œœ˜4KšœœœœF˜xšœY˜YKšœœ˜!—K˜K˜—K–x[key: ROPE, proc: Commander.CommandProc, doc: ROPE _ NIL, clientData: REF ANY _ NIL, interpreted: BOOL _ TRUE]˜l—K˜Kšœ˜—…—$ƒ