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

📄 cfg.cpp

📁 带有工程文件的飞鸽传输源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
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 = true;
	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, "IPMsgLog.txt", 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 + -