/*--------------------------------------------------------------------*/ 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); }
/*--------------------------------------------------------------------*/ 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); }