例4-19.c

来自「王为青 刘变红 编著《C语言高级编程及实例剖析》源代码」· C语言 代码 · 共 77 行

C
77
字号
/* Note:Your choice is C IDE */
#include <stdio.h>
#include <dos.h>
int vga12_point(int row,int col,int color,int xor)
{
	unsigned int bm;
	int bp,i,j;
	long int ix;
	char far *ptr(char far *)0xA0000000;
	static char x[8]={128,64,32,16,8,4,2,1};
	unsigned char t,a,b,c,d;
	if(col<0)||col>639||row<0||row>479)
		return;
	bp=col%8;
	bm=128;
	bm>>=bp;
	ix=(long)row *80L+(long)(col/8);
	t=x[bp];
	if(color<0)
		xor=1;
	if(xor!=0)
	{
		outportb(0x03CE,5); 
		outportb(0x03CF,0);
		outportb(0x03CE,4);
		outportb(0x03CF,0);
		a=*(ptr+ix)&t;
		if(a!=0)
			a=1;
		outportb(0x03CE,4);
		outportb(0x03CF,1);
		b=*(ptr+ix)&t;
		if(b!=0)
			b=2;
		outportb(0x03CE,4);
		outportb(0x03CF,2);
		c=*(ptr+ix)&t;
		if(c!=0)
			c=4;
		outportb(0x03CE,4);
		outportb(0x03CF,3);  
		d=*(ptr+ix)&t;
		if(d!=0)
			d=8;
		a=a|b|c|d;
	}
	if(color<0)
	{
		color=a;
		color=color%16;
		return(color);
	}
	outportb(0x03CE,5);
	outportb(0x03CF,2); 
	color=color%127;
	outportb(0x03CE,8);
	t=tm;
	outportb(0x03CF,t);
	outportb(0x03C4,2);
	outportb(0x03C5,255); 
	if(xor!=0)
	{
		t=*(ptr+ix);
		t=a^color;
		*(ptr+ix)=t;
	}
	else
	{    
		t=*(ptr+ix);
		*(ptr+ix)=color;
	}  
	outportb(0x03CE,8);
	outport(0x03CF,255);
	outportb(0x03CE,5);
	outportb(0x03CF,0); 
	return(color);
}

⌨️ 快捷键说明

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