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

         

Вызов подпрограммы драйвером



Вызов подпрограммы драйвером

Если произошло событие, код которого указан в маске, то драйвер вызывает установленную подпрограмму. При входе в нее в регистрах bx, сх и dx находятся данные о состоянии кнопок и значениях координат, представленные в том виде, в котором они получаются после выполнения функции 3.

Три младших разряда регистра bх указывают состояние кнопок. Если разряд установлен, то соответствующая ему кнопка нажата, а если очищен, то не нажата. Разряды 0, 1, 2 соответствуют левой, правой и средней кнопкам.

Дополнительно в регистре ах находится код события, явившегося причиной вызова подпрограммы. В этом регистре может быть установлен только один из указанных в коде маски разрядов (см. описание функции ос). Например если подпрограмма вызывается при любом изменении состояния мыши (код маски 7Fh), то будет установлен один из 7 младших разрядов регистра ах.

Предположим, что оператор перемещает мышь при нажатой левой кнопке. В момент начала перемещения произойдут два вызова подпрограммы. В одном случае в регистре ах будет находиться код 1, а во втором 2. Какой из двух вызовов произойдет первым, зависит от того, что раньше сделал оператор — нажал левую кнопку или начал двигать мышь. В дальнейшем состояние левой кнопки не меняется до того момента, пока она не будет отпущена, поэтому при вызовах подпрограммы в регистре ах будет находиться код 1. При отпускании левой кнопки в регистре ах окажется код 4.

Если подпрограмма реагирует только на перемещение курсора (код маски 1), то состояние кнопок указывает код, находящийся в регистре bх.

В конце раздела говорилось о том, что драйвер поддерживает счетчики перемещений курсора (СП К) и мыши (СПМ), причем значения СПК он вычисляет по значениям СПМ. Обычно в прикладных задачах используется СП К, его значения возвращает функция Mouse з в регистрах сх и dx. В отличие от этой функции, при входе в прерывающую подпрограмму доступны оба типа счетчиков.

Значения СПК находятся в регистрах сх и dx, первый из них содержит текущее значение номера столбца, а второй — номера строки.

Значения СПМ находятся в регистрах si и di, первый из них содержит количество перемещений мыши по горизонтали, а второй — по вертикали. Оба счетчика очищаются при инициализации драйвера (функции 0 и 21) и при выполнении специальной функции ов. Текущие значения счетчиков могут быть отрицательными или положительными числами. Положительные значения соответствуют перемещениям мыши вправо и вниз, а отрицательные — влево и вверх. Обычно в прикладных задачах значения СПМ не используются.



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