Ряд s2 может быть результатом предшествовавшего вызова save_image() или вызова read_bitmap(), или тем, что секундой ранее вы рисовали в своем воображении.
Ряды (строчки) изображения могут быть разной длины.
Пример:
display_image({20,30}, {{7,5,9,4,8},
{2,4,1,2},
{1,0,1,0,4,6,1},
{5,5,5,5,5,5}})
-- Процедура выведет на экран небольшое изображение, состоящее
-- из 4-х горизонтальных рядов пикселов. Первый пиксел (цвет номер 7)
-- будет включен в точке {20,30}. Верхний ряд состоит из 5 пикселов.
-- Последний (нижний) ряд состоит из 6 пикселов цвета номер 5
-- и заканчивается в точке {25,33}.
Пример программы:
demo\dos32\bitmap.ex
См. также:
save_image, read_bitmap, display_text_image
display_text_image
Синтаксис:
include image.e
display_text_image(s1, s2)
Описание:
Выводит на экран 2-мерный ряд символов c заданными атрибутами, начиная с заданной экранной позиции. Аргумент s1 является двухэлементным рядом, содержащим координаты начальной экранной позиции - строка s1[1], колонка s1[2]. Аргумент s2 состоит из вложенных рядов, каждый из которых является строкой выводимых символов и их атрибутов. Верхний левый символ выводится в позиции s1. Другие символы появляются правее и ниже этой позиции. Атрибут следует за символом и своим кодом указывает цвет символа и цвет фона на котором символ должен быть отображён. Под DOS32 атрибут представляет собой сумму номера цвета и умноженного на 16 номера цвета фона.
Комментарии:
Ряд s2 обычно будет результатом предшествующего вызова функции save_text_image(), хотя вы можете сконструировать этот ряд и сами.
Данная процедура работает только в текстовых экранных режимах.
Пара подпрограмм save_text_image() и display_text_image() пригодится вам для организации в текстовом режиме графического пользовательского интерфейса с всплывающими диалогами и выпадающими меню, которые появляются и исчезают без потери того, что было на экране до них.
Строки текстового изображения могут иметь разную длину.
Пример:
clear_screen()
display_text_image({1,1}, {{'A', WHITE, 'B', GREEN},
{'C', RED+16*WHITE},
{'D', BLUE}})
-- начиная с верхнего левого угла экрана, выводится:
AB
C
D
-- 'A' - белого цвета на чёрном (0) фоне,
-- 'B' - зелёного цвета на чёрном фоне,
-- 'C' - красного цвета на белом фоне и
-- 'D' - синего цвета на чёрном фоне.
См. также:
save_text_image, display_image, put_screen_char
dos_interrupt
Платформа:
DOS32
Синтаксис:
include machine.e
s2 = dos_interrupt(i, s1)
Описание:
Вызывает программное прерывание DOS номер i. Аргумент s1 является 10-элементным рядом 16-битных значений, заносимых в регистры процессора перед входом в процедуру прерывания. Ряд s2 аналогичен 10-элементному ряду s1, в нем будут содержаться значения регистров после выхода из процедуры прерывания. В файле machine.e имеется следующее объявление констант, из которого ясно расположение значений регистров во входном и выходном рядах s1 и s2:
global constant REG_DI = 1,
REG_SI = 2,
REG_BP = 3,
REG_BX = 4,
REG_DX = 5,
REG_CX = 6,
REG_AX = 7,
REG_FLAGS = 8,
REG_ES = 9,
REG_DS = 10
Комментарии:
Значения регистров, выдаваемые в s2, всегда являются положительными целыми числами между 0 и #FFFF (65535).
Значения флагов в s1[REG_FLAGS] на входе игнорируются. На выходе младший значащий бит в s2[REG_FLAGS] соответствует флагу состояния, который обычно указывает на неудачу, если он установлен в 1.
Некоторые прерывания требуют, чтобы вы указывали адреса участков памяти. Эти адреса должны относиться к стандартной (нижней) памяти. Вы можете подготовить/освободить нижнюю память с помощью функций allocate_low() и free_low().
С программными прерываниями DOS вы имеете доступ ко всему широкому кругу специализированных операций, любых, от форматирования вашего флоппи-диска до перезагрузки компьютера. Документацию по этим прерываниям можно найти в книге Питера Нортона
http://www.cs.cmu.edu/afs/cs.cmu.edu/user/ralf/pub/WWW/files.html
Пример:
sequence registers
registers = repeat(0, 10) -- установка значений регистров не требуется