📄 comprn.cpp
字号:
#include "stdafx.h"
#include "ComPrn.h"
#include "Pr2Comm.h"
extern int bOKI;
CommandStru PR2Comm[PRCOMM_NUM]={
{"\x1bw1",0}, //倍高
{"\x1bw0",0}, //取消倍高
{"\x1b(",0}, //设置黑体
{"\x1b)",0}, //取消黑体
{"\x1b\x61",1}, //设置字距
{"\x1b<",0}, //10CPI
{"\x1b=",0}, //12CPI
{"\x1bJ",3}, //设置左边距
{"\x1b&",2}, //设定行距
{"\x1bT",3}, //设定页顶距
{"\x1bQ",3}, //设定页面长度
{"\x1bL",3}, //绝对行定位
{"\x1bI",3}, //相对列定位
{"\x1bH",3}, //绝对列定位
{"\x1b\x21\x20",3}, //相对列定位
{"\x1bn",0}, //olivetti打印方式
{"\x1bS5",0}, //存折打印方式
{"\x1bl",0}, //清除错误
{"\x1b\x30",0}, //总清
// {"\x1b.\x1bUn",0}, //进纸
{"\x1b.",0}, //自动操作请求
{"\x1bU",1}, //进纸
{"\x1bO",0}, //出纸
{"\x1bj",0}, //状态查询
{"\x1b#0",0}, //绝对行定位以页首为基准
{"\x1b#1",0}, //绝对行定位以页顶距为基准
{"\x1bZ",0}, //设定页底
{"\x1b\x33",0}, //设置倍宽
{"\x1b\x34",0}, //取消倍宽
{"\x1b+"}, //清除上下划线打印
{"\x1b*",1}, //上下划线打印
{"\x1b[",3}, //选择字符集
////////////////////////////////////////////////////////
{"\x1b^1",0}, //设置/取消OKI打印方式,设置时可完成进纸操作
{"\x1b\x25\x39\x30",1}, //OKI设置行距
{"\x1b\x5b",0}, //OKI设置倍高
{"\x1b\x5d",0}, //OKI取消倍高
{"\x1b\x3c",0}, //OKI水平压缩
{"\x1b\x3e",0} //OKI取消水平压缩
};
int (*Pr2Fun[])(void)={
Pr2SetDoubleHigh,
Pr2SetNormal,
Pr2SetBlack,
Pr2SetStandard,
Pr2SetWordSpace,
Pr2Set10CPI,
Pr2Set12CPI,
Pr2SetLeft,
Pr2SetLineSpace,
Pr2SetPageTop,
Pr2SetPageLen,
Pr2GotoRow,
Pr2LineIn,
// Pr2MultiSpace,
Pr2GotoCol,
Pr2MultiSpace,
Pr2SetOlivetti,
Pr2SetPassbook,
Pr2ClearError,
Pr2ClearAll,
Pr2AutoWork,
Pr2PaperIn,
Pr2PaperOut,
Pr2AskStatus,
Pr2SetTopOff,
Pr2SetTopOn,
Pr2SetPageTail,
Pr2SetDoubleWidth,
Pr2SetNormalWidth,
Pr2ClearLine,
Pr2SetLine,
Pr2SetCharset,
SetOKIPrinter,
SetOKILineSpace,
Pr2SetDoubleHigh,
Pr2SetNormal,
Pr2AutoWork,
Pr2AutoWork
};
int g_nCommNo=1;
extern int gPr2Para;
pPR2Node pPr2CurrNode;
extern pPR2Node pPR2Head;
extern char Pr2CurrComm[128];
int AddPR2Comm(pPR2Node pHead,CommandStru Pr2Comm)
{
unsigned int i;
pPR2Node pParent,pSon,pNew;
pParent=pHead;
for (i=0;i<strlen(Pr2Comm.CommandLine );i++)
{
if (pParent->pLeft==NULL) //无子节点
{
//
pNew=(pPR2Node)malloc(sizeof(PR2Node));
pNew->pLeft=NULL;
pNew->pRight=NULL;
pNew->Value=Pr2Comm.CommandLine[i];
pNew->Type=0;
pNew->ParaLen =Pr2Comm.ParaLen ;
//根据判断得CommNo
if (i==strlen(Pr2Comm.CommandLine)-1)
{
pNew->CommNo=g_nCommNo;
g_nCommNo++;
}
else
pNew->CommNo=0;
pParent->pLeft =pNew;
pParent=pNew;
}
else //有节点
{
pSon=pParent->pLeft;
while(pSon->pRight !=NULL && pSon->Value !=Pr2Comm.CommandLine[i])
pSon=pSon->pRight;
if (pSon->Value !=Pr2Comm.CommandLine[i])
{
pNew=(pPR2Node)malloc(sizeof(PR2Node));
pNew->pLeft=NULL;
pNew->pRight=NULL;
pNew->Value=Pr2Comm.CommandLine[i];
pNew->Type=0;
pNew->ParaLen =Pr2Comm.ParaLen ;
//根据判断得CommNo
if (i==strlen(Pr2Comm.CommandLine)-1)
{
pNew->CommNo=g_nCommNo;
g_nCommNo++;
}
else
pNew->CommNo=0;
pSon->pRight =pNew;
pParent=pNew;
}
else
pParent=pSon;
}
}
return 0;
}
int CreatePR2Tree(pPR2Node pHead)
{
int i;
for (i=0; i<PRCOMM_NUM; i++)
AddPR2Comm( pHead, PR2Comm[i]);
return 0;
}
int TranPR2Comm(pPR2Node pHead, char * szCommand, int * CommLen)
{
pPR2Node pParent=NULL;
// int ParaLen,i;
char szParaBuf[10];
if (szCommand[0]==0x00)
{
pPr2CurrNode=pHead;
return 0;
}
if (pHead==NULL)
{
pPr2CurrNode=pPR2Head;
return 1;
}
pParent=pHead->pLeft ;
(*CommLen)++;
Pr2CurrComm[strlen(Pr2CurrComm)]=szCommand[0];
while (pParent->Value != szCommand[0] && pParent->pRight != NULL)
pParent=pParent->pRight ;
if (pParent->Value != szCommand[0] )
{
pPr2CurrNode=pPR2Head;
return 1;
}
else
{
if (pParent->CommNo ==0)
return TranPR2Comm(pParent,szCommand+1,CommLen);
else
{
if (pParent->ParaLen !=0)
{
// char ParaBuf[5];
memset(szParaBuf,0x00,sizeof(szParaBuf));
memcpy(szParaBuf,szCommand+1,pParent->ParaLen );
if (bOKI==0)
gPr2Para=atoi(szParaBuf);
else
gPr2Para=(unsigned char)szParaBuf[0];
(*CommLen)+=pParent->ParaLen ;
}
Pr2Fun[pParent->CommNo -1]();
pPr2CurrNode=pPR2Head;
return 0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -