Beispiel #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;
}
Beispiel #2
0
QSP_CHAR *qspNumToStr(QSP_CHAR *buf, int val)
{
	QSP_CHAR temp, *str = buf, *first = str;
	if (val < 0)
	{
		*str++ = QSP_FMT('-');
		val = -val;
		++first;
	}
	do
	{
		*str++ = (QSP_CHAR)(val % 10 + QSP_FMT('0'));
		val /= 10;
	} while (val > 0);
	*str-- = 0;
	while (first < str)
	{
		temp = *str;
		*str = *first;
		*first = temp;
		--str;
		++first;
	}
	return buf;
}
/* Дата и время компиляции */
AS3_Val QSPGetCompiledDateTime(void *param, AS3_Val args)
{
	AS3_Val res;
	char *infoUTF8 = qspW2C(QSP_FMT(__DATE__) QSP_FMT(", ") QSP_FMT(__TIME__));
	res = AS3_String(infoUTF8);
	free(infoUTF8);
	return res;
}
Beispiel #4
0
	void QSPCallBacks::RefreshInt(QSP_BOOL isRedraw)
	{
		int i, numVal;
		bool isScroll, isCanSave;
		QSP_CHAR *strVal, *imgPath;

		UpdateGamePath();

		const QSP_CHAR *mainDesc = QSPGetMainDesc();
		const QSP_CHAR *varsDesc = QSPGetVarsDesc();

		m_isHtml = QSPGetVarValues(QSP_FMT("USEHTML"), 0, &numVal, &strVal) && numVal;

		m_window->GetVars()->SetIsHtml(m_isHtml);
		if (QSPIsVarsDescChanged())
			m_window->GetVars()->SetText(QString::fromWCharArray(varsDesc)/*, isScroll */);

		m_window->GetDesc()->SetIsHtml(m_isHtml);
		if (QSPIsMainDescChanged())
			m_window->GetDesc()->SetText(QString::fromWCharArray(mainDesc));

		if (QSPIsActionsChanged())
		{
			m_window->GetActions()->ClearItems();
			int actionsCount = QSPGetActionsCount();
			for (i = 0; i < actionsCount; i++)
			{
				QSPGetActionData(i, &imgPath, &strVal);
				m_window->GetActions()->AddItem(QString::fromWCharArray(imgPath), QString::fromWCharArray(strVal));
			}
		}
		m_window->GetActions()->setCurrentRow(QSPGetSelActionIndex());
		if (QSPIsObjectsChanged())
		{
			int objectsCount = QSPGetObjectsCount();
			m_window->GetObjects()->ClearItems();
			for (i = 0; i < objectsCount; ++i)
			{
				QSPGetObjectData(i, &imgPath, &strVal);
				m_window->GetObjects()->AddItem(QString::fromWCharArray(imgPath), QString::fromWCharArray(strVal));
			}
		}
		m_window->GetObjects()->setCurrentRow(QSPGetSelObjectIndex());
		if (QSPGetVarValues(QSP_FMT("BACKIMAGE"), 0, &numVal, &strVal) && strVal && *strVal)
			m_window->GetDesc()->LoadBackImage(m_gamePath + QString::fromWCharArray(strVal));
		else
			m_window->GetDesc()->LoadBackImage("");

		m_window->ApplyParams();
	}
Beispiel #5
0
QSP_CHAR *qspCallInputBox(QSP_CHAR *text)
{
	/* Здесь вводим текст */
	QSPCallState state;
	QSP_CHAR *buffer;
	AS3_Val args;
	char *strUTF8;
	char *resText;
	int maxLen = 511;
	if (qspCallBacks[QSP_CALL_INPUTBOX].IsSet)
	{
		qspSaveCallState(&state, QSP_TRUE, QSP_FALSE);
		if (text)
		{
			strUTF8 = qspW2C(text);
			args = AS3_Array("StrType", strUTF8);
			free(strUTF8);
		}
		else
			args = AS3_Array("StrType", 0);
		AS3_Call(qspCallBacks[QSP_CALL_INPUTBOX].FuncVal, qspCallBacks[QSP_CALL_INPUTBOX].ThisVal, args);
		AS3_Release(args);
		flyield();
		resText = AS3_StringValue(result);
		AS3_Release(result);
		buffer = qspC2W(resText);
		free(resText);
		qspRestoreCallState(&state);
	}
	else
		buffer = qspGetNewText(QSP_FMT(""), 0);
	return buffer;
}
/* Установить индекс выбранного объекта */
void QSPSetSelObjectIndex(QSP_BOOL *res, int ind, QSP_BOOL isRefresh)
{
	if (ind >= 0 && ind < qspCurObjectsCount && ind != qspCurSelObject)
	{
		if (qspIsExitOnError && qspErrorNum)
		{
			*res = QSP_FALSE;
			return;
		}
		qspPrepareExecution();
		if (qspIsDisableCodeExec)
		{
			*res = QSP_FALSE;
			return;
		}
		qspCurSelObject = ind;
		qspExecLocByVarNameWithArgs(QSP_FMT("ONOBJSEL"), 0, 0);
		if (qspErrorNum)
		{
			*res = QSP_FALSE;
			return;
		}
		if (isRefresh) qspCallRefreshInt(QSP_FALSE);
	}
	*res = QSP_TRUE;
}
Beispiel #7
0
QSP_CHAR *qspFormatText(QSP_CHAR *txt, QSP_BOOL canReturnSelf)
{
	QSPVariant val;
	QSP_CHAR *newTxt, *lPos, *rPos;
	int oldRefreshCount, len, txtLen, oldTxtLen, bufSize;
	if (qspGetVarNumValue(QSP_FMT("DISABLESUBEX")))
	{
		if (canReturnSelf) return txt;
		return qspGetNewText(txt, -1);
	}
	lPos = qspStrStr(txt, QSP_LSUBEX);
	if (!lPos)
	{
		if (canReturnSelf) return txt;
		return qspGetNewText(txt, -1);
	}
	bufSize = 256;
	newTxt = (QSP_CHAR *)malloc(bufSize * sizeof(QSP_CHAR));
	txtLen = oldTxtLen = 0;
	oldRefreshCount = qspRefreshCount;
	do
	{
		len = (int)(lPos - txt);
		if ((txtLen += len) >= bufSize)
		{
			bufSize = txtLen + 128;
			newTxt = (QSP_CHAR *)realloc(newTxt, bufSize * sizeof(QSP_CHAR));
		}
		qspStrNCopy(newTxt + oldTxtLen, txt, len);
		oldTxtLen = txtLen;
		txt = lPos + QSP_LEN(QSP_LSUBEX);
		rPos = qspStrPos(txt, QSP_RSUBEX, QSP_FALSE);
		if (!rPos)
		{
			qspSetError(QSP_ERR_BRACKNOTFOUND);
			free(newTxt);
			return 0;
		}
		*rPos = 0;
		val = qspExprValue(txt);
		*rPos = QSP_RSUBEX[0];
		if (qspRefreshCount != oldRefreshCount || qspErrorNum)
		{
			free(newTxt);
			return 0;
		}
		qspConvertVariantTo(&val, QSP_TRUE);
		if ((txtLen += qspStrLen(QSP_STR(val))) >= bufSize)
		{
			bufSize = txtLen + 128;
			newTxt = (QSP_CHAR *)realloc(newTxt, bufSize * sizeof(QSP_CHAR));
		}
		qspStrCopy(newTxt + oldTxtLen, QSP_STR(val));
		free(QSP_STR(val));
		oldTxtLen = txtLen;
		txt = rPos + QSP_LEN(QSP_RSUBEX);
		lPos = qspStrStr(txt, QSP_LSUBEX);
	} while (lPos);
	return qspGetAddText(newTxt, txt, txtLen, -1);
}
Beispiel #8
0
QSP_BOOL qspStatementAddObject(QSPVariant *args, int count, QSP_CHAR **jumpTo, int extArg)
{
	QSPObj *obj;
	int i, objInd;
	QSP_CHAR *imgPath;
	if (count == 3)
	{
		objInd = QSP_NUM(args[2]) - 1;
		if (objInd < 0 || objInd > qspCurObjectsCount) return QSP_FALSE;
	}
	else
		objInd = qspCurObjectsCount;
	if (qspCurObjectsCount == QSP_MAXOBJECTS)
	{
		qspSetError(QSP_ERR_CANTADDOBJECT);
		return QSP_FALSE;
	}
	if (qspCurSelObject >= objInd) qspCurSelObject = -1;
	if (count >= 2 && qspIsAnyString(QSP_STR(args[1])))
		imgPath = qspGetAbsFromRelPath(QSP_STR(args[1]));
	else
		imgPath = 0;
	for (i = qspCurObjectsCount; i > objInd; --i)
		qspCurObjects[i] = qspCurObjects[i - 1];
	++qspCurObjectsCount;
	obj = qspCurObjects + objInd;
	obj->Image = imgPath;
	obj->Desc = qspGetNewText(QSP_STR(args[0]), -1);
	qspIsObjectsChanged = QSP_TRUE;
	qspExecLocByVarNameWithArgs(QSP_FMT("ONOBJADD"), args, (count < 3 ? count : 2));
	return QSP_FALSE;
}
QSPVariant qspGetEmptyVariant(QSP_BOOL isStringType)
{
	QSPVariant ret;
	if (ret.IsStr = isStringType)
		QSP_STR(ret) = qspGetNewText(QSP_FMT(""), 0);
	else
		QSP_NUM(ret) = 0;
	return ret;
}
Beispiel #10
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);
}
Beispiel #11
0
/* Выполнение кода локации-обработчика строки ввода */
QSP_BOOL QSPExecUserInput(QSP_BOOL isRefresh)
{
	if (qspIsExitOnError && qspErrorNum) return QSP_FALSE;
	qspPrepareExecution();
	if (qspIsDisableCodeExec) return QSP_FALSE;
	qspExecLocByVarNameWithArgs(QSP_FMT("USERCOM"), 0, 0);
	if (qspErrorNum) return QSP_FALSE;
	if (isRefresh) qspCallRefreshInt(QSP_FALSE);
	return QSP_TRUE;
}
Beispiel #12
0
/* Выполнение кода локации-счетчика */
QSP_BOOL QSPExecCounter(QSP_BOOL isRefresh)
{
	if (!qspIsInCallBack)
	{
		qspPrepareExecution();
		qspExecLocByVarNameWithArgs(QSP_FMT("COUNTER"), 0, 0);
		if (qspErrorNum) return QSP_FALSE;
		if (isRefresh) qspCallRefreshInt(QSP_FALSE);
	}
	return QSP_TRUE;
}
Beispiel #13
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;
}
/* Выполнение кода локации-обработчика строки ввода */
AS3_Val QSPExecUserInput(void *param, AS3_Val args)
{
	QSP_BOOL isRefresh;
	AS3_ArrayValue(args, "IntType", &isRefresh);
	if (qspIsExitOnError && qspErrorNum) return AS3_False();
	qspPrepareExecution();
	if (qspIsDisableCodeExec) return AS3_False();
	qspExecLocByVarNameWithArgs(QSP_FMT("USERCOM"), 0, 0);
	if (qspErrorNum) return AS3_False();
	if (isRefresh) qspCallRefreshInt(QSP_FALSE);
	return AS3_True();
}
/* Выполнение кода локации-счетчика */
AS3_Val QSPExecCounter(void *param, AS3_Val args)
{
	QSP_BOOL isRefresh;
	AS3_ArrayValue(args, "IntType", &isRefresh);
	if (!qspIsInCallBack)
	{
		qspPrepareExecution();
		qspExecLocByVarNameWithArgs(QSP_FMT("COUNTER"), 0, 0);
		if (qspErrorNum) return AS3_False();
		if (isRefresh) qspCallRefreshInt(QSP_FALSE);
	}
	return AS3_True();
}
Beispiel #16
0
const QSP_CHAR *qspGetVarStrValue(QSP_CHAR *name) {
  QSP_CHAR *text;
  QSPVar *var;
  if (var = qspVarReference(name, QSP_FALSE)) {
    if (var->ValsCount) {
      text = var->Values->Str;
      if (text)
        return text;
    }
  } else
    qspResetError();
  return QSP_FMT("");
}
Beispiel #17
0
/* Установить индекс выбранного действия */
QSP_BOOL QSPSetSelActionIndex(int ind, QSP_BOOL isRefresh)
{
	if (ind >= 0 && ind < qspCurActionsCount && ind != qspCurSelAction)
	{
		if (qspIsExitOnError && qspErrorNum) return QSP_FALSE;
		qspPrepareExecution();
		if (qspIsDisableCodeExec) return QSP_FALSE;
		qspCurSelAction = ind;
		qspExecLocByVarNameWithArgs(QSP_FMT("ONACTSEL"), 0, 0);
		if (qspErrorNum) return QSP_FALSE;
		if (isRefresh) qspCallRefreshInt(QSP_FALSE);
	}
	return QSP_TRUE;
}
Beispiel #18
0
void qspApplyResult(QSPVar *varRes, QSPVariant *res) {
  QSP_CHAR *text;
  if (varRes->ValsCount) {
    if (text = varRes->Values[0].Str) {
      res->IsStr = QSP_TRUE;
      QSP_PSTR(res) = qspGetNewText(text, -1);
    } else {
      res->IsStr = QSP_FALSE;
      QSP_PNUM(res) = varRes->Values[0].Num;
    }
  } else {
    res->IsStr = QSP_TRUE;
    QSP_PSTR(res) = qspGetNewText(QSP_FMT(""), 0);
  }
}
Beispiel #19
0
QSPVariant qspGetVarValueByReference(QSPVar *var, int ind,
                                     QSP_BOOL isStringType) {
  QSPVariant ret;
  QSP_CHAR *text;
  if (ind >= 0 && ind < var->ValsCount) {
    if (ret.IsStr = isStringType) {
      text = var->Values[ind].Str;
      QSP_STR(ret) =
          (text ? qspGetNewText(text, -1) : qspGetNewText(QSP_FMT(""), 0));
    } else
      QSP_NUM(ret) = var->Values[ind].Num;
    return ret;
  }
  return qspGetEmptyVariant(isStringType);
}
/* Установить индекс выбранного объекта */
AS3_Val QSPSetSelObjectIndex(void *param, AS3_Val args)
{
	int ind;
	QSP_BOOL isRefresh;
	AS3_ArrayValue(args, "IntType, IntType", &ind, &isRefresh);
	if (ind >= 0 && ind < qspCurObjectsCount && ind != qspCurSelObject)
	{
		if (qspIsExitOnError && qspErrorNum) return AS3_False();
		qspPrepareExecution();
		if (qspIsDisableCodeExec) return AS3_False();
		qspCurSelObject = ind;
		qspExecLocByVarNameWithArgs(QSP_FMT("ONOBJSEL"), 0, 0);
		if (qspErrorNum) return AS3_False();
		if (isRefresh) qspCallRefreshInt(QSP_FALSE);
	}
	return AS3_True();
}
Beispiel #21
0
QSP_CHAR *qspGetAllActionsAsCode()
{
	int len = 0, count, i;
	QSP_CHAR *res, *temp;
	res = qspGetNewText(QSP_FMT(""), 0);
	for (i = 0; i < qspCurActionsCount; ++i)
	{
		len = qspAddText(&res, QSP_FMT("ACT '"), len, 5, QSP_FALSE);
		temp = qspReplaceText(qspCurActions[i].Desc, QSP_FMT("'"), QSP_FMT("''"));
		len = qspAddText(&res, temp, len, -1, QSP_FALSE);
		free(temp);
		if (qspCurActions[i].Image)
		{
			len = qspAddText(&res, QSP_FMT("','"), len, 3, QSP_FALSE);
			temp = qspReplaceText(qspCurActions[i].Image + qspQstPathLen, QSP_FMT("'"), QSP_FMT("''"));
			len = qspAddText(&res, temp, len, -1, QSP_FALSE);
			free(temp);
		}
		len = qspAddText(&res, QSP_FMT("':"), len, 2, QSP_FALSE);
		count = qspCurActions[i].OnPressLinesCount;
		if (count == 1 && qspIsAnyString(qspCurActions[i].OnPressLines->Str))
			len = qspAddText(&res, qspCurActions[i].OnPressLines->Str, len, -1, QSP_FALSE);
		else
		{
			if (count >= 2)
			{
				len = qspAddText(&res, QSP_STRSDELIM, len, QSP_LEN(QSP_STRSDELIM), QSP_FALSE);
				temp = qspJoinPrepLines(qspCurActions[i].OnPressLines, count, QSP_STRSDELIM);
				len = qspAddText(&res, temp, len, -1, QSP_FALSE);
				free(temp);
			}
			len = qspAddText(&res, QSP_STRSDELIM QSP_FMT("END"), len, QSP_LEN(QSP_STRSDELIM) + 3, QSP_FALSE);
		}
		len = qspAddText(&res, QSP_STRSDELIM, len, QSP_LEN(QSP_STRSDELIM), QSP_FALSE);
	}
	return res;
}
Beispiel #22
0
static void qspRemoveObject(int index)
{
	QSPVariant name;
	if (index < 0 || index >= qspCurObjectsCount) return;
	if (qspCurSelObject >= index) qspCurSelObject = -1;
	name.IsStr = QSP_TRUE;
	QSP_STR(name) = qspCurObjects[index].Desc;
	if (qspCurObjects[index].Image) free(qspCurObjects[index].Image);
	--qspCurObjectsCount;
	while (index < qspCurObjectsCount)
	{
		qspCurObjects[index] = qspCurObjects[index + 1];
		++index;
	}
	qspIsObjectsChanged = QSP_TRUE;
	qspExecLocByVarNameWithArgs(QSP_FMT("ONOBJDEL"), &name, 1);
	free(QSP_STR(name));
}
Beispiel #23
0
int qspArrayPos(QSP_CHAR *varName, QSPVariant *val, int ind, QSP_BOOL isRegExp)
{
	int num, count;
	QSPVar *var;
	QSP_CHAR *str;
	regex_t *regExp;
	QSP_BOOL isString;
	if (!(var = qspVarReferenceWithType(varName, QSP_FALSE, &isString))) return -1;
	if (qspConvertVariantTo(val, isRegExp || isString))
	{
		qspSetError(QSP_ERR_TYPEMISMATCH);
		return -1;
	}
	if (isRegExp)
	{
		regExp = qspRegExpGetCompiled(QSP_PSTR(val));
		if (!regExp) return -1;
	}
	count = var->ValsCount;
	if (ind < 0)
		ind = 0;
	else if (ind > count)
		ind = count;
	while (ind <= count)
	{
		if (val->IsStr)
		{
			if (!(ind < count && (str = var->Values[ind].Str))) str = QSP_FMT("");
			if (isRegExp)
			{
				if (qspRegExpStrMatch(regExp, str)) return ind;
			}
			else if (!qspStrsComp(str, QSP_PSTR(val)))
				return ind;
		}
		else
		{
			num = (ind < count ? var->Values[ind].Num : 0);
			if (num == QSP_PNUM(val)) return ind;
		}
		++ind;
	}
	return -1;
}
QSP_CHAR *qspCallInputBox(QSP_CHAR *text)
{
	/* «десь вводим текст */
	QSPCallState state;
	QSP_CHAR *buffer;
	int maxLen = 511;
	if (qspCallBacks[QSP_CALL_INPUTBOX])
	{
		qspSaveCallState(&state, QSP_TRUE, QSP_FALSE);
		buffer = (QSP_CHAR *)malloc((maxLen + 1) * sizeof(QSP_CHAR));
		*buffer = 0;
		qspCallBacks[QSP_CALL_INPUTBOX](text, buffer, maxLen);
		buffer[maxLen] = 0;
		qspRestoreCallState(&state);
	}
	else
		buffer = qspGetNewText(QSP_FMT(""), 0);
	return buffer;
}
QSP_CHAR *qspCallPlayerInfo(QSP_CHAR *text)
{
	/* «десь получаем строку по заданному параметру */
	QSPCallState state;
	QSP_CHAR *buffer;
	int maxLen = 511;
	if (qspCallBacks[QSP_CALL_PLAYERINFO])
	{
		qspSaveCallState(&state, QSP_TRUE, QSP_FALSE);
		buffer = (QSP_CHAR *)malloc((maxLen + 1) * sizeof(QSP_CHAR));
		*buffer = 0;
		qspCallBacks[QSP_CALL_PLAYERINFO](text, buffer, maxLen);
		buffer[maxLen] = 0;
		qspRestoreCallState(&state);
	}
	else
		buffer = qspGetNewText(QSP_FMT(""), 0);
	return buffer; 
}
Beispiel #26
0
void qspClearObjectsWithNotify()
{
	QSPVariant v;
	QSP_CHAR **objs;
	int i, oldRefreshCount, oldCount = qspCurObjectsCount;
	if (oldCount)
	{
		objs = (QSP_CHAR **)malloc(oldCount * sizeof(QSP_CHAR *));
		for (i = 0; i < oldCount; ++i)
			qspAddText(objs + i, qspCurObjects[i].Desc, 0, -1, QSP_TRUE);
		qspClearObjects(QSP_FALSE);
		v.IsStr = QSP_TRUE;
		oldRefreshCount = qspRefreshCount;
		for (i = 0; i < oldCount; ++i)
		{
			QSP_STR(v) = objs[i];
			qspExecLocByVarNameWithArgs(QSP_FMT("ONOBJDEL"), &v, 1);
			if (qspRefreshCount != oldRefreshCount || qspErrorNum) break;
		}
		qspFreeStrs(objs, oldCount);
	}
}
Beispiel #27
0
QSPString qspGetAllActionsAsCode()
{
	int count, i;
	QSPString res, temp;
	res = qspNewEmptyString();
	for (i = 0; i < qspCurActionsCount; ++i)
	{
		qspAddText(&res, QSP_STATIC_STR(QSP_FMT("ACT '")), QSP_FALSE);
		temp = qspReplaceText(qspCurActions[i].Desc, QSP_STATIC_STR(QSP_FMT("'")), QSP_STATIC_STR(QSP_FMT("''")));
		qspAddText(&res, temp, QSP_FALSE);
		qspFreeString(temp);
		if (qspCurActions[i].Image.Str)
		{
			qspAddText(&res, QSP_STATIC_STR(QSP_FMT("','")), QSP_FALSE);
			temp = qspReplaceText(
				qspStringFromPair(qspCurActions[i].Image.Str + qspStrLen(qspQstPath), qspCurActions[i].Image.End),
				QSP_STATIC_STR(QSP_FMT("'")), QSP_STATIC_STR(QSP_FMT("''")));
			qspAddText(&res, temp, QSP_FALSE);
			qspFreeString(temp);
		}
		qspAddText(&res, QSP_STATIC_STR(QSP_FMT("':")), QSP_FALSE);
		count = qspCurActions[i].OnPressLinesCount;
		if (count == 1 && qspIsAnyString(qspCurActions[i].OnPressLines->Str))
			qspAddText(&res, qspCurActions[i].OnPressLines->Str, QSP_FALSE);
		else
		{
			if (count >= 2)
			{
				qspAddText(&res, QSP_STATIC_STR(QSP_STRSDELIM), QSP_FALSE);
				temp = qspJoinPrepLines(qspCurActions[i].OnPressLines, count, QSP_STATIC_STR(QSP_STRSDELIM));
				qspAddText(&res, temp, QSP_FALSE);
				qspFreeString(temp);
			}
			qspAddText(&res, QSP_STATIC_STR(QSP_STRSDELIM QSP_FMT("END")), QSP_FALSE);
		}
		qspAddText(&res, QSP_STATIC_STR(QSP_STRSDELIM), QSP_FALSE);
	}
	return res;
}
Beispiel #28
0
QSPString qspGetErrorDesc(int errorNum)
{
	QSPString str;
	switch (errorNum)
	{
	case QSP_ERR_DIVBYZERO: str = QSP_STATIC_STR(QSP_FMT("Division by zero!")); break;
	case QSP_ERR_TYPEMISMATCH: str = QSP_STATIC_STR(QSP_FMT("Type mismatch!")); break;
	case QSP_ERR_STACKOVERFLOW: str = QSP_STATIC_STR(QSP_FMT("Stack overflow!")); break;
	case QSP_ERR_TOOMANYITEMS: str = QSP_STATIC_STR(QSP_FMT("Too many items in expression!")); break;
	case QSP_ERR_FILENOTFOUND: str = QSP_STATIC_STR(QSP_FMT("File not found!")); break;
	case QSP_ERR_CANTLOADFILE: str = QSP_STATIC_STR(QSP_FMT("Can't load file!")); break;
	case QSP_ERR_GAMENOTLOADED: str = QSP_STATIC_STR(QSP_FMT("Game not loaded!")); break;
	case QSP_ERR_COLONNOTFOUND: str = QSP_STATIC_STR(QSP_FMT("Sign [:] not found!")); break;
	case QSP_ERR_CANTINCFILE: str = QSP_STATIC_STR(QSP_FMT("Can't add file!")); break;
	case QSP_ERR_CANTADDACTION: str = QSP_STATIC_STR(QSP_FMT("Can't add action!")); break;
	case QSP_ERR_EQNOTFOUND: str = QSP_STATIC_STR(QSP_FMT("Sign [=] not found!")); break;
	case QSP_ERR_LOCNOTFOUND: str = QSP_STATIC_STR(QSP_FMT("Location not found!")); break;
	case QSP_ERR_ENDNOTFOUND: str = QSP_STATIC_STR(QSP_FMT("[end] not found!")); break;
	case QSP_ERR_LABELNOTFOUND: str = QSP_STATIC_STR(QSP_FMT("Label not found!")); break;
	case QSP_ERR_NOTCORRECTNAME: str = QSP_STATIC_STR(QSP_FMT("Incorrect variable's name!")); break;
	case QSP_ERR_QUOTNOTFOUND: str = QSP_STATIC_STR(QSP_FMT("Quote not found!")); break;
	case QSP_ERR_BRACKNOTFOUND: str = QSP_STATIC_STR(QSP_FMT("Bracket not found!")); break;
	case QSP_ERR_BRACKSNOTFOUND: str = QSP_STATIC_STR(QSP_FMT("Brackets not found!")); break;
	case QSP_ERR_SYNTAX: str = QSP_STATIC_STR(QSP_FMT("Syntax error!")); break;
	case QSP_ERR_UNKNOWNACTION: str = QSP_STATIC_STR(QSP_FMT("Unknown action!")); break;
	case QSP_ERR_ARGSCOUNT: str = QSP_STATIC_STR(QSP_FMT("Incorrect arguments' count!")); break;
	case QSP_ERR_CANTADDOBJECT: str = QSP_STATIC_STR(QSP_FMT("Can't add object!")); break;
	case QSP_ERR_CANTADDMENUITEM: str = QSP_STATIC_STR(QSP_FMT("Can't add menu's item!")); break;
	case QSP_ERR_TOOMANYVARS: str = QSP_STATIC_STR(QSP_FMT("Too many variables!")); break;
	case QSP_ERR_INCORRECTREGEXP: str = QSP_STATIC_STR(QSP_FMT("Regular expression's error!")); break;
	case QSP_ERR_CODENOTFOUND: str = QSP_STATIC_STR(QSP_FMT("Code not found!")); break;
	case QSP_ERR_LOOPWHILENOTFOUND: str = QSP_STATIC_STR(QSP_FMT("Loop condition not found!")); break;
	default: str = QSP_STATIC_STR(QSP_FMT("Unknown error!")); break;
	}
	return str;
}
Beispiel #29
0
QSP_BOOL qspIsDigit(QSP_CHAR ch)
{
	return (ch >= QSP_FMT('0') && ch <= QSP_FMT('9'));
}
/* Дата и время компиляции */
void QSPGetCompiledDateTime(const QSP_CHAR* *res)
{
	*res = QSP_FMT(__DATE__) QSP_FMT(", ") QSP_FMT(__TIME__);
}