Комментарии:
Поскольку сохраняются и атрибуты, вы будете получать правильные цвета фона, символов и другие свойства для каждого символа при перевыводе сохранённого текста.
Под 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
scroll
Синтаксис:
include graphics.e
scroll(i1, i2, i3)
Описание:
Прокручивает участок текста на экране вверх (если i1 положительное) или вниз (если i1 отрицательное) на i1 строк. Участок текста - это последовательность строк на экране от i2 (верхняя строка) до i3 (нижняя строка) включительно. Сверху или снизу будут появляться новые пустые строки.
Комментарии:
Вы могли бы выполнять прокручивание экрана, используя серии вызовов puts(), но scroll() работает намного быстрее.
Позиция курсора после прокрутки не определена.
Пример программы:
bined.ex
См. также:
clear_screen, text_rows
seek
Синтаксис:
include file.e
i1 = seek(fn, a1)
Описание:
Переход на позицию байта с номером a1 в файле fn или в конец файла, если a1 равно -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, "перемотка не сработала!n")
end if
end for
См. также:
where, open
sequence
Синтаксис:
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, atoms and sequences
set_active_page
Платформа:
DOS32
Синтаксис:
include image.e
set_active_page(i)
Описание:
Выбирает видеостраницу номер i для всех выводов на экран.
Комментарии:
Используя несколько видеостраниц, вы можете одновременно изменять содержимое всего экрана сразу без каких бы то ни было визуальных подёргиваний и мельканий. Вы можете также сначала записать информацию на невидимую страницу экрана, а потом быстро, практически мгновенно, переменить страницы и вывести эту новую информацию.
Функция video_config() сообщит вам, как много видео страниц доступно в текущем графическом режиме на вашей видеоплате.
По умолчанию активная страница и отображаемая страница обе имеют номер 0.
Всё это работает под DOS или в полноэкранном окне DOS. В окнах, занимающих часть экрана, вы не можете манипулировать номерами активной страницы.
Пример:
include image.e
-- активная и отображаемая страницы сначала обе имеют номер 0
puts(1, "nЭто страница 0n")
set_active_page(1) -- экранный вывод теперь пойдёт на страницу 1
clear_screen()
puts(1, "nТеперь мы перешли на страницу 1n")
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
set_display_page
Платформа:
DOS32
Синтаксис:
include image.e
set_display_page(i)
Описание:
Делает видеостраницу номер i отображаемой на экране.
Комментарии:
С несколькими видеостраницами вы можете моментально изменять содержимое всего экрана без дрожаний и мельканий. Вы можете также спрятать содержимое экрана, а затем быстро вернуть его на прежнее место.
Функция video_config() сообщит вам, сколько видеостраниц доступно в текущем видеорежиме на вашей видеоплате.
По умолчанию в качестве и активной, и отображаемой страницы используется видеостраница под номером 0.
Эта процедура работает под DOS или в полноэкранном окне DOS. В окнах, занимающих часть экрана, вы не можете манипулировать номерами видеостраниц.
Пример:
See set_active_page() example.
См. также:
get_display_page, set_active_page, video_config
set_rand
Синтаксис:
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
set_vector
Платформа:
DOS32
Синтаксис:
include machine.e
set_vector(i, s)
Описание:
Устанавливает s в качестве нового адреса для обработчика прерывания номер i. Ряд s должен содержать дальний адрес защищённого режима в форме: {16-битный сегмент, 32-битное смещение}.
Комментарии:
Перед вызовом set_vector() вы должны разместить машинный код подпрограммы обработчика прерывания в памяти по адресу s.
16-битный сегмент может быть сегментом кода, используемым Euphoria. Чтобы получить значение для этого сегмента, см. demodos32hardint.ex. Смещение может быть 32-битной величиной, выдаваемой функцией allocate(). Euphoria исполняется в защищённом режиме с сегментами кода и данных, расположенными в одной и той же физической памяти, но с различными режимами доступа.
Прерывания, произошедшие в реальном режиме или в защищённом режиме, будут вызывать ваш обработчик. Прежде чем пытаться обращаться к памяти, ваш обработчик должен немедленно загрузить правильный сегмент данных.
После отработки подпрограммы прерывания ваш обработчик может вернуть управление вызвавшей прерывание программе, выполнив инструкцию iretd, или путем перехода на оригинальный обработчик. Обработчик должен сохранять и затем восстанавливать состояние всех регистров, значения которых он переписывает.