OSDN Git Service

Modify documents.
[ffftp/ffftp.git] / main.c
diff --git a/main.c b/main.c
index a83a46a..9706d52 100644 (file)
--- a/main.c
+++ b/main.c
@@ -35,6 +35,8 @@
 #include <stdlib.h>\r
 #include <string.h>\r
 #include <mbstring.h>\r
+// 自動切断対策\r
+#include <time.h>\r
 #include <malloc.h>\r
 #include <windowsx.h>\r
 #include <commctrl.h>\r
@@ -140,7 +142,9 @@ static char SSLRootCAFilePath[FMAX_PATH+1];
 static DWORD MainThreadId;\r
 // ポータブル版判定\r
 static char PortableFilePath[FMAX_PATH+1];\r
-int PortableVersion;\r
+static int PortableVersion;\r
+// ローカル側自動更新\r
+HANDLE ChangeNotification = INVALID_HANDLE_VALUE;\r
 \r
 \r
 /*===== グローバルなワーク =====*/\r
@@ -162,8 +166,8 @@ int WinWidth = 790;
 int WinHeight = 513;\r
 int LocalWidth = 389;\r
 int TaskHeight = 100;\r
-int LocalTabWidth[4] = { 160, 110, 60, 37 };\r
-int RemoteTabWidth[6] = { 160, 110, 60, 37, 60, 60 };\r
+int LocalTabWidth[4] = { 150, 120, 60, 37 };\r
+int RemoteTabWidth[6] = { 150, 120, 60, 37, 60, 60 };\r
 char UserMailAdrs[USER_MAIL_LEN+1] = { "who@example.com" };\r
 char ViewerName[VIEWERS][FMAX_PATH+1] = { { "notepad" }, { "" }, { "" } };\r
 HFONT ListFont = NULL;\r
@@ -178,7 +182,7 @@ int DebugConsole = NO;
 int SaveWinPos = NO;\r
 // アスキーモード判別の改良\r
 //char AsciiExt[ASCII_EXT_LEN+1] = { "*.txt\0*.html\0*.htm\0*.cgi\0*.pl\0" };\r
-char AsciiExt[ASCII_EXT_LEN+1] = { "*.txt\0*.html\0*.htm\0*.cgi\0*.pl\0*.js\0*.vbs\0*.css\0*.rss\0*.rdf\0*.xml\0*.xhtml\0*.xht\0*.shtml\0*.shtm\0*.sh\0*.py\0*.rb\0" };\r
+char AsciiExt[ASCII_EXT_LEN+1] = { "*.txt\0*.html\0*.htm\0*.cgi\0*.pl\0*.js\0*.vbs\0*.css\0*.rss\0*.rdf\0*.xml\0*.xhtml\0*.xht\0*.shtml\0*.shtm\0*.sh\0*.py\0*.rb\0*.properties\0*.sql\0*.asp\0*.aspx\0*.php\0*.htaccess\0" };\r
 int RecvMode = TRANS_DLG;\r
 int SendMode = TRANS_DLG;\r
 int MoveMode = MOVE_DLG;\r
@@ -205,10 +209,12 @@ int FwallPort = PORT_NOR;
 int FwallType = 1;\r
 int FwallDefault = NO;\r
 int FwallSecurity = SECURITY_AUTO;\r
-int FwallResolv = NO;\r
+int FwallResolve = NO;\r
 int FwallLower = NO;\r
 int FwallDelimiter = '@';\r
-int PasvDefault = NO;\r
+// ルータ対策\r
+//int PasvDefault = NO;\r
+int PasvDefault = YES;\r
 char MirrorNoTrn[MIRROR_LEN+1] = { "*.bak\0" };\r
 char MirrorNoDel[MIRROR_LEN+1] = { "" };\r
 int MirrorFnameCnv = NO;\r
@@ -240,8 +246,25 @@ BYTE CertificateCacheHash[MAX_CERT_CACHE_HASH][20];
 BYTE SSLRootCAFileHash[20];\r
 // ファイルアイコン表示対応\r
 int DispFileIcon = NO;\r
