📄 ehapi.c
字号:
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 + -