status.i4.v = bpm_read_file_range_data_c(detector_name.ia.r,

	This routine reads saved BPM data for a given detector over a
	range of files for the machine last requested by a call to
	bpm_machine_c.  A value of NULL can be passed for any returned
	argument, if that value is not needed.  All returned array values
	are allocated by this routine and should be freed by the caller.

	detector_name	null terminated detector name
	data_type	data type for the data to be read
			(BPM_HORZ_POS -> horizontal position,
			 BPM_VERT_POS -> vertical position,
			 BPM_HORZ_INT -> horizontal intensity,
			 BPM_VERT_INT -> vertical intensity,
			 BPM_LOSS_DATA -> loss reading)
	particle_type	type of particle being requested
			(BPM_PROTON_DATA -> proton data,
			 BPM_PBAR_DATA -> pbar data)
	frame_type	desired BPM frame type
			(BPM_DISPLAY_FRAME -> display frame,
			 BPM_SNAPSHOT -> snapshot frame,
			 BPM_SLOW_SNAPSHOT -> slow snapshot frame
					      (Tevatron only),
			 BPM_PROFILE -> profile frame,
			 BPM_USER_FRAME -> user triggered closed orbit frame
					   (Tevatron and Main Injector only),
			 BPM_FLASH -> flash frame,
			 BPM_BACKGROUND_FLASH -> background flash frame
						 (Recycler only),
			 BPM_INJECTION_FRAME -> injection closed orbit frame
						(Tevatron and Main Injector
			 BPM_RMS_FRAME -> RMS position frame (Recycler only),
			 BPM_DFG_FRAME -> closed orbit at DFG breakpoint
					  (Booster only),
			 BPM_AVERAGED_FRAME -> averaged data frame
					       (MI8 line only),
			 BPM_CALIBRATION_DATA -> calibration data (Main Injector
						 and development only)
	frame_number	desired frame number
	start_value	starting date or file number
	end_value	ending date or file number
	options		read options
			(BPM_OPT_NONE -> no options selected,
			 BPM_OPT_BY_FILE_NUMBER -> start and values should be
						   treated as file numbers
						   (default is to treat start
						    and end values as dates
						    in clinks))
	num_values	number of values returned
	file_numbers	returned array of file numbers
	values		array of returned values
	status_values	array of returned status values
			(If there is no corresponding status, a value of
			 NULL can be passed for this argument.)
	timestamps	returned array of timestamps in clinks
	nano_offsets	returned timestamp fractions of a second in nanoseconds

	This function returns ACNET status values as follows:

	OK			success
	CBS_INVARG		invalid particle type, data type, or
				frame type passed
	CBS_MEMFAIL		error in allocating dynamic memory
	SQL_xxx			database error

	This function requires the following include files:

	ul_cbsaux/bpmuti.h, acnet_errors_h

	Related functions:

	bpm_machine_c, bpm_get_data_c, bpm_save_data,
	bpm_read_frame_file_data_c, bpm_save_frame_data_c,
	bpm_get_frame_save_file, bpm_set_frame_save_file, bpm_data_source_c,
	bpm_file_menu_c, bpm_directory_info, bpm_plot_data, bpm_get_data_c,
	blm_get_data_c, bpm_get_intensity_c

	C/C++ usage:

	static const char	detector_name[] = "I:HP100";
	char		*status_values;
	int		status;
	int		data_type = BPM_HORZ_POS;
	int		particle_type = BPM_PROTON_DATA;
	int		frame_type = BPM_FLASH;
	int		frame_number = 0;
	int		num_values;
	int		*file_numbers;
	unsigned int	start_value = 1104537600;
	unsigned int	end_value = 1107216000;
	unsigned int	options = BPM_OPT_NONE;
	unsigned int	*timestamps;
	unsigned int	*nano_offsets;
	float		*values;

	status = bpm_read_file_range_data_c(detector_name,data_type,
					    (void *) &start_value,
					    (void *) &end_value,&num_values,