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

union REGS reg;
void main() {

	int botm, i;
	MOUSE_STATE state;
	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("\nВведите десятичный номер видеорежима: ");
	bufptr = cgets(buf);

// Преобразуем введенное число к формату int

	new_videomode = atoi(bufptr);

	reg.h.ah = 0;
	reg.h.al = new_videomode;
	int86(0x10, &reg, &reg);

// Инициализируем мышь, определяем количество клавиш

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

	printf("\nУстановлена мышь: ");
	switch (botm) {
	  case 2:
			printf("двухклавишная"); break;
	  case 3:
			printf("трехклавишная, системы Mouse Systems"); break;
	  case 0:
	  default:
			printf("неизвестной системы"); break;
	}
	printf("\n\nСостояние мыши:\n\n");

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

	ms_on();

	while(!kbhit()) {

// Определяем состояние мыши при нажатии на левую клавишу

		i = ms_querp(&state, 0);

// Если были нажатия на левую клавишу, выводим состояние мыши

		if(i != 0) {

// Перед выводом на экран отключаем курсор, затем включаем его
// снова.

			ms_off();
			printf("Нажатие:    %2d x:%5d y:%5d\n",
				state.bottoms,
				state.x,
				state.y);
			ms_on();

		}

// Выводим состояние при отпускании клавиши

		i = ms_querr(&state, 0);
		if(i != 0) {

			ms_off();
			printf("Отпускание: %2d x:%5d y:%5d\n\n",
				state.bottoms,
				state.x,
				state.y);
			ms_on();
		}
	}
	getch();

	ms_off();

	reg.h.ah = 0;
	reg.h.al = old_videomode;
	int86(0x10, &reg, &reg);

}
