Esempio n. 1
0
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;
    }
}
Esempio n. 3
0
/*--------------------------------------------------------------------*/
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;
    }
}