//========= 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 ////////////////////////////////////////////////////////////////////// // 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() { }