📄 bh10.cpp
字号:
// BH10.cpp : Defines the entry point for the console application.
//csAuxCom.SendData(szDataBuf,dwLen)
//csAuxCOm.RcvData(szDataBuf,&dwLen)
#include "stdafx.h"
#include "windows.h"
#include "Bh10.h"
#include "ComPort.h"
//#include "time.h"
#include "auxport.h"
int gLineSpace=20;
int gCurrRow=1;
int gCurrCol;
extern CComPort csAuxCom;
extern int fFont;
extern int FirstJddw;
extern int bOKI;
extern int bChinese;
int bDoubleHigh=0;//倍高标志
int bDoubleWidth=0;//倍宽标志
int bPaperIn=0;
int iStartPrint=0;//0:未进纸;1:逻辑进纸(PR2);2:逻辑退纸(PR2),实际进纸(BH10)
int iChangeCode;//英文字符、汉字转换标志
///////////////////////////////////////////
//Bh10打印缓冲区
BH10BUF Bh10Buf[512];
int Bh10BufLen;
int Bh10Reset()// Reset(总清)
{
char ReceBuf[128];
DWORD iBytes;
csAuxCom.SendData("\x02\x01\x00\x32\x03\x36",6);
memset(ReceBuf,0x00,sizeof(ReceBuf));
csAuxCom.RcvData(ReceBuf,&iBytes);
csAuxCom.SendData("\x05",1);
memset(ReceBuf,0x00,sizeof(ReceBuf));
csAuxCom.RcvData(ReceBuf,&iBytes);
while(strcmp(ReceBuf,"\x06")!=0)
{
csAuxCom.SendData("\x05",1);
memset(ReceBuf,0x00,sizeof(ReceBuf));
csAuxCom.RcvData(ReceBuf,&iBytes);
if (iBytes>1)
{
csAuxCom.SendData ("\x06\x05",2);
memset(ReceBuf,0x00,sizeof(ReceBuf));
csAuxCom.RcvData(ReceBuf,&iBytes);
}
}
bPaperIn=0;
return 0;
}
int Bh10PaperIn()// 进纸
{
Bh10BufLen=0;
//SendCommToBh10("\x1b\x2d\x9f\x1b\x2d\x9f\x1b\x2d\x9f\x8e\xa2\x21\x21\x8e\xa1\x0d",16);
SendCommToBh10("\x1b\x2d\x9f\x1b\x2d\x9f\x1b\x2d\x9f",9);
SendCommToBh10("\x0d\x1b\x2d\x00",4);
SendCommToBh10("\x1b\x66",2);
Bh10PrintData("\xa1\xa1",2);
SendCommToBh10("\x0d\x1b\x2d\x00",4);
SendCommToBh10("\x1b\x67",2);
SendCommToBh10("\x1b\x4d",2);
SendCommToBh10("\x0d",1);
SendCommToBh10("\x0d\x1b\x2d\x00",4);
SendCommToBh10("\x1b\x49\x40\x4c",4);
bPaperIn=1;
iStartPrint=1;
bChinese=1;
return 0;
}
int Bh10PaperOut()// 退纸
{
int iRet;
int iSele;
// CloseAuxPort();
// OpenAuxPort11();
bDoubleWidth=0;
bDoubleHigh=0;
iRet=Bh10Print();
while (iRet!=0)
{
switch (iRet)
{
case 1:
MessageBox(NULL,TEXT("打印机未联结或状态错误,请检查!"),TEXT("提示"),MB_OK);
break;
case 2:
MessageBox(NULL,TEXT("进纸错误,请重新进纸!"),TEXT("提示"),MB_OK);
break;
case 3:
iSele=MessageBox(NULL,TEXT("打印错误,按OK重打,按CANCEL取消"),TEXT("提示"),MB_OKCANCEL);
if (iSele==IDCANCEL)
{
CloseAuxPort();
return 0;
}
break;
case 4:
iSele=MessageBox(NULL,TEXT("打印错误,按OK重打,按CANCEL取消"),TEXT("提示"),MB_OKCANCEL);
if (iSele==IDCANCEL)
{
CloseAuxPort();
return 0;
}
break;
}
iRet=Bh10Print();
}
CloseAuxPort();
return 0;
}
int Bh10LineMove(int Direct, int Lines)// 相对行定位
{
unsigned char m,n;
int i;
char SendBuf[10];
if (bPaperIn==0 && bOKI==0) return 0;
if (bDoubleHigh) gLineSpace=gLineSpace-4;
m=gLineSpace/64;
n=gLineSpace%64;
if (Direct==0)
{
m=m+64;
n=n+64;
memset(SendBuf,0x00,sizeof(SendBuf));
SendBuf[0]='\x1b';
SendBuf[1]='\x49';
SendBuf[2]=m;
SendBuf[3]=n;
// if (Lines>2) Lines-=2;
for (i=0;i<Lines;i++)
{
SendCommToBh10("\x0d\x1b\x2d\x00",4);
SendCommToBh10(SendBuf,4);
}
}
else
{
m=m+192;
n=n+64;
memset(SendBuf,0x00,sizeof(SendBuf));
SendBuf[0]='\x1b';
SendBuf[1]='\x49';
SendBuf[2]=m;
SendBuf[3]=n;
for (i=0;i<Lines;i++)
{
SendCommToBh10("\x0d\x1b\x2d\x00",4);
SendCommToBh10(SendBuf,4);
}
}
if (bDoubleHigh) gLineSpace=gLineSpace+4;
iChangeCode=0;
// gCurrCol=1;
return 0;
}
int EccByte(char * szDataBuf,int DataLen)//ECC校验位
{
unsigned char ch;
int i;
ch=0;
for (i=1; i<DataLen; i++)
ch+=(unsigned char)szDataBuf[i];
szDataBuf[DataLen]=ch;
return 0;
}
int Bh10PrintData1(char * szDataBuf, int DataLen, int iDoubleHigh)//输出字符
{
char SendBuf[1024];
char szDataBuf1[1024],szDataBuf2[1024],szDataBuf3[1024];
int i,j,k;
int fSpace=0;
int FirstByte;
int iSpace=6;
short int iLen=0;
int SendLen=0;
int Status;
int times;
int lByte,hByte,WordSite;
long FileOff;
HANDLE hFile;
DWORD Bytes;
char Zkdz[100];
if (DataLen==0) return 0;
memset(szDataBuf1,0x00,sizeof(szDataBuf1));
k=0;
j=0;
FirstByte=0;
for(i=0;i<DataLen;i++)
{
if (i<DataLen-1)
{
if (FirstByte==0)
{
if ((unsigned char)szDataBuf[i]>128 && (unsigned char)szDataBuf[i+1]>=64)
FirstByte=1;
}
else
FirstByte=0;
}
else
FirstByte=0;
if (szDataBuf[i]=='$' || szDataBuf[i]=='\x9d' && FirstByte==0)
{
if (szDataBuf[i]=='$')
{
szDataBuf1[k++]='\xaa';
szDataBuf1[k++]='\xa4';
j++;
}
if (szDataBuf[i]=='\x9d')
{
if ((unsigned char)szDataBuf[i+1]<0x40)
{
szDataBuf1[k++]='\xaa';
szDataBuf1[k++]='\xa4';
j++;
}
else
szDataBuf1[k++]='\x9d';
}
}
else
{
if (szDataBuf[i]=='\xa1' && szDataBuf[i+1]=='\xc3' && FirstByte==1)
{
szDataBuf1[k++]=':';
i++;
j--;
}
else
{
if (szDataBuf[i]=='\xa3' && szDataBuf[i+1]=='\xac' && FirstByte==1)
{
szDataBuf1[k++]=',';
i++;
j--;
}
else
{
if (szDataBuf[i]=='\xa3' && szDataBuf[i+1]=='\xaa' && FirstByte==1)
{
szDataBuf1[k++]='*';
i++;
j--;
}
else
szDataBuf1[k++]=szDataBuf[i];
}
}
}
}
DataLen+=j;
// memcpy(szDataBuf1,szDataBuf,DataLen);
//Font15打印
if (fFont==1)
{
if (DataLen>90)
{
while (szDataBuf1[DataLen-1]=='\x20')
DataLen--;
}
///////////////////////////////////////////////////////////////
memcpy(szDataBuf3,szDataBuf1,sizeof(szDataBuf1));
int DataLen1=DataLen;
while (szDataBuf3[DataLen1-1]=='\x20')
DataLen1--;
////////////////////////////////////////////////////////////////
times=0;
do
{
if (DataLen1<12/*66*/ && DataLen>10) break;
j=0;
k=0;
int StartChar=0;
memset(szDataBuf2,0x00,sizeof(szDataBuf2));
for (i=0;i<DataLen;i++)
{
if (szDataBuf1[i]!='\x20')
{
szDataBuf2[j++]=szDataBuf1[i];
fSpace=0;
StartChar=1;
}
else
{
if (StartChar==1)
{
if (fSpace==iSpace || fSpace==8 || fSpace==16)
k++;
else
szDataBuf2[j++]=szDataBuf1[i];
// if (fSpace==iSpace)
// {
// fSpace=0;
// iSpace+=2;
// }
}
else
{
if (fSpace==40 || fSpace==50 ||fSpace==60 ||fSpace==70)
k++;
else
szDataBuf2[j++]=szDataBuf1[i];
}
fSpace++;
}
}
DataLen-=k;
if (iSpace>2) iSpace--;
memcpy(szDataBuf1,szDataBuf2,sizeof(szDataBuf2));
times++;
if (k==0 && iSpace==2) break;
} while (DataLen>102 || (k<4 && times<2));
if (DataLen>102) DataLen=102;
Bh10PrintFont15(szDataBuf1,DataLen,iDoubleHigh);
return 0;
}
//大字打印
memset(SendBuf,0x00,sizeof(SendBuf));
iLen=0;
Status=0;
hFile= CreateFile(TEXT("gbk.24"),
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if (hFile==INVALID_HANDLE_VALUE)
return 0;
for (i=0;i<DataLen;i++)
{
if ((unsigned char)szDataBuf1[i]>=128)
{
if ((unsigned char)szDataBuf1[i]>160 && (unsigned char)szDataBuf1[i+1]>160)
{
if (Status==0)
{
memcpy(SendBuf+iLen,"\x8e\xa2",2);
iLen+=2;
}
SendBuf[iLen++]=(unsigned char)szDataBuf1[i]-128;
SendBuf[iLen++]=(unsigned char)szDataBuf1[i+1]-128;
i++;
Status=1;
}
else
{
SendDataToBh10(SendBuf,iLen,0);
memset(SendBuf,0x00,sizeof(SendBuf));
iLen=0;
Status=0;
memset(Zkdz,0x00,sizeof(Zkdz));
Zkdz[0]='\x1b';
Zkdz[1]='\x4b';
hByte=(unsigned char)szDataBuf1[i];
lByte=(unsigned char)szDataBuf1[i+1];
if (lByte<0x80)
WordSite=(hByte-0x81)*190+lByte-0x40;
else
WordSite=(hByte-0x81)*190+lByte-0x41;
FileOff=WordSite*72;
SetFilePointer(hFile,FileOff,NULL,FILE_BEGIN);
ReadFile(hFile,Zkdz+2,72,&Bytes,NULL);
SendDataToBh10(Zkdz,74,0);
i++;
}
}
else
{
if (Status==1)
{
memcpy(SendBuf+iLen,"\x8e\xa1",2);
iLen+=2;
}
SendBuf[iLen++]=szDataBuf1[i];
Status=0;
}
}
if (iLen>0)
SendDataToBh10(SendBuf,iLen,0);
CloseHandle(hFile);
/* memset(ReceBuf,0x00,sizeof(ReceBuf));
while (strcmp(ReceBuf,"\x06")!=0)
{
csAuxCom.SendData("\x05",1);
memset(ReceBuf,0x00,sizeof(ReceBuf));
csAuxCom.RcvData(ReceBuf,&iBytes);
if (iBytes>1)
{
csAuxCom.SendData ("\x06\x05",2);
memset(ReceBuf,0x00,sizeof(ReceBuf));
csAuxCom.RcvData(ReceBuf,&iBytes);
}
}
memset(DataBuf,0x00,sizeof(DataBuf));
memset(SendBuf,0x00,sizeof(SendBuf));
memcpy(DataBuf+iLen,"\x30",1);
iLen+=1;
if ((unsigned char)szDataBuf1[0] >160)
{
memcpy(DataBuf+iLen,"\x8e\xa2",2);
Status=1;
}
else
{
memcpy(DataBuf+iLen,"\x8e\xa1",2);
Status=0;
}
iLen+=2;
for (i=0;i<DataLen;i++)
{
if (Status==0 && (unsigned char)szDataBuf1[i]>160)
{
memcpy(DataBuf+iLen,"\x8e\xa2",2);
Status=1;
iLen+=2;
}
if (Status==1 && (unsigned char)szDataBuf1[i]<=160)
{
memcpy(DataBuf+iLen,"\x8e\xa1",2);
Status=0;
iLen+=2;
}
if (Status==0)
DataBuf[iLen++]=szDataBuf1[i];
else
DataBuf[iLen++]=(unsigned char)szDataBuf1[i] - 128;
}
memcpy(SendBuf+SendLen,"\x02",1);
SendLen+=1;
memcpy(SendBuf+SendLen,&iLen,2);
SendLen+=2;
memcpy(SendBuf+SendLen,DataBuf,iLen);
SendLen+=iLen;
memcpy(SendBuf+SendLen,"\x03",1);
SendLen+=1;
EccByte(SendBuf,SendLen);
SendLen+=1;
csAuxCom.SendData(SendBuf,SendLen);
memset(ReceBuf,0x00,sizeof(ReceBuf));
csAuxCom.RcvData(ReceBuf,&iBytes);
*/
return 0;
}
int Bh10AskStatus()// 状态查询
{
char ReceBuf[128];
DWORD iBytes;
memset(ReceBuf,0x00,sizeof(ReceBuf));
while (strcmp(ReceBuf,"\x06")!=0)
{
csAuxCom.SendData("\x05",1);
memset(ReceBuf,0x00,sizeof(ReceBuf));
csAuxCom.RcvData(ReceBuf,&iBytes);
if (iBytes>1)
{
csAuxCom.SendData ("\x06\x05",2);
memset(ReceBuf,0x00,sizeof(ReceBuf));
csAuxCom.RcvData(ReceBuf,&iBytes);
}
}
csAuxCom.SendData("\x02\x01\x00\x31\x03\x35",6);
memset(ReceBuf,0x00,sizeof(ReceBuf));
csAuxCom.RcvData(ReceBuf,&iBytes);
csAuxCom.SendData("\x05",1);
memset(ReceBuf,0x00,sizeof(ReceBuf));
csAuxCom.RcvData(ReceBuf,&iBytes);
while (strcmp(ReceBuf,"\x06")==0)
{
csAuxCom.SendData("\x05",1);
memset(ReceBuf,0x00,sizeof(ReceBuf));
csAuxCom.RcvData(ReceBuf,&iBytes);
}
csAuxCom.SendData("\x06",1);
if (strcmp(ReceBuf+3,"\x20\x40\x40\x49\x40\x03\x31")==0)//&& strcmp(ReceBuf+3,"\x20\x40\x40\x40\x40\x03\x28"))
return 1;
else
return 0;
}
int Bh10SetDoubleHigh()// 设置倍高
{
SendCommToBh10("\x1b\x8a",2);
SendCommToBh10("\x1b\x49\xc0\x4c",4);
SendCommToBh10("\x1b\x2d\x00",3);
bDoubleHigh=1;
if (bOKI==1)
SendCommToBh10(" ",12);
return 0;
}
int Bh10SetNormal()// 取消倍高
{
if (bOKI==1)
{
// SendCommToBh10("\x1b\x49\xc0\x4c",4);
SendCommToBh10("\x0d\x1b\x2d\x00",4);
}
SendCommToBh10("\x1b\x76",2);
if (bOKI==1)
{
// SendCommToBh10("\x1b\x49\xc0\x4c",4);
SendCommToBh10("\x0d\x1b\x2d\x00",4);
}
bDoubleHigh=0;
return 0;
}
int Bh10SetLineSpace(int LineSpace)// 设置行距
{
gLineSpace=LineSpace/2;//gLineSpace为全局变量
return 0;
}
int Bh10SetWordSpace(int WordSpace)// 设置字距
{
switch(WordSpace)
{
case 10:
SendCommToBh10("\x1b\x50",2);
break;
case 12:
SendCommToBh10("\x1b\x4d",2);
break;
default:
SendCommToBh10("\x1b\x67",2);
}
return 0;
}
int Bh10OutPut(char * szData, int iLen)
{
int i,sLen;
char PrnData[1024];
memset(PrnData,0x00,sizeof(PrnData));
for (i=0;i<iLen;i++)
{
switch(szData[i])
{
case '\x0c':
if (strlen(PrnData)>0)
{
Bh10PrintData(PrnData,strlen(PrnData));
memset(PrnData,0x00,sizeof(PrnData));
}
Bh10PaperOut();
break;
case '\x0a':
if (strlen(PrnData)>0)
{
Bh10PrintData(PrnData,strlen(PrnData));
memset(PrnData,0x00,sizeof(PrnData));
}
gCurrRow++;
Bh10LineMove(0,1);
// if (bDoubleHigh) gCurrRow++;
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -