📄 ptapi.c
字号:
if (status == 0) { for (i = 0; i < NPOINT; i++) { if (PTXPoint[i].active == 0) { /* * Set pointID, Set point entry active, Store root Vgroup * ID, Store sub Vgroup IDs, Store HDF-EOS file ID */ pointID = i + idOffset; PTXPoint[i].active = 1; PTXPoint[i].IDTable = vgid[0]; PTXPoint[i].VIDTable[0] = vgid[1]; PTXPoint[i].VIDTable[1] = vgid[2]; PTXPoint[i].VIDTable[2] = vgid[3]; PTXPoint[i].fid = fid; status = 0; break; } } } } return (pointID);}/*----------------------------------------------------------------------------|| BEGIN_PROLOG || || FUNCTION: PTchkptid || || DESCRIPTION: Checks for valid pointID and returns file ID, SDS ID, and || point Vgroup ID || || || Return Value Type Units Description || ============ ====== ========= ===================================== || status intn return status (0) SUCCEED, (-1) FAIL || || INPUTS: || pointID int32 point structure ID || routname char Name of routine calling PTchkptid || || OUTPUTS: || fid int32 File ID || sdInterfaceID int32 SDS interface ID || ptVgroupID int32 point Vgroup ID || || NOTES: || || || Date Programmer Description || ====== ============ ================================================= || Jun 96 Joel Gales Original Programmer || || END_PROLOG |-----------------------------------------------------------------------------*/intnPTchkptid(int32 pointID, char *routname, int32 * fid, int32 * sdInterfaceID, int32 * ptVgroupID){ intn status = 0; /* routine return status variable */ uint8 access; /* Read/Write access code */ int32 idOffset = PTIDOFFSET; /* Point ID offset */ char message1[] = "Invalid point id: %d in routine \"%s\". ID must be >= %d and < %d.\n"; char message2[] = "Point id %d in routine \"%s\" not active.\n"; /* Check for valid point id */ /* ------------------------ */ if (pointID < idOffset || pointID >= NPOINT + idOffset) { status = -1; HEpush(DFE_RANGE, "PTchkptid", __FILE__, __LINE__); HEreport(message1, pointID, routname, idOffset, NPOINT + idOffset); } else { /* Check for active point ID */ /* ------------------------- */ if (PTXPoint[pointID % idOffset].active == 0) { status = -1; HEpush(DFE_GENAPP, "PTchkptid", __FILE__, __LINE__); HEreport(message2, pointID, routname); } else { /* Get file and Point key */ /* ----------------------- */ status = EHchkfid(PTXPoint[pointID % idOffset].fid, " ", fid, sdInterfaceID, &access); *ptVgroupID = PTXPoint[pointID % idOffset].IDTable; } } return (status);}/*----------------------------------------------------------------------------|| BEGIN_PROLOG || || FUNCTION: PTnrecs || || DESCRIPTION: Returns the number of records in a level. || || || Return Value Type Units Description || ============ ====== ========= ===================================== || nrec int32 Number of records in level || || INPUTS: || pointID int32 point structure ID || level int32 level number (0 - based) || || || OUTPUTS: || None || || NOTES: || || || Date Programmer Description || ====== ============ ================================================= || Jun 96 Joel Gales Original Programmer || || END_PROLOG |-----------------------------------------------------------------------------*/int32PTnrecs(int32 pointID, int32 level){ intn status = 0; /* routine return status variable */ uint8 recChk; /* Record check flag */ int32 fid; /* HDF-EOS file id */ int32 sdInterfaceID; /* HDF SDS interface ID */ int32 idOffset = PTIDOFFSET; /* Point ID offset */ int32 ptVgrpID; /* Point Vgroup ID */ int32 nlevels; /* Number of levels in point */ int32 vdataID; /* Level Vdata ID */ int32 vdataID0; /* LevelWritten Vdata ID */ int32 tag; /* Vdata tag */ int32 ref; /* Vdata reference */ int32 nrec; /* Number of records in level */ /* Check for valid point ID */ /* ------------------------ */ status = PTchkptid(pointID, "PTnrecs", &fid, &sdInterfaceID, &ptVgrpID); if (status == 0) { /* Get number of levels */ /* -------------------- */ nlevels = Vntagrefs(ptVgrpID); /* Report error if no levels (vdatas) defined */ /* ------------------------------------------ */ if (nlevels == 0) { status = -1; HEpush(DFE_GENAPP, "PTnrecs", __FILE__, __LINE__); HEreport("No Levels Defined for point ID: %d\n", pointID); } else if (nlevels < level) { /* Report error if level # to large */ /* -------------------------------- */ status = -1; HEpush(DFE_GENAPP, "PTnrecs", __FILE__, __LINE__); HEreport("Only %d levels Defined for point ID: %d\n", nlevels, pointID); } if (status == 0) { /* Get level vdata ID */ /* ------------------ */ vdataID = PTXPoint[pointID % idOffset].vdID[level]; /* Get number of records in level */ /* ------------------------------ */ nrec = VSelts(vdataID); /* If nrec = 1 check whether actual data has been written */ /* ------------------------------------------------------ */ if (nrec == 1) { /* Attach to "LevelWritten" vdata */ /* ------------------------------ */ Vgettagref(ptVgrpID, 0, &tag, &ref); vdataID0 = VSattach(fid, ref, "r"); /* Read record for desired level */ /* ----------------------------- */ VSseek(vdataID0, level); VSsetfields(vdataID0, "LevelWritten"); VSread(vdataID0, &recChk, 1, FULL_INTERLACE); /* If level not yet written then reset nrec to 0 */ /* --------------------------------------------- */ if (recChk == 0) { nrec = 0; } /* Detach for "LevelWritten" Vdata */ /* ------------------------------- */ VSdetach(vdataID0); } } } return (nrec);}/*----------------------------------------------------------------------------|| BEGIN_PROLOG || || FUNCTION: PTnlevels || || DESCRIPTION: Returns the number of levels in a point data set. || || || Return Value Type Units Description || ============ ====== ========= ===================================== || nlevels int32 Number of levels in point structure || || INPUTS: || pointID int32 point structure ID || || || OUTPUTS: || None || || NOTES: || || || Date Programmer Description || ====== ============ ================================================= || Jun 96 Joel Gales Original Programmer || || END_PROLOG |-----------------------------------------------------------------------------*/int32PTnlevels(int32 pointID){ intn status = 0; /* routine return status variable */ int32 fid; /* HDF-EOS file id */ int32 sdInterfaceID; /* HDF SDS interface ID */ int32 idOffset = PTIDOFFSET; /* Point ID offset */ int32 ptVgrpID; /* Point Vgroup ID */ int32 nlevels; /* Number of levels in point */ /* Check for valid point ID */ /* ------------------------ */ status = PTchkptid(pointID, "PTnlevels", &fid, &sdInterfaceID, &ptVgrpID); /* Get number of levels (Number of entries in Data Vgroup */ /* ------------------------------------------------------ */ if (status == 0) { nlevels = Vntagrefs(PTXPoint[pointID % idOffset].VIDTable[0]); } return (nlevels);}/*----------------------------------------------------------------------------|| BEGIN_PROLOG || || FUNCTION: PTsizeof || || DESCRIPTION: Returns size in bytes for specified fields in a point || data set. || || || Return Value Type Units Description || ============ ====== ========= ===================================== || fldsz int32 Size in bytes of fields || || INPUTS: || pointID int32 point structure ID || fieldlist char field list (comma-separated) || || OUTPUTS: || fldlevels int32 Levels of fields || || || NOTES: || || || Date Programmer Description || ====== ============ ================================================= || Jun 96 Joel Gales Original Programmer || || END_PROLOG |-----------------------------------------------------------------------------*/int32PTsizeof(int32 pointID, char *fieldlist, int32 fldlevels[]){ intn i; /* Loop index */ intn j; /* Loop index */ intn status = 0; /* routine return status variable */ uint8 found[VSFIELDMAX]; /* Field found flag array */ int32 fid; /* HDF-EOS file id */ int32 sdInterfaceID; /* HDF SDS interface ID */ int32 idOffset = PTIDOFFSET; /* Point ID offset */ int32 ptVgrpID; /* Point Vgroup ID */ int32 nlevels; /* Number of levels in point */ int32 nflds; /* Number of fields in fieldlist */ int32 vdataID; /* Vdata ID */ int32 slen[VSFIELDMAX]; /* String length array */ int32 fldsz = 0; /* Record size in bytes */ char *pntr[VSFIELDMAX]; /* String pointer array */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -