📄 pr2driver.c
字号:
{"\x1bH\x00" , 0 }, /*12 _OKI_ABSCOL%03d 绝对列定位 */
{"\x00" , 0 }, /*13 _OKI_RLTCOL%03d 相对列定位 */
{"\x00" , 0 }, /*14 暂时关闭辅口 */
{"\x00" , 0 }, /*15 取消暂时关闭辅口 */
{"\x00" , 0 }, /*16 置检测纸边标志 */
{"\x00" , 0 }, /*17 取消置检测纸边标志*/
{"\x1bU\x00" , 0 }, /*18 _OKI_DUWIDTH 倍宽 */
{"\x1bR\x00" , 0 }, /*19 _OKI_NODUWIDTH 取消倍宽 */
{"\x1b]\x00" , 0 }, /*20 _OKI_NODUHEIGHT 取消倍高 */
{"\x1b[\x1bU\x00" , 0 }, /*21 _OKI_DUHEIGHTWIDTH倍高倍宽 */
{"\x1b]\x1bR\x00" , 0 }, /*22 _OKI_NODUHEIGHTWIDTH取消倍高倍宽 */
{"\x1bj\x00" , 0 }, /*23 _OKI_NOBOLDFONT 取消黑体 */
{"\x18\x00" , 0 }, /*24 _OKI_RESET 总清 */
{"\x00" , 0 }, /*25 _OKI_AUTOOPRT 赋予自动操作 */
{"\x00" , 0 }, /*26 _OKI_OLIVETTI 设置_OKI_OLIVETTI方式 */
{"\x00" , 0 }, /*27 _OKI_OPRREQ 设置操作员请求 */
{"\x1c\x67\x00" , 0 }, /*28 _OKI_TRIWIDTH 三倍宽 */
{"\x1c\x68\x00" , 0 }, /*29 _OKI_NOTRIWIDTH 取消三倍宽 */
{"\x1b\x58\x00" , 0 }, /*30 _OKI_UNDERLINE 下划线 */
{"\x1b\x59\x00" , 0 }, /*31 _OKI_UNDERLINE 取消下划线 */
{"\x00" , 0 }, /*32 初始化操作 */
{"\x00" , 0 }, /*33 等待进纸 */
{"\x1b\x3c\x00" , 0 }, /*34 水平压缩 */
{"\x1b\x3e\x00" , 0 }, /*35 取消水平压缩 */
{"\x00" , 0 }, /*36 add by zhanghui 2005.5.11 */
};
struct _OKI_PrtStatus {
int paper ; /*是否进纸标志 0无纸,1有纸 */
//add for OKI
int cmdlen ;
int row ;
//end of add
int comflag ; /*关闭辅口时,记录辅口状态1开,0关 */
int detected ; /* 检测纸边标志,默认检测 */
int cpi ; /* 设置列距 输入参数 字符/英寸 */
/* 0,1 10 cpi */
/* 2 12 cpi */
/* 3 15 cpi */
/* 4 16.6cpi */
/* 8 17.1cpi */
int lpi ; /* 设置行距 0nn表示行步距为 nn/240英寸 */
int topmargin ; /* 设页顶距 nnn表示页顶长为nnn/240英寸 */
int pagelen ; /* 设定页长 nnn 表示行数 */
int absrow ; /* 绝对行定位nnn表示移动到第nnn行 */
int rltrow ; /* 相对行定位nnn表示向前移动nnn行 */
int abscol ; /* 绝对列定位nnn表示移动到当前行第nnn个字符处*/
int rtlcol ; /* 相对列定位 向右 移动nnn个字符 */
int macroptr ;
char macrocmd[_OKI_CMDDATALEN];
}PR2DRIVER(oki_prter);
char PR2DRIVER(OKI_LineLocation) [] = { _OKI_ESC , 0x0b,'0' ,'0' ,0x00 };//设置绝对垂直定位
char PR2DRIVER(OKI_LinePIn) [5];
char PR2DRIVER(OKI_ClearErr) [] = { 0x00 };
char PR2DRIVER(OKI_Cpi) [] = { 0x1c, 0x24, 0x09, 0x00 };
char PR2DRIVER(OKI_OKITOOLIVETTI) [] = {_OKI_ESC,'^','1',0x00 };
void PR2DRIVER(OKI_Init)();
int PR2DRIVER(OKI_SetPropAndVal) (byte device[],int len);
int PR2DRIVER(OKI_inPutPaper)(char* pPageTopMargin, char *LinePI);
int OLIVETTI_TO_OKI =0;
int absLine = 2;
/***********************OKI仿真声明end***********************************/
/*************************************************************************************
********************************初始化打印参数,同时进纸*******************************
*************************************************************************************/
void usleep(int tm){
Sleep(tm);
}
void PR2DRIVER(print)(char* str,int ret){
printf("%s %d",str,ret);
}
int PR2DRIVER(Init)()
{
//修改初始化值
PR2DRIVER(prter).paper = 0 ; /* 是否进纸标志 0无纸,1有纸 */
//add by zhanghui,2005.5.11
//PR2DRIVER(prter).msf_direction = 0;
//PR2DRIVER(prter).papernotout = 0;
PR2DRIVER(prter).comflag = 0 ; /* 关闭辅口时,记录辅口状态1开,0关 */
PR2DRIVER(prter).detected = 0 ; /* 检测纸边标志,默认检测 */
PR2DRIVER(prter).cpi = 0 ; /* 设置列距 输入参数 字符/英寸 */
/* 0,1 10 cpi */
/* 2 12 cpi */
/* 3 15 cpi */
/* 4 16.6cpi */
/* 8 17.1cpi */
PR2DRIVER(prter).lpi = 0 ; /* 设置行距 0nn表示行步距为 nn/240英寸 */
PR2DRIVER(prter).topmargin= 070 ; /* 设页顶距 nnn表示页顶长为nnn/240英寸 */
PR2DRIVER(prter).pagelen = 070 ; /* 设定页长 nnn 表示行数 */
PR2DRIVER(prter).absrow = 0 ; /* 绝对行定位nnn表示移动到第nnn行 */
PR2DRIVER(prter).rltrow = 0 ; /* 相对行定位nnn表示向前移动nnn行 */
PR2DRIVER(prter).abscol = 0 ; /* 绝对列定位nnn表示移动到当前行第nnn个字符处*/
PR2DRIVER(prter).rtlcol = 0 ; /* 相对列定位 向右 移动nnn个字符 */
PR2DRIVER(prter).macroptr = 0 ;
memset(PR2DRIVER(prter).macrocmd,0x00,_PR2DRIVER_CMDDATALEN);
PR2DRIVER(OKI_Init)();
return 0;
}
/*******************************************************************
检测发送进纸命令后,打印机进纸成功与否状态
函数返回值:0 状态正常,
-1 状态不正常,但是打印机有返回值,
-2 打印机无返回值
*******************************************************************/
int PR2DRIVER(checkInputPaper)()
{
char retbuf[4];
int i;
int ret;
PR2DRIVER(WriteComm)(PR2DRIVER(AutoOprt),strlen(PR2DRIVER(AutoOprt)));
memset(retbuf,0x00,4);
for(i=0;i<3;) {
ret=PR2DRIVER(ReadComm)(retbuf+i,1);
if(ret<0)
return ret;
if(retbuf[0]==0x1b)
i++;
if(retbuf[i] <0)
break;
}
retbuf[i]=0;
if(!strcmp(retbuf,PR2DRIVER(AutoOprtOk)))
return 0;
return 1;
}
/***************************************************************
打印机进纸函数:
使用oliv 命令集
返回值: 0 成功
***************************************************************/
int PR2DRIVER(inPutPaper)(char* pPageTopMargin, char *LinePI)
{
/* 每次进纸都作打印机类型检测 */
/* 以应付屏幕打印与打印机打印之间的切换 */
/**********************************************************/
unsigned int i ;
char ch;
int status=0;
int ret;
time_t ltime;
//time_t now;
time(<ime );
PR2DRIVER(WriteComm)(PR2DRIVER(ClearErr) ,strlen(PR2DRIVER(ClearErr) ));
while(1)
{
PR2DRIVER(WriteComm)(PR2DRIVER(OpenPrt) ,strlen(PR2DRIVER(OpenPrt) ));
PR2DRIVER(WriteComm)(PR2DRIVER(ClearErr) ,strlen(PR2DRIVER(ClearErr) ));
PR2DRIVER(WriteComm)(PR2DRIVER(OliveBook),strlen(PR2DRIVER(OliveBook)));
PR2DRIVER(WriteComm)(PR2DRIVER(ClearErr) ,strlen(PR2DRIVER(ClearErr) ));
PR2DRIVER(WriteComm)(PR2DRIVER(PaperLength),strlen(PR2DRIVER(PaperLength)));
PR2DRIVER(WriteComm)(PR2DRIVER(ClearErr) ,strlen(PR2DRIVER(ClearErr) ));
if((ret=PR2DRIVER(checkPrtAnswerState)())!=0)
{
printf("ret is %d!\n",ret);
#ifdef _DEBUG_PR2DRIVER
PR2DRIVER(print)( "ret=PR2DRIVER(checkPrtAnswerState)() =%d\n",ret);
#endif
PR2DRIVER(WriteComm)(PR2DRIVER(Reset) ,strlen(PR2DRIVER(Reset)));
PR2DRIVER(WriteComm)(PR2DRIVER(ClosePrt),strlen(PR2DRIVER(ClosePrt)));
usleep(100);
continue;
}
while(1)
{
PR2DRIVER(WriteComm)(PR2DRIVER(ClearErr),strlen(PR2DRIVER(ClearErr)));
if((status=PR2DRIVER(checkInputPaper)()))
{
PR2DRIVER(WriteComm)(PR2DRIVER(ClosePrt),strlen(PR2DRIVER(ClosePrt)));
PR2DRIVER(WriteComm)(PR2DRIVER(OpenPrt) ,strlen(PR2DRIVER(OpenPrt) ));
PR2DRIVER(WriteComm)(PR2DRIVER(ClearErr) ,strlen(PR2DRIVER(ClearErr) ));
usleep(100);
continue;
}
else if(status==0)
break;
MessageBox(NULL,"hehe","hhe",MB_OK);
}
PR2DRIVER(WriteComm)(PR2DRIVER(ClearErr),strlen(PR2DRIVER(ClearErr)));
if(strlen(pPageTopMargin)==0)
PR2DRIVER(WriteComm)(PR2DRIVER(PageTopMargin),strlen(PR2DRIVER(PageTopMargin)));
else
{
if(pPageTopMargin == NULL)
return -2;
for(i=0; i<strlen(pPageTopMargin); i++)
{
ch = *(pPageTopMargin+i);
if(ch<'0'||ch>'9')
return -3;
}
i= atoi(pPageTopMargin);
if((i<0)||i>999)
return -3;
pPageTopMargin = (char*)malloc(6);
memset (pPageTopMargin,0,6);
sprintf(pPageTopMargin,"\x1bT%03d",i);
PR2DRIVER(WriteComm)(pPageTopMargin,strlen(pPageTopMargin));
if(PR2DRIVER(checkPrtAnswerState)()!=0)
return -1;
free(pPageTopMargin);
}
/********GBK 2001.12.07**************/
PR2DRIVER(WriteComm)(PR2DRIVER(ToGBK),strlen(PR2DRIVER(ToGBK)));
/***************************************/
PR2DRIVER(WriteComm)(LinePI, strlen(LinePI));
PR2DRIVER(WriteComm)(PR2DRIVER(LineLocation),strlen(PR2DRIVER(LineLocation)));//实际上进纸指令
if(PR2DRIVER(checkPrtAnswerState)())
{
PR2DRIVER(WriteComm)(PR2DRIVER(Reset) ,strlen(PR2DRIVER(Reset)));
PR2DRIVER(WriteComm)(PR2DRIVER(ClosePrt),strlen(PR2DRIVER(ClosePrt)));
continue;
}
else
break;
}
PR2DRIVER(WriteComm)(PR2DRIVER(PrtCmd)[5].Cmd,strlen(PR2DRIVER(PrtCmd)[5].Cmd));//正常字体
PR2DRIVER(WriteComm)("\x1b#0",3);
if(PR2DRIVER(vTPrtStateCheck)()!=0)
return -2;
PR2DRIVER(WriteComm)(PR2DRIVER(Cpi) ,strlen(PR2DRIVER(Cpi) )); //_PR2DRIVER_CPI%03d _PR2DRIVER_ESC a 3
PR2DRIVER(WriteComm)(PR2DRIVER(NewLine),strlen(PR2DRIVER(NewLine)));
PR2DRIVER(WriteComm)(PR2DRIVER(ClearErr),strlen(PR2DRIVER(ClearErr)));
PR2DRIVER(WriteComm)(PR2DRIVER(NewLine),strlen(PR2DRIVER(NewLine)));
return 0;//PR2DRIVER(checkPrtAnswerState)();
}
int PR2DRIVER(prtInit)(char* pPageTopMargin, char *LinePI)
{
/* 每次读内置磁条都作打印机类型检测和初始化,但超时需要退出 */
/**********************************************************/
unsigned int i ;
char ch;
int status=0;
int ret;
time_t ltime;
#ifdef _DEBUG_PR2DRIVER
PR2DRIVER(print)( "Time in seconds since UTC 1/1/70:",(int)ltime);
#endif
//PR2DRIVER(WriteComm)(PR2DRIVER(Reset) ,strlen(PR2DRIVER(Reset)));
PR2DRIVER(WriteComm)(PR2DRIVER(ClearErr) ,strlen(PR2DRIVER(ClearErr) ));
for(ltime = time(NULL);time(NULL)-ltime<PR2DRIVER(iIoTimeout);)
{
PR2DRIVER(WriteComm)(PR2DRIVER(OpenPrt) ,strlen(PR2DRIVER(OpenPrt) ));
PR2DRIVER(WriteComm)(PR2DRIVER(ClearErr) ,strlen(PR2DRIVER(ClearErr) ));
PR2DRIVER(WriteComm)(PR2DRIVER(OliveBook),strlen(PR2DRIVER(OliveBook)));
PR2DRIVER(WriteComm)(PR2DRIVER(ClearErr) ,strlen(PR2DRIVER(ClearErr) ));
PR2DRIVER(WriteComm)(PR2DRIVER(PaperLength),strlen(PR2DRIVER(PaperLength)));
PR2DRIVER(WriteComm)(PR2DRIVER(ClearErr) ,strlen(PR2DRIVER(ClearErr) ));
if((ret=PR2DRIVER(checkPrtAnswerState)())!=0)
{
#ifdef _DEBUG_PR2DRIVER
PR2DRIVER(print)( "ret=PR2DRIVER(checkPrtAnswerState)() =%d\n",ret);
#endif
PR2DRIVER(WriteComm)(PR2DRIVER(Reset) ,strlen(PR2DRIVER(Reset)));
PR2DRIVER(WriteComm)(PR2DRIVER(ClosePrt),strlen(PR2DRIVER(ClosePrt)));
usleep(100);
continue;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -