Commit 29de2717 authored by Victor Yacovlev's avatar Victor Yacovlev

Fixed stdlib modules functions semantics

parent 88d77bd2
......@@ -100,7 +100,7 @@ class Files
/* 0x000b */ result << QString::fromUtf8("алг лог является каталогом(лит имя файла Или каталога)");
/* 0x000с */ result << QString::fromUtf8("алг лог создать каталог(лит имя каталога)");
/* 0x000d */ result << QString::fromUtf8("алг лит полный путь(лит имя файла Или каталога)");
/* 0x000e */ result << QString::fromUtf8("алг лог удалить(лит имя файла Или каталога)");
/* 0x000e */ result << QString::fromUtf8("алг лог удалить_файл(лит имя файла)");
/* 0x000f */ result << QString::fromUtf8("алг НАЗНАЧИТЬ ВВОД(лит имя файла)");
/* 0x0010 */ result << QString::fromUtf8("алг НАЗНАЧИТЬ ВЫВОД(лит имя файла)");
......@@ -111,6 +111,8 @@ class Files
/* 0x0013*/ result << QString::fromUtf8("алг лог =(файл ф1, файл ф2)");
/* 0x0014*/ result << QString::fromUtf8("алг лог <>(файл ф1, файл ф2)");
/* 0x0015 */ result << QString::fromUtf8("алг лог удалить_каталог(лит имя каталога)");
return result;
}
......@@ -133,7 +135,7 @@ class Strings
/* 0x0004 */ result << QString::fromUtf8("алг вставить(лит фрагмент, аргрез лит строка, арг цел позиция)");
/* 0x0005 */ result << QString::fromUtf8("алг заменить(аргрез лит строка, арг лит старый фрагмент, лит новый фрагмент, лог каждый)");
/* 0x0006 */ result << QString::fromUtf8("алг удалить подстроку(аргрез лит строка, арг цел начало, цел количество)");
/* 0x0006 */ result << QString::fromUtf8("алг удалить(аргрез лит строка, арг цел начало, цел количество)");
/* 0x0007 */ result << QString::fromUtf8("алг цел поз после(цел От, лит фрагмент, лит строка)");
/* 0x0008 */ result << QString::fromUtf8("алг цел поз(лит фрагмент, лит строка)");
......
......@@ -1514,7 +1514,7 @@ public:
return result;
}
inline static int unlinkFile(const String & fileName) {
inline static bool unlink(const String & fileName) {
char * path;
# ifdef NO_UNICODE
path = const_cast<char*>(fileName.c_str());
......@@ -1524,11 +1524,33 @@ public:
path[pl] = '\0';
# endif
int res = ::unlink(path);
int result;
bool result;
if (res==0)
result = 0;
result = true;
else {
result = errno==ENOENT? 1 : 2;
result = false;
}
# ifndef NO_UNICODE
free(path);
# endif
return result;
}
inline static int rmdir(const String & fileName) {
char * path;
# ifdef NO_UNICODE
path = const_cast<char*>(fileName.c_str());
# else
path = reinterpret_cast<char*>( calloc(fileName.length()*2+1, sizeof(char)) );
size_t pl = wcstombs(path, fileName.c_str(), fileName.length()*2+1);
path[pl] = '\0';
# endif
int res = ::rmdir(path);
bool result;
if (res==0)
result = true;
else {
result = false;
}
# ifndef NO_UNICODE
free(path);
......@@ -1536,6 +1558,7 @@ public:
return result;
}
#endif
inline static FileType open(const String & shortName, FileType::OpenMode mode, bool remember=true, FILE* *fh = 0) {
const String fileName = getAbsolutePath(shortName);
// std::wcout<<fileName;
......
......@@ -1237,6 +1237,12 @@ void KumirVM::do_filescall(uint16_t alg)
stack_values.push(Variable(y));
break;
}
/* алг удалить_файл(лит имя файла) */
case 0x000e: {
const String x = stack_values.pop().toString();
Kumir::Files::unlink(x);
break;
}
/* алг НАЗНАЧИТЬ ВВОД(лит имя файла) */
case 0x000f: {
const String x = stack_values.pop().toString();
......@@ -1285,6 +1291,12 @@ void KumirVM::do_filescall(uint16_t alg)
stack_values.push(Variable(f1!=f2));
break;
}
/* алг удалить_файл(лит имя файла) */
case 0x0015: {
const String x = stack_values.pop().toString();
Kumir::Files::rmdir(x);
break;
}
default: {
s_error = Kumir::Core::fromUtf8("Вызов неизвестного алгоримта, возможно из более новой версии Кумир");
}
......@@ -1320,7 +1332,7 @@ void KumirVM::do_stringscall(uint16_t alg)
const String s = stack_values.pop().toString();
const String sub = stack_values.pop().toString();
const int from = stack_values.pop().toInt();
const int y = Kumir::StringUtils::find(from, sub, s);
const int y = Kumir::StringUtils::find(from+1, sub, s);
Variable res(y);
stack_values.push(res);
s_error = Kumir::Core::getError();
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment