Аппаратное обеспечение IBM PC

       

Задать форму курсора в текстовом режиме


На входе: AX = 000Ah;

BX = тип курсора: 0 - определяемый программно; 1 - определяемый аппаратно;

CX = маска экрана (для BX=0) или начальная строка курсора (для BX=1);

DX = маска курсора (для BX=0) или конечная строка курсора (для BX=1).

На выходе: Регистры не используются.

С помощью этой функции программа может изменять форму курсора мыши в текстовом режиме.

В зависимости от содержимого регистра BX драйвер мыши использует курсор, определяемый аппаратными средствами, либо курсор, определяемый программно. По умолчанию используется "программный курсор", который отображается в виде символа с инвертированным значением атрибута. Курсор, сформированный аппаратными средствами, выглядит аналогично обычному текстовому курсору, его форма - прямоугольник. Размер этого прямоугольника можно задавать при помощи регистров CX и DX.

Для курсора, определяемого программно, вначале выполняется операция логического "И" над содержимым видеопамяти в том месте, куда указывает курсор, и маской экрана. Затем выполняется операция "Исключающее ИЛИ" с маской курсора.

Младший байт масок соответствует ASCII-коду символа, старший - это байт атрибута символа.

Значения, используемые по умолчанию - BX=7700h, CX=FFFFh.

Если вам надо изменить цвет курсора, не меняя его форму, задайте CX=00FFh, BX=xx00h, где xx определяет цвет (смотри описание формата байта атрибутов в третьем томе книги).

Приведем функцию для изменения формы курсора в текстовом примере и программу, создающую курсор в виде вертикальной стрелки, направленной вверх на синем фоне:

/** *.Name ms_tform *.Title Задание формы курсора в текстовом режиме * *.Descr Эта функция определяет форму курсора мыши для * текстового режима. * *.Proto void ms_tform(int type, int mask1, int mask2) * *.Params int type - тип курсора: * 0 - программный, 1 - аппаратный; * int mask1 - AND-маска экрана * или первая строка аппаратного курсора * int mask2 - XOR-маска курсора * или последняя строка аппаратного курсора * *.Return Ничего * *.Sample ms_samp6.c **/



#include <dos.h> #include <conio.h>

union REGS reg;

void ms_tform(int type, int mask1, int mask2) {

reg.x.ax = 0xA; reg.x.bx = type; reg.x.cx = mask1; reg.x.dx = mask2;

int86(0x33,&reg,&reg);

} #include <dos.h> #include <stdio.h> #include <conio.h> #include "sysp.h"

union REGS reg;

void main() {

int botm, i; MOUSE_STATE state;

// Инициализируем мышь

if(!ms_init(&botm)) { printf("\nМышь не установлена"); exit(-1); }

// Задаем новую форму для курсора мыши

ms_tform(0, 0, 0x1418);

// Включаем курсор

ms_on();

getch();

ms_off(); }



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