Beispiel #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);
}
Beispiel #2
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);
}