Ejemplo n.º 1
0
/*
	Window 生成時の CallBack
*/
BOOL TAboutDlg::EvCreate(LPARAM lParam)
{
	SetDlgIcon(hWnd);

	char	buf[512], buf2[512];
	GetDlgItemTextU8(ABOUT_TEXT, buf, sizeof(buf));
	wsprintf(buf2, buf, GetVersionStr());
	SetDlgItemTextU8(ABOUT_TEXT, buf2);

	if (rect.left == CW_USEDEFAULT)
	{
		GetWindowRect(&rect);
		int xsize = rect.right - rect.left, ysize = rect.bottom - rect.top;
		int	cx = ::GetSystemMetrics(SM_CXFULLSCREEN), cy = ::GetSystemMetrics(SM_CYFULLSCREEN);
		int	x = (cx - xsize)/2;
		int y = (cy - ysize)/2;

		MoveWindow((x < 0) ? 0 : x % (cx - xsize), (y < 0) ? 0 : y % (cy - ysize),
					xsize, ysize, FALSE);
	}
	else
		MoveWindow(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, FALSE);

	return	TRUE;
}
Ejemplo n.º 2
0
/*
	メインダイアログ用 WM_INITDIALOG 処理ルーチン
*/
BOOL TUninstDlg::EvCreate(LPARAM lParam)
{
	char	title[256], title2[256];
	GetWindowText(title, sizeof(title));
	::wsprintf(title2, "%s ver%s", title, GetVersionStr());
	SetWindowText(title2);

	GetWindowRect(&rect);
	int		cx = ::GetSystemMetrics(SM_CXFULLSCREEN), cy = ::GetSystemMetrics(SM_CYFULLSCREEN);
	int		xsize = rect.right - rect.left, ysize = rect.bottom - rect.top;

	::SetClassLong(hWnd, GCL_HICON, (LONG)::LoadIcon(TApp::GetInstance(), (LPCSTR)SETUP_ICON));
	MoveWindow((cx - xsize)/2, (cy - ysize)/2, xsize, ysize, TRUE);
	Show();

// 現在ディレクトリ設定
	char	resetupDir[MAX_PATH_U8];
	GetModuleFileNameU8(NULL, resetupDir, sizeof(resetupDir));
	GetParentDirU8(resetupDir, resetupDir);
	SetDlgItemTextU8(RESETUP_EDIT, resetupDir);

	if (runasWnd) {
		::SendMessage(runasWnd, IPMSG_QUIT_MESSAGE, 0, 0);
		CheckDlgButton(DELPUBKEY_CHECK, 1);
		PostMessage(WM_COMMAND, IDOK, 0);
	}

	return	TRUE;
}
Ejemplo n.º 3
0
int main(int argc, char **argv)
{
	FILEINFO gFileInfo;
	if (argc > 1)
	{
		gFileInfo.SetInputFileName(argv[1]);
	}
	gFileInfo.InitInputFileName("dat");
	gFileInfo.IntOutputFileName("pfos");
	cpGetErrorInfo()->SetMessageFile(gFileInfo.GetOutFile());

	sprintf(ErrorMessage[0], "欢迎使用潮流计算程序");
	sprintf(ErrorMessage[1], GetVersionStr());
	sprintf(ErrorMessage[2], "\n");
	cpGetErrorInfo()->PrintWarning(-1, 3);

	int flag;
	flag = gNetWorkInfo.ReadFile(gFileInfo.GetInputFileName());
	if (flag != 1)
		return 0;

	gNetWorkInfo.NetLink();
	gNetWorkInfo.NetAnalysis();

	if (gNetWorkInfo.NetError != 1)
	{
		sprintf(ErrorMessage[0], "数据存在错误,不能进行潮流计算");
		cpGetErrorInfo()->PrintError(1);
		return 0;
	}

	//潮流计算
	if (PowerFlowCal(&gNetWorkInfo) != 1)
	{
		return 0;
	}
	//PFCalPara tCalPara;
	//tCalPara.MaxIter=50;
	//tCalPara.BusPMaxErr=0.005f;
	//tCalPara.BusQMaxErr=0.005f;
	//
	//PFSOLUTION_BASE* tPFCal = makeNRSolver(&gNetWorkInfo);
	//if (tPFCal->Calculate(tCalPara)!=1)
	//{
	//	return 0;
	//}

	gNetWorkInfo.OutputPFOFile(gFileInfo.GetOutFile());

	return 0;
}
Ejemplo n.º 4
0
void TMainDlg::WriteLogHeader(HANDLE hFile, BOOL add_filelog)
{
	static const char *head_start = "=================================================";
	static const char *head_end   = "-------------------------------------------------";

	char	buf[1024];

	::SetFilePointer(hFile, 0, 0, FILE_END);

	DWORD len = sprintf(buf, "%s\r\nFastCopy(%s%s) start at %d/%02d/%02d %02d:%02d:%02d\r\n\r\n",
		head_start, GetVersionStr(), GetVerAdminStr(),
		startTm.wYear, startTm.wMonth, startTm.wDay,
		startTm.wHour, startTm.wMinute, startTm.wSecond);

	::WriteFile(hFile, buf, len, &len, 0);
	if (pathLogBuf) {
		::WriteFile(hFile, pathLogBuf, (DWORD)strlen(pathLogBuf), &len, 0);
	}

	if (add_filelog && *fileLogPath) {
		len = sprintf(buf, "<FileLog> %s\r\n",
				cfg.isUtf8Log ? WtoU8s(fileLogPath) : WtoAs(fileLogPath));
		::WriteFile(hFile, buf, len, &len, 0);
	}

	if (finActIdx >= 1) {
		const WCHAR	*title = cfg.finActArray[finActIdx]->title;
		len = sprintf(buf, "<PostPrc> %s\r\n%s\r\n",
						cfg.isUtf8Log ? WtoU8s(title) : WtoAs(title), head_end);
		::WriteFile(hFile, buf, len, &len, 0);
	}
	else if (pathLogBuf || (add_filelog && *fileLogPath)) {
		len = sprintf(buf, "%s\r\n", head_end);
		::WriteFile(hFile, buf, len, &len, 0);
	}
}
Ejemplo n.º 5
0
QString CCrashStack::GetExceptionInfo()
{
        WCHAR		Module_Name[MAX_PATH];
        PBYTE		Module_Addr;

        QString sRet;
        char buffer[512]={0};

        QString sTmp = GetVersionStr();
        sRet.append(sTmp);
        sRet.append("Process:  ");

        GetModuleFileName(NULL, Module_Name, MAX_PATH);
        sRet.append(QString::fromWCharArray(Module_Name));
        sRet.append("\n");

        // If exception occurred.
        if (m_pException)
        {
                EXCEPTION_RECORD &	E = *m_pException->ExceptionRecord;
                CONTEXT &			C = *m_pException->ContextRecord;

                memset(buffer, 0, sizeof(buffer));
                sprintf(buffer, "Exception Addr:  %08X  ", (int)E.ExceptionAddress);
                sRet.append(buffer);
                // If module with E.ExceptionAddress found - save its path and date.
                QString module = GetModuleByRetAddr((PBYTE)E.ExceptionAddress, Module_Addr);
                if (module.length() > 0)
                {
                    sRet.append(" Module: ");

                    sRet.append(module);
                }

                memset(buffer, 0, sizeof(buffer));
                sprintf(buffer, "\nException Code:  %08X\n", (int)E.ExceptionCode);
                sRet.append(buffer);

                if (E.ExceptionCode == EXCEPTION_ACCESS_VIOLATION)
                {
                        // Access violation type - Write/Read.
                    memset(buffer, 0, sizeof(buffer));
                    sprintf(buffer,"%s Address:  %08X\n",
                            (E.ExceptionInformation[0]) ? "Write" : "Read", (int)E.ExceptionInformation[1]);
                    sRet.append(buffer);
                }


                sRet.append("Instruction: ");
                for (int i = 0; i < 16; i++)
                {
                    memset(buffer, 0, sizeof(buffer));
                    sprintf(buffer, " %02X",  PBYTE(E.ExceptionAddress)[i]);
                    sRet.append(buffer);
                }

                sRet.append("\nRegisters: ");

                memset(buffer, 0, sizeof(buffer));
                sprintf(buffer, "\nEAX: %08X  EBX: %08X  ECX: %08X  EDX: %08X",  (unsigned int)C.Eax,(unsigned int) C.Ebx, (unsigned int)C.Ecx, (unsigned int)C.Edx);
                sRet.append(buffer);

                memset(buffer, 0, sizeof(buffer));
                sprintf(buffer, "\nESI: %08X  EDI: %08X  ESP: %08X  EBP: %08X", (unsigned int)C.Esi, (unsigned int)C.Edi, (unsigned int)C.Esp, (unsigned int)C.Ebp);
                sRet.append(buffer);

                memset(buffer, 0, sizeof(buffer));
                sprintf(buffer, "\nEIP: %08X  EFlags: %08X", (unsigned int)C.Eip,(unsigned int) C.EFlags);
                sRet.append(buffer);

        } //if (pException)

        sRet.append("\nCall Stack:");
        QString sCallstack = this->GetCallStack(m_pException);
        sRet.append(sCallstack);

        return sRet;
}
Ejemplo n.º 6
0
int main(int argc, char **argv)
{
	char DATFileName[_MAX_PATH_];
	char SWIFileName[_MAX_PATH_];
	char OutFileName[_MAX_PATH_];
	char CurFileName[_MAX_PATH_];
	FILE* mfOutputFile = NULL;
	if (argc > 2)
	{
		strcpy(DATFileName, argv[1]);
		strcpy(SWIFileName, argv[2]);
	}
	else{
		printf("必须输入潮流DAT文件和暂态SWI文件");
		printf("press Enter to exit\n");
		getchar();
		return 0;
	}
	if (_access(DATFileName, 0) == -1)
	{
		printf("File: %s doesn't exist.\n", DATFileName);
		printf("press Enter to exit\n");
		getchar();
		return 0;
	}
	if (_access(SWIFileName, 0) == -1)
	{
		printf("File: %s doesn't exist.\n", SWIFileName);
		printf("press Enter to exit\n");
		getchar();
		return 0;
	}
	strcpy(OutFileName, SWIFileName);
	char *ex;
	ex = strrchr(OutFileName, '.');
	if (ex != NULL)
	{
		*ex = '\0';
	}
	strcpy(CurFileName, OutFileName);
	strcat(OutFileName, "-DigAnalTE.out");
	strcat(CurFileName, "-DigAnalTE.txt");//BPA的cur文件有特殊格式
	OpenFile(mfOutputFile, OutFileName, "w+");

	cpGetErrorInfo()->SetMessageFile(mfOutputFile);//设置FILE后,所有错误信息就可以记录在这个文件中了

	sprintf(ErrorMessage[0], "欢迎使用暂态计算程序");
	sprintf(ErrorMessage[1], GetVersionStr());
	sprintf(ErrorMessage[2], "\n");
	cpGetErrorInfo()->PrintWarning(-1, 3);

	int flag;
	flag = gDynWorkInfo.ReadBPAFile(DATFileName, SWIFileName);
	if (flag != 1)
		return 0;

	gDynWorkInfo.NetLink();
	gDynWorkInfo.NetAnalysis();

	if (gDynWorkInfo.NetError != 1)
	{
		sprintf(ErrorMessage[0], "数据存在错误,不能进行潮流计算");
		cpGetErrorInfo()->PrintError(1);
		return 0;
	}

	flag = gFault.ReadFile(SWIFileName);
	if (flag != 1)
	{
		sprintf(ErrorMessage[0], "故障数据读取失败,请检查数据文件");
		cpGetErrorInfo()->PrintError(1);
		return 0;
	}

	//潮流计算
	if (PowerFlowCal(&gDynWorkInfo) != 1)
	{
		return 0;
	}

	flag = gDynWorkInfo.DynInitial();
	if (flag != 1)
	{
		sprintf(ErrorMessage[0], "动态模型初始化失败,退出");
		cpGetErrorInfo()->PrintError(1);
		return 0;
	}

	TDSIMULATION tSimulator;
	tSimulator.SetDynModel(&gDynWorkInfo);
	flag = tSimulator.CheckInitalCalcul();
	if (flag != 1)
	{
		sprintf(ErrorMessage[0], "初始化计算失败,退出");
		cpGetErrorInfo()->PrintError(1);
		return 0;
	}
	flag = tSimulator.Calculate(&gFault);
	if (flag != 1)
	{
		sprintf(ErrorMessage[0], "暂态计算失败,退出");
		cpGetErrorInfo()->PrintError(1);
		return 0;
	}
	tSimulator.WriteCurve(CurFileName);

	return 0;
}
Ejemplo n.º 7
0
Archivo: cfg.cpp Proyecto: glukki/ipmsg
BOOL Cfg::WriteRegistry(int ctl_flg)
{
	char	buf[MAX_LISTBUF], val[MAX_LISTBUF];
	int		i;

	GetRegName(buf, nicAddr, portNo);
	TRegistry	reg(HS_TOOLS, buf);

	if (ctl_flg & CFG_GENERAL)
	{
		reg.SetStr(NULL, GetVersionStr());
		reg.SetInt(LCID_KEY, lcid);
		reg.SetInt(NOBEEP_STR, NoBeep);
		reg.SetInt(NOTCP_STR, NoTcp);
		reg.SetInt(LISTGET_STR, ListGet);
		reg.SetInt(LISTGETMSEC_STR, (int)ListGetMSec);
		reg.SetInt(RETRYMSEC_STR, (int)RetryMSec);
		reg.SetInt(RETRYMAX_STR, (int)RetryMax);
		reg.SetInt(IsWinNT() ? RECVMAXNT_STR : RECVMAX95_STR, (int)RecvMax);
		reg.SetInt(NOERASE_STR, NoErase);
//		reg.SetInt(DEBUG_STR, Debug);
		reg.SetInt(NOPOPUPCHECK_STR, NoPopupCheck);
		reg.SetInt(OPENCHECK_STR, OpenCheck);
		reg.SetInt(ALLOWSENDLIST_STR, AllowSendList);
		reg.SetInt(FILETRANSOPT_STR, fileTransOpt);
		reg.SetInt(RESOLVEOPT_STR, ResolveOpt);
//		reg.SetInt(LETTERKEY_STR, LetterKey);

//		reg.SetInt(REMOTEGRACE_STR, RemoteGraceSec);
		reg.SetStr(REBOOT_STR, RemoteReboot);
		reg.SetInt(REBOOTMODE_STR, RemoteRebootMode);
		reg.SetStr(EXIT_STR, RemoteExit);
		reg.SetInt(EXITMODE_STR, RemoteExitMode);

		reg.SetInt(CLIPMODE_STR, ClipMode);
//		reg.SetInt(CLIPMAX_STR, ClipMax);
//		reg.SetInt(CAPTUREDELAY_STR, CaptureDelay);
//		reg.SetInt(CAPTUREDELAYEX_STR, CaptureDelayEx);
		reg.SetInt(CAPTUREMINIMIZE_STR, CaptureMinimize);
		reg.SetInt(CAPTURECLIP_STR, CaptureClip);
		reg.SetInt(CAPTURESAVE_STR, CaptureSave);
		reg.SetInt(OPENMSGTIME_STR, OpenMsgTime);
		reg.SetInt(RECVMSGTIME_STR, RecvMsgTime);
		reg.SetInt(BALLOONNOINFO_STR, BalloonNoInfo);
//		reg.SetInt(TASKBARUI_STR, TaskbarUI);
//		reg.SetInt(MARKERTHICK_STR, MarkerThick);

		if (IsWinVista()) reg.SetInt(IPV6MODE_STR, IPv6ModeNext);
//		if (IsWinVista()) reg.SetStr(IPV6MULITCAST, IPv6Multicast);

//		reg.SetInt(VIEWMAX_STR, ViewMax);
//		reg.SetInt(TRANSMAX_STR, TransMax);
//		reg.SetInt(TCPBUFMAX_STR, TcpbufMax);
//		reg.SetInt(IOBUFMAX_STR, IoBufMax);
		reg.SetInt(LUMPCHECK_STR, LumpCheck);
		reg.SetInt(ENCTRANSCHECK_STR, EncTransCheck);
	}

	if (ctl_flg & CFG_ABSENCE)
	{
		reg.SetInt(ABSENCESAVE_STR, AbsenceSave);
		reg.SetInt(ABSENCECHECK_STR, AbsenceCheck);
		reg.SetInt(ABSENCEMAX_STR, AbsenceMax);
		if (reg.CreateKey(ABSENCESTR_STR))
		{
			for (i=0; i < AbsenceMax; i++)
			{
				char	key[MAX_PATH_U8];
				sprintf(key, "%s%d", ABSENCESTR_STR, i);
				reg.SetStr(key, AbsenceStr[i]);
				sprintf(key, "%s%d", ABSENCEHEAD_STR, i);
				reg.SetStr(key, AbsenceHead[i]);
			}
		}
		reg.CloseKey();
	}

	if (ctl_flg & CFG_GENERAL)
	{
		reg.SetStr(PASSWORD_STR, PasswordStr);
		reg.SetInt(PASSWDLOGCHECK_STR, PasswdLogCheck);
		reg.SetInt(DELAYTIME_STR, DelayTime);
		reg.SetInt(QUOTECHECK_STR, QuoteCheck);
		reg.SetInt(SECRETCHECK_STR, SecretCheck);
		reg.SetInt(LOGONLOG_STR, LogonLog);
		reg.SetInt(RECVLOGONDISP_STR, RecvLogonDisp);
		reg.SetInt(IPADDRCHECK_STR, IPAddrCheck);
		reg.SetInt(RECVIPADDRCHECK_STR, RecvIPAddr);
		reg.SetInt(ONECLICKPOPUP_STR, OneClickPopup);
		reg.SetInt(BALLOONNOTIFY_STR, BalloonNotify);		
		reg.SetInt(TRAYICON_STR, TrayIcon);
		reg.SetInt(ABNORMALBTN_STR, AbnormalButton);
		reg.SetInt(DIALUPCHECK_STR, DialUpCheck);
		reg.SetInt(ABSENCENONPOPUP_STR, AbsenceNonPopup);
		reg.SetStr(NICKNAMESTR_STR, NickNameStr);
		reg.SetStr(GROUPNAMESTR_STR, GroupNameStr);
		reg.SetLong(SORT_STR, Sort);
		reg.SetInt(UPDATETIME_STR, UpdateTime);
		reg.SetInt(KEEPHOSTTIME_STR, KeepHostTime);
		reg.SetInt(EXTENDENTRY_STR, ExtendEntry);
		reg.SetInt(EXTENDBROADCAST_STR, ExtendBroadcast);
		reg.SetInt(MULTICASTMODE_STR, MulticastMode);
		reg.SetInt(CONTROLIME_STR, ControlIME);
		reg.SetInt(GRIDLINE_STR, GridLineCheck);
		reg.SetInt(COLUMNITEMS_STR, ColumnItems);
		reg.SetStr(QUOTESTR_STR, QuoteStr);
		if (reg.CreateKey(HOTKEY_STR))
		{
			reg.SetInt(HOTKEYCHECK_STR, HotKeyCheck);
			reg.SetInt(HOTKEYMODIFY_STR, HotKeyModify);
			reg.SetInt(HOTKEYSEND_STR, HotKeySend);
			reg.SetInt(HOTKEYRECV_STR, HotKeyRecv);
			reg.SetInt(HOTKEYMISC_STR, HotKeyMisc);
			reg.CloseKey();
		}
		reg.SetInt(LOGCHECK_STR, LogCheck);
		reg.SetInt(LOGUTF8_STR, LogUTF8);
		reg.SetStr(LOGFILE_STR, LogFile);
		reg.SetStr(SOUNDFILE_STR, SoundFile);
		reg.SetStr(ICON_STR, IconFile);
		reg.SetStr(REVICON_STR, RevIconFile);
		reg.SetStr(LASTOPEN_STR, lastOpenDir);
		reg.SetStr(LASTSAVE_STR, lastSaveDir);
		reg.SetInt(LRUUSERMAX_STR, lruUserMax);

		reg.SetStr(AUTOSAVEDIR_STR,   autoSaveDir);
		reg.SetInt(AUTOSAVETOUT_STR,  autoSaveTout);
		reg.SetInt(AUTOSAVEMAX_STR,   autoSaveMax);
		reg.SetInt(AUTOSAVELEVEL_STR, autoSaveLevel);
		reg.SetInt(AUTOSAVEFLAGS_STR, autoSaveFlags);
	}

	if ((ctl_flg & CFG_WINSIZE) && reg.CreateKey(WINSIZE_STR))
	{
		reg.SetInt(SENDNICKNAME_STR, SendWidth[SW_NICKNAME]);
		reg.SetInt(SENDUSERNAME_STR, SendWidth[SW_USER]);
		reg.SetInt(SENDABSENCE_STR, SendWidth[SW_ABSENCE]);
		reg.SetInt(SENDPRIORITY_STR, SendWidth[SW_PRIORITY]);
		reg.SetInt(SENDGROUPNAME_STR, SendWidth[SW_GROUP]);
		reg.SetInt(SENDHOSTNAME_STR, SendWidth[SW_HOST]);
		reg.SetInt(SENDIPADDR_STR, SendWidth[SW_IPADDR]);

		if (reg.CreateKey(SENDORDER_STR))
		{
			for (i=0; i < MAX_SENDWIDTH; i++)
			{
				sprintf(buf, "%d", i);
				reg.SetInt(buf, SendOrder[i]);
			}
			reg.CloseKey();
		}

		reg.SetInt(SENDXDIFF_STR, SendXdiff);
		reg.SetInt(SENDYDIFF_STR, SendYdiff);
		reg.SetInt(SENDMIDYDIFF_STR, SendMidYdiff);
		reg.SetInt(SENDSAVEPOS_STR, SendSavePos);
		reg.SetInt(SENDXPOS_STR, SendXpos);
		reg.SetInt(SENDYPOS_STR, SendYpos);

		reg.SetInt(RECVXDIFF_STR, RecvXdiff);
		reg.SetInt(RECVYDIFF_STR, RecvYdiff);
		reg.SetInt(RECVSAVEPOS_STR, RecvSavePos);
		reg.SetInt(RECVXPOS_STR, RecvXpos);
		reg.SetInt(RECVYPOS_STR, RecvYpos);

		reg.SetInt(HISTXDIFF_STR, HistXdiff);
		reg.SetInt(HISTYDIFF_STR, HistYdiff);
		reg.SetInt(HISTUSER_STR, HistWidth[HW_USER]);
		reg.SetInt(HISTODATE_STR, HistWidth[HW_ODATE]);
		reg.SetInt(HISTSDATE_STR, HistWidth[HW_SDATE]);
		reg.SetInt(HISTID_STR, HistWidth[HW_ID]);

		reg.CloseKey();
	}

	if ((ctl_flg & CFG_FONT) && reg.CreateKey(FONT_STR))
	{
		WriteFontRegistry(&reg, SENDEDITFONT_STR, &SendEditFont);
		WriteFontRegistry(&reg, SENDLISTFONT_STR, &SendListFont);
		WriteFontRegistry(&reg, RECVHEADFONT_STR, &RecvHeadFont);
		WriteFontRegistry(&reg, RECVEDITFONT_STR, &RecvEditFont);
		WriteFontRegistry(&reg, LOGVIEWFONT_STR, &LogViewFont);
		reg.CloseKey();
	}

	if ((ctl_flg & CFG_BROADCAST) && reg.CreateKey(BROADCAST_STR))
	{
		i = 0;
		for (TBrObj *obj=brList.TopObj(); obj; obj=brList.NextObj(obj))
		{
			sprintf(buf, "%d", i++);
			reg.SetStr(buf, obj->Host());
		}
		while (1)
		{
			sprintf(buf, "%d", i++);
			if (!reg.GetStr(buf, val, sizeof(val)))
				break;
			if (!reg.DeleteValue(buf))
				break;
		}
		reg.CloseKey();
	}

	if (ctl_flg & CFG_CLICKURL)
	{
		reg.SetInt(DEFAULTURL_STR, DefaultUrl);
		reg.SetInt(SHELLEXEC_STR, ShellExec);
		if (reg.CreateKey(CLICKABLEURL_STR))
		{

			for (UrlObj *obj = urlList.TopObj(); obj; obj = urlList.NextObj(obj))
				reg.SetStr(obj->protocol, obj->program);
			reg.CloseKey();
		}
	}

	if ((ctl_flg & CFG_PRIORITY) && reg.CreateKey(PRIORITY_STR))
	{
		reg.SetInt(PRIORITYMAX_STR, PriorityMax);
		reg.SetInt(PRIORITYREJECT_STR, PriorityReject);
#if 0
		for (i=0; i < PriorityMax; i++)
		{
			sprintf(buf, "%d", i);

			if (reg.CreateKey(buf))
			{
				reg.SetStr(PRIORITYSOUND_STR, PrioritySound[i] ? PrioritySound[i] : "");
				reg.CloseKey();
			}
		}
#endif
		reg.CloseKey();
	}

	if ((ctl_flg & CFG_HOSTINFO) && reg.CreateKey(HOSTINFO_STR))
	{
		Time_t	now_time = Time();
		BYTE	pubkey[MAX_BUF];
		int		pubkeySize;

		if (ctl_flg & CFG_DELHOST)
			reg.DeleteChildTree();

		for (i=0; i < priorityHosts.HostCnt(); i++)
		{
			Host	*host = priorityHosts.GetHost(i);
			int		to_store_size = 2048 / 8; // 2048bits RSA key
			sprintf(buf, "%s:%s", host->hostSub.userName, host->hostSub.hostName);

			if (host->updateTime + KeepHostTime < now_time ||
				(host->pubKey.KeyLen() < to_store_size && host->priority == DEFAULT_PRIORITY))
			{
				if (ctl_flg & CFG_DELCHLDHOST)
					reg.DeleteChildTree(buf);
			}
			else if (reg.CreateKey(buf))
			{
				reg.SetStr(USERNAME_STR, host->hostSub.userName);
				reg.SetStr(HOSTNAME_STR, host->hostSub.hostName);
				reg.SetLong(IPADDR_STR, host->hostSub.addr.V4Addr());
				reg.SetInt(PORTNO_STR, host->hostSub.portNo);
				reg.SetStr(NICKNAME_STR, host->nickName);
				reg.SetStr(GROUPNAME_STR, host->groupName);
				if (*host->alterName) reg.SetStr(ALTERNAME_STR, host->alterName);
				reg.SetInt(PRIORITY_STR, host->priority);
				reg.SetLong(UPDATETIME_STR, (long)host->updateTime);
				if (host->pubKey.KeyLen() >= to_store_size) {
					char	*p = (char *)GetUserNameDigestField(host->hostSub.userName);
					if (p && (pubkeySize = host->pubKey.Serialize(pubkey, sizeof(pubkey))) > 0) {
						reg.SetByte(PUBLICKEY_STR, pubkey, pubkeySize);
					}
				}
				reg.CloseKey();
			}
		}
		reg.CloseKey();
	}

	if ((ctl_flg & CFG_FINDHIST) && reg.CreateKey(FINDSTR_STR))
	{
		reg.SetInt(FINDMAX_STR, FindMax);
		reg.SetInt(FINDALL_STR, FindAll);
		for (i=0; i < FindMax; i++)
		{
			char	key[MAX_PATH_U8];
			sprintf(key, "%d", i);
			reg.SetStr(key, FindStr[i]);
		}
		reg.CloseKey();
	}

	if (ctl_flg & CFG_LRUUSER) {
		reg.DeleteChildTree(LRUUSERKEY_STR);
		if (reg.CreateKey(LRUUSERKEY_STR)) {
			UsersObj *obj=lruUserList.TopObj();
			for (i=0; obj; i++) {
				sprintf(buf, "%d", i);
				if (!reg.CreateKey(buf)) break;
				UserObj *u = obj->users.TopObj();
				for (int j=0; u; j++) {
					sprintf(buf, "%d", j);
					if (!reg.CreateKey(buf)) break;
					reg.SetStr(USERNAME_STR, u->hostSub.userName);
					reg.SetStr(HOSTNAME_STR, u->hostSub.hostName);
					reg.CloseKey();
					u = obj->users.NextObj(u);
				}
				reg.CloseKey();
				obj = lruUserList.NextObj(obj);
			}
			reg.CloseKey();
		}
	}

// private/public key
	if (ctl_flg & CFG_CRYPT) {
		for (int i=KEY_1024; i <= KEY_2048; i++) {
			const char *key = (i == KEY_1024) ? CRYPT_STR : CRYPT2_STR;
			if (reg.CreateKey(key) && priv[i].blob)
			{
				reg.SetByte(PRIVBLOB_STR, priv[i].blob, priv[i].blobLen);
				if (priv[i].encryptSeed)
					reg.SetByte(PRIVSEED_STR, priv[i].encryptSeed, priv[i].encryptSeedLen);
				reg.SetInt(PRIVTYPE_STR, priv[i].encryptType);
				reg.CloseKey();
			}
		}
	}

	return	TRUE;
}
Ejemplo n.º 8
0
Archivo: cfg.cpp Proyecto: glukki/ipmsg
BOOL Cfg::ReadRegistry(void)
{
	char	buf[MAX_BUF], val[MAX_BUF];
	int		i;

	GetRegName(buf, nicAddr, portNo);
	TRegistry	reg(HS_TOOLS, buf);

	if (!reg.GetInt(NOPOPUPCHECK_STR, &NoPopupCheck))
	{
		GetRegName(buf, 0, portNo);
		reg.ChangeApp(HS_TOOLS, buf);
		if (!reg.GetInt(NOPOPUPCHECK_STR, &NoPopupCheck))
			reg.ChangeApp(HS_TOOLS, GetLoadStr(IDS_IPMSG));
	}

	lcid = -1;
	NoBeep = FALSE;
	NoTcp = FALSE;
	ListGet = FALSE;
	HotKeyCheck = TRUE;
	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 = TRUE;
	OpenCheck = 1;
	AbsenceSave = FALSE;
	AbsenceCheck = FALSE;
	AbsenceMax = IPMSG_DEFAULT_ABSENCEMAX;
	AbsenceChoice = 0;
	FindMax = IPMSG_DEFAULT_FINDMAX;
	FindAll = TRUE;
	DelayTime = IPMSG_DEFAULT_DELAY;
	QuoteCheck = TRUE;
	SecretCheck = TRUE;
	LogonLog = TRUE;
	RecvLogonDisp = FALSE;
	IPAddrCheck = TRUE;
	RecvIPAddr = TRUE;
	OneClickPopup = FALSE;
	BalloonNotify = TRUE;
	TrayIcon = TRUE;
	AbnormalButton = FALSE;
	DialUpCheck = FALSE;
	*NickNameStr = 0;
	*GroupNameStr = 0;
	AbsenceNonPopup = TRUE;
	Sort = IPMSG_NAMESORT;
	UpdateTime = IPMSG_DEFAULT_UPDATETIME;
	KeepHostTime = IPMSG_DEFAULT_KEEPHOSTTIME;
	DefaultUrl = TRUE;
	ShellExec = FALSE;
	ExtendEntry = TRUE;
	ExtendBroadcast = 1;
	MulticastMode = 0;

	ControlIME = 1;
	GridLineCheck = TRUE;
	PriorityMax = DEFAULT_PRIORITYMAX;
	PriorityReject = 0;
	AllowSendList = TRUE;
	fileTransOpt = 0;
	ResolveOpt = 0;
	LetterKey = IsLang(LANG_JAPANESE) ? FALSE : TRUE;

	RemoteGraceSec = IPMSG_DEFAULT_REMOTEGRACE;
	RemoteRebootMode = 0;
	*RemoteReboot = 0;
	RemoteExitMode = 0;
	*RemoteExit = 0;

	ClipMode = IPMSG_DEFAULT_CLIPMODE;
	ClipMax = IPMSG_DEFAULT_CLIPMAX;
	CaptureDelay   = 300;
	CaptureDelayEx = 500;
	CaptureMinimize = TRUE;
	CaptureClip = TRUE;
	CaptureSave = FALSE;
	OpenMsgTime = IPMSG_DEFAULT_OPENMSGTIME;
	RecvMsgTime = IPMSG_DEFAULT_RECVMSGTIME;
	BalloonNoInfo = FALSE;
	TaskbarUI = /*IsWin7() ? TRUE :*/ FALSE;
	MarkerThick = IPMSG_DEFAULT_MARKER_THICK;
	IPv6Mode = IPv6ModeNext = 0;
	strcpy(IPv6Multicast, IPMSG_DEFAULT_MULTICAST_ADDR6); // in ipmsg.h

	ViewMax = IPMSG_DEFAULT_VIEWMAX;
	TransMax = IPMSG_DEFAULT_TRANSMAX;
	TcpbufMax = IPMSG_DEFAULT_TCPBUFMAX;
	IoBufMax = IPMSG_DEFAULT_IOBUFMAX;
	LumpCheck = FALSE;
	EncTransCheck = TRUE;
	lruUserMax = IPMSG_DEFAULT_LRUUSERMAX;

	// CryptProtectData is available only Win2K/XP
	for (i=0; i < MAX_KEY; i++) {
		priv[i].encryptType = IsWin2K() ? PRIV_BLOB_DPAPI : PRIV_BLOB_RAW;
	}

	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;

	ColumnItems = 0;
	SetItem(&ColumnItems, SW_NICKNAME, TRUE);
	SetItem(&ColumnItems, SW_GROUP, TRUE);
	SetItem(&ColumnItems, SW_HOST, TRUE);

	for (i=0; i < MAX_SENDWIDTH; i++)
		SendOrder[i] = i;

	SendXdiff		= 0;
	SendYdiff		= 0;
	SendMidYdiff	= 0;
	SendSavePos		= 0;
	SendXpos		= 0;
	SendYpos		= 0;

	RecvXdiff		= 0;
	RecvYdiff		= 0;
	RecvSavePos		= 0;
	RecvXpos		= 0;
	RecvYpos		= 0;

	HistWidth[HW_USER]  = IPMSG_DEFAULT_HWUSER_WIDTH;
	HistWidth[HW_ODATE] = IPMSG_DEFAULT_HWODATE_WIDTH;
	HistWidth[HW_SDATE] = IPMSG_DEFAULT_HWSDATE_WIDTH;
	HistWidth[HW_ID]    = IPMSG_DEFAULT_HWID_WIDTH;
	HistXdiff		= 0;
	HistYdiff		= 0;

	LogCheck = TRUE;
	LogUTF8 = TRUE;
	PasswdLogCheck = FALSE;
	*SoundFile = 0;
	*IconFile = 0;
	*RevIconFile = 0;
	*lastSaveDir = *lastOpenDir = 0;

	*autoSaveDir  = 0;
	autoSaveTout  = IPMSG_DEFAULT_AUTOSAVE_TOUT;
	autoSaveLevel = 0;
	autoSaveFlags = 0;
	autoSaveMax   = IPMSG_DEFAULT_AUTOSAVE_MAX;

	memset(&SendEditFont, 0, sizeof(SendEditFont));
	memset(&SendListFont, 0, sizeof(SendListFont));
	memset(&RecvHeadFont, 0, sizeof(RecvHeadFont));
	memset(&RecvEditFont, 0, sizeof(RecvEditFont));
	memset(&LogViewFont, 0, sizeof(LogViewFont));

	reg.GetInt(LCID_KEY, &lcid);
	reg.GetInt(NOBEEP_STR, &NoBeep);
	reg.GetInt(NOTCP_STR, &NoTcp);
	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(LETTERKEY_STR, &LetterKey);

	reg.GetInt(REMOTEGRACE_STR, &RemoteGraceSec);
	reg.GetStr(REBOOT_STR, RemoteReboot, sizeof(RemoteReboot));
	reg.GetInt(REBOOTMODE_STR, &RemoteRebootMode);
	reg.GetStr(EXIT_STR, RemoteExit, sizeof(RemoteExit));
	reg.GetInt(EXITMODE_STR, &RemoteExitMode);

	reg.GetInt(CLIPMODE_STR, &ClipMode);
	ClipMode |= CLIP_ENABLE;
	reg.GetInt(CLIPMAX_STR, &ClipMax);
	reg.GetInt(CAPTUREDELAY_STR, &CaptureDelay);
	reg.GetInt(CAPTUREDELAYEX_STR, &CaptureDelayEx);
	reg.GetInt(CAPTUREMINIMIZE_STR, &CaptureMinimize);
	reg.GetInt(CAPTURECLIP_STR, &CaptureClip);
	reg.GetInt(CAPTURESAVE_STR, &CaptureSave);
	reg.GetInt(OPENMSGTIME_STR, &OpenMsgTime);
	reg.GetInt(RECVMSGTIME_STR, &RecvMsgTime);
	reg.GetInt(BALLOONNOINFO_STR, &BalloonNoInfo);
	reg.GetInt(TASKBARUI_STR, &TaskbarUI);
	reg.GetInt(MARKERTHICK_STR, &MarkerThick);

	reg.GetStr(IPV6MULITCAST, IPv6Multicast, sizeof(IPv6Multicast));
	if (IsWinVista()) {
		reg.GetInt(IPV6MODE_STR, &IPv6Mode);
		if (nicAddr.size == 16 && !IPv6Mode) IPv6Mode = 2;
		reg.GetStr(IPV6MULITCAST, IPv6Multicast, sizeof(IPv6Multicast));
		if (!*IPv6Multicast) {
			strcpy(IPv6Multicast, IPMSG_DEFAULT_MULTICAST_ADDR6); // in ipmsg.h
		}
	}
	IPv6ModeNext = IPv6Mode;

// 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;
	reg.GetInt(IOBUFMAX_STR, &IoBufMax);
	if (IoBufMax < TransMax)	// transmax 以下の IO/Buf は認めない
		IoBufMax = TransMax;

	reg.GetInt(LUMPCHECK_STR, &LumpCheck);
	reg.GetInt(ENCTRANSCHECK_STR, &EncTransCheck);

// for Absence Message
	typedef char MaxBuf[MAX_PATH_U8];
	AbsenceStr = new MaxBuf[AbsenceMax];
	memset(AbsenceStr, 0, MAX_PATH_U8 * 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 (i=0; i < AbsenceMax; i++)
		{
			char	key[MAX_PATH_U8];

			sprintf(key, "%s%d", ABSENCESTR_STR, i);
			if (!reg.GetStr(key, AbsenceStr[i], sizeof(AbsenceStr[i])))
				strncpyz(AbsenceStr[i], DefaultAbsence[i < IPMSG_DEFAULT_ABSENCEMAX ? i : 0], MAX_PATH_U8);

			sprintf(key, "%s%d", ABSENCEHEAD_STR, i);
			if (!reg.GetStr(key, AbsenceHead[i], sizeof(AbsenceHead[i])))
				strcpy(AbsenceHead[i], DefaultAbsenceHead[i < IPMSG_DEFAULT_ABSENCEMAX ? i : 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 (i=0; i < FindMax; i++)
		{
			char	key[MAX_PATH_U8];
			sprintf(key, "%d", i);
			if (!reg.GetStr(key, FindStr[i], sizeof(FindStr[i])))
				FindStr[i][0] = '\0';
		}
		reg.CloseKey();
	}
	else {
		FindStr = new MaxFind[FindMax];
		memset(FindStr, 0, MAX_NAMEBUF * FindMax);
	}

	reg.GetInt(LRUUSERMAX_STR, &lruUserMax);
	if (reg.OpenKey(LRUUSERKEY_STR)) {
		for (i=0; ; i++) {
			sprintf(buf, "%d", i);
			if (!reg.OpenKey(buf)) break;
			UsersObj *obj = new UsersObj;
			for (int j=0; ; j++) {
				sprintf(buf, "%d", j);
				if (!reg.OpenKey(buf)) break;
				UserObj *u = new UserObj;
				if (reg.GetStr(USERNAME_STR, u->hostSub.userName, sizeof(u->hostSub.userName)) &&
					reg.GetStr(HOSTNAME_STR, u->hostSub.hostName, sizeof(u->hostSub.userName))) {
					obj->users.AddObj(u);
				}
				reg.CloseKey();
			}
			reg.CloseKey();
			lruUserList.AddObj(obj);
		}
		reg.CloseKey();
	}

	*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(LOGONLOG_STR, &LogonLog);
	reg.GetInt(RECVLOGONDISP_STR, &RecvLogonDisp);
	reg.GetInt(IPADDRCHECK_STR, &IPAddrCheck);
	reg.GetInt(RECVIPADDRCHECK_STR, &RecvIPAddr);
	reg.GetInt(ONECLICKPOPUP_STR, &OneClickPopup);
	reg.GetInt(BALLOONNOTIFY_STR, &BalloonNotify);
	reg.GetInt(TRAYICON_STR, &TrayIcon);
	reg.GetInt(ABNORMALBTN_STR, &AbnormalButton);
	reg.GetInt(DIALUPCHECK_STR, &DialUpCheck);
	reg.GetInt(ABSENCENONPOPUP_STR, &AbsenceNonPopup);
	reg.GetStr(NICKNAMESTR_STR, NickNameStr, sizeof(NickNameStr));
	StrictUTF8(NickNameStr);
	reg.GetStr(GROUPNAMESTR_STR, GroupNameStr, sizeof(GroupNameStr));
	StrictUTF8(GroupNameStr);
	reg.GetLong(SORT_STR, (long *)&Sort);
//	reg.GetInt(UPDATETIME_STR, &UpdateTime);
	reg.GetInt(KEEPHOSTTIME_STR, &KeepHostTime);
	reg.GetInt(DEFAULTURL_STR, &DefaultUrl);
	reg.GetInt(SHELLEXEC_STR, &ShellExec);
	reg.GetInt(EXTENDENTRY_STR, &ExtendEntry);
	reg.GetInt(EXTENDBROADCAST_STR, &ExtendBroadcast);

	reg.GetInt(MULTICASTMODE_STR, &MulticastMode);

	reg.GetInt(CONTROLIME_STR, &ControlIME);
	reg.GetInt(GRIDLINE_STR, &GridLineCheck);
	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.GetInt(LOGUTF8_STR, &LogUTF8);
	if (!reg.GetStr(LOGFILE_STR, LogFile, sizeof(LogFile)) || !*LogFile)
		strncpyz(LogFile, "ipmsg.log", sizeof(LogFile));
	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));

	reg.GetStr(AUTOSAVEDIR_STR,   autoSaveDir, sizeof(autoSaveDir));
	reg.GetInt(AUTOSAVETOUT_STR,  &autoSaveTout);
	reg.GetInt(AUTOSAVEMAX_STR,   &autoSaveMax);
	reg.GetInt(AUTOSAVEFLAGS_STR, &autoSaveFlags);
	reg.GetInt(AUTOSAVELEVEL_STR, &autoSaveLevel);

// 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 (i=0; i < MAX_SENDWIDTH; i++)
			{
				sprintf(buf, "%d", i);
				reg.GetInt(buf, &SendOrder[i]);
			}
			reg.CloseKey();
		}
		for (i=0; i < MAX_SENDWIDTH; i++)
		{
			if (SendOrder[i] >= MAX_SENDWIDTH || SendOrder[i] < 0)
				break;
			int i2;
			for (i2=i+1; i2 < MAX_SENDWIDTH; i2++)
				if (SendOrder[i] == SendOrder[i2])
					break;
			if (i2 != MAX_SENDWIDTH)
				break;
		}
		if (i != MAX_SENDWIDTH)
			for (i=0; i < MAX_SENDWIDTH; i++)
				SendOrder[i] = i;

		reg.GetInt(SENDXDIFF_STR, &SendXdiff);
		reg.GetInt(SENDYDIFF_STR, &SendYdiff);
		reg.GetInt(SENDMIDYDIFF_STR, &SendMidYdiff);
		reg.GetInt(SENDSAVEPOS_STR, &SendSavePos);
		reg.GetInt(SENDXPOS_STR, &SendXpos);
		reg.GetInt(SENDYPOS_STR, &SendYpos);

		reg.GetInt(RECVXDIFF_STR, &RecvXdiff);
		reg.GetInt(RECVYDIFF_STR, &RecvYdiff);
		reg.GetInt(RECVSAVEPOS_STR, &RecvSavePos);
		reg.GetInt(RECVXPOS_STR, &RecvXpos);
		reg.GetInt(RECVYPOS_STR, &RecvYpos);

		reg.GetInt(HISTXDIFF_STR, &HistXdiff);
		reg.GetInt(HISTYDIFF_STR, &HistYdiff);
		reg.GetInt(HISTUSER_STR, &HistWidth[HW_USER]);
		reg.GetInt(HISTODATE_STR, &HistWidth[HW_ODATE]);
		reg.GetInt(HISTSDATE_STR, &HistWidth[HW_SDATE]);
		reg.GetInt(HISTID_STR, &HistWidth[HW_ID]);

		reg.CloseKey();
	}

