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

📄 comprn.cpp

📁 vt100终端仿真程序
💻 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 + -