OSDN Git Service

Add PuTTY 0.61 to contrib directory.
[ffftp/ffftp.git] / local.c
1 /*=============================================================================\r
2 *\r
3 *                                               ローカル側のファイルアクセス\r
4 *\r
5 ===============================================================================\r
6 / Copyright (C) 1997-2007 Sota. All rights reserved.\r
7 /\r
8 / Redistribution and use in source and binary forms, with or without \r
9 / modification, are permitted provided that the following conditions \r
10 / are met:\r
11 /\r
12 /  1. Redistributions of source code must retain the above copyright \r
13 /     notice, this list of conditions and the following disclaimer.\r
14 /  2. Redistributions in binary form must reproduce the above copyright \r
15 /     notice, this list of conditions and the following disclaimer in the \r
16 /     documentation and/or other materials provided with the distribution.\r
17 /\r
18 / THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR \r
19 / IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES \r
20 / OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \r
21 / IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, \r
22 / INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, \r
23 / BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF \r
24 / USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON \r
25 / ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
26 / (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF \r
27 / THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
28 /============================================================================*/\r
29 \r
30 #define STRICT\r
31 #include <windows.h>\r
32 #include <stdio.h>\r
33 #include <stdlib.h>\r
34 #include <direct.h>\r
35 #include <string.h>\r
36 #include <windowsx.h>\r
37 \r
38 #include "common.h"\r
39 #include "resource.h"\r
40 \r
41 \r
42 \r
43 /*----- ローカル側のディレクトリ変更 -------------------------------------------\r
44 *\r
45 *       Parameter\r
46 *               char *Path : パス名\r
47 *\r
48 *       Return Value\r
49 *               int ステータス\r
50 *                       FFFTP_SUCCESS/FFFTP_FAIL\r
51 *----------------------------------------------------------------------------*/\r
52 \r
53 int DoLocalCWD(char *Path)\r
54 {\r
55         int Sts;\r
56 \r
57         Sts = FFFTP_SUCCESS;\r
58         SetTaskMsg(">>CD %s", Path);\r
59         if(SetCurrentDirectory(Path) != TRUE)\r
60         {\r
61                 SetTaskMsg(MSGJPN145);\r
62                 Sts = FFFTP_FAIL;\r
63         }\r
64         return(Sts);\r
65 }\r
66 \r
67 \r
68 /*----- ローカル側のディレクトリ作成 -------------------------------------------\r
69 *\r
70 *       Parameter\r
71 *               char *Path : パス名\r
72 *\r
73 *       Return Value\r
74 *               なし\r
75 *----------------------------------------------------------------------------*/\r
76 \r
77 void DoLocalMKD(char *Path)\r
78 {\r
79         SetTaskMsg(">>MKDIR %s", Path);\r
80         if(_mkdir(Path) != 0)\r
81                 SetTaskMsg(MSGJPN146);\r
82         return;\r
83 }\r
84 \r
85 \r
86 /*----- ローカル側のカレントディレクトリ取得 -----------------------------------\r
87 *\r
88 *       Parameter\r
89 *               char *Buf : パス名を返すバッファ\r
90 *\r
91 *       Return Value\r
92 *               なし\r
93 *----------------------------------------------------------------------------*/\r
94 \r
95 void DoLocalPWD(char *Buf)\r
96 {\r
97         if(GetCurrentDirectory(FMAX_PATH, Buf) == 0)\r
98                 strcpy(Buf, "");\r
99         return;\r
100 }\r
101 \r
102 \r
103 /*----- ローカル側のディレクトリ削除 ------------------------------------------\r
104 *\r
105 *       Parameter\r
106 *               char *Path : パス名\r
107 *\r
108 *       Return Value\r
109 *               なし\r
110 *----------------------------------------------------------------------------*/\r
111 \r
112 void DoLocalRMD(char *Path)\r
113 {\r
114 #if 0\r
115         SetTaskMsg(">>RMDIR %s", Path);\r
116         if(rmdir(Path) != 0)\r
117                 SetTaskMsg(MSGJPN147);\r
118 #else\r
119         SetTaskMsg(">>RMDIR %s", Path);\r
120 \r
121         if(MoveFileToTrashCan(Path) != 0)\r
122                 SetTaskMsg(MSGJPN148);\r
123 #endif\r
124         return;\r
125 }\r
126 \r
127 \r
128 /*----- ローカル側のファイル削除 -----------------------------------------------\r
129 *\r
130 *       Parameter\r
131 *               char *Path : パス名\r
132 *\r
133 *       Return Value\r
134 *               なし\r
135 *----------------------------------------------------------------------------*/\r
136 \r
137 void DoLocalDELE(char *Path)\r
138 {\r
139 #if 0\r
140         SetTaskMsg(">>DEL %s", Path);\r
141         if(DeleteFile(Path) != TRUE)\r
142                 SetTaskMsg(MSGJPN149);\r
143 #else\r
144         SetTaskMsg(">>DEL %s", Path);\r
145 \r
146         if(MoveFileToTrashCan(Path) != 0)\r
147                 SetTaskMsg(MSGJPN150);\r
148 #endif\r
149         return;\r
150 }\r
151 \r
152 \r
153 /*----- ローカル側のファイル名変更 ---------------------------------------------\r
154 *\r
155 *       Parameter\r
156 *               char *Src : 元ファイル名\r
157 *               char *Dst : 変更後のファイル名\r
158 *\r
159 *       Return Value\r
160 *               なし\r
161 *----------------------------------------------------------------------------*/\r
162 \r
163 void DoLocalRENAME(char *Src, char *Dst)\r
164 {\r
165         SetTaskMsg(">>REN %s %s", Src, Dst);\r
166         if(MoveFile(Src, Dst) != TRUE)\r
167                 SetTaskMsg(MSGJPN151);\r
168         return;\r
169 }\r
170 \r
171 \r
172 /*----- ファイルのプロパティを表示する ----------------------------------------\r
173 *\r
174 *       Parameter\r
175 *               char *Fname : ファイル名\r
176 *\r
177 *       Return Value\r
178 *               なし\r
179 *----------------------------------------------------------------------------*/\r
180 \r
181 void DispFileProperty(char *Fname)\r
182 {\r
183         SHELLEXECUTEINFO sInfo;\r
184 \r
185         memset(&sInfo, NUL, sizeof(SHELLEXECUTEINFO));\r
186         sInfo.cbSize = sizeof(SHELLEXECUTEINFO);\r
187         sInfo.fMask = SEE_MASK_INVOKEIDLIST;\r
188         sInfo.hwnd = NULL;              //GetMainHwnd();\r
189         sInfo.lpVerb = "Properties";\r
190         sInfo.lpFile = Fname;\r
191         sInfo.lpParameters = NULL;\r
192         sInfo.lpDirectory = NULL;\r
193         sInfo.nShow = SW_NORMAL;\r
194         sInfo.lpIDList = NULL;\r
195         ShellExecuteEx(&sInfo);\r
196         return;\r
197 }\r
198 \r
199 \r
200 /*----- 属性をチェックする FindFirstFile --------------------------------------\r
201 *\r
202 *       Parameter\r
203 *               char *Fname : ファイル名\r
204 *               WIN32_FIND_DATA *FindData : 検索データ\r
205 *               int IgnHide : 隠しファイルを無視するかどうか(YES/NO)\r
206 *\r
207 *       Return Value\r
208 *               HANDLE ハンドル\r
209 *----------------------------------------------------------------------------*/\r
210 \r
211 HANDLE FindFirstFileAttr(char *Fname, WIN32_FIND_DATA *FindData, int IgnHide)\r
212 {\r
213         HANDLE hFind;\r
214 \r
215         if((hFind = FindFirstFile(Fname, FindData)) != INVALID_HANDLE_VALUE)\r
216         {\r
217                 if(IgnHide == YES)\r
218                 {\r
219                         while(FindData->dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)\r
220                         {\r
221                                 if(FindNextFile(hFind, FindData) == FALSE)\r
222                                 {\r
223                                         FindClose(hFind);\r
224                                         hFind = INVALID_HANDLE_VALUE;\r
225                                         break;\r
226                                 }\r
227                         }\r
228                 }\r
229         }\r
230         return(hFind);\r
231 }\r
232 \r
233 \r
234 /*----- 属性をチェックする FindNextFile ---------------------------------------\r
235 *\r
236 *       Parameter\r
237 *               HANDLE hFind : ハンドル\r
238 *               WIN32_FIND_DATA *FindData : 検索データ\r
239 *               int IgnHide : 隠しファイルを無視するかどうか(YES/NO)\r
240 *\r
241 *       Return Value\r
242 *               HANDLE ハンドル\r
243 *----------------------------------------------------------------------------*/\r
244 \r
245 BOOL FindNextFileAttr(HANDLE hFind, WIN32_FIND_DATA *FindData, int IgnHide)\r
246 {\r
247         BOOL Ret;\r
248 \r
249         while((Ret = FindNextFile(hFind, FindData)) == TRUE)\r
250         {\r
251                 if(IgnHide == NO)\r
252                         break;\r
253                 if((FindData->dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) == 0)\r
254                         break;\r
255         }\r
256         return(Ret);\r
257 }\r
258 \r
259 \r