// Send/Recv Window Font
	if (reg.CreateKey(FONT_STR))
	{
		ReadFontRegistry(&reg, SENDEDITFONT_STR, &SendEditFont);
		ReadFontRegistry(&reg, SENDLISTFONT_STR, &SendListFont);
		ReadFontRegistry(&reg, RECVHEADFONT_STR, &RecvHeadFont);
		ReadFontRegistry(&reg, RECVEDITFONT_STR, &RecvEditFont);
		ReadFontRegistry(&reg, LOGVIEWFONT_STR, &LogViewFont);
		reg.CloseKey();
	}

// Broadcast Data
	if (reg.CreateKey(BROADCAST_STR))
	{
		i = 0;
		while (1)
		{
			sprintf(buf, "%d", i++);
			if (!reg.GetStr(buf, val, sizeof(val)))
				break;
			brList.SetHostRaw(val, (ResolveOpt & RS_REALTIME) ? 0 : ResolveAddr(val));
		}
		reg.CloseKey();
	}

// Clickable URL
	for (i=0; DefaultUrlProtocol[i]; i++)
	{
		UrlObj *obj = new UrlObj;
		strncpyz(obj->protocol, DefaultUrlProtocol[i], sizeof(obj->protocol));
		*obj->program = 0;
		urlList.AddObj(obj);
	}

	if (reg.CreateKey(CLICKABLEURL_STR))
	{
		for (i = 0; reg.EnumValue(i, buf, sizeof(buf)) || reg.EnumKey(i, buf, sizeof(buf)); i++)
		{
			UrlObj *obj;
			for (obj = urlList.TopObj(); obj; obj = urlList.NextObj(obj))
				if (stricmp(obj->protocol, buf) == 0)
					break;

			if (obj == NULL)
			{
				obj = new UrlObj;
				urlList.AddObj(obj);
			}
			strncpyz(obj->protocol, buf, sizeof(obj->protocol));
			reg.GetStr(buf, obj->program, sizeof(obj->program));
		}
		reg.CloseKey();
	}

