Предварительные действия
Пределы перемещения и исходная позиция
При работе в режимах VESA основное назначение драйвера заключается в отслеживании текущей позиции мыши и ее преобразовании в координаты курсора на экране. Для того чтобы это преобразование было корректным, после инициализации драйвера надо установить размер рабочего поля, указав его границы по горизонтали и вертикали.
Функции Mouse 7 и Mouse 8 передают драйверу предельные значения координат по горизонтали и вертикали. Минимальное значение координат х (для Mouse 7) или у (для Mouse 6) помещаются в регистр сх, а максимальное значение – в dx. Выходные параметры у обеих функций отсутствуют.
Если рабочее поле занимает весь экран, то минимальные значения обеих координат равны нулю (xmin = Ymin = о), а максимальные зависят от разрешающей способности видеорежима, поэтому: Xmax = horsize, a Ymax = versize. Например,для режима VESA 101h Xmax = 640, a Ymax = 480.
После установки границ рабочего поля задается исходная позиция курсора. Его конкретное расположение может быть произвольным, но обычно курсор помещают в центр экрана.
Функция Mouse 4 перемещает курсор в заданную позицию. Перед обращением к драйверу в регистры сх и dx помещаются значения координат х и Y. Выходные параметры у функции отсутствуют.
Здесь имеется в виду тот курсор, который обычно рисует драйвер мыши. Как уже говорилось, при установке режимов VESA драйвер не может работать с курсором. Поэтому при выполнении данной функции указанная позиция просто фиксируется в счетчиках драйвера, содержащих текущие координаты.
Для перемещения курсора в центр экрана значения координат составляют х = horsize/2, Y = versize/2. После установки этих величин можно нарисовать изображение курсора на экране.
Напомним, что при работе в стандартных видеорежимах IBM драйвер автоматически определяет границы рабочего поля и принудительно помещает изображение курсора в центр экрана (если курсор включен).
Новые переменные
При выполнении подготовительных действий надо настроить не только драйвер, но и задачу. В процессе выполнения задачи будет неоднократно анализироваться перемещение мыши и состояние ее кнопок. Для того чтобы анализ был возможен, в разделе данных программы должны быть зарезервированы перечисленные в примере 6.8 переменные.
Пример 6.8. Переменные, используемые при работе с мышью.
Winpnt dw 2; окно видеопамяти, в котором расположен курсор Offspnt dw 22848 смещение изображения курсора в этом окне Xpointer dw 320 текущая X координата курсора (немер столбца) Ypointer dw 240 текущая Y координата курсора (номер строки) Mstatus db 0 текущее состояние манипулятора "мышь" LBevent db 0 изменение состояния левой кнопки RBevent db 0 изменение состояния правой кнопки
В переменных winpnt и offspnt хранится адрес видеопамяти для левой верхней точки изображения курсора, они уже использовались в Примерах 6.4, 6.5 и 6.6 данной главы. Переменные Xpointer и Ypointer содержат тот же адрес, но представленный в виде номеров строки и столбца. В примере 6.8 указаны их исходные значения для режима VESA ioih при условии, что курсор находится в центре экрана. Вычисления значений этих четырех переменных производится в примере 6.9.
Три последние переменные примера 6.8 имеют размер байта. В исходном состоянии они должны быть очищены, что и делается при их описании. Mstatus содержит данные о текущем состоянии манипулятора, a LBevent и RBevent – коды конкретного состояния левой (LB) и правой (RB) кнопок мыши. Как формируются текущие значения этих переменных, показано в примере 6.12.