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

📄 device.cpp

📁 金融pos机前台源码
💻 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 + -