⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qtsyba~1.c

📁 dos下pos机程序 连接sybase数据库 使用Microsoft c7 编译
💻 C
📖 第 1 页 / 共 5 页
字号:
void DrawBar3d(int sx,int sy,int ex,int ey,
	       unsigned char FC,unsigned char FS,
	       unsigned char BC,unsigned char BS,int Size,
	       unsigned char C1,unsigned char C2)
{
  if(Size)
  {
    DrawBar(ex,sy+Size,ex+Size,ey+Size,BC,BS);
    DrawBar(sx+Size,ey,ex+Size,ey+Size,BC,BS);
  }
  RectangleFill(sx,sy,ex,ey,C1,C2,FC,FS);
}
//显示园型
void Circel(int x,int y,int R,unsigned char Co,unsigned char Li,int Att)
{
  int Di,Xi,Yi;
  Di=3-2*R;
  Xi=0,Yi=R;
  do{
      Di=(Di<0)? Di+(Xi<<2)+6:Di+((Xi-Yi)<<2)+10;
      Xi=Xi+1;
      Yi=(Di<0)? Yi:Yi-1;
      if(Att)
       { Line0(x-Xi,y-Yi,x+Xi,Co,1,COPY_PUT,0xff);
	 Line0(x-Xi,y+Yi,x+Xi,Co,1,COPY_PUT,0xff); }
      else
       { Point(x+Xi,y-Yi,Co);
	 Point(x-Xi,y-Yi,Co);
	 Point(x+Xi,y+Yi,Co);
	 Point(x-Xi,y+Yi,Co);}
    }while(Xi<=Yi);
   Xi=R,Yi=0;
   Di=3-(R<<2);
   do{
      Di=(Di<0)? Di+(Yi<<2)+6:Di+((Yi-Xi)<<2)+10;
      Yi=Yi+1;
      Xi=(Di<0)? Xi:Xi-1;
      if(Att)
       { Line0(x-Xi,y-Yi,x+Xi,Co,1,COPY_PUT,0xff);
	 Line0(x-Xi,y+Yi,x+Xi,Co,1,COPY_PUT,0xff); }
      else
       { Point(x+Xi,y-Yi,Co);
	 Point(x-Xi,y-Yi,Co);
	 Point(x+Xi,y+Yi,Co);
	 Point(x-Xi,y+Yi,Co);}
    }while(Xi>=Yi);
  if(Att)
    Line0(x-R,y,x+R,Co,1,COPY_PUT,0xff);
  else
   {
     Point(x-R,y,Co);
     Point(x+R,y,Co); }
}
/*屏幕图形处理函数 保存,恢复*/
/*定义变量*/
_segment videoseg=0xa000;         //可见段
_segment videosegex=0xaa00;       //不可见段
int _nCount=0;                  //计数
int WinWidth[5],WinHeight[5];     //保存的宽和高
unsigned _nOff[5]={0};                     //偏移地址
unsigned char _based(videoseg) *seeseg=0;
unsigned char _based(videoseg) *seesegt=0;
unsigned char _based(videosegex) *seesegex=0;
int SaveMark=0;
//
void SetGraph(int Att)
{
  if(Att)
   {
    outp(0x3ce,5);
    outp(0x3cf,0x1);
    outp(0x3ce,8);
    outp(0x3cf,0);
    outp(0x3c4,2);
    outp(0x3cf,0xf);
   }
  else
   {
    _asm{
     mov dx,0x3ce    //  outportb(0x3ce,5);
     mov al,0x5
     out dx,al
     mov dx,0x3cf    //  outportb(0x3cf,0x1);
     mov al,0x1
     out dx,al
     mov dx,0x3ce    //  outportb(0x3ce,8);
     mov al,0x8
     out dx,al
     mov dx,0xcf     //  outportb(0x3cf,0);
     mov al,0x0
     out dx,al
     mov dx,0x3c4    //  outportb(0x3c4,2);
     mov al,0x2
     out dx,al
     mov dx,0x3cf    //  outportb(0x3cf,0xf);
     mov al,0xf
     out dx,al
    }
  }
}
void RestoreGraph(int Att)
{
  if(Att)
   { outp(0x3ce,5);
     outp(0x3cf,0); }
  else
   { outp(0x3ce,5);
     outp(0x3cf,0); }
}
void GetImage(int x1,int y,int hd1,int vd1)
{
  int i,j,x;
  unsigned yoff;
  x=x1/8;
  yoff=0;
  yoff=_nOff[_nCount];

//  printf("yoff1=%d,_nCount1=%d\n",yoff,_nCount);
//  getchar();

  WinWidth[_nCount]=(hd1-x1)/8+1;
  WinHeight[_nCount]=vd1;
  SetGraph(1);
  for(j=y;j<=WinHeight[_nCount];j++)
   for(i=0;i<WinWidth[_nCount];i++)
   {
    seeseg=j*80+x+i;            //计算地址
    seesegex=yoff;
    *seesegex=*seeseg;
    yoff++;
   }
  _nCount++;
  _nOff[_nCount]=yoff;
  RestoreGraph(1);
}
void PutImage(int x1,int y)
{
  int j,i,x;
  unsigned yoff;
  x=x1/8;
  _nCount--;
  yoff=_nOff[_nCount];
  SetGraph(1);
  for(j=y;j<=WinHeight[_nCount];j++)
   for(i=0;i<WinWidth[_nCount];i++)
   {
	seeseg=j*80+x+i;            //计算地址
	seesegex=yoff;              //
	*seeseg=*seesegex;
	yoff++;
   }
  RestoreGraph(1);
}
//滚屏函数
void MoveScreen(unsigned sx1,unsigned sy1,unsigned sx2,
		unsigned sy2,unsigned tx,unsigned ty)
{
  unsigned SOff,TOff;
  unsigned Hd,Wd;
  short Mark;
  SOff=sy1*80+sx1/8;
  TOff=ty*80+tx/8;
  Hd=(sx2-sx1)/8+1;
  Wd=sy2-sy1+1;
  if(tx==sx1&&ty==sy1) return;  //不用滚屏
  if(tx<=sx1)
   {
	if(ty<=sy1) Mark=1;   /*左上*/
	else        Mark=2;   /*左下*/
   }
  else
   {
    if(ty<=sy1) Mark=3;   /*右上*/
    else        Mark=4;   /*右下*/
   }
  SetGraph(0);
  switch(Mark)
  {
   case 1:_asm{
	       push   ds
	       push   es
	       mov    ax,0xa000
	       mov    ds,ax
	       mov    es,ax
	       mov    bx,0
Next1:         mov    cx,Hd
	       mov    si,SOff
	       mov    di,TOff
	       mov    al,80
	       mul    bx
	       add    si,ax
		   add    di,ax
	       cld
	       rep    movsb
	       mov    ax,Hd
	       inc    bx
	       cmp    bx,Wd
	       jnz    Next1
	       pop    es
	       pop    ds
	      }
	  break;
   case 2:_asm{
	       push   ds
	       push   es
	       mov    ax,0xa000
	       mov    ds,ax
	       mov    es,ax
	       mov    bx,Wd
Next2:         mov    cx,Hd
	       mov    si,SOff
		   mov    di,TOff
	       mov    al,80
	       mul    bx
	       sub    ax,80
	       add    si,ax
	       add    di,ax
	       cld
	       rep    movsb
	       mov    ax,Hd
	       dec    bx
	       cmp    bx,0
	       jnz    Next2
	       pop    es
	       pop    ds
	      }
	  break;
   case 3:break;
   case 4:break;
  }
  RestoreGraph(0);
}

