UserCredentialsVeneer.mesa
last edited by Levin on November 1, 1982 5:47 pm
DIRECTORY
BodyDefs: TYPE USING [maxRNameLength],
ConvertUnsafe: TYPE USING [AppendRope, ToRope],
Heap: TYPE USING [systemZone],
Rope: TYPE USING [Length, ROPE],
SpecialTerminal: TYPE USING [TurnOn, TurnOff],
UserCredentials: TYPE USING [defaultOptions, LoginOptions, State],
UserCredentialsUnsafe: TYPE USING [
ChangeCredentialsState, GetCredentialsState, GetProc, GetUserCredentials, Login,
PutProc, SetUserCredentials];
UserCredentialsVeneer: CEDAR PROGRAM
IMPORTS ConvertUnsafe, Heap, Rope, SpecialTerminal, UserCredentialsUnsafe
EXPORTS UserCredentials =
BEGIN
State: TYPE = UserCredentials.State;
GetCredentialsState: PUBLIC PROC RETURNS [State] = TRUSTED
{RETURN[UserCredentialsUnsafe.GetCredentialsState[]]};
ChangeCredentialsState: PUBLIC PROC [new: State] RETURNS [old: State] = TRUSTED
{RETURN[UserCredentialsUnsafe.ChangeCredentialsState[new]]};
Login: PUBLIC PROC [options: UserCredentials.LoginOptions ← UserCredentials.defaultOptions] = TRUSTED {
On: PROC RETURNS [g: UserCredentialsUnsafe.GetProc, p: UserCredentialsUnsafe.PutProc] =
TRUSTED {[g, p] ← SpecialTerminal.TurnOn[]};
Off: PROC = TRUSTED {SpecialTerminal.TurnOff[]};
UserCredentialsUnsafe.Login[
startInteraction: On, endInteraction: Off, options: options
! UNWIND => Off[] ];
};
GetUserCredentials: PUBLIC PROC RETURNS [name, password: Rope.ROPE] = TRUSTED {
nameS: LONG STRING ← Heap.systemZone.NEW[StringBody[BodyDefs.maxRNameLength]];
passwordS: LONG STRING ← Heap.systemZone.NEW[StringBody[BodyDefs.maxRNameLength]];
UserCredentialsUnsafe.GetUserCredentials[nameS, passwordS];
name ← ConvertUnsafe.ToRope[nameS];
password ← ConvertUnsafe.ToRope[passwordS];
Heap.systemZone.FREE[@nameS];
Heap.systemZone.FREE[@passwordS];
};
SetUserCredentials: PUBLIC PROC [name, password: Rope.ROPE] = TRUSTED {
nameS: LONG STRING ← Heap.systemZone.NEW[StringBody[Rope.Length[name]]];
passwordS: LONG STRING ← Heap.systemZone.NEW[StringBody[Rope.Length[password]]];
ConvertUnsafe.AppendRope[to: nameS, from: name];
ConvertUnsafe.AppendRope[to: passwordS, from: password];
UserCredentialsUnsafe.SetUserCredentials[nameS, passwordS];
Heap.systemZone.FREE[@nameS];
Heap.systemZone.FREE[@passwordS];
};
END.