The only valid thing that can be done with an NDF placeholder is to pass it to a routine which creates an NDF. Thus, to create a new simple NDF by this means, the routine NDF_NEW might be used along with NDF_PLACE, as follows:
CALL NDF_PLACE( LOC, 'NEW_NDF', PLACE, STATUS )
CALL NDF_NEW( '_INTEGER', NDIM, LBND, UBND, PLACE, INDF, STATUS )
The call to NDF_NEW will create the required new simple NDF (in this case with a type of `_INTEGER') in place of the placeholder PLACE; i.e. in component NEW_NDF of the HDS structure with locator LOC. This act of creation automatically annuls the placeholder, whose value is reset to NDF__NOPL (this value is defined in the include file NDF_PAR and is reserved for indicating that a variable is not a valid placeholder).
A similar routine NDF_NEWP also exists by analogy with NDF_CREP (see
§) to create a primitive NDF via a placeholder in exactly the
same way.
Note that placeholders are only intended for local use within an
application and only a limited number of them are available simultaneously.
They are always annulled as soon as they are passed to a routine which
creates an NDF, where they are effectively exchanged for an NDF identifier.
Since this is the only valid fate for a placeholder, there is no routine for
annulling them explicitly.
However, the routine NDF_END will annul any which are left outstanding as
part of the ``cleaning up'' role it performs at the end of an NDF context
(see §).