/*              第三部分:显示汉字函数                */
unsigned FontSeg,FontOff;                    //字模缓冲地址
unsigned char far FONT_BUF[32];                  //字模缓冲区
int Cowx,Liney;                              //列间距和行间距
unsigned char FontColor;                     //当前字符颜色
int FWriteMode;                              //当前显示方式
int FontCurX=0,FontCurY=0;                       //光标位置
unsigned char FontBuffer[2000];              //
unsigned char FontBufferCal[650];
unsigned char CancelBuffer[200];
//  初始化字符显示参数
unsigned StrToInt(char *str)
{
  unsigned Result=0,k=1,j;
  int i,l;
  l=(int)strlen(str);
  for(i=l-1;i>=0;i--)
  {
   switch(str[i])
   {
    case '0':
    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '6':
    case '7':
    case '8':
    case '9':j=str[i]-'0';
	     break;
    case 'A':
    case 'B':
    case 'C':
    case 'D':
    case 'E':
    case 'F':j=(str[i]-'A')+10;
   }
   Result+=j*k;
   k*=16;
  }
  return Result;
}

void InitFont(void)
{
  char value[15],valueex[7];
  FILE *fhz16;
  fhz16=fopen("digi.dat","r");
  fseek(fhz16,0,SEEK_SET);
  fread(FontBuffer,1,1692,fhz16); //读取字库
  fclose(fhz16);

  fhz16=fopen("cal.dat","r");
  fseek(fhz16,0,SEEK_SET);
  fread(FontBufferCal,1,647,fhz16); //读取字库
  fclose(fhz16);

  fhz16=fopen("Cancel.dat","r");
  fseek(fhz16,0,SEEK_SET);
  fread(CancelBuffer,1,200,fhz16); //读取字库
  fclose(fhz16);

  //取地址,由于FP_SEG,FP_OFF在MC6.0失效,才出了下面叟主意
  sprintf(value,"%Fp",FONT_BUF);
  uf_strmid(valueex,value,0,4);
  FontSeg=StrToInt(valueex);

  uf_strmid(valueex,value,5,4);
  FontOff=StrToInt(valueex);

  FontColor=0xff;
  FWriteMode=COPY_PUT;
  Cowx=8,Liney=18;
}
void DinitFont(void)
{
}
/* 读取汉字字模 TextFont-汉字或字符 */
int ReadFont(unsigned char *TextFont)
{
/*  long addr;
  int k=1;
  if(!fhz16) return -1;
  if(!fasc16) return -2;
  if(TextFont[0]>=0xa0)                      //是汉字
  {
   k=2;
   addr=(long)((TextFont[0]-0xa1)*94+(TextFont[1]-0xa1))*32;
   fseek(fhz16,addr,SEEK_SET);
   fread(FONT_BUF,1,32,fhz16); //读取字库
  }
  else                                        //是字符
  {
   addr=(long)(TextFont[0])*16;
   fseek(fasc16,addr,SEEK_SET);
   fread(FONT_BUF,1,16,fasc16); //读取字库
  }
  return k; */

// BC++3.1用
  unsigned TempFont,TFont;
  int k=1;
  if(TextFont[0]>=0xa0)                      //是汉字
   TFont=*(unsigned *)TextFont;
  else
   TFont=(unsigned)*TextFont;

  if(TFont&0xff00)                         //是汉字
   { k=2;
	 TempFont=(TFont<<8)&0xff00;
	 TempFont|=(TFont>>8)&0x00ff;}
  else                                        //是字符
    TempFont=TFont&0x00ff;
  reg.x.dx=TempFont;
  int86x(0x7f,&reg,&reg,&sreg);
//  if(reg.x.cflag)
  movedata(reg.x.dx,0,FontSeg,FontOff,k*16);
  return k;
}
/*把汉字字模传到显示缓冲区
  sx,sy-缓冲区的位置
  LineStyle-字模数据的地址
  n-字模行数 */
void Put(int sx,int sy,unsigned char *LineStyle,int n)
{
  int lsx,lst,j,k;
  char c;
  unsigned char n1,n2;
  lsx=sx%8,lst=sx/8;
  k=sy*80+lst;
  outp(0x3ce,0);
  outp(0x3cf,FontColor);
  outp(0x3ce,1);
  outp(0x3cf,0xff);
  outp(0x3ce,3);
  outp(0x3cf,FWriteMode);
  outp(0x3c4,2);
  outp(0x3c5,0xff);
  if(lsx)        //不是整字节开始
   for(j=0;j<n;j++)
    {
     n1=(unsigned char)(LineStyle[j]>>lsx),
     n2=(unsigned char)(LineStyle[j]<<(8-lsx));
     outp(0x3ce,8);
     outp(0x3cf,n1);
     seeseg=k;         //地址
     c=*seeseg;
     *seeseg=c;
     outp(0x3ce,8);
	 outp(0x3cf,n2);
     seeseg=k+1;         //地址
     c=*seeseg;
     *seeseg=c;
     k+=80;
    }
  else
   for(j=0;j<n;j++)
    {
      outp(0x3ce,8);
      outp(0x3cf,LineStyle[j]);
      seeseg=k;         //地址
      c=*seeseg;
      *seeseg=c;
      k+=80;
     }
  outp(0x3ce,3);
  outp(0x3cf,0);
  outp(0x3ce,8);
  outp(0x3cf,0xff);
}

