mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2025-09-20 12:36:05 +08:00
Added most recent version of unmodified HL2 SDK for Orange Box engine
This commit is contained in:
137
public/filesystem_helpers.cpp
Normal file
137
public/filesystem_helpers.cpp
Normal file
@ -0,0 +1,137 @@
|
||||
//========= Copyright <20> 1996-2005, Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//=====================================================================================//
|
||||
|
||||
#include "filesystem.h"
|
||||
#include "filesystem_helpers.h"
|
||||
#include "characterset.h"
|
||||
|
||||
// memdbgon must be the last include file in a .cpp file!!!
|
||||
#include "tier0/memdbgon.h"
|
||||
|
||||
// wordbreak parsing set
|
||||
static characterset_t g_BreakSet, g_BreakSetIncludingColons;
|
||||
|
||||
static void InitializeCharacterSets()
|
||||
{
|
||||
static bool s_CharacterSetInitialized = false;
|
||||
if (!s_CharacterSetInitialized)
|
||||
{
|
||||
CharacterSetBuild( &g_BreakSet, "{}()'" );
|
||||
CharacterSetBuild( &g_BreakSetIncludingColons, "{}()':" );
|
||||
s_CharacterSetInitialized = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const char* ParseFile( const char* pFileBytes, char* pToken, bool* pWasQuoted, characterset_t *pCharSet )
|
||||
{
|
||||
if (pWasQuoted)
|
||||
*pWasQuoted = false;
|
||||
|
||||
if (!pFileBytes)
|
||||
return 0;
|
||||
|
||||
InitializeCharacterSets();
|
||||
|
||||
// YWB: Ignore colons as token separators in COM_Parse
|
||||
static bool com_ignorecolons = false;
|
||||
characterset_t& breaks = pCharSet ? *pCharSet : (com_ignorecolons ? g_BreakSet : g_BreakSetIncludingColons);
|
||||
|
||||
int c;
|
||||
int len = 0;
|
||||
pToken[0] = 0;
|
||||
|
||||
// skip whitespace
|
||||
skipwhite:
|
||||
|
||||
while ( (c = *pFileBytes) <= ' ')
|
||||
{
|
||||
if (c == 0)
|
||||
return 0; // end of file;
|
||||
pFileBytes++;
|
||||
}
|
||||
|
||||
// skip // comments
|
||||
if (c=='/' && pFileBytes[1] == '/')
|
||||
{
|
||||
while (*pFileBytes && *pFileBytes != '\n')
|
||||
pFileBytes++;
|
||||
goto skipwhite;
|
||||
}
|
||||
|
||||
// skip c-style comments
|
||||
if (c=='/' && pFileBytes[1] == '*' )
|
||||
{
|
||||
// Skip "/*"
|
||||
pFileBytes += 2;
|
||||
|
||||
while ( *pFileBytes )
|
||||
{
|
||||
if ( *pFileBytes == '*' &&
|
||||
pFileBytes[1] == '/' )
|
||||
{
|
||||
pFileBytes += 2;
|
||||
break;
|
||||
}
|
||||
|
||||
pFileBytes++;
|
||||
}
|
||||
|
||||
goto skipwhite;
|
||||
}
|
||||
|
||||
// handle quoted strings specially
|
||||
if (c == '\"')
|
||||
{
|
||||
if (pWasQuoted)
|
||||
*pWasQuoted = true;
|
||||
|
||||
pFileBytes++;
|
||||
while (1)
|
||||
{
|
||||
c = *pFileBytes++;
|
||||
if (c=='\"' || !c)
|
||||
{
|
||||
pToken[len] = 0;
|
||||
return pFileBytes;
|
||||
}
|
||||
pToken[len] = c;
|
||||
len++;
|
||||
}
|
||||
}
|
||||
|
||||
// parse single characters
|
||||
if ( IN_CHARACTERSET( breaks, c ) )
|
||||
{
|
||||
pToken[len] = c;
|
||||
len++;
|
||||
pToken[len] = 0;
|
||||
return pFileBytes+1;
|
||||
}
|
||||
|
||||
// parse a regular word
|
||||
do
|
||||
{
|
||||
pToken[len] = c;
|
||||
pFileBytes++;
|
||||
len++;
|
||||
c = *pFileBytes;
|
||||
if ( IN_CHARACTERSET( breaks, c ) )
|
||||
break;
|
||||
} while (c>32);
|
||||
|
||||
pToken[len] = 0;
|
||||
return pFileBytes;
|
||||
}
|
||||
|
||||
|
||||
char* ParseFile( char* pFileBytes, char* pToken, bool* pWasQuoted )
|
||||
{
|
||||
return (char*)ParseFile( (const char*)pFileBytes, pToken, pWasQuoted );
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user