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

📄 cursor.cpp

📁 vt100终端仿真程序
💻 CPP
字号:
#include "stdafx.h"
#include "cursor.h"
#include "screen.h"
#include "Vt100Disp.h"

extern int g_iArrPara[50]; //函数参数组 iParam[0] 存放参数个数,iParam[1],iParam[2]...为相应参数 
extern struct  struScreen struScrMsp;
struct struSaveCurStatus struSaveMsp;
extern HWND hOutWnd;
extern int iWidth;
//光标****************************************

//光标状态	
//0---CSI ?25h	光标显示
int SetCursorDisplay()
{	
	//??
	struScrMsp.iCursorDisplay = 0;
	SetCursor(struScrMsp.iCursorState );
//	pWnd->ShowCaret();
	return 0;
}

//1---CSI ?25l	光标消隐
int SetCursorHide()
{
	//??
	struScrMsp.iCursorDisplay = 1;
	HideCaret(hOutWnd);

	return 0;
}

//光标类型	
//0---CSI /0j	闪烁块光标
int SetCursorFlashBlock()
{
	//??
//	DisplayCursor();
	struScrMsp.iCursorState = 0 ;
	SetCursor(0);
	return 0;
}

//1---CSI /1j	闪烁线光标
int SetCursorFlashLine()
{
	//??
//	DisplayCursor();
	struScrMsp.iCursorState = 1;
	SetCursor(1);
	return 0;
}

//2---CSI /2j	稳态块光标
int SetCursorStaticBlock()
{
	//??
//	DisplayCursor();
	struScrMsp.iCursorState = 2;
	SetCursor(2);
	return 0;
}

//3---CSI /3j	稳态线光标
int SetCursorStaticLine()
{
	//??
//	DisplayCursor();
	struScrMsp.iCursorState = 3;
	SetCursor(3);
	return 0;
}

//TAB设置	
//gTabState
//0---ESC H	在当前列上设置制表位

int SetCurrentTab()
{
	struScrMsp.iArrTab[struScrMsp.iXPos] = 1;
	return 0;
}

//1---CSI g或 CSI 0 g	清除当前列上的制表位
int ClearCurrentTab()
{
	struScrMsp.iArrTab[struScrMsp.iXPos] = 0;

	return 0;
}

//2---CSI 3 g	清除所有列上的制表位
int ClearAllTab()
{
	int iLoop;

	for(iLoop=0;iLoop<iWidth;iLoop++)
		struScrMsp.iArrTab[struScrMsp.iXPos] = 0;

	return 0;
}

//光标定位	
//CSI Pl;Pc H或CSI Pl;Pc f	光标移动到Pl行Pc列
int SetCursorPositionH()
{
	if (g_iArrPara[0] != 2)
	{
		if (g_iArrPara[0]==0)
		{
			CursorMoveTo(0,0);
			return 0;
		}

		return 1;
	}

	CursorMoveTo(g_iArrPara[1]-1,g_iArrPara[2]-1);

	return 0;
}

int SetCursorPositionF()
{
	if (g_iArrPara[0] != 2)
		return 1;

	CursorMoveTo(g_iArrPara[1]-1,g_iArrPara[2]-1);

	return 0;
}


//光标移动
//	CSI Pn A	光标上移Pn行
int CursorMoveUp()
{
	if (g_iArrPara[0] != 1)
		return 1;
	
	CursorMoveTo(struScrMsp.iYPos - g_iArrPara[1],struScrMsp.iXPos);
	
	return 0;
}


//	CSI Pn B	光标下移Pn行
int CursorMoveDown()
{
	if (g_iArrPara[0] != 1)
		return 1;
	
	CursorMoveTo(struScrMsp.iYPos + g_iArrPara[1],struScrMsp.iXPos);

	return 0;
}


//	CSI Pn C	光标右移Pn列
int CursorMoveRight()
{
	if (g_iArrPara[0] != 1)
		return 1;
	
	CursorMoveTo(struScrMsp.iYPos ,struScrMsp.iXPos + g_iArrPara[1]);

	return 0;
}

//	CSI Pn D	光标左移Pn列
int CursorMoveLeft()
{
	if (g_iArrPara[0] != 1)
		return 1;
	
	if ((struScrMsp.iXPos - g_iArrPara[1]) < 0)
		struScrMsp.iXPos = 0;
	else
		struScrMsp.iXPos = struScrMsp.iXPos - g_iArrPara[1];

	//?
	CursorMoveTo(struScrMsp.iYPos ,struScrMsp.iXPos );
	
	return 0;
}

//ESC E或NEL	光标下移1行
int CursorMoveDownRow()
{
	if (struScrMsp.iYPos <struScrMsp.iButtomRow)//光标下移
		CursorMoveTo(struScrMsp.iYPos+1,struScrMsp.iXPos );
	else//滚屏
		ScreenRollUp();

	return 0;
}

//ESC M 或RT	光标上移1行
int CursorMoveUpRow()
{

	if (struScrMsp.iYPos >struScrMsp.iTopRow )
		CursorMoveTo(struScrMsp.iYPos-1,struScrMsp.iXPos);
	else
		ScreenRollDown();

	return 0;
}


// 状态保存	

//ESC 7	保存终端当前状态:
int SaveState()
{
	struSaveMsp.iXPosSave = struScrMsp.iXPos;//保存光标位置X
	struSaveMsp.iYPosSave =	struScrMsp.iYPos;//保存光标位置Y

		
	struSaveMsp.iRowBackSave = struScrMsp.iRowBack ;//保存行反绕状态 iRowBack 

	struSaveMsp.iOriginModeSave = struScrMsp.iOriginMode ;//保存原点方式 iOriginMode 

	//选择清属性 暂无
	return 0;
}


//ESC 8	恢复上述状态
int RestoreState()
{
	struScrMsp.iXPos = struSaveMsp.iXPosSave;//恢复光标位置X
	struScrMsp.iYPos =	struSaveMsp.iYPosSave;//恢复光标位置Y

		
	struScrMsp.iRowBack = struSaveMsp.iRowBackSave ;//恢复行反绕状态 iRowBack 

	struScrMsp.iOriginMode = struSaveMsp. iOriginModeSave;//恢复原点方式 iOriginMode 

	//选择清属性 暂无
	return 0;
}

//"\x1b[C",向右光标键==光标右移1行
int CursorMoveRightCol()
{
	CursorMoveTo(struScrMsp.iYPos ,struScrMsp.iXPos +1);
	
	return 0;
}

//"\x1b[D",向左光标键==光标左移1行
int CursorMoveLeftCol()			
{
	CursorMoveTo(struScrMsp.iYPos ,struScrMsp.iXPos -1);
	
	return 0;

}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -