📄 device.cpp
字号:
#include <errno.h>
#include <stdio.h>
#include <dos.h>
#include <bios.h>
#include <string.h>
#include <sysinfo.h>
#include "box.h"
#include "def.h"
//打印机测试函数说明。
int TestPrinter();
//原来错误中断处理程序指针。
extern void interrupt (*oldHandler)(__CPPARGS);
//新中断处理程序。
int PrHandler( int , int , int , int )
{
//显示错误。
char temp[50];
//产生消息字符串。
strcpy(temp, "打印机发生错误,请检查。");
//产生消息对话框。参见Box.cpp.
MsgBox *Msg = new MsgBox(temp);
//运行消息框。
Msg->Run();
//删除消息框。
delete Msg;
hardretn( _HARDERR_ABORT );
return 0;
}
//输出文字到打印机设备。
void
PrOut(char *buf)
{
//在此打印数据将被保存并同时输出到打印机。
//当发生不测,可简单实现重新打印。
FILE *fp;
fp=fopen("Print.$$$", "a+b");
//打印到文件。
fprintf(fp, "%s", buf);
fclose(fp);
//打印到打印机。
//打开错误处理模块。
oldHandler = _dos_getvect(0x24);
harderr( PrHandler );
switch(sys->PrnType)
{
case 0://不打印。
break;
case 1://标准设备。
if(TestPrinter()==L_OK)
{
fprintf(stdprn, "%s", buf);
}
break;
};
_dos_setvect( 0x24, oldHandler );
}
//检测打印机是否就绪。
int
TestPrinter()
{
unsigned status;
unsigned int Event;
status=_bios_serialcom(_COM_STATUS, 2, 0);
if ((status&0x10)!=0x10)
{
QuestionBox *QBox=new QuestionBox("打印机未准备好,请检查打印机.", "重试", "取消");
retry:
QBox->Run();
GetEvent(Event);
switch(Event)
{
case CMD_YES:
status=_bios_serialcom(_COM_STATUS, 2, 0);
if ((status&0x10)==0x10)
{
delete QBox;
return L_OK;
}
else
{
goto retry;
}
case EV_QUIT:
case CMD_NO:
delete QBox;
return L_ERROR;
}
}
return L_OK;
}
//---------------------------------------------------------------------
int PORT_DISPLAY=2;
int addr_list[4]={0x3f8,0x2f8,0x3e8,0x2e8};
int
out_char(char c)
{
int i,j;
outp(addr_list[PORT_DISPLAY],c);
for (i=0;i<32700;i++)
{
j = inp(addr_list[PORT_DISPLAY]+5);
if (( j & 0x60 ) == 0x60 )
{
return 0;
}
}
return 0;
}
int
Ct_Init(void)
{
bioscom(0,0xe0|0x03|0x00|0x04, PORT_DISPLAY);
outp(addr_list[PORT_DISPLAY]+1,0);
outp(addr_list[PORT_DISPLAY]+4,0x0b);
inp(addr_list[PORT_DISPLAY]);
inp(addr_list[PORT_DISPLAY]+5);
out_char(0x1b); //select u.s.a.font
out_char('f');
out_char('A');
out_char(0x1b);//select ascII Font
out_char('c');
out_char('A');
out_char(0x1b);
out_char(0x12);
out_char(0x0c);//Clear Display
out_char(0x1b);//select roll model
out_char(0x11);
out_char(0x1b);//select cursor position
out_char(0x58);
out_char(0x1);
return 0;
}
void
Send_CD5220( char* ss1)
{
int i,len;
len = strlen(ss1);
for (i=0;i<len;i++)
out_char(*(ss1+i));
}
void
Ct_Out(char *Buf1)
{
Send_CD5220(Buf1);
}
void
Ct_Clear()
{
out_char(0xC);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -