⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ninput.h

📁 NEO SDK是一个跨平台的免费开源图形软件开发包。它支持基本绘图、多种格式图形显示、鼠标操 作、扩展内存和扩充内存的操作、时钟、音频播放、多种字体的汉字及英文显示等等特性;更激动人心的是
💻 H
📖 第 1 页 / 共 3 页
字号:
         {
            g_tail_count = 0;
         }
      }
   }
   #else
   g_key = key;
   #endif
}


void install_keyboard(void)
{
   g_scan_key = g_ascii_key = g_key = 0;
   memset(keyflag,0,sizeof(keyflag));
   g_head_count = g_tail_count = 0;

   old_key_int=getvect(9);
   setvect(9,new_key_int);
   g_routines |= 8;
}


void remove_keyboard(void)
{
   setvect(9,old_key_int);
   g_routines &= 247;
}


unsigned char _getch(void)
{
   if (_keyboard_installed)
   {
      while (!keypressed());
      return get_asc();
   }
   else
   {
      #ifndef NEO_sys_report_error_unused
      Errinfo_t error = {"_getch", N_KEYB_NOT_INIT, 1};
      throw_error(error);
      #endif
      return getch();
   }
}


unsigned char get_asc(void)
{
   #ifndef NEO_key_buffer_unused
   unsigned key;
   if (g_head_count != g_tail_count) /*缓冲区非空时*/
   {
      key = g_key_buf[g_tail_count];
      if ( !((++g_tail_count) < KEY_BUF_SIZE) )
      {
         g_tail_count = 0;
      }
      return key & 0xff;
   }
   return 0;
   #else
   unsigned curkey = 0;

   if (g_keypress == 1)
   {
      curkey = g_ascii_key;
      g_ascii_key = 0;
   }
   return curkey;
   #endif
}


unsigned char get_scan(void)
{
   #ifndef NEO_key_buffer_unused
   unsigned key;
   if (g_head_count != g_tail_count) /*缓冲区非空时*/
   {
      key = g_key_buf[g_tail_count];
      if ( !((++g_tail_count) < KEY_BUF_SIZE) )
      {
         g_tail_count = 0;
      }
      return (key & 0xff00) >> 8;
   }
   return 0;
   #else
   unsigned curkey = 0;
   if (g_keypress == 1)
   {
      curkey = g_scan_key;
      g_scan_key = 0;
   }
   return curkey;
   #endif
}


char keypressed(void)
{
   if (_keyboard_installed)
   {
      #ifndef NEO_key_buffer_unused
      return g_head_count != g_tail_count? TRUE : FALSE;
      #else
      if (g_keypress == 1)
      {
         g_keypress = 0;
         return TRUE;
      }
      return FALSE;
      #endif
   }
   else return kbhit();
}


char scan_asc_key(unsigned char scankey, unsigned char asckey)
{
   int i;
   if (_get_scan() == scankey)
   {
      for (i = 0; i < g_combine_keys_delay; ++i);
      return (_get_asc() == asckey?1 : 0);
   }
   else return 0;
}
#endif


#ifndef NEO_mouse_bas_unused
/*函数功能: 初始化鼠标器.                            *
 *参数说明: 无.                                      *
 *返回说明: 成功则返回鼠标器按键个数;否则返回0.      *
 *备    注: 底层鼠标控制函数.用户通过nadmouse.h中的高*
 *          鼠标控制函数间接调用                     */
int init_mouse(void)
{
   _AX=0x00;
   __int__(0x33);
   if (_AX)
   {
      return (_BX);
   }
   else
   {
      return (0);
   }
}


/*---------------------------------------------------*
 *函数功能: 获取当前鼠标光标X坐标.                   *
 *参数说明: 无.                                      *
 *返回说明: 返回光标X坐标.                           *
 *备    注: 底层鼠标控制函数.用户通过nadmouse.h中的高*
 *          鼠标控制函数间接调用                     *
 *---------------------------------------------------*/
int get_mouse_x(void)
{
   _AX=0x03;
   __int__(0x33);
   return _CX;
}


/*---------------------------------------------------*
 *函数功能: 获取当前鼠标光标Y坐标.                   *
 *参数说明: 无.                                      *
 *返回说明: 返回光标Y坐标.                           *
 *备    注: 底层鼠标控制函数.用户通过nadmouse.h中的高*
 *          鼠标控制函数间接调用                     *
 *---------------------------------------------------*/
int get_mouse_y(void)
{
   _AX=0x03;
   __int__(0x33);
   return _DX;
}


