Esempio n. 1
0
/*--------------------------------------------------------------------*/
int mbr_mgd77dat_rd_data(int verbose, void *mbio_ptr, int *error) {
	char *function_name = "mbr_mgd77dat_rd_data";
	int status = MB_SUCCESS;
	struct mb_io_struct *mb_io_ptr;
	struct mbf_mgd77dat_struct *data;
	int *header_read;
	char line[MBF_MGD77DAT_DATA_LEN] = "";
	size_t read_len;
	size_t skip;
	int shift;
	int neg_unit;
	int itmp;
	double dtmp;
	int i, j;

	/* print input debug statements */
	if (verbose >= 2) {
		fprintf(stderr, "\ndbg2  MBIO function <%s> called\n", function_name);
		fprintf(stderr, "dbg2  Input arguments:\n");
		fprintf(stderr, "dbg2       verbose:    %d\n", verbose);
		fprintf(stderr, "dbg2       mbio_ptr:   %p\n", (void *)mbio_ptr);
	}

	/* get pointer to mbio descriptor */
	mb_io_ptr = (struct mb_io_struct *)mbio_ptr;

	/* get pointer to raw data structure */
	data = (struct mbf_mgd77dat_struct *)mb_io_ptr->raw_data;
	header_read = (int *)&mb_io_ptr->save1;

	/* initialize everything to zeros */
	mbr_zero_mgd77dat(verbose, mb_io_ptr->raw_data, error);

	/* set file position */
	mb_io_ptr->file_bytes = ftell(mb_io_ptr->mbfp);
	mb_io_ptr->file_pos = mb_io_ptr->file_bytes;

	/* read next record */
	if ((read_len = fread(line, 1, MBF_MGD77DAT_DATA_LEN, mb_io_ptr->mbfp)) == MBF_MGD77DAT_DATA_LEN) {
		mb_io_ptr->file_bytes += read_len;
		status = MB_SUCCESS;
		*error = MB_ERROR_NO_ERROR;
	}
	else {
		mb_io_ptr->file_bytes += read_len;
		status = MB_FAILURE;
		*error = MB_ERROR_EOF;
	}
	/*fprintf(stderr,"_RAWLINE:");
	for (i=0;i<MBF_MGD77DAT_DATA_LEN;i++)
	fprintf(stderr,"%c",line[i]);
	fprintf(stderr,"\n");*/

	/* handle "pseudo-mgd77" in which each record is
	 * followed by a cr or lf or both */
	skip = 0;
	if (line[0] == '\r' || line[0] == '\n')
		skip++;
	if (line[1] == '\r' || line[1] == '\n')
		skip++;
	if (skip > 0) {
		for (j = 0; j < MBF_MGD77DAT_DATA_LEN - skip; j++) {
			line[j] = line[j + skip];
		}
		if ((read_len = fread(&line[MBF_MGD77DAT_DATA_LEN - skip], 1, skip, mb_io_ptr->mbfp)) == skip) {
			mb_io_ptr->file_bytes += read_len;
			status = MB_SUCCESS;
			*error = MB_ERROR_NO_ERROR;
		}
		else {
			mb_io_ptr->file_bytes += read_len;
			status = MB_FAILURE;
			*error = MB_ERROR_EOF;
		}
		/*fprintf(stderr,"---SKIPPED %zu BYTES---\n",skip);*/
	}
	/*fprintf(stderr,"+FIXLINE:");
	for (i=0;i<MBF_MGD77DAT_DATA_LEN;i++)
	fprintf(stderr,"%c",line[i]);
	fprintf(stderr,"\n");*/

	mb_io_ptr->file_bytes = ftell(mb_io_ptr->mbfp);

	/* handle the data */
	if (status == MB_SUCCESS && *header_read > 0 && *header_read < MBF_MGD77DAT_HEADER_NUM) {
		data->kind = MB_DATA_HEADER;
		(*header_read)++;
		for (i = 0; i < MBF_MGD77DAT_DATA_LEN; i++)
			data->comment[i] = line[i];
	}
	else if (status == MB_SUCCESS && (line[0] == '1' || line[0] == '4')) {
		data->kind = MB_DATA_HEADER;
		(*header_read) = 1;
		for (i = 0; i < MBF_MGD77DAT_DATA_LEN; i++)
			data->comment[i] = line[i];
	}
	else if (status == MB_SUCCESS && line[0] == '#') {
		data->kind = MB_DATA_COMMENT;
		strncpy(data->comment, &line[1], MBF_MGD77DAT_DATA_LEN - 1);
	}
	else if (status == MB_SUCCESS && line[0] == '3') {
		data->kind = MB_DATA_DATA;

		/* get survey id */
		shift = 1;
		for (i = 0; i < 8; i++)
			data->survey_id[i] = line[i + shift];

		/* get time */
		shift += 8;
		mb_get_int(&data->timezone, &line[shift], 5);
		shift += 5;
		data->timezone = data->timezone / 100;
		mb_get_int(&itmp, &line[shift], 2);
		shift += 2;
		mb_fix_y2k(verbose, itmp, &data->time_i[0]);
		mb_get_int(&data->time_i[1], &line[shift], 2);
		shift += 2;
		mb_get_int(&data->time_i[2], &line[shift], 2);
		shift += 2;
		mb_get_int(&data->time_i[3], &line[shift], 2);
		shift += 2;
		mb_get_int(&itmp, &line[shift], 5);
		shift += 5;
		data->time_i[4] = 0.001 * itmp;
		dtmp = (itmp - 1000 * data->time_i[4]) * 0.06;
		data->time_i[5] = (int)dtmp;
		data->time_i[6] = 1000000 * (dtmp - data->time_i[5]);
		mb_get_time(verbose, data->time_i, &data->time_d);

		/* get nav */
		neg_unit = 8;
		if (line[shift] == '-') {
			shift += 1;
			neg_unit = 7;
		}
		mb_get_int(&itmp, &line[shift], neg_unit);
		shift += neg_unit;
		data->latitude = 0.00001 * itmp;
		if (neg_unit == 7)
			data->latitude = -data->latitude;

		neg_unit = 9;
		if (line[shift] == '-') {
			shift += 1;
			neg_unit = 8;
		}
		mb_get_int(&itmp, &line[shift], neg_unit);
		shift += neg_unit;
		data->longitude = 0.00001 * itmp;
		if (neg_unit == 8)
			data->longitude = -data->longitude;
		mb_get_int(&data->nav_type, &line[shift], 1);
		shift += 1;

		/* get bath */
		mb_get_int(&itmp, &line[shift], 6);
		shift += 6;
		data->tt = 0.0001 * itmp;
		mb_get_int(&itmp, &line[shift], 6);
		shift += 6;
		data->bath = 0.1 * itmp;
		mb_get_int(&data->bath_corr, &line[shift], 2);
		shift += 2;
		mb_get_int(&data->bath_type, &line[shift], 1);
		shift += 1;
		if (data->bath > 0.0 && data->bath < 99999.9) {
			data->flag = MB_FLAG_NONE;
		}
		else {
			data->flag = MB_FLAG_NULL;
		}

		/* get magnetics */
		mb_get_int(&itmp, &line[shift], 6);
		shift += 6;
		data->mag_tot_1 = 0.1 * itmp;
		mb_get_int(&itmp, &line[shift], 6);
		shift += 6;
		data->mag_tot_2 = 0.1 * itmp;
		mb_get_int(&itmp, &line[shift], 6);
		shift += 6;
		data->mag_res = 0.1 * itmp;
		mb_get_int(&data->mag_res_sensor, &line[shift], 1);
		shift += 1;
		mb_get_int(&itmp, &line[shift], 5);
		shift += 5;
		data->mag_diurnal = 0.1 * itmp;
		mb_get_int(&itmp, &line[shift], 6);
		shift += 6;
		data->mag_altitude = itmp;

		/* get gravity */
		mb_get_int(&itmp, &line[shift], 7);
		shift += 7;
		data->gravity = 0.1 * itmp;
		mb_get_int(&itmp, &line[shift], 6);
		shift += 6;
		data->eotvos = 0.1 * itmp;
		mb_get_int(&itmp, &line[shift], 5);
		shift += 5;
		data->free_air = 0.1 * itmp;
		mb_get_int(&data->seismic_line, &line[shift], 5);
		shift += 5;
		mb_get_int(&data->seismic_shot, &line[shift], 6);
		shift += 6;

		/* get nav quality */
		mb_get_int(&data->nav_quality, &line[shift], 1);
		shift += 1;
	}
	else if (status == MB_SUCCESS && line[0] == '5') {
		data->kind = MB_DATA_DATA;

		/* get survey id */
		shift = 1;
		for (i = 0; i < 8; i++)
			data->survey_id[i] = line[i + shift];

		/* get time */
		shift += 8;
		mb_get_int(&data->timezone, &line[shift], 3);
		shift += 3;
		mb_get_int(&data->time_i[0], &line[shift], 4);
		shift += 4;
		mb_get_int(&data->time_i[1], &line[shift], 2);
		shift += 2;
		mb_get_int(&data->time_i[2], &line[shift], 2);
		shift += 2;
		mb_get_int(&data->time_i[3], &line[shift], 2);
		shift += 2;
		mb_get_int(&itmp, &line[shift], 5);
		shift += 5;
		data->time_i[4] = 0.001 * itmp;
		dtmp = (itmp - 1000 * data->time_i[4]) * 0.06;
		data->time_i[5] = (int)dtmp;
		data->time_i[6] = 1000000 * (dtmp - data->time_i[5]);

		mb_get_time(verbose, data->time_i, &data->time_d);

		/* get nav */
		neg_unit = 8;
		if (line[shift] == '-') {
			shift += 1;
			neg_unit = 7;
		}
		mb_get_int(&itmp, &line[shift], neg_unit);
		shift += neg_unit;
		data->latitude = 0.00001 * itmp;
		if (neg_unit == 7)
			data->latitude = -data->latitude;

		neg_unit = 9;
		if (line[shift] == '-') {
			shift += 1;
			neg_unit = 8;
		}
		mb_get_int(&itmp, &line[shift], neg_unit);
		shift += neg_unit;
		data->longitude = 0.00001 * itmp;
		if (neg_unit == 8)
			data->longitude = -data->longitude;

		mb_get_int(&data->nav_type, &line[shift], 1);
		shift += 1;

		/* get bath */
		mb_get_int(&itmp, &line[shift], 6);
		shift += 6;
		data->tt = 0.0001 * itmp;
		mb_get_int(&itmp, &line[shift], 6);
		shift += 6;
		data->bath = 0.1 * itmp;
		mb_get_int(&data->bath_corr, &line[shift], 2);
		shift += 2;
		mb_get_int(&data->bath_type, &line[shift], 1);
		shift += 1;
		if (data->bath > 0.0 && data->bath < 99999.9) {
			data->flag = MB_FLAG_NONE;
		}
		else {
			data->flag = MB_FLAG_NULL;
		}

		/* get magnetics */
		mb_get_int(&itmp, &line[shift], 6);
		shift += 6;
		data->mag_tot_1 = 0.1 * itmp;
		mb_get_int(&itmp, &line[shift], 6);
		shift += 6;
		data->mag_tot_2 = 0.1 * itmp;
		mb_get_int(&itmp, &line[shift], 6);
		shift += 6;
		data->mag_res = 0.1 * itmp;
		mb_get_int(&data->mag_res_sensor, &line[shift], 1);
		shift += 1;
		mb_get_int(&itmp, &line[shift], 5);
		shift += 5;
		data->mag_diurnal = 0.1 * itmp;
		mb_get_int(&itmp, &line[shift], 6);
		shift += 6;
		data->mag_altitude = itmp;

		/* get gravity */
		mb_get_int(&itmp, &line[shift], 7);
		shift += 7;
		data->gravity = 0.1 * itmp;
		mb_get_int(&itmp, &line[shift], 6);
		shift += 6;
		data->eotvos = 0.1 * itmp;
		mb_get_int(&itmp, &line[shift], 5);
		shift += 5;
		data->free_air = 0.1 * itmp;
		mb_get_int(&data->seismic_line, &line[shift], 5);
		shift += 5;
		mb_get_int(&data->seismic_shot, &line[shift], 6);
		shift += 6;

		/* get nav quality */
		mb_get_int(&data->nav_quality, &line[shift], 1);
		/* shift += 1; */
	}

	/* print output debug statements */
	if (verbose >= 2) {
		fprintf(stderr, "\ndbg2  MBIO function <%s> completed\n", function_name);
		fprintf(stderr, "dbg2  Return values:\n");
		fprintf(stderr, "dbg2       error:      %d\n", *error);
		fprintf(stderr, "dbg2  Return status:\n");
		fprintf(stderr, "dbg2       status:  %d\n", status);
	}

	return (status);
}
Esempio n. 2
0
/*--------------------------------------------------------------------*/
int mbr_rt_em12darw(int verbose, void *mbio_ptr, void *store_ptr, int *error) {
	char *function_name = "mbr_rt_em12darw";
	int status = MB_SUCCESS;
	struct mb_io_struct *mb_io_ptr;
	struct mbf_em12darw_struct *data;
	struct mbsys_simrad_struct *store;
	struct mbsys_simrad_survey_struct *ping;
	char line[MBF_EM12DARW_RECORD_LENGTH];
	int index;
	char *datacomment;
	int time_j[5];
	int time_i[7];
	int kind;
	int i;

	/* print input debug statements */
	if (verbose >= 2) {
		fprintf(stderr, "\ndbg2  MBIO function <%s> called\n", function_name);
		fprintf(stderr, "dbg2  Input arguments:\n");
		fprintf(stderr, "dbg2       verbose:    %d\n", verbose);
		fprintf(stderr, "dbg2       mbio_ptr:   %p\n", (void *)mbio_ptr);
		fprintf(stderr, "dbg2       store_ptr:  %p\n", (void *)store_ptr);
	}

	/* get pointer to mbio descriptor */
	mb_io_ptr = (struct mb_io_struct *)mbio_ptr;

	/* get pointer to raw data structure */
	data = (struct mbf_em12darw_struct *)mb_io_ptr->raw_data;
	datacomment = (char *)&line[80];
	store = (struct mbsys_simrad_struct *)store_ptr;

	/* set file position */
	mb_io_ptr->file_pos = mb_io_ptr->file_bytes;

	/* read next record from file */
	if ((status = fread(line, 1, MBF_EM12DARW_RECORD_LENGTH, mb_io_ptr->mbfp)) == MBF_EM12DARW_RECORD_LENGTH) {
		mb_io_ptr->file_bytes += status;
		status = MB_SUCCESS;
		*error = MB_ERROR_NO_ERROR;
	}
	else {
		mb_io_ptr->file_bytes += status;
		status = MB_FAILURE;
		*error = MB_ERROR_EOF;
	}

	/* get data type */
	kind = MB_DATA_NONE;
	if (status == MB_SUCCESS) {
		mb_get_binary_short(MB_NO, &line[0], &(data->func));
	}

	/* deal with comment */
	if (status == MB_SUCCESS && data->func == 100) {
		kind = MB_DATA_COMMENT;

		strncpy(store->comment, datacomment, MBSYS_SIMRAD_COMMENT_LENGTH);
	}

	/* deal with data */
	else if (status == MB_SUCCESS && data->func == 150) {
		kind = MB_DATA_DATA;

		index = 2;
		mb_get_binary_short(MB_NO, &line[index], &(data->year));
		index += 2;
		mb_get_binary_short(MB_NO, &line[index], &(data->jday));
		index += 2;
		mb_get_binary_short(MB_NO, &line[index], &(data->minute));
		index += 2;
		mb_get_binary_short(MB_NO, &line[index], &(data->secs));
		index += 8;
		mb_get_binary_double(MB_NO, &line[index], &(data->latitude));
		index += 8;
		mb_get_binary_double(MB_NO, &line[index], &(data->longitude));
		index += 8;
		mb_get_binary_short(MB_NO, &line[index], &(data->corflag));
		index += 4;
		mb_get_binary_float(MB_NO, &line[index], &(data->utm_merd));
		index += 4;
		mb_get_binary_short(MB_NO, &line[index], &(data->utm_zone));
		index += 2;
		mb_get_binary_short(MB_NO, &line[index], &(data->posq));
		index += 2;
		mb_get_binary_int(MB_NO, &line[index], &(data->pingno));
		index += 4;
		mb_get_binary_short(MB_NO, &line[index], &(data->mode));
		index += 4;
		mb_get_binary_float(MB_NO, &line[index], &(data->depthl));
		index += 4;
		mb_get_binary_float(MB_NO, &line[index], &(data->speed));
		index += 4;
		mb_get_binary_float(MB_NO, &line[index], &(data->gyro));
		index += 4;
		mb_get_binary_float(MB_NO, &line[index], &(data->roll));
		index += 4;
		mb_get_binary_float(MB_NO, &line[index], &(data->pitch));
		index += 4;
		mb_get_binary_float(MB_NO, &line[index], &(data->heave));
		index += 4;
		mb_get_binary_float(MB_NO, &line[index], &(data->sndval));
		index += 4;
		for (i = 0; i < MBF_EM12DARW_BEAMS; i++) {
			mb_get_binary_short(MB_NO, &line[index], &(data->depth[i]));
			index += 2;
		}
		for (i = 0; i < MBF_EM12DARW_BEAMS; i++) {
			mb_get_binary_short(MB_NO, &line[index], &(data->distacr[i]));
			index += 2;
		}
		for (i = 0; i < MBF_EM12DARW_BEAMS; i++) {
			mb_get_binary_short(MB_NO, &line[index], &(data->distalo[i]));
			index += 2;
		}
		for (i = 0; i < MBF_EM12DARW_BEAMS; i++) {
			mb_get_binary_short(MB_NO, &line[index], &(data->range[i]));
			index += 2;
		}
		for (i = 0; i < MBF_EM12DARW_BEAMS; i++) {
			mb_get_binary_short(MB_NO, &line[index], &(data->refl[i]));
			index += 2;
		}
		for (i = 0; i < MBF_EM12DARW_BEAMS; i++) {
			mb_get_binary_short(MB_NO, &line[index], &(data->beamq[i]));
			index += 2;
		}

		/* print debug statements */
		if (verbose >= 4) {
			fprintf(stderr, "\ndbg4  Data read by MBIO function <%s>\n", function_name);
			fprintf(stderr, "dbg4  Read values:\n");
			fprintf(stderr, "dbg4       kind:       %d\n", kind);
			fprintf(stderr, "dbg4       error:      %d\n", *error);
			fprintf(stderr, "dbg4       year:       %d\n", data->year);
			fprintf(stderr, "dbg4       jday:       %d\n", data->jday);
			fprintf(stderr, "dbg4       minute:     %d\n", data->minute);
			fprintf(stderr, "dbg4       secs:       %d\n", data->secs);
			fprintf(stderr, "dbg4       latitude:   %f\n", data->latitude);
			fprintf(stderr, "dbg4       longitude:  %f\n", data->longitude);
			fprintf(stderr, "dbg4       corflag:    %d\n", data->corflag);
			fprintf(stderr, "dbg4       utm_merd:   %f\n", data->utm_merd);
			fprintf(stderr, "dbg4       utm_zone:   %d\n", data->utm_zone);
			fprintf(stderr, "dbg4       posq:       %d\n", data->posq);
			fprintf(stderr, "dbg4       pingno:     %d\n", data->pingno);
			fprintf(stderr, "dbg4       mode:       %d\n", data->mode);
			fprintf(stderr, "dbg4       depthl:     %f\n", data->depthl);
			fprintf(stderr, "dbg4       speed:      %f\n", data->speed);
			fprintf(stderr, "dbg4       gyro:       %f\n", data->gyro);
			fprintf(stderr, "dbg4       roll:       %f\n", data->roll);
			fprintf(stderr, "dbg4       pitch:      %f\n", data->pitch);
			fprintf(stderr, "dbg4       heave:      %f\n", data->heave);
			fprintf(stderr, "dbg4       sndval:     %f\n", data->sndval);
			for (i = 0; i < MBF_EM12DARW_BEAMS; i++)
				fprintf(stderr, "dbg4       beam:%d  depth:%d  distacr:%d  distalo:%d  range:%d refl:%d beamq:%d\n", i,
				        data->depth[i], data->distacr[i], data->distalo[i], data->range[i], data->refl[i], data->beamq[i]);
		}
	}

	/* else unintelligible */
	else if (status == MB_SUCCESS) {
		kind = MB_DATA_NONE;
		status = MB_FAILURE;
		*error = MB_ERROR_UNINTELLIGIBLE;
	}

	/* set kind and error in mb_io_ptr */
	mb_io_ptr->new_kind = kind;
	mb_io_ptr->new_error = *error;

	/* translate values to em12 data storage structure */
	if (status == MB_SUCCESS && store != NULL) {
		/* type of data record */
		store->kind = kind;
		store->sonar = MBSYS_SIMRAD_EM12S;

		/* time */
		mb_fix_y2k(verbose, (int)data->year, &time_j[0]);
		time_j[1] = data->jday;
		time_j[2] = data->minute;
		time_j[3] = data->secs / 100;
		time_j[4] = 0.0001 * (100 * time_j[3] - data->secs);
		mb_get_itime(verbose, time_j, time_i);
		store->year = data->year;
		store->month = time_i[1];
		store->day = time_i[2];
		store->hour = time_i[3];
		store->minute = time_i[4];
		store->second = time_i[5];
		store->centisecond = 0.0001 * time_i[6];
		store->pos_year = store->year;
		store->pos_month = store->month;
		store->pos_day = store->day;
		store->pos_hour = store->hour;
		store->pos_minute = store->minute;
		store->pos_second = store->second;
		store->pos_centisecond = store->centisecond;

		/* navigation */
		if (data->corflag == 0) {
			store->pos_latitude = data->latitude;
			store->pos_longitude = data->longitude;
			store->utm_northing = 0.0;
			store->utm_easting = 0.0;
		}
		else {
			store->pos_latitude = 0.0;
			store->pos_longitude = 0.0;
			store->utm_northing = data->latitude;
			store->utm_easting = data->longitude;
		}
		store->utm_zone = data->utm_zone;
		store->utm_zone_lon = data->utm_merd;
		store->utm_system = data->corflag;
		store->pos_quality = data->posq;
		store->speed = data->speed;
		store->line_heading = 10 * data->gyro;

		/* allocate secondary data structure for
		    survey data if needed */
		if (kind == MB_DATA_DATA && store->ping == NULL) {
			status = mbsys_simrad_survey_alloc(verbose, mbio_ptr, store_ptr, error);
		}

		/* deal with putting survey data into
		secondary data structure */
		if (status == MB_SUCCESS && kind == MB_DATA_DATA) {
			/* get data structure pointer */
			ping = (struct mbsys_simrad_survey_struct *)store->ping;

			/* copy data */
			ping->longitude = data->longitude;
			ping->latitude = data->latitude;
			ping->swath_id = EM_SWATH_CENTER;
			ping->ping_number = data->pingno;
			ping->beams_bath = MBF_EM12DARW_BEAMS;
			ping->bath_mode = 0;
			ping->bath_res = data->mode;
			ping->bath_quality = 0;
			ping->keel_depth = data->depthl;
			ping->heading = (int)10 * data->gyro;
			ping->roll = (int)100 * data->roll;
			ping->pitch = (int)100 * data->pitch;
			ping->xducer_pitch = (int)100 * data->pitch;
			ping->ping_heave = (int)100 * data->heave;
			ping->sound_vel = (int)10 * data->sndval;
			ping->pixels_ss = 0;
			ping->ss_mode = 0;
			for (i = 0; i < ping->beams_bath; i++) {
				if (data->depth[i] > 0) {
					ping->bath[i] = data->depth[i];
					ping->beamflag[i] = MB_FLAG_NONE;
				}
				else if (data->depth[i] < 0) {
					ping->bath[i] = -data->depth[i];
					ping->beamflag[i] = MB_FLAG_FLAG + MB_FLAG_MANUAL;
				}
				else {
					ping->bath[i] = data->depth[i];
					ping->beamflag[i] = MB_FLAG_NULL;
				}
				ping->bath_acrosstrack[i] = data->distacr[i];
				ping->bath_alongtrack[i] = data->distalo[i];
				ping->tt[i] = data->range[i];
				ping->amp[i] = (mb_s_char)data->refl[i];
				ping->quality[i] = (mb_u_char)data->beamq[i];
				ping->heave[i] = (mb_s_char)0;
				ping->beam_frequency[i] = 0;
				ping->beam_samples[i] = 0;
				ping->beam_center_sample[i] = 0;
			}
		}

		else if (status == MB_SUCCESS && kind == MB_DATA_COMMENT) {
			/* comment */
			strncpy(store->comment, datacomment, MBSYS_SIMRAD_COMMENT_LENGTH);
		}
	}

	/* print output debug statements */
	if (verbose >= 2) {
		fprintf(stderr, "\ndbg2  MBIO function <%s> completed\n", function_name);
		fprintf(stderr, "dbg2  Return values:\n");
		fprintf(stderr, "dbg2       error:      %d\n", *error);
		fprintf(stderr, "dbg2  Return status:\n");
		fprintf(stderr, "dbg2       status:  %d\n", status);
	}

	return (status);
}
Esempio n. 3
0
/*--------------------------------------------------------------------*/
int mbsys_hs10_extract_nav(int verbose, void *mbio_ptr, void *store_ptr,
		int *kind, int time_i[7], double *time_d,
		double *navlon, double *navlat,
		double *speed, double *heading, double *draft, 
		double *roll, double *pitch, double *heave, 
		int *error)
{
	char	*function_name = "mbsys_hs10_extract_nav";
	int	status = MB_SUCCESS;
	struct mb_io_struct *mb_io_ptr;
	struct mbsys_hs10_struct *store;

	/* print input debug statements */
	if (verbose >= 2)
		{
		fprintf(stderr,"\ndbg2  MBIO function <%s> called\n",function_name);
		fprintf(stderr,"dbg2  Input arguments:\n");
		fprintf(stderr,"dbg2       verbose:    %d\n",verbose);
		fprintf(stderr,"dbg2       mb_ptr:     %lu\n",(size_t)mbio_ptr);
		fprintf(stderr,"dbg2       store_ptr:  %lu\n",(size_t)store_ptr);
		}

	/* get mbio descriptor */
	mb_io_ptr = (struct mb_io_struct *) mbio_ptr;

	/* get data structure pointer */
	store = (struct mbsys_hs10_struct *) store_ptr;

	/* get data kind */
	*kind = store->kind;

	/* extract data from structure */
	if (*kind == MB_DATA_DATA)
		{
		/* get time */
		mb_fix_y2k(verbose, store->year, &time_i[0]);
		time_i[1] = store->month;
		time_i[2] = store->day;
		time_i[3] = store->hour;
		time_i[4] = store->minute;
		time_i[5] = store->tenth_second / 10;
		time_i[6] = 100000 * (store->tenth_second - 10 * time_i[5]);
		mb_get_time(verbose,time_i,time_d);

		/* get navigation */
		*navlon = ((double) store->londeg) + (store->lonmin / 60000.0);
		if (store->EorW == 'W')
		    *navlon *= -1.0;
		*navlat = ((double) store->latdeg) + (store->latmin / 60000.0);
		if (store->NorS == 'S')
		    *navlat *= -1.0;

		/* get heading */
		*heading = (0.1 * (double) store->heading);

		/* get speed */
		*speed = 0.0;

		/* get draft */
 		*draft = 0.0;

		/* get roll pitch and heave */
		*roll = 0.0;
		*pitch = 0.0;
		*heave = 0.0;

		/* print debug statements */
		if (verbose >= 5)
			{
			fprintf(stderr,"\ndbg4  Data extracted by MBIO function <%s>\n",
				function_name);
			fprintf(stderr,"dbg4  Extracted values:\n");
			fprintf(stderr,"dbg4       kind:       %d\n",
				*kind);
			fprintf(stderr,"dbg4       error:      %d\n",
				*error);
			fprintf(stderr,"dbg4       time_i[0]:  %d\n",
				time_i[0]);
			fprintf(stderr,"dbg4       time_i[1]:  %d\n",
				time_i[1]);
			fprintf(stderr,"dbg4       time_i[2]:  %d\n",
				time_i[2]);
			fprintf(stderr,"dbg4       time_i[3]:  %d\n",
				time_i[3]);
			fprintf(stderr,"dbg4       time_i[4]:  %d\n",
				time_i[4]);
			fprintf(stderr,"dbg4       time_i[5]:  %d\n",
				time_i[5]);
			fprintf(stderr,"dbg4       time_i[6]:  %d\n",
				time_i[6]);
			fprintf(stderr,"dbg4       time_d:     %f\n",
				*time_d);
			fprintf(stderr,"dbg4       longitude:  %f\n",
				*navlon);
			fprintf(stderr,"dbg4       latitude:   %f\n",
				*navlat);
			fprintf(stderr,"dbg4       speed:      %f\n",
				*speed);
			fprintf(stderr,"dbg4       heading:    %f\n",
				*heading);
			fprintf(stderr,"dbg4       draft:      %f\n",
				*draft);
			fprintf(stderr,"dbg4       roll:       %f\n",
				*roll);
			fprintf(stderr,"dbg4       pitch:      %f\n",
				*pitch);
			fprintf(stderr,"dbg4       heave:      %f\n",
				*heave);
			}

		/* done translating values */

		}

	/* deal with comment */
	else if (*kind == MB_DATA_COMMENT)
		{
		/* set status */
		*error = MB_ERROR_COMMENT;
		status = MB_FAILURE;
		}

	/* deal with other record type */
	else
		{
		/* set status */
		*error = MB_ERROR_OTHER;
		status = MB_FAILURE;
		}

	/* print output debug statements */
	if (verbose >= 2)
		{
		fprintf(stderr,"\ndbg2  MBIO function <%s> completed\n",function_name);
		fprintf(stderr,"dbg2  Return values:\n");
		fprintf(stderr,"dbg2       kind:       %d\n",*kind);
		}
	if (verbose >= 2 && *error <= MB_ERROR_NO_ERROR 
		&& *kind == MB_DATA_DATA)
		{
		fprintf(stderr,"dbg2       time_i[0]:     %d\n",time_i[0]);
		fprintf(stderr,"dbg2       time_i[1]:     %d\n",time_i[1]);
		fprintf(stderr,"dbg2       time_i[2]:     %d\n",time_i[2]);
		fprintf(stderr,"dbg2       time_i[3]:     %d\n",time_i[3]);
		fprintf(stderr,"dbg2       time_i[4]:     %d\n",time_i[4]);
		fprintf(stderr,"dbg2       time_i[5]:     %d\n",time_i[5]);
		fprintf(stderr,"dbg2       time_i[6]:     %d\n",time_i[6]);
		fprintf(stderr,"dbg2       time_d:        %f\n",*time_d);
		fprintf(stderr,"dbg2       longitude:     %f\n",*navlon);
		fprintf(stderr,"dbg2       latitude:      %f\n",*navlat);
		fprintf(stderr,"dbg2       speed:         %f\n",*speed);
		fprintf(stderr,"dbg2       heading:       %f\n",*heading);
		fprintf(stderr,"dbg2       draft:         %f\n",*draft);
		fprintf(stderr,"dbg2       roll:          %f\n",*roll);
		fprintf(stderr,"dbg2       pitch:         %f\n",*pitch);
		fprintf(stderr,"dbg2       heave:         %f\n",*heave);
		}
	if (verbose >= 2)
		{
		fprintf(stderr,"dbg2       error:      %d\n",*error);
		fprintf(stderr,"dbg2  Return status:\n");
		fprintf(stderr,"dbg2       status:     %d\n",status);
		}

	/* return status */
	return(status);
}
Esempio n. 4
0
/*--------------------------------------------------------------------*/
int mbr_mgd77txt_rd_data(int verbose, void *mbio_ptr, int *error)
{
	char	*function_name = "mbr_mgd77txt_rd_data";
	int	status = MB_SUCCESS;
	struct mb_io_struct *mb_io_ptr;
	struct mbf_mgd77txt_struct *data;
	int	*header_read;
	char	line[MB_COMMENT_MAXLINE];
	char	*read_ptr;
	int	shift;
	int 	neg_unit;
	int	itmp;
	double	dtmp;
	int	i;

	/* print input debug statements */
	if (verbose >= 2)
		{
		fprintf(stderr,"\ndbg2  MBIO function <%s> called\n",function_name);
		fprintf(stderr,"dbg2  Revision id: %s\n",rcs_id);
		fprintf(stderr,"dbg2  Input arguments:\n");
		fprintf(stderr,"dbg2       verbose:    %d\n",verbose);
		fprintf(stderr,"dbg2       mbio_ptr:   %p\n",(void *)mbio_ptr);
		}

	/* get pointer to mbio descriptor */
	mb_io_ptr = (struct mb_io_struct *) mbio_ptr;

	/* get pointer to raw data structure */
	data = (struct mbf_mgd77txt_struct *) mb_io_ptr->raw_data;
	header_read = (int *) &mb_io_ptr->save1;

	/* initialize everything to zeros */
	mbr_zero_mgd77txt(verbose,mb_io_ptr->raw_data,error);

	/* set file position */
	mb_io_ptr->file_bytes = ftell(mb_io_ptr->mbfp);
	mb_io_ptr->file_pos = mb_io_ptr->file_bytes;

	/* read next record */
	if ((read_ptr = fgets(line, MB_PATH_MAXLINE, mb_io_ptr->mbfp)) != NULL)
		{
		mb_io_ptr->file_bytes += strlen(line);
		status = MB_SUCCESS;
		*error = MB_ERROR_NO_ERROR;
		}
	else
		{
		status = MB_FAILURE;
		*error = MB_ERROR_EOF;
		}
	mb_io_ptr->file_bytes = ftell(mb_io_ptr->mbfp);

	/* handle the data */
	if (status == MB_SUCCESS
	    && *header_read > 0
	    && *header_read < MBF_MGD77TXT_HEADER_NUM)
	    {
	    data->kind = MB_DATA_HEADER;
	    (*header_read)++;
	    strncpy(data->comment, line, strlen(line)-2);
	    }
	else if (status == MB_SUCCESS
	    && (line[0] == '1' || line[0] == '4'))
	    {
	    data->kind = MB_DATA_HEADER;
	    (*header_read) = 1;
	    strncpy(data->comment, line, strlen(line)-2);
	    }
	else if (status == MB_SUCCESS
	    && line[0] == '#')
	    {
	    data->kind = MB_DATA_COMMENT;
            strncpy(data->comment,&line[1],strlen(line)-3);
	    }
	else if (status == MB_SUCCESS
	    && line[0] == '3')
	    {
	    data->kind = MB_DATA_DATA;

	    /* get survey id */
	    shift = 1;
	    for (i=0;i<8;i++)
		data->survey_id[i] = line[i+shift];

	    /* get time */
	    shift += 8;
	    mb_get_int(&data->timezone, &line[shift], 5); shift += 5;
	    data->timezone = data->timezone / 100;
	    mb_get_int(&itmp, &line[shift], 2); shift += 2;
	    mb_fix_y2k(verbose, itmp, &data->time_i[0]);
	    mb_get_int(&data->time_i[1], &line[shift], 2); shift += 2;
	    mb_get_int(&data->time_i[2], &line[shift], 2); shift += 2;
	    mb_get_int(&data->time_i[3], &line[shift], 2); shift += 2;
	    mb_get_int(&itmp, &line[shift], 5); shift += 5;
	    data->time_i[4] = 0.001 * itmp;
	    dtmp = (itmp - 1000 * data->time_i[4]) * 0.06;
	    data->time_i[5] = (int) dtmp;
	    data->time_i[6] = 1000000 * (dtmp - data->time_i[5]);
	    mb_get_time(verbose,data->time_i,&data->time_d);

	    /* get nav */
	    neg_unit = 8;
	    if (line[shift] == '-') {
		    shift += 1;
		    neg_unit = 7;
	    }
	    mb_get_int(&itmp, &line[shift], neg_unit); shift += neg_unit;
	    data->latitude = 0.00001 * itmp;
	    if (neg_unit == 7)
		    data->latitude = -data->latitude;

	    neg_unit = 9;
	    if (line[shift] == '-') {
		    shift += 1;
		    neg_unit = 8;
	    }
	    mb_get_int(&itmp, &line[shift], neg_unit); shift += neg_unit;
	    data->longitude = 0.00001 * itmp;
	    if (neg_unit == 8)
		    data->longitude = -data->longitude;
	    mb_get_int(&data->nav_type, &line[shift], 1); shift += 1;

	    /* get bath */
	    mb_get_int(&itmp, &line[shift], 6); shift += 6;
	    data->tt = 0.0001 * itmp;
	    mb_get_int(&itmp, &line[shift], 6); shift += 6;
	    data->bath = 0.1 * itmp;
	    mb_get_int(&data->bath_corr, &line[shift], 2); shift += 2;
	    mb_get_int(&data->bath_type, &line[shift], 1); shift += 1;
	    if (data->bath > 0.0 && data->bath < 99999.9)
		{
		data->flag = MB_FLAG_NONE;
		}
	    else
		{
		data->flag = MB_FLAG_NULL;
		}

	    /* get magnetics */
	    mb_get_int(&itmp, &line[shift], 6); shift += 6;
	    data->mag_tot_1 = 0.1 * itmp;
	    mb_get_int(&itmp, &line[shift], 6); shift += 6;
	    data->mag_tot_2 = 0.1 * itmp;
	    mb_get_int(&itmp, &line[shift], 6); shift += 6;
	    data->mag_res = 0.1 * itmp;
	    mb_get_int(&data->mag_res_sensor, &line[shift], 1); shift += 1;
	    mb_get_int(&itmp, &line[shift], 5); shift += 5;
	    data->mag_diurnal = 0.1 * itmp;
	    mb_get_int(&itmp, &line[shift], 6); shift += 6;
	    data->mag_altitude = itmp;

	    /* get gravity */
	    mb_get_int(&itmp, &line[shift], 7); shift += 7;
	    data->gravity = 0.1 * itmp;
	    mb_get_int(&itmp, &line[shift], 6); shift += 6;
	    data->eotvos = 0.1 * itmp;
	    mb_get_int(&itmp, &line[shift], 5); shift += 5;
	    data->free_air = 0.1 * itmp;
	    mb_get_int(&data->seismic_line, &line[shift], 5); shift += 5;
	    mb_get_int(&data->seismic_shot, &line[shift], 6); shift += 6;

	    /* get nav quality */
	    mb_get_int(&data->nav_quality, &line[shift], 1); shift += 1;
	    }
	else if (status == MB_SUCCESS
	    && line[0] == '5')
	    {
	    data->kind = MB_DATA_DATA;

	    /* get survey id */
	    shift = 1;
	    for (i=0;i<8;i++)
		data->survey_id[i] = line[i+shift];

	    /* get time */
	    shift += 8;
	    mb_get_int(&data->timezone, &line[shift], 3); shift += 3;
	    mb_get_int(&data->time_i[0], &line[shift], 4); shift += 4;
	    mb_get_int(&data->time_i[1], &line[shift], 2); shift += 2;
	    mb_get_int(&data->time_i[2], &line[shift], 2); shift += 2;
	    mb_get_int(&data->time_i[3], &line[shift], 2); shift += 2;
	    mb_get_int(&itmp, &line[shift], 5); shift += 5;
	    data->time_i[4] = 0.001 * itmp;
	    dtmp = (itmp - 1000 * data->time_i[4]) * 0.06;
	    data->time_i[5] = (int) dtmp;
	    data->time_i[6] = 1000000 * (dtmp - data->time_i[5]);

	    mb_get_time(verbose,data->time_i,&data->time_d);

	    /* get nav */
	    neg_unit = 8;
	    if (line[shift] == '-') {
		    shift += 1;
		    neg_unit = 7;
	    }
	    mb_get_int(&itmp, &line[shift], neg_unit); shift += neg_unit;
	    data->latitude = 0.00001 * itmp;
	    if (neg_unit == 7)
		    data->latitude = -data->latitude;

	    neg_unit = 9;
	    if (line[shift] == '-') {
		    shift += 1;
		    neg_unit = 8;
	    }
	    mb_get_int(&itmp, &line[shift], neg_unit); shift += neg_unit;
	    data->longitude = 0.00001 * itmp;
	    if (neg_unit == 8)
		    data->longitude = -data->longitude;

	    mb_get_int(&data->nav_type, &line[shift], 1); shift += 1;

	    /* get bath */
	    mb_get_int(&itmp, &line[shift], 6); shift += 6;
	    data->tt = 0.0001 * itmp;
	    mb_get_int(&itmp, &line[shift], 6); shift += 6;
	    data->bath = 0.1 * itmp;
	    mb_get_int(&data->bath_corr, &line[shift], 2); shift += 2;
	    mb_get_int(&data->bath_type, &line[shift], 1); shift += 1;
	    if (data->bath > 0.0 && data->bath < 99999.9)
		{
		data->flag = MB_FLAG_NONE;
		}
	    else
		{
		data->flag = MB_FLAG_NULL;
		}

	    /* get magnetics */
	    mb_get_int(&itmp, &line[shift], 6); shift += 6;
	    data->mag_tot_1 = 0.1 * itmp;
	    mb_get_int(&itmp, &line[shift], 6); shift += 6;
	    data->mag_tot_2 = 0.1 * itmp;
	    mb_get_int(&itmp, &line[shift], 6); shift += 6;
	    data->mag_res = 0.1 * itmp;
	    mb_get_int(&data->mag_res_sensor, &line[shift], 1); shift += 1;
	    mb_get_int(&itmp, &line[shift], 5); shift += 5;
	    data->mag_diurnal = 0.1 * itmp;
	    mb_get_int(&itmp, &line[shift], 6); shift += 6;
	    data->mag_altitude = itmp;

	    /* get gravity */
	    mb_get_int(&itmp, &line[shift], 7); shift += 7;
	    data->gravity = 0.1 * itmp;
	    mb_get_int(&itmp, &line[shift], 6); shift += 6;
	    data->eotvos = 0.1 * itmp;
	    mb_get_int(&itmp, &line[shift], 5); shift += 5;
	    data->free_air = 0.1 * itmp;
	    mb_get_int(&data->seismic_line, &line[shift], 5); shift += 5;
	    mb_get_int(&data->seismic_shot, &line[shift], 6); shift += 6;

	    /* get nav quality */
	    mb_get_int(&data->nav_quality, &line[shift], 1); shift += 1;
	    }

	/* print output debug statements */
	if (verbose >= 2)
		{
		fprintf(stderr,"\ndbg2  MBIO function <%s> completed\n",function_name);
		fprintf(stderr,"dbg2  Return values:\n");
		fprintf(stderr,"dbg2       error:      %d\n",*error);
		fprintf(stderr,"dbg2  Return status:\n");
		fprintf(stderr,"dbg2       status:  %d\n",status);
		}

	/* return status */
	return(status);
}
Esempio n. 5
0
/*--------------------------------------------------------------------*/
int mbsys_hs10_extract(int verbose, void *mbio_ptr, void *store_ptr, 
		int *kind, int time_i[7], double *time_d,
		double *navlon, double *navlat,
		double *speed, double *heading,
		int *nbath, int *namp, int *nss,
		char *beamflag, double *bath, double *amp, 
		double *bathacrosstrack, double *bathalongtrack,
		double *ss, double *ssacrosstrack, double *ssalongtrack,
		char *comment, int *error)
{
	char	*function_name = "mbsys_hs10_extract";
	int	status = MB_SUCCESS;
	struct mb_io_struct *mb_io_ptr;
	struct mbsys_hs10_struct *store;
	int	i;

	/* print input debug statements */
	if (verbose >= 2)
		{
		fprintf(stderr,"\ndbg2  MBIO function <%s> called\n",function_name);
		fprintf(stderr,"dbg2  Input arguments:\n");
		fprintf(stderr,"dbg2       verbose:    %d\n",verbose);
		fprintf(stderr,"dbg2       mb_ptr:     %lu\n",(size_t)mbio_ptr);
		fprintf(stderr,"dbg2       store_ptr:  %lu\n",(size_t)store_ptr);
		}

	/* get mbio descriptor */
	mb_io_ptr = (struct mb_io_struct *) mbio_ptr;

	/* get data structure pointer */
	store = (struct mbsys_hs10_struct *) store_ptr;

	/* get data kind */
	*kind = store->kind;

	/* extract data from structure */
	if (*kind == MB_DATA_DATA)
		{
		/* get time */
		mb_fix_y2k(verbose, store->year, &time_i[0]);
		time_i[1] = store->month;
		time_i[2] = store->day;
		time_i[3] = store->hour;
		time_i[4] = store->minute;
		time_i[5] = store->tenth_second / 10;
		time_i[6] = 100000 * (store->tenth_second - 10 * time_i[5]);
		mb_get_time(verbose,time_i,time_d);

		/* get navigation */
		*navlon = ((double) store->londeg) + (store->lonmin / 60000.0);
		if (store->EorW == 'W')
		    *navlon *= -1.0;
		*navlat = ((double) store->latdeg) + (store->latmin / 60000.0);
		if (store->NorS == 'S')
		    *navlat *= -1.0;

		/* get heading */
		*heading = (0.1 * (double) store->heading);

		/* get speed */
		*speed = 0.0;
			
		/* set beamwidths in mb_io structure */
		mb_io_ptr->beamwidth_ltrack = 3.0;
		mb_io_ptr->beamwidth_xtrack = 3.0;

		/* read distance and depth values into storage arrays */
		*nbath = MBSYS_HS10_BEAMS;
		*namp = MBSYS_HS10_BEAMS;
		*nss = 0;
		for (i=0;i<*nbath;i++)
			{
			if (store->depth[i] >= 29999)
			    {
			    beamflag[i] = MB_FLAG_NULL;
			    bath[i] = 0.0;
			    bathacrosstrack[i] = 0.0;
			    }
			else if (store->depth[i] > 0)
			    {
			    beamflag[i] = MB_FLAG_NONE;
			    bath[i] = (double) store->depth[i];
			    bathacrosstrack[i] = (double) store->acrosstrack[i];
			    }
			else if (store->depth[i] < 0)
			    {
			    beamflag[i] 
				= MB_FLAG_MANUAL + MB_FLAG_FLAG;
			    bath[i] = (double) -store->depth[i];
			    bathacrosstrack[i] = (double) store->acrosstrack[i];
			    }
			amp[i] = store->amplitude[i];
			bathalongtrack[i] = 0.0;
			}

		/* print debug statements */
		if (verbose >= 5)
			{
			fprintf(stderr,"\ndbg4  Data extracted by MBIO function <%s>\n",
				function_name);
			fprintf(stderr,"dbg4  Extracted values:\n");
			fprintf(stderr,"dbg4       kind:       %d\n",
				*kind);
			fprintf(stderr,"dbg4       error:      %d\n",
				*error);
			fprintf(stderr,"dbg4       time_i[0]:  %d\n",
				time_i[0]);
			fprintf(stderr,"dbg4       time_i[1]:  %d\n",
				time_i[1]);
			fprintf(stderr,"dbg4       time_i[2]:  %d\n",
				time_i[2]);
			fprintf(stderr,"dbg4       time_i[3]:  %d\n",
				time_i[3]);
			fprintf(stderr,"dbg4       time_i[4]:  %d\n",
				time_i[4]);
			fprintf(stderr,"dbg4       time_i[5]:  %d\n",
				time_i[5]);
			fprintf(stderr,"dbg4       time_i[6]:  %d\n",
				time_i[6]);
			fprintf(stderr,"dbg4       time_d:     %f\n",
				*time_d);
			fprintf(stderr,"dbg4       longitude:  %f\n",
				*navlon);
			fprintf(stderr,"dbg4       latitude:   %f\n",
				*navlat);
			fprintf(stderr,"dbg4       speed:      %f\n",
				*speed);
			fprintf(stderr,"dbg4       heading:    %f\n",
				*heading);
			fprintf(stderr,"dbg4       nbath:      %d\n",
				*nbath);
			for (i=0;i<*nbath;i++)
			  fprintf(stderr,"dbg4       beam:%d  flag:%3d  bath:%f  acrosstrack:%f  alongtrack:%f\n",
				i,beamflag[i],bath[i],bathacrosstrack[i],bathalongtrack[i]);
			fprintf(stderr,"dbg4        namp:     %d\n",
				*namp);
			for (i=0;i<*namp;i++)
			  fprintf(stderr,"dbg4        beam:%d   amp:%f  acrosstrack:%f  alongtrack:%f\n",
				i,amp[i],bathacrosstrack[i],bathalongtrack[i]);
			}

		/* done translating values */

		}

	/* extract comment from structure */
	else if (*kind == MB_DATA_COMMENT)
		{
		/* copy comment */
		strncpy(comment, store->comment, MBSYS_HS10_COMMENT);

		/* print debug statements */
		if (verbose >= 4)
			{
			fprintf(stderr,"\ndbg4  New ping read by MBIO function <%s>\n",
				function_name);
			fprintf(stderr,"dbg4  New ping values:\n");
			fprintf(stderr,"dbg4       error:      %d\n",
				*error);
			fprintf(stderr,"dbg4       comment:    %s\n",
				comment);
			}
		}

	/* print output debug statements */
	if (verbose >= 2)
		{
		fprintf(stderr,"\ndbg2  MBIO function <%s> completed\n",function_name);
		fprintf(stderr,"dbg2  Return values:\n");
		fprintf(stderr,"dbg2       kind:       %d\n",*kind);
		}
	if (verbose >= 2 && *error <= MB_ERROR_NO_ERROR 
		&& *kind == MB_DATA_COMMENT)
		{
		fprintf(stderr,"dbg2       comment:     \ndbg2       %s\n",
			comment);
		}
	else if (verbose >= 2 && *error <= MB_ERROR_NO_ERROR 
		&& *kind != MB_DATA_COMMENT)
		{
		fprintf(stderr,"dbg2       time_i[0]:     %d\n",time_i[0]);
		fprintf(stderr,"dbg2       time_i[1]:     %d\n",time_i[1]);
		fprintf(stderr,"dbg2       time_i[2]:     %d\n",time_i[2]);
		fprintf(stderr,"dbg2       time_i[3]:     %d\n",time_i[3]);
		fprintf(stderr,"dbg2       time_i[4]:     %d\n",time_i[4]);
		fprintf(stderr,"dbg2       time_i[5]:     %d\n",time_i[5]);
		fprintf(stderr,"dbg2       time_i[6]:     %d\n",time_i[6]);
		fprintf(stderr,"dbg2       time_d:        %f\n",*time_d);
		fprintf(stderr,"dbg2       longitude:     %f\n",*navlon);
		fprintf(stderr,"dbg2       latitude:      %f\n",*navlat);
		fprintf(stderr,"dbg2       speed:         %f\n",*speed);
		fprintf(stderr,"dbg2       heading:       %f\n",*heading);
		}
	if (verbose >= 2 && *error <= MB_ERROR_NO_ERROR 
		&& *kind == MB_DATA_DATA)
		{
		fprintf(stderr,"dbg2       nbath:      %d\n",
			*nbath);
		for (i=0;i<*nbath;i++)
		  fprintf(stderr,"dbg2       beam:%d  flag:%3d  bath:%f  acrosstrack:%f  alongtrack:%f\n",
			i,beamflag[i],bath[i],
			bathacrosstrack[i],bathalongtrack[i]);
		fprintf(stderr,"dbg2        namp:     %d\n",
			*namp);
		for (i=0;i<*namp;i++)
		  fprintf(stderr,"dbg2       beam:%d   amp:%f  acrosstrack:%f  alongtrack:%f\n",
			i,amp[i],bathacrosstrack[i],bathalongtrack[i]);
		}
	if (verbose >= 2)
		{
		fprintf(stderr,"dbg2       error:      %d\n",*error);
		fprintf(stderr,"dbg2  Return status:\n");
		fprintf(stderr,"dbg2       status:     %d\n",status);
		}

	/* return status */
	return(status);
}