// User Sort Priority
	if (reg.CreateKey(PRIORITY_STR))
	{
		reg.GetInt(PRIORITYMAX_STR, &PriorityMax);
		reg.GetInt(PRIORITYREJECT_STR, &PriorityReject);
#if 0
		PrioritySound = new char *[PriorityMax];
		for (int i=0; i < PriorityMax; i++)
		{
			sprintf(buf, "%d", i);

			if (reg.CreateKey(buf))
			{
				if (reg.GetStr(PRIORITYSOUND_STR, buf, sizeof(buf)) && *buf != '\0')
					PrioritySound[i] = strdup(buf);
				reg.CloseKey();
			}
		}
#endif
		reg.CloseKey();
	}

	if (reg.CreateKey(HOSTINFO_STR))
	{
		int		i = 0, priority = DEFAULT_PRIORITY;
		Host	*host;
		Time_t	default_time = Time() - KeepHostTime / 2;	// 90 日
		BOOL	rewriteFlg = FALSE;

		priorityHosts.Enable(THosts::NAME, TRUE);
		fileHosts.Enable(THosts::NAME_ADDR, TRUE);
		for (i = 0; reg.EnumValue(i, buf, sizeof(buf)) || reg.EnumKey(i, buf, sizeof(buf)); i++)
		{
			if (!reg.OpenKey(buf))
				break;

			BYTE	pubkey[512];
			int		pubkeySize = sizeof(pubkey);

			if (!reg.GetByte(PUBLICKEY_STR, pubkey, &pubkeySize)) pubkeySize = 0;

			if ((!reg.GetInt(PRIORITY_STR, &priority) || priority == DEFAULT_PRIORITY)
					&& pubkeySize == 0) {
				rewriteFlg = TRUE;
			}
			else {
				host = new Host;
				host->priority = priority;
				reg.GetStr(USERNAME_STR, host->hostSub.userName, MAX_NAMEBUF);
				reg.GetStr(HOSTNAME_STR, host->hostSub.hostName, MAX_NAMEBUF);
				reg.GetLong(IPADDR_STR, (long *)&host->hostSub.addr);
				reg.GetInt(PORTNO_STR, &host->hostSub.portNo);
				reg.GetStr(NICKNAME_STR, host->nickName, MAX_NAMEBUF);
				reg.GetStr(GROUPNAME_STR, host->groupName, MAX_NAMEBUF);
				reg.GetStr(ALTERNAME_STR, host->alterName, MAX_NAMEBUF);
				if (!reg.GetLong(UPDATETIME_STR, (long *)&host->updateTime)) {
					host->updateTime = default_time;
				}
				if (pubkeySize) {
					host->pubKey.UnSerialize(pubkey, pubkeySize);
// 古いエントリを削除にする処理は、一旦、様子見
//					char	*p = (char *)GetUserNameDigestField(host->hostSub.userName);
//					if (p) {
//						*p = 0;
//						Host *tmpHost = priorityHosts.GetHostByName(&host->hostSub);
//						if (tmpHost) {
//							priorityHosts.DelHost(tmpHost);
//							if (tmpHost->RefCnt() == 0) delete tmpHost;
//						}
//						*p = '-';
//					}
				}
				priorityHosts.AddHost(host);
			}
			reg.CloseKey();
		}
		reg.CloseKey();
		if (rewriteFlg) WriteRegistry(CFG_HOSTINFO|CFG_DELHOST);
	}

