<> <> <> <> DIRECTORY GVBasics USING [RName], Pup USING [Address]; GVLocate: CEDAR DEFINITIONS = BEGIN FoundState: TYPE = { allDown, notFound, found }; FoundServerInfo: TYPE = RECORD[ SELECT t: FoundState FROM allDown => NULL, notFound => NULL, found => [where: Pup.Address], ENDCASE ]; FindNearestServer: PROC[list: GVBasics.RName, accept: PROC[Pup.Address]RETURNS[BOOLEAN] ] RETURNS[ FoundServerInfo ]; FindLocalServer: PROC[listl: GVBasics.RName ] RETURNS[ FoundState, GVBasics.RName ]; FindRegServer: PROC[ who: GVBasics.RName, accept: PROCEDURE[Pup.Address]RETURNS[BOOLEAN] ] RETURNS[ FoundServerInfo ]; END.