status.i4.v = bpm_save_data(save_info.s.r, time_in_cycle.r4a.r,
				    [,horz_pos.r4a.r] [,horz_status.i1a.r]
				    [,vert_pos.r4a.r] [,vert_status.i1a.r]
				    [,losses.r4a.r] [,loss_status.i1a.r]
				    [,horz_int.r4a.r] [,vert_int.r4a.r]
				    [,turn_numbers.i4a.r] [,timestamps.u4a.r]

	This routine saves BPM data for the machine last requested by a
	call to bpm_machine_c.

	save_info	miscellaneous save information
			(BPM_SAVE_INFO structure)
	time_in_cycle	time in the cycle that the data was taken
	[horz_pos]	array of horizontal position values in mm
			(default is NULL)
	[horz_status]	array of horizontal position detector status values
			(default is NULL)
	[vert_pos]	array of vertical position values in mm
			(default is NULL)
	[vert_status]	array of vertical position detector status values
			(default is NULL)
	[losses]	array of beam loss values in rads per second
			(default is NULL)
	[loss_status]	array of loss monitor status values
			(default is NULL)
	[horz_int]	array of horizontal BPM intensity values
			(default is NULL)
	[vert_int]	array of vertical BPM intensity values
			(default is NULL)
	[turn_numbers]	turn numbers at which data was taken
			(default is NULL)
	[timestamps]	frame timestamps in clinks
			(default is NULL)
	[nano_offsets]	timestamp fractions of a second in nanoseconds
			(default is NULL)

	This function returns ACNET status values as follows:

	OK			success
	CBS_INVARG		invalid save record specified
	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_save_file, bpm_get_default_save_file,
	bpm_set_save_file, bpm_data_source_c, bpm_rename_file_c,
	bpm_protect_file_c, bpm_set_reference_file_c, bpm_link_file_c,
	bpm_unlink_file_c, bpm_file_link_info_c, bpm_next_unlinked_file_c,
	bpm_file_menu_c, bpm_find_oldest_file_number_c, bpm_directory_info,
	bpm_plot_data, bpm_get_data_c, blm_get_data_c, bpm_get_intensity_c

	C/C++ usage:

	char		horz_status[BPM_MAX_BPMS_PER_FRAME/2];
	char		vert_status[BPM_MAX_BPMS_PER_FRAME/2];
	char		loss_status[BPM_MAX_BLMS_PER_FRAME/2];
	char		**file_title = (char **) NULL;
	int		status;
	int		type = BPM_FLASH;
	int		frame = 0;
	int		num_frames = NUM_FRAMES;
	int		frames_ret;
	int		scale_it = TRUE;
	int		returned_type;
	int		particle_plane;
	int		bunch_or_batch;
	int		turn_numbers[NUM_FRAMES];
	int		cycle;
	int		num_timing;
	int		timing_params[BPM_MAX_TIMING_PARAMS];
	unsigned int	timestamp;
	unsigned int	data_view = BPM_VIEW_DEFAULT;
	unsigned int	timestamps[NUM_FRAMES];
	unsigned int	nano_offsets[NUM_FRAMES];
	float		time_in_cycle[NUM_FRAMES];
	float		horz_pos[BPM_MAX_BPMS_PER_FRAME/2];
	float		vert_pos[BPM_MAX_BPMS_PER_FRAME/2];
	float		losses[BPM_MAX_BLMS_PER_FRAME/2];
	float		horz_int[BPM_MAX_BPMS_PER_FRAME/2];
	float		vert_int[BPM_MAX_BPMS_PER_FRAME/2];
	BPM_SAVE_INFO	save_info;

	status = bpm_get_data_c(type,frame,num_frames,horz_pos,vert_pos,

	status = bpm_get_sample_mode(&particle_plane,&bunch_or_batch);

	strcpy(save_info.title,"My title");
	save_info.record = FILE_NUMBER;
	save_info.data_type = type;
	save_info.particle_type = particle_plane;
	save_info.start_frame = frame;
	save_info.num_frames = num_frames;
	save_info.timestamp = timestamp;
	save_info.lattice = LATTICE;
	save_info.protect = BPM_NO_PROTECT;
	save_info.bunch_batch = bunch_or_batch;
	save_info.beam_event = cycle;
	save_info.scaled_data = TRUE;
	save_info.algorithm = 0;
	save_info.orthogonal_data = FALSE;
	save_info.num_timing_params = num_timing;
	memcpy((void *) save_info.timing_params,(void *) timing_params,

	status = bpm_save_data(&save_info,time_in_cycle,horz_pos,horz_status,