EGL--鼠标类函数实现文件 MOUSE.INC

/*
  MOUSE.INC
*/

void pascal set_event_handler(int call_mask,void far( *location)())
{
  union REGS r;
  struct SREGS sr;
  if(MOUSE_THERE){   /* THE MOUSE FUNCTION 12 */
     r.x.ax=12;
     r.x.cx=call_mask;
     r.x.dx=FP_OFF( location );
     sr.es=FP_SEG( location );
     int86x(0x33,&r,&r,&sr);
     }
}
/*---------------------------------------------------------------------*/
void near event_processor(int event_status,int button_status,int x,int y)
     /* LOAD THE MOUSE EVENT PROGRAGM */
{
  if(MOUSE_THERE){
     if( (CMX!=x) || (CMY!=y) ){
      MOUSE_MOVED=1;
      CMX=x; CMY=y;
      }
     else
      MOUSE_MOVED=0;
     BSTATE=button_status;
     if(event_status & 2){  LBUTTON_DOWN=1; LBUTTON_UP=0;  }
     if(event_status & 8){  RBUTTON_DOWN=1; RBUTTON_UP=0;  }
     if(event_status & 4){  LBUTTON_UP=1;   LBUTTON_DOWN=0; }
     if(event_status & 16){ RBUTTON_UP=1;   RBUTTON_DOWN=0; }
  }
}
/*--------------------------------------------------------------------*/
int reset_mouse(void)   /* THE MOUSE FUNCTION 0 */
{
   _AX=0;
   geninterrupt(0x33);
   if(_AX>0){
      MOUSENUM=_AX;
      MOUSE_THERE=1;
      mouse_on();
      return(OK);
      }
   else{
      MOUSE_THERE=0;
      return(ERROR);
      }
}
/*-------------------------------------------------------------------*/
void mouse_off(void)   /* THE MOUSE FUNCTION 2 */
{
   if( !MOUSE_THERE || MOUSE_VISIBLE==0 ) return;
   _AX=2;
   geninterrupt(0x33);
   MOUSE_VISIBLE=0;
}
/*-------------------------------------------------------------------*/
void mouse_on(void)   /* THE MOUSE FUNCTION 1 */
{
   if( !MOUSE_THERE || MOUSE_VISIBLE==1 ) return;
   _AX=1;
   geninterrupt(0x33);
   MOUSE_VISIBLE=1;
}
/*-------------------------------------------------------------------*/
void mouse_shape(int shape[32],int hotx,int hoty)
{
   union REGS regs;
   struct SREGS sregs;
   mouse_off();
   regs.x.ax=9;
   regs.x.bx=hotx;
   regs.x.cx=hoty;
   regs.x.dx=FP_OFF(shape);
   sregs.es=FP_SEG(shape);
   int86x(0x33,&regs,&regs,&sregs);
   mouse_on();
}
/*------------------------------------------------------------------*/
void set_mouse_position(int x,int y)
{
   _AX=4;
   _CX=x;
   _DX=y;
   geninterrupt(0x33);
}
/*-------------------------------------------------------------------*/
/*
调用双击的条件为判断是否为左键下
当调用双击不成时,再检查一次左键按下否,如下,{则说明刚才为单击,将左键状态消去}
即:每次调用双击后,必须再调用一次单击,否则有可能丢失键击状态
if( LBUTTON_DOWN ){
  if( get_double_press() ) ... 双击如何
  else ...单击如何
  }
*/
int get_double_press(void); /* get if lbutton was pressed twice */
int get_double_press(void)
{
   int x,y;
   if( LBUTTON_DOWN ){
       LBUTTON_DOWN=0;
       x=CMX; y=CMY;
       Delay(DOUBLE_CLICK_TIME);
       if(LBUTTON_DOWN && x==CMX && y==CMY){
  LBUTTON_DOWN=0;
  LBUTTON_UP=0;
  return(1);
  }
       else{
  LBUTTON_DOWN=1;
  return(0);
  }
   }
}
/*--------------------------------------------------------------------*/
void set_text_cursor(int groundmask,int textmask)
{
   _AX=10;
   _BX=0;
   _CX=groundmask;
   _DX=textmask;
   geninterrupt(0x33);
}
/*--------------------------------------------------------------------*/
void InstallEvent(void)
{
   set_event_handler(127,event_handler);
}
/*-----------------------------------------------------------*/
void reset_event_status(void)
{
   MOUSE_MOVED=0; LBUTTON_DOWN=0;
   RBUTTON_DOWN=0; LBUTTON_UP=0;
   RBUTTON_UP=0; BSTATE=0;
}
/*------------------------------------------------------------------------*/
void set_mousex(int minx,int maxx)
{
   _AX=7;
   _CX=minx;  _DX=maxx;
   geninterrupt(0x33);
}
/*-----------------------------------------------------------------------*/
void set_mousey(int miny,int maxy)
{
   _AX=8;
   _CX=miny;  _DX=maxy;
   geninterrupt(0x33);
}

### 如何编译并安装 egl-probe 对于 `egl-probe` 的安装问题,直接通过 `pip install` 或者 `pip build` 可能会出现一些错误,比如无法找到 `egl-probe.glad` 包以及 CMake 指令报错等问题[^1]。因此,推荐的方式是从 GitHub 下载源码并手动编译安装。 以下是具体的解决方案: #### 获取源码 访问 `egl-probe` 的官方仓库地址(假设其托管于 GitHub 上)。可以通过以下命令克隆项目到本地环境: ```bash git clone https://github.com/<username>/egl-probe.git cd egl-probe ``` #### 安装依赖项 在编译之前,确保已经安装了必要的开发工具和库文件。这些可能包括但不限于: - **CMake**: 编译过程中需要用到的构建工具。 - **Python 开发包**: 如果该工具涉及 Python 脚本,则需要对应的 Python 版本及其头文件。 可以运行以下命令来安装基础依赖项(具体名称可能会因操作系统而异): ```bash sudo apt-get update && sudo apt-get install cmake python3-dev libglvnd-dev ``` #### 配置与编译 进入项目的根目录后执行以下操作完成配置和编译过程: ```bash mkdir build && cd build cmake .. make ``` 如果一切正常,在此阶段应该不会遇到任何错误提示;如果有其他缺失组件,请按照错误信息补充相应软件包后再重试。 #### 安装至系统路径 当成功编译完成后,可将其正式安装到系统的标准位置以便全局可用: ```bash sudo make install ``` 至此,整个流程结束,您现在可以在终端中测试是否能够正常使用 `egl-probe` 命令。 --- ### 注意事项 需要注意的是,如果您正在处理图形驱动程序相关的工作,那么像 PyTorch 这样的框架也需要特别关注 GPU 支持情况。例如,PyTorch 应依据个人计算机上的 CUDA 版本来决定合适的安装方式[^2]。另外,某些情况下还涉及到 X Server 中关于设备探测的部分逻辑实现细节[^3],这可能是更深层次的技术背景知识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值