Enif is based to a large extent on user configurable objects, such as mappers, plots, lists or preferences (which are all to be explained later). The mechanism which provides configurability is implemented via a special class of objects called parameters.
A parameter is an object which is defined by the following properties:
At first sight these parameter properties may seem rather abstract. But as we shall see further on, it is this parameter concept which is responsible in large part for the flexibility of Enif.
In addition to storing simple numerical or string values, parameters are also used to store much more complex structures, such as the expressions, the selectors and the styli described in the previous sections. In the case of a stylus, each value corresponds to one complete set of display properties, so that an indexed stylus is implemented simply as a multi-valued parameter of the type stylus. The actual number of values of a parameter is determined at run time and can be changed dynamically.
By assigning the same group name to several parameters, the user can create logical groups of parameters, which automatically synchronize their values. So subsequently the user only needs to change the value of any one of the parameter in the group; all others will follow the change automatically. The usefulness of this grouping feature will become easier to understand later on when discussing the automatic synchronization of parameters between collaborating mappers.
Configurable objects organize their parameters in one or more parameter lists. Within a parameter list, the names of the parameters must always be unique.