The interface provides information about the parameters of a Natural
subprogram or method in a structure named
parameter_description
. The structure is defined in the
header file natuser.h. This file is contained in the
directory NATDIR:[F$Trnlnm("NATVERS").samples.sysexnni].
An array of parameter_description
structures is
passed to the interface with each call to nni_callnat
and similar
functions. A parameter_description
structure is created
from a parameter in a parameter set using the function
nni_get_parm_info
.
The relevant elements of the structure contain the following information. All elements not listed in this table are for internal use only.
Format | Element Name | Content |
---|---|---|
void* | address | Address of the parameter value. Must not be reallocated or freed.
The address element is a null pointer for arrays of dynamic variables and for
x-arrays. In these cases, the array data cannot be accessed as a whole, but can
only be accessed elementwise through the parameter access function
nni_get_parm .
|
int | format | Natural data type of the parameter. Refer to Natural Data Types for further information. |
int | length | Natural length of the parameter value. In the case of the data
types NNI_TYPE_ALPHA and NNI_TYPE_UNICODE , the number
of characters. In the case of the data types NNI_TYPE_PACK and
NNI_TYPE_NUM , the number of digits before the decimal character.
In the case of an array, the length of a single occurrence. In the case of an
array of dynamic variables, the length is indicated with 0. The length of an
individual occurrence must then be determined with the function
nni_get_parm_array_length .
|
int | precision | In the case of the data types NNI_TYPE_PACK and
NNI_TYPE_NUM the number of digits after the decimal character, 0
otherwise.
|
int | byte_length | Length of the parameter value in bytes. In the case of an array
the byte length of a single occurrence. In the case of an array of dynamic
variables the byte length is indicated with 0. The length of an individual
occurrence must then be determined with the function
nni_get_parm_array_length .
|
int | dimensions | Number of dimensions. 0 in the case of a scalar. The maximum number of dimensions is 3. |
int | length_all | Total length of the parameter value in bytes. In the case of an
array the byte length of the whole array. In the case of an array of dynamic
variables the total length is indicated with 0. The length of an individual
occurrence must then be determined with the function
nni_get_parm_array_length .
|
int | flags | Parameter flags, see Flags. |
int | occurrences[10] | Number of occurrences in each dimension. Only the first three occurrences are used. |
int | indexfactors[10] | Array indexfactors for each dimension. Only the first three occurrences are used. |
In the case of arrays with fixed bounds of variables with fixed length,
the array contents can be accessed directly using the structure element
address
. In these cases the following applies:
The address of the element (i,j,k) of a three dimensional array is computed as follows:
elementaddress = address + i * indexfactors[0] + j * indexfactors[1] + k * indexfactors[2]
The address of the element (i,j) of a two dimensional array is computed as follows:
elementaddress = address + i * indexfactors[0] + j * indexfactors[1]
The address of the element (i) of a one dimensional array is computed as follows:
elementaddress = address + i * indexfactors[0]