/*---------------------------------------------------*
 *函数功能: 获取当前鼠标按钮状态.                    *
 *参数说明: 无.                                      *
 *返回说明: 返回按钮状态标志                         *
 *          返回0: 表示左右按键都没按下;             *
 *          返回1: 表示左键按下;                     *
            返回2: 表示右键按下;                     *
            返回3: 表示左右键均被按下.               *
 *备    注: 底层鼠标控制函数.用户通过高*
 *          鼠标控制函数间接调用                     *
 *---------------------------------------------------*/
char get_click(void)
{
   _AX = 0x03;
   __int__(0x33);
   return _BX;
}


/*---------------------------------------------------*
 *函数功能: 获取按钮按下状态.                        *
 *参数说明: 变量key指定检查哪个键:等于0(或LEFT_KEY)时*
 *          表示检查左键;等于1(或RIGHT_KEY)时检查右键*
 *          整型指针型变量*x,*y用来记录最后一次按下指*
 *          定键时的光标坐标;*count将记录调用该功能以*
 *          来指定按键压下的总次数,超过65535溢出即置0*
 *返回说明: 返回当前鼠标按钮状态(同get_click功能) *
 *备    注: 底层鼠标控制函数.用户通过nadmouse.h中的高*
 *          鼠标控制函数间接调用                     *
 *---------------------------------------------------*/
unsigned get_press_info(int key, int *p_x, int *p_y, int *p_count)
{
   _BX = key;
   _AX = 0x05;
   __int__(0x33);
   *p_x = _CX;       /*指定键最后一次按下时的x坐标*/
   *p_y = _DX;       /*指定键最后一次按下时的y坐标*/
   *p_count = _BX; /*返回调用该功能以来指定按键压下的总次数(超过65535溢出,即置0)*/
   return _AX;
}


/*---------------------------------------------------*
 *函数功能: 获取按钮放开状态.                        *
 *参数说明: 变量key指定检查哪个键:等于0(或LEFT_KEY)时*
 *          表示检查左键;等于1(或RIGHT_KEY)时检查右键*
 *          整型指针型变量*x,*y用来记录最后一次按下指*
 *          定键时的光标坐标;*count将记录调用该功能以*
 *          来指定按键放开的总次数,超过65535溢出即置0*
 *返回说明: 返回当前鼠标按钮状态(同get_click功能)    *
 *备    注: 底层鼠标控制函数.用户通过nadmouse.h中的高*
 *          鼠标控制函数间接调用                     *
 *---------------------------------------------------*/
unsigned get_release_info(int key, int *p_x, int *p_y, int *p_count)
{
   _BX = key;
   _AX = 0x06;
   __int__(0x33);
   *p_x=_CX;       /*指定键最后一次松开时的x坐标*/
   *p_y=_DX;       /*指定键最后一次松开时的y坐标*/
   *p_count = _BX; /*返回调用该功能以来指定按键松开的总次数(超过65535溢出,即置0)*/
   return _AX;
}


void locate_mouse(int x,int y)
{
   _CX=x;
   _DX=y;
   _AX=0x04;
   __int__(0x33);
}


/*---------------------------------------------------*
 *函数功能: 显示鼠标光标.                            *
 *参数说明: 无.                                      *
 *返回说明: 无.                                      *
 *备    注: 底层鼠标控制函数.不推荐用户使用.原因是它 *
 *          在Win2000/WinXP下可能无法显示光标.       * 
 *---------------------------------------------------*/
void show_hard_cur(void)
{
   _AX = 0x01;
   __int__(0x33);
}


/*---------------------------------------------------*
 *函数功能: 隐藏鼠标光标.当鼠标光标改变了位置,要先调 *
 *          用它来隐藏原来的光标,再调用show_hard_cur()来显 *
            示新的光标,否则会破坏屏幕的显示内容.     *
 *参数说明: 无.                                      *
 *返回说明: 无.                                      *
 *备    注: 底层鼠标控制函数.由于与高版本的Windows兼 *
 *          容性不好而不推荐用户使用.                *
 *---------------------------------------------------*/
void hide_hard_cur(void)
{
   _AX = 0x02;
   __int__(0x33);
}


/*---------------------------------------------------*
 *函数功能: 设置光标的有效活动范围.                  *
 *参数说明: xmin:水平方向活动的最小坐标.             *
 *          xmax:水平方向活动的最大坐标.             *
 *          ymin:垂直方向活动的最小坐标.             *
 *          ymax:垂直方向活动的最小坐标.             *
 *返回说明: 无.                                      *
 *备    注: 底层鼠标控制函数.用户通过nadmouse.h中的高*
 *          鼠标控制函数间接调用                     *
 *---------------------------------------------------*/
void set_mouse_range(int xmin, int ymin, int xmax, int ymax)
{
   _AX = 7;
   _CX = xmin;
   _DX = xmax;
   __int__(0x33);

   _AX = 8;
   _CX = ymin;
   _DX = ymax;
   __int__(0x33);
}
#endif


/*char check_wheel(void)
{
   _AX=0x11;
   __int__(0x33);
   return g_wheel_flag = (_AX == 0x574D);
}*/


/*改变鼠标光标形状
  Hardcur_T cur:为以上定义的形状 */
#ifndef NEO_mouse_exp_unused
void mouse_shape(Hardcur_T cur)
{
   _BX = cur.hotx;
   _CX = cur.hoty;
   _ES = FP_SEG(&cur.cursor);
   _DX = FP_OFF(&cur.cursor);
   _AX = 0x09;
   __int__(0x33);
}


/*---------------------------------------------------*
 *函数功能: 设置鼠标的移动速度.                      *
 *参数说明: vx,vy的缺省值:vx=8,vy=8.值越大速度越慢   *
 *返回说明: 无.                                      *
 *备    注: 底层鼠标控制函数.用户通过nadmouse.h中的高*
 *          鼠标控制函数间接调用                     *
 *---------------------------------------------------*/
void set_mouse_speed(int vx,int vy)
{
   _CX = vx;
   _DX = vy;
   _AX = 0x0f;
   __int__(0x33);
}


/*---------------------------------------------------*
 *函数功能: 设置光标速度加速下限.当光标移动速度超过设*
            置的下限后,光标速度将加倍.               *
 *参数说明: ms为每秒移动的下限单位(1ms约为1/1200英寸)*
 *          ms默认值为64/S.                          *
 *返回说明: 无.                                      *
 *备    注: 底层鼠标控制函数.用户通过nadmouse.h中的高*
 *          鼠标控制函数间接调用                     *
 *---------------------------------------------------*/
void speed_limit(int ms)
{
   _DX = ms;
   _AX = 0x13;
   __int__(0x33);
}


void set_mouse_focus(char f_x, char f_y)
{
   if (g_mouse_tp)
   {
      g_mouse_tp->logic_x = -f_x;
      g_mouse_tp->logic_y = -f_y;
   }
   else
   {
      /*to be continue...*/
   }
}
#endif


/*---------------------------------------------------*
 *函数功能: 基于NEO_SDK鼠标器高级初始化.             *
 *参数说明: 无.                                      *
 *返回说明: 无.                                      *
 *备    注: 高级鼠标控制函数.用户程序必须在使用其它高*
 *          级鼠标控制函数之前首先调用.              *
 *---------------------------------------------------*/
#ifndef NEO_mouse_adv_unused
char install_mouse(void)
{
   int h, v;
   int cur_x;
   int cur_y;
   char keys = init_mouse();

   if (_mouse_installed) return FALSE;

   /*底层鼠标控制初始化*/
   if (!keys)
   {
      #ifndef NEO_sys_report_error_unused
      Errinfo_t error = {"install_mouse", NOT_INIT_MOUSE, 1};

      throw_error(error);
      return FALSE;
      #endif
   }

   if (!g_color_depth)
   {
      #ifndef NEO_sys_report_error_unused
      Errinfo_t error = {"install_mouse", ERR_VIDEO_MODE, 0};

      throw_error(error);
      #endif
   }

   if ((g_mouse_tp = (Mouse_t *)malloc( sizeof (Mouse_t) )) == NULL)
   {
      #ifndef NEO_sys_report_error_unused
      Errinfo_t error = {"install_mouse", NO_MEMORY, 0};

      throw_error(error);
      #endif
   }
   g_mouse_tp->iconbuffer_p = &g_mouse_tp->iconbuffer;

   /*将鼠标的各项属性取默认值*/
   #ifndef NEO_mouse_exp_unused
   g_mouse_tp->advclickinfo = g_mouse_tp->logic_x = g_mouse_tp->logic_y = 0;
   #else
   g_mouse_tp->advclickinfo = 0;
   #endif
   cur_x = g_mouse_tp->x = (int)((g_rect_right-g_rect_left)>>1)-32;
   cur_y = g_mouse_tp->y = (int)((g_rect_bottom-g_rect_top)>>1)-32;
   g_mouse_tp->dblclickdelay = MID_DBLCLICK;/*当两次按下左键间隔小于MID_DBLCLICK即认为是双击*/
   g_mouse_tp->oldclickinfo = -1;
   common_flags &= 0xFFFB;

   set_mouse_range(0, 0, g_rect_right, g_rect_bottom);
   locate_mouse(g_mouse_tp->x, g_mouse_tp->y);

   for (v = 0; v<32; v+=1)
   {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -