logo
несколько программ / bsp33

ПрограммаMsgform

Мы подготовили исходный текст программы MSGFORM, изменяющий форму курсора в графическом режиме (листинг 3.3).

Листинг 3.3. Файлmsgform\msgform.c

// =====================================================

// Изменение формы курсора в графическом режиме

//

// (C) Фролов А.В, 1997

//

// E-mail: frolov@glas.apc.org

// WWW: http://www.glasnet.ru/~frolov

// или

// http://www.dials.ccas.ru/frolov

// =====================================================

#include <dos.h>

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

union REGS reg;

void ms_gform(int xt, int yt, char _far *form);

unsigned char form[64] =

{

// Массив маски по "И"

255, 255, 255, 255, 255, 255, 255, 255, 255, 255,

255, 255, 255, 255, 255, 255,

255, 255, 255, 255, 255, 255, 255, 255, 255, 255,

255, 255, 255, 255, 255, 255,

// Массив маски по "Исключающее ИЛИ"

127, 254, 127, 254, 127, 254, 127, 254, 127, 254,

127, 254, 127, 254, 0, 0,

0, 0, 127, 254, 127, 254, 127, 254, 127, 254, 127, 254,

127, 254, 127, 254

};

int main(void)

{

unsigned old_videomode, new_videomode;

char buf[20], *bufptr;

// Определяем текущий видеорежим

reg.x.ax = 0x0f00;

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

old_videomode = reg.h.al;

// Устанавливаем новый видеорежим

buf[0] = 10;

printf("Enter new video mode: ");

bufptr = cgets(buf);

new_videomode = atoi(bufptr);

reg.h.ah = 0;

reg.h.al = new_videomode;

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

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

reg.x.ax = 0;

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

if(reg.x.bx == 0)

{

printf("Mouse not found\n");

return -1;

}

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

ms_gform(0,0, &form[0]);

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

reg.x.ax = 1;

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

getch();

reg.h.ah = 0;

reg.h.al = old_videomode;

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

return 0;

}

void ms_gform(int xt, int yt, char _far *form)

{

struct SREGS segregs;

reg.x.ax = 9;

reg.x.bx = xt;

reg.x.cx = yt;

reg.x.dx = FP_OFF(form);

segregs.es = FP_SEG(form);

int86x(0x33,&reg,&reg,&segregs);

}