DIRECTORY RProperties; RPropertiesImpl: CEDAR MONITOR EXPORTS RProperties = BEGIN PropList: TYPE = RProperties.PropList; GetProp: PUBLIC ENTRY PROC [propList: PropList, prop: REF] RETURNS [REF ¬ NIL] = { ENABLE UNWIND => NULL; IF propList=NIL THEN RETURN [NIL]; IF propList.first.key = prop THEN RETURN [propList.first.val] ELSE { lst: PropList ¬ propList.rest; lag: PropList ¬ propList; UNTIL lst = NIL DO rest: PropList ¬ lst.rest; IF lst.first.key = prop THEN { lag.rest ¬ rest; lst.rest ¬ propList.rest; propList.rest ¬ lst; RETURN [lst.first.val] }; lag ¬ lst; lst ¬ rest; ENDLOOP; }; }; PutProp: PUBLIC ENTRY PROC [propList: PropList, prop: REF, val: REF ¬ NIL] RETURNS [PropList] = { ENABLE UNWIND => NULL; IF val=NIL THEN RETURN [RemPropInternal[propList, prop]] ELSE RETURN [PutPropInternal[propList, prop, val]] }; RemPropInternal: INTERNAL PROC [propList: PropList, prop: REF] RETURNS [PropList] = INLINE { lst: PropList ¬ propList; lag: PropList ¬ NIL; UNTIL lst = NIL DO rest: PropList ¬ lst.rest; IF lst.first.key = prop THEN { IF lag = NIL THEN RETURN [rest]; lag.rest ¬ rest; RETURN [propList]; }; lag ¬ lst; lst ¬ rest; ENDLOOP; RETURN [propList]; }; PutPropInternal: INTERNAL PROC [propList: PropList, prop: REF, val: REF] RETURNS [PropList] = INLINE { lst: PropList ¬ propList; lag: PropList ¬ NIL; WHILE lst # NIL DO IF lst.first.key = prop THEN { lst.first.val ¬ val; RETURN [propList]; }; lag ¬ lst; lst ¬ lst.rest; ENDLOOP; lst ¬ LIST[[key: prop, val: val]]; IF lag = NIL THEN RETURN [lst]; lag.rest ¬ lst; RETURN [propList]; }; CopyList: PUBLIC ENTRY PROC [propList: PropList] RETURNS [copy: PropList¬NIL] = { ENABLE UNWIND => NULL; IF propList#NIL THEN { lst: PropList; copy ¬ lst ¬ propList ¬ LIST[propList.first]; WHILE (propList¬propList.rest) # NIL DO lst.rest ¬ LIST[propList.first]; lst ¬ lst.rest; ENDLOOP }; }; END. . RPropertiesImpl.mesa Copyright Σ 1985, 1991 by Xerox Corporation. All rights reserved. Created by Christian Jacobi, September 19, 1985 3:33:07 pm PDT 4:15 pm Last edited by: Christian Jacobi, December 22, 1986 11:54:01 am PST --Update list element in place --prop not found on property list ΚΟ–(cedarcode) style•NewlineDelimiter ™codešœ™Kšœ Οeœ6™BKšœF™FK™CK˜—šΟk ˜ K˜ —K˜šΠblœžœžœ˜ Kšžœ˜—Kšž˜K™Kšœ žœžœ ˜&K™šΟnœžœžœžœžœžœžœžœ˜RKšžœžœžœ˜Kš žœ žœžœžœžœ˜"Kšžœžœžœ˜=šžœ˜Kšœ˜Kšœ˜šžœžœž˜Kšœ˜šžœžœ˜Kšœ˜Kšœ˜Kšœ˜Kšžœ˜K˜—K˜ K˜ Kšžœ˜—K˜—K˜—K˜š œžœžœžœžœžœžœžœ˜aKšžœžœžœ˜Kšžœžœžœžœ"˜8Kšžœžœ(˜3K˜—K˜š  œžœžœžœžœžœ˜\Kšœ˜Kšœžœ˜šžœžœž˜Kšœ˜šžœžœ˜Kšžœžœžœžœ˜ Kšœ˜Kšžœ ˜K˜—K˜ K˜ Kšžœ˜—Kšžœ ˜Kšœ˜—K˜š œžœžœžœžœžœžœ˜gKšœ˜Kšœžœ˜šžœžœž˜šžœžœ˜Kšœ™K˜Kšžœ ˜Kšœ˜—K˜ K˜Kšžœ˜—KšΟc!™!Kšœžœ˜"Kšžœžœžœžœ˜Kšœ˜Kšžœ ˜Kšœ˜K˜—š  œž œžœžœžœ˜QKšžœžœžœ˜šžœ žœžœ˜Kšœ˜Kšœžœ˜.šžœžœž˜'Kšœ žœ˜ Kšœ˜Kšž˜—K˜—K˜—K˜Kšžœ˜K˜—…—H E