Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
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.

151 lines
3.0 KiB

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