<> <> <> <<>> <> DIRECTORY Pup USING [Address, Socket], Rope USING [ROPE]; PupName: CEDAR DEFINITIONS = { ROPE: TYPE = Rope.ROPE; <> <> <> <Pup-network.txt.>> <> <<(The other text after each entry is just a comment.)>> <> <> <> <<>> <> <<>> <##.>> <> <> <> <<>> <<"+" can also be used to merge two lists of addresses.>> <<"Merge" means take the valid subsets of all possible pairings of one address from the left side and one from the right. A combination is valid if the net, host, and socket slots are equal or one side is 0. If a field from one side is 0, then the other one is used to construct the resulting address.>> <> < [3#17#3]>> < [131#363#0]. ([324#363#0] doesn't cross with [131#0#0].)>> < [131#363#0] and [324#363#3]. (That was a noop since both possible pairs matched.)>> <<>> <> <> <> <> <> <<>> MyName: PROC RETURNS [ROPE]; <> <> <<>> MyRope: PROC RETURNS [ROPE]; <> <> <> <> <<>> NameLookup: PROC [name: ROPE, default: Pup.Socket] RETURNS [Pup.Address]; <> <<"ME" is a special hack for the local machine. (Case is important.)>> <> <> <> HisAddresses: PROC [name: ROPE, default: Pup.Socket] RETURNS [LIST OF Pup.Address]; <> AddressToRope: PROC [Pup.Address] RETURNS [ROPE]; <> < "1#13#" (no trailing 0)>> <> <<>> HisName: PROC [Pup.Address] RETURNS [ROPE]; <> <> AddressLookup: PROC [Pup.Address] RETURNS [ROPE]; <> <> <> <> <> <> <<>> <> IsWellKnown: PROC [Pup.Socket] RETURNS [yes: BOOL]; <> <> <> Code: TYPE = {noRoute, noResponse, errorFromServer}; <> Error: ERROR [code: Code, text: ROPE]; }.