MDSplus Descriptor Structures 

MDSplus passes data around using structures called descriptors. The first eight bytes of all descriptors contain the same information so routines can cast the structure passed in to the appropriate descriptor based on the fields in these first eight bytes. Three of these descriptors, struct dsc$descriptor, dsc$descriptor_s,dsc$descriptor_d and dsc$descriptor_a are defined in <descrip.h> as provided by the OpenVMS operating system. The remainder of the structures are defined in <tdescrip.h> provided with MDSplus.
 
The dsc$descriptor structure is used for describing scalar values or strings less than 64K characters in length.
Field Description
unsigned short dsc$w_length Length of data in bytes
unsigned char dsc$b_dtype Data type
unsigned char dsc$b_class Descriptor class
char *dsc$a_pointer Pointer to bytes

struct dsc$descriptor

 
The dsc$descriptor_s structure is the same as the dsc$descriptor structure. It is used when the memory pointer to by the dsc$a_pointer is statically allocated.   
Field Description
unsigned short dsc$w_length Length of data in bytes
unsigned char dsc$b_dtype Data type
unsigned char dsc$b_class DSC$K_CLASS_S
char *dsc$a_pointer Pointer to bytes

struct dsc$descriptor_s

 
The dsc$descriptor_d is the same as dsc$descriptor. The memory pointed to by dsc$a_pointer is dynamically allocated. 
Field Description
unsigned short dsc$w_length Length of data in bytes
unsigned char dsc$b_dtype Data type
unsigned char dsc$b_class DSC$K_CLASS_D
char *dsc$a_pointer Pointer to bytes

struct dsc$descriptor_d

 
The dsc$descriptor_a is used to describe arrays of primitive data types.
Field Description
unsigned short dsc$w_length Length of data in bytes
unsigned char dsc$b_dtype Data type
unsigned char dsc$b_class DSC$K_CLASS_A
char *dsc$a_pointer Pointer to bytes
char dsc$b_scale unused
unsigned char dsc$b_digits unused
struct dsc$b_aflags flags
unsigned char dsc$b_dimct Number of dimensions
unsigned long dsc$l_arsize Total size of array in bytes
Optional fields Used if dsc$b_aflags.dsc$v_fl_coeff is set
char *dsc$a_a0 Address of array element whose subscripts are all zero
long dsc$l_m[DIMCT] Number of elements in each dimension
Optional fields Used if dsc$b_aflags.dsc$v_fl_bounds is set
struct dsc$bounds[DIMCT] Upper and lower bounds for each dimension

struct dsc$descriptor_a

  
Field Description
unsigned : 3 Reserved must be zero
unsigned dsc$v_fl_binscale : 1 Unused
unsigned dsc$v_fl_redim Unused
unsigned dsc$v_fl_coeff If set dsc$a_a0 and dsc$a_m fields  included
unsigned dsc$v_fl_bounds If set dsc$bounds fields included

struct dsc$b_aflags

  
 
Field Description
long dsc$l_l Lower bound
long dsc$l_u Upper bound

struct dsc$bound

 
The dsc$descriptor_xd structure is used to point to large segments of dynamic memory.
Field Description
unsigned short dsc$w_length unused
unsigned char dsc$b_dtype Data type
unsigned char dsc$b_class DSC$K_CLASS_XD
char *dsc$a_pointer Pointer to bytes
unsigned int dsc$l_length Length of data in bytes

struct dsc$descriptor_xd

 
The dsc$descriptor_xd structure is used to point to large segments of static memory.
Field Description
unsigned short dsc$w_length unused
unsigned char dsc$b_dtype Data type
unsigned char dsc$b_class DSC$K_CLASS_XS
char *dsc$a_pointer Pointer to bytes
unsigned int dsc$l_length Length of data in bytes

struct dsc$descriptor_xs

 
The dsc$descriptor_r structure is used to represent MDSplus data types that contain pointers to other descriptors.
Field Description
unsigned short dsc$w_length Lenth of data in bytes
unsigned char dsc$b_dtype Data type
unsigned char dsc$b_class DSC$K_CLASS_R
char *dsc$a_pointer Pointer to bytes
unsigned char dsc$b_ndesc Number of descriptor pointers
unsigned : 24 Unused
struct dsc$descriptor *dsc$a_dscptrs[NDESC] Pointers to descriptors