int ViewOne16Char(int x,int y,unsigned char *TextFont)
{
    int i,k;
    unsigned char buf1[16],buf2[16];
    k=ReadFont(TextFont);
    if(k>0)
    {
     if(k==2)       // 汉字
      {
       for(i=0;i<16;i++)
       {
	buf1[i]=FONT_BUF[2*i];
	buf2[i]=FONT_BUF[2*i+1];}
	Put(x,y,buf1,16);
	Put(x+8,y,buf2,16);
       }
     else           // 字母
      Put(x,y,FONT_BUF,16);
	}
    return k;
}
//
int ViewOne24Char(int x,int y,unsigned char *TextFont,int Size)
{
  unsigned char c;
  unsigned j,i,w=0,l,s;
  c=*TextFont;
  if(Size==48)
  {
   for(i=1632;i<1692;i+=5)
    if(c==FontBuffer[i])
     {
      //start
      s=(unsigned)FontBuffer[i+1];
      s=s*256+(unsigned)FontBuffer[i+2];
      //
      l=(unsigned)FontBuffer[i+3];
      l=l*256+(unsigned)FontBuffer[i+4];
	  w=l/48;
      for(j=0;j<w;j++)
       {
	Put(x+j*8,y,&FontBuffer[s],48);
	s+=48;
       }
      w=w*8;
      break;
     }
  }
 else
  for(i=0;i<13;i++)
   if(c==FontBufferCal[i])
    {
     s=13+i*48;
     w=2;
     for(j=0;j<w;j++)
     {
      Put(x+j*8,y,&FontBufferCal[s],24);
      s+=24;
	 }
     w=12;
     break;
    }
 return w;
}
// 显示字符串
void DrawText(int x,int y,char *String,unsigned char Co,int MaxLine)
{
  int Tempx,Tempy;
  int Mark=0,k,Count=0;
  unsigned char TempNum,C[2]={0xff,0xff};
  Tempx=x,Tempy=y;
  FontColor=Co;
  while(*String)
  {
   TempNum=*String;
   switch(TempNum)
   {
     case 0x9: Tempx+=7*Cowx;
	 case 0x20:Tempx+=Cowx;
	       String++;
	       continue;
     case 0x0d:String++;
     case 0x0a:Tempx=x;
	       Tempy+=Liney;
	       String++;
	       break;
     case '&': Mark=1-Mark;
	       String++;
	       break;
     default:  if(MaxLine<0)   //特殊汉字
		{
		 if(MaxLine<=-10)
		  k=ViewOne24Char(Tempx,Tempy,String,24);
		 else
		  k=ViewOne24Char(Tempx,Tempy,String,48);
		 Tempx+=k;
		 String++;
		}
		   else
		{
		  k=ViewOne16Char(Tempx,Tempy,String);
		  if(Mark)
		   {
		     Put(Tempx,Tempy+Liney-4,C,2);
		     if(k==2)
		      Put(Tempx+Cowx,Tempy+Liney-4,C,2);
		     Mark=0;
		   }
		  Count+=k;
		  Tempx+=k*Cowx;
		  String+=k;

⌨️ 快捷键说明

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