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)