/* * Scan one tag line. * * "*pData" should be pointing to the first digit in the tag number. On * successful return, it will be pointing to the last character in the * tag line (i.e. the character before the start of the next line). * * Returns 0 on success, nonzero on failure. */ static int scanTagLine(char** pData, EventTag* tag, int lineNum) { char* cp = *pData; char* startp; char* endp; unsigned long val; startp = cp; while (isCharDigit(*++cp)) ; *cp = '\0'; val = strtoul(startp, &endp, 10); assert(endp == cp); if (endp != cp) fprintf(stderr, "ARRRRGH\n"); tag->tagIndex = val; while (*++cp != '\n' && isCharWhitespace(*cp)) ; if (*cp == '\n') { fprintf(stderr, "%s: missing tag string on line %d\n", OUT_TAG, lineNum); return -1; } tag->tagStr = cp; while (isCharValidTag(*++cp)) ; if (*cp == '\n') { /* null terminate and return */ *cp = '\0'; } else if (isCharWhitespace(*cp)) { /* CRLF or trailin spaces; zap this char, then scan for the '\n' */ *cp = '\0'; /* just ignore the rest of the line till \n TODO: read the tag description that follows the tag name */ while (*++cp != '\n') { } } else { fprintf(stderr, "%s: invalid tag chars on line %d\n", OUT_TAG, lineNum); return -1; } *pData = cp; //printf("+++ Line %d: got %d '%s'\n", lineNum, tag->tagIndex, tag->tagStr); return 0; }
/* * Scan one tag line. * * "*pData" should be pointing to the first digit in the tag number. On * successful return, it will be pointing to the last character in the * tag line (i.e. the character before the start of the next line). * * Returns 0 on success, nonzero on failure. */ static int scanTagLine(char** pData, EventTag* tag, int lineNum) { char* cp = *pData; char* startp; char* endp; unsigned long val; startp = cp; while (isCharDigit(*++cp)) ; *cp = '\0'; val = strtoul(startp, &endp, 10); assert(endp == cp); tag->tagIndex = val; while (*++cp != '\n' && isCharWhitespace(*cp)) ; if (*cp == '\n') { return -1; } tag->tagStr = cp; while (isCharValidTag(*++cp)) ; if (*cp == '\n') { /* null terminate and return */ *cp = '\0'; } else if (isCharWhitespace(*cp)) { /* CRLF or trailin spaces; zap this char, then scan for the '\n' */ *cp = '\0'; /* just ignore the rest of the line till \n TODO: read the tag description that follows the tag name */ while (*++cp != '\n') { } } else { return -1; } *pData = cp; return 0; }