/*--------------------------------------------------------------------*/ int mbr_wt_em12darw(int verbose, void *mbio_ptr, void *store_ptr, int *error) { char *function_name = "mbr_wt_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_i[7]; int time_j[5]; int year; 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; /* print debug statements */ if (verbose >= 5) { fprintf(stderr, "\ndbg5 Status at beginning of MBIO function <%s>\n", function_name); fprintf(stderr, "dbg5 store->kind: %d\n", store->kind); fprintf(stderr, "dbg5 error: %d\n", *error); fprintf(stderr, "dbg5 status: %d\n", status); } /* translate values from em12 data storage structure */ if (store->kind == MB_DATA_DATA) { /* record type */ data->func = 150; /* time */ time_i[0] = store->year; time_i[1] = store->month; time_i[2] = store->day; time_i[3] = store->hour; time_i[4] = store->minute; time_i[5] = store->second; time_i[6] = store->centisecond; mb_get_jtime(verbose, time_i, time_j); mb_unfix_y2k(verbose, time_j[0], &year); data->year = (short)year; data->jday = time_j[1]; data->minute = time_j[2]; data->secs = 100 * time_j[3] + 0.0001 * time_j[4]; /* navigation */ data->utm_zone = store->utm_zone; data->utm_merd = store->utm_zone_lon; data->corflag = store->utm_system; data->posq = store->pos_quality; data->speed = store->speed; if (data->corflag == 0) { data->latitude = store->pos_latitude; data->longitude = store->pos_longitude; } else { data->latitude = store->utm_northing; data->longitude = store->utm_easting; } /* deal with survey data in secondary data structure */ if (store->ping != NULL) { /* get data structure pointer */ ping = (struct mbsys_simrad_survey_struct *)store->ping; /* copy survey data */ data->latitude = ping->latitude; data->longitude = ping->longitude; data->pingno = ping->ping_number; data->mode = ping->bath_res; data->depthl = ping->keel_depth; data->gyro = 0.1 * ping->heading; data->roll = 0.01 * ping->roll; data->pitch = 0.01 * ping->pitch; data->heave = 0.01 * ping->ping_heave; data->sndval = 0.1 * ping->sound_vel; for (i = 0; i < ping->beams_bath; i++) { if (ping->beamflag[i] == MB_FLAG_NULL) data->depth[i] = 0; else if (!mb_beam_ok(ping->beamflag[i])) data->depth[i] = -ping->bath[i]; else data->depth[i] = ping->bath[i]; data->distacr[i] = ping->bath_acrosstrack[i]; data->distalo[i] = ping->bath_alongtrack[i]; data->range[i] = ping->tt[i]; data->refl[i] = (short int)ping->amp[i]; data->beamq[i] = (short int)ping->quality[i]; } } } /* comment */ else if (store->kind == MB_DATA_COMMENT) { data->func = 100; strncpy(datacomment, store->comment, MBSYS_SIMRAD_COMMENT_LENGTH); } /* print debug statements */ if (verbose >= 5) { fprintf(stderr, "\ndbg5 Ready to write data in MBIO function <%s>\n", function_name); fprintf(stderr, "dbg5 store->kind: %d\n", store->kind); fprintf(stderr, "dbg5 error: %d\n", *error); fprintf(stderr, "dbg5 status: %d\n", status); } /* print debug statements */ if (verbose >= 4 && status == MB_SUCCESS) { fprintf(stderr, "\ndbg4 Data to be written by MBIO function <%s>\n", function_name); fprintf(stderr, "dbg4 Status values:\n"); fprintf(stderr, "dbg4 store->kind:%d\n", store->kind); fprintf(stderr, "dbg4 error: %d\n", *error); fprintf(stderr, "dbg4 status: %d\n", status); if (store->kind == MB_DATA_DATA) { fprintf(stderr, "dbg4 Survey values:\n"); 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 if (store->kind == MB_DATA_COMMENT) { fprintf(stderr, "dbg4 Comment:\n"); fprintf(stderr, "dbg4 comment: %s\n", datacomment); } } /* deal with comment */ if (status == MB_SUCCESS && store->kind == MB_DATA_COMMENT) { index = 0; for (i = 0; i < MBF_EM12DARW_RECORD_LENGTH; i++) line[i] = 0; mb_put_binary_short(MB_NO, data->func, &line[0]); index += 2; strncpy(datacomment, store->comment, MBSYS_SIMRAD_COMMENT_LENGTH); } /* deal with data */ else if (status == MB_SUCCESS && store->kind == MB_DATA_DATA) { index = 0; mb_put_binary_short(MB_NO, data->func, &line[0]); index += 2; mb_put_binary_short(MB_NO, data->year, &line[index]); index += 2; mb_put_binary_short(MB_NO, data->jday, &line[index]); index += 2; mb_put_binary_short(MB_NO, data->minute, &line[index]); index += 2; mb_put_binary_short(MB_NO, data->secs, &line[index]); index += 8; mb_put_binary_double(MB_NO, data->latitude, &line[index]); index += 8; mb_put_binary_double(MB_NO, data->longitude, &line[index]); index += 8; mb_put_binary_short(MB_NO, data->corflag, &line[index]); index += 4; mb_put_binary_float(MB_NO, data->utm_merd, &line[index]); index += 4; mb_put_binary_short(MB_NO, data->utm_zone, &line[index]); index += 2; mb_put_binary_short(MB_NO, data->posq, &line[index]); index += 2; mb_put_binary_int(MB_NO, data->pingno, &line[index]); index += 4; mb_put_binary_short(MB_NO, data->mode, &line[index]); index += 4; mb_put_binary_float(MB_NO, data->depthl, &line[index]); index += 4; mb_put_binary_float(MB_NO, data->speed, &line[index]); index += 4; mb_put_binary_float(MB_NO, data->gyro, &line[index]); index += 4; mb_put_binary_float(MB_NO, data->roll, &line[index]); index += 4; mb_put_binary_float(MB_NO, data->pitch, &line[index]); index += 4; mb_put_binary_float(MB_NO, data->heave, &line[index]); index += 4; mb_put_binary_float(MB_NO, data->sndval, &line[index]); index += 4; for (i = 0; i < MBF_EM12DARW_BEAMS; i++) { mb_put_binary_short(MB_NO, data->depth[i], &line[index]); index += 2; } for (i = 0; i < MBF_EM12DARW_BEAMS; i++) { mb_put_binary_short(MB_NO, data->distacr[i], &line[index]); index += 2; } for (i = 0; i < MBF_EM12DARW_BEAMS; i++) { mb_put_binary_short(MB_NO, data->distalo[i], &line[index]); index += 2; } for (i = 0; i < MBF_EM12DARW_BEAMS; i++) { mb_put_binary_short(MB_NO, data->range[i], &line[index]); index += 2; } for (i = 0; i < MBF_EM12DARW_BEAMS; i++) { mb_put_binary_short(MB_NO, data->refl[i], &line[index]); index += 2; } for (i = 0; i < MBF_EM12DARW_BEAMS; i++) { mb_put_binary_short(MB_NO, data->beamq[i], &line[index]); index += 2; } } /* write next record to file */ if (store->kind == MB_DATA_DATA || store->kind == MB_DATA_COMMENT) { if ((status = fwrite(line, 1, MBF_EM12DARW_RECORD_LENGTH, mb_io_ptr->mbfp)) == MBF_EM12DARW_RECORD_LENGTH) { status = MB_SUCCESS; *error = MB_ERROR_NO_ERROR; } else { status = MB_FAILURE; *error = MB_ERROR_WRITE_FAIL; } } else { status = MB_SUCCESS; *error = MB_ERROR_NO_ERROR; if (verbose >= 5) fprintf(stderr, "\ndbg5 No data written in MBIO function <%s>\n", function_name); } /* 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_wt_hydrob93(int verbose, void *mbio_ptr, void *store_ptr, int *error) { char *function_name = "mbr_wt_hydrob93"; int status = MB_SUCCESS; struct mb_io_struct *mb_io_ptr; struct mbsys_singlebeam_struct *store; char line[MBF_HYDROB93_RECORD_LENGTH]; int ilongitude, ilatitude, idepth; short itype; /* 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: %lu\n",(size_t)mbio_ptr); fprintf(stderr,"dbg2 store_ptr: %lu\n",(size_t)store_ptr); } /* get pointer to mbio descriptor */ mb_io_ptr = (struct mb_io_struct *) mbio_ptr; /* get pointer to raw data structure */ store = (struct mbsys_singlebeam_struct *) store_ptr; /* handle the data */ if (store->kind == MB_DATA_DATA) { /* print output debug statements */ if (verbose >= 4) { fprintf(stderr,"\ndbg4 Data to be written in MBIO function <%s>\n", function_name); fprintf(stderr,"dbg4 Values,read:\n"); fprintf(stderr,"dbg4 latitude: %f\n",store->latitude); fprintf(stderr,"dbg4 longitude: %f\n",store->longitude); fprintf(stderr,"dbg4 bath: %f\n",store->bath); fprintf(stderr,"dbg4 flag: %d\n",store->flag); fprintf(stderr,"dbg4 error: %d\n",*error); fprintf(stderr,"dbg4 status: %d\n",status); } /* put data into buffer */ ilongitude = (int)(1000000 * store->longitude); ilatitude = (int)(1000000 * store->longitude); idepth = (int)(10 * store->bath); if (mb_beam_ok(store->flag)) itype = 711; else if (store->flag == MB_FLAG_NULL) itype = 0; else itype = 10711; mb_put_binary_int(MB_YES, (int) ilatitude, (void *) &line[0]); mb_put_binary_int(MB_YES, (int) ilongitude, (void *) &line[4]); mb_put_binary_int(MB_YES, (int) idepth, (void *) &line[8]); mb_put_binary_short(MB_YES, (short) itype, (void *) &line[12]); } if ((status = fwrite(line,1,MBF_HYDROB93_RECORD_LENGTH, mb_io_ptr->mbfp)) == MBF_HYDROB93_RECORD_LENGTH) { status = MB_SUCCESS; *error = MB_ERROR_NO_ERROR; } else { status = MB_FAILURE; *error = MB_ERROR_WRITE_FAIL; } /* print output debug statements */ if (verbose >= 5) { fprintf(stderr,"\ndbg5 Data record kind in MBIO function <%s>\n",function_name); fprintf(stderr,"dbg5 kind: %d\n",store->kind); } /* 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); }