20.3.1. Общие принципы работы с окном
Введенные выше типы структур для обращения к видеопамяти можно с успехом использовать для работы с произвольными областями экрана — окнами. Единственное, что потребуется — это, чтобы окно имело прямоугольную форму. В таком случае надо обрабатывать (считывать, запоминать, заполнять) не всю последовательность ячеек видеопамяти, а набор фрагментов, каждый из которых представляет собой одну строку окна. Число таких фрагментов равно числу строк в окне. Длина каждого фрагмента равна ширине окна. Начало первого фрагмента в структуре видеопамяти (Start) для окна, заданного координатами X1, Y1, X2, Y2, можно вычислить по формуле:
Start * M*( Y1 - 1 ) +X1,
где M — число столбцов для текущего текстового режима. Начало каждого последующего фрагмента получается добавлением числа M к началу предыдущего. Ширина окна (Width), она же длина одного фрагмента, определяется очевидным образом:
Width = ( Х2 - Х1 ) + 1
а число фрагментов (Height) находится как
Height = ( Y2 - Y1 ) + 1.
Для того чтобы запомнить (сохранить) все окно, потребуется область памяти размером
Size = Width * Height * 2,
где 2 появляется из-за того, что один символ на экране представляется двумя байтами в памяти. Обычно при сохранении окна фрагменты записываются в память последовательно, и при их восстановлении на экране необходимо вновь вычислять положение каждого из них.