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. RUserCredentialsVeneer.mesa last edited by Levin on November 1, 1982 5:47 pm Κ•– "Mesa" style˜JšΟc™Jšœ™0J˜šΟk ˜ Jšœ žœžœ˜&Jšœžœžœ˜/Jšœžœžœ˜Jšœžœžœ žœ˜ Jšœžœžœ˜.Jšœžœžœ'˜Bšœž œ˜#JšœP˜PJšœ˜——J˜šœžœž˜$JšžœB˜IJšžœ˜—J˜Jšž˜Iproc˜Kšœžœ˜$K˜š Οnœžœžœžœ ž˜:Jšœžœ/˜6—K˜š Ÿœžœžœžœž˜OJšœžœ5˜<—K˜šŸœžœžœHž œ˜gšŸœžœžœG˜WJšžœ$˜,—JšŸœžœžœ˜1šœ˜Jšœ;˜;Jšœžœ ˜—Jšœ˜—K˜š Ÿœžœžœžœžœžœ˜OJšœž œžœ&˜NJšœ ž œžœ&˜RJ˜;Jšœ#˜#Jšœ+˜+Jšœžœ ˜Jšœžœ ˜!J˜—K˜š Ÿœžœžœžœžœ˜GJšœž œžœ ˜HJšœ ž œžœ$˜PJšœ0˜0Jšœ8˜8Jšœ;˜;Jšœžœ ˜Jšœžœ ˜!Jšœ˜—J˜Jšžœ˜J˜—…—† m