Графические устройства

         

Размер и размещение фона



Размер и размещение фона

Высота информационной строки нам известна, точнее мы знаем, что ее значение хранится в переменной hsymb. Ширина строки равна произведению ширины символов на их количество, но последнее является переменной величиной. Ее значение зависит как от размера текста сообщения, так и от ответа оператора, если таковой подразумевается. Поэтому лучше выбрать ширину информационной строки равную ширине рабочей области экрана (значению переменной Horsize). При использовании стандартных таблиц в такой строке можно разместить 80, 100, 128 или 160 символов, в зависимости от установленного видеорежима. Чем выше разрешение, тем мельче изображение символов на экране и тем труднее читать текст, поэтому при работе с высоким разрешением вам могут понадобиться таблицы с более крупными символами.

Если информационная строка занимает всю ширину экрана, то количество сохраняемых байтов и размер буфера для их размещения вычисляются как произведение значений переменных Horsize и hsymb. Если hsymb = 16, то, в зависимости от видеорежима PPG, информационная строка содержит следующее количество байтов: 101h - 7680, 103h - 9600, 105h - 12288, 107h - 16384. При работе в режимах Hi-Color указанные числа увеличатся в два раза, а в режимах True Color — в четыре раза. Очевидно, что буфер таких размеров нецелесообразно располагать в разделе данных задачи, для него надо выделить отдельное место в оперативной памяти ПК.

Способы резервирования пространства оперативной памяти описаны в приложении Б данной книги. При программировании задачи надо следить за тем, чтобы это пространство не использовалось по другому назначению. Для этого надо имя переменной, содержащей адрес выделенного сегмента, использовать только в подпрограммах сохранения и восстановления исходного фона информационной строки, но есть и другой способ защиты.

Нужный нам буфер можно расположить в начале сегмента общего назначения, выделенного в разделе для временного хранения распакованной строки рисунка. Код сегмента хранится в переменной GenSeg, а начало свободного в нем пространства в переменной GenOffs. Если Genoffs присвоить значение horsize и hsymb, то соответствующая часть сегмента будет недоступна другим подпрограммам, при условии, что они используют адрес, хранящийся в Genoffs, и не уменьшают его.

Таким образом, адрес начала информационной строки в видеопамяти хранится в переменных inf lino и inf linw, а буфер для ее размещения расположен в начале сегмента, указанного в переменных Genoffs и GenSeg.



Содержание раздела