www.pudn.com > jpeg1.zip > GRAPH.C
/* ͼÐβÙ×÷×Ó³Ì */
int set_mode(int mode)
{ in.h.ah=0;
in.h.al=mode;
int86(0x10,&in,&out);
}
void Close_display()
{ while((inportb(0x3da)&8)==0);
while((inportb(0x3da)&8)==8);
outportb(0x3c4,1);
outportb(0x3c5,inportb(0x3c5)|0x20);
}
void Open_display()
{ while((inportb(0x3da)&8)==0);
while((inportb(0x3da)&8)==8);
outportb(0x3c4,1);
outportb(0x3c5,inportb(0x3c5)&0xdf);
}
int mputs(int x,int y,char *s,unsigned int bkcolor,unsigned int forecolor)
{ Hide();
in.x.ax=0x1124;
in.h.bl=25;
int86(0x10,&in,&out);
do {
in.h.ah=2; in.h.bh=0;
in.h.dh=y; in.h.dl=x++;
int86(0x10,&in,&out);
in.h.ah=9; in.h.al=*s++;
in.h.bl=forecolor; in.x.cx=1;
in.h.bh=bkcolor; int86(0x10,&in,&out);
} while(*s!='\x0');
Show();
}
int getbit(unsigned char c,int n)
{ return((c>>n)&1); }
int color()
{ int i;
char buf[30]={ 50,50,00,
20,60,36,
10,60,61,
10,54,62,
60,00,20,
60,00,10,
00,00,40,
30,31,32,
22,22,22,
50,50,50 };
outportb(0x3c8,246);
for(i=0;i<30;i++) outportb(0x3c9,buf[i]);
outportb(0x3c8,0);
for(i=0;i<64*3;i++) outportb(0x3c9,i/3);
}
int mputpixel(int x,int y,int color)
{ int offset;
unsigned long ea;
ea=(unsigned long)y*DIMX+x;
offset=ea&0xffff;
outportb(0x3c4,0x0e);
outportb(0x3c5,((ea>>16)&0x0f)^2);
pokeb(0xa000,offset,color);
}
char mgetpixel(int x,int y)
{ int offset;
unsigned long ea;
ea=(unsigned long)y*DIMX+x;
offset=ea&0xffff;
outportb(0x3c4,0x0e);
outportb(0x3c5,((ea>>16)&0x0f)^2);
return(peekb(0xa000,offset));
}
int mline(int x1,int y1,int x2,int y2,int color)
{ int i=1,x,y,n;
int dx,dy,dxs,dys;
dx=x2-x1; dy=y2-y1;
n=abs(dx);
if(n>16)&0x0f; outportb(0x3c4,0x0e);
outportb(0x3c5,(seg++)^2);
p=MK_FP(0xa000,offset);
for(i=0;i<=abs(y2-y1);i++) {
if((offset+dx>=offset)&&(offset+dx<=0xffff)) {
memset(p,color,dx); p+=dx; }
else {
cy=0;
m=(unsigned int)0xffff-offset+1;
memset(p,color,m); p+=m;
outportb(0x3c4,0x0e);
outportb(0x3c5,((seg++)&0x0f)^2);
m=dx-m;
memset(p,color,m); p+=m;
}
p+=(DIMX-dx); offset+=DIMX;
if((FP_OFF(p)>16)&0x0f; outportb(0x3c4,0x0e);
outportb(0x3c5,(seg++)^2);
p=MK_FP(0xa000,offset);
for(i=0;i<=abs(y2-y1);i++) {
if(offset+dx>=offset&&offset+dx<=0xffff) {
memcpy(buf,p,dx); buf+=dx; p+=dx; }
else {
cy=0;
m=0xffff-offset+1;
memcpy(buf,p,m);
buf+=m; p+=m;
outportb(0x3c4,0x0e);
outportb(0x3c5,((seg++)&0x0f)^2);
m=dx-m; memcpy(buf,p,m);
buf+=m; p+=m;
}
p+=(DIMX-dx);offset+=DIMX;
if((FP_OFF(p)>16)&0x0f; outportb(0x3c4,0x0e);
outportb(0x3c5,(seg++)^2);
p=MK_FP(0xa000,offset);
for(i=0;i<=abs(y2-y1);i++) {
if((offset+dx>=offset)&&(offset+dx<=0xffff)) {
memcpy(p,buf,dx); p+=dx; buf+=dx; }
else {
cy=0;
m=0xffff-offset+1;
memcpy(p,buf,m);
p+=m; buf+=m;
outportb(0x3c4,0x0e);
outportb(0x3c5,((seg++)&0x0f)^2);
m=dx-m; memcpy(p,buf,m);
p+=m; buf+=m;
}
p+=(DIMX-dx); offset+=DIMX;
if((FP_OFF(p)>16;
pvideo=MK_FP(0xa000,offset);
outportb(0x3c4,0x0e);
outportb(0x3c5,((seg++)&0x0f)^2);
for(i=0;i<=y;i++) {
if(mode) memset(buffs,255,num);
else {
read(pcx_src,buffs,num);
for(m=0;m>=flag;}
if((offset+num>=offset)&&(offset+num<=0xffff)) {
memcpy(pvideo,buffs,num); pvideo+=num; }
else {
cy=0; m=0xffff-offset+1;
memcpy(pvideo,buffs,m);
pvideo+=m;
outportb(0x3c4,0x0e);
outportb(0x3c5,((seg++)&0x0f)^2);
memcpy(pvideo,&buffs[m],num-m);
pvideo+=num-m;
}
pvideo+=(DIMX-num); offset+=DIMX;
if((FP_OFF(pvideo)>16; offset=ea&0xffff;
pvideo=MK_FP(0xA000,offset);
outportb(0x3c4,0x0e);
outportb(0x3c5,((seg++)&0x0f)^2);
for(j=0;j<=(y/2)+1;j++) {
read(pcx_src,buffs,num/2);
for(m=0;m>=flag;
for(k=0;k<=1;k++) {
if(offset+num>=offset&&offset+num<=0xffff)
for(m=0;m>16; offset=ea&0xffff;
p=MK_FP(0xA000,offset);
outportb(0x3c4,0x0e);
outportb(0x3c5,((seg++)&0x0f)^2);
buffs=(char far *)MK_FP(segment,0);
for(i=0;i=offset)&&(offset+width<=0xffff))
for(m=0;m>2;
else {
cy=0;
for(m=0;m<0xffff-offset+1;m++)
*p++=(unsigned char)*(buffs+m/C)>>2;
outportb(0x3c4,0x0e);
outportb(0x3c5,((seg++)&0x0f)^0x02);
for(m=m;m>2;
}
p+=(DIMX-width); offset+=DIMX;
if(FP_OFF(p)