Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2010, 21:55   #1
Lexus-3141
Новичок
Джуниор
 
Регистрация: 28.04.2010
Сообщений: 2
По умолчанию Проблема с самопальной функцией..

Господа, помогите с пробемкой. есть потребность использовать на Си функцию, возвращающую параметры мыши в графич.режиме... функция реализована в самопальной библиотечке mouse.h. Уже какой час бьюсь не могу понять как эту функцию использовать.. Можт подскажите - как и какой должен быть синтаксис.. Заранее благодарю.

mouse.h
PHP код:
//модуль для поддержки мыши
//для работы мыши необходимо загрузить драйвер мыши, например mouse.com
//(в Windows загрузка специальных драйверов не требуется)
//Порядок работы:
//  инициализировать графику (мышь будет работать и в текстовом режиме)
//  1)инициализировать мышь mouse_show(MOUSE_ON);
//  2)опрашивать в цикле состояние мыши с помощью вызова
//    функции position_status, которая возвращает номер нажатой кнопки
//    и координаты экрана (x,y), где располагется курсор мыши в текущий 
//    момент;
//  3)отключить мышь mouse_show(MOUSE_OFF);
//Модуль имеет дополнительные функции:
//  - mouse_screen_size - настраиваем область экрана, в которой может 
//    перемещаться курсор мыши;
//  - set_position - для перемещения курсора мыши в заданную позицию.
//Не реализованы такие стандартные функции прерывания 0x033, как изменение
//формы курсора мыши и некоторые другие.
#include <dos.h>
#include <bios.h>
#define MOUSE_ON 1
#define MOUSE_OFF 2
#define MOUSE_BUTTON_MONE 0
#define MOUSE_BUTTON_ONE 1
#define MOUSE_BUTTON_TWO 2

int mouse_status(void)
{
  
union REGS inr,outr;
  
inr.x.ax=0;
  
int86(0x33,&inr,&outr);
  if((
signed int)outr.x.ax==-1) return 1;
  return 
0;
}

void mouse_show(int show)
{
  
union REGS inr,outr;
  switch(
show)
  {
    case 
MOUSE_ON:
    case 
MOUSE_OFF:
      
inr.x.ax=show;
      
int86(0x33,&inr,&outr);
  }
}

void mouse_screen_size(int x_min,int y_min,int x_max,int y_max)
{
  
union REGS inr,outr;
  
inr.x.ax=7;
  
inr.x.cx=x_min;
  
inr.x.dx=x_max;
  
int86(0x33,&inr,&outr);
  
inr.x.ax=8;
  
inr.x.cx=y_min;
  
inr.x.dx=y_max;
  
int86(0x33,&inr,&outr);
}

void position_status(int *status,int *xc,int *yc)
{
  
union REGS inr,outr;
  
inr.x.ax=3;
  
int86(0x33,&inr,&outr);
  *
xc=outr.x.cx;
  *
yc=outr.x.dx;
  *
status=outr.x.bx;
}

void set_position(int x,int y)
{
  
union REGS inr,outr;
  
inr.x.ax=4;
  
inr.x.cx=x;
  
inr.x.dx=y;
  
int86(0x33,&inr,&outr);

Lexus-3141 вне форума Ответить с цитированием
Старый 28.04.2010, 22:06   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

кхм...а какие прерывания то в виндоуз?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 30.04.2010, 09:14   #3
Lexus-3141
Новичок
Джуниор
 
Регистрация: 28.04.2010
Сообщений: 2
По умолчанию

Усе проблема решилась, без использования этой ф-ции... Тему моно закрыть..
А на счет прерываний... У тя один процессор, а не 27. Как развязать его на обработку всего что навешано..)) В винде они точно есть, думаю в других осях тоже похожие механизмы..
Lexus-3141 вне форума Ответить с цитированием
Старый 30.04.2010, 09:56   #4
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
кхм...а какие прерывания то в виндоуз?
Человек не понимает идеологию Protection Mode ЦП
BOBAH13 вне форума Ответить с цитированием
Старый 30.04.2010, 14:16   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Lexus-3141, насчет прерываний я знаю.
посмотрите что вам BOBAH13 написал.

в защищенном режиме прерывания это в первую очередь обработчики ошибок и также прерываний от аппаратуры.

Цитата:
В винде они точно есть, думаю в других осях тоже похожие механизмы..
прерывания это механизм процессора а не ОС.

Цитата:
Как развязать его на обработку всего что навешано..))
вообще работа с устройствами идет за счет портов, а не прерываний. и обработчик прерывания может определить устройство которое его вызвало.

ЗЫ: а для кого я распинаюсь то?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с функцией UrlEncode motorway Microsoft Office Excel 3 12.04.2010 10:49
Проблема с функцией DX3DInit k1r1ch Общие вопросы Delphi 6 08.09.2009 16:29
Проблема с функцией Replace... Oooleg Microsoft Office Excel 7 02.09.2009 05:22
проблема с рекурсивной функцией world12_tk Помощь студентам 2 04.03.2009 20:57