Пример #1
0
int qspStrToNum(QSP_CHAR *s, QSP_CHAR **endChar)
{
	int num = 0;
	QSP_BOOL isNeg = QSP_FALSE;
	s = qspSkipSpaces(s);
	if (*s == QSP_FMT('-'))
	{
		isNeg = QSP_TRUE;
		++s;
	}
	else if (*s == QSP_FMT('+'))
		++s;
	while (qspIsDigit(*s))
	{
		num = num * 10 + (*s - QSP_FMT('0'));
		++s;
	}
	if (endChar)
	{
		*endChar = qspSkipSpaces(s);
		if (**endChar) return 0;
	}
	if (isNeg) return -num;
	return num;
}
Пример #2
0
QSPVar *qspVarReference(const QSP_CHAR *name, QSP_BOOL isCreate) {
  int i;
  QSPVar *var;
  QSP_CHAR *uName;
  unsigned char bCode;
  if (*name == QSP_STRCHAR[0])
    ++name;
  if (!(*name) || qspIsDigit(*name) || qspStrPBrk(name, QSP_DELIMS)) {
    qspSetError(QSP_ERR_NOTCORRECTNAME);
    return nullptr;
  }
  qspUpperStr(uName = qspGetNewText(name, -1));
  bCode = 0;
  for (i = 0; uName[i]; ++i)
    bCode = qspRand8[bCode ^ (unsigned char)uName[i]];
  var = qspVars + QSP_VARSSEEK * bCode;
  for (i = 0; i < QSP_VARSSEEK; ++i) {
    if (!var->Name) {
      if (isCreate)
        var->Name = uName;
      else
        free(uName);
      return var;
    }
    if (!qspStrsComp(var->Name, uName)) {
      free(uName);
      return var;
    }
    ++var;
  }
  free(uName);
  qspSetError(QSP_ERR_TOOMANYVARS);
  return nullptr;
}
Пример #3
0
QSP_BOOL qspIsNumber(QSP_CHAR *s)
{
	s = qspSkipSpaces(s);
	if (*s == QSP_FMT('-'))
		++s;
	else if (*s == QSP_FMT('+'))
		++s;
	if (qspIsDigit(*s))
	{
		do
		{
			++s;
		} while (qspIsDigit(*s));
	}
	else
		return QSP_FALSE;
	s = qspSkipSpaces(s);
	return !(*s);
}
Пример #4
0
int qspStrToNum(QSP_CHAR *s, QSP_BOOL *isValid)
{
	int num;
	QSP_BOOL isNeg = QSP_FALSE;
	s = qspSkipSpaces(s);
	if (*s == QSP_FMT('-'))
	{
		isNeg = QSP_TRUE;
		++s;
	}
	else if (*s == QSP_FMT('+'))
		++s;
	else if (!(*s)) /* special case, i.e. empty string must be convertible to 0 */
	{
		if (isValid) *isValid = QSP_TRUE;
		return 0;
	}
	if (qspIsDigit(*s))
	{
		num = 0;
		do
		{
			num = num * 10 + (*s - QSP_FMT('0'));
			++s;
		} while (qspIsDigit(*s));
	}
	else
	{
		if (isValid) *isValid = QSP_FALSE;
		return 0;
	}
	s = qspSkipSpaces(s);
	if (*s)
	{
		if (isValid) *isValid = QSP_FALSE;
		return 0;
	}
	if (isValid) *isValid = QSP_TRUE;
	if (isNeg) return -num;
	return num;
}