<> <> DIRECTORY RTBasic USING [Type, nullType], Rope USING [ROPE, Text], List USING [AList]; Atom: CEDAR DEFINITIONS IMPORTS Rope = BEGIN <> PropList: TYPE = List.AList; NILNotAnAtom: ERROR; <> emptyAtom: ATOM; -- 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]; IsAnAtom: PROC [type: RTBasic.Type, dereferenced: BOOLEAN _ FALSE] RETURNS[BOOLEAN]; << e.g. if x: TYPE = LIST OF REF ANY, and you obtain a tv for the first element of x, its type is of REF ANY. The only way to find out if this is an atom is to ask whether the type of its referent, i.e. Range[type], is the same as that of the type of the range of ATOM. This procedure does that for you. If dereferenced = TRUE, then type is the type of the referent, and in this case the test is whether type is equivalent to the range of ATOM. >> Gensym: PROC [c: CHARACTER _ 'A] RETURNS[ATOM]; <> <> GetPName: PROC[atom: ATOM] RETURNS[pName: Rope.Text]; Length: PROC [self: ATOM] RETURNS[LONG INTEGER]; <> <> <> <> <> GetPropertyList: PROC [atom: ATOM] RETURNS[List.AList]; -- 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]; <> <> TypePutProp: PRIVATE PROC [type: RTBasic.Type _ RTBasic.nullType, prop: ATOM, val: REF ANY]; <> TypeGetProp: PRIVATE PROC [type: RTBasic.Type _ RTBasic.nullType, prop: ATOM, dereferenced: BOOLEAN _ FALSE, ref: REF ANY _ NIL] RETURNS[REF ANY]; <> <> <> MapAtoms: PROC[proc: PROC[atom: ATOM]]; FindAtom: PROC[proc: PROC[atom: ATOM] RETURNS[stop: BOOLEAN]] RETURNS[ATOM]; END. change log 10-Feb-82 14:47:48 added zone for atoms. Changed all prop arguments from ATOM to REF ANY. Added pointer to Paxtons Reftab. 18-Feb-82 12:14:50 changed GetPName to return Rope.Text instead of REF TEXT June 1, 1982 3:28 pm name of argument to MakeAtom changed from ref to pName August 31, 1982 1:51 pm TypePutProp, TypeGetProp now private.