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

📄 qtsy31p.txt

📁 dos下pos机程序 连接sybase数据库 使用Microsoft c7 编译
💻 TXT
📖 第 1 页 / 共 5 页
字号:
/*
  前台收银程序作图函数库
  本函数不调用C的图形函数,而直接采用操作显示卡的方法,从而可以减少内存
  的占用量和提高显示速度

			    重庆运通资讯科技有限公司 蓝仕红 2000年11月
*/
#include <dos.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <bios.h>
#include <math.h>
#include <malloc.h>
#include <io.h>
#include <fcntl.h>
#include <stdarg.h>
#include <user.h>
#include <time.h>
#include <graphfun.h>
#include <publ.h>
#include "fujistu.h"

const int XOR_PUT=0x18;  // 异或
const int COPY_PUT=0x0;  // 复制

union REGS reg;         // DOS中断调用参数
struct SREGS sreg;
/*参数结构*/
TOption Param;
/*商品信息全局变量*/
extern _SPStruct OrigSP;      //工作缓冲区
extern _SPLists  *SPLists;
extern _SPLists  __SPLists[];
extern short __WorkCount;
extern short _SPListCount;      //当前挂起的笔数
extern char __LoginUser[];
extern char g_gz_mode[];
extern char g_gz_modeex[];
extern char g_cashcode[];     //管理员密码
extern char g_xyksy[];

extern char g_server_thk[];
extern char g_customer[];
extern char g_bc[];
extern char  g_now[];         //时间
extern int  g_lsh;            //流水号
extern int  g_xsbs;           //销售笔数
extern int  g_jycs;
extern int g_dyys;
extern char g_dyysstr[];
extern double g_flhj[5];      //付款方式数组
extern char __Preview[230][75];//缓冲区
extern char p_Formats[31][61];
extern char Yyy_No[];
extern char  _jxc_xsdb[];     // 提交表
extern short __syfs;          // 收银方式

extern int _hour,_minute,_second;
extern long __prostart,__pronow;
extern short __guxianmark;
extern short __sqlerrormark;           // 错误标记
extern int sql_yhk(YHK *rec);
extern int sql_thk(THK *rec);
extern void sql_thkclose(void);
extern void Sleep(clock_t nDelay);
extern void Reset(_SPLists *lp);
extern void ResetFK(_FKStruct *fklp);
extern int  sql_tm(_SPStruct *CurrSP,int Att);
extern int TiJiaoPingZheng(void);
extern int sql_xspz(char *_bc,int _lsh);
extern int sql_xshz(void);
extern void dysyt(int MaxLines);
extern void wsyt(int MaxLines);
extern void fun_wtjsp(void);
extern void dyfile(char *FileName,char *afxStr);

extern void SetPrintFormat(void);
extern int sql_changpw(char *PW);
//extern int jieguafie(void);
//lijing
extern void dyPrompt(char *prompt);
int InputXYK(int sx,int sy,int ex,int ey,double fkje);
int ShowTiHuoKaEx(THK *lpThk);
extern int GetFreeXYK(void);
extern void QueryTHK(char* skh);
extern int  CheckLysp(void);
extern void OpenAllDataSet(void);
extern int GetDataFromServer(const char *TableName,const char *sTableName,
			     char *Where,int Att);
extern void sql_TransData(char *Data,char *FileName,char *dtime,char *xh);
extern void TranDataToServer(void);
extern void GetDec(char *value,double dec,int ws,int Att);
extern void SleepEx(clock_t nDelay);
extern void card(char *argv_1,char *argv_2,char *argv_3,char *argv_4);
extern int sql_gzrq(void);
extern int sql_lsdh(void);
double tempsl;
CARDOUT xyk_fhxx;//zh

//zh
//int g_hyxf=0;//会员消费标志
//
//错误信息常数
char *ErrorMsg[3]={"",
		  "当前交易无销售记录,不需要挂起.",   //1
		  "最多只能挂起8笔交易"};             //2
short __clockmark=0,__cursormark=0;
void __ShowTime(void);
void OpenCurSor(TEdit *Edit);
long __guxianmarks=0;
extern short __sqlok;
extern short __WorkBuffer;         //可以挂起的笔数
extern _GQStruct __GQList[5];        //挂起工作区
extern XYKLB _XykLb[20];

