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