+// タイムスタンプのバグ修正\r
+int DispTimeSeconds = NO;\r
+// ファイルの属性を数字で表示\r
+int DispPermissionsNumber = NO;\r
 // ディレクトリ自動作成\r
 int MakeAllDir = YES;\r
+// UTF-8対応\r
+int LocalKanjiCode = KANJI_SJIS;\r
+// 自動切断対策\r
+int NoopEnable = NO;\r
+// UPnP対応\r
+int UPnPEnabled = YES;\r
+time_t LastDataConnectionTime = 0;\r
+// 全設定暗号化対応\r
+int EncryptAllSettings = NO;\r
+// ローカル側自動更新\r
+int AutoRefreshFileList = YES;\r
+// 古い処理内容を消去\r
+int RemoveOldLog = NO;\r
 \r
 \r
 \r
@@ -345,6 +368,13 @@ int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLi
 \r
        InitCommonControls();\r
 \r
+       // UPnP対応\r
+       CoInitialize(NULL);\r
+       LoadUPnP();\r
+\r
+       // UTF-8対応\r
+       LoadUnicodeNormalizationDll();\r
+\r
        // FTPS対応\r
 #ifdef USE_OPENSSL\r
        LoadOpenSSL();\r
@@ -390,6 +420,9 @@ int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLi
 #endif\r
        // SFTP対応\r
        FreePuTTY();\r
+       // UPnP対応\r
+       FreeUPnP();\r
+       CoUninitialize();\r
        OleUninitialize();\r
        return(Ret);\r
 }\r
@@ -563,9 +596,8 @@ static int InitApp(LPSTR lpszCmdLine, int cmdShow)
                                DispTransferType();\r
                                SetHostKanaCnvImm(YES);\r
                                SetHostKanjiCodeImm(KANJI_NOCNV);\r
-                               // 本当はローカルのデフォルトをUTF-8にしたいが旧バージョンとの互換性のためShift_JISに設定\r
-//                             SetLocalKanjiCodeImm(KANJI_UTF8N);\r
-                               SetLocalKanjiCodeImm(KANJI_SJIS);\r
+                               // UTF-8対応\r
+                               SetLocalKanjiCodeImm(LocalKanjiCode);\r
                                DispListType();\r
                                DispDotFileMode();\r
                                DispSyncMoveMode();\r
@@ -581,7 +613,7 @@ static int InitApp(LPSTR lpszCmdLine, int cmdShow)
                                        DispWindowTitle();\r
                                        // SourceForge.JPによるフォーク\r
 //                                     SetTaskMsg("FFFTP Ver." VER_STR " Copyright(C) 1997-2010 Sota & cooperators.");\r
-                                       SetTaskMsg("FFFTP Ver." VER_STR " Copyright(C) 1997-2010 Sota & cooperators.\r\nCopyright (C) 2011-2012 FFFTP Project (Hiromichi Matsushima, Suguru Kawamoto, IWAMOTO Kouichi, vitamin0x, unarist, Asami, fortran90, tomo1192, Yuji Tanaka, Moriguchi Hirokazu).");\r
+                                       SetTaskMsg("FFFTP Ver." VER_STR " Copyright(C) 1997-2010 Sota & cooperators.\r\nCopyright (C) 2011-2014 FFFTP Project (Hiromichi Matsushima, Suguru Kawamoto, IWAMOTO Kouichi, vitamin0x, unarist, Asami, fortran90, tomo1192, Yuji Tanaka, Moriguchi Hirokazu, Fu-sen).");\r
 \r
                                        if(ForceIni)\r
                                                SetTaskMsg("%s%s", MSGJPN283, IniPath);\r
