📄 例5-2.c
字号:
/* Note:Your choice is C IDE */
#include <stdio.h>
#include <graphics.h>
#include <io.h>
#include <dos.h>
#include <conio.h>
#define MOUSE_ID 0x33
dpkeybf(int x,int y) /*显示键盘缓冲区函数 */
{
unsigned char i,p;
textcolor(7); /* 预置字符显示的前景色 */
gotoxy(x+1,y+2);
cprintf("0040:001e(L)"); /* 显示键盘缓冲区的第一地址(字的低字节) */
gotoxy(x+1,y+3);
cprintf("0040:001e(H)"); /* 显示键盘缓冲区的第一地址(字的高字节) */
for(i=0;i<32;i=i+2)
{
gotoxy(x+16+((4*i)>>1),y);
cprintf("%3d",i); /* 显示键盘缓冲区变换的字地址指示 */
}
for(i=0x1e;i<0x3e;i++) /* 显示键盘缓冲区从41E~42D的所有内容 */
{
textcolor(7);
gotoxy(x+16+4*((i-0x1e)>>1),y+2+(((i-0x1e))&0x01)); /* 定义显示位置 */
p=peekb(0x40,i); /* 读键盘缓冲区单元 */
cprintf("%3hx",p); /* 显示键盘缓冲区单元内容 */
textcolor(14);
gotoxy(x+16+2*(peekb(0x40,0x1a)-0x1e),y+2);
cprintf(">"); /* 显示键盘缓冲区首指针,用“>”表示 */
textcolor(15);
gotoxy(x+16+2*(peekb(0x40,0x1c)-0x1e),y+2);
cprintf("<"); /* 显示键盘缓冲区首指针,用“<”表示 */
}
}
mosdrv(int functno,int *mb,int *mc,int *md)
{ /* 鼠标驱动程序INT 33H函数 */
union REGS regs;
regs.h.ax=functno; /* 令AX=functno */
regs.h.bx=&mb;
regs.h.cx=&mc;
regs.h.dx=&md;
int86(MOUSE_ID,®s,®s); /* INT 33H */
*mb=regs.h.bx;
*mc=regs.h.cx;
*md=regs.h.dx;
}
main() /* 主程序 */
{
int ma,mb,mc,md,mmb,mmc,mmd,flag,m;
mosdrv(0,0,0,0); /* 开启鼠标程序 */
clrscr(); /* 清屏幕 */
gotoxy(25,6);
textcolor(11);
cprintf("*** KEY BUFFER ***"); /* 显示键盘缓冲区的标题 */
gotoxy(50,23);
textcolor(11);
cprintf("*** CONDITION OF MOUSE ***"); /* 显示鼠标状态的标题 */
while(1)
{
mmb=mb; /* 保存上次鼠标状态,按键(mb),位置(mc,md) */
mmc=mc;
mmd=md;
mosdrv(3,&mb,&mc,&md); /* 读鼠标状态,按键(mb),位置(mc,md) */
if(mb==1) /* mb==1表示左键按下 */
{
mosdrv(1,0,0,0); /* 打开鼠标光标显示功能 */
m=peek(0x40,0x1c);
poke(0x40,0x1a,m); /* 清键盘缓冲区,令首指针=尾指针 */
}
if(mb==2) /* mb==2表示右键按下 */
{
flag=1;
gotoxy(1,1);
printf("Left key:Cursor On,Clear KeyBuffer,\nRight Key:Help,\nDouble Key:Cursor off and exit.");
} /* 显示帮助信息 */
else if(flag==1)
{
flag=0;
gotoxy(1,1);
printf("\n\n"); /* 清除刚才显示的帮助信息 */
}
if(mb==3) /* mb==3表示左右键均被按下 */
{
mosdrv(2,0,0,0); /* 关闭鼠标光标显示功能 */
exit(1); /* 退出循环,程序结束 */
}
if((mc!=mmc)||(md!=mmd)||(mb!=mmb))
{
gotoxy(50,25); /* 如果鼠标状态发生变化,则在(50,25)处暗示鼠标状态的变化 */
printf("x:%3d,y:%3d,1/r button:%4d",mc/8,md/8,mb);
}
dpkeybf(0,8); /* 在(0,8)的位置显示键盘缓冲区的内容 */
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -