-- 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.