cfgfile.cpp

来自「vt100终端仿真程序」· C++ 代码 · 共 539 行

CPP
539
字号
// CfgFile.cpp: implementation of the CCfgFile class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"

#include "vt100.h"
#include "CfgFile.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CCfgFile::CCfgFile()
{
	GetAllCfg();
}

CCfgFile::~CCfgFile()
{
	if(m_blChanged)
		SetAllCfg();
}

int CCfgFile::GetAllCfg()
{
	FILE *hFile;
	int iRet;

	memset(&strCfgFile,0,sizeof(CFGFILE));
	m_blChanged=FALSE;

	if((hFile=fopen("\\disk\\vt100.cfg","rb"))==NULL){
		m_blChanged=TRUE;

		//set default value
		strCfgFile.bType=0;

		strcpy(strCfgFile.strComPort.szPortNum,"COM2:");
		strCfgFile.strComPort.iBaudRate=9600;
		strCfgFile.strComPort.bByteSize='\x8';
		strCfgFile.strComPort.bParity='\x0';
		strCfgFile.strComPort.bByteSize='\x8';
		strCfgFile.strComPort.bStopBit='\x0';
		strCfgFile.strComPort.bFlowControl='\x0';

		strcpy(strCfgFile.strTcpIp.szIpAdd,"139.1.9.200");
		strCfgFile.strTcpIp.iPortNum=23;

		memset(strCfgFile.strLogOnMode.szUserID,0,sizeof(strCfgFile.strLogOnMode.szUserID));
		memset(strCfgFile.strLogOnMode.szPassWord,0,sizeof(strCfgFile.strLogOnMode.szPassWord));

		strCfgFile.strTerm.bCursorMode='\x0';
		strCfgFile.strTerm.bCursorStatu='\x0';
		strCfgFile.strTerm.iWidth=80;
		strCfgFile.strTerm.iBufLen=25;
		strCfgFile.strTerm.bEcho='\x0';
		strCfgFile.strTerm.bBackSpace='\x0';
	}
	else{
		iRet=fread(&strCfgFile,sizeof(CFGFILE),1,hFile);
		fclose(hFile);

		if(iRet<=0){
			m_blChanged=TRUE;
			return 1;
		}
	}
	
	return 0;
}

int CCfgFile::SetAllCfg()
{
	FILE *hFile;

	if((hFile=fopen("\\disk\\vt100.cfg","wb"))!=NULL){
		fwrite(&strCfgFile,sizeof(CFGFILE),1,hFile);
		fclose(hFile);
	}

	return 0;
}

int CCfgFile::GetCfgItemStr(int iIndex, LPTSTR pszBuf,int iLen)
{
	char szTemp[20];
	int iStrLen,iLoop;

	switch(iIndex){
	case CONNECTTYPE:
		pszBuf[0]=strCfgFile.bType+48;
		pszBuf[1]=0;
		iLen=1;
		break;

	case PORTNAME:
		iStrLen=strlen(strCfgFile.strComPort.szPortNum);
		if(iLen>=iStrLen){
			iLen=iStrLen;
		}
		
		for(iLoop=0;iLoop<iLen;iLoop++){
			pszBuf[iLoop]=strCfgFile.strComPort.szPortNum[iLoop];
		}
			
		break;

	case BAUDRATE:
		sprintf(szTemp,"%d",strCfgFile.strComPort.iBaudRate);
		iStrLen=strlen(szTemp);
		if(iLen>=iStrLen){
			iLen=iStrLen;
		}

		for(iLoop=0;iLoop<iLen;iLoop++){
			pszBuf[iLoop]=szTemp[iLoop];
		}

		break;

	case BYTESIZE:
		pszBuf[0]=strCfgFile.strComPort.bByteSize+48;
		pszBuf[1]=0;
		iLen=1;

		break;

	case PARITY:
		pszBuf[0]=strCfgFile.strComPort.bParity+48;
		pszBuf[1]=0;
		iLen=1;
		
		break;

	case STOPBIT:
		pszBuf[0]=strCfgFile.strComPort.bStopBit+48;
		pszBuf[1]=0;
		iLen=1;

		break;

	case FLOWCTR:
		pszBuf[0]=strCfgFile.strComPort.bFlowControl+48;
		pszBuf[1]=0;
		iLen=1;

		break;

	case IPADD:
		iStrLen=strlen(strCfgFile.strTcpIp.szIpAdd);
		if(iLen>=iStrLen){
			iLen=iStrLen;
		}

		for(iLoop=0;iLoop<iLen;iLoop++){
			pszBuf[iLoop]=strCfgFile.strTcpIp.szIpAdd[iLoop];
		}

		break;

	case PORTNUM:
		sprintf(szTemp,"%d",strCfgFile.strTcpIp.iPortNum);
		iStrLen=strlen(szTemp);
		if(iLen>=iStrLen){
			iLen=iStrLen;
		}

		for(iLoop=0;iLoop<iLen;iLoop++){
			pszBuf[iLoop]=szTemp[iLoop];
		}

		break;

	case CURSORMODE:
		pszBuf[0]=strCfgFile.strTerm.bCursorMode+48;
		pszBuf[1]=0;
		iLen=1;
		break;

	case CURSORSTATU:
		pszBuf[0]=strCfgFile.strTerm.bCursorStatu+48;
		pszBuf[1]=0;
		iLen=1;

		break;

	case WIDTH:
		sprintf(szTemp,"%d",strCfgFile.strTerm.iWidth);
		iStrLen=strlen(szTemp);
		if(iLen>=iStrLen){
			iLen=iStrLen;
		}
		for(iLoop=0;iLoop<iLen;iLoop++){
			pszBuf[iLoop]=szTemp[iLoop];
		}

		break;

	case SCRBUFLEN:
		sprintf(szTemp,"%d",strCfgFile.strTerm.iBufLen);
		iStrLen=strlen(szTemp);
		if(iLen>=iStrLen){
			iLen=iStrLen;
		}
		for(iLoop=0;iLoop<iLen;iLoop++){
			pszBuf[iLoop]=szTemp[iLoop];
		}

		break;

	case ECHO:
		pszBuf[0]=strCfgFile.strTerm.bEcho+48;
		pszBuf[1]=0;
		iLen=1;

		break;

	case BACKSPACE:
		pszBuf[0]=strCfgFile.strTerm.bBackSpace+48;
		pszBuf[1]=0;
		iLen=1;
		break;

	case COM1DEV:
		pszBuf[0]=strCfgFile.strComDev.bCom1Dev+48;
		pszBuf[1]=0;
		break;

	case COM2DEV:
		pszBuf[0]=strCfgFile.strComDev.bCom2Dev+48;
		pszBuf[1]=0;
		break;

	case COM3DEV:
		pszBuf[0]=strCfgFile.strComDev.bCom3Dev+48;
		pszBuf[1]=0;
		break;

	case COM4DEV:
		pszBuf[0]=strCfgFile.strComDev.bCom4Dev+48;
		pszBuf[1]=0;
		break;
	
	case USERID:
		iStrLen=strlen(strCfgFile.strLogOnMode.szUserID);
		if(iLen>=iStrLen){
			iLen=iStrLen;
		}

		for(iLoop=0;iLoop<iLen;iLoop++){
			pszBuf[iLoop]=strCfgFile.strLogOnMode.szUserID[iLoop];
		}

		break;

	case PASSWORD:
		iStrLen=strlen(strCfgFile.strLogOnMode.szPassWord);
		if(iLen>=iStrLen){
			iLen=iStrLen;
		}

		for(iLoop=0;iLoop<iLen;iLoop++){
			pszBuf[iLoop]=strCfgFile.strLogOnMode.szPassWord[iLoop];
		}

		break;

	case TRACE:
		pszBuf[0]=strCfgFile.iTrace+48;
		pszBuf[1]=0;
		break;

	default:
		iLen=-1;
	}
	
	return iLen;
}

int CCfgFile::SetCfgItemStr(int iIndex, LPTSTR pszBuf,int iBufLen)
{
	int iStrLen,iStrLen1,iRet,iLoop;
	
	iRet=0;
	switch(iIndex){
	case PORTNAME:
		iStrLen1=sizeof(strCfgFile.strComPort.szPortNum);
		memset(strCfgFile.strComPort.szPortNum,0,iStrLen1);
		iStrLen=iBufLen;
		if(iStrLen1<iBufLen){
			iStrLen=iStrLen1;
		}

		for(iLoop=0;iLoop<iStrLen;iLoop++){
			strCfgFile.strComPort.szPortNum[iLoop]=(char)pszBuf[iLoop];
		}
		
		break;

	case IPADD:
		iStrLen1=sizeof(strCfgFile.strTcpIp.szIpAdd);
		memset(strCfgFile.strTcpIp.szIpAdd,0,iStrLen1);
		iStrLen=iBufLen;
		if(iStrLen1<iBufLen){
			iStrLen=iStrLen1;
		}

		for(iLoop=0;iLoop<iStrLen;iLoop++){
			strCfgFile.strTcpIp.szIpAdd[iLoop]=(char)pszBuf[iLoop];
		}
		
		break;

	case USERID:
		iStrLen1=sizeof(strCfgFile.strLogOnMode.szUserID);
		memset(strCfgFile.strLogOnMode.szUserID,0,iStrLen1);
		iStrLen=iBufLen;
		if(iStrLen1<iBufLen){
			iStrLen=iStrLen1;
		}

		for(iLoop=0;iLoop<iStrLen;iLoop++){
			strCfgFile.strLogOnMode.szUserID[iLoop]=(char)pszBuf[iLoop];
		}

		break;
	
	case PASSWORD:
		iStrLen1=sizeof(strCfgFile.strLogOnMode.szPassWord);
		memset(strCfgFile.strLogOnMode.szPassWord,0,iStrLen1);
		iStrLen=iBufLen;
		if(iStrLen1<iBufLen){
			iStrLen=iStrLen1;
		}

		for(iLoop=0;iLoop<iStrLen;iLoop++){
			strCfgFile.strLogOnMode.szPassWord[iLoop]=(char)pszBuf[iLoop];
		}

		break;

	default:
		iRet=-1;
	}

	if(iRet==0)
		m_blChanged=TRUE;
	
	return 0;
}

