<> <> <> DIRECTORY Rope USING [ROPE, Text]; Atom: CEDAR DEFINITIONS = BEGIN <> PropList: TYPE = LIST OF DottedPair; DottedPair: TYPE = REF DottedPairNode; DottedPairNode: TYPE = RECORD [key, val: REF ANY]; <> EmptyAtom: PROC RETURNS[ATOM]; -- returns the atom with pname = "" MakeAtom: PROC [pName: Rope.ROPE] RETURNS[ATOM]; < MakeAtom[r1] = MakeAtom[r2]. In particular, MakeAtom[""] = MakeAtom[NIL] = emptyAtom. Note that NIL # MakeAtom[NIL].>> MakeAtomFromChar: PROC [char: CHARACTER] RETURNS[ATOM]; MakeAtomFromRefText: PROC [rt: REF READONLY TEXT] RETURNS[ATOM]; <> GetPName: PROC[atom: ATOM] RETURNS[pName: Rope.Text]; <> <> <> <> GetPropertyList: PROC [atom: ATOM] RETURNS[PropList]; -- gets entire property list GetProp: PROC [atom: ATOM, prop: REF ANY] RETURNS[REF ANY]; GetPropFromList: PROC [propList: PropList, prop: REF ANY] RETURNS[REF ANY]; PutProp: PROC [atom: ATOM, prop: REF ANY, val: REF ANY]; PutPropOnList: PROC [propList: PropList, prop: REF ANY, val: REF ANY] RETURNS[PropList]; RemProp: PROC [atom: ATOM, prop: REF ANY]; RemPropFromList: PROC [propList: PropList, prop: REF ANY] RETURNS[PropList]; <> MapAtoms: PROC[proc: PROC[atom: ATOM]]; FindAtom: PROC[proc: PROC[atom: ATOM] RETURNS[stop: BOOLEAN]] RETURNS[ATOM]; <> NILNotAnAtom: ERROR; END.