void qspCallSaveGame(QSP_CHAR *file) { /* Здесь позволяем пользователю выбрать файл */ /* для сохранения состояния игры и сохраняем */ /* в нем текущее состояние */ QSPCallState state; AS3_Val args; char *strUTF8; if (qspCallBacks[QSP_CALL_SAVEGAMESTATUS].IsSet) { qspSaveCallState(&state, QSP_FALSE, QSP_TRUE); if (file) { strUTF8 = qspW2C(file); args = AS3_Array("StrType", strUTF8); free(strUTF8); } else args = AS3_Array("StrType", 0); AS3_Call(qspCallBacks[QSP_CALL_SAVEGAMESTATUS].FuncVal, qspCallBacks[QSP_CALL_SAVEGAMESTATUS].ThisVal, args); AS3_Release(args); flyield(); qspRestoreCallState(&state); } }
QSP_BOOL qspCallIsPlayingFile(QSP_CHAR *file) { /* Здесь проверяем, проигрывается ли файл */ QSPCallState state; QSP_BOOL isPlaying; AS3_Val args; char *strUTF8; if (qspCallBacks[QSP_CALL_ISPLAYINGFILE].IsSet) { qspSaveCallState(&state, QSP_TRUE, QSP_FALSE); if (file) { strUTF8 = qspW2C(file); args = AS3_Array("StrType", strUTF8); free(strUTF8); } else args = AS3_Array("StrType", 0); AS3_Call(qspCallBacks[QSP_CALL_ISPLAYINGFILE].FuncVal, qspCallBacks[QSP_CALL_ISPLAYINGFILE].ThisVal, args); AS3_Release(args); flyield(); isPlaying = (QSP_BOOL)AS3_IntValue(result); AS3_Release(result); qspRestoreCallState(&state); return isPlaying; } return QSP_FALSE; }
/* Получить значения указанного элемента массива */ 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; }
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 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; }
/* Версия */ AS3_Val QSPGetVersion(void *param, AS3_Val args) { AS3_Val res; char *verUTF8 = qspW2C(QSP_VER); res = AS3_String(verUTF8); free(verUTF8); return res; }
/* Данные объекта с указанным индексом */ AS3_Val QSPGetObjectData(void *param, AS3_Val args) { int ind; char *imageUTF8; char *descUTF8; AS3_Val res; AS3_ArrayValue(args, "IntType", &ind); if (ind >= 0 && ind < qspCurObjectsCount) { imageUTF8 = (qspCurObjects[ind].Image ? qspW2C(qspCurObjects[ind].Image) : 0); descUTF8 = (qspCurObjects[ind].Desc ? qspW2C(qspCurObjects[ind].Desc) : 0); res = AS3_Object("image:StrType, desc:StrType", imageUTF8, descUTF8); if (imageUTF8) free(imageUTF8); if (descUTF8) free(descUTF8); } else res = AS3_Object("image:StrType, desc:StrType", 0, 0); return res; }
void qspCallAddMenuItem(QSP_CHAR *name, QSP_CHAR *imgPath) { /* Здесь добавляем пункт меню */ QSPCallState state; AS3_Val args; char *nameUTF8; char *imgUTF8; if (qspCallBacks[QSP_CALL_ADDMENUITEM].IsSet) { qspSaveCallState(&state, QSP_TRUE, QSP_FALSE); nameUTF8 = (name ? qspW2C(name) : 0); imgUTF8 = (imgPath ? qspW2C(imgPath) : 0); args = AS3_Array("StrType, StrType", nameUTF8, imgUTF8); if (nameUTF8) free(nameUTF8); if (imgUTF8) free(imgUTF8); AS3_Call(qspCallBacks[QSP_CALL_ADDMENUITEM].FuncVal, qspCallBacks[QSP_CALL_ADDMENUITEM].ThisVal, args); AS3_Release(args); flyield(); qspRestoreCallState(&state); } }
/* Получить описание ошибки по ее номеру */ AS3_Val QSPGetErrorDesc(void *param, AS3_Val args) { int errorNum; QSP_CHAR *str; char *strUTF8; AS3_Val res; AS3_ArrayValue(args, "IntType", &errorNum); str = qspGetErrorDesc(errorNum); strUTF8 = qspW2C(str); res = AS3_String(strUTF8); free(strUTF8); return res; }
/* Получить имя переменной с указанным индексом */ AS3_Val QSPGetVarNameByIndex(void *param, AS3_Val args) { int index; QSP_CHAR *name; char *nameUTF8; AS3_Val res; AS3_ArrayValue(args, "IntType", &index); if (index < 0 || index >= QSP_VARSCOUNT || !qspVars[index].Name) return AS3_Null(); nameUTF8 = qspW2C(qspVars[index].Name); res = AS3_String(nameUTF8); free(nameUTF8); return res; }
/* Название текущей локации */ AS3_Val QSPGetCurLoc(void *param, AS3_Val args) { AS3_Val res; char *locUTF8; if (qspCurLoc >= 0) { locUTF8 = qspW2C(qspLocs[qspCurLoc].Name); res = AS3_String(locUTF8); free(locUTF8); } else res = AS3_String(0); return res; }
/* Получение данных текущего состояния */ AS3_Val QSPGetCurStateData(void *param, AS3_Val args) { char *locUTF8; AS3_Val res; if (qspRealCurLoc >= 0 && qspRealCurLoc < qspLocsCount) { locUTF8 = qspW2C(qspLocs[qspRealCurLoc].Name); res = AS3_Object("loc:StrType, actIndex:IntType, line:IntType", locUTF8, qspRealActIndex, qspRealLine); free(locUTF8); } else res = AS3_Object("loc:StrType, actIndex:IntType, line:IntType", 0, qspRealActIndex, qspRealLine); return res; }
/* Текст дополнительного окна описания локации */ AS3_Val QSPGetVarsDesc(void *param, AS3_Val args) { AS3_Val res; char *descUTF8; if (qspCurVars) { descUTF8 = qspW2C(qspCurVars); res = AS3_String(descUTF8); free(descUTF8); } else res = AS3_String(0); return res; }
/* Полный путь к загруженному файлу игры */ AS3_Val QSPGetQstFullPath(void *param, AS3_Val args) { AS3_Val res; char *pathUTF8; if (qspQstFullPath) { pathUTF8 = qspW2C(qspQstFullPath); res = AS3_String(pathUTF8); free(pathUTF8); } else res = AS3_String(0); return res; }
/* Получить информацию о последней ошибке */ AS3_Val QSPGetLastErrorData(void *param, AS3_Val args) { AS3_Val res; char *locUTF8; if (qspErrorLoc >= 0 && qspErrorLoc < qspLocsCount) { locUTF8 = qspW2C(qspLocs[qspErrorLoc].Name); res = AS3_Object("errorNum:IntType, errorLoc:StrType, errorActIndex:IntType, errorLine:IntType", qspErrorNum, locUTF8, qspErrorActIndex, qspErrorLine); free(locUTF8); } else { res = AS3_Object("errorNum:IntType, errorLoc:StrType, errorActIndex:IntType, errorLine:IntType", qspErrorNum, 0, qspErrorActIndex, qspErrorLine); } return res; }
void qspCallCloseFile(QSP_CHAR *file) { /* Здесь выполняем закрытие файла */ QSPCallState state; AS3_Val args; char *strUTF8; if (qspCallBacks[QSP_CALL_CLOSEFILE].IsSet) { qspSaveCallState(&state, QSP_TRUE, QSP_FALSE); if (file) { strUTF8 = qspW2C(file); args = AS3_Array("StrType", strUTF8); free(strUTF8); } else args = AS3_Array("StrType", 0); AS3_Call(qspCallBacks[QSP_CALL_CLOSEFILE].FuncVal, qspCallBacks[QSP_CALL_CLOSEFILE].ThisVal, args); AS3_Release(args); flyield(); qspRestoreCallState(&state); } }
void qspCallShowPicture(QSP_CHAR *file) { /* Здесь показываем изображение */ QSPCallState state; AS3_Val args; char *strUTF8; if (qspCallBacks[QSP_CALL_SHOWIMAGE].IsSet) { qspSaveCallState(&state, QSP_TRUE, QSP_FALSE); if (file) { strUTF8 = qspW2C(file); args = AS3_Array("StrType", strUTF8); free(strUTF8); } else args = AS3_Array("StrType", 0); AS3_Call(qspCallBacks[QSP_CALL_SHOWIMAGE].FuncVal, qspCallBacks[QSP_CALL_SHOWIMAGE].ThisVal, args); AS3_Release(args); flyield(); qspRestoreCallState(&state); } }
void qspCallPlayFile(QSP_CHAR *file, int volume) { /* Здесь начинаем воспроизведение файла с заданной громкостью */ QSPCallState state; AS3_Val args; char *strUTF8; if (qspCallBacks[QSP_CALL_PLAYFILE].IsSet) { qspSaveCallState(&state, QSP_TRUE, QSP_FALSE); if (file) { strUTF8 = qspW2C(file); args = AS3_Array("StrType, IntType", strUTF8, volume); free(strUTF8); } else args = AS3_Array("StrType, IntType", 0, volume); AS3_Call(qspCallBacks[QSP_CALL_PLAYFILE].FuncVal, qspCallBacks[QSP_CALL_PLAYFILE].ThisVal, args); AS3_Release(args); flyield(); qspRestoreCallState(&state); } }
void qspCallShowMessage(QSP_CHAR *text) { /* Здесь показываем сообщение */ QSPCallState state; AS3_Val args; char *strUTF8; if (qspCallBacks[QSP_CALL_SHOWMSGSTR].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_SHOWMSGSTR].FuncVal, qspCallBacks[QSP_CALL_SHOWMSGSTR].ThisVal, args); AS3_Release(args); flyield(); qspRestoreCallState(&state); } }
void qspCallDebug(QSP_CHAR *str) { /* Здесь передаем управление отладчику */ QSPCallState state; char *strUTF8; AS3_Val args; if (qspCallBacks[QSP_CALL_DEBUG].IsSet) { qspSaveCallState(&state, QSP_FALSE, QSP_FALSE); if (str) { strUTF8 = qspW2C(str); args = AS3_Array("StrType", strUTF8); free(strUTF8); } else args = AS3_Array("StrType", 0); AS3_Call(qspCallBacks[QSP_CALL_DEBUG].FuncVal, qspCallBacks[QSP_CALL_DEBUG].ThisVal, args); AS3_Release(args); flyield(); qspRestoreCallState(&state); } }
void qspCallSystem(QSP_CHAR *cmd) { /* Здесь выполняем системный вызов */ QSPCallState state; AS3_Val args; char *strUTF8; if (qspCallBacks[QSP_CALL_SYSTEM].IsSet) { qspSaveCallState(&state, QSP_FALSE, QSP_FALSE); if (cmd) { strUTF8 = qspW2C(cmd); args = AS3_Array("StrType", strUTF8); free(strUTF8); } else args = AS3_Array("StrType", 0); AS3_Call(qspCallBacks[QSP_CALL_SYSTEM].FuncVal, qspCallBacks[QSP_CALL_SYSTEM].ThisVal, args); AS3_Release(args); flyield(); qspRestoreCallState(&state); } }
void qspCallSetInputStrText(QSP_CHAR *text) { /* Здесь устанавливаем текст строки ввода */ QSPCallState state; AS3_Val args; char *textUTF8; if (qspCallBacks[QSP_CALL_SETINPUTSTRTEXT].IsSet) { qspSaveCallState(&state, QSP_TRUE, QSP_FALSE); if (text) { textUTF8 = qspW2C(text); args = AS3_Array("StrType", textUTF8); free(textUTF8); } else args = AS3_Array("StrType", 0); AS3_Call(qspCallBacks[QSP_CALL_SETINPUTSTRTEXT].FuncVal, qspCallBacks[QSP_CALL_SETINPUTSTRTEXT].ThisVal, args); AS3_Release(args); flyield(); qspRestoreCallState(&state); } }
void qspCallOpenGame(QSP_CHAR *file) { /* Здесь позволяем пользователю выбрать файл */ /* состояния игры для загрузки и загружаем его */ QSPCallState state; AS3_Val args; char *strUTF8; if (qspCallBacks[QSP_CALL_OPENGAMESTATUS].IsSet) { qspSaveCallState(&state, QSP_FALSE, QSP_TRUE); if (file) { strUTF8 = qspW2C(file); args = AS3_Array("StrType", strUTF8); free(strUTF8); } else args = AS3_Array("StrType", 0); AS3_Call(qspCallBacks[QSP_CALL_OPENGAMESTATUS].FuncVal, qspCallBacks[QSP_CALL_OPENGAMESTATUS].ThisVal, args); AS3_Release(args); flyield(); qspRestoreCallState(&state); } }
char *qspToSysString(QSP_CHAR *s) { return qspW2C(s); }