struct dsc$descriptor_r

 
The dsc$descriptor_action structure is a variant of the dsc$descriptor_r structure. It is used to describe MDSplus actions which are scheduled operations which are dispatched to MDSplus server processes. It contains pointers to dispatch information and task information. 
Field Description
unsigned short dsc$w_length 0
unsigned char dsc$b_dtype DSC$K_DTYPE_ACTION
unsigned char dsc$b_class DSC$K_CLASS_R
char *dsc$a_pointer NULL
unsigned char dsc$b_ndesc Number of descriptor pointers
unsigned : 24 Unused
struct dsc$descriptor *dsc$a_dispatch Pointer to dispatch information
struct dsc$descriptor *dsc$a_task Pointer to task information
struct dsc$descriptor *dsc$a_errorlogs unused
struct dsc$descriptor *dsc$a_completion_message unused
struct dsc$descriptor *dsc$a_performance unused

struct dsc$descriptor_action

 
The dsc$descriptor_call structure is used to describe external function calls, either shared library routine calls or tdi FUN calls. The record contains pointers to the shared library name, the routine name and arguments to the external function.
Field Description
unsigned short dsc$w_length 0
unsigned char dsc$b_dtype DSC$K_DTYPE_CALL
unsigned char dsc$b_class DSC$K_CLASS_R
char *dsc$a_pointer NULL
unsigned char dsc$b_ndesc Number of descriptor pointers
unsigned : 24 Unused
struct dsc$descriptor *dsc$a_image Pointer to image name
struct dsc$descriptor *dsc$a_routine Pointer to routine name
struct dsc$descriptor *dsc$a_arguments[NDESC-2] Pointer to arguments

struct dsc$descriptor_call

 
The dsc$descriptor_conglom record is used for describing devices. Devices are typically used to describe data acquisition hardware but can also describe software devices such as IDL jobs. The conglom name comes from the internal implementation of devices which are contiguous collections of nodes. The conglom structure contains the image name containing the device support, the model of the device, an optional instance name of the device (i.e. CAMAC CTS name) and an optional qualifier string for the device.   
Field Description
unsigned short dsc$w_length 0
unsigned char dsc$b_dtype DSC$K_DTYPE_CONGLOM
unsigned char dsc$b_class DSC$K_CLASS_R
char *dsc$a_pointer NULL
unsigned char dsc$b_ndesc Number of descriptor pointers
unsigned : 24 Unused
struct dsc$descriptor *dsc$a_image Pointer to image name
struct dsc$descriptor *dsc$a_model Pointer to device type
struct dsc$descriptor *dsc$a_name Pointer to device name
struct dsc$descriptor *dsc$a_qualifiers Pointer to qualifiers

struct dsc$descriptor_conglom

 
The dsc$descriptor_dimension structure is generally used to describe timebase information for digitizer channels. It contains window and axis information.   
Field Description
unsigned short dsc$w_length 0
unsigned char dsc$b_dtype DSC$K_DTYPE_DIMENSION
unsigned char dsc$b_class DSC$K_CLASS_R
char *dsc$a_pointer NULL
unsigned char dsc$b_ndesc Number of descriptor pointers
unsigned : 24 Unused
struct dsc$descriptor *dsc$a_window Pointer to window into axis
struct dsc$descriptor *dsc$a_axis Pointer to axis

struct dsc$descriptor_dimension

 
The dsc$descriptor_dispatch structure is used to describe action dispatching information. It contains pointers to the server which should execute the action, the phase in which the action is to be executed, scheduling information, and a completion MDSplus event.
Field Description
unsigned short dsc$w_length 1
unsigned char dsc$b_dtype DSC$K_DTYPE_DISPATCH
unsigned char dsc$b_class DSC$K_CLASS_R
char *dsc$a_pointer Pointer to scheduling type (TREE$K_SCHED_SEQ)
unsigned char dsc$b_ndesc Number of descriptor pointers
unsigned : 24 Unused
struct dsc$descriptor *dsc$a_ident Pointer to server name
struct dsc$descriptor *dsc$a_phase Pointer to phase
struct dsc$descriptor *dsc$a_when Pointer to scheduling info
struct dsc$descriptor *dsc$a_completion Pointer to completion event

struct dsc$descriptor_dispatch

 
The dsc$descriptor_function is used to describe references to internal built-in functions. It contains a pointer to the built-in function id and pointers to the arguments to the function.
Field Description
unsigned short dsc$w_length 2
unsigned char dsc$b_dtype DSC$K_DTYPE_DISPATCH
unsigned char dsc$b_class DSC$K_CLASS_R
char *dsc$a_pointer Pointer to built-in number
unsigned char dsc$b_ndesc Number of descriptor pointers
unsigned : 24 Unused
struct dsc$descriptor *dsc$a_dscptrs[NDESC] Pointer to function arguments

struct dsc$descriptor_function

 
The dsc$descriptor_method structure is used to describe a method task. Methods are operations provided by device support. The structure contains pointers to a timeout value, the method name, the device and optional arguments to the method.   
Field Description
unsigned short dsc$w_length 0
unsigned char dsc$b_dtype DSC$K_DTYPE_METHOD
unsigned char dsc$b_class DSC$K_CLASS_R
char *dsc$a_pointer NULL
unsigned char dsc$b_ndesc Number of descriptor pointers
unsigned : 24 Unused
struct dsc$descriptor *dsc$a_time_out Pointer to time out value
struct dsc$descriptor *dsc$a_method Pointer to method name
struct dsc$descriptor *dsc$a_object Pointer to method object
struct dsc$descriptor *dsc$a_arguments[ndesc-3] Pointer to method arguments

struct dsc$descriptor_method

 
The dsc$descriptor_range structure is used to decribe ramps. It contains a pointer to the beginning value(s), the ending values(s) and the increment(s).   
Field Description
unsigned short dsc$w_length 0
unsigned char dsc$b_dtype DSC$K_DTYPE_RANGE
unsigned char dsc$b_class DSC$K_CLASS_R
char *dsc$a_pointer NULL
unsigned char dsc$b_ndesc Number of descriptor pointers
unsigned : 24 Unused
struct dsc$descriptor *dsc$a_begin Pointer to beginning
struct dsc$descriptor *dsc$a_end Pointer to end
struct dsc$descriptor *dsc$a_delta Pointer to delta

struct dsc$descriptor_range

 
The dsc$descriptor_routine structure is similar to the dsc$descriptor_call structure but includes a timeout value. It is generally used as a action task.   
Field Description
unsigned short dsc$w_length 0
unsigned char dsc$b_dtype DSC$K_DTYPE_ROUTINE
unsigned char dsc$b_class DSC$K_CLASS_R
char *dsc$a_pointer NULL
unsigned char dsc$b_ndesc Number of descriptor pointers
unsigned : 24 Unused
struct dsc$descriptor *dsc$a_time_out Pointer to time out value
struct dsc$descriptor *dsc$a_image Pointer to image name
struct dsc$descriptor *dsc$a_routine Pointer to routine name
struct dsc$descriptor *dsc$a_arguments[ndesc-3] Pointers to arguments

struct dsc$descriptor_routine

 
The dsc$descriptor_signal structure is used to describe MDSplus signals. A signal contains a data pointer, a raw data pointer and one or more dimension descriptions. The data portion is often an expression of the raw data. This structure is commonly used for describing digitizer channels.
Field Description
unsigned short dsc$w_length 0
unsigned char dsc$b_dtype DSC$K_DTYPE_SIGNAL
unsigned char dsc$b_class DSC$K_CLASS_R
char *dsc$a_pointer NULL
unsigned char dsc$b_ndesc Number of descriptor pointers
unsigned : 24 Unused
struct dsc$descriptor *dsc$a_data Pointer to signal data
struct dsc$descriptor *dsc$a_raw Pointer to raw data
struct dsc$descriptor *dsc$a_dimension[ndesc-2] Pointers to dimension info

struct dsc$descriptor_signal

 
The dsc$descriptor_window structure is used in constructing a dimension. It contains a start index, an end index and a value at index=0.
Field Description
unsigned short dsc$w_length 0
unsigned char dsc$b_dtype DSC$K_DTYPE_WINDOW
unsigned char dsc$b_class DSC$K_CLASS_R
char *dsc$a_pointer NULL
unsigned char dsc$b_ndesc Number of descriptor pointers
unsigned : 24 Unused
struct dsc$descriptor *dsc$a_startidx Pointer to start index
struct dsc$descriptor *dsc$a_endidx Pointer to end index
struct dsc$descriptor *dsc$a_value_at_idx0 Pointer to value at index 0

struct dsc$descriptor_window

 
The dsc$descriptor_with error is used to include error bar information. It contains a pointer to the data and a pointer to the associated error.
Field Description
unsigned short dsc$w_length 0
unsigned char dsc$b_dtype DSC$K_DTYPE_WITH_ERROR
unsigned char dsc$b_class DSC$K_CLASS_R
char *dsc$a_pointer NULL
unsigned char dsc$b_ndesc Number of descriptor pointers
unsigned : 24 Unused
struct dsc$descriptor *dsc$a_data Pointer to data
struct dsc$descriptor *dsc$a_error Pointer to error

struct dsc$descriptor_with_error

 
The dsc$descriptor_with_units is used to associate units with data. It contains a pointer to the data and a pointer to the units.
Field Description
unsigned short dsc$w_length 0
unsigned char dsc$b_dtype DSC$K_DTYPE_WITH_UNITS
unsigned char dsc$b_class DSC$K_CLASS_R
char *dsc$a_pointer NULL
unsigned char dsc$b_ndesc Number of descriptor pointers
unsigned : 24 Unused
struct dsc$descriptor *dsc$a_data Pointer to data
struct dsc$descriptor *dsc$a_units Pointer to units

struct dsc$descriptor_with_units