mirror of
https://github.com/celisej567/source-engine.git
synced 2026-01-03 05:49:41 +03:00
1
This commit is contained in:
292
utils/xbox/vxconsole/sys_scriptlib.cpp
Normal file
292
utils/xbox/vxconsole/sys_scriptlib.cpp
Normal file
@@ -0,0 +1,292 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// SYS_SCRIPTLIB.CPP
|
||||
//
|
||||
//
|
||||
//=====================================================================================//
|
||||
#include "vxconsole.h"
|
||||
|
||||
char g_sys_token[MAXTOKEN];
|
||||
char* g_sys_scriptbuff;
|
||||
char* g_sys_scriptptr;
|
||||
char* g_sys_scriptendptr;
|
||||
int g_sys_scriptsize;
|
||||
int g_sys_scriptline;
|
||||
bool g_sys_endofscript;
|
||||
bool g_sys_tokenready;
|
||||
int g_sys_oldscriptline;
|
||||
char* g_sys_oldscriptptr;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Sys_FreeScriptFile
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
void Sys_FreeScriptFile(void)
|
||||
{
|
||||
if (g_sys_scriptbuff)
|
||||
{
|
||||
Sys_Free(g_sys_scriptbuff);
|
||||
g_sys_scriptbuff = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Sys_LoadScriptFile
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
void Sys_LoadScriptFile(const char* filename)
|
||||
{
|
||||
g_sys_scriptsize = Sys_LoadFile(filename,(void **)&g_sys_scriptbuff);
|
||||
|
||||
Sys_ResetParser();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Sys_SetScriptData
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
void Sys_SetScriptData(const char* data, int length)
|
||||
{
|
||||
g_sys_scriptbuff = (char *)data;
|
||||
g_sys_scriptsize = length;
|
||||
|
||||
Sys_ResetParser();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Sys_UnGetToken
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
void Sys_UnGetToken(void)
|
||||
{
|
||||
g_sys_tokenready = true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Sys_GetToken
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
char* Sys_GetToken(bool crossline)
|
||||
{
|
||||
char* tokenptr;
|
||||
|
||||
if (g_sys_tokenready)
|
||||
{
|
||||
g_sys_tokenready = false;
|
||||
return (g_sys_token);
|
||||
}
|
||||
|
||||
g_sys_token[0] = '\0';
|
||||
|
||||
if (g_sys_scriptptr >= g_sys_scriptendptr)
|
||||
{
|
||||
g_sys_endofscript = true;
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
skipspace:
|
||||
while (*g_sys_scriptptr <= ' ')
|
||||
{
|
||||
if (g_sys_scriptptr >= g_sys_scriptendptr)
|
||||
{
|
||||
g_sys_endofscript = true;
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
if (*g_sys_scriptptr++ == '\n')
|
||||
{
|
||||
if (!crossline)
|
||||
{
|
||||
// unexpected newline at g_sys_scriptline
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
g_sys_scriptline++;
|
||||
}
|
||||
}
|
||||
|
||||
if (g_sys_scriptptr >= g_sys_scriptendptr)
|
||||
{
|
||||
g_sys_endofscript = true;
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
// skip commented line
|
||||
if ((g_sys_scriptptr[0] == ';') || (g_sys_scriptptr[0] == '/' && g_sys_scriptptr[1] == '/'))
|
||||
{
|
||||
if (!crossline)
|
||||
{
|
||||
// unexpected newline at g_sys_scriptline
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
while (*g_sys_scriptptr++ != '\n')
|
||||
{
|
||||
if (g_sys_scriptptr >= g_sys_scriptendptr)
|
||||
{
|
||||
g_sys_endofscript = true;
|
||||
return (NULL);
|
||||
}
|
||||
}
|
||||
|
||||
g_sys_scriptline++;
|
||||
goto skipspace;
|
||||
}
|
||||
|
||||
tokenptr = g_sys_token;
|
||||
if (g_sys_scriptptr[0] == '\"' && g_sys_scriptptr[1])
|
||||
{
|
||||
// copy quoted token
|
||||
do
|
||||
{
|
||||
*tokenptr++ = *g_sys_scriptptr++;
|
||||
if (g_sys_scriptptr == g_sys_scriptendptr)
|
||||
break;
|
||||
|
||||
if (tokenptr == &g_sys_token[MAXTOKEN])
|
||||
{
|
||||
// token too large
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
while (*g_sys_scriptptr >= ' ' && *g_sys_scriptptr != '\"');
|
||||
|
||||
if (g_sys_scriptptr[0] == '\"')
|
||||
*tokenptr++ = *g_sys_scriptptr++;
|
||||
}
|
||||
else
|
||||
{
|
||||
// copy token
|
||||
while (*g_sys_scriptptr > ' ' && *g_sys_scriptptr != ';' && *g_sys_scriptptr != '\"')
|
||||
{
|
||||
*tokenptr++ = *g_sys_scriptptr++;
|
||||
if (g_sys_scriptptr == g_sys_scriptendptr)
|
||||
break;
|
||||
|
||||
if (tokenptr == &g_sys_token[MAXTOKEN])
|
||||
{
|
||||
// token too large
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*tokenptr = '\0';
|
||||
|
||||
return (g_sys_token);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Sys_SkipRestOfLine
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
void Sys_SkipRestOfLine(void)
|
||||
{
|
||||
while (*g_sys_scriptptr++ != '\n')
|
||||
{
|
||||
if (g_sys_scriptptr >= g_sys_scriptendptr)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
g_sys_scriptline++;
|
||||
|
||||
// flush any queued token
|
||||
g_sys_tokenready = false;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Sys_TokenAvailable
|
||||
//
|
||||
// Returns (TRUE) if token available on line.
|
||||
//-----------------------------------------------------------------------------
|
||||
bool Sys_TokenAvailable (void)
|
||||
{
|
||||
char* ptr;
|
||||
|
||||
ptr = g_sys_scriptptr;
|
||||
while (*ptr <= ' ')
|
||||
{
|
||||
if (ptr >= g_sys_scriptendptr)
|
||||
{
|
||||
g_sys_endofscript = true;
|
||||
return (false);
|
||||
}
|
||||
|
||||
if (*ptr++ == '\n')
|
||||
return (false);
|
||||
}
|
||||
|
||||
return (true);
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Sys_EndOfScript
|
||||
//
|
||||
// Returns (TRUE) at end of script
|
||||
//-----------------------------------------------------------------------------
|
||||
bool Sys_EndOfScript(void)
|
||||
{
|
||||
if (g_sys_scriptptr >= g_sys_scriptendptr)
|
||||
{
|
||||
g_sys_endofscript = true;
|
||||
return (true);
|
||||
}
|
||||
|
||||
return (false);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Sys_ResetParser
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
void Sys_ResetParser(void)
|
||||
{
|
||||
g_sys_scriptptr = g_sys_scriptbuff;
|
||||
g_sys_scriptendptr = g_sys_scriptptr + g_sys_scriptsize;
|
||||
g_sys_scriptline = 1;
|
||||
g_sys_endofscript = false;
|
||||
g_sys_tokenready = false;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Sys_SaveParser
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
void Sys_SaveParser(void)
|
||||
{
|
||||
g_sys_oldscriptline = g_sys_scriptline;
|
||||
g_sys_oldscriptptr = g_sys_scriptptr;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Sys_RestoreParser
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
void Sys_RestoreParser(void)
|
||||
{
|
||||
g_sys_scriptline = g_sys_oldscriptline;
|
||||
g_sys_scriptptr = g_sys_oldscriptptr;
|
||||
g_sys_tokenready = false;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Sys_StripQuotesFromToken
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
void Sys_StripQuotesFromToken( char *pToken )
|
||||
{
|
||||
int len;
|
||||
|
||||
len = strlen( pToken );
|
||||
if ( len >= 2 && pToken[0] == '\"' )
|
||||
{
|
||||
memcpy( pToken, pToken+1, len-1 );
|
||||
pToken[len-2] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user