A reference to a based variable may be qualified by a reference to a pointer or offset variable. For example:
DECLARE A(10) FLOAT BASED; DECLARE P POINTER;
In this example, P –>A and P –>A(K) are pointer qualified references to the based variable A.
Since a pointer variable may itself be based, multiple qualification is possible. For example:
DECLARE 1 NODE BASED, 2 NEXT POINTER, 2 VALUE FLOAT; DECLARE HEAD POINTER;
In this example, HEAD –>NODE.NEXT–>NODE.VALUE is a pointer qualified reference to NODE.VALUE. It is qualified by NODE.NEXT, which is, in turn, qualified by HEAD.
Pointer-valued functions and pointer-valued built-in functions may also be used as pointer qualifiers.
DECLARE NEXT_NODE ENTRY RETURNS(POINTER);
In this example, NEXT_NODE() –>NODE.VALUE is a pointer qualified reference to NODE.VALUE whose qualifier is a function reference.
When addressing data allocated in an area, an offset variable can be used as a locator qualifier in the same fashion as the pointer is in the above examples. The offset value will be implicitly converted to a pointer value by adding the address of the area specified in the OFFSET attribute of its declaration.