mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-08 01:39:36 +00:00
1
This commit is contained in:
@@ -0,0 +1,150 @@
|
||||
//========= 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()
|
||||
{
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user