OSDN Git Service

Fix bugs of parsing LIST response from linux-ftpd.
[ffftp/ffftp.git] / statuswin.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 // IPv6対応\r
32 #include <winsock2.h>\r
33 #include <windows.h>\r
34 #include <stdio.h>\r
35 #include <stdlib.h>\r
36 #include <string.h>\r
37 #include <mbstring.h>\r
38 #include <malloc.h>\r
39 #include <windowsx.h>\r
40 #include <commctrl.h>\r
41 #include <stdarg.h>\r
42 // IPv6対応\r
43 //#include <winsock.h>\r
44 \r
45 #include "common.h"\r
46 #include "resource.h"\r
47 \r
48 \r
49 /*===== ローカルなワーク =====*/\r
50 \r
51 static HWND hWndSbar = NULL;\r
52 static int SbarColWidth[5] = { 70, 230, 410, 570, -1 };\r
53 \r
54 \r
55 \r
56 /*----- ステータスウインドウを作成する ----------------------------------------\r
57 *\r
58 *       Parameter\r
59 *               HWND hWnd : 親ウインドウのウインドウハンドル\r
60 *               HINSTANCE hInst : インスタンスハンドル\r
61 *\r
62 *       Return Value\r
63 *               int ステータス\r
64 *                       FFFTP_SUCCESS/FFFTP_FAIL\r
65 *----------------------------------------------------------------------------*/\r
66 \r
67 int MakeStatusBarWindow(HWND hWnd, HINSTANCE hInst)\r
68 {\r
69         int Sts;\r
70 \r
71         Sts = FFFTP_FAIL;\r
72         hWndSbar = CreateWindowEx(0,\r
73                         STATUSCLASSNAME, NULL,\r
74                         WS_CHILD | SBS_SIZEGRIP | WS_CLIPSIBLINGS | SBT_NOBORDERS,\r
75                         0, 0, 0, 0,\r
76                         hWnd, (HMENU)1500, hInst, NULL);\r
77 \r
78         if(hWndSbar != NULL)\r
79         {\r
80                 SendMessage(hWndSbar, SB_SETPARTS, sizeof(SbarColWidth)/sizeof(int), (LPARAM)SbarColWidth);\r
81                 ShowWindow(hWndSbar, SW_SHOW);\r
82                 Sts = FFFTP_SUCCESS;\r
83         }\r
84         return(Sts);\r
85 }\r
86 \r
87 \r
88 /*----- ステータスウインドウを削除 --------------------------------------------\r
89 *\r
90 *       Parameter\r
91 *               なし\r
92 *\r
93 *       Return Value\r
94 *               なし\r
95 *----------------------------------------------------------------------------*/\r
96 \r
97 void DeleteStatusBarWindow(void)\r
98 {\r
99         if(hWndSbar != NULL)\r
100                 DestroyWindow(hWndSbar);\r
101         return;\r
102 }\r
103 \r
104 \r
105 /*----- ステータスウインドウのウインドウハンドルを返す ------------------------\r
106 *\r
107 *       Parameter\r
108 *               なし\r
109 *\r
110 *       Return Value\r
111 *               HWND ウインドウハンドル\r
112 *----------------------------------------------------------------------------*/\r
113 \r
114 HWND GetSbarWnd(void)\r
115 {\r
116         return(hWndSbar);\r
117 }\r
118 \r
119 \r
120 /*----- カレントウインドウを表示 ----------------------------------------------\r
121 *\r
122 *       Parameter\r
123 *               int Win : ウインドウ番号 (WIN_xxx : -1=なし)\r
124 *\r
125 *       Return Value\r
126 *               なし\r
127 *----------------------------------------------------------------------------*/\r
128 \r
129 void DispCurrentWindow(int Win)\r
130 {\r
131         if(Win == WIN_LOCAL)\r
132                 SendMessage(GetSbarWnd(), SB_SETTEXT, 0 | 0, (LPARAM)MSGJPN245);\r
133         else if(Win == WIN_REMOTE)\r
134                 SendMessage(GetSbarWnd(), SB_SETTEXT, 0 | 0, (LPARAM)MSGJPN246);\r
135         else\r
136                 SendMessage(GetSbarWnd(), SB_SETTEXT, 0 | 0, (LPARAM)"");\r
137         return;\r
138 }\r
139 \r
140 \r
141 /*----- 選択されているファイル数とサイズを表示 --------------------------------\r
142 *\r
143 *       Parameter\r
144 *               なし\r
145 *\r
146 *       Return Value\r
147 *               なし\r
148 *----------------------------------------------------------------------------*/\r
149 \r
150 void DispSelectedSpace(void)\r
151 {\r
152         char Buf1[50];\r
153         char Buf2[50];\r
154         int Win;\r
155 \r
156         Win = WIN_LOCAL;\r
157         if(GetFocus() == GetRemoteHwnd())\r
158                 Win = WIN_REMOTE;\r
159 \r
160         MakeSizeString(GetSelectedTotalSize(Win), Buf1);\r
161         sprintf(Buf2, MSGJPN247, GetSelectedCount(Win), Buf1);\r
162         SendMessage(GetSbarWnd(), SB_SETTEXT, 1 | 0, (LPARAM)Buf2);\r
163         return;\r
164 }\r
165 \r
166 \r
167 /*----- ローカル側の空き容量を表示 --------------------------------------------\r
168 *\r
169 *       Parameter\r
170 *               char *Path : パス名\r
171 *\r
172 *       Return Value\r
173 *               なし\r
174 *----------------------------------------------------------------------------*/\r
175 \r
176 void DispLocalFreeSpace(char *Path)\r
177 {\r
178         char Buf[40];\r
179 \r
180         sprintf(Buf, MSGJPN248, AskLocalFreeSpace(Path));\r
181         SendMessage(GetSbarWnd(), SB_SETTEXT, 2 | 0, (LPARAM)Buf);\r
182         return;\r
183 }\r
184 \r
185 \r
186 /*----- 転送するファイルの数を表示 --------------------------------------------\r
187 *\r
188 *       Parameter\r
189 *               なし\r
190 *\r
191 *       Return Value\r
192 *               なし\r
193 *----------------------------------------------------------------------------*/\r
194 \r
195 void DispTransferFiles(void)\r
196 {\r
197         char Buf[50];\r
198 \r
199         sprintf(Buf, MSGJPN249, AskTransferFileNum());\r
200         SendMessage(GetSbarWnd(), SB_SETTEXT, 3 | 0, (LPARAM)Buf);\r
201         return;\r
202 }\r
203 \r
204 \r
205 /*----- 受信中のバイト数を表示 ------------------------------------------------\r
206 *\r
207 *       Parameter\r
208 *               LONGLONG Size : バイト数 (-1=表示を消す)\r
209 *\r
210 *       Return Value\r
211 *               なし\r
212 *----------------------------------------------------------------------------*/\r
213 \r
214 void DispDownloadSize(LONGLONG Size)\r
215 {\r
216         char Buf[50];\r
217         char Tmp[50];\r
218 \r
219         strcpy(Buf, "");\r
220         if(Size >= 0)\r
221         {\r
222                 MakeSizeString((double)Size, Tmp);\r
223                 sprintf(Buf, MSGJPN250, Tmp);\r
224         }\r
225         SendMessage(GetSbarWnd(), SB_SETTEXT, 4 | 0, (LPARAM)Buf);\r
226         return;\r
227 }\r
228 \r
229 \r