📄 ehapi.c
字号:
| FUNCTION: EHstrwithin || || DESCRIPTION: Searchs for string within target string || || || Return Value Type Units Description || ============ ====== ========= ===================================== || indx int32 Element index (0 - based) || || INPUTS: || target char Target string || search char Search string || delim char Delimitor || || OUTPUTS: || None || || NOTES: || || || Date Programmer Description || ====== ============ ================================================= || Jun 96 Joel Gales Original Programmer || Jan 97 Joel Gales Change ptr & slen to dynamic arrays || || END_PROLOG |-----------------------------------------------------------------------------*/int32EHstrwithin(char *target, char *search, char delim){ intn found = 0; /* Target string found flag */ int32 indx; /* Loop index */ int32 nentries; /* Number of entries in search string */ int32 *slen; /* Pointer to string length array */ char **ptr; /* Pointer to string pointer array */ char buffer[128];/* Buffer to hold "test" string entry */ /* Count number of entries in search string list */ /* --------------------------------------------- */ nentries = EHparsestr(search, delim, NULL, NULL); /* Allocate string pointer and length arrays */ /* ----------------------------------------- */ ptr = (char **) calloc(nentries, sizeof(char *)); if(ptr == NULL) { HEpush(DFE_NOSPACE,"EHstrwithin", __FILE__, __LINE__); return(-1); } slen = (int32 *) calloc(nentries, sizeof(int32)); if(slen == NULL) { HEpush(DFE_NOSPACE,"EHstrwithin", __FILE__, __LINE__); free(ptr); return(-1); } /* Parse search string */ /* ------------------- */ nentries = EHparsestr(search, delim, ptr, slen); /* Loop through all elements in search string list */ /* ----------------------------------------------- */ for (indx = 0; indx < nentries; indx++) { /* Copy string entry into buffer */ /* ----------------------------- */ memcpy(buffer, ptr[indx], slen[indx]); buffer[slen[indx]] = 0; /* Compare target string with string entry */ /* --------------------------------------- */ if (strcmp(target, buffer) == 0) { found = 1; break; } } /* If not found set return to -1 */ /* ----------------------------- */ if (found == 0) { indx = -1; } free(slen); free(ptr); return (indx);}/*----------------------------------------------------------------------------|| BEGIN_PROLOG || || FUNCTION: EHloadliststr || || DESCRIPTION: Builds list string from string array || || || Return Value Type Units Description || ============ ====== ========= ===================================== || status intn return status (0) SUCCEED, (-1) FAIL || || INPUTS: || ptr char String pointer array || nentries int32 Number of string array elements || delim char Delimitor || || OUTPUTS: || liststr char Output list string || || NOTES: || || || Date Programmer Description || ====== ============ ================================================= || Jun 96 Joel Gales Original Programmer || || END_PROLOG |-----------------------------------------------------------------------------*/intnEHloadliststr(char *ptr[], int32 nentries, char *liststr, char delim){ intn status = 0; /* routine return status variable */ int32 i; /* Loop index */ int32 slen; /* String entry length */ int32 off = 0; /* Position of next entry along string list */ char dstr[2]; /* string version of input variable "delim" */ dstr[0] = delim; dstr[1] = '\0'; /* Loop through all entries in string array */ /* ---------------------------------------- */ for (i = 0; i < nentries; i++) { /* Get string length of string array entry */ /* --------------------------------------- */ slen = strlen(ptr[i]); /* Copy string entry to string list */ /* -------------------------------- */ memcpy(liststr + off, ptr[i], slen + 1); /* Concatenate with delimitor */ /* -------------------------- */ if (i != nentries - 1) { strcat(liststr, dstr); } /* Get position of next entry for string list */ /* ------------------------------------------ */ off += slen + 1; } return (status);}/*----------------------------------------------------------------------------|| BEGIN_PROLOG || || FUNCTION: EHgetid || || DESCRIPTION: Get Vgroup/Vdata ID from name || || || Return Value Type Units Description || ============ ====== ========= ===================================== || outID int32 Output ID || || INPUTS: || fid int32 HDF-EOS file ID || vgid int32 Vgroup ID || objectname char object name || code intn object code (0 - Vgroup, 1 - Vdata) || access char access ("w/r") || || || OUTPUTS: || None || || NOTES: || || || Date Programmer Description || ====== ============ ================================================= || Jun 96 Joel Gales Original Programmer || || END_PROLOG |-----------------------------------------------------------------------------*/int32EHgetid(int32 fid, int32 vgid, char *objectname, intn code, char *access){ intn i; /* Loop index */ int32 nObjects; /* # of objects in Vgroup */ int32 *tags; /* Pnt to Vgroup object tags array */ int32 *refs; /* Pnt to Vgroup object refs array */ int32 id; /* Object ID */ int32 outID = -1; /* Desired object ID */ char name[128]; /* Object name */ /* Get Number of objects */ /* --------------------- */ nObjects = Vntagrefs(vgid); /* If objects exist ... */ /* -------------------- */ if (nObjects != 0) { /* Get tags and references of objects */ /* ---------------------------------- */ tags = (int32 *) malloc(sizeof(int32) * nObjects); if(tags == NULL) { HEpush(DFE_NOSPACE,"EHgetid", __FILE__, __LINE__); return(-1); } refs = (int32 *) malloc(sizeof(int32) * nObjects); if(refs == NULL) { HEpush(DFE_NOSPACE,"EHgetid", __FILE__, __LINE__); free(tags); return(-1); } Vgettagrefs(vgid, tags, refs, nObjects); /* Vgroup ID Section */ /* ----------------- */ if (code == 0) { /* Loop through objects */ /* -------------------- */ for (i = 0; i < nObjects; i++) { /* If object is Vgroup ... */ /* ----------------------- */ if (*(tags + i) == DFTAG_VG) { /* Get ID and name */ /* --------------- */ id = Vattach(fid, *(refs + i), access); Vgetname(id, name); /* If name equals desired object name get ID */ /* ----------------------------------------- */ if (strcmp(name, objectname) == 0) { outID = id; break; } /* If not desired object then detach */ /* --------------------------------- */ Vdetach(id); } } } else if (code == 1) { /* Loop through objects */ /* -------------------- */ for (i = 0; i < nObjects; i++) { /* If object is Vdata ... */ /* ---------------------- */ if (*(tags + i) == DFTAG_VH) { /* Get ID and name */ /* --------------- */ id = VSattach(fid, *(refs + i), access); VSgetname(id, name); /* If name equals desired object name get ID */ /* ----------------------------------------- */ if (EHstrwithin(objectname, name, ',') != -1) { outID = id; break; } /* If not desired object then detach */ /* --------------------------------- */ VSdetach(id); } } } free(tags); free(refs); } return (outID);}/*----------------------------------------------------------------------------|| BEGIN_PROLOG || || FUNCTION: EHrevflds || || DESCRIPTION: Reverses elements in a string list |
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -