status.i4.v = dio_get_properties(device_indices.i4a.r,
					 properties.i4pa.r, errors.i2a.r

	This routine returns an array of valid database properties
	associated with a given device.  The properties that are checked
	for are: reading, setting, basic status, extended status, basic
	control, analog alarm block, and digital alarm block.  If
	"num_devices" is specified, information for a list of devices can
	be retrieved.  If a value of NULL is passed for the returned
	arguments, this information will be cached in the program's memory
	for later use.

	device_indices	device index or array of device indices
	num_properties	returned number of properties or array of number
			of properties
	properties	pointer to the array of returned valid properties
			for a single device or array of pointers to the
			arrays of returned properties for a list of devices
			(each returned property array's memory is allocated
			 by this routine and should be freed by the caller)
			(A value of NULL can be passed for this argument
			 if the actual property values are not needed.)
			(property constants are in 'dbprops')
	errors		returned ACNET status value or array of status values
	[num_devices]	number of devices (default is 1)

	This function returns status values as follows:

	OK			success
	DIO_BADARG		invalid number of devices passed
	DIO_MEMFAIL		memory allocation failure
	negative value		ACNET format error indicating overall failure
	positive value		number of devices in error indicating partial

	This function requires the following include files:

	dbprops_h, diolib_h, acnet_errors_h

	Related functions:

	dio_has_property_c, dio_has_property_list_c, dio_dev_ssdn(_c),
	dio_enable_obsolete_dev_info, dio_disable_obsolete_dev_info,

	C/C++ usage:

	short	errors[NUM_DEVICES];
	int	status;
	static const int	device_indices[NUM_DEVICES] = {14430, 14431};
	int	num_properties[NUM_DEVICES];
	int	num_devices = NUM_DEVICES;
	int	*properties[NUM_DEVICES];

	status = dio_get_properties(device_indices,num_properties,