• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
Keine Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

FFFTPのソースコードです。


Commit MetaInfo

Revision5ddc02b268762f154a281901e1a5c1a67699394f (tree)
Zeit2014-06-08 22:04:51
Autors_kawamoto <s_kawamoto@user...>
Commiters_kawamoto

Log Message

Add routines for automatic software updates.
Fix minor bugs.

Ändern Zusammenfassung

Diff

Binary files a/FFFTP_Eng_Release/FFFTP.exe and b/FFFTP_Eng_Release/FFFTP.exe differ
Binary files a/Release/FFFTP.exe and b/Release/FFFTP.exe differ
--- a/Resource/FFFTP.rc
+++ b/Resource/FFFTP.rc
@@ -168,6 +168,8 @@ BEGIN
168168 MENUITEM "–ÚŽŸ(&C)\tF1", MENU_HELP
169169 MENUITEM "Q&&AW(ƒCƒ“ƒ^[ƒlƒbƒg‚ɐڑ±‚µ‚Ü‚·)(T)", MENU_HELP_TROUBLE
170170 MENUITEM SEPARATOR
171+ MENUITEM "ƒ\ƒtƒgƒEƒFƒA‚̍XV‚ðŠm”F(&U)...", MENU_UPDATES_CHECK
172+ MENUITEM SEPARATOR
171173 MENUITEM "FFFTP‚ɂ‚¢‚Ä(&A)...", MENU_ABOUT
172174 END
173175 END
@@ -1465,6 +1467,18 @@ BEGIN
14651467 CONTROL "ŒÃ‚¢ˆ—“à—e‚ð•\Ž¦‚µ‚È‚¢(&L)",DISP2_REMOVE_OLD_LOG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,35,196,10
14661468 END
14671469
1470+opt_updates_dlg DIALOG 0, 0, 211, 155
1471+STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
1472+FONT 9, "MS Shell Dlg"
1473+BEGIN
1474+ CONTROL "Ž©“®“I‚Ƀ\ƒtƒgƒEƒFƒA‚̍XV‚ðŠm”F‚·‚é(&C)",UPDATES_AUTO_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,7,196,10
1475+ CONTROL "Ž©“®“I‚ɍXV‚ð“K—p‚·‚é(&A)",UPDATES_AUTO_APPLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,21,196,10
1476+ LTEXT "XV‚ÌŠm”F‚ÌŠÔŠu(&I)",-1,7,35,196,8
1477+ EDITTEXT UPDATES_INTERVAL,7,45,26,14,ES_AUTOHSCROLL | ES_NUMBER
1478+ CONTROL "Spin1",UPDATES_INTERVAL_SPN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,33,45,9,14
1479+ LTEXT "i0`999“ú; 0=–ˆ‰ñ‹N“®Žž‚ÉŠm”Fj",-1,45,49,168,8
1480+END
1481+
14681482
14691483 /////////////////////////////////////////////////////////////////////////////
14701484 //
@@ -2144,6 +2158,14 @@ BEGIN
21442158 TOPMARGIN, 7
21452159 BOTTOMMARGIN, 148
21462160 END
2161+
2162+ opt_updates_dlg, DIALOG
2163+ BEGIN
2164+ LEFTMARGIN, 7
2165+ RIGHTMARGIN, 204
2166+ TOPMARGIN, 7
2167+ BOTTOMMARGIN, 148
2168+ END
21472169 END
21482170 #endif // APSTUDIO_INVOKED
21492171
--- a/Resource/resource.h
+++ b/Resource/resource.h
@@ -117,6 +117,7 @@
117117 #define ini_from_reg_dlg 194
118118 #define opt_trmode4_dlg 195
119119 #define opt_disp2_dlg 196
120+#define opt_updates_dlg 197
120121 #define TRANS_TIME_BAR 1002
121122 #define TRANS_TEXT 1003
122123 #define TRANS_REMOTE 1003
@@ -461,6 +462,10 @@
461462 #define TRMODE4_UTF8BOM_CNV 1219
462463 #define HSET_ERROR_RECONNECT 1220
463464 #define HSET_FN_UTF8HFSX_CNV 1221
465+#define UPDATES_AUTO_CHECK 1222
466+#define UPDATES_AUTO_APPLY 1223
467+#define UPDATES_INTERVAL 1224
468+#define UPDATES_INTERVAL_SPN 1225
464469 #define MENU_END 40001
465470 #define MENU_EXIT 40001
466471 #define MENU_CONNECT 40003
@@ -643,6 +648,7 @@
643648 #define MENU_FW_FTP_FILTER 40178
644649 #define MENU_REMOTE_MOVE_UPDIR 40179
645650 #define MENU_EXPORT_FILEZILLA_XML 40180
651+#define MENU_UPDATES_CHECK 40181
646652 #define FSNOTIFY_TITLE 65535
647653 #define HOST_SIZEGRIP 65535
648654
@@ -651,8 +657,8 @@
651657 #ifdef APSTUDIO_INVOKED
652658 #ifndef APSTUDIO_READONLY_SYMBOLS
653659 #define _APS_NEXT_RESOURCE_VALUE 197
654-#define _APS_NEXT_COMMAND_VALUE 40181
655-#define _APS_NEXT_CONTROL_VALUE 1221
660+#define _APS_NEXT_COMMAND_VALUE 40182
661+#define _APS_NEXT_CONTROL_VALUE 1226
656662 #define _APS_NEXT_SYMED_VALUE 101
657663 #endif
658664 #endif
--- a/Resource_eng/FFFTP-eng.rc
+++ b/Resource_eng/FFFTP-eng.rc
@@ -168,6 +168,8 @@ BEGIN
168168 MENUITEM "&Contents\tF1", MENU_HELP
169169 MENUITEM "&Q&&A (Connect to Internet)", MENU_HELP_TROUBLE
170170 MENUITEM SEPARATOR
171+ MENUITEM "Check for Software &Updates...", MENU_UPDATES_CHECK
172+ MENUITEM SEPARATOR
171173 MENUITEM "&About FFFTP...", MENU_ABOUT
172174 END
173175 END
@@ -176,7 +178,7 @@ dummy_menu MENU
176178 BEGIN
177179 POPUP "dummy"
178180 BEGIN
179- MENUITEM "Go up (host)", MENU_REMOTE_UPDIR
181+ MENUITEM "Go up (remote)", MENU_REMOTE_UPDIR
180182 MENUITEM "Go up (local)", MENU_LOCAL_UPDIR
181183 MENUITEM "Go up (both)", MENU_UPDIR
182184 MENUITEM "COMBO_LOCAL", COMBO_LOCAL
@@ -1501,6 +1503,19 @@ BEGIN
15011503 CONTROL "Do not show old &logs",DISP2_REMOVE_OLD_LOG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,35,196,10
15021504 END
15031505
1506+opt_updates_dlg DIALOG 0, 0, 211, 155
1507+STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
1508+FONT 9, "MS Shell Dlg"
1509+BEGIN
1510+ CONTROL "&Check for software updates automatically",UPDATES_AUTO_CHECK,
1511+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,7,196,10
1512+ CONTROL "&Apply updates automatically",UPDATES_AUTO_APPLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,21,196,10
1513+ LTEXT "&Interval of checking for updates",-1,7,35,196,8
1514+ EDITTEXT UPDATES_INTERVAL,7,45,26,14,ES_AUTOHSCROLL | ES_NUMBER
1515+ CONTROL "Spin1",UPDATES_INTERVAL_SPN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,33,45,9,14
1516+ LTEXT "i0`999days; 0=Every time at startupj",-1,45,49,168,8
1517+END
1518+
15041519
15051520 /////////////////////////////////////////////////////////////////////////////
15061521 //
@@ -2177,6 +2192,14 @@ BEGIN
21772192 TOPMARGIN, 7
21782193 BOTTOMMARGIN, 148
21792194 END
2195+
2196+ opt_updates_dlg, DIALOG
2197+ BEGIN
2198+ LEFTMARGIN, 7
2199+ RIGHTMARGIN, 204
2200+ TOPMARGIN, 7
2201+ BOTTOMMARGIN, 148
2202+ END
21802203 END
21812204 #endif // APSTUDIO_INVOKED
21822205
--- a/Resource_eng/resource.h
+++ b/Resource_eng/resource.h
@@ -117,6 +117,7 @@
117117 #define ini_from_reg_dlg 194
118118 #define opt_trmode4_dlg 195
119119 #define opt_disp2_dlg 196
120+#define opt_updates_dlg 197
120121 #define TRANS_TIME_BAR 1002
121122 #define TRANS_TEXT 1003
122123 #define TRANS_REMOTE 1003
@@ -461,6 +462,10 @@
461462 #define TRMODE4_UTF8BOM_CNV 1219
462463 #define HSET_ERROR_RECONNECT 1220
463464 #define HSET_FN_UTF8HFSX_CNV 1221
465+#define UPDATES_AUTO_CHECK 1222
466+#define UPDATES_AUTO_APPLY 1223
467+#define UPDATES_INTERVAL 1224
468+#define UPDATES_INTERVAL_SPN 1225
464469 #define MENU_END 40001
465470 #define MENU_EXIT 40001
466471 #define MENU_CONNECT 40003
@@ -643,6 +648,7 @@
643648 #define MENU_FW_FTP_FILTER 40178
644649 #define MENU_REMOTE_MOVE_UPDIR 40179
645650 #define MENU_EXPORT_FILEZILLA_XML 40180
651+#define MENU_UPDATES_CHECK 40181
646652 #define FSNOTIFY_TITLE 65535
647653 #define HOST_SIZEGRIP 65535
648654
@@ -651,8 +657,8 @@
651657 #ifdef APSTUDIO_INVOKED
652658 #ifndef APSTUDIO_READONLY_SYMBOLS
653659 #define _APS_NEXT_RESOURCE_VALUE 197
654-#define _APS_NEXT_COMMAND_VALUE 40181
655-#define _APS_NEXT_CONTROL_VALUE 1221
660+#define _APS_NEXT_COMMAND_VALUE 40182
661+#define _APS_NEXT_CONTROL_VALUE 1226
656662 #define _APS_NEXT_SYMED_VALUE 101
657663 #endif
658664 #endif
--- a/common.h
+++ b/common.h
@@ -1389,6 +1389,8 @@ int IsTaskbarList3Loaded();
13891389 void UpdateTaskbarProgress();
13901390 // 高DPI対応
13911391 int AskToolWinHeight(void);
1392+// ソフトウェア自動更新
1393+void UpdateSoftware(int NoError, int NoConfirm);
13921394
13931395 /*===== filelist.c =====*/
13941396
--- a/main.c
+++ b/main.c
@@ -153,7 +153,9 @@ HANDLE ChangeNotification = INVALID_HANDLE_VALUE;
153153 // タスクバー進捗表示
154154 static ITaskbarList3* pTaskbarList3;
155155 // 高DPI対応
156-int ToolWinHeight;
156+static int ToolWinHeight;
157+// ソフトウェア自動更新
158+static int ApplyUpdatesOnExit = NO;
157159
158160
159161 /*===== グローバルなワーク =====*/
@@ -276,6 +278,11 @@ int AutoRefreshFileList = YES;
276278 int RemoveOldLog = NO;
277279 // バージョン確認
278280 int ReadOnlySettings = NO;
281+// ソフトウェア自動更新
282+int AutoCheckForUpdates = YES;
283+int AutoApplyUpdates = NO;
284+int AutoCheckForUptatesInterval = 7;
285+time_t LastAutoCheckForUpdates = 0;
279286
280287
281288
@@ -300,6 +307,9 @@ int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLi
300307 BOOL Sts;
301308 // ソフトウェア自動更新
302309 char UpdateDir[FMAX_PATH+1];
310+ char Path[FMAX_PATH+1];
311+ char Command[FMAX_PATH+1];
312+ char* p;
303313
304314 // プロセス保護
305315 #ifdef ENABLE_PROCESS_PROTECTION
@@ -311,25 +321,28 @@ int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLi
311321 pCommand = lpszCmdLine;
312322 while(pCommand = GetToken(pCommand, Option))
313323 {
314- if(strcmp(Option, "--protect") == 0)
315- {
316- ProtectLevel = PROCESS_PROTECTION_DEFAULT;
317- break;
318- }
319- else if(strcmp(Option, "--protect-high") == 0)
320- {
321- ProtectLevel = PROCESS_PROTECTION_HIGH;
322- break;
323- }
324- else if(strcmp(Option, "--protect-medium") == 0)
325- {
326- ProtectLevel = PROCESS_PROTECTION_MEDIUM;
327- break;
328- }
329- else if(strcmp(Option, "--protect-low") == 0)
324+ if(Option[0] == '-')
330325 {
331- ProtectLevel = PROCESS_PROTECTION_LOW;
332- break;
326+ if(strcmp(&Option[1], "-protect") == 0)
327+ {
328+ ProtectLevel = PROCESS_PROTECTION_DEFAULT;
329+ break;
330+ }
331+ else if(strcmp(&Option[1], "-protect-high") == 0)
332+ {
333+ ProtectLevel = PROCESS_PROTECTION_HIGH;
334+ break;
335+ }
336+ else if(strcmp(&Option[1], "-protect-medium") == 0)
337+ {
338+ ProtectLevel = PROCESS_PROTECTION_MEDIUM;
339+ break;
340+ }
341+ else if(strcmp(&Option[1], "-protect-low") == 0)
342+ {
343+ ProtectLevel = PROCESS_PROTECTION_LOW;
344+ break;
345+ }
333346 }
334347 }
335348 if(ProtectLevel != PROCESS_PROTECTION_NONE)
@@ -368,18 +381,19 @@ int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLi
368381 #endif
369382
370383 // ソフトウェア自動更新
371- if(GetTokenAfterOption(lpszCmdLine, UpdateDir, "--software-update", "--software-update"))
384+ if(GetTokenAfterOption(lpszCmdLine, UpdateDir, "-software-update", "-software-update"))
372385 {
373- if(!StartUpdateProcessAsAdministrator(lpszCmdLine, " --restart"))
386+ if(!RestartUpdateProcessAsAdministrator(lpszCmdLine, " --restart"))
374387 {
375- if(ApplyUpdates(UpdateDir))
388+ Sleep(1000);
389+ if(ApplyUpdates(UpdateDir, "updatebackup"))
376390 MessageBox(NULL, MSGJPN359, "FFFTP", MB_OK);
377391 else
378- MessageBox(NULL, MSGJPN360, "FFFTP", MB_OK);
392+ MessageBox(NULL, MSGJPN360, "FFFTP", MB_OK | MB_ICONERROR);
379393 }
380394 return 0;
381395 }
382- else if(GetTokenAfterOption(lpszCmdLine, UpdateDir, "--software-cleanup", "--software-cleanup"))
396+ else if(GetTokenAfterOption(lpszCmdLine, UpdateDir, "-software-cleanup", "-software-cleanup"))
383397 {
384398 CleanupUpdates(UpdateDir);
385399 }
@@ -458,6 +472,26 @@ int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLi
458472 FreeUPnP();
459473 CoUninitialize();
460474 OleUninitialize();
475+ // ソフトウェア自動更新
476+ if(ApplyUpdatesOnExit == YES)
477+ {
478+ Sts = FALSE;
479+ if(GetModuleFileName(NULL, UpdateDir, FMAX_PATH) > 0)
480+ {
481+ if(p = strrchr(UpdateDir, '\\'))
482+ {
483+ *p = '\0';
484+ strcpy(Path, TmpPath);
485+ SetYenTail(Path);
486+ strcat(Path, "update");
487+ sprintf(Command, "-%s \"%s\"", "-software-update", UpdateDir);
488+ if(StartUpdateProcess(Path, Command))
489+ Sts = TRUE;
490+ }
491+ }
492+ if(!Sts)
493+ MessageBox(NULL, MSGJPN360, "FFFTP", MB_OK | MB_ICONERROR);
494+ }
461495 return(Ret);
462496 }
463497
@@ -702,6 +736,10 @@ static int InitApp(LPSTR lpszCmdLine, int cmdShow)
702736 MakeButtonsFocus();
703737 DispTransferFiles();
704738
739+ // ソフトウェア自動更新
740+ if(AutoCheckForUptatesInterval == 0)
741+ UpdateSoftware(YES, AutoApplyUpdates);
742+
705743 StartupProc(lpszCmdLine);
706744 sts = FFFTP_SUCCESS;
707745
@@ -1026,14 +1064,17 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
10261064 {
10271065 // ローカル側自動更新
10281066 // タスクバー進捗表示
1067+ // ソフトウェア自動更新
10291068 case WM_CREATE :
10301069 SetTimer(hWnd, 1, 1000, NULL);
10311070 SetTimer(hWnd, 2, 100, NULL);
1071+ SetTimer(hWnd, 3, 60000, NULL);
10321072 break;
10331073
10341074 // ローカル側自動更新
10351075 // 自動切断対策
10361076 // タスクバー進捗表示
1077+ // ソフトウェア自動更新
10371078 case WM_TIMER :
10381079 switch(wParam)
10391080 {
@@ -1070,6 +1111,13 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
10701111 if(IsTaskbarList3Loaded() == YES)
10711112 UpdateTaskbarProgress();
10721113 break;
1114+ case 3:
1115+ if(AskUserOpeDisabled() == NO && AskTransferNow() == NO)
1116+ {
1117+ if(AutoCheckForUptatesInterval > 0 && time(NULL) - LastAutoCheckForUpdates >= AutoCheckForUptatesInterval * 86400)
1118+ UpdateSoftware(YES, AutoApplyUpdates);
1119+ }
1120+ break;
10731121 }
10741122 break;
10751123
@@ -1623,7 +1671,7 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
16231671 SetMasterPassword(NULL);
16241672 while(ValidateMasterPassword() == YES && GetMasterPasswordStatus() == PASSWORD_UNMATCH)
16251673 {
1626- if(EnterMasterPasswordAndSet(masterpasswd_dlg, NULL) == 0)
1674+ if(EnterMasterPasswordAndSet(masterpasswd_dlg, hWnd) == 0)
16271675 break;
16281676 }
16291677 if(GetMasterPasswordStatus() == PASSWORD_OK && EnterMasterPasswordAndSet(newmasterpasswd_dlg, hWnd) != 0)
@@ -1695,7 +1743,7 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
16951743 SetMasterPassword(NULL);
16961744 while(ValidateMasterPassword() == YES && GetMasterPasswordStatus() == PASSWORD_UNMATCH)
16971745 {
1698- if(EnterMasterPasswordAndSet(masterpasswd_dlg, NULL) == 0)
1746+ if(EnterMasterPasswordAndSet(masterpasswd_dlg, hWnd) == 0)
16991747 break;
17001748 }
17011749 if(GetMasterPasswordStatus() == PASSWORD_OK)
@@ -1708,6 +1756,11 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
17081756 }
17091757 break;
17101758
1759+ // ソフトウェア自動更新
1760+ case MENU_UPDATES_CHECK :
1761+ UpdateSoftware(NO, NO);
1762+ break;
1763+
17111764 default :
17121765 if((LOWORD(wParam) >= MENU_BMARK_TOP) &&
17131766 (LOWORD(wParam) < MENU_BMARK_TOP+100))
@@ -1970,6 +2023,8 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
19702023 FindCloseChangeNotification(ChangeNotification);
19712024 // タスクバー進捗表示
19722025 KillTimer(hWnd, 2);
2026+ // ソフトウェア自動更新
2027+ KillTimer(hWnd, 3);
19732028 // WSACleanup();
19742029 // DestroyWindow(hWndFtp);
19752030 PostQuitMessage(0);
@@ -2209,19 +2264,19 @@ static int AnalyzeComLine(char *Str, int *AutoConnect, int *CmdOption, char *unc
22092264 }
22102265 // プロセス保護
22112266 #ifdef ENABLE_PROCESS_PROTECTION
2212- else if(strcmp(Tmp, "--restart") == 0)
2267+ else if(strcmp(&Tmp[1], "-restart") == 0)
22132268 {
22142269 }
2215- else if(strcmp(Tmp, "--protect") == 0)
2270+ else if(strcmp(&Tmp[1], "-protect") == 0)
22162271 {
22172272 }
2218- else if(strcmp(Tmp, "--protect-high") == 0)
2273+ else if(strcmp(&Tmp[1], "-protect-high") == 0)
22192274 {
22202275 }
2221- else if(strcmp(Tmp, "--protect-medium") == 0)
2276+ else if(strcmp(&Tmp[1], "-protect-medium") == 0)
22222277 {
22232278 }
2224- else if(strcmp(Tmp, "--protect-low") == 0)
2279+ else if(strcmp(&Tmp[1], "-protect-low") == 0)
22252280 {
22262281 }
22272282 #endif
@@ -2237,14 +2292,14 @@ static int AnalyzeComLine(char *Str, int *AutoConnect, int *CmdOption, char *unc
22372292 else if((strcmp(&Tmp[1], "u8n") == 0) || (strcmp(&Tmp[1], "-utf8name") == 0))
22382293 *CmdOption |= OPT_UTF8N_NAME;
22392294 // ソフトウェア自動更新
2240- else if(strcmp(Tmp, "--software-update") == 0)
2295+ else if(strcmp(&Tmp[1], "-software-update") == 0)
22412296 {
22422297 if((Str = GetToken(Str, Tmp)) == NULL)
22432298 {
22442299 Ret = -1;
22452300 }
22462301 }
2247- else if(strcmp(Tmp, "--software-cleanup") == 0)
2302+ else if(strcmp(&Tmp[1], "-software-cleanup") == 0)
22482303 {
22492304 if((Str = GetToken(Str, Tmp)) == NULL)
22502305 {
@@ -2363,7 +2418,7 @@ static char *GetToken(char *Str, char *Buf)
23632418 InQuote = 0;
23642419 while(*Str != NUL)
23652420 {
2366- if(*Str == 0x22)
2421+ if(*Str == '\"')
23672422 InQuote = !InQuote;
23682423 else
23692424 {
@@ -3574,3 +3629,42 @@ int AskToolWinHeight(void)
35743629 return(ToolWinHeight);
35753630 }
35763631
3632+// ソフトウェア自動更新
3633+void UpdateSoftware(int NoError, int NoConfirm)
3634+{
3635+ DWORD Version;
3636+ char VersionString[32];
3637+ char Tmp[FMAX_PATH+1];
3638+ // 念のためマスターパスワードの一致を確認
3639+ if(GetMasterPasswordStatus() == PASSWORD_OK)
3640+ {
3641+ Version = RELEASE_VERSION_NUM;
3642+ LastAutoCheckForUpdates = time(NULL);
3643+ if(CheckForUpdates(FALSE, NULL, &Version, VersionString))
3644+ {
3645+ if(Version > RELEASE_VERSION_NUM)
3646+ {
3647+ sprintf(Tmp, MSGJPN362, VER_STR, VersionString);
3648+ if(NoConfirm == YES || MessageBox(GetMainHwnd(), Tmp, "FFFTP", MB_YESNO) == IDYES)
3649+ {
3650+ strcpy(Tmp, TmpPath);
3651+ SetYenTail(Tmp);
3652+ strcat(Tmp, "update");
3653+ _mkdir(Tmp);
3654+ if(CheckForUpdates(TRUE, Tmp, &Version, VersionString))
3655+ {
3656+ MessageBox(GetMainHwnd(), MSGJPN365, "FFFTP", MB_OK);
3657+ ApplyUpdatesOnExit = YES;
3658+ }
3659+ else if(NoError == NO)
3660+ MessageBox(GetMainHwnd(), MSGJPN363, "FFFTP", MB_OK | MB_ICONERROR);
3661+ }
3662+ }
3663+ else if(NoError == NO)
3664+ MessageBox(GetMainHwnd(), MSGJPN364, "FFFTP", MB_OK);
3665+ }
3666+ else if(NoError == NO)
3667+ MessageBox(GetMainHwnd(), MSGJPN363, "FFFTP", MB_OK | MB_ICONERROR);
3668+ }
3669+}
3670+
--- a/mesg-eng.h
+++ b/mesg-eng.h
@@ -4,16 +4,16 @@
44 #define MSGJPN003 _Tu8("\r\nReconnect.\r\n", "\r\nReconnect.\r\n")
55 #define MSGJPN004 _Tu8("Disconnect.", "Disconnect.")
66 #define MSGJPN005 _Tu8("Connection was killed.", "Connection was killed.")
7-#define MSGJPN006 _Tu8("Can't login to Firewall.", "Can't login to Firewall.")
8-#define MSGJPN007 _Tu8("Can't connect to host %s.", "Can't connect to host %s.")
9-#define MSGJPN008 _Tu8("Can't login.", "Can't login.")
10-#define MSGJPN009 _Tu8("Can't connect.", "Can't connect.")
7+#define MSGJPN006 _Tu8("Cannnot login to Firewall.", "Cannnot login to Firewall.")
8+#define MSGJPN007 _Tu8("Cannnot connect to host %s.", "Cannnot connect to host %s.")
9+#define MSGJPN008 _Tu8("Cannnot login.", "Cannnot login.")
10+#define MSGJPN009 _Tu8("Cannnot connect.", "Cannnot connect.")
1111 #define MSGJPN010 _Tu8("Firewall host not specified.", "Firewall host not specified.")
1212 #define MSGJPN011 _Tu8("Host not specified.", "Host not specified.")
1313 #define MSGJPN012 _Tu8("MD5 used.", "MD5 used.")
1414 #define MSGJPN013 _Tu8("SHA-1 used.", "SHA-1 used.")
1515 #define MSGJPN014 _Tu8("MD4(S/KEY) used.", "MD4(S/KEY) used.")
16-#define MSGJPN015 _Tu8("Can't process One-time Password.", "Can't process One-time Password.")
16+#define MSGJPN015 _Tu8("Cannnot process One-time Password.", "Cannnot process One-time Password.")
1717 #define MSGJPN016 _Tu8("Searching host %s. (%s)", "Searching host %s. (%s)")
1818 #define MSGJPN017 _Tu8("Connecting %sto host %s (%s (%d)). (%s)", "Connecting %sto host %s (%s (%d)). (%s)")
1919 #define MSGJPN018 _Tu8("Connecting %sto host %s (%d). (%s)", "Connecting %sto host %s (%d). (%s)")
@@ -21,19 +21,19 @@
2121 #define MSGJPN020 _Tu8("Connecting %sto host %s (%d). (%s)", "Connecting %sto host %s (%d). (%s)")
2222 #define MSGJPN021 _Tu8("SOCKS server %s not found. (%s)", "SOCKS server %s not found. (%s)")
2323 #define MSGJPN022 _Tu8("Connecting to SOCKS server %s (%d). (%s)", "Connecting to SOCKS server %s (%d). (%s)")
24-#define MSGJPN023 _Tu8("Can't connect to SOCKS server. (Err=%d) (%s)", "Can't connect to SOCKS server. (Err=%d) (%s)")
25-#define MSGJPN024 _Tu8("Can't connect to SOCKS server. (Err=%d) (%s)", "Can't connect to SOCKS server. (Err=%d) (%s)")
24+#define MSGJPN023 _Tu8("Cannnot connect to SOCKS server. (Err=%d) (%s)", "Cannnot connect to SOCKS server. (Err=%d) (%s)")
25+#define MSGJPN024 _Tu8("Cannnot connect to SOCKS server. (Err=%d) (%s)", "Cannnot connect to SOCKS server. (Err=%d) (%s)")
2626 #define MSGJPN025 _Tu8("Connected. (%s)", "Connected. (%s)")
27-#define MSGJPN026 _Tu8("Can't connected. (%s)", "Can't connected. (%s)")
28-#define MSGJPN027 _Tu8("Can't create socket. (%s)", "Can't create socket. (%s)")
29-#define MSGJPN028 _Tu8("Can't connect to SOCKS server. (Err=%d) (%s)", "Can't connect to SOCKS server. (Err=%d) (%s)")
30-#define MSGJPN029 _Tu8("Can't connect to SOCKS server. (Err=%d) (%s)", "Can't connect to SOCKS server. (Err=%d) (%s)")
31-#define MSGJPN030 _Tu8("Can't create listen socket. (%s)", "Can't create listen socket. (%s)")
27+#define MSGJPN026 _Tu8("Cannnot connected. (%s)", "Cannnot connected. (%s)")
28+#define MSGJPN027 _Tu8("Cannnot create socket. (%s)", "Cannnot create socket. (%s)")
29+#define MSGJPN028 _Tu8("Cannnot connect to SOCKS server. (Err=%d) (%s)", "Cannnot connect to SOCKS server. (Err=%d) (%s)")
30+#define MSGJPN029 _Tu8("Cannnot connect to SOCKS server. (Err=%d) (%s)", "Cannnot connect to SOCKS server. (Err=%d) (%s)")
31+#define MSGJPN030 _Tu8("Cannnot create listen socket. (%s)", "Cannnot create listen socket. (%s)")
3232 #define MSGJPN031 _Tu8("PORT command not accepted. (%s)", "PORT command not accepted. (%s)")
3333 #define MSGJPN032 _Tu8("Connection is cancelled by user.", "Connection is cancelled by user.")
34-#define MSGJPN033 _Tu8("Can't send SOCKS command. (Cmd = %04X)", "Can't send SOCKS command. (Cmd = %04X)")
35-#define MSGJPN034 _Tu8("Can't receive SOCKS5 reply.", "Can't receive SOCKS5 reply.")
36-#define MSGJPN035 _Tu8("Can't receive SOCKS4 reply.", "Can't receive SOCKS4 reply.")
34+#define MSGJPN033 _Tu8("Cannnot send SOCKS command. (Cmd = %04X)", "Cannnot send SOCKS command. (Cmd = %04X)")
35+#define MSGJPN034 _Tu8("Cannnot receive SOCKS5 reply.", "Cannnot receive SOCKS5 reply.")
36+#define MSGJPN035 _Tu8("Cannnot receive SOCKS4 reply.", "Cannnot receive SOCKS4 reply.")
3737 #define MSGJPN036 _Tu8("SOCKS certification method not match.", "SOCKS certification method not match.")
3838 #define MSGJPN037 _Tu8("Certification failed by SOCKS server.", "Certification failed by SOCKS server.")
3939 #define MSGJPN038 _Tu8("Name", "Name")
@@ -46,7 +46,7 @@
4646 #define MSGJPN045 _Tu8("Ext", "Ext")
4747 #define MSGJPN046 _Tu8("Permissions", "Permissions")
4848 #define MSGJPN047 _Tu8("Owner", "Owner")
49-#define MSGJPN048 _Tu8("Can't read temporary file.", "Can't read temporary file.")
49+#define MSGJPN048 _Tu8("Cannnot read temporary file.", "Cannnot read temporary file.")
5050 #define MSGJPN049 _Tu8("Failed to getting file list.", "Failed to getting file list.")
5151 #define MSGJPN050 _Tu8("Find (Local)", "Find (Local)")
5252 #define MSGJPN051 _Tu8("Find (Host)", "Find (Host)")
@@ -83,7 +83,7 @@
8383 #define MSGJPN082 _Tu8("New Folder", "New Folder")
8484 #define MSGJPN083 _Tu8("Delete Folder", "Delete Folder")
8585 #define MSGJPN084 _Tu8("Delete File", "Delete File")
86-#define MSGJPN085 _Tu8("Can't download named %s.", "Can't download named %s.")
86+#define MSGJPN085 _Tu8("Cannnot download named %s.", "Cannnot download named %s.")
8787 #define MSGJPN086 _Tu8("Download", "Download")
8888 #define MSGJPN087 _Tu8("File List", "File List")
8989 #define MSGJPN088 _Tu8("Skip", "Skip")
@@ -91,9 +91,9 @@
9191 #define MSGJPN090 _Tu8("Command not accepted.", "Command not accepted.")
9292 #define MSGJPN091 _Tu8("for download ", "for download ")
9393 #define MSGJPN092 _Tu8("Command not accepted.", "Command not accepted.")
94-#define MSGJPN093 _Tu8("Can't get address.", "Can't get address.")
94+#define MSGJPN093 _Tu8("Cannnot get address.", "Cannnot get address.")
9595 #define MSGJPN094 _Tu8("Time out error.", "Time out error.")
96-#define MSGJPN095 _Tu8("Can't create file %s.", "Can't create file %s.")
96+#define MSGJPN095 _Tu8("Cannnot create file %s.", "Cannnot create file %s.")
9797 #define MSGJPN096 _Tu8("Disk full", "Disk full")
9898 #define MSGJPN097 _Tu8("Cancel to getting file list", "Cancel to getting file list")
9999 #define MSGJPN098 _Tu8("File List", "File List")
@@ -103,14 +103,14 @@
103103 #define MSGJPN102 _Tu8("Download successful. (%d Sec. %d B/S).", "Download successful. (%d Sec. %d B/S).")
104104 #define MSGJPN103 _Tu8("Download successful. (%d Bytes)", "Download successful. (%d Bytes)")
105105 #define MSGJPN104 _Tu8("Upload", "Upload")
106-#define MSGJPN105 _Tu8("Can't read file %s.", "Can't read file %s.")
106+#define MSGJPN105 _Tu8("Cannnot read file %s.", "Cannnot read file %s.")
107107 #define MSGJPN106 _Tu8("Skip", "Skip")
108108 #define MSGJPN107 _Tu8("File %s is skipped.", "File %s is skipped.")
109109 #define MSGJPN108 _Tu8("Command not accepted.", "Command not accepted.")
110110 #define MSGJPN109 _Tu8("for upload ", "for upload ")
111111 #define MSGJPN110 _Tu8("Command not accepted.", "Command not accepted.")
112-#define MSGJPN111 _Tu8("Can't get address.", "Can't get address.")
113-#define MSGJPN112 _Tu8("Can't open file %s.", "Can't open file %s.")
112+#define MSGJPN111 _Tu8("Cannnot get address.", "Cannnot get address.")
113+#define MSGJPN112 _Tu8("Cannnot open file %s.", "Cannnot open file %s.")
114114 #define MSGJPN113 _Tu8("Upload cancelled. (%d Sec. %d B/S).", "Upload cancelled. (%d Sec. %d B/S).")
115115 #define MSGJPN114 _Tu8("Upload cancelled.", "Upload cancelled.")
116116 #define MSGJPN115 _Tu8("Upload successful. (%d Sec. %d B/S).", "Upload successful. (%d Sec. %d B/S).")
@@ -143,13 +143,13 @@
143143 #define MSGJPN142 _Tu8("IRMX", "IRMX")
144144 #define MSGJPN143 _Tu8("ACOS-4", "ACOS-4")
145145 #define MSGJPN144 _Tu8("Stratus", "Stratus")
146-#define MSGJPN145 _Tu8("Can't change folder.", "Can't change folder.")
147-#define MSGJPN146 _Tu8("Can't create folder.", "Can't create folder.")
148-#define MSGJPN147 _Tu8("Can't delete folder.", "Can't delete folder.")
149-#define MSGJPN148 _Tu8("Can't delete folder.", "Can't delete folder.")
150-#define MSGJPN149 _Tu8("Can't delete file.", "Can't delete file.")
151-#define MSGJPN150 _Tu8("Can't delete file.", "Can't delete file.")
152-#define MSGJPN151 _Tu8("Can't rename file.", "Can't rename file.")
146+#define MSGJPN145 _Tu8("Cannnot change folder.", "Cannnot change folder.")
147+#define MSGJPN146 _Tu8("Cannnot create folder.", "Cannnot create folder.")
148+#define MSGJPN147 _Tu8("Cannnot delete folder.", "Cannnot delete folder.")
149+#define MSGJPN148 _Tu8("Cannnot delete folder.", "Cannnot delete folder.")
150+#define MSGJPN149 _Tu8("Cannnot delete file.", "Cannnot delete file.")
151+#define MSGJPN150 _Tu8("Cannnot delete file.", "Cannnot delete file.")
152+#define MSGJPN151 _Tu8("Cannnot rename file.", "Cannnot rename file.")
153153 #define MSGJPN152 _Tu8("Temporary folder '%s' not found.", "Temporary folder '%s' not found.")
154154 #define MSGJPN153 _Tu8("Folder '%s' is used.", "Folder '%s' is used.")
155155 #define MSGJPN154 _Tu8("Connect", "Connect")
@@ -220,7 +220,7 @@
220220 #define MSGJPN219 _Tu8("Wave file", "Wave file")
221221 #define MSGJPN220 _Tu8("Disconencting dialup.", "Disconencting dialup.")
222222 #define MSGJPN221 _Tu8("Connecting dialup.", "Connecting dialup.")
223-#define MSGJPN222 _Tu8("Can't use dialup. (RasDialDlg)", "Can't use dialup. (RasDialDlg)")
223+#define MSGJPN222 _Tu8("Cannnot use dialup. (RasDialDlg)", "Cannnot use dialup. (RasDialDlg)")
224224 #define MSGJPN223 _Tu8("Connecting to %s...", "Connecting to %s...")
225225 #define MSGJPN224 _Tu8("Unknown error", "Unknown error")
226226 #define MSGJPN225 _Tu8("Dialup connection", "Dialup connection")
@@ -238,7 +238,7 @@
238238 #define MSGJPN237 _Tu8("Connecting...", "Connecting...")
239239 #define MSGJPN238 _Tu8("Connecting to %s", "Connecting to %s")
240240 #define MSGJPN239 _Tu8("# Do not edit this file.\n", "# Do not edit this file.\n")
241-#define MSGJPN240 _Tu8("Can't save to INI file", "Can't save to INI file")
241+#define MSGJPN240 _Tu8("Cannnot save to INI file", "Cannnot save to INI file")
242242 #define MSGJPN241 _Tu8("Failed transmit cause of timeout", "Failed transmit cause of timeout")
243243 #define MSGJPN242 _Tu8("Failed receive cause of timeout", "Failed receive cause of timeout")
244244 #define MSGJPN243 _Tu8("Failed receive cause of timeout", "Failed receive cause of timeout")
@@ -277,9 +277,9 @@
277277 #define MSGJPN276 _Tu8("WS_FTP.INI\0ws_ftp.ini\0All file(*.*)\0*\0", "WS_FTP.INI\0ws_ftp.ini\0All file(*.*)\0*\0")
278278 #define MSGJPN277 _Tu8("Wave file\0*.wav\0All file\0*\0", "Wave file\0*.wav\0All file\0*\0")
279279 #define MSGJPN278 _Tu8("Reason: %s", "Reason: %s")
280-#define MSGJPN279 _Tu8("Can't get Listen Socket", "Can't get Listen Socket")
281-#define MSGJPN280 _Tu8("Can't get Data Socket", "Can't get Data Socket")
282-#define MSGJPN281 _Tu8("Can't connect with PASV mode", "Can't connect with PASV mode")
280+#define MSGJPN279 _Tu8("Cannnot get Listen Socket", "Cannnot get Listen Socket")
281+#define MSGJPN280 _Tu8("Cannnot get Data Socket", "Cannnot get Data Socket")
282+#define MSGJPN281 _Tu8("Cannnot connect with PASV mode", "Cannnot connect with PASV mode")
283283 #define MSGJPN282 _Tu8("INI filename is not specified", "INI filename is not specified")
284284 #define MSGJPN283 _Tu8("INI file: ", "INI file: ")
285285 #define MSGJPN284 _Tu8("http://sourceforge.jp/projects/ffftp/", "http://sourceforge.jp/projects/ffftp/")
@@ -359,6 +359,11 @@
359359 #define MSGJPN358 _Tu8("Failed to export the settings.\nPlease change saving path or format.", "Failed to export the settings.\nPlease change saving path or format.")
360360 #define MSGJPN359 _Tu8("Software update has been completed.", "Software update has been completed.")
361361 #define MSGJPN360 _Tu8("Failed to update the software.\nPlease get the latest version from our web site and update it manually.", "Failed to update the software.\nPlease get the latest version from our web site and update it manually.")
362+#define MSGJPN361 _Tu8("Updates", "Updates")
363+#define MSGJPN362 _Tu8("There is a new version.\n\nCurrent version: %s\nNew version: %s\n\nIt takes a few minutes to download the updates.\nDo you want to update now?\n", "There is a new version.\n\nCurrent version: %s\nNew version: %s\n\nIt takes a few minutes to download the updates.\nDo you want to update now?\n")
364+#define MSGJPN363 _Tu8("Failed to update the software.\nCannot connect to the server or the data is corrupted.", "Failed to update the software.\nCannot connect to the server or the data is corrupted.")
365+#define MSGJPN364 _Tu8("Your version is already up-to-date.", "Your version is already up-to-date.")
366+#define MSGJPN365 _Tu8("Preparing for the software update has been completed.\nIt will be applied on exit.", "Preparing for the software update has been completed.\nIt will be applied on exit.")
362367 #if defined(HAVE_TANDEM)
363368 #define MSGJPN2000 _Tu8("NonStop Server", "NonStop Server")
364369 #define MSGJPN2001 _Tu8("OSS<->GUARDIAN Switch(&O)", "OSS<->GUARDIAN Switch(&O)")
--- a/mesg-jpn.h
+++ b/mesg-jpn.h
@@ -298,9 +298,9 @@
298298 #define MSGJPN297 _Tu8("%s は不正なファイル名です.\r\nこのファイルはダウンロードされません.", "%s \xE3\x81\xAF\xE4\xB8\x8D\xE6\xAD\xA3\xE3\x81\xAA\xE3\x83\x95\xE3\x82\xA1\xE3\x82\xA4\xE3\x83\xAB\xE5\x90\x8D\xE3\x81\xA7\xE3\x81\x99.\r\n\xE3\x81\x93\xE3\x81\xAE\xE3\x83\x95\xE3\x82\xA1\xE3\x82\xA4\xE3\x83\xAB\xE3\x81\xAF\xE3\x83\x80\xE3\x82\xA6\xE3\x83\xB3\xE3\x83\xAD\xE3\x83\xBC\xE3\x83\x89\xE3\x81\x95\xE3\x82\x8C\xE3\x81\xBE\xE3\x81\x9B\xE3\x82\x93.")
299299 #define MSGJPN298 _Tu8("OLEの初期化に失敗しました.", "OLE\xE3\x81\xAE\xE5\x88\x9D\xE6\x9C\x9F\xE5\x8C\x96\xE3\x81\xAB\xE5\xA4\xB1\xE6\x95\x97\xE3\x81\x97\xE3\x81\xBE\xE3\x81\x97\xE3\x81\x9F.")
300300 #define MSGJPN299 _Tu8("コマンドラインにマスターパスワードが指定されていません", "\xE3\x82\xB3\xE3\x83\x9E\xE3\x83\xB3\xE3\x83\x89\xE3\x83\xA9\xE3\x82\xA4\xE3\x83\xB3\xE3\x81\xAB\xE3\x83\x9E\xE3\x82\xB9\xE3\x82\xBF\xE3\x83\xBC\xE3\x83\x91\xE3\x82\xB9\xE3\x83\xAF\xE3\x83\xBC\xE3\x83\x89\xE3\x81\x8C\xE6\x8C\x87\xE5\xAE\x9A\xE3\x81\x95\xE3\x82\x8C\xE3\x81\xA6\xE3\x81\x84\xE3\x81\xBE\xE3\x81\x9B\xE3\x82\x93")
301-#define MSGJPN300 _Tu8("デフォルトのマスターパスワードが使われます.\r\nマルウェアの攻撃を防ぐため,固有のマスターパスワードを設定することをおすすめします", "\xE3\x83\x87\xE3\x83\x95\xE3\x82\xA9\xE3\x83\xAB\xE3\x83\x88\xE3\x81\xAE\xE3\x83\x9E\xE3\x82\xB9\xE3\x82\xBF\xE3\x83\xBC\xE3\x83\x91\xE3\x82\xB9\xE3\x83\xAF\xE3\x83\xBC\xE3\x83\x89\xE3\x81\x8C\xE4\xBD\xBF\xE3\x82\x8F\xE3\x82\x8C\xE3\x81\xBE\xE3\x81\x99.\r\n\xE3\x83\x9E\xE3\x83\xAB\xE3\x82\xA6\xE3\x82\xA7\xE3\x82\xA2\xE3\x81\xAE\xE6\x94\xBB\xE6\x92\x83\xE3\x82\x92\xE9\x98\xB2\xE3\x81\x90\xE3\x81\x9F\xE3\x82\x81\xEF\xBC\x8C\xE5\x9B\xBA\xE6\x9C\x89\xE3\x81\xAE\xE3\x83\x9E\xE3\x82\xB9\xE3\x82\xBF\xE3\x83\xBC\xE3\x83\x91\xE3\x82\xB9\xE3\x83\xAF\xE3\x83\xBC\xE3\x83\x89\xE3\x82\x92\xE8\xA8\xAD\xE5\xAE\x9A\xE3\x81\x99\xE3\x82\x8B\xE3\x81\x93\xE3\x81\xA8\xE3\x82\x92\xE3\x81\x8A\xE3\x81\x99\xE3\x81\x99\xE3\x82\x81\xE3\x81\x97\xE3\x81\xBE\xE3\x81\x99")
301+#define MSGJPN300 _Tu8("デフォルトのマスターパスワードが使われます.\r\nマルウェアの攻撃を防ぐため,固有のマスターパスワードを設定することをおすすめします", "\xE3\x83\x87\xE3\x83\x95\xE3\x82\xA9\xE3\x83\xAB\xE3\x83\x88\xE3\x81\xAE\xE3\x83\x9E\xE3\x82\xB9\xE3\x82\xBF\xE3\x83\xBC\xE3\x83\x91\xE3\x82\xB9\xE3\x83\xAF\xE3\x83\xBC\xE3\x83\x89\xE3\x81\x8C\xE4\xBD\xBF\xE3\x82\x8F\xE3\x82\x8C\xE3\x81\xBE\xE3\x81\x99.\r\n\xE3\x83\x9E\xE3\x83\xAB\xE3\x82\xA6\xE3\x82\xA7\xE3\x82\xA2\xE3\x81\xAE\xE6\x94\xBB\xE6\x92\x83\xE3\x82\x92\xE9\x98\xB2\xE3\x81\x90\xE3\x81\x9F\xE3\x82\x81,\xE5\x9B\xBA\xE6\x9C\x89\xE3\x81\xAE\xE3\x83\x9E\xE3\x82\xB9\xE3\x82\xBF\xE3\x83\xBC\xE3\x83\x91\xE3\x82\xB9\xE3\x83\xAF\xE3\x83\xBC\xE3\x83\x89\xE3\x82\x92\xE8\xA8\xAD\xE5\xAE\x9A\xE3\x81\x99\xE3\x82\x8B\xE3\x81\x93\xE3\x81\xA8\xE3\x82\x92\xE3\x81\x8A\xE3\x81\x99\xE3\x81\x99\xE3\x82\x81\xE3\x81\x97\xE3\x81\xBE\xE3\x81\x99")
302302 #define MSGJPN301 _Tu8("マスターパスワードが設定と一致しません.安全のため設定の保存を行いません.", "\xE3\x83\x9E\xE3\x82\xB9\xE3\x82\xBF\xE3\x83\xBC\xE3\x83\x91\xE3\x82\xB9\xE3\x83\xAF\xE3\x83\xBC\xE3\x83\x89\xE3\x81\x8C\xE8\xA8\xAD\xE5\xAE\x9A\xE3\x81\xA8\xE4\xB8\x80\xE8\x87\xB4\xE3\x81\x97\xE3\x81\xBE\xE3\x81\x9B\xE3\x82\x93.\xE5\xAE\x89\xE5\x85\xA8\xE3\x81\xAE\xE3\x81\x9F\xE3\x82\x81\xE8\xA8\xAD\xE5\xAE\x9A\xE3\x81\xAE\xE4\xBF\x9D\xE5\xAD\x98\xE3\x82\x92\xE8\xA1\x8C\xE3\x81\x84\xE3\x81\xBE\xE3\x81\x9B\xE3\x82\x93.")
303-#define MSGJPN302 _Tu8("確認用データが壊れているため,マスターパスワードの正当性を確認できませんでした.", "\xE7\xA2\xBA\xE8\xAA\x8D\xE7\x94\xA8\xE3\x83\x87\xE3\x83\xBC\xE3\x82\xBF\xE3\x81\x8C\xE5\xA3\x8A\xE3\x82\x8C\xE3\x81\xA6\xE3\x81\x84\xE3\x82\x8B\xE3\x81\x9F\xE3\x82\x81\xEF\xBC\x8C\xE3\x83\x9E\xE3\x82\xB9\xE3\x82\xBF\xE3\x83\xBC\xE3\x83\x91\xE3\x82\xB9\xE3\x83\xAF\xE3\x83\xBC\xE3\x83\x89\xE3\x81\xAE\xE6\xAD\xA3\xE5\xBD\x93\xE6\x80\xA7\xE3\x82\x92\xE7\xA2\xBA\xE8\xAA\x8D\xE3\x81\xA7\xE3\x81\x8D\xE3\x81\xBE\xE3\x81\x9B\xE3\x82\x93\xE3\x81\xA7\xE3\x81\x97\xE3\x81\x9F.")
303+#define MSGJPN302 _Tu8("確認用データが壊れているため,マスターパスワードの正当性を確認できませんでした.", "\xE7\xA2\xBA\xE8\xAA\x8D\xE7\x94\xA8\xE3\x83\x87\xE3\x83\xBC\xE3\x82\xBF\xE3\x81\x8C\xE5\xA3\x8A\xE3\x82\x8C\xE3\x81\xA6\xE3\x81\x84\xE3\x82\x8B\xE3\x81\x9F\xE3\x82\x81,\xE3\x83\x9E\xE3\x82\xB9\xE3\x82\xBF\xE3\x83\xBC\xE3\x83\x91\xE3\x82\xB9\xE3\x83\xAF\xE3\x83\xBC\xE3\x83\x89\xE3\x81\xAE\xE6\xAD\xA3\xE5\xBD\x93\xE6\x80\xA7\xE3\x82\x92\xE7\xA2\xBA\xE8\xAA\x8D\xE3\x81\xA7\xE3\x81\x8D\xE3\x81\xBE\xE3\x81\x9B\xE3\x82\x93\xE3\x81\xA7\xE3\x81\x97\xE3\x81\x9F.")
304304 #define MSGJPN303 _Tu8("マスターパスワードを変更しました", "\xE3\x83\x9E\xE3\x82\xB9\xE3\x82\xBF\xE3\x83\xBC\xE3\x83\x91\xE3\x82\xB9\xE3\x83\xAF\xE3\x83\xBC\xE3\x83\x89\xE3\x82\x92\xE5\xA4\x89\xE6\x9B\xB4\xE3\x81\x97\xE3\x81\xBE\xE3\x81\x97\xE3\x81\x9F")
305305 #define MSGJPN304 _Tu8("指定されたマスターパスワードが登録されたものと一致しません.\r\n再度入力しますか?\r\n「いいえ」を選ぶと記憶されたFTPパスワードは利用できません.", "\xE6\x8C\x87\xE5\xAE\x9A\xE3\x81\x95\xE3\x82\x8C\xE3\x81\x9F\xE3\x83\x9E\xE3\x82\xB9\xE3\x82\xBF\xE3\x83\xBC\xE3\x83\x91\xE3\x82\xB9\xE3\x83\xAF\xE3\x83\xBC\xE3\x83\x89\xE3\x81\x8C\xE7\x99\xBB\xE9\x8C\xB2\xE3\x81\x95\xE3\x82\x8C\xE3\x81\x9F\xE3\x82\x82\xE3\x81\xAE\xE3\x81\xA8\xE4\xB8\x80\xE8\x87\xB4\xE3\x81\x97\xE3\x81\xBE\xE3\x81\x9B\xE3\x82\x93.\r\n\xE5\x86\x8D\xE5\xBA\xA6\xE5\x85\xA5\xE5\x8A\x9B\xE3\x81\x97\xE3\x81\xBE\xE3\x81\x99\xE3\x81\x8B\xEF\xBC\x9F\r\n\xE3\x80\x8C\xE3\x81\x84\xE3\x81\x84\xE3\x81\x88\xE3\x80\x8D\xE3\x82\x92\xE9\x81\xB8\xE3\x81\xB6\xE3\x81\xA8\xE8\xA8\x98\xE6\x86\xB6\xE3\x81\x95\xE3\x82\x8C\xE3\x81\x9F\x46TP\xE3\x83\x91\xE3\x82\xB9\xE3\x83\xAF\xE3\x83\xBC\xE3\x83\x89\xE3\x81\xAF\xE5\x88\xA9\xE7\x94\xA8\xE3\x81\xA7\xE3\x81\x8D\xE3\x81\xBE\xE3\x81\x9B\xE3\x82\x93.")
306306 #define MSGJPN305 _Tu8("Shift_JIS", "Shift_JIS")
@@ -349,7 +349,7 @@
349349 #define MSGJPN348 _Tu8("EUC", "EUC")
350350 #define MSGJPN349 _Tu8("UTF-8", "UTF-8")
351351 #define MSGJPN350 _Tu8("UTF-8 HFS+", "UTF-8 HFS+")
352-#define MSGJPN351 _Tu8("新しいバージョンの設定が検出されました.\nこのバージョンでは一部の設定が正しく読み込まれない、またはこのバージョンで設定を上書きすると設定が変化する可能性があります.\nこのバージョン用に設定を上書きして保存するには「はい」を選択してください.\n設定をレジストリではなくINIファイルに保存するには「いいえ」を選択してください.\n読み取り専用で設定を読み込むには「キャンセル」を選択してください.", "\xE6\x96\xB0\xE3\x81\x97\xE3\x81\x84\xE3\x83\x90\xE3\x83\xBC\xE3\x82\xB8\xE3\x83\xA7\xE3\x83\xB3\xE3\x81\xAE\xE8\xA8\xAD\xE5\xAE\x9A\xE3\x81\x8C\xE6\xA4\x9C\xE5\x87\xBA\xE3\x81\x95\xE3\x82\x8C\xE3\x81\xBE\xE3\x81\x97\xE3\x81\x9F.\n\xE3\x81\x93\xE3\x81\xAE\xE3\x83\x90\xE3\x83\xBC\xE3\x82\xB8\xE3\x83\xA7\xE3\x83\xB3\xE3\x81\xA7\xE3\x81\xAF\xE4\xB8\x80\xE9\x83\xA8\xE3\x81\xAE\xE8\xA8\xAD\xE5\xAE\x9A\xE3\x81\x8C\xE6\xAD\xA3\xE3\x81\x97\xE3\x81\x8F\xE8\xAA\xAD\xE3\x81\xBF\xE8\xBE\xBC\xE3\x81\xBE\xE3\x82\x8C\xE3\x81\xAA\xE3\x81\x84\xE3\x80\x81\xE3\x81\xBE\xE3\x81\x9F\xE3\x81\xAF\xE3\x81\x93\xE3\x81\xAE\xE3\x83\x90\xE3\x83\xBC\xE3\x82\xB8\xE3\x83\xA7\xE3\x83\xB3\xE3\x81\xA7\xE8\xA8\xAD\xE5\xAE\x9A\xE3\x82\x92\xE4\xB8\x8A\xE6\x9B\xB8\xE3\x81\x8D\xE3\x81\x99\xE3\x82\x8B\xE3\x81\xA8\xE8\xA8\xAD\xE5\xAE\x9A\xE3\x81\x8C\xE5\xA4\x89\xE5\x8C\x96\xE3\x81\x99\xE3\x82\x8B\xE5\x8F\xAF\xE8\x83\xBD\xE6\x80\xA7\xE3\x81\x8C\xE3\x81\x82\xE3\x82\x8A\xE3\x81\xBE\xE3\x81\x99.\n\xE3\x81\x93\xE3\x81\xAE\xE3\x83\x90\xE3\x83\xBC\xE3\x82\xB8\xE3\x83\xA7\xE3\x83\xB3\xE7\x94\xA8\xE3\x81\xAB\xE8\xA8\xAD\xE5\xAE\x9A\xE3\x82\x92\xE4\xB8\x8A\xE6\x9B\xB8\xE3\x81\x8D\xE3\x81\x97\xE3\x81\xA6\xE4\xBF\x9D\xE5\xAD\x98\xE3\x81\x99\xE3\x82\x8B\xE3\x81\xAB\xE3\x81\xAF\xE3\x80\x8C\xE3\x81\xAF\xE3\x81\x84\xE3\x80\x8D\xE3\x82\x92\xE9\x81\xB8\xE6\x8A\x9E\xE3\x81\x97\xE3\x81\xA6\xE3\x81\x8F\xE3\x81\xA0\xE3\x81\x95\xE3\x81\x84.\n\xE8\xA8\xAD\xE5\xAE\x9A\xE3\x82\x92\xE3\x83\xAC\xE3\x82\xB8\xE3\x82\xB9\xE3\x83\x88\xE3\x83\xAA\xE3\x81\xA7\xE3\x81\xAF\xE3\x81\xAA\xE3\x81\x8FINI\xE3\x83\x95\xE3\x82\xA1\xE3\x82\xA4\xE3\x83\xAB\xE3\x81\xAB\xE4\xBF\x9D\xE5\xAD\x98\xE3\x81\x99\xE3\x82\x8B\xE3\x81\xAB\xE3\x81\xAF\xE3\x80\x8C\xE3\x81\x84\xE3\x81\x84\xE3\x81\x88\xE3\x80\x8D\xE3\x82\x92\xE9\x81\xB8\xE6\x8A\x9E\xE3\x81\x97\xE3\x81\xA6\xE3\x81\x8F\xE3\x81\xA0\xE3\x81\x95\xE3\x81\x84.\n\xE8\xAA\xAD\xE3\x81\xBF\xE5\x8F\x96\xE3\x82\x8A\xE5\xB0\x82\xE7\x94\xA8\xE3\x81\xA7\xE8\xA8\xAD\xE5\xAE\x9A\xE3\x82\x92\xE8\xAA\xAD\xE3\x81\xBF\xE8\xBE\xBC\xE3\x82\x80\xE3\x81\xAB\xE3\x81\xAF\xE3\x80\x8C\xE3\x82\xAD\xE3\x83\xA3\xE3\x83\xB3\xE3\x82\xBB\xE3\x83\xAB\xE3\x80\x8D\xE3\x82\x92\xE9\x81\xB8\xE6\x8A\x9E\xE3\x81\x97\xE3\x81\xA6\xE3\x81\x8F\xE3\x81\xA0\xE3\x81\x95\xE3\x81\x84.")
352+#define MSGJPN351 _Tu8("新しいバージョンの設定が検出されました.\nこのバージョンでは一部の設定が正しく読み込まれない,またはこのバージョンで設定を上書きすると設定が変化する可能性があります.\nこのバージョン用に設定を上書きして保存するには「はい」を選択してください.\n設定をレジストリではなくINIファイルに保存するには「いいえ」を選択してください.\n読み取り専用で設定を読み込むには「キャンセル」を選択してください.", "\xE6\x96\xB0\xE3\x81\x97\xE3\x81\x84\xE3\x83\x90\xE3\x83\xBC\xE3\x82\xB8\xE3\x83\xA7\xE3\x83\xB3\xE3\x81\xAE\xE8\xA8\xAD\xE5\xAE\x9A\xE3\x81\x8C\xE6\xA4\x9C\xE5\x87\xBA\xE3\x81\x95\xE3\x82\x8C\xE3\x81\xBE\xE3\x81\x97\xE3\x81\x9F.\n\xE3\x81\x93\xE3\x81\xAE\xE3\x83\x90\xE3\x83\xBC\xE3\x82\xB8\xE3\x83\xA7\xE3\x83\xB3\xE3\x81\xA7\xE3\x81\xAF\xE4\xB8\x80\xE9\x83\xA8\xE3\x81\xAE\xE8\xA8\xAD\xE5\xAE\x9A\xE3\x81\x8C\xE6\xAD\xA3\xE3\x81\x97\xE3\x81\x8F\xE8\xAA\xAD\xE3\x81\xBF\xE8\xBE\xBC\xE3\x81\xBE\xE3\x82\x8C\xE3\x81\xAA\xE3\x81\x84,\xE3\x81\xBE\xE3\x81\x9F\xE3\x81\xAF\xE3\x81\x93\xE3\x81\xAE\xE3\x83\x90\xE3\x83\xBC\xE3\x82\xB8\xE3\x83\xA7\xE3\x83\xB3\xE3\x81\xA7\xE8\xA8\xAD\xE5\xAE\x9A\xE3\x82\x92\xE4\xB8\x8A\xE6\x9B\xB8\xE3\x81\x8D\xE3\x81\x99\xE3\x82\x8B\xE3\x81\xA8\xE8\xA8\xAD\xE5\xAE\x9A\xE3\x81\x8C\xE5\xA4\x89\xE5\x8C\x96\xE3\x81\x99\xE3\x82\x8B\xE5\x8F\xAF\xE8\x83\xBD\xE6\x80\xA7\xE3\x81\x8C\xE3\x81\x82\xE3\x82\x8A\xE3\x81\xBE\xE3\x81\x99.\n\xE3\x81\x93\xE3\x81\xAE\xE3\x83\x90\xE3\x83\xBC\xE3\x82\xB8\xE3\x83\xA7\xE3\x83\xB3\xE7\x94\xA8\xE3\x81\xAB\xE8\xA8\xAD\xE5\xAE\x9A\xE3\x82\x92\xE4\xB8\x8A\xE6\x9B\xB8\xE3\x81\x8D\xE3\x81\x97\xE3\x81\xA6\xE4\xBF\x9D\xE5\xAD\x98\xE3\x81\x99\xE3\x82\x8B\xE3\x81\xAB\xE3\x81\xAF\xE3\x80\x8C\xE3\x81\xAF\xE3\x81\x84\xE3\x80\x8D\xE3\x82\x92\xE9\x81\xB8\xE6\x8A\x9E\xE3\x81\x97\xE3\x81\xA6\xE3\x81\x8F\xE3\x81\xA0\xE3\x81\x95\xE3\x81\x84.\n\xE8\xA8\xAD\xE5\xAE\x9A\xE3\x82\x92\xE3\x83\xAC\xE3\x82\xB8\xE3\x82\xB9\xE3\x83\x88\xE3\x83\xAA\xE3\x81\xA7\xE3\x81\xAF\xE3\x81\xAA\xE3\x81\x8FINI\xE3\x83\x95\xE3\x82\xA1\xE3\x82\xA4\xE3\x83\xAB\xE3\x81\xAB\xE4\xBF\x9D\xE5\xAD\x98\xE3\x81\x99\xE3\x82\x8B\xE3\x81\xAB\xE3\x81\xAF\xE3\x80\x8C\xE3\x81\x84\xE3\x81\x84\xE3\x81\x88\xE3\x80\x8D\xE3\x82\x92\xE9\x81\xB8\xE6\x8A\x9E\xE3\x81\x97\xE3\x81\xA6\xE3\x81\x8F\xE3\x81\xA0\xE3\x81\x95\xE3\x81\x84.\n\xE8\xAA\xAD\xE3\x81\xBF\xE5\x8F\x96\xE3\x82\x8A\xE5\xB0\x82\xE7\x94\xA8\xE3\x81\xA7\xE8\xA8\xAD\xE5\xAE\x9A\xE3\x82\x92\xE8\xAA\xAD\xE3\x81\xBF\xE8\xBE\xBC\xE3\x82\x80\xE3\x81\xAB\xE3\x81\xAF\xE3\x80\x8C\xE3\x82\xAD\xE3\x83\xA3\xE3\x83\xB3\xE3\x82\xBB\xE3\x83\xAB\xE3\x80\x8D\xE3\x82\x92\xE9\x81\xB8\xE6\x8A\x9E\xE3\x81\x97\xE3\x81\xA6\xE3\x81\x8F\xE3\x81\xA0\xE3\x81\x95\xE3\x81\x84.")
353353 #define MSGJPN352 _Tu8("警告: 暗号化されていません", "\xE8\xAD\xA6\xE5\x91\x8A: \xE6\x9A\x97\xE5\x8F\xB7\xE5\x8C\x96\xE3\x81\x95\xE3\x82\x8C\xE3\x81\xA6\xE3\x81\x84\xE3\x81\xBE\xE3\x81\x9B\xE3\x82\x93")
354354 #define MSGJPN353 _Tu8("暗号化されています: FTPES", "\xE6\x9A\x97\xE5\x8F\xB7\xE5\x8C\x96\xE3\x81\x95\xE3\x82\x8C\xE3\x81\xA6\xE3\x81\x84\xE3\x81\xBE\xE3\x81\x99: FTPES")
355355 #define MSGJPN354 _Tu8("暗号化されています: FTPIS", "\xE6\x9A\x97\xE5\x8F\xB7\xE5\x8C\x96\xE3\x81\x95\xE3\x82\x8C\xE3\x81\xA6\xE3\x81\x84\xE3\x81\xBE\xE3\x81\x99: FTPIS")
@@ -359,6 +359,11 @@
359359 #define MSGJPN358 _Tu8("設定のエクスポートに失敗しました.\n保存する場所や形式を変更してください.", "\xE8\xA8\xAD\xE5\xAE\x9A\xE3\x81\xAE\xE3\x82\xA8\xE3\x82\xAF\xE3\x82\xB9\xE3\x83\x9D\xE3\x83\xBC\xE3\x83\x88\xE3\x81\xAB\xE5\xA4\xB1\xE6\x95\x97\xE3\x81\x97\xE3\x81\xBE\xE3\x81\x97\xE3\x81\x9F.\n\xE4\xBF\x9D\xE5\xAD\x98\xE3\x81\x99\xE3\x82\x8B\xE5\xA0\xB4\xE6\x89\x80\xE3\x82\x84\xE5\xBD\xA2\xE5\xBC\x8F\xE3\x82\x92\xE5\xA4\x89\xE6\x9B\xB4\xE3\x81\x97\xE3\x81\xA6\xE3\x81\x8F\xE3\x81\xA0\xE3\x81\x95\xE3\x81\x84.")
360360 #define MSGJPN359 _Tu8("ソフトウェアの更新が完了しました.", "\xE3\x82\xBD\xE3\x83\x95\xE3\x83\x88\xE3\x82\xA6\xE3\x82\xA7\xE3\x82\xA2\xE3\x81\xAE\xE6\x9B\xB4\xE6\x96\xB0\xE3\x81\x8C\xE5\xAE\x8C\xE4\xBA\x86\xE3\x81\x97\xE3\x81\xBE\xE3\x81\x97\xE3\x81\x9F.")
361361 #define MSGJPN360 _Tu8("ソフトウェアの更新に失敗しました.\nWebサイトから最新版を入手して手動で更新してください.", "\xE3\x82\xBD\xE3\x83\x95\xE3\x83\x88\xE3\x82\xA6\xE3\x82\xA7\xE3\x82\xA2\xE3\x81\xAE\xE6\x9B\xB4\xE6\x96\xB0\xE3\x81\xAB\xE5\xA4\xB1\xE6\x95\x97\xE3\x81\x97\xE3\x81\xBE\xE3\x81\x97\xE3\x81\x9F.\nWeb\xE3\x82\xB5\xE3\x82\xA4\xE3\x83\x88\xE3\x81\x8B\xE3\x82\x89\xE6\x9C\x80\xE6\x96\xB0\xE7\x89\x88\xE3\x82\x92\xE5\x85\xA5\xE6\x89\x8B\xE3\x81\x97\xE3\x81\xA6\xE6\x89\x8B\xE5\x8B\x95\xE3\x81\xA7\xE6\x9B\xB4\xE6\x96\xB0\xE3\x81\x97\xE3\x81\xA6\xE3\x81\x8F\xE3\x81\xA0\xE3\x81\x95\xE3\x81\x84.")
362+#define MSGJPN361 _Tu8("更新", "\xE6\x9B\xB4\xE6\x96\xB0")
363+#define MSGJPN362 _Tu8("新しいバージョンがあります.\n\n現在のバージョン: %s\n新しいバージョン: %s\n\n更新のダウンロードには数分間かかります.\n今すぐ更新しますか.", "\xE6\x96\xB0\xE3\x81\x97\xE3\x81\x84\xE3\x83\x90\xE3\x83\xBC\xE3\x82\xB8\xE3\x83\xA7\xE3\x83\xB3\xE3\x81\x8C\xE3\x81\x82\xE3\x82\x8A\xE3\x81\xBE\xE3\x81\x99.\n\n\xE7\x8F\xBE\xE5\x9C\xA8\xE3\x81\xAE\xE3\x83\x90\xE3\x83\xBC\xE3\x82\xB8\xE3\x83\xA7\xE3\x83\xB3: %s\n\xE6\x96\xB0\xE3\x81\x97\xE3\x81\x84\xE3\x83\x90\xE3\x83\xBC\xE3\x82\xB8\xE3\x83\xA7\xE3\x83\xB3: %s\n\n\xE6\x9B\xB4\xE6\x96\xB0\xE3\x81\xAE\xE3\x83\x80\xE3\x82\xA6\xE3\x83\xB3\xE3\x83\xAD\xE3\x83\xBC\xE3\x83\x89\xE3\x81\xAB\xE3\x81\xAF\xE6\x95\xB0\xE5\x88\x86\xE9\x96\x93\xE3\x81\x8B\xE3\x81\x8B\xE3\x82\x8A\xE3\x81\xBE\xE3\x81\x99.\n\xE4\xBB\x8A\xE3\x81\x99\xE3\x81\x90\xE6\x9B\xB4\xE6\x96\xB0\xE3\x81\x97\xE3\x81\xBE\xE3\x81\x99\xE3\x81\x8B.")
364+#define MSGJPN363 _Tu8("ソフトウェアの更新に失敗しました.\nサーバーに接続できないかデータが破損しています.", "\xE3\x82\xBD\xE3\x83\x95\xE3\x83\x88\xE3\x82\xA6\xE3\x82\xA7\xE3\x82\xA2\xE3\x81\xAE\xE6\x9B\xB4\xE6\x96\xB0\xE3\x81\xAB\xE5\xA4\xB1\xE6\x95\x97\xE3\x81\x97\xE3\x81\xBE\xE3\x81\x97\xE3\x81\x9F.\n\xE3\x82\xB5\xE3\x83\xBC\xE3\x83\x90\xE3\x83\xBC\xE3\x81\xAB\xE6\x8E\xA5\xE7\xB6\x9A\xE3\x81\xA7\xE3\x81\x8D\xE3\x81\xAA\xE3\x81\x84\xE3\x81\x8B\xE3\x83\x87\xE3\x83\xBC\xE3\x82\xBF\xE3\x81\x8C\xE7\xA0\xB4\xE6\x90\x8D\xE3\x81\x97\xE3\x81\xA6\xE3\x81\x84\xE3\x81\xBE\xE3\x81\x99.")
365+#define MSGJPN364 _Tu8("お使いのバージョンはすでに最新です.", "\xE3\x81\x8A\xE4\xBD\xBF\xE3\x81\x84\xE3\x81\xAE\xE3\x83\x90\xE3\x83\xBC\xE3\x82\xB8\xE3\x83\xA7\xE3\x83\xB3\xE3\x81\xAF\xE3\x81\x99\xE3\x81\xA7\xE3\x81\xAB\xE6\x9C\x80\xE6\x96\xB0\xE3\x81\xA7\xE3\x81\x99.")
366+#define MSGJPN365 _Tu8("ソフトウェアの更新の準備が完了しました.\nFFFTPの終了時に更新が適用されます.", "\xE3\x82\xBD\xE3\x83\x95\xE3\x83\x88\xE3\x82\xA6\xE3\x82\xA7\xE3\x82\xA2\xE3\x81\xAE\xE6\x9B\xB4\xE6\x96\xB0\xE3\x81\xAE\xE6\xBA\x96\xE5\x82\x99\xE3\x81\x8C\xE5\xAE\x8C\xE4\xBA\x86\xE3\x81\x97\xE3\x81\xBE\xE3\x81\x97\xE3\x81\x9F.\nFFFTP\xE3\x81\xAE\xE7\xB5\x82\xE4\xBA\x86\xE6\x99\x82\xE3\x81\xAB\xE6\x9B\xB4\xE6\x96\xB0\xE3\x81\x8C\xE9\x81\xA9\xE7\x94\xA8\xE3\x81\x95\xE3\x82\x8C\xE3\x81\xBE\xE3\x81\x99.")
362367 #if defined(HAVE_TANDEM)
363368 #define MSGJPN2000 _Tu8("NonStop Server", "NonStop Server")
364369 #define MSGJPN2001 _Tu8("OSS<->GUARDIAN 切り替え(&O)", "OSS<->GUARDIAN \xE5\x88\x87\xE3\x82\x8A\xE6\x9B\xBF\xE3\x81\x88(&O)")
--- a/misc.c
+++ b/misc.c
@@ -1422,7 +1422,7 @@ void FormatIniString(char *Str)
14221422
14231423 while(*Str != NUL)
14241424 {
1425- if((*Str != 0x22) && (*Str != '\n'))
1425+ if((*Str != '\"') && (*Str != '\n'))
14261426 *Put++ = *Str;
14271427 Str++;
14281428 }
--- a/option.c
+++ b/option.c
@@ -88,6 +88,8 @@ static INT_PTR CALLBACK ToolSettingProc(HWND hDlg, UINT message, WPARAM wParam,
8888 static INT_PTR CALLBACK SoundSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
8989 static INT_PTR CALLBACK MiscSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
9090 static INT_PTR CALLBACK SortSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
91+// ソフトウェア自動更新
92+static INT_PTR CALLBACK UpdatesSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
9193 // hostman.cで使用
9294 //static int GetDecimalText(HWND hDlg, int Ctrl);
9395 //static void SetDecimalText(HWND hDlg, int Ctrl, int Num);
@@ -186,6 +188,10 @@ extern int EncryptAllSettings;
186188 extern int AutoRefreshFileList;
187189 // 古い処理内容を消去
188190 extern int RemoveOldLog;
191+// ソフトウェア自動更新
192+extern int AutoCheckForUpdates;
193+extern int AutoApplyUpdates;
194+extern int AutoCheckForUptatesInterval;
189195
190196
191197 /*----- オプションのプロパティシート ------------------------------------------
@@ -201,7 +207,7 @@ void SetOption(int Start)
201207 {
202208 // UTF-8対応
203209 // PROPSHEETPAGE psp[12];
204- PROPSHEETPAGE psp[14];
210+ PROPSHEETPAGE psp[15];
205211 PROPSHEETHEADER psh;
206212
207213 // 変数が未初期化のバグ修正
@@ -422,13 +428,23 @@ void SetOption(int Start)
422428 psp[13].dwSize = sizeof(PROPSHEETPAGE);
423429 psp[13].dwFlags = PSP_USETITLE | PSP_HASHELP;
424430 psp[13].hInstance = GetFtpInst();
425- psp[13].pszTemplate = MAKEINTRESOURCE(opt_misc_dlg);
431+ psp[13].pszTemplate = MAKEINTRESOURCE(opt_updates_dlg);
426432 psp[13].pszIcon = NULL;
427- psp[13].pfnDlgProc = MiscSettingProc;
428- psp[13].pszTitle = MSGJPN197;
433+ psp[13].pfnDlgProc = UpdatesSettingProc;
434+ psp[13].pszTitle = MSGJPN361;
429435 psp[13].lParam = 0;
430436 psp[13].pfnCallback = NULL;
431437
438+ psp[14].dwSize = sizeof(PROPSHEETPAGE);
439+ psp[14].dwFlags = PSP_USETITLE | PSP_HASHELP;
440+ psp[14].hInstance = GetFtpInst();
441+ psp[14].pszTemplate = MAKEINTRESOURCE(opt_misc_dlg);
442+ psp[14].pszIcon = NULL;
443+ psp[14].pfnDlgProc = MiscSettingProc;
444+ psp[14].pszTitle = MSGJPN197;
445+ psp[14].lParam = 0;
446+ psp[14].pfnCallback = NULL;
447+
432448 psh.dwSize = sizeof(PROPSHEETHEADER);
433449 psh.dwFlags = PSH_HASHELP | PSH_NOAPPLYNOW | PSH_PROPSHEETPAGE;
434450 psh.hwndParent = GetMainHwnd();
@@ -1932,6 +1948,76 @@ static INT_PTR CALLBACK SortSettingProc(HWND hDlg, UINT message, WPARAM wParam,
19321948 }
19331949
19341950
1951+// ソフトウェア自動更新
1952+static INT_PTR CALLBACK UpdatesSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
1953+{
1954+ NMHDR *pnmhdr;
1955+
1956+ switch (message)
1957+ {
1958+ case WM_INITDIALOG :
1959+ SendDlgItemMessage(hDlg, UPDATES_AUTO_CHECK, BM_SETCHECK, AutoCheckForUpdates, 0);
1960+ SendDlgItemMessage(hDlg, UPDATES_AUTO_APPLY, BM_SETCHECK, AutoApplyUpdates, 0);
1961+ SendDlgItemMessage(hDlg, UPDATES_INTERVAL, EM_LIMITTEXT, (WPARAM)3, 0);
1962+ SetDecimalText(hDlg, UPDATES_INTERVAL, AutoCheckForUptatesInterval);
1963+ SendDlgItemMessage(hDlg, UPDATES_INTERVAL_SPN, UDM_SETRANGE, 0, (LPARAM)MAKELONG(999, 0));
1964+ if(AutoCheckForUpdates == YES)
1965+ {
1966+ EnableWindow(GetDlgItem(hDlg, UPDATES_AUTO_APPLY), TRUE);
1967+ EnableWindow(GetDlgItem(hDlg, UPDATES_INTERVAL), TRUE);
1968+ EnableWindow(GetDlgItem(hDlg, UPDATES_INTERVAL_SPN), TRUE);
1969+ }
1970+ else
1971+ {
1972+ EnableWindow(GetDlgItem(hDlg, UPDATES_AUTO_APPLY), FALSE);
1973+ EnableWindow(GetDlgItem(hDlg, UPDATES_INTERVAL), FALSE);
1974+ EnableWindow(GetDlgItem(hDlg, UPDATES_INTERVAL_SPN), FALSE);
1975+ }
1976+ return(TRUE);
1977+
1978+ case WM_NOTIFY:
1979+ pnmhdr = (NMHDR FAR *)lParam;
1980+ switch(pnmhdr->code)
1981+ {
1982+ case PSN_APPLY :
1983+ AutoCheckForUpdates = SendDlgItemMessage(hDlg, UPDATES_AUTO_CHECK, BM_GETCHECK, 0, 0);
1984+ AutoApplyUpdates = SendDlgItemMessage(hDlg, UPDATES_AUTO_APPLY, BM_GETCHECK, 0, 0);
1985+ AutoCheckForUptatesInterval = GetDecimalText(hDlg, UPDATES_INTERVAL);
1986+ CheckRange2(&AutoCheckForUptatesInterval, 999, 0);
1987+ break;
1988+
1989+ case PSN_RESET :
1990+ break;
1991+
1992+ case PSN_HELP :
1993+// hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000069);
1994+ break;
1995+ }
1996+ break;
1997+
1998+ case WM_COMMAND :
1999+ switch(GET_WM_COMMAND_ID(wParam, lParam))
2000+ {
2001+ case UPDATES_AUTO_CHECK :
2002+ if(SendDlgItemMessage(hDlg, UPDATES_AUTO_CHECK, BM_GETCHECK, 0, 0) == 1)
2003+ {
2004+ EnableWindow(GetDlgItem(hDlg, UPDATES_AUTO_APPLY), TRUE);
2005+ EnableWindow(GetDlgItem(hDlg, UPDATES_INTERVAL), TRUE);
2006+ EnableWindow(GetDlgItem(hDlg, UPDATES_INTERVAL_SPN), TRUE);
2007+ }
2008+ else
2009+ {
2010+ EnableWindow(GetDlgItem(hDlg, UPDATES_AUTO_APPLY), FALSE);
2011+ EnableWindow(GetDlgItem(hDlg, UPDATES_INTERVAL), FALSE);
2012+ EnableWindow(GetDlgItem(hDlg, UPDATES_INTERVAL_SPN), FALSE);
2013+ }
2014+ break;
2015+ }
2016+ return(TRUE);
2017+ }
2018+ return(FALSE);
2019+}
2020+
19352021 /*----- ダイアログのコントロールから10進数を取得 ----------------------------
19362022 *
19372023 * Parameter
Binary files a/putty/Release/PuTTY.dll and b/putty/Release/PuTTY.dll differ
--- a/putty/dllinterface.c
+++ b/putty/dllinterface.c
@@ -20,7 +20,7 @@ __declspec(dllexport) SFTPSTATUS* SFTP_Create()
2020 SFTP_InitializeIOBuffer(&p->DataInBuffer, 1048576);
2121 SFTP_InitializeIOBuffer(&p->DataOutBuffer, 1048576);
2222 memset(&p->FilePosition, 0, sizeof(LARGE_INTEGER));
23- CreateThread(NULL, 0, SFTP_ThreadProc, NULL, 0, &p->ThreadId);
23+ CloseHandle(CreateThread(NULL, 0, SFTP_ThreadProc, NULL, 0, &p->ThreadId));
2424 }
2525 return p;
2626 }
--- a/registry.c
+++ b/registry.c
@@ -226,6 +226,11 @@ extern int AutoRefreshFileList;
226226 extern int RemoveOldLog;
227227 // バージョン確認
228228 extern int ReadOnlySettings;
229+// ソフトウェア自動更新
230+extern int AutoCheckForUpdates;
231+extern int AutoApplyUpdates;
232+extern int AutoCheckForUptatesInterval;
233+extern time_t LastAutoCheckForUpdates;
229234
230235 /*----- マスタパスワードの設定 ----------------------------------------------
231236 *
@@ -692,6 +697,11 @@ void SaveRegistry(void)
692697 WriteIntValueToReg(hKey4, "ListRefresh", AutoRefreshFileList);
693698 // 古い処理内容を消去
694699 WriteIntValueToReg(hKey4, "OldLog", RemoveOldLog);
700+ // ソフトウェア自動更新
701+ WriteIntValueToReg(hKey4, "UpdCheck", AutoCheckForUpdates);
702+ WriteIntValueToReg(hKey4, "UpdApply", AutoApplyUpdates);
703+ WriteIntValueToReg(hKey4, "UpdInterval", AutoCheckForUptatesInterval);
704+ WriteBinaryToReg(hKey4, "UpdLastCheck", &LastAutoCheckForUpdates, sizeof(LastAutoCheckForUpdates));
695705 }
696706 CloseSubKey(hKey4);
697707 }
@@ -1174,6 +1184,11 @@ int LoadRegistry(void)
11741184 ReadIntValueFromReg(hKey4, "ListRefresh", &AutoRefreshFileList);
11751185 // 古い処理内容を消去
11761186 ReadIntValueFromReg(hKey4, "OldLog", &RemoveOldLog);
1187+ // ソフトウェア自動更新
1188+ ReadIntValueFromReg(hKey4, "UpdCheck", &AutoCheckForUpdates);
1189+ ReadIntValueFromReg(hKey4, "UpdApply", &AutoApplyUpdates);
1190+ ReadIntValueFromReg(hKey4, "UpdInterval", &AutoCheckForUptatesInterval);
1191+ ReadBinaryFromReg(hKey4, "UpdLastCheck", &LastAutoCheckForUpdates, sizeof(LastAutoCheckForUpdates));
11771192
11781193 CloseSubKey(hKey4);
11791194 }
@@ -1401,7 +1416,7 @@ void SaveSettingsToFile(void)
14011416 {
14021417 if(ShellExecute(NULL, "open", "regedit", Tmp, NULL, SW_SHOW) <= (HINSTANCE)32)
14031418 {
1404- MessageBox(NULL, MSGJPN285, "FFFTP", MB_OK);
1419+ MessageBox(GetMainHwnd(), MSGJPN285, "FFFTP", MB_OK | MB_ICONERROR);
14051420 }
14061421 SetCurrentDirectory(CurDir);
14071422 }
@@ -1465,7 +1480,7 @@ int LoadSettingsFromFile(void)
14651480 {
14661481 if(ShellExecute(NULL, "open", "regedit", Tmp, NULL, SW_SHOW) <= (HINSTANCE)32)
14671482 {
1468- MessageBox(NULL, MSGJPN285, "FFFTP", MB_OK);
1483+ MessageBox(GetMainHwnd(), MSGJPN285, "FFFTP", MB_OK | MB_ICONERROR);
14691484 }
14701485 else
14711486 {
@@ -1484,7 +1499,9 @@ int LoadSettingsFromFile(void)
14841499 Ret = YES;
14851500 }
14861501 else
1487- MessageBox(NULL, MSGJPN293, "FFFTP", MB_OK);
1502+ // バグ修正
1503+// MessageBox(NULL, MSGJPN293, "FFFTP", MB_OK);
1504+ MessageBox(GetMainHwnd(), MSGJPN293, "FFFTP", MB_OK | MB_ICONERROR);
14881505 }
14891506 return(Ret);
14901507 }
@@ -2313,7 +2330,9 @@ static BOOL WriteOutRegToFile(REGDATATBL *Pos)
23132330 Ret = TRUE;
23142331 }
23152332 else
2316- MessageBox(NULL, MSGJPN240, "FFFTP", MB_OK);
2333+ // バグ修正
2334+// MessageBox(NULL, MSGJPN240, "FFFTP", MB_OK);
2335+ MessageBox(GetMainHwnd(), MSGJPN240, "FFFTP", MB_OK | MB_ICONERROR);
23172336
23182337 return(Ret);
23192338 }
@@ -3682,7 +3701,7 @@ void SaveSettingsToFileZillaXml()
36823701 fclose(f);
36833702 }
36843703 else
3685- MessageBox(NULL, MSGJPN358, "FFFTP", MB_OK);
3704+ MessageBox(GetMainHwnd(), MSGJPN358, "FFFTP", MB_OK | MB_ICONERROR);
36863705 }
36873706 }
36883707
--- a/tool.c
+++ b/tool.c
@@ -180,7 +180,7 @@ void TurnStatefulFTPFilter()
180180 {
181181 if(ShellExecute(NULL, "runas", "netsh", ID == IDYES ? "advfirewall set global statefulftp enable" : "advfirewall set global statefulftp disable", NULL, SW_SHOW) <= (HINSTANCE)32)
182182 {
183- MessageBox(NULL, MSGJPN342, "FFFTP", MB_OK);
183+ MessageBox(GetMainHwnd(), MSGJPN342, "FFFTP", MB_OK | MB_ICONERROR);
184184 }
185185 SetCurrentDirectory(CurDir);
186186 }
--- a/updater.c
+++ b/updater.c
@@ -264,11 +264,12 @@ BOOL PrepareUpdates(void* pList, DWORD ListLength, LPCTSTR DownloadDir)
264264 }
265265
266266 // FFFTPを更新
267-BOOL ApplyUpdates(LPCTSTR DestinationDir)
267+BOOL ApplyUpdates(LPCTSTR DestinationDir, LPCTSTR BackupDirName)
268268 {
269269 BOOL bResult;
270270 TCHAR Source[MAX_PATH];
271271 TCHAR Backup[MAX_PATH];
272+ TCHAR DestinationBackup[MAX_PATH];
272273 TCHAR* p;
273274 bResult = FALSE;
274275 if(GetModuleFileName(NULL, Source, MAX_PATH) > 0)
@@ -276,19 +277,24 @@ BOOL ApplyUpdates(LPCTSTR DestinationDir)
276277 if(p = _tcsrchr(Source, _T('\\')))
277278 *p = _T('\0');
278279 _tcscpy(Backup, Source);
279- _tcscat(Backup, _T("\\updatebackup"));
280+ _tcscat(Backup, _T("\\"));
281+ _tcscat(Backup, BackupDirName);
280282 DeleteDirectoryAndContents(Backup);
281283 if(CopyAllFilesInDirectory(DestinationDir, Backup))
282284 {
285+ _tcscpy(DestinationBackup, DestinationDir);
286+ _tcscat(DestinationBackup, _T("\\"));
287+ _tcscat(DestinationBackup, BackupDirName);
283288 if(CopyAllFilesInDirectory(Source, DestinationDir))
284289 {
290+ DeleteDirectoryAndContents(DestinationBackup);
285291 bResult = TRUE;
286- _tcscpy(Backup, DestinationDir);
287- _tcscat(Backup, _T("\\updatebackup"));
288- DeleteDirectoryAndContents(Backup);
289292 }
290293 else
294+ {
295+ DeleteDirectoryAndContents(DestinationBackup);
291296 CopyAllFilesInDirectory(Backup, DestinationDir);
297+ }
292298 }
293299 }
294300 return bResult;
@@ -305,18 +311,31 @@ BOOL CleanupUpdates(LPCTSTR DownloadDir)
305311 }
306312
307313 // 更新用のプロセスを起動
308-BOOL StartUpdateProcess(LPCTSTR Path, LPCTSTR CommandLine)
314+BOOL StartUpdateProcess(LPCTSTR DownloadDir, LPCTSTR CommandLine)
309315 {
310316 BOOL bResult;
317+ TCHAR Name[MAX_PATH];
318+ TCHAR* p;
319+ TCHAR Path[MAX_PATH];
311320 bResult = FALSE;
312- if(ShellExecute(NULL, "open", Path, CommandLine, NULL, SW_SHOW) > (HINSTANCE)32)
313- bResult = TRUE;
321+ if(GetModuleFileName(NULL, Name, MAX_PATH) > 0)
322+ {
323+ if(p = _tcsrchr(Name, _T('\\')))
324+ p++;
325+ else
326+ p = Name;
327+ _tcscpy(Path, DownloadDir);
328+ _tcscat(Path, _T("\\"));
329+ _tcscat(Path, p);
330+ if(ShellExecute(NULL, _T("open"), Path, CommandLine, NULL, SW_SHOW) > (HINSTANCE)32)
331+ bResult = TRUE;
332+ }
314333 return bResult;
315334 }
316335
317336 // 更新用のプロセスを管理者権限で起動
318337 // Windows XP以前など起動できない場合は現在のプロセスで処理を続行
319-BOOL StartUpdateProcessAsAdministrator(LPCTSTR CommandLine, LPCTSTR Keyword)
338+BOOL RestartUpdateProcessAsAdministrator(LPCTSTR CommandLine, LPCTSTR Keyword)
320339 {
321340 BOOL bResult;
322341 TCHAR* NewCommandLine;
@@ -329,19 +348,21 @@ BOOL StartUpdateProcessAsAdministrator(LPCTSTR CommandLine, LPCTSTR Keyword)
329348 {
330349 _tcscpy(NewCommandLine, CommandLine);
331350 _tcscat(NewCommandLine, Keyword);
332- GetModuleFileName(NULL, Path, MAX_PATH);
333- memset(&Info, 0, sizeof(SHELLEXECUTEINFO));
334- Info.cbSize = sizeof(SHELLEXECUTEINFO);
335- Info.fMask = SEE_MASK_NOCLOSEPROCESS;
336- Info.lpVerb = "runas";
337- Info.lpFile = Path;
338- Info.lpParameters = NewCommandLine;
339- Info.nShow = SW_SHOW;
340- if(ShellExecuteEx(&Info))
351+ if(GetModuleFileName(NULL, Path, MAX_PATH) > 0)
341352 {
342- WaitForSingleObject(Info.hProcess, INFINITE);
343- CloseHandle(Info.hProcess);
344- bResult = TRUE;
353+ memset(&Info, 0, sizeof(SHELLEXECUTEINFO));
354+ Info.cbSize = sizeof(SHELLEXECUTEINFO);
355+ Info.fMask = SEE_MASK_NOCLOSEPROCESS;
356+ Info.lpVerb = _T("runas");
357+ Info.lpFile = Path;
358+ Info.lpParameters = NewCommandLine;
359+ Info.nShow = SW_SHOW;
360+ if(ShellExecuteEx(&Info))
361+ {
362+ WaitForSingleObject(Info.hProcess, INFINITE);
363+ CloseHandle(Info.hProcess);
364+ bResult = TRUE;
365+ }
345366 }
346367 free(NewCommandLine);
347368 }
--- a/updater.h
+++ b/updater.h
@@ -35,10 +35,10 @@
3535
3636 BOOL CheckForUpdates(BOOL bDownload, LPCTSTR DownloadDir, DWORD* pVersion, LPTSTR pVersionString);
3737 BOOL PrepareUpdates(void* pList, DWORD ListLength, LPCTSTR DownloadDir);
38-BOOL ApplyUpdates(LPCTSTR DestinationDir);
38+BOOL ApplyUpdates(LPCTSTR DestinationDir, LPCTSTR BackupDirName);
3939 BOOL CleanupUpdates(LPCTSTR DownloadDir);
40-BOOL StartUpdateProcess(LPCTSTR CommandLine, LPCTSTR Keyword);
41-BOOL StartUpdateProcessAsAdministrator(LPCTSTR CommandLine, LPCTSTR Keyword);
40+BOOL StartUpdateProcess(LPCTSTR DownloadDir, LPCTSTR CommandLine);
41+BOOL RestartUpdateProcessAsAdministrator(LPCTSTR CommandLine, LPCTSTR Keyword);
4242
4343 #endif
4444