mirror of
https://github.com/YGGverse/hlsdk-portable.git
synced 2025-03-13 05:51:19 +00:00
104 lines
1.4 KiB
C++
104 lines
1.4 KiB
C++
#include "bot_common.h"
|
|
|
|
static char mp_com_token[64];
|
|
|
|
char *MP_COM_GetToken()
|
|
{
|
|
return mp_com_token;
|
|
}
|
|
|
|
char *MP_COM_Parse(char *data)
|
|
{
|
|
int c;
|
|
int len;
|
|
|
|
len = 0;
|
|
mp_com_token[0] = '\0';
|
|
|
|
if (!data)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
skipwhite:
|
|
// skip whitespace
|
|
while (*data <= ' ')
|
|
{
|
|
if (!data[0])
|
|
return NULL;
|
|
|
|
++data;
|
|
}
|
|
|
|
c = *data;
|
|
|
|
// skip // comments till the next line
|
|
if (c == '/' && data[1] == '/')
|
|
{
|
|
while (*data && *data != '\n')
|
|
++data;
|
|
|
|
goto skipwhite; // start over new line
|
|
}
|
|
|
|
// handle quoted strings specially: copy till the end or another quote
|
|
if (c == '\"')
|
|
{
|
|
++data; // skip starting quote
|
|
|
|
while (true)
|
|
{
|
|
// get char and advance
|
|
c = *data++;
|
|
|
|
if (c == '\"' || !c)
|
|
{
|
|
mp_com_token[ len ] = '\0';
|
|
return data;
|
|
}
|
|
|
|
mp_com_token[ len++ ] = c;
|
|
}
|
|
}
|
|
|
|
// parse single characters
|
|
if (c == '{' || c == '}'|| c == ')'|| c == '(' || c == '\'' || c == ',')
|
|
{
|
|
mp_com_token[ len++ ] = c;
|
|
mp_com_token[ len ] = '\0';
|
|
|
|
return data + 1;
|
|
}
|
|
|
|
// parse a regular word
|
|
do
|
|
{
|
|
mp_com_token[ len++ ] = c;
|
|
++data;
|
|
c = *data;
|
|
|
|
if (c == '{' || c == '}'|| c == ')'|| c == '(' || c == '\'' || c == ',')
|
|
break;
|
|
}
|
|
while (c > 32);
|
|
|
|
mp_com_token[ len ] = '\0';
|
|
return data;
|
|
}
|
|
|
|
int MP_COM_TokenWaiting(char *buffer)
|
|
{
|
|
char *p;
|
|
|
|
p = buffer;
|
|
while (*p && *p != '\n')
|
|
{
|
|
if (!isspace(*p) || isalnum(*p))
|
|
return 1;
|
|
|
|
++p;
|
|
}
|
|
|
|
return 0;
|
|
}
|