<> <> <> 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 = { <<[cmd: Commander.Handle] RETURNS [result: REF ANY _ NIL, msg: ROPE _ NIL]>> 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."]; }.