static void qspPlayFile(QSP_CHAR *s, int volume, QSP_BOOL isAddToPlayList) { int len; QSP_CHAR buf[4], *file; if (!qspIsAnyString(s)) return; if (volume < 0) volume = 0; else if (volume > 100) volume = 100; file = qspGetAbsFromRelPath(s); qspCallPlayFile(file, volume); free(file); if (isAddToPlayList) { if (qspPLFilesCount == QSP_MAXPLFILES) { qspRefreshPlayList(); if (qspPLFilesCount == QSP_MAXPLFILES) return; } len = qspAddText(&file, s, 0, -1, QSP_TRUE); if (volume != 100) { len = qspAddText(&file, QSP_PLVOLUMEDELIM, len, 1, QSP_FALSE); file = qspGetAddText(file, qspNumToStr(buf, volume), len, -1); } qspPLFiles[qspPLFilesCount++] = file; } }
int qspCodeWriteIntVal(QSP_CHAR **s, int len, int val, QSP_BOOL isCode) { QSP_CHAR buf[12], *temp; qspNumToStr(buf, val); if (isCode) { temp = qspCodeReCode(buf, QSP_TRUE); len = qspAddText(s, temp, len, -1, QSP_FALSE); free(temp); } else len = qspAddText(s, buf, len, -1, QSP_FALSE); return qspAddText(s, QSP_STRSDELIM, len, QSP_LEN(QSP_STRSDELIM), QSP_FALSE); }
int qspCodeWriteVal(QSP_CHAR **s, int len, QSP_CHAR *val, QSP_BOOL isCode) { QSP_CHAR *temp; if (val) { if (isCode) { temp = qspCodeReCode(val, QSP_TRUE); len = qspAddText(s, temp, len, -1, QSP_FALSE); free(temp); } else len = qspAddText(s, val, len, -1, QSP_FALSE); } return qspAddText(s, QSP_STRSDELIM, len, QSP_LEN(QSP_STRSDELIM), QSP_FALSE); }
/* Текст строки ввода */ 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(); }
void qspCopyStrs(QSP_CHAR ***dest, QSP_CHAR **src, int start, int end) { int i, count = end - start; if (src && count) { *dest = (QSP_CHAR **)malloc(count * sizeof(QSP_CHAR *)); i = 0; while (start < end) qspAddText(*dest + i++, src[start++], 0, -1, QSP_TRUE); } else *dest = 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; }
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; }
static int qspProcessEOLExtensions(QSPLineOfCode *s, int count, QSPLineOfCode **strs) { QSPLineOfCode *ret; QSPString str, eol, eolExt; int len, lastNum = 0, i = 0, bufSize = 8, newCount = 0; ret = (QSPLineOfCode *)malloc(bufSize * sizeof(QSPLineOfCode)); eolExt = QSP_STATIC_STR(QSP_PREEOLEXT QSP_EOLEXT); while (i < count) { qspAddText(&str, s[i].Str, QSP_TRUE); len = qspStrLen(str); if (len >= QSP_STATIC_LEN(QSP_PREEOLEXT QSP_EOLEXT)) { eol = str; eol.Str += len - QSP_STATIC_LEN(QSP_PREEOLEXT QSP_EOLEXT); while (!qspStrsComp(eol, eolExt)) { if (++i == count) break; str.End -= QSP_STATIC_LEN(QSP_EOLEXT); qspAddText(&str, s[i].Str, QSP_FALSE); len = qspStrLen(str); eol = str; eol.Str += len - QSP_STATIC_LEN(QSP_PREEOLEXT QSP_EOLEXT); } } if (newCount >= bufSize) { bufSize = newCount + 16; ret = (QSPLineOfCode *)realloc(ret, bufSize * sizeof(QSPLineOfCode)); } qspInitLineOfCode(ret + newCount++, str, lastNum); ++i; lastNum = s[i].LineNum; } *strs = ret; return newCount; }
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); } }
QSP_CHAR *qspGetAddText(QSP_CHAR *dest, QSP_CHAR *val, int destLen, int valLen) { qspAddText(&dest, val, destLen, valLen, QSP_FALSE); return dest; }
QSP_CHAR *qspGetNewText(QSP_CHAR *val, int valLen) { QSP_CHAR *buf; qspAddText(&buf, val, 0, valLen, QSP_TRUE); return buf; }
/* Текст строки ввода */ void QSPSetInputStrText(const QSP_CHAR *val) { qspCurInputLen = qspAddText(&qspCurInput, (QSP_CHAR *)val, 0, -1, QSP_FALSE); }