int CCfgFile::GetCfgItemInt(int iIndex)
{
	int iRet;

	switch(iIndex){
	case CONNECTTYPE:
		iRet=strCfgFile.bType;
		break;

	case BAUDRATE:
		iRet=strCfgFile.strComPort.iBaudRate;
		break;

	case BYTESIZE:
		iRet=strCfgFile.strComPort.bByteSize;
		break;

	case PARITY:
		iRet=strCfgFile.strComPort.bParity;
		break;

	case STOPBIT:
		iRet=strCfgFile.strComPort.bStopBit;
		break;

	case FLOWCTR:
		iRet=strCfgFile.strComPort.bFlowControl;
		break;

	case PORTNUM:
		iRet=strCfgFile.strTcpIp.iPortNum;
		break;

	case CURSORMODE:
		iRet=strCfgFile.strTerm.bCursorMode;
		break;

	case CURSORSTATU:
		iRet=strCfgFile.strTerm.bCursorStatu;
		break;

	case WIDTH:
		iRet=strCfgFile.strTerm.iWidth;
		break;

	case SCRBUFLEN:
		iRet=strCfgFile.strTerm.iBufLen;
		break;

	case ECHO:
		iRet=strCfgFile.strTerm.bEcho;
		break;

	case BACKSPACE:
		iRet=strCfgFile.strTerm.bBackSpace;
		break;

	case COM1DEV:
		iRet=strCfgFile.strComDev.bCom1Dev;
		break;

	case COM2DEV:
		iRet=strCfgFile.strComDev.bCom2Dev;
		break;

	case COM3DEV:
		iRet=strCfgFile.strComDev.bCom3Dev;
		break;

	case COM4DEV:
		iRet=strCfgFile.strComDev.bCom4Dev;
		break;

	case LOGONMODE:
		iRet=strCfgFile.strLogOnMode.bLogOnMode;
		break;

	case TRACE:
		iRet=strCfgFile.iTrace;
		break;

	default:
		iRet=-1;
	}

	return iRet;
}

int CCfgFile::SetCfgItemInt(int iIndex,int iVal)
{
	int iRet;

	iRet=0;
	switch(iIndex){
	case CONNECTTYPE:
		strCfgFile.bType=iVal;
		break;

	case BAUDRATE:
		strCfgFile.strComPort.iBaudRate=iVal;
		break;

	case BYTESIZE:
		strCfgFile.strComPort.bByteSize=iVal;
		break;

	case PARITY:
		strCfgFile.strComPort.bParity=iVal;
		break;

	case STOPBIT:
		strCfgFile.strComPort.bStopBit=iVal;
		break;

	case FLOWCTR:
		strCfgFile.strComPort.bFlowControl=iVal;
		break;

	case PORTNUM:
		strCfgFile.strTcpIp.iPortNum=iVal;
		break;

	case CURSORMODE:
		strCfgFile.strTerm.bCursorMode=iVal;
		break;

	case CURSORSTATU:
		strCfgFile.strTerm.bCursorStatu=iVal;
		break;

	case WIDTH:
		strCfgFile.strTerm.iWidth=iVal;
		break;

	case SCRBUFLEN:
		strCfgFile.strTerm.iBufLen=iVal;
		break;

	case ECHO:
		strCfgFile.strTerm.bEcho=iVal;
		break;

	case BACKSPACE:
		strCfgFile.strTerm.bBackSpace=iVal;
		break;

	case COM1DEV:
		strCfgFile.strComDev.bCom1Dev=iVal;
		break;

	case COM2DEV:
		strCfgFile.strComDev.bCom2Dev=iVal;
		break;

	case COM3DEV:
		strCfgFile.strComDev.bCom3Dev=iVal;
		break;

	case COM4DEV:
		strCfgFile.strComDev.bCom4Dev=iVal;
		break;

	case LOGONMODE:
		strCfgFile.strLogOnMode.bLogOnMode=iVal;
		break;

	case TRACE:
		strCfgFile.iTrace=iVal;
		break;

	default:
		iRet=-1;
	}

	if(iRet==0)
		m_blChanged=TRUE;

	return iRet;
}

⌨️ 快捷键说明

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