30#define VER_BUFFER_SIZE 1048576
31#define VER_OFFSET_SIZE 65536
32#define VER_WORD_SIZE 65536
34#define VER_MINIMUM(a,b) (((a) < (b))? (a) : (b))
81 pFile = fopen( pFileName,
"rb" );
84 printf(
"Ver_StreamAlloc(): Cannot open input file \"%s\".\n", pFileName );
90 p->pFileName = pFileName;
94 p->nFileSize = ftell( pFile );
99 p->pBufferCur =
p->pBuffer;
103 RetValue = fread(
p->pBuffer, nCharsToRead, 1,
p->pFile );
104 p->nFileRead = nCharsToRead;
106 p->pBufferEnd =
p->pBuffer + nCharsToRead;
126 int nCharsUsed, nCharsToRead;
129 assert(
p->pBufferCur >
p->pBufferStop );
130 assert(
p->pBufferCur <
p->pBufferEnd );
132 nCharsUsed =
p->pBufferEnd -
p->pBufferCur;
134 memmove(
p->pBuffer,
p->pBufferCur, (
size_t)nCharsUsed );
135 p->pBufferCur =
p->pBuffer;
137 nCharsToRead =
VER_MINIMUM(
p->nBufferSize - nCharsUsed,
p->nFileSize -
p->nFileRead );
139 RetValue = fread(
p->pBuffer + nCharsUsed, nCharsToRead, 1,
p->pFile );
140 p->nFileRead += nCharsToRead;
142 p->pBufferEnd =
p->pBuffer + nCharsUsed + nCharsToRead;
210 return p->nFileRead - (
p->pBufferEnd -
p->pBufferCur);
226 return p->nLineCounter;
261 return *
p->pBufferCur;
279 if (
p->pBufferCur >
p->pBufferStop )
280 Ver_StreamReload(
p );
282 if (
p->pBufferCur ==
p->pBufferEnd )
288 if ( *
p->pBufferCur ==
'\n' )
290 return *
p->pBufferCur++;
306 char * pChar, * pTemp;
308 assert( pCharsToSkip != NULL );
310 if (
p->pBufferCur >
p->pBufferStop )
311 Ver_StreamReload(
p );
313 for ( pChar =
p->pBufferCur; pChar < p->pBufferEnd; pChar++ )
316 for ( pTemp = pCharsToSkip; *pTemp; pTemp++ )
317 if ( *pChar == *pTemp )
321 p->pBufferCur = pChar;
325 if ( *pChar ==
'\n' )
330 if (
p->pBufferStop ==
p->pBufferEnd )
335 printf(
"Ver_StreamSkipSymbol() failed to parse the file \"%s\".\n",
p->pFileName );
351 char * pChar, * pTemp;
353 assert( pCharsToStop != NULL );
355 if (
p->pBufferCur >
p->pBufferStop )
356 Ver_StreamReload(
p );
358 for ( pChar =
p->pBufferCur; pChar < p->pBufferEnd; pChar++ )
361 for ( pTemp = pCharsToStop; *pTemp; pTemp++ )
362 if ( *pChar == *pTemp )
367 if ( *pChar ==
'\n' )
372 p->pBufferCur = pChar;
377 if (
p->pBufferStop ==
p->pBufferEnd )
382 printf(
"Ver_StreamSkipToSymbol() failed to parse the file \"%s\".\n",
p->pFileName );
399 char * pChar, * pTemp;
402 assert( pCharsToStop != NULL );
404 if (
p->pBufferCur >
p->pBufferStop )
405 Ver_StreamReload(
p );
408 for ( pChar =
p->pBufferCur; pChar < p->pBufferEnd; pChar++ )
411 for ( pTemp = pCharsToStop; *pTemp; pTemp++ )
412 if ( *pChar == *pTemp )
416 p->pChars[
p->nChars++] = *pChar;
419 printf(
"Ver_StreamGetWord(): The buffer size is exceeded.\n" );
423 if ( *pChar ==
'\n' )
428 p->pBufferCur = pChar;
429 p->pChars[
p->nChars] = 0;
434 if (
p->pBufferStop ==
p->pBufferEnd )
437 p->pChars[
p->nChars] = 0;
440 printf(
"Ver_StreamGetWord() failed to parse the file \"%s\".\n",
p->pFileName );
457 if ( !
strncmp(
p->pBufferCur+1,
"z_g_", 4) || !
strncmp(
p->pBufferCur+1,
"co_g", 3) )
458 while (
p->pBufferCur[0] !=
'(' )
#define ABC_ALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
char pChars[VER_WORD_SIZE+5]
void Ver_StreamMove(Ver_Stream_t *p)
int Ver_StreamGetCurPosition(Ver_Stream_t *p)
char * Ver_StreamGetFileName(Ver_Stream_t *p)
int Ver_StreamIsOkey(Ver_Stream_t *p)
#define VER_MINIMUM(a, b)
char * Ver_StreamGetWord(Ver_Stream_t *p, char *pCharsToStop)
char Ver_StreamPopChar(Ver_Stream_t *p)
void Ver_StreamSkipChars(Ver_Stream_t *p, char *pCharsToSkip)
Ver_Stream_t * Ver_StreamAlloc(char *pFileName)
FUNCTION DEFINITIONS ///.
void Ver_StreamSkipToChars(Ver_Stream_t *p, char *pCharsToStop)
char Ver_StreamScanChar(Ver_Stream_t *p)
#define VER_BUFFER_SIZE
DECLARATIONS ///.
void Ver_StreamFree(Ver_Stream_t *p)
int Ver_StreamGetLineNumber(Ver_Stream_t *p)
int Ver_StreamGetFileSize(Ver_Stream_t *p)
struct Ver_Stream_t_ Ver_Stream_t