NV_INT32 get_file_type (NV_CHAR *path) { NV_CHAR *ptr; NV_INT32 gsfhnd, swap; FILE *uni_fp; UNISIPS_HEADER unisips_header; /* Check for "deleted" files. */ if (path[0] == '*') return (-1); // Make sure the file exists. if ((uni_fp = fopen (path, "rb")) == NULL) return (-2); fclose (uni_fp); ptr = strrchr (path, '/'); if (ptr == NULL) ptr = path; /* Check for GSF file. */ if (!gsfOpen (path, GSF_READONLY, &gsfhnd)) { gsfClose (gsfhnd); return (PFM_GSF_DATA); } /* Check for WLF (.wlf) file names. */ if (!strcmp (&path[strlen (path) - 4], ".wlf") || !strcmp (&path[strlen (path) - 4], ".wtf") || !strcmp (&path[strlen (path) - 4], ".whf")) return (PFM_WLF_DATA); /* Check for HAWKEYE (.bin) file names. */ if (!strcmp (&path[strlen (path) - 7], "_HD.bin")) return (PFM_HAWKEYE_HYDRO_DATA); if (!strcmp (&path[strlen (path) - 7], "_TD.bin")) return (PFM_HAWKEYE_TOPO_DATA); /* Check for BAG (.bag) file names. */ if (!strcmp (&path[strlen (path) - 4], ".bag")) return (PFM_BAG_DATA); /* Check for SHOALS .hof file names. */ if (!strcmp (&path[strlen (path) - 4], ".hof")) return (PFM_CHARTS_HOF_DATA); /* Check for SHOALS .tof file names. */ if (!strcmp (&path[strlen (path) - 4], ".tof")) return (PFM_SHOALS_TOF_DATA); /* Check for Hypack yxz file names. */ if (!strcmp (&path[strlen (path) - 4], ".txt") || !strcmp (&path[strlen (path) - 4], ".yxz") || !strcmp (&path[strlen (path) - 4], ".raw")) return (PFM_NAVO_ASCII_DATA); /* Check for IVS or other xyz file names. */ if (!strcmp (&path[strlen (path) - 4], ".xyz")) return (PFM_ASCXYZ_DATA); /* Check for NAVO LLZ file names. */ if (!strcmp (&path[strlen (path) - 4], ".llz")) return (PFM_NAVO_LLZ_DATA); /* Check for DTED file names. */ if (!strcmp (&path[strlen (path) - 4], ".dt1") || !strcmp (&path[strlen (path) - 4], ".dt2")) return (PFM_DTED_DATA); /* Check for CHRTR file names. */ if (!strcmp (&path[strlen (path) - 4], ".fin") || !strcmp (&path[strlen (path) - 4], ".ch2")) return (PFM_CHRTR_DATA); /* Check for CZMIL file names. */ if (!strcmp (&path[strlen (path) - 4], ".cxy")) return (PFM_CZMIL_DATA); // Check for UNISIPS file if ((uni_fp = fopen (path, "rb")) != NULL) { /* Read UNISIPS header information */ if (read_unisips_header (uni_fp, &unisips_header, &swap)) { fclose (uni_fp); return (PFM_UNISIPS_DEPTH_DATA); } } /* Can't figure this one out. */ return (PFM_UNDEFINED_DATA); }
void get_feature_event_time (NV_INT32 pfm_handle, DEPTH_RECORD depth, time_t *tv_sec, long *tv_nsec) { NV_INT16 type; NV_CHAR filename[512]; gsfDataID gsf_data_id; gsfRecords gsf_record; extern int gsfError; HYDRO_OUTPUT_T hof_record; TOPO_OUTPUT_T tof_record; WLF_HEADER wlf_header; WLF_RECORD wlf_record; CZMIL_CXY_Header czmil_header; CZMIL_CXY_Data czmil_record; FILE *hof_fp, *tof_fp; NV_INT32 gsf_handle, wlf_handle, czmil_handle; read_list_file (pfm_handle, depth.file_number, filename, &type); // Just in case it's not one of our supported formats, get the current time (that's about the best we can do). QDateTime current_time = QDateTime::currentDateTime (); NV_INT32 year = current_time.date ().year (); NV_INT32 day = current_time.date ().dayOfYear (); NV_INT32 hour = current_time.time ().hour (); NV_INT32 minute = current_time.time ().minute (); NV_FLOAT32 second = current_time.time ().second (); inv_cvtime (year - 1900, day, hour, minute, second, tv_sec, tv_nsec); switch (type) { case PFM_GSF_DATA: if (gsfOpen (filename, GSF_READONLY_INDEX, &gsf_handle)) { if (gsfError != GSF_FOPEN_ERROR) gsfClose (gsf_handle); return; } gsf_data_id.recordID = GSF_RECORD_SWATH_BATHYMETRY_PING; gsf_data_id.record_number = depth.ping_number; if (gsfRead (gsf_handle, GSF_RECORD_SWATH_BATHYMETRY_PING, &gsf_data_id, &gsf_record, NULL, 0) < 0) return; *tv_sec = gsf_record.mb_ping.ping_time.tv_sec; *tv_nsec = gsf_record.mb_ping.ping_time.tv_nsec; gsfClose (gsf_handle); break; case PFM_SHOALS_1K_DATA: case PFM_CHARTS_HOF_DATA: if ((hof_fp = open_hof_file (filename)) == NULL) return; hof_read_record (hof_fp, depth.ping_number, &hof_record); charts_cvtime (hof_record.timestamp, &year, &day, &hour, &minute, &second); inv_cvtime (year - 1900, day, hour, minute, second, tv_sec, tv_nsec); fclose (hof_fp); break; case PFM_SHOALS_TOF_DATA: if ((tof_fp = open_tof_file (filename)) == NULL) return; tof_read_record (tof_fp, depth.ping_number, &tof_record); charts_cvtime (tof_record.timestamp, &year, &day, &hour, &minute, &second); inv_cvtime (year - 1900, day, hour, minute, second, tv_sec, tv_nsec); fclose (tof_fp); break; case PFM_WLF_DATA: if ((wlf_handle = wlf_open_file (filename, &wlf_header, WLF_READONLY)) < 0) return; if (wlf_read_record (wlf_handle, depth.ping_number, &wlf_record, NVFalse, NULL) < 0) { wlf_close_file (wlf_handle); return; } *tv_sec = wlf_record.tv_sec; *tv_nsec = wlf_record.tv_nsec; wlf_close_file (wlf_handle); break; case PFM_CZMIL_DATA: czmil_handle = czmil_open_file (filename, &czmil_header, CZMIL_READONLY, NVTrue); if (czmil_handle != CZMIL_SUCCESS) return; czmil_read_cxy_record (czmil_handle, depth.ping_number, &czmil_record); czmil_cvtime (czmil_record.channel[CZMIL_DEEP_CHANNEL].timestamp, &year, &day, &hour, &minute, &second); inv_cvtime (year - 1900, day, hour, minute, second, tv_sec, tv_nsec); czmil_close_file (czmil_handle); break; } }
/*--------------------------------------------------------------------*/ int mb_close(int verbose, void **mbio_ptr, int *error) { char *function_name = "mb_close"; int status = MB_SUCCESS; struct mb_io_struct *mb_io_ptr; /* 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; /* deallocate format dependent structures */ status = (*mb_io_ptr->mb_io_format_free)(verbose,*mbio_ptr,error); /* deallocate system dependent structures */ /*status = (*mb_io_ptr->mb_io_store_free) (verbose,*mbio_ptr,&(mb_io_ptr->store_data),error);*/ /* deallocate memory for arrays within the mbio descriptor */ if (mb_io_ptr->filetype == MB_FILETYPE_XDR && mb_io_ptr->xdrs != NULL) status = mb_freed(verbose,__FILE__, __LINE__,(void **)&mb_io_ptr->xdrs,error); if (mb_io_ptr->filetype == MB_FILETYPE_XDR && mb_io_ptr->xdrs2 != NULL) status = mb_freed(verbose,__FILE__, __LINE__,(void **)&mb_io_ptr->xdrs2,error); if (mb_io_ptr->filetype == MB_FILETYPE_XDR && mb_io_ptr->xdrs3 != NULL) status = mb_freed(verbose,__FILE__, __LINE__,(void **)&mb_io_ptr->xdrs3,error); if (mb_io_ptr->hdr_comment != NULL) status = mb_freed(verbose,__FILE__, __LINE__,(void **)&mb_io_ptr->hdr_comment,error); status = mb_deall_ioarrays(verbose, *mbio_ptr, error); /* close the files if normal */ if (mb_io_ptr->filetype == MB_FILETYPE_NORMAL || mb_io_ptr->filetype == MB_FILETYPE_XDR) { if (mb_io_ptr->mbfp != NULL) fclose(mb_io_ptr->mbfp); if (mb_io_ptr->mbfp2 != NULL) fclose(mb_io_ptr->mbfp2); if (mb_io_ptr->mbfp3 != NULL) fclose(mb_io_ptr->mbfp3); } /* else handle single normal files to be closed with mb_fileio_close() */ else if (mb_io_ptr->filetype == MB_FILETYPE_SINGLE) { status = mb_fileio_close(verbose, *mbio_ptr, error); } /* else if gsf then use gsfClose */ else if (mb_io_ptr->filetype == MB_FILETYPE_GSF) { gsfClose((int) mb_io_ptr->gsfid); } /* else if netcdf then use nc_close */ else if (mb_io_ptr->filetype == MB_FILETYPE_NETCDF) { if (mb_io_ptr->filemode == MB_FILEMODE_WRITE) nc_enddef(mb_io_ptr->ncid); nc_close(mb_io_ptr->ncid); } /* else handle surf files to be opened with libsapi */ else if (mb_io_ptr->filetype == MB_FILETYPE_SURF) { SAPI_close(); } /* deallocate UTM projection if required */ if (mb_io_ptr->projection_initialized == MB_YES) { mb_io_ptr->projection_initialized = MB_NO; mb_proj_free(verbose, &(mb_io_ptr->pjptr), error); } /* deallocate the mbio descriptor */ status = mb_freed(verbose,__FILE__, __LINE__,(void **)mbio_ptr,error); /* print output debug statements */ if (verbose >= 2) { fprintf(stderr,"\ndbg2 MBIO function <%s> completed\n",function_name); fprintf(stderr,"dbg2 Revision id: %s\n",rcs_id); fprintf(stderr,"dbg2 Return value:\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); }
void get_feature_event_time (MISC *misc) { NV_INT16 type; NV_CHAR filename[512], str[512]; gsfDataID gsf_data_id; gsfRecords gsf_record; extern int gsfError; HYDRO_OUTPUT_T hof_record; TOPO_OUTPUT_T tof_record; WLF_HEADER wlf_header; WLF_RECORD wlf_record; CZMIL_CXY_Header czmil_header; CZMIL_CXY_Data czmil_record; FILE *hof_fp, *tof_fp; NV_INT32 gsf_handle, wlf_handle, czmil_handle; read_list_file (misc->pfm_handle[misc->data[misc->add_feature_index].pfm], misc->data[misc->add_feature_index].file, filename, &type); // If the file has /PFMWDB:: as the beginning of the file then we are tying to unload from a PFM World Data Base // (PFMWDB) file and we need to strip the /PFMWDB:: off of the file name and hope that it has been placed in the // current directory. if (!strncmp (filename, "/PFMWDB::", 9)) { strcpy (str, &filename[9]); strcpy (filename, str); } // Just in case it's not one of our supported formats, get the current time (that's about the best we can do). QDateTime current_time = QDateTime::currentDateTime (); NV_INT32 year = current_time.date ().year (); NV_INT32 day = current_time.date ().dayOfYear (); NV_INT32 hour = current_time.time ().hour (); NV_INT32 minute = current_time.time ().minute (); NV_FLOAT32 second = current_time.time ().second (); inv_cvtime (year - 1900, day, hour, minute, second, &misc->new_record.event_tv_sec, &misc->new_record.event_tv_nsec); switch (type) { case PFM_GSF_DATA: if (gsfOpen (filename, GSF_READONLY_INDEX, &gsf_handle)) { if (gsfError != GSF_FOPEN_ERROR) gsfClose (gsf_handle); return; } gsf_data_id.recordID = GSF_RECORD_SWATH_BATHYMETRY_PING; gsf_data_id.record_number = misc->data[misc->add_feature_index].rec; if (gsfRead (gsf_handle, GSF_RECORD_SWATH_BATHYMETRY_PING, &gsf_data_id, &gsf_record, NULL, 0) < 0) return; misc->new_record.event_tv_sec = gsf_record.mb_ping.ping_time.tv_sec; misc->new_record.event_tv_nsec = gsf_record.mb_ping.ping_time.tv_nsec; gsfClose (gsf_handle); break; case PFM_SHOALS_1K_DATA: case PFM_CHARTS_HOF_DATA: if ((hof_fp = open_hof_file (filename)) == NULL) return; hof_read_record (hof_fp, misc->data[misc->add_feature_index].rec, &hof_record); charts_cvtime (hof_record.timestamp, &year, &day, &hour, &minute, &second); inv_cvtime (year - 1900, day, hour, minute, second, &misc->new_record.event_tv_sec, &misc->new_record.event_tv_nsec); fclose (hof_fp); break; case PFM_SHOALS_TOF_DATA: if ((tof_fp = open_tof_file (filename)) == NULL) return; tof_read_record (tof_fp, misc->data[misc->add_feature_index].rec, &tof_record); charts_cvtime (tof_record.timestamp, &year, &day, &hour, &minute, &second); inv_cvtime (year - 1900, day, hour, minute, second, &misc->new_record.event_tv_sec, &misc->new_record.event_tv_nsec); fclose (tof_fp); break; case PFM_WLF_DATA: if ((wlf_handle = wlf_open_file (filename, &wlf_header, WLF_READONLY)) < 0) return; if (wlf_read_record (wlf_handle, misc->data[misc->add_feature_index].rec, &wlf_record, NVFalse, NULL) < 0) { wlf_close_file (wlf_handle); return; } misc->new_record.event_tv_sec = wlf_record.tv_sec; misc->new_record.event_tv_nsec = wlf_record.tv_nsec; wlf_close_file (wlf_handle); break; case PFM_CZMIL_DATA: czmil_handle = czmil_open_file (filename, &czmil_header, CZMIL_READONLY, NVTrue); if (czmil_handle != CZMIL_SUCCESS) return; czmil_read_cxy_record (czmil_handle, misc->data[misc->add_feature_index].rec, &czmil_record); czmil_cvtime (czmil_record.channel[CZMIL_DEEP_CHANNEL].timestamp, &year, &day, &hour, &minute, &second); inv_cvtime (year - 1900, day, hour, minute, second, &misc->new_record.event_tv_sec, &misc->new_record.event_tv_nsec); czmil_close_file (czmil_handle); break; } }