@@ -904,10 +936,46 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
 \r
        switch (message)\r
        {\r
+               // ローカル側自動更新\r
+               case WM_CREATE :\r
+                       SetTimer(hWnd, 1, 1000, NULL);\r
+                       break;\r
+\r
+               // ローカル側自動更新\r
                // 自動切断対策\r
                case WM_TIMER :\r
-                       if(wParam == 1)\r
-                               NoopProc();\r
+                       switch(wParam)\r
+                       {\r
+                       case 1:\r
+                               if(WaitForSingleObject(ChangeNotification, 0) == WAIT_OBJECT_0)\r
+                               {\r
+                                       if(AskUserOpeDisabled() == NO)\r
+                                       {\r
+                                               FindNextChangeNotification(ChangeNotification);\r
+                                               if(AutoRefreshFileList == YES)\r
+                                               {\r
+                                                       FILELIST* Base;\r
+                                                       char Name[FMAX_PATH+1];\r
+                                                       int Pos;\r
+                                                       Base = NULL;\r
+                                                       MakeSelectedFileList(WIN_LOCAL, NO, NO, &Base, &CancelFlg);\r
+                                                       GetHotSelected(WIN_LOCAL, Name);\r
+                                                       Pos = SendMessage(GetLocalHwnd(), LVM_GETTOPINDEX, 0, 0);\r
+                                                       GetLocalDirForWnd();\r
+                                                       SelectFileInList(GetLocalHwnd(), SELECT_LIST, Base);\r
+                                                       SetHotSelected(WIN_LOCAL, Name);\r
+                                                       SendMessage(GetLocalHwnd(), LVM_ENSUREVISIBLE, (WPARAM)(SendMessage(GetLocalHwnd(), LVM_GETITEMCOUNT, 0, 0) - 1), (LPARAM)TRUE);\r
+                                                       SendMessage(GetLocalHwnd(), LVM_ENSUREVISIBLE, (WPARAM)Pos, (LPARAM)TRUE);\r
+                                               }\r
+                                       }\r
+                               }\r
+                               if(NoopEnable == YES && AskNoopInterval() > 0 && time(NULL) - LastDataConnectionTime >= AskNoopInterval())\r
+                               {\r
+                                       NoopProc(NO);\r
+                                       LastDataConnectionTime = time(NULL);\r
+                               }\r
+                               break;\r
+                       }\r
                        break;\r
 \r
                case WM_COMMAND :\r
@@ -919,20 +987,18 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
                        {\r
                                case MENU_CONNECT :\r
                                        // 自動切断対策\r
-                                       KillTimer(hWnd, 1);\r
+                                       NoopEnable = NO;\r
                                        ConnectProc(DLG_TYPE_CON, -1);\r
                                        // 自動切断対策\r
-                                       if(AskNoopInterval() > 0)\r
-                                               SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL);\r
+                                       NoopEnable = YES;\r
                                        break;\r
 \r
                                case MENU_CONNECT_NUM :\r
                                        // 自動切断対策\r
-                                       KillTimer(hWnd, 1);\r
+                                       NoopEnable = NO;\r
                                        ConnectProc(DLG_TYPE_CON, (int)lParam);\r
                                        // 自動切断対策\r
-                                       if(AskNoopInterval() > 0)\r
-                                               SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL);\r
+                                       NoopEnable = YES;\r
                                        if(AskConnecting() == YES)\r
                                        {\r
                                                if(HIWORD(wParam) & OPT_MIRROR)\r
@@ -954,20 +1020,18 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
 \r
                                case MENU_SET_CONNECT :\r
                                        // 自動切断対策\r
-                                       KillTimer(hWnd, 1);\r
+                                       NoopEnable = NO;\r
                                        ConnectProc(DLG_TYPE_SET, -1);\r
                                        // 自動切断対策\r
-                                       if(AskNoopInterval() > 0)\r
-                                               SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL);\r
+                                       NoopEnable = YES;\r
                                        break;\r
 \r
                                case MENU_QUICK :\r
                                        // 自動切断対策\r
-                                       KillTimer(hWnd, 1);\r
+                                       NoopEnable = NO;\r
                                        QuickConnectProc();\r
                                        // 自動切断対策\r
-                                       if(AskNoopInterval() > 0)\r
-                                               SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL);\r
+                                       NoopEnable = YES;\r
                                        break;\r
 \r
                                case MENU_DISCONNECT :\r
@@ -1002,11 +1066,10 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
                                case MENU_HIST_19 :\r
                                case MENU_HIST_20 :\r
                                        // 自動切断対策\r
-                                       KillTimer(hWnd, 1);\r
+                                       NoopEnable = NO;\r
                                        HistoryConnectProc(LOWORD(wParam));\r
                                        // 自動切断対策\r