TEdit *__CurEdit;
/* -------------------键盘输入处理函数----------------------*/
//把一个输入放入消息缓冲区
void InBuffer(int type,unsigned RetKey,int x,int y)
{
   if((CountS+1)%32==CountE) return;    //缓冲区满,退出
   MSG[CountS].type=type;
   MSG[CountS].h.RetKey=RetKey;
   MSG[CountS].x=x;
   MSG[CountS++].y=y;
   CountS%=32;
}
//获得键盘输入
unsigned GetInt16(void)
{
   reg.x.ax=0;
   int86x(0x16,&reg,&reg,&sreg);
   return reg.x.ax;
}
//获得输入
void GetInput(void)
{
   long k,s,e;
   s=clock();
   while(1)
    {
      if(CountS!=CountE) break;                    //缓冲区满
      if(_bios_keybrd(1))                           //键盘消息
      {
	GetInt16();
	if(reg.h.al==0)
	 InBuffer(-2,reg.x.ax,0,0);                //是功能键
	else
	 {
	  if(reg.h.ah==0)                          //是汉字内码
		//InBuffer(-3,reg.x.ax,0,0);
		InBuffer(0,reg.x.ax,0,0);
	  else if(reg.h.al<0x20)
		InBuffer(-1,reg.x.ax,0,0);         //是控制键
	       else
		InBuffer(0,reg.x.ax,0,0);          //是ASCII码
	 }
	break;
      }					     	   //鼠标消息
      __pronow=clock();
      e=__pronow;
      if(e-s>150)
      {
       s=e;
       if(__cursormark) OpenCurSor(__CurEdit);
      }
      k=__pronow-__prostart;
      k=k/(CLK_TCK-11);                            //相差
      if(k)                                        //超过1秒
      {
       if(__guxianmarks)__guxianmarks++;           //秒数加1
       __prostart=__pronow;
       _second+=k;
       _minute+=_second/60;
       _second=_second%60;
       _hour+=_minute/60;
       _minute=_minute%60;
       _hour=_hour%24;
       __ShowTime();
      }
    }
}
//获取一个消息
Msg *Getkey(void)
{
   short Temp;
   if(CountS==CountE)
     GetInput();
   Temp=CountE++;
   CountE%=32;
   return &(MSG[Temp]);
}
//检查是否有消息
int BiosKey(void)
{
  return(_bios_keybrd(_KEYBRD_READY)||CountS!=CountE);
}
//清除消息缓冲区
void ClearKey(void)
{
  while(_bios_keybrd(_KEYBRD_READY))
   GetInt16();
  CountS=CountE=0;
}
/*                       第一:设置图形模式函数系列                  */

