W Cat - Язык программирования Euphoria. Справочное руководство
Когда программа исполняется в окне DOS с частотой таймера иной, чем 18.2, функция time() не будет убегать вперед, если данное окно не является активным окном.
С частотой таймера, отличающейся от 18.2, функция time() под DOS занимает примерно 1/100 от обычного времени её исполнения. Под Windows и FreeBSD функция time() всегда исполняется очень быстро.
До тех пор, пока ex.exe исполняется, система будет поддерживать правильное время дня. Но если произойдет отказ ex.exe (т.е. вы увидите сообщение об ошибке "CauseWay..."), когда частота таймера установлена высокая, вам (или вашему пользователю) может потребоваться перезапуск машины, чтобы восстановить правильную исходную частоту. Если не сделать этого, системное время будет быстро опережать реальное. Эта проблема не свойственна Windows 95/98/NT и имеет место только под DOS или Windows 3.1. Но вы всегда можете вернуться к правильному времени, поддерживаемому батарейными часами вашей машины, перезагрузив машину.
Пример:
tick_rate(100)
-- time() идёт с шагом .01 секунды
-- вместо обычных .055 секунды
См. также:
time, time profiling
time
Синтаксис:
a = time()
Описание:
Выдаёт число секунд, прошедших от некоторого фиксированного момента в прошлом.
Комментарии:
Если вам нужно измерить, например, сколько времени ушло на выполнение какого-то участка кода вашей программы, найдите разность между двумя отсчетами time(), взятыми в начале и в конце данного участка кода.
Разрешение под DOS32 обычно около 0.05 секунды. Под WIN32 и Linux/FreeBSD разрешение около 0.01 секунды.
Под DOS32 вы можете улучшить разрешение, вызвав процедуру tick_rate() с необходимым параметром.
Под DOS32 период времени, который вы можете так измерить, ограничен 24 часами. После этого величина, выдаваемая time() будет переустановлена и начнётся новый счёт. Если, тем не менее, вы вызывали tick_rate(), и частота часов была выше обычной 18.2/сек, результат time() будет оставаться правильным намного дольше, так как в этом случае Euphoria обрабатывает прерывания от часов прямо и накапливает отсчёты в более ёмкой переменной, 32-битной.
Эмуляция DOS под Windows XP не вполне совершенна. Когда вы производите профилирование времени (with profile_time), функция time() может иметь погрешность до нескольких процентов. Эта проблема не имеет места под Windows ME/98/95.
На некоторых машинах функция time() может выдавать отрицательное число. Тем не менее, вы можете использовать разность отсчётов от 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
trace
Синтаксис:
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), если цветное отображение на вашей системе затруднено.
Все формы trace() поддерживаются интерпретатором.
Транслятором с Euphoria на Си поддерживается только trace(3).
Пример:
if x then
-- да, этот участок требует отладки...
trace(1)
-- и т.д.
...
end if
См. также:
profile, debugging and profiling
...
от U до Z
unlock_file
Синтаксис:
include file.e
unlock_file(fn, s)
Описание:
Отпирает открытый файл fn или участок файла fn. Данный файл должен быть перед этим заперт с использованием lock_file(). Под DOS32 и WIN32 вы можете отпереть некоторый участок внутри файла, задавая аргумент s в виде {первый_байт, последний_байт}. Этот же самый участок в файле должен быть перед этим заперт с использованием lock_file(). Под Linux/FreeBSD в данной версии вы можете запирать и отпирать только весь файл целиком. Аргумент s должен быть пустым рядом {}, если отпирается весь файл. Под Linux/FreeBSD аргумент s всегда должен быть пустым рядом {}.
Комментарии:
Вы должны отпереть запертый вами файл при первой же возможности, чтобы сделать доступным его использование другими программами (процессами).
Любые файлы, которые вы запираете из своей программы, будут автоматически отперты при завершении вашей программы.
См. lock_file() для изучения дальнейших комментариев и примера.
См. также:
lock_file
unregister_block
Синтаксис:
include machine.e (or safe.e)
unregister_block(a)
Описание:
Удаляет блок памяти из списка безопасных блоков, поддерживаемого safe.e (отладочной версией machine.e). Участок памяти, занятый этим блоком, начинается по адресу a.
Комментарии:
Данная процедура предназначена для использования только в отладочных целях. Применяйте её для вычеркивания блоков памяти, которые вы ранее внесли в список с помощью процедуры register_block(). Вычеркивая (удаляя) блок, вы исключаете его из списка безопасных блоков, поддерживаемого safe.e. Это предохраняет вашу программу от любых последующих операций чтения-записи по адресам внутри блока.
См. register_block() для уяснения деталей и изучения примера.
См. также:
register_block, safe.e
upper
Синтаксис:
include wildcard.e
x2 = upper(x1)
Описание:
Преобразует атом или ряд символов на латинском алфавите к верхнему регистру.
Пример:
s = upper("Euphoria")
-- s равно "EUPHORIA"
a = upper('g')
-- a равно 'G'
s = upper({"Euphoria", "Programming"})
-- s равно {"EUPHORIA", "PROGRAMMING"}
См. также:
lower
use_vesa
Платформа:
DOS32
Синтаксис:
include machine.e
use_vesa(i)
Описание:
use_vesa(1) переведет Euphoria в режим подчинения рекомендациям графического стандарта VESA. Это может улучшить работу программ Euphoria в режимах SVGA графики с некоторыми видеоплатами. use_vesa(0) восстановит оригинальный метод, применяемый Euphoria при работе с видеоплатами.
Комментарии:
Большинство пользователей Euphoria может не обращать на эту процедуру внимания. Однако, если возникли трудности при переходе в графические режимы SVGA, вы можете попытаться выполнить use_vesa(1) в начале вашей программы перед любыми вызовами функции graphics_mode().
Аргументы в use_vesa(), отличающиеся от 0 или 1, не должны использоваться.
Пример:
use_vesa(1)
fail = graphics_mode(261)
См. также:
graphics_mode
value
Синтаксис:
include get.e
s = value(st)
Описание:
Читает строковое представление объекта Euphoria и рассчитывает его величину. Выдаёт 2-х элементный ряд вида {error_status, величина}, где элемент error_status может быть одним из:
GET_SUCCESS -- найдено законное представление объекта
GET_EOF -- конец строки обнаружен слишком быстро
GET_FAIL -- неправильный синтаксис
Комментарии:
Данная функция работает точно так же как и get(), но чтение производится из строки, которую вы подаёте, а не из файла и не с устройства.
После прочтения одного законного представления объекта Euphoria value() приостанавливает дальнейшее чтение и игнорирует любые добавочные символы в строке. Например, "36" и "36P" - оба случая дадут вам {GET_SUCCESS, 36}.
Пример 1:
s = value("12345"}
-- s равно {GET_SUCCESS, 12345}
Пример 2:
s = value("{0, 1, -99.9}")
-- s равно {GET_SUCCESS, {0, 1, -99.9}}
Пример 3:
s = value("+++")
-- s равно {GET_FAIL, 0}
См. также:
get, sprintf, print
video_config
Синтаксис:
include graphics.e
s = video_config()
Описание:
Выдаёт ряд величин, описывающих конфигурацию вашей видеоподсистемы:
{цветной монитор?, графический режим, число строк текста, число колонок текста, число пикселов по горизонтали, число пикселов по вертикали, число цветов, число страниц}.
В библиотечном файле graphics.e определены следующие константы:
global constant
VC_COLOR = 1,
VC_MODE = 2,
VC_LINES = 3,
VC_COLUMNS = 4,
VC_XPIXELS = 5,
VC_YPIXELS = 6,