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

📄 edit.cpp

📁 vt100终端仿真程序
💻 CPP
字号:

#include "stdafx.h"
#include "edit.h"
#include "Vt100Disp.h"
#include "screen.h"


extern int g_iArrPara[50];	//参数数组
extern struct  struScreen struScrMsp;
extern CharStru ScreenBuf[24][132];
extern int iWidth;
//extern ClearScreen();

//编辑****************************************



//插入方式	
//CSI 4 h	插入方式:新显示字符使光标位置后的原来显示字符右移,移出边界的字符丢失。
int SetInsertMode()
{
	return 0;
}


//替代方式	
//CSI 4 l	替代方式:新显示字符替代光标位置字符显示。
int SetReplaceMode()
{
	return 0;
}

//清除行	
//CSI K或CSI 0 K	清除光标至行末字符,包括光标位置,行属性不受影响。
//CSI 1 K	清除行首至光标位置字符,包括光标位置,行属性不受影响。
//CSI 2 K	清除光标所在行的所有字符。
//清除光标至行末字符,包括光标位置,行属性不受影响。"\x1b[K",
				 //同上"\x1b[0K",
//清除行首至光标位置字符,包括光标位置,行属性不受影响。"\x1b[1K",
//清除光标所在行的所有字符"\x1b[2K",

int ClearRowK()
{
	ClearBuf(struScrMsp.iYPos,struScrMsp.iXPos ,struScrMsp.iYPos,iWidth-1);
	Refresh(struScrMsp.iYPos,struScrMsp.iXPos ,struScrMsp.iYPos,iWidth-1);
	return 0;
}

int ClearRow1K()
{
	ClearBuf(struScrMsp.iYPos,0 ,struScrMsp.iYPos,struScrMsp.iXPos);
	Refresh(struScrMsp.iYPos,0 ,struScrMsp.iYPos,struScrMsp.iXPos);
	return 0;
}

int ClearRow2K()
{
	ClearBuf(struScrMsp.iYPos,0 ,struScrMsp.iYPos,iWidth-1);
	Refresh(struScrMsp.iYPos,0 ,struScrMsp.iYPos,iWidth-1);
	return 0;
}

//清除屏幕	
//CSI J或CSI 0 J	清除从光标至屏末字符,整行被清的行属性变成单宽单高。
//CSI 1 J	清除从屏首至光标字符,整行被清的行属性变成单宽单高。
//CSI 2 J	清除整个屏幕,行属性变成单宽单高,光标位置不变。
//清除从光标至屏末字符,整行被清的行属性变成单宽单高"\x1b[J",
				    //同上"\x1b[0J",
//清除从屏首至光标字符,整行被清的行属性变成单宽单高"\x1b[1J",
//清除整个屏幕,行属性变成单宽单高,光标位置不变	"\x1b[2J",
int ClearScreenJ()
{
	ClearScreen(0);

	return 0;
}

int ClearScreen1J()
{
	ClearScreen(1);
	return 0;
}

int ClearScreen2J()
{
	ClearScreen(2);
	return 0;
}

//清除光标至行末的"可清除"字符,不影响其它字符和行属性"\x1b[?K",
//清除光标至行末的"可清除"字符,不影响其它字符和行属性"\x1b[?0K",
int ClearRowEK()
{
	return 0;
}

//清除行首至光标位置的"可清除"字符,不影响其它字符和行属性"\x1b[?1K",
int ClearRowE1K()
{
	return 0;
}
//清除光标所在行的所有"可清除"字符,不影响其它字符和行属性"\x1b[?2K",
int ClearRowE2K()
{
	return 0;
}

//清除从光标至屏末的"可清除"字符,不影响其它字符和行属性"\x1b[?J",
//清除从光标至屏末的"可清除"字符,不影响其它字符和行属性"\x1b[?0J",
//清除从屏首至光标的"可清除"字符,不影响其它字符和行属性"\x1b[?1J",
//清除整个屏幕中的"可清除"字符,不影响其它字符和行属性"\x1b[?2J",
int ClearScreenEJ()
{
	return 0;
}

int ClearScreenE1J()
{
	return 0;
}

int ClearScreenE2J()
{
	return 0;
}

