我在代码块中编写了这个程序,但在int86(0x33, ®s, ®s);
中出现了错误302。我的程序是:
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <graphics.h>
void theend();
static int mask[] =
{
/* Screen mask */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000,
/* Cursor mask */
0x0000, 0x0000, 0x381c, 0x7c3e, 0x7c3e, 0x7c3e, 0x7c3e,
0x3bdc, 0x07e0, 0x0ff0, 0x0ff0, 0x0ff0, 0x0ff0, 0x07e0,
0x03c0, 0x0000
};
void main()
{
int gdriver = DETECT, gmode, buttons;
union REGS regs;
struct SREGS sregs;
initgraph(&gdriver, &gmode, "");
regs.x.ax = 0; /* Initialize mouse */
int86(0x33, ®s, ®s);
setcolor(LIGHTCYAN);
if(regs.x.ax == 0)
{
outtextxy(0, 0, "NO MOUSE AVAILABLE");
getch();
theend();
}
regs.x.ax = 9; /* Change cursor shape */
regs.x.bx = 5;
regs.x.cx = 0;
regs.x.dx = (int)mask;
segread(&sregs);
sregs.es = sregs.ds;
int86x(0x33, ®s, ®s, &sregs);
regs.x.ax = 1; /* Show mouse pointer */
int86(0x33, ®s, ®s);
do
{
regs.x.ax = 3;
int86(0x33, ®s, ®s);
buttons = regs.x.bx & 3;
} while(buttons != 3);
regs.x.ax = 2; /* Hide mouse pointer */
int86(0x33, ®s, ®s);
theend();
}
void theend()
{
closegraph();
}
我发现一些博客,它写了关于dos.h
文件。查看dos.h
文件是否已满?新的dos.h
文件和旧的dos.h
文件之间有什么区别吗?
1条答案
按热度按时间l3zydbqr1#
我觉得你和你的编辑有问题。它将
®
更改为注册商标符号®
,这是C程序中的无效符号。编译错误“stray \302”表示程序中有无效字符。在你的例子中,字符是
®
。您应该将行int86(0x33,®s,®s)
更改为int86(0x33, ®s, ®s);
。对于函数调用
int86
,第二个参数是输入寄存器,第三个参数是输出寄存器。我想你正在尝试使用regs
为两者。请注意,最好使用两个独立的变量作为输入和输出。Documentation for int86().