-- Copyright (C) 1984 by Xerox Corporation. All rights reserved. -- ProfileNoDisk.mesa, HGM, 4-Nov-84 7:54:54 DIRECTORY Auth USING [Flavor, IdentityHandle], Profile USING [Qualification], String USING [AppendChar, AppendString, AppendSubString, Length, SubStringDescriptor]; ProfileNoDisk: PROGRAM IMPORTS String EXPORTS Profile = BEGIN simple: Auth.IdentityHandle ¬ NIL; strong: Auth.IdentityHandle ¬ NIL; GetID: PUBLIC PROC [flavor: Auth.Flavor, proc: PROC [id: Auth.IdentityHandle]] = BEGIN SELECT flavor FROM simple => proc[simple]; strong => proc[strong]; ENDCASE => ERROR; END; GetUser: PUBLIC PROC [ proc: PROC [name, password: LONG STRING], qualification: Profile.Qualification ¬ none] = BEGIN proc["Foo", "Foo"]; END; GetDefaultDomain: PUBLIC PROC [proc: PROC [LONG STRING]] = {proc["AlphaServices-PA"]}; GetDefaultOrganization: PUBLIC PROC [proc: PROC [LONG STRING]] = {proc["Xerox"]}; Qualify: PUBLIC PROC [ token, newToken: LONG STRING, qualification: Profile.Qualification] = { namePart: CARDINAL ¬ String.Length[token]; currentQual: Profile.Qualification ¬ none; octalAddress: BOOLEAN ¬ TRUE; -- only '0..'7 and '# allowed ss: String.SubStringDescriptor; chChar: CHARACTER = ':; regChar: CHARACTER = '.; IF String.Length[token] = 0 THEN RETURN; FOR i: CARDINAL IN [0..token.length) DO SELECT token[i] FROM regChar => {namePart ¬ i; currentQual ¬ registry}; -- look for last dot chChar => {namePart ¬ i; currentQual ¬ clearinghouse; EXIT}; -- first : IN['0..'7], '# => NULL; ENDCASE => octalAddress ¬ FALSE; ENDLOOP; IF currentQual = qualification OR octalAddress THEN { String.AppendString[newToken, token]; RETURN}; ss ¬ [base: token, offset: 0, length: namePart]; String.AppendSubString[newToken, @ss]; SELECT qualification FROM none => NULL; registry => String.AppendString[newToken, ".PA"]; clearinghouse => { String.AppendChar[newToken, chChar]; String.AppendString[newToken, "AlphaServices-PA"]; String.AppendChar[newToken, chChar]; String.AppendString[newToken, "Xerox"]}; ENDCASE}; END.