The following is documentation of Groups.laurel. Groups.laurel allows a user to do set union, subtraction, intersection, and closure expansion on both Grapevine and private distribution lists. The user interface is teletype-style; all commands are given by entering a single letter. Entering an unrecognized command letter will cause Groups.laurel to display a list of the legal commands. The user may abort any command except "Membership check" by typing Control-DEL. E: Expand a public or private distribution list. The command will prompt you for the name of a group, which may be either a public DL (e.g. "Name↑.Registry") or a local file name preceded by "@" (e.g. "@MyList.dl"). It will then output all names directly and/or indirectly contained in that list, according to the current expansion level. (See the "L" command below for more information on expansion levels). I: Intersect two public or private distribution lists. The command will prompt you for the names of two groups, either of which may be either a public DL or a local file name. It wll then output all names which are members of both DL's. U: Union of two public or private distribution lists. The command will prompt you for the names of two groups, either of which may be either a public DL or a local file name. It wll then output all names which are members of either DL. S: Subtract two public or private distribution lists. The command will prompt you for the names of two groups, either of which may be either a public DL or a local file name. It wll then output all names which are members of the first DL and are NOT members of the second. R: Registry filter. This command will prompt you for the name of a public or private DL, and then for the name of a Grapevine registry (which should not include a leading period). It will then output all members of the DL which are in that registry. If you precede the name of the registry with the "~" (tilde) character, it will instead output all members of the DL which are NOT in that registry. M: Membership check. This command prompts you for two Grapevine names, the second of which must be a group. (It may not be a local file name.) It then tells you whether the first name is a direct or indirect member if the group, according to the current expansion level. Q: Quit from this program. L: change expansion Level. The command will prompt you for the letter C, D, or U, meaning Closure, Direct, or UpArrow expansion. Groups.laurel starts out in UpArrow mode. When expanding or checking membership in a group, Groups.laurel can use one of three algorithms to decide how to expand the group. Normally, it uses "UpArrow" expansion, which means that any name in the group is replaced by its members if it contains a "↑" character. This process continues recursively until no names containing "↑" characters remain, or until a previously encountered "↑"-containing name is encountered again. It is also possible to use "closure" expansion, which means that any name within this group is expanded if it is itself a group. This process also continues recursively until there are no groups left or until a previously encountered group is encountered again. Closure expansion is much slower than "UpArrow" expansion. Most Grapevine group names contain a "↑" character; unless you are dealing with groups that don't, "UpArrow" expansion will give the same result as closure expansion and execute considerably faster. Finally, "direct" expansion simply retrieves the membership list of the group, and applies no recursion. --Ron <Newman.es>, May 6, 1983