Аппаратное обеспечение персонального компьютера

       

Программа 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);

}



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