Синтаксис: | include image.e i = save_bitmap(s, st) |
Описание: | Создает bitmap-файл (.bmp) из 2-х элементного ряда s.
st является именем .bmp-файла. s[1] является палитрой: {{r,g,b}, {r,g,b}, ..., {r,g,b}} Каждая из величин r, g, или b должна быть в диапазоне от 0 до 255. s[2] является двухмерным рядом рядов, содержащих пиксельно-графическое изображение. Ряды, содержащиеся в s[2], должны все иметь одинаковую длину. s имеет тот же самый формат, что и величина, выдаваемая функцией read_bitmap(). Результатом будет один из следующих кодов: |
global constant BMP_SUCCESS = 0, BMP_OPEN_FAILED = 1, BMP_INVALID_MODE = 4 -- несоответствие графического режима -- или несоответствие аргумента | |
Комментарии: | Если вы использовали get_all_palette() для получения палитры
перед вызовом этой функции, вы должны умножить величины интенсивностей
на 4 перед вызовом save_bitmap().
Вы можете использовать save_image(), чтобы получить 2-х мерное изображение для s[2]. save_bitmap() вырабатывает биткарты с 2, 4, 16, или 256 цветами, так что все они могут быть затем прочитаны с помощью read_bitmap(). Программа Paintbrush из пакета Windows и некоторые другие графические редакторы не поддерживают 4-х цветные биткарты. |
Пример: | |
paletteData = get_all_palette() * 4 code = save_bitmap({paletteData, imageData}, "c:\\example\\a1.bmp") | |
См. также: | save_image, read_bitmap, save_screen, get_all_palette |
Платформа: | DOS32 |
Синтаксис: | include image.e s3 = save_image(s1, s2) |
Описание: | Переписывает в ряд прямоугольное изображение с пиксельно-графического экрана. Результатом является 2-х мерный ряд рядов, содержащий все пикселы изображения. Вы можете затем снова вывести это изображение с использованием процедуры display_image(). s1 является 2-х элементным рядом {x1,y1}, определяющим координаты верхнего левого угла изображения. s2 является рядом {x2,y2} координат правого нижнего угла. |
Пример: | |
s = save_image({0,0}, {50,50}) display_image({100,200}, s) display_image({300,400}, s) -- записывает в ряд квадратное 51x51 изображение, -- затем выводит его в позиции {100,200} -- и в позиции {300,400} | |
См. также: | display_image, save_text_image |
Платформа: | DOS32 |
Синтаксис: | include image.e i = save_screen(x1, st) |
Описание: | Сохраняет весь экран или прямоугольную область экрана в файле
типа Windows bitmap - (.bmp)-файле. Чтобы записать в файл весь
экран, подайте в функцию 0 для x1. Чтобы записать прямоугольную
область экрана, x1 должен быть рядом двух рядов:
{{topLeftXPixel, topLeftYPixel},
{bottomRightXPixel, bottomRightYPixel}}, где
{topLeftXPixel, topLeftYPixel} равно {Xверхний левый, Yверхний левый},
а {bottomRightXPixel, bottomRightYPixel} равно {Xнижний правый, Yнижний правый}
st - имя вашего .bmp-файла, в который будет записана биткарта. Результатом i будет один из следующих кодов: |
global constant BMP_SUCCESS = 0, BMP_OPEN_FAILED = 1, BMP_INVALID_MODE = 4 -- несоответствие графического режима -- или несоответствие аргумента | |
Комментарии: | save_screen() вырабатывает биткарты с 2, 4, 16, или 256 цветами,
которые могут быть прочитаны с помощью read_bitmap(). Программа Paintbrush
из пакета Windows и некоторые другие графические редакторы не
поддерживают 4-х цветные биткарты.
save_screen() работает только в пиксельно-графических режимах, но не в текстовых. |
Пример 1: | |
-- записывается весь экран: code = save_screen(0, "c:\\example\\a1.bmp") | |
Пример 2: | |
-- записывается часть экрана: err = save_screen({{0,0},{200, 15}}, "b1.bmp") | |
См. также: | save_image, read_bitmap, save_bitmap |
Платформа: | DOS32, Linux |
Синтаксис: | include image.e s3 = save_text_image(s1, s2) |
Описание: | Записывает в ряд прямоугольную область экрана в текстовом режиме. Результатом будет ряд рядов, содержащий символы ASCII и их атрибуты с экрана. Вы сможете затем перевывести этот текст с помощью процедуры display_text_image(). s1 является 2-х элементным рядом вида {строка1, колонка1}, в котором определена позиция верхнего левого символа (знакоместа). s2 - ряд вида {строка2, колонка2}, определяющий позицию правого нижнего символа (знакоместа). |
Комментарии: | Поскольку сохраняются и атрибуты, вы будете получать
правильные цвета фона, символов и другие свойства для каждого
символа при перевыводе сохраненного текста.
Под DOS32 байт атрибута состоит из двух 4-битных полей, в которых содержится информация о цвете фона и символа для каждого знакоместа. Старшие 4 бита определяют цвет фона, а младшие 4 бита дают цвет символа на этом фоне. Процедура работает только в текстовых режимах. Вы можете использовать эту функцию в графическом пользовательском интерфейсе текстового режима для сохранения участков экрана перед выводом выпадающих меню, диалогов, предупреждений и т.п. элементов интерфейса. Под DOS32, если вы применяете чередование видеостраниц, имейте в виду, что данная функция производит чтение с текущей активной страницы. |
Пример: | Если на двух верхних строках экрана имеется: |
Hello World | |
и вы исполните: | |
s = save_text_image({1,1}, {2,5}) | |
Тогда s будет иметь вид: | |
{"H-e-l-l-o-", "W-o-r-l-d-"} где '-' обозначает байты атрибутов | |
См. также: | display_text_image, save_image, set_active_page, get_screen_char |
Синтаксис: | include graphics.e scroll(i1, i2, i3) |
Описание: | Прокручивает участок текста на экране вверх (если i1 положительное) или вниз (если i1 отрицательное) на i1 строк. Участок текста это последовательность строк на экране от i2 (верхняя строка) до i3 (нижняя строка), включительно. Сверху или снизу будут появляться новые пустые строки. |
Комментарии: | Вы можете выполнять прокручивание экрана, используя
серии вызовов puts(), но scroll() работает намного быстрее.
Позиция курсора после прокрутки не определена. |
Пример программы: | bin\ed.ex |
См. также: | clear_screen, text_rows |
Синтаксис: | include file.e i1 = seek(fn, i2) |
Описание: | Переход на позицию любого байта в файле fn или в конец файла, если i2 равно -1. Для каждого из открытых файлов имеется информация о текущей байтовой позиции, которая обновляется в результате выполнения на файле операций ввода/вывода. Начальная позиция равна 0 для файлов, открытых на чтение, запись или обновление. Начальная позиция равна концу файла для файлов, открытых на добавление. Величина i1, выдаваемая функцией seek(), равна 0, если переход в заданную позицию завершился успешно и не равна 0, если переходу что-то помешало. Возможно перемещение за пределы имеющегося конца файла. Если вы переместились за пределы файла и записываете некоторые данные, в зазор между оригинальным концом файла и вашими новыми данными будут вставлены неопределенные байты. |
Комментарии: |
После перемещения и чтения (записи) последовательности байтов вам
может потребоваться явный вызов seek() непосредственно перед
переключением на запись (чтение) байтов, даже если позиция в файле
уже именно та, которая вам необходима.
Эта функция обычно используется с файлами, открытыми в двоичном режиме. В текстовом режиме DOS преобразует CR LF в LF на входе, и LF в CR LF на выходе, что может вызывать великую путаницу, когда вы пытаетесь подсчитывать байты. |
Пример: | |
include file.e integer fn fn = open("mydata", "rb") -- читает и отображает первую строку файла 3 раза: for i = 1 to 3 do puts(1, gets(fn)) if seek(fn, 0) then puts(1, "rewind failed!\n") end if end for | |
См. также: | where, open |
Синтаксис: | i = sequence(x) |
Описание: | Выдает 1, если x является рядом, иначе выдает 0. |
Комментарии: | Основное назначение оператора - определение переменных типа ряд. Но вы можете вызывать его как обычную функцию, чтобы проверить, является ли объект действительно рядом. |
Пример 1: | |
sequence s s = {1,2,3} | |
Пример 2: | |
if sequence(x) then sum = 0 for i = 1 to length(x) do sum = sum + x[i] end for else -- x должен быть атомом sum = x end if | |
См. также: | atom, object, integer, атомы и ряды |
Платформа: | DOS32 |
Синтаксис: | include image.e set_active_page(i) |
Описание: | Выбирает видеостраницу номер i для всех выводов на экран. |
Комментарии: | Используя несколько видеостраниц, вы можете одновременно
изменять содержимое всего экрана сразу без каких бы то ни
было визуальных подергиваний и мельканий. Вы можете также
сначала записать информацию на невидимую страницу экрана,
а потом быстро, практически мгновенно, переменить страницы
и вывести эту новую информацию.
Функция video_config() сообщит вам, как много видео страниц доступно в текущем графическом режиме на вашей видеоплате. По умолчанию активная страница и отображаемая страница обе имеют номер 0. Все это работает под DOS или в полноэкранном окне DOS. В окнах, занимающих часть экрана, вы не можете манипулировать номерами активной страницы. |
Пример: | |
include image.e -- активная и отображаемая страницы в начале обе имеют номер 0 puts(1, "\nЭто страница 0\n") set_active_page(1) -- экранный вывод теперь пойдет на страницу 1 clear_screen() puts(1, "\nТеперь мы перешли на страницу 1\n") if getc(0) then -- ожидание нажатия клавиши end if set_display_page(1) -- "Теперь мы ..." становится видимым if getc(0) then -- ожидание нажатия клавиши end if set_display_page(0) -- "Это ..." становится видимым снова set_active_page(0) | |
См. также: | get_active_page, set_display_page, video_config |
Платформа: | DOS32 |
Синтаксис: | include image.e set_display_page(i) |
Описание: | Делает видеостраницу номер i отображаемой. |
Комментарии: | С несколькими видеостраницами вы можете одновременно изменять
содержимое всего экрана без дрожаний и мельканий. Вы можете также
спрятать содержимое экрана, а затем быстро вернуть его на прежнее место.
Функция video_config() сообщит вам, сколько видеостраниц доступно в текущем видеорежиме на вашей видеоплате. По умолчанию активная и отображаемая страницы обе имеют номер 0. Эти чудеса работают под DOS или в полноэкранном окне DOS. В окнах, занимающих часть экрана, вы не можете менять номера видеостраниц. |
Пример: | См. set_active_page() Пример. |
См. также: | get_display_page, set_active_page, video_config |
Синтаксис: | include machine.e set_rand(i1) |
Описание: | Устанавливает генератор случайных чисел в определенное состояние, i1, так что вы будете получать известные серии квазислучайных чисел при последовательных вызовах rand(). |
Комментарии: | Обычно числа, выдаваемые функцией rand(), являются непредсказуемыми и будут при каждом запуске вашей программы другими. Тем не менее, иногда необходимо иметь повторяющиеся серии квазислучайных чисел, например, для целей отладки программы или, может быть, вам необходимо генерировать один и тот же вывод (к примеру, случайное изображение) по требованию вашего пользователя. |
Пример: | |
sequence s, t s = repeat(0, 3) t = s set_rand(12345) s[1] = rand(10) s[2] = rand(100) s[3] = rand(1000) set_rand(12345) -- та же величина для set_rand() t[1] = rand(10) -- те же аргументы для rand(), что и ранее t[2] = rand(100) t[3] = rand(1000) -- в этой точке s и t будут идентичными | |
См. также: | rand |
Платформа: | DOS32 |
Синтаксис: | include machine.e set_vector(i, s) |
Описание: | Устанавливает s в качестве нового адреса для обработчика прерывания номер i. s должно быть дальним адресом защищенного режима в форме: {16 битов сегмент, 32 бита смещение}. |
Комментарии: | Перед вызовом set_vector() вы должны разместить машинный код
обработчика прерывания в памяти по адресу s.
16-битный сегмент может быть сегментом кода, используемым Euphoria. Чтобы получить значение для этого сегмента, см. demo\dos32\hardint.ex. Смещение может быть 32-битной величиной, выдаваемой функцией allocate(). Euphoria исполняется в защищенном режиме с сегментами кода и данных, расположенными в одной и той же физической памяти, но с различными режимами доступа. Прерывания реального режима или защищенного режима будут подаваться на ваш обработчик. Прежде чем пытаться обращаться к памяти, ваш обработчик должен немедленно загрузить правильный сегмент данных. После отработки программы прерывания ваш обработчик может вернуть управление вызвавшей прерывание программе, выполнив инструкцию iretd, или путем перехода на оригинальный обработчик. Обработчик должен сохранять и затем восстанавливать состояние всех регистров, значения которых он переписывает. Вы должны заблокировать память, занимаемую вашим обработчиком, чтобы быть уверенным, что он никогда не будет перенесен на диск при использовании виртуальной памяти. См. lock_memory(). Настоятельно рекомендуем изучить работу файла demo\dos32\hardint.ex, прежде чем пытаться устанавливать собственный обработчик прерывания. Вы должны хорошо знать программирование на машинном уровне, чтобы писать свои собственные обработчики прерываний. Вы можете вызвать set_vector() с дальним адресом, выданным get_vector(), если возникла необходимость восстановить исходный оригинальный обработчик. |
Пример: | |
set_vector(#1C, {code_segment, my_handler_address}) | |
Пример программы: | demo\dos32\hardint.ex |
См. также: | get_vector, lock_memory, allocate |
Синтаксис: | x2 = sin(x1) |
Описание: | Выдает синус x1, где x1 выражено в радианах. |
Комментарии: | Данная функция может быть применена к атому или всем элементам ряда. |
Пример: | |
sin_x = sin({.5, .9, .11}) -- sin_x равен {.479, .783, .110} | |
См. также: | cos, tan |
Синтаксис: | include misc.e sleep(i) |
Описание: | Приостанавливает исполнение программы на i секунд. |
Комментарии: | Под WIN32 и Linux операционная система будет приостанавливать вашу программу и отдавать управление другим запущенным программам. Под DOS32 ваша программа будет исполнять занятый цикл в течение i секунд, во время которых другие программы могут выполняться, но на конкурентной основе за обладание процессором. |
Пример: | |
puts(1, "Ожидание 15 секунд...\n") sleep(15) puts(1, "Закончено.\n") | |
См. также: | lock_file, abort, time |
Синтаксис: | include sort.e s2 = sort(s1) |
Описание: | Сортирует s1 в порядке возрастания, используя быстрый алгоритм сортировки. Элементы s1 могут быть любой смесью атомов или рядов. Атомы идут перед рядами, а ряды сортируются в алфавитном порядке, так, что сначала сортировка выполняется по первым элементам(полям), затем, если первые эквивалентны,по вторым и т.д. |
Пример 1: | |
x = 0 & sort({7,5,3,8}) & 0 -- x становится {0, 3, 5, 7, 8, 0} | |
Пример 2: | |
y = sort({"Smith", "Jones", "Doe", 5.5, 4, 6}) -- y равно {4, 5.5, 6, "Doe", "Jones", "Smith"} | |
Пример 3: | |
database = sort({{"Smith", 95.0, 29}, {"Jones", 77.2, 31}, {"Clinton", 88.7, 44}}) -- 3 записи в базе данных будут отсортированы по первому полю -- т.е. по имени. Там, где первые поля (элементы) эквивалентны, -- сортировка будет производиться по второму полю и т.д. -- после сортировки база данных примет вид: {{"Clinton", 88.7, 44}, {"Jones", 77.2, 31}, {"Smith", 95.0, 29}} | |
См. также: | custom_sort, compare, match, find |
Платформа: | DOS32 |
Синтаксис: | include graphics.e sound(i) |
Описание: | Включает громкоговоритель PC на частоте i. Если i равно 0, громкоговоритель будет выключен. |
Комментарии: | Под WIN32 и Linux звуки не генерируются. |
Пример: | |
sound(1000) -- включается непрерывный высокий тон |
Синтаксис: | include misc.e s = sprint(x) |
Описание: | Выдает представление x как символьной строки. Это точно то же самое, что и print(fn, x), но вывод производится не в файл и не на устройство (экран), а в ряд. x может быть любым объектом Euphoria. |
Комментарии: | Атомы, содержащиеся в x, будут выведены максимум с 10 значащими цифрами, как и при помощи print(). |
Пример 1: | |
s = sprint(12345) -- s равно "12345" | |
Пример 2: | |
s = sprint({10,20,30}+5) -- s равно "{15,25,35}" | |
См. также: | print, sprintf, value, get |
Синтаксис: | s = sprintf(st, x) |
Описание: | Эта функция делает точно то же самое, что и printf(), но вывод производится не в файл и не на устройство (экран), а в ряд. st является строкой формата, x - величина или ряд, подлежащие форматированию. printf(fn, st, x) является эквивалентом для puts(fn, sprintf(st, x)). |
Комментарии: | Некоторые типовые применения sprintf():
1. Преобразование чисел в строки. |
Пример: | |
s = sprintf("%08d", 12345) -- s равно "00012345" | |
См. также: | printf, value, sprint, get, system |
Синтаксис: | x2 = sqrt(x1) |
Описание: | Вычисляет квадратный корень x1. |
Комментарии: | Данная функция может быть применена к атому или всем элементам
ряда.
Попытка извлечь квадратный корень из отрицательного числа вызовет аварийное завершение вашей программы с сообщением об ошибке времени прогона. |
Пример: | |
r = sqrt(16) -- r равно 4 | |
См. также: | log, power |
Синтаксис: | system(st, i) |
Описание: | Подает командную строку st в интерпретатор команд операционной
системы для немедленного исполнения. Аргумент i необходим для указания
способа возвращения из дочерней программы, запущенной командой
system(): Когда i равно 0, предыдущий графический режим восстанавливается, но экран очищается. Когда i равно 1, выдается звуковой сигнал и программа ждет нажатия пользователем на клавишу прежде чем восстановить предыдущий графический режим. Когда i равно 2, графический режим не восстанавливается и экран не очищается. |
Комментарии: | i = 2 должно использоваться только когда известно, что
команда, выполняемая system(), не будет изменять графический режим.
Вы можете использовать Euphoria как мощнейший "пакетный" (.bat) язык, задавая нужные вам вызовы system() и system_exec(). system() запускает новую копию интерпретатора команд DOS или Linux. system() позволяет вам использовать из командной строки перенаправление стандартных входа и выхода, задавая его в строке st. Под 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 и т.п. | |
Пример 1: | |
system("copy temp.txt a:\\temp.bak", 2) -- не забывайте писать двойную косую черту в вашей команде, чтобы в DOS -- передавалась штатная одинарная | |
Пример 2: | |
system("ex \\test\\myprog.ex < indata > outdata", 2) -- исполняется myprog, когда стандартные вход и выход -- перенаправлены | |
Пример программы: | bin\install.ex |
См. также: | system_exec, dir, current_dir, getenv, command_line |
Синтаксис: | 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 и т.п., не являются программами, фактически они встроены
в интерпретатор команд DOS, command.com, и для их исполнения
именно command.com и загружается DOS.
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 couldn't run xcopy.exe\n") elsif exit_code = 0 then puts(2, "\n xcopy succeeded\n") else printf(2, "\n xcopy failed with code %d\n", exit_code) end if | |
Пример 2: | |
-- исполняет myprog с двумя именами файлов в качестве аргументов if system_exec("ex \\test\\myprog.ex indata outdata", 2) then puts(2, "failure!\n") end if | |
См. также: | system, abort |
Синтаксис: | x2 = tan(x1) |
Описание: | Выдает тангенс x1, когда x1 выражен в радианах. |
Комментарии: | Данная функция может быть применена к атому или всем элементам ряда. |
Пример: | |
t = tan(1.0) -- t равно 1.55741 | |
См. также: | sin, cos, arctan |
Синтаксис: | include graphics.e text_color(i) |
Описание: | Устанавливает цвет символов текста. Увеличив i на 16, в некоторых графических режимах можно получить мерцающий текст заданного i цвета. См. в graphics.e список возможных цветов. |
Комментарии: | Текст, который вы печатаете на экране после вызова
text_color(), будет иметь заданный цвет.
Когда ваша программа завершается, последний цвет, выбранный вами для текста и выводившийся на экран, сохраняется в действии. Поэтому вам может понадобиться напечатать что-то, можно просто '\n', в белом цвете (WHITE), чтобы восстановить белый цвет текста операционной системы, особенно, если курсор находится в нижней строке экрана в готовности к прокрутке вверх. |
Пример: | |
text_color(BRIGHT_BLUE) | |
См. также: | bk_color |
Платформа: | DOS32, WIN32 |
Синтаксис: | include graphics.e i2 = text_rows(i1) |
Описание: | Устанавливает число строк на экране в текстовом режиме, если заданное значение i1 возможно. i2 принимает значение действительного нового числа строк. |
Комментарии: | Число строк 25, 28, 43 и 50 поддерживается большинством видеоплат. |
См. также: | graphics_mode |
Платформа: | DOS32 |
Синтаксис: | include machine.e tick_rate(a) |
Описание: | Задает число прерываний в секунду от таймера. Тем самым устанавливается точность библиотечной функцииe time() и частота дискретизации при профилировании времени. |
Комментарии: | tick_rate() игнорируется под WIN32
и Linux.
Дискретность счета времени под WIN32 всегда равна 100 прерываний в секунду.
На PC прерывания от таймера идут обычно с частотой 18.2 прерываний в секунду. tick_rate() позволяет вам увеличить эту частоту, но не уменьшить ее. tick_rate(0) восстановит нормальную частоту 18.2. Euphoria восстанавливает нормальную частоту автоматически при завершении вашей программы, даже при аварийном по обнаруженной ошибке. Когда программа исполняется в окне DOS с частотой таймера иной чем 18.2, функция time() не будет убегать вперед, пока данное окно является активным окном. До тех пор, пока ex.exe исполняется, система будет поддерживать правильное время дня. Но если произойдет отказ ex.exe (т.е. вы увидите сообщение об ошибке "CauseWay..."), когда частота таймера установлена высокая, вам (или вашему пользователю) может понадобиться перезапуск машины, чтобы восстановить правильную исходную частоту. Если не сделать этого, системное время будет опережать реальное. Эта проблема не свойственна Windows 95/98/NT и имеет место только под DOS или Windows 3.1. Но вы всегда можете вернуться к правильному времени, поддерживаемому батарейными часами вашей машины, перезагрузив машину. |
Пример: | |
tick_rate(100) -- time() точное с шагом .01 секунды -- вместо обычных .055 секунды | |
См. также: | time, профиль времени |
Синтаксис: | a = time() |
Описание: | Выдает число секунд, прошедших от некоторого фиксированного момента в прошлом. |
Комментарии: | Если вам нужно измерить, например, сколько времени ушло на выполнение
какого-то участка кода вашей программы, найдите разность между двумя
отсчетами time(), взятыми в начале и в конце данного участка кода.
Разрешение под DOS32 обычно около 0.05 секунды. Под WIN32 и Linux разрешение около 0.01 секунды. Под DOS32 вы можете улучшить разрешение, вызвав процедуру tick_rate() с необходимым параметром. Под DOS32 период времени, который вы можете так измерить, ограничен 24 часами. После этого величина, выдаваемая time() будет переустановлена и начнется новый счет. |
Пример: | |
constant ITERATIONS = 1000000 integer p atom t0, loop_overhead t0 = time() for i = 1 to ITERATIONS do -- время пустого цикла end for loop_overhead = time() - t0 t0 = time() for i = 1 to ITERATIONS do p = power(2, 20) end for ? (time() - t0 - loop_overhead)/ITERATIONS -- вычисление времени (в секундах) одного возведения в степень | |
См. также: | date, tick_rate |
Синтаксис: | with trace trace(i) |
Описание: | Если i равно 1 или 2, включает полноэкранную интерактивную трассировку/отладку операторов. Если i равно 3, включает трассировку операторов в файл протокола с именем ctrace.out. Если i равно 0, выключает трассировку. Когда i равно 1, отображение на экране трассировки цветное. Когда i равно 2, трассировка отображается в монохромном режиме. Трассироваться будут только те процедуры, которые были откомпилированны "with trace". Процедура trace() не будет давать эффекта, если выполнена вне участка "with trace" вашей программы. См. Часть I - 3.1 Отладка, чтобы уяснить детали. |
Комментарии: | Используйте trace(2), если цветное отображение затруднено на вашей системе. Интерактивная трассировка транслятором с Euphoria на C не поддерживается. Все формы trace() поддерживаются интерпретатором Public Domain, но только для программ, не превышающих размером 300 операторов. Для более крупных проектов вам потребуется интерпретатор Complete Edition. Имейте однако в виду, что промаркированные библиотечные файлы, такие как Win32Lib.ew, а также файлы из каталога euphoria\include, не влияют на подсчет операторов в вашей программе, но вы должны ввести оператор trace() после включения win32lib.ew (или другого большого библиотечного файла), чтобы выиграть от этой маркировки. |
Пример: | |
if x < 0 then -- да, этот участок требует отладки... trace(1) -- и т.д. ... end if | |
См. также: | профиль, отладка и профилирование |