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; }
/* Получить значения указанного элемента массива */ AS3_Val QSPGetVarValues(void *param, AS3_Val args) { char *name; int ind; QSP_CHAR *nameWC; char *strUTF8; QSPVar *var; AS3_Val res; AS3_ArrayValue(args, "StrType, IntType", &name, &ind); if (qspIsExitOnError && qspErrorNum) return AS3_Null(); qspResetError(); nameWC = qspC2W(name); var = qspVarReference(nameWC, QSP_FALSE); free(nameWC); if (qspErrorNum || ind < 0 || ind >= var->ValsCount) return AS3_Null(); if (var->Values[ind].Str) { strUTF8 = qspW2C(var->Values[ind].Str); res = AS3_Object("numVal:IntType, strVal:StrType", var->Values[ind].Num, strUTF8); free(strUTF8); } else res = AS3_Object("numVal:IntType, strVal:StrType", var->Values[ind].Num, 0); return res; }
/* Получить значение указанного выражения */ AS3_Val QSPGetExprValue(void *param, AS3_Val args) { char *expr; QSP_CHAR *exprWC; char *strUTF8; QSPVariant v; AS3_Val res; AS3_ArrayValue(args, "StrType", &expr); if (qspIsExitOnError && qspErrorNum) return AS3_Null(); qspResetError(); if (qspIsDisableCodeExec) return AS3_Null(); exprWC = qspC2W(expr); v = qspExprValue(exprWC); free(exprWC); if (qspErrorNum) return AS3_Null(); if (v.IsStr) { strUTF8 = qspW2C(QSP_STR(v)); free(QSP_STR(v)); res = AS3_Object("isString:IntType, numVal:IntType, strVal:StrType", QSP_TRUE, 0, strUTF8); free(strUTF8); } else res = AS3_Object("isString:IntType, numVal:IntType, strVal:StrType", QSP_FALSE, QSP_NUM(v), 0); return res; }
/* Текст строки ввода */ AS3_Val QSPSetInputStrText(void *param, AS3_Val args) { QSP_CHAR *valWC; char *val; AS3_ArrayValue(args, "StrType", &val); valWC = qspC2W(val); qspCurInputLen = qspAddText(&qspCurInput, valWC, 0, -1, QSP_FALSE); free(valWC); return AS3_True(); }
/* Загрузка новой игры из файла */ AS3_Val QSPLoadGameWorld(void *param, AS3_Val args) { char *fileName; QSP_CHAR *fileNameWC; AS3_ArrayValue(args, "StrType", &fileName); if (qspIsExitOnError && qspErrorNum) return AS3_False(); qspResetError(); if (qspIsDisableCodeExec) return AS3_False(); fileNameWC = qspC2W(fileName); qspOpenQuest(fileNameWC, QSP_FALSE); free(fileNameWC); if (qspErrorNum) return AS3_False(); return AS3_True(); }
/* Получить количество элементов массива */ AS3_Val QSPGetVarValuesCount(void *param, AS3_Val args) { char *name; QSP_CHAR *nameWC; QSPVar *var; AS3_ArrayValue(args, "StrType", &name); if (qspIsExitOnError && qspErrorNum) return AS3_Null(); qspResetError(); nameWC = qspC2W(name); var = qspVarReference(nameWC, QSP_FALSE); free(nameWC); if (qspErrorNum) return AS3_Null(); return AS3_Int(var->ValsCount); }
/* Загрузка состояния из файла */ AS3_Val QSPOpenSavedGame(void *param, AS3_Val args) { char *fileName; QSP_CHAR *fileNameWC; QSP_BOOL isRefresh; AS3_ArrayValue(args, "StrType, IntType", &fileName, &isRefresh); if (qspIsExitOnError && qspErrorNum) return AS3_False(); qspPrepareExecution(); if (qspIsDisableCodeExec) return AS3_False(); fileNameWC = qspC2W(fileName); qspOpenGameStatus(fileNameWC); free(fileNameWC); if (qspErrorNum) return AS3_False(); if (isRefresh) qspCallRefreshInt(QSP_FALSE); return AS3_True(); }
/* Выполнение кода указанной локации */ AS3_Val QSPExecLocationCode(void *param, AS3_Val args) { char *name; QSP_CHAR *nameWC; QSP_BOOL isRefresh; AS3_ArrayValue(args, "StrType, IntType", &name, &isRefresh); if (qspIsExitOnError && qspErrorNum) return AS3_False(); qspPrepareExecution(); if (qspIsDisableCodeExec) return AS3_False(); nameWC = qspC2W(name); qspExecLocByName(nameWC, QSP_FALSE); free(nameWC); if (qspErrorNum) return AS3_False(); if (isRefresh) qspCallRefreshInt(QSP_FALSE); return AS3_True(); }
/* Выполнение строки кода */ AS3_Val QSPExecString(void *param, AS3_Val args) { char *s; QSP_CHAR *strWC; QSP_BOOL isRefresh; AS3_ArrayValue(args, "StrType, IntType", &s, &isRefresh); if (qspIsExitOnError && qspErrorNum) return AS3_False(); qspPrepareExecution(); if (qspIsDisableCodeExec) return AS3_False(); strWC = qspC2W(s); qspExecStringAsCodeWithArgs(strWC, 0, 0); free(strWC); if (qspErrorNum) return AS3_False(); if (isRefresh) qspCallRefreshInt(QSP_FALSE); return AS3_True(); }
/* Загрузка новой игры из памяти */ AS3_Val QSPLoadGameWorldFromData(void *param, AS3_Val args) { char *ptr; AS3_Val data; int dataSize; char *fileName; QSP_CHAR *fileNameWC; AS3_ArrayValue(args, "AS3ValType, IntType, StrType", &data, &dataSize, &fileName); if (qspIsExitOnError && qspErrorNum) return AS3_False(); qspResetError(); if (qspIsDisableCodeExec) return AS3_False(); ptr = (char *)malloc(dataSize + 3); AS3_ByteArray_seek(data, 0, SEEK_SET); AS3_ByteArray_readBytes(ptr, data, dataSize); ptr[dataSize] = ptr[dataSize + 1] = ptr[dataSize + 2] = 0; fileNameWC = qspC2W(fileName); qspOpenQuestFromData(ptr, dataSize + 3, fileNameWC, QSP_FALSE); free(fileNameWC); free(ptr); if (qspErrorNum) return AS3_False(); return AS3_True(); }