//插入行	
//CSI Pn L	从光标行起插入Pn行,如当前行至滚动区域末的行数
//小于Pn则插入行数取较小者。如果在滚动区域范围内插入,
//则光标下移,移出滚动区域的行内容丢失,光标定在行首。
//当光标不在滚动区域内时,该序列无效。
int InsertRow()
{
	int i;

	if (g_iArrPara[0]==0)
		return 1;

	struScrMsp.iTopRow =struScrMsp.iYPos ;
	for (i=0;i<g_iArrPara[1];i++)
		ScreenRollDown();
	struScrMsp.iTopRow =0;
	return 0;
}

//删除行	
/*CSI Pn M	从光标行起删除Pn行,
如当前行至区域末的行数小于Pn则删除行数取较小者。
当前行被删除,光标以下在滚动区域内的行上移,
且在区域末添加空行,光标在行首。
当光标不在滚动区域内,则该序列无效。
*/
int DeleteRow()
{
	int i;

	if (g_iArrPara[0]==0)
		return 1;

	struScrMsp.iTopRow =struScrMsp.iYPos ;
	for (i=0;i<g_iArrPara[1];i++)
		ScreenRollUp();
	struScrMsp.iTopRow =0;

	return 0;
}

//字符删除	
/*CSI Pn P	删除包括光标位置在内的Pn个字符,
光标右边的字符向左移动。
*/
int DeleteChar()
{
	int i;
	int iTrueRow;

	if (g_iArrPara[0]==0)
		return 1;

	iTrueRow=(struScrMsp.iYPos +struScrMsp.iBaseRow)%24;

	for(i=struScrMsp.iXPos;i<iWidth-g_iArrPara[1];i++)
	{
		ScreenBuf[iTrueRow][i].ch =ScreenBuf[iTrueRow][i+g_iArrPara[1]].ch ;
		ScreenBuf[iTrueRow][i].iFan  =ScreenBuf[iTrueRow][i+g_iArrPara[1]].iFan ;
		ScreenBuf[iTrueRow][i].iType =ScreenBuf[iTrueRow][i+g_iArrPara[1]].iType ;
	}

	ClearBuf(iTrueRow,i,iTrueRow,iWidth-1);

	Refresh(iTrueRow,struScrMsp.iYPos ,iTrueRow,iWidth-1);

	return 0;
}

//字符插入	
//CSI Pn @	在光标位置插入Pn个空字符,光标右边的字符都向右移动。
int InsertChar()
{
	int i;
	int iTrueRow;

	if (g_iArrPara[0]==0)
		return 1;

	iTrueRow=(struScrMsp.iYPos +struScrMsp.iBaseRow)%24;

	for(i=struScrMsp.iXPos;i<iWidth-g_iArrPara[1];i++)
	{
		ScreenBuf[iTrueRow][i+g_iArrPara[1]].ch =ScreenBuf[iTrueRow][i].ch ;
		ScreenBuf[iTrueRow][i+g_iArrPara[1]].iFan  =ScreenBuf[iTrueRow][i].iFan ;
		ScreenBuf[iTrueRow][i+g_iArrPara[1]].iType =ScreenBuf[iTrueRow][i].iType ;
	}

	ClearBuf(iTrueRow,struScrMsp.iXPos,iTrueRow,struScrMsp.iXPos+g_iArrPara[1]-1);

	Refresh(iTrueRow,struScrMsp.iYPos ,iTrueRow,iWidth-1);

	return 0;
}

//字符清除	
//CSI Pn X	清除当前光标开始右边的Pn个字符,不影响光标位置。
int ClearChar()
{
//	int i;
	int iTrueRow;

	if (g_iArrPara[0]==0)
		return 1;

	iTrueRow=(struScrMsp.iYPos +struScrMsp.iBaseRow)%24;

	ClearBuf(iTrueRow,struScrMsp.iXPos ,iTrueRow,struScrMsp.iXPos +g_iArrPara[1]);
	Refresh(iTrueRow,struScrMsp.iXPos ,iTrueRow,struScrMsp.iXPos +g_iArrPara[1]);

	return 0;
}

⌨️ 快捷键说明

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