-                                       if(AskNoopInterval() > 0)\r
-                                               SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL);\r
+                                       NoopEnable = YES;\r
                                        break;\r
 \r
                                case MENU_UPDIR :\r
@@ -1077,6 +1140,9 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
                                        break;\r
 \r
                                case MENU_REMOTE_UPDIR :\r
+                                       // デッドロック対策\r
+                                       if(AskUserOpeDisabled() == YES)\r
+                                               break;\r
                                        SuppressRefresh = 1;\r
                                        SetCurrentDirAsDirHist();\r
                                        ChangeDir(WIN_REMOTE, "..");\r
@@ -1084,6 +1150,9 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
                                        break;\r
 \r
                                case MENU_LOCAL_UPDIR :\r
+                                       // デッドロック対策\r
+                                       if(AskUserOpeDisabled() == YES)\r
+                                               break;\r
                                        SetCurrentDirAsDirHist();\r
                                        ChangeDir(WIN_LOCAL, "..");\r
                                        break;\r
@@ -1286,6 +1355,9 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
                                        break;\r
 \r
                                case MENU_REFRESH :\r
+                                       // デッドロック対策\r
+                                       if(AskUserOpeDisabled() == YES)\r
+                                               break;\r
                                        // 同時接続対応\r
                                        CancelFlg = NO;\r
                                        SuppressRefresh = 1;\r
@@ -1308,10 +1380,16 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
                                        break;\r
 \r
                                case REFRESH_LOCAL :\r
+                                       // デッドロック対策\r
+                                       if(AskUserOpeDisabled() == YES)\r
+                                               break;\r
                                        GetLocalDirForWnd();\r
                                        break;\r
 \r
                                case REFRESH_REMOTE :\r
+                                       // デッドロック対策\r
+                                       if(AskUserOpeDisabled() == YES)\r
+                                               break;\r
                                        // 同時接続対応\r
                                        CancelFlg = NO;\r
                                        SuppressRefresh = 1;\r
@@ -1364,11 +1442,15 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
                                        break;\r
 \r
                                case MENU_SELECT_ALL :\r
-                                       SelectFileInList(hWndCurFocus, SELECT_ALL);\r
+                                       // ローカル側自動更新\r
+//                                     SelectFileInList(hWndCurFocus, SELECT_ALL);\r
+                                       SelectFileInList(hWndCurFocus, SELECT_ALL, NULL);\r
                                        break;\r
 \r
                                case MENU_SELECT :\r
-                                       SelectFileInList(hWndCurFocus, SELECT_REGEXP);\r
+                                       // ローカル側自動更新\r
+//                                     SelectFileInList(hWndCurFocus, SELECT_REGEXP);\r
+                                       SelectFileInList(hWndCurFocus, SELECT_REGEXP, NULL);\r
                                        break;\r
 \r
                                case MENU_FIND :\r
@@ -1380,6 +1462,9 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
                                        break;\r
 \r
                                case MENU_DOTFILE :\r
+                                       // デッドロック対策\r
+                                       if(AskUserOpeDisabled() == YES)\r
+                                               break;\r
                                        // 同時接続対応\r
                                        CancelFlg = NO;\r
                                        DotFile ^= 1;\r
@@ -1477,6 +1562,11 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
                                        OtpCalcTool();\r
                                        break;\r
 \r
+                               // FTPS対応\r
+                               case MENU_FW_FTP_FILTER :\r
+                                       TurnStatefulFTPFilter();\r
+                                       break;\r
+\r
                                case MENU_URL_COPY :\r
                                        CopyURLtoClipBoard();\r
                                        break;\r
@@ -1751,6 +1841,10 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
                        break;\r
 \r
                case WM_DESTROY :\r
+                       // ローカル側自動更新\r
+                       KillTimer(hWnd, 1);\r
+                       if(ChangeNotification != INVALID_HANDLE_VALUE)\r
+                               FindCloseChangeNotification(ChangeNotification);\r
 //                     WSACleanup();\r
 //                     DestroyWindow(hWndFtp);\r
                        PostQuitMessage(0);\r
@@ -1825,6 +1919,18 @@ static void StartupProc(char *Cmd)
        if(CmdOption & OPT_SAVEON)\r
                SuppressSave = NO;\r
 \r
