status.i4.v = logger_read_device_by_name_c(device_name.i1a.r,
						   node.u2.v, start_time.u4.v,

	This routine returns logged data for a given device name
	from a specific Lumberjack process.

	device_name	requested device name (can be null terminated)
			(up to LOGGER_DEVICE_NAME_LEN characters)
			(examples: "M:OUTTMP", "I_H100[2]")
	node		Lumberjack source node
			(LOGGER_ANY_NODE -> routine picks a node logging this
					    device and property,
			 LOGGER_FASTEST_NODE -> routine picks node which is
						logging this device and
						property at the fastest rate,
			 LOGGER_COLLIDER_SDA_NODE -> Collider SDA node,
			 LOGGER_PBAR_SDA_NODE -> Pbar SDA node,
			 otherwise -> Lumberjack node value
				      (constants are in nodedefs))
	start_time	starting data acquisition time
			(seconds since January 1, 1970 UTC)
	start_nanos	starting time offset in nanoseconds
	end_time	ending data acquisition time
			(seconds since January 1, 1970 UTC)
	end_nanos	ending time offset in nanoseconds
	min_delta_time	minimum delta time between adjacent points in seconds
	num_skip	number of points to skip (default is 0)
	skip_offset	offset number of points to begin skipping points
			(default is 0)
	sample_spec	data sample specifier whose type depends on the
			value of the "sample_type" argument  (If a value of
			NULL is passed, this argument is ignored.)
			(LOGGER_SAMPLE_TYPE_DATA_EVENT -> string describing
							  data event,
			 LOGGER_SAMPLE_TYPE_LIST_ID -> integer containing
						       list ID number)
	sample_type	type of sample specifier
			(LOGGER_SAMPLE_TYPE_NONE -> don't use the sample
						    specifier (default),
			 LOGGER_SAMPLE_TYPE_DATA_EVENT -> return data sampled
							  on a particular
							  data event,
			 LOGGER_SAMPLE_TYPE_LIST_ID -> return data from a
						       particular list)
	options		read options
			(LOGGER_OPT_NONE -> no options selected,
			 LOGGER_OPT_WANT_SINGLE_ELEMENT -> support reading a
							   single element of
							   an array from an
							   array retrieval node)
	timestamps	returned array of timestamp values  (Note: This is
			a pointer to a buffer allocated by this routine.
			The caller should neither allocate or free this buffer.)
			(seconds since January 1, 1970 UTC)
	nanoseconds	returned array of timestamp fractions of a second in
			nanoseconds  (Note: This is a pointer to a buffer
			allocated by this routine.  The caller should neither
			allocate or free this buffer.)
	values		returned array of device values  (Note: This is
			a pointer to a buffer allocated by this routine.
			The caller should neither allocate or free this buffer.)
	num_points	number of points returned
	update_func	function to be called periodically during data
			retrieval to give information about the progress
			of the data acquisition (a value of NULL may be
			passed if no update function is desired)
			(called as follows:
			 status.i4.v = update_func(update_data.s.r)
			 ("update_data" is a structure of type
			 (Note: If a status of LJ_ABORT is returned by this
			  function, logger_read_device_by_name_c will return
			  immediately to the caller.))
	actual_node	returned node actually used for data acquisition

	This function returns ACNET status values as follows:

	OK			success
	LJ_INV_TIMES		end time is less than start time
	DBM_NOREC		invalid device index
	LJ_INVARG		invalid property or array index
	LJ_NO_SUCH		requested Lumberjack does not have the
				requested device and property
	LJ_MEMFAIL		dynamic memory allocation failure
	LJ_ABORT		caller aborted data acquisition
	ACNET_xxx		error in communicating with Lumberjack

	This function requires the following include files:

	cns_data_structs_h, dbprops_h, nodedefs_h, clib_h, acnet_errors_h

	Related functions:

	logger_read_device_c, logger_get_device_c, logger_get_device_by_name_c,
	logger_get_array_device_c, logger_get_device_list_c,
	logger_return_data, logger_setnode, logger_return_names,
	logger_check_alive, logger_restart_lists, logger_shutdown,
	logger_find_device_c, logger_name_to_node, logger_node_to_name_c,
	logger_set_remaining_memory_limit_c, logger_free_memory,
	logger_available_device_dates_c, logger_available_device_data_entries_c,
	logger_get_list_data_events_c, logger_find_lists_by_data_event_c,

	C/C++ usage:

	static const char	device_name[] = "M:OUTTMP";
	unsigned short	node = LOGGER_FASTEST_NODE;
	unsigned short	actual_node;
	int	status;
	int	num_skip = 0;
	int	skip_offset = 0;
	int	sample_type = LOGGER_SAMPLE_TYPE_NONE;
	unsigned int	start_time;
	unsigned int	start_nanos = 0;
	unsigned int	end_time;
	unsigned int	end_nanos = 0;
	unsigned int	min_delta_time = 0;
	unsigned int	num_points;
	unsigned int	options = LOGGER_OPT_NONE;
	unsigned int	*timestamps;
	unsigned int	*nanoseconds;
	double	*values;
	void	update_func(LOGGER_UPDATE_DATA *update_data);
	void	*sample_spec = (void *) NULL;

	start_time = date_to_clinks("01-JAN-2006 12:00",&status);
	start_time = convert_seconds_c(start_time,DATE_CLINKS_TO_GMT);

	end_time = date_to_clinks("01-MAR-2006 12:00",&status);
	end_time = convert_seconds_c(end_time,DATE_CLINKS_TO_GMT);

	status = logger_read_device_by_name_c(device_name,node,start_time,