⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ehapi.c

📁 GIS系统支持库Geospatial Data Abstraction Library代码.GDAL is a translator library for raster geospatial dat
💻 C
📖 第 1 页 / 共 5 页
字号:
                        HEreport("%s\n", errbuf);                    }		} else		{		    /* If error in Hopen then report */		    /* ----------------------------- */		    fid = -1;		    status = -1;		    HEpush(DFE_FNF, "EHopen", __FILE__, __LINE__);		    sprintf(errbuf, "%s%s%s", "\"", filename,			    "\" cannot be opened for RDWR access.");		    HEreport("%s\n", errbuf);		}		break;		/* Open existing HDF-EOS file for read-only access */		/* ----------------------------------------------- */	    case DFACC_READ:		/* Get HDF file ID */		/* --------------- */#ifndef _PGS_OLDNFS/* The following loop around the function Hopen is intended to deal with the NFS cache    problem when opening file fails with errno = 150 or 151. When NFS cache is updated,   this part of change is no longer neccessary.              10/18/1999   */                retryCount = 0;                HDFfid = -1;                while ((HDFfid == -1) && (retryCount < MAX_RETRIES))                {                HDFfid = Hopen(filename, DFACC_READ, 0);                if((HDFfid == -1) && (errno == 150 || errno == 151))                    {                    HEpush(DFE_FNF, "EHopen", __FILE__, __LINE__);                    sprintf(errbuf, "\"%s\" cannot be opened for READONLY access, will retry %d times.", filename,  (MAX_RETRIES - retryCount - 1));                    HEreport("%s\n", errbuf);                    sleep(1);                    }                retryCount++;                }#else                HDFfid = Hopen(filename, DFACC_READ, 0);#endif		/* If file does not exist report error */		/* ----------------------------------- */		if (HDFfid == -1)		{		    fid = -1;		    status = -1;		    HEpush(DFE_FNF, "EHopen", __FILE__, __LINE__);		    strcpy(errbuf, "\"");		    strcat(errbuf, filename);		    strcat(errbuf, "\" (opened for READONLY access)");		    strcat(errbuf, " does not exist.");		    HEreport("%s\n", errbuf);		} else		{		    /* If file exists then get SD interface ID */		    /* --------------------------------------- */		    sdInterfaceID = SDstart(filename, DFACC_RDONLY);                        /* If SDstart successful ... */                        /* ------------------------- */                        if (sdInterfaceID != -1)                        { 		           /* Set open access to read-only */		           /* ---------------------------- */		           acs = 0;		         } else                        {                            /* If error in SDstart then report */                            /* ------------------------------- */                            fid = -1;                            status = -1;                            HEpush(DFE_FNF, "EHopen", __FILE__, __LINE__);                            sprintf(errbuf, "%s%s%s", "\"", filename,                            "\" cannot be opened for read access.");                            HEreport("%s\n", errbuf);                        }		}		break;	    default:		/* Invalid Access Code */		/* ------------------- */		fid = -1;		status = -1;		HEpush(DFE_BADACC, "EHopen", __FILE__, __LINE__);		HEreport("Access Code: %d (%s).\n", access, filename);	    }	}    } else    {	/* Too many files opened */	/* --------------------- */	status = -1;	fid = -1;	HEpush(DFE_TOOMANY, "EHopen", __FILE__, __LINE__);	HEreport("No more than %d files may be open simultaneously (%s).\n",		 NEOSHDF, filename);    }    if (status == 0)    {	/* Initialize Vgroup Access */	/* ------------------------ */	Vstart(HDFfid);	/* Assign HDFEOS fid # & Load HDF fid and sdInterfaceID tables */	/* ----------------------------------------------------------- */	for (i = 0; i < NEOSHDF; i++)	{	    if (EHXtypeTable[i] == 0)	    {		fid = i + EHIDOFFSET;		EHXacsTable[i] = acs;		EHXtypeTable[i] = 1;		EHXfidTable[i] = HDFfid;		EHXsdTable[i] = sdInterfaceID;		break;	    }	}    }    return (fid);}/*----------------------------------------------------------------------------||  BEGIN_PROLOG                                                               ||                                                                             ||  FUNCTION: EHchkfid                                                         ||                                                                             ||  DESCRIPTION: Checks for valid file id and returns HDF file ID and          ||               SD interface ID                                               ||                                                                             ||                                                                             ||  Return Value    Type     Units     Description                             ||  ============   ======  =========   =====================================   ||  status         intn                return status (0) SUCCEED, (-1) FAIL    ||                                                                             ||  INPUTS:                                                                    ||  fid            int32               HDF-EOS file ID                         ||  name           char                Structure name                          ||                                                                             ||  OUTPUTS:                                                                   ||  HDFfid         int32               HDF File ID                             ||  sdInterfaceID  int32               SDS interface ID                        ||  access         uint8               access code                             ||                                                                             ||  NOTES:                                                                     ||                                                                             ||                                                                             ||   Date     Programmer   Description                                         ||  ======   ============  =================================================   ||  Jun 96   Joel Gales    Original Programmer                                 ||  Jul 96   Joel Gales    set status=-1 if failure                            ||  Jul 96   Joel Gales    Add file id offset EHIDOFFSET                       ||                                                                             ||  END_PROLOG                                                                 |-----------------------------------------------------------------------------*/intnEHchkfid(int32 fid, char *name, int32 * HDFfid, int32 * sdInterfaceID,	 uint8 * access){    intn            status = 0;	/* routine return status variable */    intn            fid0;	/* HDFEOS file ID - Offset */    /* Check for valid HDFEOS file ID range */    /* ------------------------------------ */    if (fid < EHIDOFFSET || fid > NEOSHDF + EHIDOFFSET)    {	status = -1;	HEpush(DFE_RANGE, "EHchkfid", __FILE__, __LINE__);	HEreport("Invalid file id: %d.  ID must be >= %d and < %d (%s).\n",		 fid, EHIDOFFSET, NEOSHDF + EHIDOFFSET, name);    } else    {	/* Compute "reduced" file ID */	/* ------------------------- */	fid0 = fid % EHIDOFFSET;	/* Check that HDFEOS file ID is active */	/* ----------------------------------- */	if (EHXtypeTable[fid0] == 0)	{	    status = -1;	    HEpush(DFE_GENAPP, "EHchkfid", __FILE__, __LINE__);	    HEreport("File id %d not active (%s).\n", fid, name);	} else	{	    /*	     * Get HDF file ID, SD interface ID and file access from external	     * arrays	     */	    *HDFfid = EHXfidTable[fid0];	    *sdInterfaceID = EHXsdTable[fid0];	    *access = EHXacsTable[fid0];	}    }    return (status);}/*----------------------------------------------------------------------------||  BEGIN_PROLOG                                                               ||                                                                             ||  FUNCTION: EHidinfo                                                         ||                                                                             ||  DESCRIPTION: Gets Hopen and SD intereface IDs from HDF-EOS id              ||                                                                             ||                                                                             ||  Return Value    Type     Units     Description                             ||  ============   ======  =========   =====================================   ||  status         intn                return status (0) SUCCEED, (-1) FAIL    ||                                                                             ||  INPUTS:                                                                    ||  fid            int32               HDF-EOS file ID                         ||                                                                             ||  OUTPUTS:                                                                   ||  HDFfid         int32               HDF File ID                             ||  sdInterfaceID  int32               SDS interface ID                        ||                                                                             ||  NOTES:                                                                     ||                                                                             ||                                                                             ||   Date     Programmer   Description                                         ||  ======   ============  =================================================   ||  Jul 96   Joel Gales    Original Programmer                                 ||                                                                             ||  END_PROLOG                                                                 |-----------------------------------------------------------------------------*/intnEHidinfo(int32 fid, int32 * HDFfid, int32 * sdInterfaceID){    intn            status = 0;	/* routine return status variable */    uint8           dum;	/* Dummy variable */    /* Call EHchkfid to get HDF and SD interface IDs */    /* --------------------------------------------- */    status = EHchkfid(fid, "EHidinfo", HDFfid, sdInterfaceID, &dum);    return (status);}/* FORTRAN binding */FCALLSCFUN3(INT, EHidinfo, EHIDINFO, ehidinfo, INT32, PINT32,	    PINT32)/*----------------------------------------------------------------------------||  BEGIN_PROLOG                                                               ||                                                                             ||  FUNCTION: EHfilename                                                       ||                                                                             ||  DESCRIPTION: Returns HDF filename                                          ||                                                                             ||                                                                             ||  Return Value    Type     Units     Description                             ||  ============   ======  =========   =====================================   ||  status         intn                return status (0) SUCCEED, (-1) FAIL    ||                                                                             ||  INPUTS:                                                                    ||  fid            int32               HDF-EOS file id                         ||                                                                             ||  OUTPUTS:                                                                   ||  filename       char                HDF-EOS file name                       ||                                                                             ||  NOTES:                                                                     ||                                                                             ||                                                                             ||   Date     Programmer   Description                                         ||  ======   ============  =================================================   ||  Sep 96   Joel Gales    Original Programmer                                 ||                                                                             ||  END_PROLOG                                                                 |-----------------------------------------------------------------------------*/intnEHfilename(int32 fid, char *filename){    intn            status = 0;	/* routine return status variable */    intn            dum;	/* Dummy variable */    char           *fname;	/* Pointer to filename */    /* Get point to filename from Hfidinquire */    /* -------------------------------------- */    Hfidinquire(EHXfidTable[fid % EHIDOFFSET], &fname, &dum, &dum);    strcpy(filename, fname);    return (status);}/*----------------------------------------------------------------------------||  BEGIN_PROLOG                                                               ||                                                                             ||  FUNCTION: EHgetversion                                                     ||                                                                             ||  DESCRIPTION: Returns HDF-EOS version string                                ||                                                                             ||                                                                             ||  Return Value    Type     Units     Description                             ||  ============   ======  =========   =====================================   ||  status         intn                return status (0) SUCCEED, (-1) FAIL    ||                                                                             ||  INPUTS:                                                                    |

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -