next up previous
Next: Accessing Array Information in Extensions
Up: EXTENSIONS
Previous: Accessing Existing Extensions

Creating New Extensions   

New extensions are created by calling the routine NDF_XNEW and specifying the extension name together with its HDS type and shape. For instance:

      CHARACTER * ( DAT__SZLOC ) LOC

      ...

      CALL NDF_XNEW( INDF, 'IRAS', 'IRAS_EXTENSION', 0, 0, LOC, STATUS )

would create a new scalar `IRAS' extension with an HDS type of `IRAS_EXTENSION' and return a locator for it via the LOC argument. In practice, extensions will almost always be scalar HDS structures, but this routine allows for other possibilities if required. An error will result if the named extension already exists.

Once an extension structure has been created, components may be created within it and values assigned to them using HDS routines, as before. For instance, to create and assign a value of 30.5 to a real component called ANGLE in a newly-created `IRAS' extension, the following calls might be used:

      CHARACTER * ( DAT__SZLOC ) LOC
      REAL ANGLE

      ...

      CALL NDF_XNEW( INDF, 'IRAS', 'IRAS_EXTENSION', 0, 0, LOC, STATUS )
      CALL CMP_MOD( LOC, 'ANGLE', '_REAL', 0, 0, STATUS )
      CALL CMP_PUT0R( LOC, 'ANGLE', 30.5, STATUS )
      CALL DAT_ANNUL( LOC, STATUS )

Here, the call to CMP_MOD ensures that the required ANGLE component exists, creating it if necessary. CMP_PUT0R then assigns a value to it. The extension locator LOC must be annulled when it is no longer required, since the NDF_ system will not perform this task.

Again, this process of creating a scalar component within an NDF extension and writing a value to it is sufficiently common that a set of routines is provided to do it directly. In this case, the routines have names of the form NDF_XPT0x, where the (lower-case) ``x'' should be replaced by I, R, D, L or C, according to the type of value being written. The above operation of writing a real value into a component of an `IRAS' extension can therefore be performed with a single call to NDF_XPT0R, as follows:

      CALL NDF_XPT0R( ANGLE, INDF, 'IRAS', 'ANGLE', STATUS )

As with the NDF_XGT0x routines (see §[*]), the NDF_XPT0x routines will also accept a compound HDS component name, possibly including array subscripts, as a third argument. This allows the creation of components which are nested more deeply inside the extension, but remember that all HDS structures lying above the new component must already exist. When writing to an array element, the array itself must also previously have been created.



next up previous
Next: Accessing Array Information in Extensions
Up: EXTENSIONS
Previous: Accessing Existing Extensions


Starlink User Note 33
R.F. Warren-Smith
11th January 2000
E-mail:rfws@star.rl.ac.uk

Copyright © 2000 Council for the Central Laboratory of the Research Councils