// Self private/public key (1024/2048)
	for (i=KEY_1024; i <= KEY_2048; i++) {
		const char *key = (i == KEY_1024) ? CRYPT_STR : CRYPT2_STR;
		int			need_blob_size = ((i == KEY_1024) ? 1024 : 2048) / 8 * 4;

		if (reg.CreateKey(key))
		{
			BYTE	key[MAX_BUF_EX];
			int		blen = sizeof(key);
			int		slen = sizeof(key);

			if (reg.GetByte(PRIVBLOB_STR, key, &blen) && blen > need_blob_size) {
				priv[i].SetBlob(key, blen);
			}
			if (reg.GetByte(PRIVSEED_STR, key, &slen)) {
				priv[i].SetSeed(key, slen);
			}
			reg.GetInt(PRIVTYPE_STR, &priv[i].encryptType);
			reg.CloseKey();
		}
	}

	if (reg.OpenKey(DEBUG_STR))	// 旧バージョンレジストリ削除
	{
		reg.CloseKey();
		reg.DeleteChildTree();
	}
	if (!reg.GetStr(NULL, buf, sizeof(buf)) || strcmp(buf, GetVersionStr()))
	{
		reg.CloseKey();		// close top appreg
		WriteRegistry();
	}

	return	TRUE;
}
Ejemplo n.º 9
0
/*
	メインダイアログ用 WM_INITDIALOG 処理ルーチン
*/
BOOL TInstDlg::EvCreate(LPARAM lParam)
{
	char	title[256], title2[256];
	GetWindowText(title, sizeof(title));
	::wsprintf(title2, "%s ver%s", title, GetVersionStr());
	SetWindowText(title2);

	GetWindowRect(&rect);
	int		cx = ::GetSystemMetrics(SM_CXFULLSCREEN), cy = ::GetSystemMetrics(SM_CYFULLSCREEN);
	int		xsize = rect.right - rect.left, ysize = rect.bottom - rect.top;

	::SetClassLong(hWnd, GCL_HICON, (LONG)::LoadIcon(TApp::GetInstance(), (LPCSTR)SETUP_ICON));
	MoveWindow((cx - xsize)/2, (cy - ysize)/2, xsize, ysize, TRUE);
	Show();

	if (IsWinVista() && !::IsUserAnAdmin() && TIsEnableUAC()) {
		HWND	hRunas = GetDlgItem(RUNAS_BUTTON);
		::SetWindowLong(hRunas, GWL_STYLE, ::GetWindowLong(hRunas, GWL_STYLE)|WS_VISIBLE);
		::SendMessage(hRunas, BCM_SETSHIELD, 0, 1);
	}

// 現在ディレクトリ設定
	char	buf[MAX_PATH_U8], setupDir[MAX_PATH_U8];
#ifdef _WIN64
	char	x86dir[MAX_PATH_U8] = "";
#endif

// Program Filesのパス取り出し
	TRegistry	reg(HKEY_LOCAL_MACHINE);
	if (reg.OpenKey(REGSTR_PATH_SETUP)) {
		if (reg.GetStr(REGSTR_PROGRAMFILES, buf, sizeof(buf))) {
			MakePath(setupDir, buf, IPMSG_STR);
		}
#ifdef _WIN64
		if (reg.GetStr(REGSTR_PROGRAMFILESX86, buf, sizeof(buf)))
			MakePath(x86dir, buf, IPMSG_STR);
#endif
		reg.CloseKey();
	}

// 既にセットアップされている場合は、セットアップディレクトリを読み出す
	if (reg.OpenKey(REGSTR_PATH_APPPATHS)) {
		if (reg.OpenKey(IPMSG_EXENAME)) {
			if (reg.GetStr(REGSTR_PATH, buf, sizeof(buf))) {
#ifdef _WIN64
				if (strcmp(buf, x86dir))
#endif
				strcpy(setupDir, buf);
			}
			reg.CloseKey();
		}
		reg.CloseKey();
	}

	SetDlgItemTextU8(FILE_EDIT, setupDir);
	CheckDlgButton(STARTUP_CHECK, 1);
	CheckDlgButton(PROGRAM_CHECK, 1);
	CheckDlgButton(DESKTOP_CHECK, 1);
	CheckDlgButton(EXTRACT_CHECK, 0);

	char	*p = strstr(GetCommandLine(), "runas=");
	if (p) {
		runasWnd = (HWND)strtoul(p+6, 0, 16);
		if (!runasWnd || !IsWindow(runasWnd)) PostQuitMessage(0);
		if ((p = strstr(p, ",imm="))) runasImm = atoi(p+5);

		CheckDlgButton(EXTRACT_CHECK, ::IsDlgButtonChecked(runasWnd, EXTRACT_CHECK));
		CheckDlgButton(STARTUP_CHECK, ::IsDlgButtonChecked(runasWnd, STARTUP_CHECK));
		CheckDlgButton(PROGRAM_CHECK, ::IsDlgButtonChecked(runasWnd, PROGRAM_CHECK));
		CheckDlgButton(DESKTOP_CHECK, ::IsDlgButtonChecked(runasWnd, DESKTOP_CHECK));

		WCHAR	wbuf[MAX_PATH] = L"";
		::SendDlgItemMessageW(runasWnd, FILE_EDIT, WM_GETTEXT, MAX_PATH, (LPARAM)wbuf);
		SetDlgItemTextU8(FILE_EDIT, WtoU8s(wbuf));

		::SendMessage(runasWnd, WM_IPMSG_HIDE, 0, 0);
		if (runasImm) {
			PostMessage(WM_IPMSG_INSTALL, 0, 0);
		}
	}

	return	TRUE;
}
Ejemplo n.º 10
0
void TBlobBs::AssertVersionStr(const PFRnd& FBlobBs){
  TStr CorrVersionStr=GetVersionStr();
  bool IsOk=false;
  TStr TestVersionStr=FBlobBs->GetStr(CorrVersionStr.Len(), IsOk);
  EAssert(IsOk && (CorrVersionStr==TestVersionStr));
}
Ejemplo n.º 11
0
void TBlobBs::PutVersionStr(const PFRnd& FBlobBs){
  FBlobBs->PutStr(GetVersionStr());
}