+       // UTF-8対応\r
+       if(CmdOption & OPT_SJIS)\r
+               Kanji = KANJI_SJIS;\r
+       if(CmdOption & OPT_UTF8N)\r
+               Kanji = KANJI_UTF8N;\r
+       if(CmdOption & OPT_UTF8BOM)\r
+               Kanji = KANJI_UTF8BOM;\r
+       if(CmdOption & OPT_SJIS_NAME)\r
+               FnameKanji = KANJI_SJIS;\r
+       if(CmdOption & OPT_UTF8N_NAME)\r
+               FnameKanji = KANJI_UTF8N;\r
+\r
        if(Sts == 0)\r
        {\r
                if(ConnectOnStart == YES)\r
@@ -1896,9 +2002,14 @@ static int AnalyzeComLine(char *Str, int *AutoConnect, int *CmdOption, char *unc
                                *CmdOption |= OPT_MIRROR;\r
                        else if((strcmp(&Tmp[1], "d") == 0) || (strcmp(&Tmp[1], "-mirrordown") == 0))\r
                                *CmdOption |= OPT_MIRRORDOWN;\r
-                       else if((strcmp(&Tmp[1], "e") == 0) || (strcmp(&Tmp[1], "-euc") == 0))\r
+                       // 廃止予定\r
+//                     else if((strcmp(&Tmp[1], "e") == 0) || (strcmp(&Tmp[1], "-euc") == 0))\r
+//                             *CmdOption |= OPT_EUC;\r
+//                     else if((strcmp(&Tmp[1], "j") == 0) || (strcmp(&Tmp[1], "-jis") == 0))\r
+//                             *CmdOption |= OPT_JIS;\r
+                       else if((strcmp(&Tmp[1], "eu") == 0) || (strcmp(&Tmp[1], "e") == 0) || (strcmp(&Tmp[1], "-euc") == 0))\r
                                *CmdOption |= OPT_EUC;\r
-                       else if((strcmp(&Tmp[1], "j") == 0) || (strcmp(&Tmp[1], "-jis") == 0))\r
+                       else if((strcmp(&Tmp[1], "ji") == 0) || (strcmp(&Tmp[1], "j") == 0) || (strcmp(&Tmp[1], "-jis") == 0))\r
                                *CmdOption |= OPT_JIS;\r
                        else if((strcmp(&Tmp[1], "a") == 0) || (strcmp(&Tmp[1], "-ascii") == 0))\r
                                *CmdOption |= OPT_ASCII;\r
@@ -1912,9 +2023,14 @@ static int AnalyzeComLine(char *Str, int *AutoConnect, int *CmdOption, char *unc
                                *CmdOption |= OPT_QUIT;\r
                        else if((strcmp(&Tmp[1], "k") == 0) || (strcmp(&Tmp[1], "-kana") == 0))\r
                                *CmdOption |= OPT_KANA;\r
-                       else if((strcmp(&Tmp[1], "u") == 0) || (strcmp(&Tmp[1], "-eucname") == 0))\r
+                       // 廃止予定\r
+//                     else if((strcmp(&Tmp[1], "u") == 0) || (strcmp(&Tmp[1], "-eucname") == 0))\r
+//                             *CmdOption |= OPT_EUC_NAME;\r
+//                     else if((strcmp(&Tmp[1], "i") == 0) || (strcmp(&Tmp[1], "-jisname") == 0))\r
+//                             *CmdOption |= OPT_JIS_NAME;\r
+                       else if((strcmp(&Tmp[1], "eun") == 0) || (strcmp(&Tmp[1], "u") == 0) || (strcmp(&Tmp[1], "-eucname") == 0))\r
                                *CmdOption |= OPT_EUC_NAME;\r
-                       else if((strcmp(&Tmp[1], "i") == 0) || (strcmp(&Tmp[1], "-jisname") == 0))\r
+                       else if((strcmp(&Tmp[1], "jin") == 0) || (strcmp(&Tmp[1], "i") == 0) || (strcmp(&Tmp[1], "-jisname") == 0))\r
                                *CmdOption |= OPT_JIS_NAME;\r
                        else if((strcmp(&Tmp[1], "n") == 0) || (strcmp(&Tmp[1], "-ini") == 0))\r
                        {\r
@@ -1984,6 +2100,17 @@ static int AnalyzeComLine(char *Str, int *AutoConnect, int *CmdOption, char *unc
                        {\r
                        }\r
 #endif\r
+                       // UTF-8対応\r
+                       else if((strcmp(&Tmp[1], "sj") == 0) || (strcmp(&Tmp[1], "-sjis") == 0))\r
+                               *CmdOption |= OPT_SJIS;\r
+                       else if((strcmp(&Tmp[1], "u8") == 0) || (strcmp(&Tmp[1], "-utf8") == 0))\r
+                               *CmdOption |= OPT_UTF8N;\r
+                       else if((strcmp(&Tmp[1], "8b") == 0) || (strcmp(&Tmp[1], "-utf8bom") == 0))\r
+                               *CmdOption |= OPT_UTF8BOM;\r
+                       else if((strcmp(&Tmp[1], "sjn") == 0) || (strcmp(&Tmp[1], "-sjisname") == 0))\r
+                               *CmdOption |= OPT_SJIS_NAME;\r
+                       else if((strcmp(&Tmp[1], "u8n") == 0) || (strcmp(&Tmp[1], "-utf8name") == 0))\r
+                               *CmdOption |= OPT_UTF8N_NAME;\r
                        else\r
                        {\r
                                SetTaskMsg(MSGJPN180, Tmp);\r
@@ -3166,7 +3293,7 @@ BOOL LoadSSLRootCAFile()
                                for(i = 0; i < 5; i++)\r
                                        Hash[i] = _byteswap_ulong(Hash[i]);\r
                                // 同梱する"ssl.pem"に合わせてSHA1ハッシュ値を変更すること\r
-                               if(memcmp(&Hash, &SSLRootCAFileHash, 20) == 0 || memcmp(&Hash, "\x63\xAC\x6C\x43\xCE\xD6\x5B\xCF\x33\xB9\x45\x70\xC3\x9B\x8C\x91\x19\x0D\xEF\xE6", 20) == 0\r
+                               if(memcmp(&Hash, &SSLRootCAFileHash, 20) == 0 || memcmp(&Hash, "\xD8\x8A\x7B\x2F\xBF\x23\x57\x16\xDA\x02\x14\x2B\xD4\x2E\x09\x80\xA0\x4C\x72\x62", 20) == 0\r
                                        || DialogBox(GetFtpInst(), MAKEINTRESOURCE(updatesslroot_dlg), GetMainHwnd(), ExeEscDialogProc) == YES)\r
                                {\r
                                        memcpy(&SSLRootCAFileHash, &Hash, 20);\r
@@ -3189,12 +3316,6 @@ BOOL IsMainThread()
        return TRUE;\r
 }\r
 \r
-// ファイルアイコン表示対応\r
-int AskDispFileIcon(void)\r
-{\r
-       return(DispFileIcon);\r
-}\r
-\r
 // ポータブル版判定\r
 void CheckPortableVersion()\r
 {\r
@@ -3213,3 +3334,32 @@ int AskPortableVersion(void)
        return(PortableVersion);\r
 }\r
 \r
+// 全設定暗号化対応\r
+int Restart()\r
+{\r
+       int Sts;\r
+       char* CommandLine;\r
+       STARTUPINFO si;\r
+       PROCESS_INFORMATION pi;\r
+       Sts = FFFTP_FAIL;\r
+       if(CommandLine = (char*)malloc(sizeof(char) * (strlen(GetCommandLine())  + 1)))\r
+       {\r
+               strcpy(CommandLine, GetCommandLine());\r
+               GetStartupInfo(&si);\r
+               if(CreateProcess(NULL, CommandLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))\r
+               {\r
+                       CloseHandle(pi.hThread);\r
+                       CloseHandle(pi.hProcess);\r
+                       Sts = FFFTP_SUCCESS;\r
+               }\r
+               free(CommandLine);\r
+       }\r
+       return Sts;\r
+}\r
+\r
+void RestartAndTerminate()\r
+{\r
+       Restart();\r
+       exit(1);\r
+}\r
+\r