commit x64 compilation from lulu cause the other branch dont seems to compile properly at home

This commit is contained in:
2026-07-17 16:08:20 +02:00
parent c0f3eeb00d
commit 0efa4ee6f7
625 changed files with 117283 additions and 4426 deletions

View File

@ -0,0 +1,189 @@
/* -----------------------------------------------------------------------------
GSFramework
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
----------------------------------------------------------------------------- */
#include "ascii/parser.h"
#include "ntypes.h"
using namespace GS;
//------------------------------------------------------------------------------
bool AsciiParser::IsUpperCase(const char c)
{ return asbool((c >= 'A') && (c <= 'Z')); }
const char *AsciiParser::RunToEOS(const char *s, const char *e)
{
while (s < e)
{
if (s[0] == '\\')
s += 2; // Jump modifiers.
else if (s[0] == '"')
break;
else s++;
}
return s;
}
bool AsciiParser::IsConstantFloat(const char *s, const char *e)
{
const char *eoc = SkipEntry(s, e);
if (s[0] == '-')
{
s++;
eoc = SkipEntry(s, e);
}
while (s < eoc)
{
if ((s[0] == '.') || (s[0] == 'f'))
return true;
s++;
}
return false;
}
const char *AsciiParser::Find(const char *s, const char *e, char f)
{
for (;;)
{
s = SkipSpace(s, e);
if (s == e)
return NULL;
if (s[0] == '(')
s = RunToEOG(s, e, '(', ')');
else
{
if (s[0] == f)
break;
s++;
}
}
return s;
}
const char *AsciiParser::SkipEntry(const char *s, const char *e, bool skip_minus)
{
{
while (
(s[0] != 0x20) &&
!((s[0] == 0xd) && (s[1] == 0xa)) &&
(s[0] != 0x9) &&
(s[0] != 0xa) &&
(s[0] != 0xd) &&
(s[0] != '/') &&
(s[0] != '*') &&
(s[0] != '+') &&
(s[0] != '=') &&
(s[0] != ';') &&
(s[0] != ':') &&
(s[0] != ',') &&
(s[0] != '<') &&
(s[0] != '>') &&
(s[0] != '(') &&
(s[0] != ')') &&
(s[0] != '\"')
)
{
if (!skip_minus && (s[0] == '-'))
break;
if (s == e)
break;
s++;
}
}
return s;
}
const char *AsciiParser::RunToEOL(const char *s, const char *e)
{
while (
((s[0] != 0xd) || (s[1] != 0xa)) &&
(s[0] != 0xa) &&
(s[0] != 0xd) &&
(s < e)
)
s++;
return s;
}
const char *AsciiParser::SkipEOL(const char *s, const char *e)
{
if ((s[0] == 0xd) && (s[1] == 0xa))
s += 2;
else if ((s[0] == 0xa) || (s[0] == 0xd))
s++;
return s > e ? e : s;
}
const char *AsciiParser::RunToEOG(const char *s, const char *e, char op, char cl)
{
uint pc = 0;
s++;
while (s < e)
{
if (s[0] == op)
pc++;
if (s[0] == cl)
{
if (!pc)
break;
pc--;
}
s++;
}
if (s == e)
return NULL;
return s;
}
const char *AsciiParser::RunToEOC(const char *s, const char *e)
{
s += 2;
while (((s[0] != '*') || (s[1] != '/')) && (s < e))
s += ((s[0] == 0xd) && (s[1] == 0xa)) ? 2 : 1;
return s >= e ? e : s + 2;
}
const char *AsciiParser::RunToEOE(const char *s, const char *e)
{
while (s < e)
{
s = SkipSpace(s, e);
if (s[0] == '(')
s = RunToEOG(s, e, '(', ')');
else
if (s[0] == '\"')
{
s++;
while ((s < e) && (s[0] != '\"'))
s++;
if (s < e)
s++;
}
else
{
if ((s[0] == ',') || (s[0] == ';') )
break;
s++;
}
}
return s;
}
const char *AsciiParser::SkipSpace(const char *s, const char *e)
{
while (s < e)
{
if (s[0] == 0x20) s++;
else if ((s[0] == 0xd) && (s[1] == 0xa)) s += 2;
else if ((s[0] == '/') && (s[1] == '/')) s = RunToEOL(s, e);
else if ((s[0] == '/') && (s[1] == '*')) s = RunToEOC(s, e);
else if (s[0] == 0x9) s++;
else if (s[0] == 0xa) s++;
else if (s[0] == 0xd) s++;
// else if (s[0] == -17 && s[1] == -69 && s[2] == -65) s+=3; // remove the BOM from utf 8 file
else break;
}
return s;
}
const char *AsciiParser::NextEntry(const char *s, const char *e, bool skip_minus)
{
s = SkipEntry(s, e, skip_minus);
s = SkipSpace(s, e);
return s;
}
//------------------------------------------------------------------------------