📄 configguidlg.cpp.svn-base
字号:
// If strings dont match get another key and encryt
if(sCheckStr.Compare(sIn)) {
init_random();
sKey=GenKey(); cSap.burn();
return Encrypt(sIn, sKey);
}
cSap.burn(); return sRetVal; }
void CConfigguiDlg::WriteConfigCpp() {
init_random();
int iRetVal=IDCANCEL; CString sFileName;
while(iRetVal==IDCANCEL) {
CFileDialog dlg(FALSE, "config.h", NULL, OFN_EXPLORER|OFN_ENABLESIZING|OFN_PATHMUSTEXIST|OFN_CREATEPROMPT|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"Config File (config.h)|config.h|Header Files (*.h)|*.h|All Files (*.*)|*.*||", this);
iRetVal=dlg.DoModal(); if(iRetVal==IDCANCEL) { MessageBox("No file selected!", "Error", MB_OK | MB_ICONERROR); continue; }
sFileName=dlg.GetPathName(); break;
}
UpdateData(TRUE);
g_iKeyLen=m_iKeyLen;
FILE *fp=fopen(sFileName, "w"); if(!fp) return;
fprintf(fp, "#ifndef __CONFIG_H__\n");
fprintf(fp, "#define __CONFIG_H__\n\n");
fprintf(fp, "#include \"confbase.h\"\n\n");
fprintf(fp, "// The section name for polymorph\n");
fprintf(fp, "#define SECTION_NAME \"%s\"\n\n", m_sPolySecName);
fprintf(fp, "// Array of CVars\n");
fprintf(fp, "conf_cvar g_aCVars[] = {\n");
list<config_item>::iterator ic;
for(ic=m_lConfigItems.begin(); ic!=m_lConfigItems.end(); ic++) {
switch((*ic).iItemType) {
case ITEM_TYPE_STRING:
{ CString sKey=GenKey(); CString sEncStr=Encrypt((*ic).sItemData, sKey);
fprintf(fp, "\t{\t\"%s\",\t\"%s\",\t\"%s\",\t\"%s\"\t},\n", (*ic).sItemName, EscapeH(sEncStr), sKey, GetMD5(sEncStr)); }
break;
case ITEM_TYPE_CHAR:
if((*ic).cItemData)
{ char szBla[3]={(*ic).cItemData, 0, 0};
fprintf(fp, "\t{\t\"%s\",\t\"%s\",\tNULL,\t\"\"\t},\n", (*ic).sItemName, Escape(CString(szBla))); }
else
fprintf(fp, "\t{\t\"%s\",\t\"\",\tNULL,\t\"\"\t},\n", (*ic).sItemName);
break;
case ITEM_TYPE_BOOL:
if((*ic).bItemData)
fprintf(fp, "\t{\t\"%s\",\t\"true\",\tNULL,\t\"\"\t},\n", (*ic).sItemName);
else
fprintf(fp, "\t{\t\"%s\",\t\"false\",\tNULL,\t\"\"\t},\n", (*ic).sItemName);
break;
case ITEM_TYPE_INT:
fprintf(fp, "\t{\t\"%s\",\t\"%d\",\tNULL,\t\"\"\t},\n", (*ic).sItemName, (*ic).iItemData);
break;
default:
break;
};
}
fprintf(fp, "};\n\n");
fprintf(fp, "// Array of Users\n");
fprintf(fp, "conf_user g_aUsers[] = {\n");
list<user_item>::iterator iu; int iUserNum=0;
for(iu=m_lUserItems.begin(); iu!=m_lUserItems.end(); iu++) {
CString sMD5Pass=GetMD5Text((*iu).sPassword); CString sKey=GenKey();
fprintf(fp, "{\t{\t\"user%d.username\",\t\"%s\",\t\"%s\",\t\"%s\"\t},\n", iUserNum, EscapeH(Encrypt((*iu).sUserName, sKey)), sKey, GetMD5(Encrypt((*iu).sUserName, sKey)));
fprintf(fp, "\t{\t\"user%d.password\",\t\"%s\",\tNULL,\t\"%s\"\t},\n", iUserNum, sMD5Pass, GetMD5(sMD5Pass));
fprintf(fp, "\t{\t\"user%d.hostmask\",\t\"%s\",\t\"%s\",\t\"%s\"\t},\n", iUserNum, EscapeH(Encrypt((*iu).sHostmask, sKey)), sKey, GetMD5(Encrypt((*iu).sHostmask, sKey)));
fprintf(fp, "\t{\t\"user%d.identdmask\",\t\"%s\",\t\"%s\",\t\"%s\"\t}, },\n", iUserNum, EscapeH(Encrypt((*iu).sIdentdmask, sKey)), sKey, GetMD5(Encrypt((*iu).sIdentdmask, sKey)));
iUserNum++; }
fprintf(fp, "};\n\n");
fprintf(fp, "// Array of Servers\n");
fprintf(fp, "conf_server g_aServers[] = {\n");
list<server_item>::iterator is; int iServerNum=0;
for(is=m_lServerItems.begin(); is!=m_lServerItems.end(); is++) {
CString sKey=GenKey();
fprintf(fp, "{\t{\t\"server%d.chanpass\",\t\"%s\",\t\"%s\",\t\"%s\"\t},\n", iServerNum, EscapeH(Encrypt((*is).sChanPass, sKey)), sKey, GetMD5(Encrypt((*is).sChanPass, sKey)));
fprintf(fp, "\t{\t\"server%d.mainchan\",\t\"%s\",\t\"%s\",\t\"%s\"\t},\n", iServerNum, EscapeH(Encrypt((*is).sMainChan, sKey)), sKey, GetMD5(Encrypt((*is).sMainChan, sKey)));
fprintf(fp, "\t{\t\"server%d.nickprefix\",\t\"%s\",\t\"%s\",\t\"%s\"\t},\n", iServerNum, EscapeH(Encrypt((*is).sNickPrefix, sKey)), sKey, GetMD5(Encrypt((*is).sNickPrefix, sKey)));
fprintf(fp, "\t{\t\"server%d.port\",\t\"%d\",\tNULL,\t\"\"\t},\n", iServerNum, (*is).iPort);
fprintf(fp, "\t{\t\"server%d.server\",\t\"%s\",\t\"%s\",\t\"%s\"\t},\n", iServerNum, EscapeH(Encrypt((*is).sServer, sKey)), sKey, GetMD5(Encrypt((*is).sServer, sKey)));
fprintf(fp, "\t{\t\"server%d.servpass\",\t\"%s\",\t\"%s\",\t\"%s\"\t},\n", iServerNum, EscapeH(Encrypt((*is).sServPass, sKey)), sKey, GetMD5(Encrypt((*is).sServPass, sKey)));
if((*is).bUseSSL) fprintf(fp, "\t{\t\"server%d.usessl\",\t\"true\",\tNULL,\t\"\"\t}\t},\n", iServerNum);
else fprintf(fp, "\t{\t\"server%d.usessl\",\t\"false\",\tNULL,\t\"\"\t}\t},\n", iServerNum);
iServerNum++; }
fprintf(fp, "};\n\n");
fprintf(fp, "// Script\n\n");
fprintf(fp, "char *g_szScript = \\\n");
// Loop while token isnt empty
char *szTempCopy=new char[m_sScript.GetLength()+2];
strcpy(szTempCopy, m_sScript);
char *szToken=strtok(szTempCopy, "\n");
if(szToken) {
while(true) {
char *szNextToken=strtok(NULL, "\n");
if(szNextToken) {
fprintf(fp, "\t\"%s\\n\" \\\n", Escape(CString(szToken)));
} else {
fprintf(fp, "\t\"%s\\n\";\n\n", Escape(CString(szToken))); break;
}
szToken=szNextToken;
}
}
delete [] szTempCopy;
fprintf(fp, "#endif // __CONFIG_H__\n");
fclose(fp);
}
void CConfigguiDlg::SaveConfig(const char *szFileName) {
if(!szFileName) return;
FILE *fp=fopen(szFileName, "w"); if(!fp) return;
list<config_item>::iterator ic;
for(ic=m_lConfigItems.begin(); ic!=m_lConfigItems.end(); ic++) {
switch((*ic).iItemType) {
case ITEM_TYPE_STRING:
fprintf(fp, "cvar\t%s\t%s\n", (*ic).sItemName, (*ic).sItemData);
break;
case ITEM_TYPE_CHAR:
fprintf(fp, "cvar\t%s\t%c\n", (*ic).sItemName, (*ic).cItemData);
break;
case ITEM_TYPE_BOOL:
if((*ic).bItemData) fprintf(fp, "cvar\t%s\ttrue\n", (*ic).sItemName);
else fprintf(fp, "cvar\t%s\tfalse\n", (*ic).sItemName);
break;
case ITEM_TYPE_INT:
fprintf(fp, "cvar\t%s\t%d\n", (*ic).sItemName, (*ic).iItemData);
break;
default:
break;
};
}
list<server_item>::iterator is;
for(is=m_lServerItems.begin(); is!=m_lServerItems.end(); is++) {
char *szRootServer, *szUseSSL;
if((*is).bRootServer) szRootServer="true"; else szRootServer="false";
if((*is).bUseSSL) szUseSSL="true"; else szUseSSL="false";
const char *szNickPrefix, *szServPass, *szServer, *szChanPass, *szMainChan;
if((*is).sNickPrefix.Compare("")) szNickPrefix=(*is).sNickPrefix; else szNickPrefix="(NULL)";
if((*is).sServPass.Compare("")) szServPass=(*is).sServPass; else szServPass="(NULL)";
if((*is).sServer.Compare("")) szServer=(*is).sServer; else szServer="(NULL)";
if((*is).sChanPass.Compare("")) szChanPass=(*is).sChanPass; else szChanPass="(NULL)";
if((*is).sMainChan.Compare("")) szMainChan=(*is).sMainChan; else szMainChan="(NULL)";
fprintf(fp, "server\t%s\t%s\t%s\t%s\t%d\t%s\t%s\t%s\n", szRootServer, szNickPrefix,
szServPass, szServer, (*is).iPort, szChanPass, szMainChan, szUseSSL);
}
list<user_item>::iterator iu;
for(iu=m_lUserItems.begin(); iu!=m_lUserItems.end(); iu++) {
const char *szUserName, *szPassword, *szHostmask, *szIdentdmask;
if((*iu).sUserName.Compare("")) szUserName=(*iu).sUserName; else szUserName="(NULL)";
if((*iu).sPassword.Compare("")) szPassword=(*iu).sPassword; else szPassword="(NULL)";
if((*iu).sHostmask.Compare("")) szHostmask=(*iu).sHostmask; else szHostmask="(NULL)";
if((*iu).sIdentdmask.Compare("")) szIdentdmask=(*iu).sIdentdmask; else szIdentdmask="(NULL)";
fprintf(fp, "user\t%s\t%s\t%s\t%s\n", szUserName, szPassword, szHostmask, szIdentdmask);
}
if(m_sScript.GetLength()) fprintf(fp, "script\n%s", m_sScript);
fclose(fp); }
void CConfigguiDlg::LoadConfig(const char *szFileName) {
if(!szFileName) return;
FILE *fp=fopen(szFileName, "r"); if(!fp) return;
m_lUserItems.clear(); m_lServerItems.clear();
m_cUserList.ResetContent(); m_cServerList.ResetContent();
char szReadBuf[8192];
while(fgets(szReadBuf, sizeof(szReadBuf), fp) && !feof(fp)) {
for(int i=0;i<strlen(szReadBuf);i++)
if(szReadBuf[i]=='\r' || szReadBuf[i]=='\n') szReadBuf[i]='\x00';
if(!strcmp(szReadBuf, "")) continue; if(szReadBuf[0]=='#') continue;
char *szItemType=strtok(szReadBuf, "\t");
if(!szItemType) continue;
if(!strcmp(szItemType, "cvar")) {
char *szItemName, *szItemValue;
szItemName=strtok(NULL, "\t"); szItemValue=strtok(NULL, "\t");
if(!szItemName || !szItemValue) continue;
list<config_item>::iterator ic;
for(ic=m_lConfigItems.begin(); ic!=m_lConfigItems.end(); ic++) {
if(!strcmp((*ic).sItemName, szItemName)) {
switch((*ic).iItemType) {
case ITEM_TYPE_STRING:
(*ic).sItemData=szItemValue;
break;
case ITEM_TYPE_CHAR:
(*ic).cItemData=*szItemValue;
break;
case ITEM_TYPE_BOOL:
if(!stricmp(szItemValue, "true"))
(*ic).bItemData=true;
else
(*ic).bItemData=false;
break;
case ITEM_TYPE_INT:
(*ic).iItemData=atoi(szItemValue);
break;
default:
break;
};
}
}
} else if(!strcmp(szItemType, "server")) {
char *szRootServer, *szNickPrefix, *szServPass, *szServer, *szPort, *szChanPass, *szMainChan, *szUseSSL;
szRootServer=strtok(NULL, "\t"); szNickPrefix=strtok(NULL, "\t");
szServPass=strtok(NULL, "\t"); szServer=strtok(NULL, "\t");
szPort=strtok(NULL, "\t"); szChanPass=strtok(NULL, "\t");
szMainChan=strtok(NULL, "\t"); szUseSSL=strtok(NULL, "\t");
if( !szRootServer || !szNickPrefix || !szServPass || !szServer || \
!szPort || !szChanPass || !szMainChan || !szUseSSL) continue;
server_item sItem;
if(!strcmp(szRootServer, "(NULL)")) szRootServer="";
if(!strcmp(szNickPrefix, "(NULL)")) szNickPrefix="";
if(!strcmp(szServPass, "(NULL)")) szServPass="";
if(!strcmp(szServer, "(NULL)")) szServer="";
if(!strcmp(szPort, "(NULL)")) szPort="";
if(!strcmp(szChanPass, "(NULL)")) szChanPass="";
if(!strcmp(szMainChan, "(NULL)")) szMainChan="";
if(!strcmp(szUseSSL, "(NULL)")) szUseSSL="";
if(!stricmp(szRootServer, "true")) sItem.bRootServer=true; else sItem.bRootServer=false;
if(!stricmp(szUseSSL, "true")) sItem.bUseSSL=true; else sItem.bUseSSL=false;
sItem.iPort=atoi(szPort); sItem.sChanPass=szChanPass;
sItem.sMainChan=szMainChan; sItem.sNickPrefix=szNickPrefix;
sItem.sServer=szServer; sItem.sServPass=szServPass;
m_lServerItems.push_back(sItem);
list<server_item>::iterator is;
for(is=m_lServerItems.begin(); is!=m_lServerItems.end(); is++) {
if((*is)==sItem) {
CString sItemText;
sItemText.Format("%s:%d - %s - %s", (*is).sServer, (*is).iPort, (*is).sMainChan, (*is).sNickPrefix);
int iItem=m_cServerList.InsertString(0, sItemText);
m_cServerList.SetItemDataPtr(iItem, &(*is));
m_cServerList.SetCurSel(iItem);
OnSelchangeServerList();
break;
}
}
} else if(!strcmp(szItemType, "user")) {
char *szUserName, *szPassword, *szHostmask, *szIdentdmask;
szUserName=strtok(NULL, "\t"); szPassword=strtok(NULL, "\t");
szHostmask=strtok(NULL, "\t"); szIdentdmask=strtok(NULL, "\t");
if(!szUserName || !szPassword || !szHostmask || !szIdentdmask) continue;
user_item uItem;
if(!strcmp(szUserName, "(NULL)")) szUserName="";
if(!strcmp(szPassword, "(NULL)")) szPassword="";
if(!strcmp(szHostmask, "(NULL)")) szHostmask="";
if(!strcmp(szIdentdmask, "(NULL)")) szIdentdmask="";
uItem.sUserName=szUserName; uItem.sPassword=szPassword;
uItem.sHostmask=szHostmask; uItem.sIdentdmask=szIdentdmask;
m_lUserItems.push_back(uItem);
list<user_item>::iterator iu;
for(iu=m_lUserItems.begin(); iu!=m_lUserItems.end(); iu++) {
if((*iu)==uItem) {
CString sItemText;
sItemText.Format("%s - %s - %s", (*iu).sUserName, (*iu).sIdentdmask, (*iu).sIdentdmask);
int iItem=m_cUserList.InsertString(0, sItemText);
m_cUserList.SetItemDataPtr(iItem, &(*iu));
m_cUserList.SetCurSel(iItem);
OnSelchangeUserList();
break;
}
}
} else if(!strcmp(szItemType, "script")) {
// Read in script, must be on end of cfg
// Break when finished
char szReadBuf2[4096]; m_sScript="";
while(fgets(szReadBuf2, sizeof(szReadBuf2), fp) && !feof(fp)) {
m_sScript+=szReadBuf2;
}
break;
}
}
fclose(fp);
OnSelchangeConfigList(); }
void CConfigguiDlg::OnOK() {
WriteConfigCpp(); CDialog::OnOK(); }
void CConfigguiDlg::OnLoadfrom() {
CFileDialog dlg(TRUE, ".cfg", NULL, OFN_EXPLORER|OFN_ENABLESIZING|OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST,
"Config File (*.cfg)|*.cfg|All Files (*.*)|*.*||", this);
if(dlg.DoModal()==IDCANCEL) { MessageBox("No file selected!", "Error", MB_OK | MB_ICONERROR); return; }
CString sFileName=dlg.GetPathName();
LoadConfig(sFileName); }
void CConfigguiDlg::OnSaveto() {
CFileDialog dlg(FALSE, ".cfg", NULL, OFN_EXPLORER|OFN_ENABLESIZING|OFN_PATHMUSTEXIST|OFN_CREATEPROMPT|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"Config File (*.cfg)|*.cfg|All Files (*.*)|*.*||", this);
if(dlg.DoModal()==IDCANCEL) { MessageBox("No file selected!", "Error", MB_OK | MB_ICONERROR); return; }
CString sFileName=dlg.GetPathName();
SaveConfig(sFileName); }
int CConfigguiDlg::DoModal()
{
ParseConfigDef();
return CDialog::DoModal();
}
void CConfigguiDlg::OnShowWindow(BOOL bShow, UINT nStatus)
{
CDialog::OnShowWindow(bShow, nStatus);
init_random();
for(int i=0;szQuotes[i]!=NULL;i++);
int iQuote=brandom(0, i-1);
char *szSelQuote=szQuotes[iQuote];
m_cQuote.SetWindowText(szSelQuote);
list<config_item>::iterator ic;
for(ic=m_lConfigItems.begin(); ic!=m_lConfigItems.end(); ic++) {
CString sItemText;
sItemText.Format("%s - %s", (*ic).sItemName, (*ic).sItemTypeName);
int iItem=m_cConfigList.InsertString(0, sItemText);
m_cConfigList.SetItemDataPtr(iItem, &(*ic));
}
}
void CConfigguiDlg::OnSelchangeConfigList()
{
UpdateData(TRUE);
int iSelected=m_cConfigList.GetCurSel();
if(iSelected==-1) {
m_cValueBool.ShowWindow(SW_HIDE); m_cValueChar.ShowWindow(SW_HIDE);
m_cValueInt.ShowWindow(SW_HIDE); m_cValueString.ShowWindow(SW_HIDE);
return; }
config_item *pItem=(config_item*)m_cConfigList.GetItemDataPtr(iSelected);
if(!pItem) {
m_cValueBool.ShowWindow(SW_HIDE); m_cValueChar.ShowWindow(SW_HIDE);
m_cValueInt.ShowWindow(SW_HIDE); m_cValueString.ShowWindow(SW_HIDE);
return; }
switch(pItem->iItemType) {
case ITEM_TYPE_STRING:
{ m_cValueBool.ShowWindow(SW_HIDE); m_cValueChar.ShowWindow(SW_HIDE);
m_cValueInt.ShowWindow(SW_HIDE); m_cValueString.ShowWindow(SW_SHOW);
m_sValueString=pItem->sItemData; }
break;
case ITEM_TYPE_CHAR:
{ m_cValueBool.ShowWindow(SW_HIDE); m_cValueChar.ShowWindow(SW_SHOW);
m_cValueInt.ShowWindow(SW_HIDE); m_cValueString.ShowWindow(SW_HIDE);
char szCharStr[3]={pItem->cItemData, '\x00'};
m_sValueChar=szCharStr; }
break;
case ITEM_TYPE_BOOL:
{ m_cValueBool.ShowWindow(SW_SHOW); m_cValueChar.ShowWindow(SW_HIDE);
m_cValueInt.ShowWindow(SW_HIDE); m_cValueString.ShowWindow(SW_HIDE);
m_bValueBool=pItem->bItemData; }
break;
case ITEM_TYPE_INT:
{ m_cValueBool.ShowWindow(SW_HIDE); m_cValueChar.ShowWindow(SW_HIDE);
m_cValueInt.ShowWindow(SW_SHOW); m_cValueString.ShowWindow(SW_HIDE);
m_iValueInt=pItem->iItemData; }
break;
default:
{ m_cValueBool.ShowWindow(SW_HIDE); m_cValueChar.ShowWindow(SW_HIDE);
m_cValueInt.ShowWindow(SW_HIDE); m_cValueString.ShowWindow(SW_HIDE); }
break;
};
m_sDescription=pItem->sItemDesc;
UpdateData(FALSE);
}
void CConfigguiDlg::OnValueBool() {
UpdateData(TRUE);
int iSelected=m_cConfigList.GetCurSel();
if(iSelected==-1) {
m_cValueBool.ShowWindow(SW_HIDE); m_cValueChar.ShowWindow(SW_HIDE);
m_cValueInt.ShowWindow(SW_HIDE); m_cValueString.ShowWindow(SW_HIDE);
return; }
config_item *pItem=(config_item*)m_cConfigList.GetItemDataPtr(iSelected);
if(!pItem) {
m_cValueBool.ShowWindow(SW_HIDE); m_cValueChar.ShowWindow(SW_HIDE);
m_cValueInt.ShowWindow(SW_HIDE); m_cValueString.ShowWindow(SW_HIDE);
return; }
if(!m_bValueBool) pItem->bItemData=false; else pItem->bItemData=true;
if(!pItem->sItemName.Compare("as_service") && pItem->bItemData==true) {
MessageBox("DONT DO THIS, I WARNED YOU!!!", "Warning", MB_OK);
}
UpdateData(FALSE);
}
void CConfigguiDlg::OnChangeValueChar() {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -