bpm_get_file_frame_data_c

	status.i4.v = bpm_get_file_frame_data_c(file.i4.v, detector.i1a.r,
						start_frame.i4.v,
						max_frames.i4.v,
						readout_spec.g.v,
						positions.r4a.r,
						pos_status.i1a.r,
						intensities.r4a.r,
						int_status.i1a.r,
						num_frames.i4.r
						[,frame_type.i4.r]
						[,timestamps.u4a.r]
						[,nanoseconds.u4a.r]
						[,file_title.i1p.r]
						[,metadata.g.v])

	This routine retrieves BPM frame by frame data froma file
	for a detector for the machine last requested by a call to
	bpm_machine_c.  A value of NULL can be passed for any
	returned arguments whose values are not needed.

	file		destired file number
	detector	ASCII detector name (DEVICE_NAME_LEN characters)
	start_frame	starting frame number (starts at 1)
	max_frames	maximum number of frames to return
	readout_spec	readout specification
			(BPM_TEVATRON -> structure of type
					 BPM_TEVATRON_READOUT_SPEC,
			 BPM_TEV_DEVL -> structure of type
					 BPM_TEVATRON_READOUT_SPEC,
			 BPM_MAIN_INJECTOR -> structure of type
					      BPM_MI_READOUT_SPEC,
			 BPM_MI_DEVL -> structure of type BPM_MI_READOUT_SPEC,
			 BPM_RECYCLER -> structure of type
					 BPM_RECYCLER_READOUT_SPEC)
	positions	returned frame by frame position values in mm
	pos_status	returned frame by frame detector position status
			(BPM_OK -> successful read,
			 BPM_INVALID -> invalid data,
			 BPM_ERROR -> error reading data,
			 BPM_NO_DATA -> data not found in file)
	intensities	returned frame by frame intensity values
	int_status	returned frame by frame detector intensity status
			(BPM_OK -> successful read,
			 BPM_INVALID -> invalid data,
			 BPM_ERROR -> error reading data,
			 BPM_NO_DATA -> data not found in file)
	num_frames	returned number of valid frames
	[frame_type]	returned type of BPM 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 only))
			(default is NULL)
	[timestamps]	returned timestamps in clinks when the data was taken
			(default is NULL)
	[nanoseconds]	returned fractional seconds in nanoseconds
			when the data was taken
			(default is NULL)
	[file_title]	returned pointer to null-terminated file name
			(default is NULL)
	[metadata]	returned metadata structure
			(BPM_TEVATRON -> structure of type
					 BPM_TEVATRON_METADATA,
			 BPM_TEV_DEVL -> structure of type
					 BPM_TEVATRON_METADATA,
			 BPM_MAIN_INJECTOR -> structure of type
					      BPM_MI_METADATA,
			 BPM_MI_DEVL -> structure of type BPM_MI_METADATA)
			 BPM_RECYCLER -> structure of type
					 BPM_RECYCLER_METADATA)
			(default is NULL)

	This function returns ACNET status values as follows:

	OK			success
	CBS_NOTYET		not supported for the currently selected
				machine
	CBS_INVARG		invalid detector requested
	CBS_NODAT		no frames are available
	CBS_CORRUPT		raw data from BPM is corrupt
	otherwise		DIO error

	This function requires the following include files:

	ul_cbsaux/bpmuti.h, acnet_errors_h

	Related functions:

	bpm_get_frame_data_c, bpm_machine_c, bpm_get_names, bpm_query,
	bpm_name_to_index_c, bpm_get_data_c, bpm_get_locations,
	bpm_get_tbt_data_c, blm_get_file_frame_data_c, blm_get_frame_data_c,
	blm_get_frame_list_data_c

	C/C++ usage:

	static const char	detector[DEVICE_NAME_LEN+1] = "I:HP100";
	char	pos_status[MAX_FRAMES];
	char	int_status[MAX_FRAMES];
	char	*file_title;
	int	status;
	int	file = FILE_NUMBER;
	int	start_frame = 1;
	int	max_frames = MAX_FRAMES;
	int	num_frames;
	int	frame_type;
	unsigned int	timestamps[MAX_FRAMES];
	unsigned int	nanoseconds[MAX_FRAMES];
	float	positions[MAX_FRAMES];
	float	intensities[MAX_FRAMES];
	void	*readout_spec = (void *) NULL;
	void	*metadata = (void *) NULL;

	status = bpm_get_file_frame_data_c(file,detector,start_frame,max_frames,
					   readout_spec,positions,pos_status,
					   intensities,int_status,&num_frames,
					   &frame_type,timestamps,nanoseconds,
					   &file_title,metadata);