//设置图形模式
void InitGraph(int INT10)
{
  reg.x.ax=INT10;
  int86x(0x10,&reg,&reg,&sreg); //调用中断
}
//关闭屏幕显示
void CloseScr(void)
{
 _asm{
      mov   dx,0x3c4
      mov   al,1
      out   dx,al
      mov   dx,0x3c5
      in    al,dx
      or    al,0x20
      mov   dx,0x3c5
      out   dx,al
     }
}
//打开屏幕显示
void OpenScr(void)
{
 _asm{
      mov   dx,0x3c4
      mov   al,1
      out   dx,al
      mov   dx,0x3c5
      in    al,dx
      and   al,0xdf
      mov   dx,0x3c5
      out   dx,al
     }
}
/*                        第二部分:作图函数                       */
/*图形处理核心函数,往显示缓冲区中填写数据
  LC-颜色
  LW-线宽
  WMODE-模式
  LS-线类型
*/
void Line0(int sx,int sy,int ex,unsigned char LC,int LW,
	   int WMODE,unsigned char LS)
{
   int lsx,lex,lst,let;
   unsigned char n1,n2;
   int Off;
   _asm{

     mov  ax,ex
     mov  bx,sx
     cmp  ax,bx
 //    jl   RETU
     mov  ax,sx
     and  ax,7
     mov  lsx,ax
     mov  ax,sx
     mov  cl,3
     shr  ax,cl
     mov  lst,ax
     mov  ax,ex
     and  ax,7
     mov  lex,ax
     mov  ax,ex

     mov  cl,3
     shr  ax,cl
     mov  let,ax
     mov  ax,sy
     mov  cl,6
     shl  ax,cl
     mov  bx,ax
     mov  ax,sy
     mov  cl,4
     shl  ax,cl
     add  ax,bx
     mov  Off,ax
     mov  dx,0x3ce
     mov  al,0
     out  dx,al

     mov  dx,0x3cf
     mov  al,LC
     out  dx,al
     mov  dx,0x3ce
     mov  al,1
     out  dx,al
     mov  dx,0x3cf
     mov  al,0xff
     out  dx,al
     mov  dx,0x3ce
     mov  al,3
     out  dx,al
     mov  dx,0x3cf
     mov  ax,WMODE

     out  dx,al
     mov  dx,0x3c4
     mov  al,2
     out  dx,al
			     // outportb(0x3c4,2)
     mov  dx,0x3c5
     mov  al,0xff
     out  dx,al
			     // outportb(0x3c5,0xff)
     mov  ax,let
     cmp  ax,lst
     jnz  CONT
     jmp  NEXT
CONT: xor ax,ax
     mov  al,0xff         //      if(let!=lst)
     mov  cx,lsx          //      {
     shr  al,cl           //      n1=m>>lsx
     mov  bl,LS
     xor  bh,bh
     and  ax,bx           //      n1=n1&LineStyle,
     mov  n1,al
     mov  al,0xff         //      n2=m<<(7-lex)
     mov  cx,7
     sub  cx,lex
     shl  al,cl
     and  ax,bx
     mov  n2,al           //      n2=n2&LineStyle
			     //
     mov  dx,0x3ce
     mov  al,8
     out  dx,al           //      outportb(0x3ce,8)
     mov  dx,0x3cf
     mov  al,n1
     out  dx,al           //      outportb(0x3cf,n1)
     mov  bx,Off
     add  bx,lst          //       k=OFF+lst
     mov  cx,LW
     mov  ax,0xa000       //      for(j=0;j<n;j++)
     mov  es,ax           //      { c=peekb(SEG,k)
     mov  si,bx           //        pokeb(SEG,k,c)
CONT1:  mov  al,es:[si]      //        k+=80  }
     mov  es:[si],al
     add  si,80
     loop CONT1
		     //
     mov  dx,0x3ce         //       outportb(0x3ce,8)
     mov  al,8
     out  dx,al
     mov  dx,0x3cf        //      outportb(0x3cf,n2)
     mov  al,n2
     out  dx,al
     mov  bx,Off          //      k=OFF+let
     add  bx,let
     mov  si,bx
     mov  ax,0xa000       //      for(j=0;j<n;j++)
     mov  es,ax
     mov  cx,LW
CONT2:  mov  al,es:[si]      //      { c=peekb(SEG,k)
     mov  es:[si],al      //        pokeb(SEG,k,c)
     add  si,80           //        k+=80   }
     loop CONT2
     mov  dx,0x3ce         //      outportb(0x3ce,8)
     mov  al,8
     out  dx,al
     mov  dx,0x3cf
     mov  al,LS           //      outportb(0x3cf,LineStyle)
     out  dx,al
     mov  bx,Off          //      r=OFF+lst
     add  bx,lst
     mov  di,LW           //      for(j=0;j<n;j++)
     mov  dx,let
     sub  dx,lst
     dec  dx
     mov  ax,0xa000
     mov  es,ax
CONT3:  mov  si,bx           //      k=r
     mov  cx,dx           //       for(i=1;i<let-lst;i++)
CONT4: cmp  cx,0
     jz   CONT6
     inc  si
     mov  al,es:[si]      //        c=peekb(SEG,k)
     mov  es:[si],al      //       pokeb(SEG,k,c)  }
     dec  cx
     jmp  CONT4
CONT6: add  bx,80
     dec  di
     jnz  CONT3
     jmp  EXIT
			     //
NEXT:mov  bx,7       //      else {
     sub  bx,lex          //      n1=m<<lsx
     mov  dx,bx
     add  bx,lsx          //      n1=n1>>(7-lex+lsx)
     mov  al,0xff
     mov  cx,lsx
     shl  al,cl
     mov  cx,bx
     shr  al,cl
     mov  cx,dx           //      n1=n1<<(7-lex)
     shl  al,cl
     mov  cl,LS           //      n1=n1&LineStyle
     xor  ch,ch
     and  al,cl
     mov  n1,al
     mov  dx,0x3ce         //      outportb(0x3ce,8)
     mov  al,8
     out  dx,al
     mov  dx,0x3cf         //      outportb(0x3cf,n1)
     mov  al,n1
     out  dx,al

     mov  bx,Off          //      k=OFF+lst
     add  bx,lst
     mov  ax,0xa000
     mov  es,ax
     mov  cx,LW           //      for(j=0;j<n;j++)
CONT5:  mov  al,es:[bx]      //      { c=peekb(SEG,k)
     mov  es:[bx],al      //      pokeb(SEG,k,c)
     add  bx,80           //      k+=80
     loop CONT5
EXIT:   mov  dx,0x3ce         //       outportb(0x3ce,3)
     mov  al,3
     out  dx,al
     mov  dx,0x3cf
     mov  al,0
     out  dx,al           //        outportb(0x3cf,0)
     mov  dx,0x3ce
     mov  al,8
     out  dx,al           //       outportb(0x3ce,8)
     mov  dx,0x3cf
     mov  al,0xff
     out  dx,al           //       outportb(0x3cf,0xff)
     mov  ax,0
     nop
 }
}
/*画一条直线*/
//sx,sy-直线的起点 ex,ey-直线的终点
int CurX,CurY; //当前点的位置
void Line(int sx,int sy,int ex,int ey,unsigned char LC,int LW,
	  int WMODE,unsigned char LS)
{
  long kx,ky,r;
  int TLW,Con=0;
  int x=0,y=0,k=1,m=1,j;
  CurX=ex,CurY=ey;
  if(sy==ey)
   {
     if(sx>ex)
      { TLW=sx,sx=ex,ex=TLW;}
     Line0(sx,sy,ex,LC,LW,WMODE,LS);
   }
  else if(sx==ex)
	{
	  if(sy>ey)
	   { TLW=sy,sy=ey,ey=TLW;}
	  TLW=LW;
	  LW=ey-sy+1;
	  Line0(sx,sy,ex,LC,LW,WMODE,LS);
	  LW=TLW;
	}
       else
	{
	  kx=ex-sx+1,ky=ey-sy+1;
	  r=kx*kx+ky*ky;

	  j=(labs(ky)>labs(kx))? 1:0;
	  if(sx>ex) k=-k;
	  if(sy>ey) m=-m;
	  while(r>=x*(long)x+y*(long)y)
	   {
	    if(j)
	      x=(int)(y*kx/ky);
	    else
	      y=(int)(x*ky/kx);
	    if((LS>>(7-Con%8))&1)
	      Line0(sx+x,sy+y,sx+x,LC,LW,WMODE,LS);
	    if(j) y+=m;
	    else x+=k;
	   }
	 }
}
//画点
void Point(int sx,int sy,unsigned char Pco)
{
  Line0(sx,sy,sx,Pco,1,COPY_PUT,0xff);
}
//画矩形
//sx,sy,ex,sy-坐标
//Co-填冲颜色,Type-填冲类型
void DrawBar(int sx,int sy,int ex,int ey,
	     unsigned char Co,unsigned char Type)
{
  int i;
  unsigned char CCo[2],LStyle;
  if(Type==0xff)  // 实线填充
    Line0(sx,sy,ex,Co,ey-sy+1,COPY_PUT,0xff);  // ey-sy+1=线的宽度
  else            // 非实线填冲
  {
   CCo[0]=(unsigned char)(Co&0xf);
   CCo[1]=(unsigned char)((Co>>4)&0xf);
   LStyle=Type;
   for(i=0;i<=ey-sy;i++)
   {
     Line0(sx,sy+i,ex,CCo[0],1,COPY_PUT,LStyle);
     LStyle=(unsigned char)~LStyle;
     Line0(sx,sy+i,ex,CCo[1],1,COPY_PUT,LStyle);
   }
  }
}
//
void DrawBarEx(int sx,int sy,int ex,int ey,
	       unsigned char Co,unsigned char Type,int WMODE)
{
  int i;
  for(i=0;i<=ey-sy;i++)
  {
    Line0(sx,sy+i,ex,Co,1,WMODE,Type);
    Type=(unsigned char)~Type;
  }
}

⌨️ 快捷键说明

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