| OCR Text |
Show 20 Constraints are indicated as being optional in TDL. This is due to the fact that some tilesets are designed so as to not have any placement constraints. These constraints can also be hidden from the designer, which involves having several physical layout descriptions for certain tiles; which tiles can then be placed anywhere, but where they are placed determines which description is used to achieve the proper mirroring. Periodicity is an implicit grid property related to the constraint and mirroring concepts. A rectangular grid with row and column bands, where every other band is meant to be mirrored, has a period of two in each band; thus, modulus, as in modulo arithmetic, is essentially synonymous with period. This property must be preserved in order to avoid placement constraint violations that might otherwise occur when inserting or deleting grid bands between tiles - operations that are actually performed by moving the tiles themselves. Such a mass move of tiles preserves grid periodicity by ensuring that the distance moved, in each band, is an integer multiple of the band period. The tileset object created by DEFTILESET stores the names of all tiles defined by DEFTILE in its HASH-TABLE instance variable. The tileset's GR.ID-INIT-PLIST instance variable is a list containing all the supplied and derived properties of the grid, ready to be used when the grid object is instantiated.1 The minimal tile attributes are specified by Tile-definition clauses, whose syn-tax is as follows: (DEFTILE Name (KEY Key) {(USES Uses)} {(EDGES Edges)} {(PORTS Ports)} {(CONSTRAINTS Constraints)} {(DISPLAY Display)} {(DEVICE Device)} {(MODIFIERS Modifiers)}) 1 Init-plist (pronounced "in-it-pee-list") is short for initialization property list. These init-plists are ubiquitous in Symbolics-Lisp, and are useful for storing not only the initial, but also the static, or unchanging properties of an object. The property indicators are init-keywords (so-called because they are interned in the keyword package,) and correspond to symbols naming the object's instance variables. Since the actual memory allocated to each instance variable is exactly one machine word (32 bits on the Symbolics [19],) values of these variables are accessed indirectly, that is, the word contains a pointer to the location in memory where the actual value resides. So, when these init-plists are passed to the function that creates new instances of a flavor, the instance variables of this new object are made to point to the Lisp objects that are the values in the init-plist. In this way, all instances of this flavor are able to share the same data structures for their invariant attributes - an obvious boon to storage efficiency. |