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 + -
显示快捷键?