You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
150 lines
3.0 KiB
150 lines
3.0 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
/* |
|
** The copyright to the contents herein is the property of Valve, L.L.C. |
|
** The contents may be used and/or copied only with the written permission of |
|
** Valve, L.L.C., or in accordance with the terms and conditions stipulated in |
|
** the agreement/contract under which the contents have been supplied. |
|
** |
|
******************************************************************************* |
|
** |
|
** Contents: |
|
** |
|
** TokenLine.cpp: implementation of the TokenLine class. |
|
** |
|
******************************************************************************/ |
|
|
|
#include "TokenLine.h" |
|
#include <string.h> |
|
|
|
|
|
////////////////////////////////////////////////////////////////////// |
|
// Construction/Destruction |
|
////////////////////////////////////////////////////////////////////// |
|
|
|
|
|
TokenLine::~TokenLine() |
|
{ |
|
|
|
} |
|
|
|
|
|
bool TokenLine::SetLine(const char * newLine) |
|
{ |
|
m_tokenNumber = 0; |
|
|
|
if (!newLine || ( strlen(newLine) >= (MAX_LINE_CHARS-1) ) ) |
|
{ |
|
memset( m_fullLine, 0, MAX_LINE_CHARS ); |
|
memset( m_tokenBuffer, 0, MAX_LINE_CHARS ); |
|
return false; |
|
} |
|
|
|
strncpy( m_fullLine, newLine, MAX_LINE_CHARS-1 ); |
|
m_fullLine[ MAX_LINE_CHARS-1 ] = '\0'; |
|
|
|
strncpy( m_tokenBuffer, newLine, MAX_LINE_CHARS-1 ); |
|
m_tokenBuffer[ MAX_LINE_CHARS-1 ] = '\0'; |
|
|
|
// parse tokens |
|
char * charPointer = m_tokenBuffer; |
|
|
|
while (*charPointer && (m_tokenNumber < MAX_LINE_TOKENS)) |
|
{ |
|
while (*charPointer && ((*charPointer <= 32) || (*charPointer > 126))) |
|
charPointer++; |
|
|
|
if (*charPointer) |
|
{ |
|
m_token[m_tokenNumber] = charPointer; |
|
|
|
// special treatment for quotes |
|
if (*charPointer == '\"') |
|
{ |
|
charPointer++; |
|
m_token[m_tokenNumber] = charPointer; |
|
while (*charPointer && (*charPointer != '\"') ) |
|
charPointer++; |
|
|
|
} |
|
else |
|
{ |
|
m_token[m_tokenNumber] = charPointer; |
|
while (*charPointer && ((*charPointer > 32) && (*charPointer <= 126))) |
|
charPointer++; |
|
} |
|
|
|
m_tokenNumber++; |
|
|
|
if (*charPointer) |
|
{ |
|
*charPointer=0; |
|
charPointer++; |
|
} |
|
} |
|
} |
|
|
|
return (m_tokenNumber != MAX_LINE_TOKENS); |
|
} |
|
|
|
char * TokenLine::GetLine() |
|
{ |
|
return m_fullLine; |
|
} |
|
|
|
char * TokenLine::GetToken(int i) |
|
{ |
|
if (i >= m_tokenNumber) |
|
return NULL; |
|
return m_token[i]; |
|
|
|
} |
|
|
|
// if the given parm is not present return NULL |
|
// otherwise return the address of the following token, or an empty string |
|
char* TokenLine::CheckToken(char * parm) |
|
{ |
|
for (int i = 0 ; i < m_tokenNumber; i ++) |
|
{ |
|
if (!m_token[i]) |
|
continue; |
|
if ( !strcmp (parm,m_token[i]) ) |
|
{ |
|
char * ret = m_token[i+1]; |
|
// if this token doesn't exist, since index i was the last |
|
// return an empty string |
|
if ( (i+1) == m_tokenNumber ) ret = ""; |
|
return ret; |
|
} |
|
|
|
} |
|
|
|
return NULL; |
|
} |
|
|
|
int TokenLine::CountToken() |
|
{ |
|
int c = 0; |
|
for (int i = 0 ; i < m_tokenNumber; i ++) |
|
{ |
|
if (m_token[i]) |
|
c++; |
|
} |
|
return c; |
|
} |
|
|
|
char* TokenLine::GetRestOfLine(int i) |
|
{ |
|
if (i >= m_tokenNumber) |
|
return NULL; |
|
return m_fullLine + (m_token[i] - m_tokenBuffer); |
|
} |
|
|
|
TokenLine::TokenLine(char * string) |
|
{ |
|
SetLine(string); |
|
} |
|
|
|
TokenLine::TokenLine() |
|
{ |
|
|
|
}
|
|
|