?? cfg.cpp
字號:
static char *cfg_id =
"@(#)Copyright (C) H.Shirouzu 1996-2004 cfg.cpp Ver2.05";
/* ========================================================================
Project Name : IP Messenger for Win32
Module Name : Configuration
Create : 1996-09-27(Sat)
Update : 2004-01-01(Thu)
Copyright : H.Shirouzu
Reference :
======================================================================== */
#include <stdio.h>
#include "tlib.h"
#include "resource.h"
#include "ipmsg.h"
#include "msgstr.h"
#include "blowfish.h"
#define IPMSG_DEFAULT_LISTGETMSEC 3000
#define IPMSG_DEFAULT_RETRYMSEC 1500
#define IPMSG_DEFAULT_RETRYMAX 3
#define IPMSG_DEFAULT_RECVMAX_NT 100
#define IPMSG_DEFAULT_RECVMAX_95 30
#define IPMSG_DEFAULT_ABSENCEMAX 8
#define IPMSG_DEFAULT_FINDMAX 12
#define IPMSG_DEFAULT_DELAY 500
#define IPMSG_DEFAULT_UPDATETIME 10
#define IPMSG_DEFAULT_KEEPHOSTTIME (3600 * 24 * 180) // 180擔娫
#define IPMSG_DEFAULT_QUOTE ">"
#define IPMSG_DEFAULT_ENCRYPTNUM 20
#define IPMSG_DEFAULT_VIEWMAX (8 * 1024 * 1024) // 8MB
#define IPMSG_DEFAULT_TRANSMAX (64 * 1024) // 64KB
#define IPMSG_DEFAULT_TCPBUFMAX (256 * 1024) // 256KB
#define IPMSG_DEFAULT_NICKNAMEWIDTH 97
#define IPMSG_DEFAULT_ABSENCEWIDTH 16
#define IPMSG_DEFAULT_GROUPWIDTH 88
#define IPMSG_DEFAULT_HOSTWIDTH 58
#define IPMSG_DEFAULT_IPADDRWIDTH 110
#define IPMSG_DEFAULT_USERWIDTH 90
#define IPMSG_DEFAULT_PRIORITYWIDTH 21
#define NOBEEP_STR "NoBeep"
#define LISTGET_STR "ListGet"
#define LISTGETMSEC_STR "ListGetMSec"
#define RETRYMSEC_STR "RetryMSec2"
#define RETRYMAX_STR "RetryMax"
#define RECVMAXNT_STR "RecvMaxNT"
#define RECVMAX95_STR "RecvMax95"
#define NOERASE_STR "NoErase"
#define DEBUG_STR "Debug"
#define BROADCAST_STR "BroadCast"
#define CLICKABLEURL_STR "ClickableUrl"
#define NOPOPUPCHECK_STR "NoPopup"
#define OPENCHECK_STR "OpenCheck"
#define ABSENCESAVE_STR "AbsenceSave"
#define ABSENCECHECK_STR "AbsenceCheck"
#define ABSENCEMAX_STR "AbsenceMax"
#define ABSENCESTR_STR "AbsenceStr"
#define ABSENCEHEAD_STR "AbsenceHead"
#define FINDMAX_STR "FindMax2"
#define FINDALL_STR "FindAll"
#define FINDSTR_STR "FindStr"
#define PASSWORD_STR "PasswordStr"
#define PASSWDLOGCHECK_STR "PasswdLogCheck"
#define DELAYTIME_STR "DelayTime"
#define QUOTECHECK_STR "QuoteCheck"
#define SECRETCHECK_STR "SecretCheck"
#define IPADDRCHECK_STR "IPAddrCheck"
#define ONECLICKPOPUP_STR "OneClickPopup"
#define ABNORMALBTN_STR "AbnormalButton"
#define DIALUPCHECK_STR "DialUpCheck"
#define NICKNAMECHECK_STR "NickNameCheck"
#define NICKNAMESTR_STR "NickNameStr"
#define GROUPNAMESTR_STR "GroupNameStr"
#define ABSENCENONPOPUP_STR "AbsenceNonPopup"
#define LANG_STR "Lang"
#define SORT_STR "Sort"
#define UPDATETIME_STR "UpdateTime"
#define KEEPHOSTTIME_STR "KeepHostTime"
#define MSGMINIMIZE_STR "MsgMinimize"
#define DEFAULTURL_STR "DefaultUrl"
#define SHELLEXEC_STR "ShellExec"
#define EXTENDENTRY_STR "ExtendEntry"
#define QUOTESTR_STR "QuoteStr"
#define CONTROLIME_STR "ControlIME"
#define HOTKEY_STR "HotKey"
#define HOTKEYCHECK_STR "HotKeyCheck"
#define HOTKEYMODIFY_STR "HotKeyModify"
#define HOTKEYSEND_STR "HotKeySend"
#define HOTKEYRECV_STR "HotKeyRecv"
#define HOTKEYMISC_STR "HotKeyMisc"
#define ALLOWSENDLIST_STR "AllowSendList"
#define FILETRANSOPT_STR "FileTransOpt"
#define RESOLVEOPT_STR "ResolveOpt"
#define ENCRYPTNUM_STR "EncryptNum"
#define VIEWMAX_STR "ViewMax"
#define TRANSMAX_STR "TransMax"
#define TCPBUFMAX_STR "TcpbufMax"
#define LOGCHECK_STR "LogCheck"
#define LOGFILE_STR "LogFile"
#define SOUNDFILE_STR "SoundFile"
#define ICON_STR "Icon"
#define REVICON_STR "RevIcon"
#define LASTOPEN_STR "lastOpen"
#define LASTSAVE_STR "lastSave"
#define WINSIZE_STR "WindowSize"
#define SENDPRIORITY_STR "SendPriority"
#define SENDNICKNAME_STR "SendNickName"
#define SENDABSENCE_STR "SendAbsence"
#define SENDUSERNAME_STR "SendUserName"
#define SENDGROUPNAME_STR "SendGroupName"
#define SENDHOSTNAME_STR "SendHostName"
#define SENDIPADDR_STR "SendIPAddr"
#define SENDORDER_STR "SendOrder"
#define SENDXDIFF_STR "SendXdiff"
#define SENDYDIFF_STR "SendYdiff"
#define SENDMIDYDIFF_STR "SendMidYdiff"
#define SENDSAVEPOS_STR "SendSavePos"
#define SENDXPOS_STR "SendXpos"
#define SENDYPOS_STR "SendYpos"
#define RECVXDIFF_STR "RecvXdiff"
#define RECVYDIFF_STR "RecvYdiff"
#define RECVSAVEPOS_STR "RecvSavePos"
#define RECVXPOS_STR "RecvXpos"
#define RECVYPOS_STR "RecvYpos"
#define FONT_STR "Fonts"
#define SENDEDITFONT_STR "SendEdit"
#define SENDLISTFONT_STR "SendListView"
#define RECVHEADFONT_STR "RecvHead"
#define RECVEDITFONT_STR "RecvEdit"
#define HEIGHT_STR "Height"
#define WIDTH_STR "Width"
#define ESCAPEMENT_STR "Escapement"
#define ORIENTATION_STR "Orientation"
#define WEIGHT_STR "Weight"
#define ITALIC_STR "Italic"
#define UNDERLINE_STR "UnderLine"
#define STRIKEOUT_STR "StrikeOut"
#define CHARSET_STR "CharSet"
#define OUTPRECISION_STR "OutPrecision"
#define CLIPPRECISION_STR "ClipPrecision"
#define QUALITY_STR "Quality"
#define PITCHANDFAMILY_STR "PitchAndFamily"
#define FACENAME_STR "FaceName"
#define HOSTINFO_STR "HostInfo"
#define USERNAME_STR "UserName"
#define HOSTNAME_STR "HostName"
#define IPADDR_STR "IPAddr"
#define PORTNO_STR "PortNo"
#define NICKNAME_STR "NickName"
#define GROUPNAME_STR "GroupName"
#define PRIORITY_STR "Priority"
#define PRIORITYMAX_STR "PriorityMax"
#define PRIORITYSOUND_STR "PrioritySound"
#define PRIORITYREJECT_STR "PriorityReject"
#define GLIDLINE_STR "GlidLine"
#define COLUMNITEMS_STR "ColumnItems"
#define CRYPT_STR "Crypt"
#define PRIVBLOB_STR "PrivBlob"
#define PRIVTYPE_STR "PrivEncryptType"
#define PRIVSEED_STR "PrivEncryptSeed"
#define PRIVSEEDLEN_STR "PrivEncryptSeedLen"
char *DefaultUrlProtocol[] = { "HTTP", "HTTPS", "FTP", "FILE", "TELNET", NULL };
char *DefaultAbsence[IPMSG_DEFAULT_ABSENCEMAX] = { DEFABSENCE1_MSGSTR, DEFABSENCE2_MSGSTR, DEFABSENCE3_MSGSTR, DEFABSENCE4_MSGSTR, DEFABSENCE5_MSGSTR, DEFABSENCE6_MSGSTR, DEFABSENCE7_MSGSTR, DEFABSENCE8_MSGSTR };
char *DefaultAbsenceHead[IPMSG_DEFAULT_ABSENCEMAX] = { DEFABSENCEHEAD1_MSGSTR, DEFABSENCEHEAD2_MSGSTR, DEFABSENCEHEAD3_MSGSTR, DEFABSENCEHEAD4_MSGSTR, DEFABSENCEHEAD5_MSGSTR, DEFABSENCEHEAD6_MSGSTR, DEFABSENCEHEAD7_MSGSTR, DEFABSENCEHEAD8_MSGSTR };
Cfg::Cfg(ULONG _nicAddr, int _portNo)
{
nicAddr = _nicAddr;
portNo = _portNo;
AbsenceHead = NULL;
AbsenceStr = NULL;
FindStr = NULL;
privBlob = NULL;
}
Cfg::~Cfg()
{
delete [] privBlob;
delete [] FindStr;
delete [] AbsenceHead;
delete [] AbsenceStr;
}
BOOL Cfg::ReadRegistry(void)
{
char buf[MAX_LISTBUF], val[MAX_LISTBUF];
GetRegName(buf, nicAddr, portNo);
TRegistry reg(HS_TOOLS, buf);
if (reg.GetInt(NOPOPUPCHECK_STR, &NoPopupCheck) != TRUE)
{
GetRegName(buf, 0, portNo);
reg.ChangeApp(HS_TOOLS, buf);
if (reg.GetInt(NOPOPUPCHECK_STR, &NoPopupCheck) != TRUE)
reg.ChangeApp(HS_TOOLS, IPMSG_MSGSTR);
}
NoBeep = FALSE;
ListGet = FALSE;
HotKeyCheck = FALSE;
HotKeyModify = MOD_ALT|MOD_CONTROL;
HotKeySend = 'S';
HotKeyRecv = 'R';
HotKeyMisc = 'D';
ListGetMSec = IPMSG_DEFAULT_LISTGETMSEC;
RetryMSec = IPMSG_DEFAULT_RETRYMSEC;
RetryMax = IPMSG_DEFAULT_RETRYMAX;
RecvMax = IsWinNT() ? IPMSG_DEFAULT_RECVMAX_NT : IPMSG_DEFAULT_RECVMAX_95;
NoErase = FALSE;
Debug = FALSE;
NoPopupCheck = FALSE;
OpenCheck = TRUE;
AbsenceSave = FALSE;
AbsenceCheck = FALSE;
AbsenceMax = IPMSG_DEFAULT_ABSENCEMAX;
AbsenceChoice = 0;
FindMax = IPMSG_DEFAULT_FINDMAX;
FindAll = FALSE;
DelayTime = IPMSG_DEFAULT_DELAY;
QuoteCheck = TRUE;
SecretCheck = FALSE;
IPAddrCheck = FALSE;
OneClickPopup = FALSE;
AbnormalButton = FALSE;
DialUpCheck = FALSE;
NickNameCheck = IPMSG_NICKNAME;
*NickNameStr = 0;
*GroupNameStr = 0;
AbsenceNonPopup = TRUE;
Sort = IPMSG_NAMESORT;
UpdateTime = IPMSG_DEFAULT_UPDATETIME;
KeepHostTime = IPMSG_DEFAULT_KEEPHOSTTIME;
MsgMinimize = FALSE;
DefaultUrl = TRUE;
ShellExec = FALSE;
ExtendEntry = TRUE;
ControlIME = FALSE;
GlidLineCheck = FALSE;
PriorityMax = DEFAULT_PRIORITYMAX;
PriorityReject = 0;
AllowSendList = TRUE;
fileTransOpt = 0;
ResolveOpt = 0;
EncryptNum = IPMSG_DEFAULT_ENCRYPTNUM;
ViewMax = IPMSG_DEFAULT_VIEWMAX;
TransMax = IPMSG_DEFAULT_TRANSMAX;
TcpbufMax = IPMSG_DEFAULT_TCPBUFMAX;
privBlobLen = 0;
hPrivKey = 0;
hSmallPrivKey = 0;
// CryptProtectData is available only Win2K/XP
privEncryptType = IsWin2K() ? PRIV_BLOB_DPAPI : PRIV_BLOB_RAW;
privEncryptSeed = NULL;
privEncryptSeedLen = 0;
strncpyz(QuoteStr, IPMSG_DEFAULT_QUOTE, sizeof(QuoteStr));
SendWidth[SW_NICKNAME] = IPMSG_DEFAULT_NICKNAMEWIDTH;
SendWidth[SW_ABSENCE] = IPMSG_DEFAULT_ABSENCEWIDTH;
SendWidth[SW_GROUP] = IPMSG_DEFAULT_GROUPWIDTH;
SendWidth[SW_HOST] = IPMSG_DEFAULT_HOSTWIDTH;
SendWidth[SW_IPADDR] = IPMSG_DEFAULT_IPADDRWIDTH;
SendWidth[SW_USER] = IPMSG_DEFAULT_USERWIDTH;
SendWidth[SW_PRIORITY] = IPMSG_DEFAULT_PRIORITYWIDTH;
SetItem(&ColumnItems, SW_NICKNAME, TRUE);
SetItem(&ColumnItems, SW_GROUP, TRUE);
SetItem(&ColumnItems, SW_HOST, TRUE);
for (int cnt=0; cnt < MAX_SENDWIDTH; cnt++)
SendOrder[cnt] = cnt;
SendXdiff = 0;
SendYdiff = 0;
SendMidYdiff = 0;
SendSavePos = 0;
SendXpos = 0;
SendYpos = 0;
RecvXdiff = 0;
RecvYdiff = 0;
RecvSavePos = 0;
RecvXpos = 0;
RecvYpos = 0;
LogCheck = FALSE;
PasswdLogCheck = FALSE;
strncpyz(LogFile, "ipmsg.log", sizeof(LogFile));
*SoundFile = 0;
*IconFile = 0;
*RevIconFile = 0;
*lastSaveDir = *lastOpenDir = 0;
memset(&SendEditFont, 0, sizeof(SendEditFont));
memset(&SendListFont, 0, sizeof(SendListFont));
memset(&RecvHeadFont, 0, sizeof(RecvHeadFont));
memset(&RecvEditFont, 0, sizeof(RecvEditFont));
reg.GetInt(NOBEEP_STR, &NoBeep);
reg.GetInt(LISTGET_STR, &ListGet);
reg.GetInt(LISTGETMSEC_STR, (int *)&ListGetMSec);
reg.GetInt(RETRYMSEC_STR, (int *)&RetryMSec);
reg.GetInt(RETRYMAX_STR, (int *)&RetryMax);
reg.GetInt(IsWinNT() ? RECVMAXNT_STR : RECVMAX95_STR, (int *)&RecvMax);
reg.GetInt(NOERASE_STR, &NoErase);
reg.GetInt(DEBUG_STR, &Debug);
reg.GetInt(NOPOPUPCHECK_STR, &NoPopupCheck);
reg.GetInt(OPENCHECK_STR, &OpenCheck);
reg.GetInt(ABSENCESAVE_STR, &AbsenceSave);
if (AbsenceSave)
reg.GetInt(ABSENCECHECK_STR, &AbsenceCheck);
reg.GetInt(ABSENCEMAX_STR, &AbsenceMax);
reg.GetInt(ALLOWSENDLIST_STR, &AllowSendList);
reg.GetInt(FILETRANSOPT_STR, &fileTransOpt);
reg.GetInt(RESOLVEOPT_STR, &ResolveOpt);
reg.GetInt(ENCRYPTNUM_STR, &EncryptNum);
// for File Transfer
reg.GetInt(VIEWMAX_STR, &ViewMax);
if (ViewMax < 1024 * 1024) // 1MB 埲壓偺 MapFileOfView 偼擣傔側偄
ViewMax = IPMSG_DEFAULT_VIEWMAX;
reg.GetInt(TRANSMAX_STR, &TransMax);
if (TransMax < 8 * 1024) // 8KB 埲壓偺 file transfer buf 偼擣傔側偄
TransMax = IPMSG_DEFAULT_TRANSMAX;
reg.GetInt(TCPBUFMAX_STR, &TcpbufMax);
if (TcpbufMax < 8 * 1024) // 8KB 埲壓偺 sockbuf 偼擣傔側偄
TcpbufMax = IPMSG_DEFAULT_TCPBUFMAX;
// for Absence Message
typedef char MaxBuf[MAX_PATH];
AbsenceStr = new MaxBuf[AbsenceMax];
memset(AbsenceStr, 0, MAX_PATH * AbsenceMax);
reg.GetStr(ABSENCESTR_STR, AbsenceStr[0], sizeof(AbsenceStr[0]));
typedef char MaxHead[MAX_NAMEBUF];
AbsenceHead = new MaxHead[AbsenceMax];
memset(AbsenceHead, 0, MAX_NAMEBUF * AbsenceMax);
if (reg.CreateKey(ABSENCESTR_STR))
{
for (int cnt=0; cnt < AbsenceMax; cnt++)
{
char key[MAX_PATH];
wsprintf(key, "%s%d", ABSENCESTR_STR, cnt);
if (reg.GetStr(key, AbsenceStr[cnt], sizeof(AbsenceStr[cnt])) != TRUE)
strncpyz(AbsenceStr[cnt], DefaultAbsence[cnt < IPMSG_DEFAULT_ABSENCEMAX ? cnt : 0], MAX_PATH);
wsprintf(key, "%s%d", ABSENCEHEAD_STR, cnt);
if (reg.GetStr(key, AbsenceHead[cnt], sizeof(AbsenceHead[cnt])) != TRUE)
strcpy(AbsenceHead[cnt], DefaultAbsenceHead[cnt < IPMSG_DEFAULT_ABSENCEMAX ? cnt : 0]);
}
reg.CloseKey();
}
// Find User
typedef char MaxFind[MAX_NAMEBUF];
if (reg.CreateKey(FINDSTR_STR))
{
reg.GetInt(FINDMAX_STR, &FindMax);
reg.GetInt(FINDALL_STR, &FindAll);
FindStr = new MaxFind[FindMax];
for (int cnt=0; cnt < FindMax; cnt++)
{
char key[MAX_PATH];
wsprintf(key, "%d", cnt);
if (reg.GetStr(key, FindStr[cnt], sizeof(FindStr[cnt])) != TRUE)
FindStr[cnt][0] = '\0';
}
reg.CloseKey();
}
else {
FindStr = new MaxFind[FindMax];
memset(FindStr, 0, MAX_NAMEBUF * FindMax);
}
*PasswordStr = 0;
reg.GetStr(PASSWORD_STR, PasswordStr, sizeof(PasswordStr));
reg.GetInt(PASSWDLOGCHECK_STR, &PasswdLogCheck);
reg.GetInt(DELAYTIME_STR, &DelayTime);
reg.GetInt(QUOTECHECK_STR, &QuoteCheck);
reg.GetInt(SECRETCHECK_STR, &SecretCheck);
reg.GetInt(IPADDRCHECK_STR, &IPAddrCheck);
reg.GetInt(ONECLICKPOPUP_STR, &OneClickPopup);
reg.GetInt(ABNORMALBTN_STR, &AbnormalButton);
reg.GetInt(DIALUPCHECK_STR, &DialUpCheck);
reg.GetInt(NICKNAMECHECK_STR, &NickNameCheck);
NickNameCheck = NickNameCheck == IPMSG_NICKNAME;
reg.GetInt(ABSENCENONPOPUP_STR, &AbsenceNonPopup);
reg.GetStr(NICKNAMESTR_STR, NickNameStr, sizeof(NickNameStr));
reg.GetStr(GROUPNAMESTR_STR, GroupNameStr, sizeof(GroupNameStr));
reg.GetStr(LANG_STR, Lang, sizeof(Lang));
reg.GetLong(SORT_STR, (long *)&Sort);
// reg.GetInt(UPDATETIME_STR, &UpdateTime);
reg.GetInt(KEEPHOSTTIME_STR, &KeepHostTime);
reg.GetInt(MSGMINIMIZE_STR, &MsgMinimize);
reg.GetInt(DEFAULTURL_STR, &DefaultUrl);
reg.GetInt(SHELLEXEC_STR, &ShellExec);
reg.GetInt(EXTENDENTRY_STR, &ExtendEntry);
reg.GetInt(CONTROLIME_STR, &ControlIME);
reg.GetInt(GLIDLINE_STR, &GlidLineCheck);
reg.GetInt(COLUMNITEMS_STR, (int *)&ColumnItems);
reg.GetStr(QUOTESTR_STR, QuoteStr, sizeof(QuoteStr));
if (reg.CreateKey(HOTKEY_STR))
{
reg.GetInt(HOTKEYCHECK_STR, &HotKeyCheck);
reg.GetInt(HOTKEYMODIFY_STR, &HotKeyModify);
reg.GetInt(HOTKEYSEND_STR, &HotKeySend);
reg.GetInt(HOTKEYRECV_STR, &HotKeyRecv);
reg.GetInt(HOTKEYMISC_STR, &HotKeyMisc);
reg.CloseKey();
}
reg.GetInt(LOGCHECK_STR, &LogCheck);
reg.GetStr(LOGFILE_STR, LogFile, sizeof(LogFile));
if (LogCheck)
LogMng::StrictLogFile(LogFile);
reg.GetStr(SOUNDFILE_STR, SoundFile, sizeof(SoundFile));
reg.GetStr(ICON_STR, IconFile, sizeof(IconFile));
reg.GetStr(REVICON_STR, RevIconFile, sizeof(RevIconFile));
reg.GetStr(LASTOPEN_STR, lastOpenDir, sizeof(lastOpenDir));
reg.GetStr(LASTSAVE_STR, lastSaveDir, sizeof(lastSaveDir));
// Send/Recv Window Location
if (reg.CreateKey(WINSIZE_STR))
{
reg.GetInt(SENDNICKNAME_STR, &SendWidth[SW_NICKNAME]);
reg.GetInt(SENDUSERNAME_STR, &SendWidth[SW_USER]);
reg.GetInt(SENDABSENCE_STR, &SendWidth[SW_ABSENCE]);
reg.GetInt(SENDPRIORITY_STR, &SendWidth[SW_PRIORITY]);
reg.GetInt(SENDGROUPNAME_STR, &SendWidth[SW_GROUP]);
reg.GetInt(SENDHOSTNAME_STR, &SendWidth[SW_HOST]);
reg.GetInt(SENDIPADDR_STR, &SendWidth[SW_IPADDR]);
if (reg.CreateKey(SENDORDER_STR))
{
for (int cnt=0; cnt < MAX_SENDWIDTH; cnt++)
{
wsprintf(buf, "%d", cnt);
reg.GetInt(buf, &SendOrder[cnt]);
}
reg.CloseKey();
}
for (cnt=0; cnt < MAX_SENDWIDTH; cnt++)
{
if (SendOrder[cnt] >= MAX_SENDWIDTH || SendOrder[cnt] < 0)
break;
for (int cnt2=cnt+1; cnt2 < MAX_SENDWIDTH; cnt2++)
if (SendOrder[cnt] == SendOrder[cnt2])
break;
if (cnt2 != MAX_SENDWIDTH)
break;
}
if (cnt != MAX_SENDWIDTH)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -