📄 ehapi.c
字号:
| || || Return Value Type Units Description || ============ ====== ========= ===================================== || status intn return status (0) SUCCEED, (-1) FAIL || || INPUTS: || dimlist char Original dimension list || || OUTPUTS: || revdimlist char Reversed dimension list || || NOTES: || || || Date Programmer Description || ====== ============ ================================================= || Jun 96 Joel Gales Original Programmer || || END_PROLOG |-----------------------------------------------------------------------------*/intnEHrevflds(char *dimlist, char *revdimlist){ intn status = 0; /* routine return status variable */ 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 *tempPtr; /* Temporary string pointer */ char *tempdimlist;/* Temporary dimension list */ /* Copy dimlist into temp dimlist */ /* ------------------------------ */ tempdimlist = (char *) malloc(strlen(dimlist) + 1); if(tempdimlist == NULL) { HEpush(DFE_NOSPACE,"EHrevflds", __FILE__, __LINE__); return(-1); } strcpy(tempdimlist, dimlist); /* Count number of entries in search string list */ /* --------------------------------------------- */ nentries = EHparsestr(tempdimlist, ',', NULL, NULL); /* Allocate string pointer and length arrays */ /* ----------------------------------------- */ ptr = (char **) calloc(nentries, sizeof(char *)); if(ptr == NULL) { HEpush(DFE_NOSPACE,"EHrevflds", __FILE__, __LINE__); free(tempdimlist); return(-1); } slen = (int32 *) calloc(nentries, sizeof(int32)); if(slen == NULL) { HEpush(DFE_NOSPACE,"EHrevflds", __FILE__, __LINE__); free(ptr); free(tempdimlist); return(-1); } /* Parse search string */ /* ------------------- */ nentries = EHparsestr(tempdimlist, ',', ptr, slen); /* Reverse entries in string pointer array */ /* --------------------------------------- */ for (indx = 0; indx < nentries / 2; indx++) { tempPtr = ptr[indx]; ptr[indx] = ptr[nentries - 1 - indx]; ptr[nentries - 1 - indx] = tempPtr; } /* Replace comma delimitors by nulls */ /* --------------------------------- */ for (indx = 0; indx < nentries - 1; indx++) { *(ptr[indx] - 1) = 0; } /* Build new string list */ /* --------------------- */ status = EHloadliststr(ptr, nentries, revdimlist, ','); free(slen); free(ptr); free(tempdimlist); return (status);}/*----------------------------------------------------------------------------|| BEGIN_PROLOG || || FUNCTION: EHcntOBJECT || || DESCRIPTION: Determines number of OBJECTs in metadata GROUP || || || Return Value Type Units Description || ============ ====== ========= ===================================== || count int32 Number of OBJECTs in GROUP || || INPUTS: || metabur char Begin & end metadata pointer array || || OUTPUTS: || None || || NOTES: || || || Date Programmer Description || ====== ============ ================================================= || Sep 96 Joel Gales Original Programmer || || END_PROLOG |-----------------------------------------------------------------------------*/int32EHcntOBJECT(char *metabuf[]){ int32 count = 0; /* Counter */ char *metaptr; /* Beginning of metadata section */ char *endptr; /* End of metadata section */ char *tempptr; /* Pointer within metadata section */ /* Get Pointers to beginning and ending of metadata section */ /* -------------------------------------------------------- */ metaptr = metabuf[0]; endptr = metabuf[1]; /* Find number of "END_OBJECT" strings within section */ /* -------------------------------------------------- */ tempptr = metaptr; while (tempptr < endptr && tempptr != NULL) { tempptr = strstr(tempptr + 1, "END_OBJECT"); count++; } count--; return (count);}/*----------------------------------------------------------------------------|| BEGIN_PROLOG || || FUNCTION: EHcntGROUP || || DESCRIPTION: Determines number of GROUPs in metadata GROUP || || || Return Value Type Units Description || ============ ====== ========= ===================================== || count int32 Number of GROUPs in GROUP || || INPUTS: || metabur char Begin & end metadata pointer array || || OUTPUTS: || None || || NOTES: || || || Date Programmer Description || ====== ============ ================================================= || Sep 96 Joel Gales Original Programmer || || END_PROLOG |-----------------------------------------------------------------------------*/int32EHcntGROUP(char *metabuf[]){ int32 count = 0; /* Counter */ char *metaptr; /* Beginning of metadata section */ char *endptr; /* End of metadata section */ char *tempptr; /* Pointer within metadata section */ /* Get Pointers to beginning and ending of metadata section */ /* -------------------------------------------------------- */ metaptr = metabuf[0]; endptr = metabuf[1]; /* Find number of "END_GROUP" strings within section */ /* ------------------------------------------------- */ tempptr = metaptr; while (tempptr < endptr && tempptr != NULL) { tempptr = strstr(tempptr + 1, "END_GROUP"); count++; } count--; return (count);}/*----------------------------------------------------------------------------|| BEGIN_PROLOG || || FUNCTION: EHmetalist || || DESCRIPTION: Converts string list to metadata list || || || Return Value Type Units Description || ============ ====== ========= ===================================== || status intn return status (0) SUCCEED, (-1) FAIL || || INPUTS: || instring char Input string list || || OUTPUTS: || outstring char Output metadata string || || NOTES: || || || Date Programmer Description || ====== ============ ================================================= || Jun 96 Joel Gales Original Programmer || || END_PROLOG |-----------------------------------------------------------------------------*/intnEHmetalist(char *instring, char *outstring){ intn i; /* Loop index */ intn status = 0; /* routine return status variable */ int32 nentries; /* Number of entries in search string */ int32 listlen = 1;/* String list length */ int32 *slen; /* Pointer to string length array */ char **ptr; /* Pointer to string pointer array */ /* Count number of entries in search string list */ /* --------------------------------------------- */ nentries = EHparsestr(instring, ',', NULL, NULL); /* Allocate string pointer and length arrays */ /* ----------------------------------------- */ ptr = (char **) calloc(nentries, sizeof(char *)); if(ptr == NULL) { HEpush(DFE_NOSPACE,"EHmetalist", __FILE__, __LINE__); return(-1); } slen = (int32 *) calloc(nentries, sizeof(int32)); if(slen == NULL) { HEpush(DFE_NOSPACE,"EHmetalist", __FILE__, __LINE__); free(ptr); return(-1); } /* Parse input string */ /* ------------------ */ nentries = EHparsestr(instring, ',', ptr, slen); /* Start output string with leading "(" */ /* ------------------------------------ */ strcpy(outstring, "("); /* Loop through all entries */ /* ------------------------ */ for (i = 0; i < nentries; i++) { /* Add double quote (") to output string */ /* ------------------------------------- */ strcat(outstring, "\""); listlen++; /* Add input string entry to output string */ /* --------------------------------------- */ memcpy(outstring + listlen, ptr[i], slen[i]); listlen += slen[i]; outstring[listlen] = 0; /* Add closing double quote (") to output string */ /* --------------------------------------------- */ strcat(outstring, "\""); listlen++; outstring[listlen] = 0; /* Add comma delimitor to output string */ /* ------------------------------------ */ if (i != (nentries - 1)) { strcat(outstring, ","); listlen++; } /*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -