/* Сохранение состояния в память */ void QSPSaveGameAsData(QSP_BOOL *res, void *buf, int bufSize, int *realSize, QSP_BOOL isRefresh) { int len, size; QSP_CHAR *data; if (qspIsExitOnError && qspErrorNum) { *res = QSP_FALSE; return; } qspPrepareExecution(); if (qspIsDisableCodeExec) { *res = QSP_FALSE; return; } if (!(len = qspSaveGameStatusToString(&data))) { *realSize = 0; *res = QSP_FALSE; return; } size = len * sizeof(QSP_CHAR); *realSize = size; if (size > bufSize) { free(data); *res = QSP_FALSE; return; } memcpy(buf, data, size); free(data); if (isRefresh) qspCallRefreshInt(QSP_FALSE); *res = QSP_TRUE; }
/* Сохранение состояния в память */ AS3_Val QSPSaveGameAsData(void *param, AS3_Val args) { int len; QSP_BOOL isRefresh; AS3_Val data; QSP_CHAR *buf; AS3_ArrayValue(args, "AS3ValType, IntType", &data, &isRefresh); if (qspIsExitOnError && qspErrorNum) return AS3_False(); qspPrepareExecution(); if (qspIsDisableCodeExec) return AS3_False(); if (!(len = qspSaveGameStatusToString(&buf))) return AS3_False(); AS3_ByteArray_seek(data, 0, SEEK_SET); AS3_ByteArray_writeBytes(data, buf, len * sizeof(QSP_CHAR)); free(buf); if (isRefresh) qspCallRefreshInt(QSP_FALSE); return AS3_True(); }