<> <> <> <<>> DIRECTORY Atom USING [GetPName], DefaultRegistry, Rope USING [Cat, Concat, Find, Substr], UserCredentials USING [Get], UserProfile USING [Token]; DefaultRegistryImpl: CEDAR PROGRAM IMPORTS Atom, Rope, UserCredentials, UserProfile EXPORTS DefaultRegistry ~ { OPEN DefaultRegistry; MakeRegistryExplicit: PUBLIC PROC [in: ROPE, packages: LIST OF ATOM _ LIST [$Default], defaultDefault: ROPE _ UsersRegistry[]] RETURNS [out: ROPE] ~ { <> IF Rope.Find[in, "."] # -1 THEN out _ in ELSE out _ Rope.Cat[in, ".", GetDefaultRegistry[packages, defaultDefault]]; }; GetDefaultRegistry: PUBLIC PROC [packages: LIST OF ATOM _ LIST [$Default], defaultDefault: ROPE _ UsersRegistry[]] RETURNS [registry: ROPE] ~ { <> packageList: LIST OF ATOM _ packages; WHILE packageList # NIL DO ext: ROPE _ UserProfile.Token[Rope.Concat[Atom.GetPName[packageList.first], ".DefaultRegistry"]]; --Get profile entry for it, if exists IF ext#NIL THEN RETURN[ext]; --Return it if good, else try again packageList _ packageList.rest; --Remove first atom from list ENDLOOP; RETURN[defaultDefault]; }; UsersRegistry: PUBLIC PROC RETURNS [registry: ROPE] ~ { <> credentials: ROPE _ UserCredentials.Get[].name; registry _ Rope.Substr[base: credentials, start: Rope.Find[credentials, "."]+1]; }; }.