Под DOS32 программа Euphoria стартует без использования расширенной памяти, но после старта начинает её использовать. Если для исполнения программы расширенной памяти перестанет хватать, программа начнёт занимать остатки стандартной памяти. При исчерпании и стандартной памяти начнётся использование виртуальной памяти, т.е. пересылка кода и данных на диск. Команда DOS, запущенная на исполнение с помощью system(), прервётся, если для её исполнения окажется недостаточно стандартной памяти. Чтобы избежать подобных ситуаций, вы можете зарезервировать некоторый объём стандартной (нижней) памяти, выполнив команду:
SET CAUSEWAY=LOWMEM:xxx
где xxx есть число K (килобайт) стандартной памяти, отводимой в резерв DOS. Резервирование должно быть выполнено до запуска вашей программы. Вы можете производить резервирование из вашего файла autoexec.bat или из .bat-файла, запускающего вашу программу. Например:
SET CAUSEWAY=LOWMEM:80
ex myprog.ex
По данной команде будет зарезервировано 80K стандартной памяти, которых достаточно для исполнения простых команд DOS вроде COPY, MOVE, MKDIR и т.п., если вы их потом подадите из своей программы myprog.ex.
Пример 1:
system("copy temp.txt a:\\temp.bak", 2)
-- не забывайте писать двойную косую черту в вашей команде, чтобы в DOS
-- передавалась штатная одинарная
Пример 2:
system("ex \\test\\myprog.ex outdata", 2)
-- исполняется myprog, при этом её стандартные вход и выход
-- перенаправлены
См. также:
system_exec, dir, current_dir, getenv, command_line
system_exec
Синтаксис:
i1 = system_exec(st, i2)
Описание:
Пытается выполнить команду, заданную в строке st. Ряд st должен содержать команду запуска исполняемой программы, возможно, с некоторыми параметрами командной строки. Если программа может исполняться, в i1 будет записан код возврата из программы после её завершения. Если запуск программы невозможен, функция system_exec() выдаёт -1. В i2 должен быть указан код, дающий способ действий с текущим графическим режимом после завершения программы, вызванной system_exec(). Эти коды имеют те же самые значения, что и для функции system():
Когда i2 равно 0, восстанавливается предыдущий графический режим и экран очищается.
Когда i2 равно 1, подаётся звуковой сигнал, программа ждёт нажатия на клавишу перед восстановлением предыдущего графического режима.
Когда i2 равно 2, графический режим не восстанавливается и экран не очищается.
Комментарии:
Под DOS32 или WIN32 system_exec() запускает только .exe и .com программы. Для запуска пакетных файлов .bat или встроенных команд DOS следует пользоваться system() - некоторые команды DOS, такие как DEL и т.п., не являются отдельными программами, фактически они встроены в командный интерпретатор операционной системы.
Под DOS32 и WIN32 system_exec() не позволяет осуществлять перенаправление стандартных входа и выхода в командной строке st. Не разрешается также забирать в кавычки строки, которые содержат пробелы в именах каталогов и файлов.
Коды возврата из программ DOS или Windows обычно находятся в пределах от 0 до 255, 0 соответствует "нормальному завершению".
Вы можете запускать и дочерние программы Euphoria с использованием функции system_exec(). Программы Euphoria могут выдавать код возврата по команде abort().
system_exec() не запускает новую копию командного интерпретатора DOS.
Пример 1:
integer exit_code
exit_code = system_exec("xcopy temp1.dat temp2.dat", 2)
if exit_code = -1 then
puts(2, "\n не могу запустить xcopy.exe\n")
elsif exit_code = 0 then
puts(2, "\n успешное выполнение xcopy\n")
else
printf(2, "\n отказ xcopy с кодом ошибки %d\n", exit_code)
end if
Пример 2:
-- исполняет myprog с двумя именами файлов в качестве аргументов
if system_exec("ex \\test\\myprog.ex indata outdata", 2) then
puts(2, "отказ!\n")
end if
См. также:
system, abort
tan
Синтаксис:
x2 = tan(x1)
Описание:
Выдаёт тангенс x1, когда x1 выражен в радианах.
Комментарии:
Данная функция может быть применена к атому или ко всем элементам ряда.
Пример:
t = tan(1.0)
-- t равно 1.55741
См. также:
sin, cos, arctan
task_clock_start
Синтаксис:
task_clock_start()
Описание:
Перезапускает часы, используемые диспетчером для управления задачами реального времени. Эту подпрограмму необходимо вызвать, когда вы хотите возобновить выполнение задач реального времени, приостановленных командой task_clock_stop().