Глава 4. Вывод на терминал.
Раздел 2. Управление курсором.
4.2.5 Чтение/сохранение/восстановление позиции курсора.
Программы иногда читают и сохраняют текущее положение курсора, с тем чтобы можно было временно перевести курсор в командную строку, а затем вернуть его в исходную позицию. Текущая позиция курсора для каждой из вплоть до восьми страниц хранится в области данных BIOS. Имеется восемь 2-байтных переменных, размещающихся начиная с адреса 0040:0050. Первая позиция соответствует странице 0, вторая - странице 1 и т.д. Младший байт каждой переменной содержит номер столбца, а младший - номер строки. Kак столбцы, так и строки нумеруются, начиная с нуля.
Средний уровень.
Функция 3 прерывания 10H возвращает строку курсора в DH, а столбец - в DL. Hа входе надо поместить в BH номер страницы (всегда 0 для монохромного дисплея).
;---определение позиции курсора | |
MOV AH,3 | ;номер функции |
MOV BH,0 | ;страница 0 |
INT 10H | ;строка:столбец в DH:DL |
MS DOS предоставляет две Esc-последовательности для сохранения и восстановления позиции курсора. Это специальные строки, которые если их "вывести" на терминал управляют монитором. Основы использования этих последовательностей описаны в приложении Д. Последовательность для запоминания позиции курсора - Esc[s, а для восстановления - Esc[u. Hет нужды запоминать координаты в переменной.
;---в сегменте данных | |
SAVE_CURSOR DB 27,'[s$' | |
RESTORE_CURSOR DB 27,'[u$' | |
;---сохранение курсора | |
LEA DX,SAVE_CURSOR | ;адрес начала строки в DX |
MOV AH,9 | ;номер функции вывода строки |
INT 21H | ;сохраняем позицию курсора |
;---восстановление курсора | |
LEA DX,RESTORE_CURSOR | ;адрес начала строки в DX |
MOV AH,9 | ;номер функции вывода строки |
INT 21H | ;восстанавливаем позицию курсора |
Hизкий уровень.
Регистры 14 и 15 микросхемы 6845 хранят текущую позицию курсора, как объяснялось в {4.1.1}. Старший байт хранится в регистре 14. Два байта хранят числа от 0 до 1999 в режиме 80 символов в строке и от 0 до 999 в режиме 40 символов. Вам необходимо перевести получаемое число в координаты строки и столбца. Вы можете прочитать это значение, чтобы узнать текущее позицию видимого курсора на экране. Hо запоминание этого значения и последующее восстановление его в регистрах не обязательно приведет к возврату курсора в предыдущую позицию, особенно если Ваша программа использует любую из обычных функций работы с экраном, предоставляемых операционной системой. Это происходит потому, что BIOS хранит положение курсора в своих переменных, для того чтобы иметь возможность управлять страницами дисплея {4.5.3}. После того как Вы восстановите регистры 14 и 15 курсор переместится в соответствующую позицию, но при следующем вызове прерывания вывода на экран курсор вернется назад к той позиции, в которой он должен находиться согласно значениям переменных BIOS.
<~-4.2.4 Изменение формы курсора.
Содержание
4.2.6 Создание альтернативных типов курсора.-~>