CoreProperties.mesa
Copyright © 1985 by Xerox Corporation. All rights reversed.
Barth, October 2, 1985 11:30:37 am PDT
Spreitzer, August 12, 1985 6:05:07 pm PDT
Bertrand Serlet October 2, 1985 12:08:17 pm PDT
Operations
GetProp:
PROC [from: Properties, prop:
ATOM]
RETURNS [value:
REF
ANY ←
NIL];
If value is NIL then no such property.
PutProp:
PROC [on: Properties, prop:
ATOM, value:
REF
ANY ←
NIL]
RETURNS [new: Properties];
If value is NIL then the property is deleted.
CopyProps:
PROC [propList: Properties]
RETURNS [copy: Properties];
Uses the property-property propCopy to copy each item.
AppendProps:
PROC [winner, loser: Properties]
RETURNS [copy: Properties];
Uses the property-property propCopy to copy each item.
Enumerate:
PROC [props: Properties, consume:
PROC [prop:
ATOM, val:
REF
ANY ←
NIL]];
PrintProperties:
PROC [props: Properties, out:
STREAM, depth:
NAT ← 0];
Uses the property-property propPrettyPrint to print each item.
Registration
RegisterProperty:
PROC [prop:
ATOM, properties: Properties ←
NIL]
RETURNS [sameProp:
ATOM];
Should be called by every tool which uses a property. Sets the properties proterties as given in the second argument. Returns the argument so that definition and registration can occur in the same line of Cedar code.
StoreProperties:
PROC [prop:
ATOM, properties: Properties];
To store properties on properties.
FetchProperties:
PROC [prop:
ATOM]
RETURNS [properties: Properties];
To fetch properties on properties.
propPrettyPrint, propRead, propWrite, propCopy, propCompare: ATOM;
Values should be REFs to procs of the appropriate TYPEs.
No PropCompareProc means pointer comparison.
No PropCopyProc means don't copy the property.
No PropWriteProc means don't write the property.
No PropReadProc means make an ERROR.
No PropPrettyPrintProc means it pretty prints as property atom only.
PropDontPrint:
PROC[prop:
ATOM];
-- causes nothing to be printed
PropCompareProc:
TYPE =
PROC [prop:
ATOM, value1, value2:
REF
ANY]
RETURNS [equal:
BOOL ←
FALSE];
PropCopyProc:
TYPE =
PROC [prop:
ATOM, value:
REF
ANY]
RETURNS [valCopy:
REF
ANY];
If valCopy is NIL then don't copy.
PropWriteProc:
TYPE =
PROC [out:
STREAM, val:
REF
ANY];
PropReadProc:
TYPE =
PROC [in:
STREAM]
RETURNS [val:
REF
ANY];
PropPrettyPrintProc:
TYPE =
PROC [to:
STREAM, prop:
ATOM, val:
REF
ANY, depth:
NAT];
PropDoCopy:
REF PropCopyProc;
-- Copy of val; trivial procedure; for some types it is a default
PropRopeCompare: PropCompareProc;
PropIntCompare: PropCompareProc;
PropRopeWrite: PropWriteProc;
PropAtomWrite: PropWriteProc;
PropIntWrite: PropWriteProc;
PropRopeRead: PropReadProc;
PropAtomRead: PropReadProc;
PropIntRead: PropReadProc;
Short Cuts
PropertyLiteral:
TYPE =
RECORD [key:
ATOM, val:
REF
ANY ←
NIL];
Props: PROC [lit1, lit2, lit3, lit4, lit5, lit6: PropertyLiteral ← []] RETURNS [properties: Properties];
GetDesignProp:
PROC [from: Design, prop:
ATOM]
RETURNS [value:
REF
ANY ←
NIL];
PutDesignProp:
PROC [on: Design, prop:
ATOM, value:
REF
ANY ←
NIL];
GetWireProp:
PROC [from: Wire, prop:
ATOM]
RETURNS [value:
REF
ANY ←
NIL];
PutWireProp:
PROC [on: Wire, prop:
ATOM, value:
REF
ANY ←
NIL];
GetCellTypeProp:
PROC [from: CellType, prop:
ATOM]
RETURNS [value:
REF
ANY ←
NIL];
PutCellTypeProp:
PROC [on: CellType, prop:
ATOM, value:
REF
ANY ←
NIL];
GetCellInstanceProp:
PROC [from: CoreRecord.CellInstance, prop:
ATOM]
RETURNS [value:
REF
ANY ←
NIL];
PutCellInstanceProp:
PROC [on: CoreRecord.CellInstance, prop:
ATOM, value:
REF
ANY ←
NIL];