1 /*=============================================================================
\r
3 *
\83^
\83X
\83N
\83E
\83C
\83\93\83h
\83E
\r
5 ===============================================================================
\r
6 / Copyright (C) 1997-2007 Sota. All rights reserved.
\r
8 / Redistribution and use in source and binary forms, with or without
\r
9 / modification, are permitted provided that the following conditions
\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
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
31 #include <windows.h>
\r
35 #include <mbstring.h>
\r
37 #include <windowsx.h>
\r
38 #include <commctrl.h>
\r
40 #include <winsock.h>
\r
43 #include "resource.h"
\r
45 #define TASK_BUFSIZE (16*1024)
\r
50 /*=====
\8aO
\95\94\8eQ
\8fÆ =====*/
\r
52 extern int ClientWidth;
\r
53 extern int SepaWidth;
\r
54 extern int ListHeight;
\r
57 extern int TaskHeight;
\r
58 extern HFONT ListFont;
\r
59 extern int DebugConsole;
\r
61 /*=====
\83\8d\81[
\83J
\83\8b\82È
\83\8f\81[
\83N =====*/
\r
63 static HWND hWndTask = NULL;
\r
64 static HANDLE DispLogSemaphore;
\r
65 static HANDLE DispLogSemaphore2;
\r
69 /*-----
\83^
\83X
\83N
\83E
\83C
\83\93\83h
\83E
\82ð
\8dì
\90¬
\82·
\82é --------------------------------------------
\r
72 * HWND hWnd :
\90e
\83E
\83C
\83\93\83h
\83E
\82Ì
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
73 * HINSTANCE hInst :
\83C
\83\93\83X
\83^
\83\93\83X
\83n
\83\93\83h
\83\8b\r
76 * int
\83X
\83e
\81[
\83^
\83X
\r
78 *----------------------------------------------------------------------------*/
\r
80 int MakeTaskWindow(HWND hWnd, HINSTANCE hInst)
\r
85 hWndTask = CreateWindowEx(/*WS_EX_STATICEDGE*/WS_EX_CLIENTEDGE,
\r
87 WS_CHILD | WS_BORDER | ES_AUTOVSCROLL | WS_VSCROLL | ES_MULTILINE | ES_READONLY | WS_CLIPSIBLINGS,
\r
88 0, TOOLWIN_HEIGHT*2+ListHeight+SepaWidth, ClientWidth, TaskHeight,
\r
89 hWnd, (HMENU)1500, hInst, NULL);
\r
91 if(hWndTask != NULL)
\r
93 SendMessage(hWndTask, EM_LIMITTEXT, TASK_BUFSIZE, 0);
\r
95 if(ListFont != NULL)
\r
96 SendMessage(hWndTask, WM_SETFONT, (WPARAM)ListFont, MAKELPARAM(TRUE, 0));
\r
98 ShowWindow(hWndTask, SW_SHOW);
\r
101 DispLogSemaphore = CreateSemaphore(NULL, 1, 1, NULL);
\r
102 DispLogSemaphore2 = CreateSemaphore(NULL, 1, 1, NULL);
\r
109 /*-----
\83^
\83X
\83N
\83E
\83C
\83\93\83h
\83E
\82ð
\8dí
\8f\9c ------------------------------------------------
\r
116 *----------------------------------------------------------------------------*/
\r
118 void DeleteTaskWindow(void)
\r
120 CloseHandle(DispLogSemaphore);
\r
121 CloseHandle(DispLogSemaphore2);
\r
122 if(hWndTask != NULL)
\r
123 DestroyWindow(hWndTask);
\r
128 /*-----
\83^
\83X
\83N
\83E
\83C
\83\93\83h
\83E
\82Ì
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\82ð
\95Ô
\82· ----------------------------
\r
134 * HWND
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
135 *----------------------------------------------------------------------------*/
\r
137 HWND GetTaskWnd(void)
\r
143 /*-----
\83^
\83X
\83N
\83\81\83b
\83Z
\81[
\83W
\82ð
\95\
\8e¦
\82·
\82é --------------------------------------------
\r
146 * char *szFormat :
\83t
\83H
\81[
\83}
\83b
\83g
\95¶
\8e\9a\97ñ
\r
147 * ... :
\83p
\83\89\83\81\81[
\83^
\r
151 *----------------------------------------------------------------------------*/
\r
153 void SetTaskMsg(char *szFormat, ...)
\r
160 //WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), "111\n", 4, &Tmp, NULL);
\r
161 while(WaitForSingleObject(DispLogSemaphore, 1) == WAIT_TIMEOUT)
\r
162 BackgrndMessageProc();
\r
163 //WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), "222\n", 4, &Tmp, NULL);
\r
165 if(hWndTask != NULL)
\r
167 if((szBuf = malloc(10*1024+3)) != NULL)
\r
169 va_start(vaArgs, szFormat);
\r
170 if(wvsprintf(szBuf, szFormat, vaArgs) != EOF)
\r
173 // WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), szBuf, strlen(szBuf), &Tmp, NULL);
\r
174 // WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), "\n", strlen("\n"), &Tmp, NULL);
\r
176 strcat(szBuf, "\r\n");
\r
177 Pos = SendMessage(GetTaskWnd(), WM_GETTEXTLENGTH, 0, 0);
\r
179 /*
\83e
\83L
\83X
\83g
\83T
\83C
\83Y
\82Ì
\83\8a\83~
\83b
\83g
\92l
\82ð
\83`
\83F
\83b
\83N */
\r
180 if((Pos + strlen(szBuf)) >= TASK_BUFSIZE)
\r
182 /*
\83\8a\83~
\83b
\83g
\82ð
\89z
\82¦
\82»
\82¤
\82È
\82ç
\81A
\90æ
\93ª
\95\94\95ª
\82ð
\90Ø
\82è
\8eÌ
\82Ä
\82é */
\r
183 Pos = SendMessage(GetTaskWnd(), EM_LINEFROMCHAR, TASK_BUFSIZE/10, 0) + 1;
\r
184 Pos = SendMessage(GetTaskWnd(), EM_LINEINDEX, Pos, 0);
\r
185 SendMessage(GetTaskWnd(), EM_SETSEL, 0, Pos);
\r
186 SendMessage(GetTaskWnd(), EM_REPLACESEL, FALSE, (LPARAM)"");
\r
188 Pos = SendMessage(GetTaskWnd(), WM_GETTEXTLENGTH, 0, 0);
\r
191 SendMessage(GetTaskWnd(), EM_SETSEL, Pos, Pos);
\r
192 SendMessage(GetTaskWnd(), EM_REPLACESEL, FALSE, (LPARAM)szBuf);
\r
199 //WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), "333\n", 4, &Tmp, NULL);
\r
200 ReleaseSemaphore(DispLogSemaphore, 1, NULL);
\r
201 //WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), "444\n", 4, &Tmp, NULL);
\r
207 /*-----
\83^
\83X
\83N
\83\81\83b
\83Z
\81[
\83W
\82ð
\83t
\83@
\83C
\83\8b\82É
\95Û
\91¶
\82·
\82é ----------------------------------
\r
210 * char *Fname :
\83t
\83@
\83C
\83\8b\96¼
\r
213 * int
\83X
\83e
\81[
\83^
\83X
\r
215 *----------------------------------------------------------------------------*/
\r
217 int SaveTaskMsg(char *Fname)
\r
226 Size = SendMessage(GetTaskWnd(), WM_GETTEXTLENGTH, 0, 0);
\r
227 if((Buf = malloc(Size)) != NULL)
\r
229 if((Strm = fopen(Fname, "wb")) != NULL)
\r
231 SendMessage(GetTaskWnd(), WM_GETTEXT, Size, (LPARAM)Buf);
\r
232 if(fwrite(Buf, strlen(Buf), 1, Strm) == 1)
\r
245 /*-----
\83^
\83X
\83N
\93à
\97e
\82ð
\83r
\83\85\81[
\83\8f\82Å
\95\
\8e¦ --------------------------------------------
\r
252 *----------------------------------------------------------------------------*/
\r
254 void DispTaskMsg(void)
\r
256 char Buf[FMAX_PATH+1];
\r
258 strcpy(Buf, AskTmpFilePath());
\r
260 strcat(Buf, "_ffftp.tsk");
\r
262 if(SaveTaskMsg(Buf) == SUCCESS)
\r
264 AddTempFileList(Buf);
\r
265 ExecViewer(Buf, 0);
\r
271 /*-----
\83f
\83o
\83b
\83O
\83R
\83\93\83\
\81[
\83\8b\82É
\83\81\83b
\83Z
\81[
\83W
\82ð
\95\
\8e¦
\82·
\82é ------------------------------
\r
274 * char *szFormat :
\83t
\83H
\81[
\83}
\83b
\83g
\95¶
\8e\9a\97ñ
\r
275 * ... :
\83p
\83\89\83\81\81[
\83^
\r
279 *----------------------------------------------------------------------------*/
\r
281 void DoPrintf(char *szFormat, ...)
\r
287 //WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), "11111\n", 6, &Tmp, NULL);
\r
288 while(WaitForSingleObject(DispLogSemaphore2, 1) == WAIT_TIMEOUT)
\r
289 BackgrndMessageProc();
\r
290 //WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), "22222\n", 6, &Tmp, NULL);
\r
292 if(DebugConsole == YES)
\r
294 if((szBuf = malloc(10*1024)) != NULL)
\r
296 va_start(vaArgs, szFormat);
\r
297 if(wvsprintf(szBuf, szFormat, vaArgs) != EOF)
\r
299 SetTaskMsg("## %s", szBuf);
\r
302 // WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), szBuf, strlen(szBuf), &Tmp, NULL);
\r
303 // WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), "\n", strlen("\n"), &Tmp, NULL);
\r
310 //WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), "33333\n", 6, &Tmp, NULL);
\r
311 ReleaseSemaphore(DispLogSemaphore2, 1, NULL);
\r
312 //WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), "44444\n", 6, &Tmp, NULL);
\r
318 /*-----
\83f
\83o
\83b
\83O
\83R
\83\93\83\
\81[
\83\8b\82É
\83\81\83b
\83Z
\81[
\83W
\82ð
\95\
\8e¦
\82·
\82é ------------------------------
\r
321 * char *szFormat :
\83t
\83H
\81[
\83}
\83b
\83g
\95¶
\8e\9a\97ñ
\r
322 * ... :
\83p
\83\89\83\81\81[
\83^
\r
326 *----------------------------------------------------------------------------*/
\r
328 void DoPrintf2(char *szFormat, ...)
\r
334 //WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), "11111111\n", 9, &Tmp, NULL);
\r
335 while(WaitForSingleObject(DispLogSemaphore2, 1) == WAIT_TIMEOUT)
\r
336 BackgrndMessageProc();
\r
337 //WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), "22222222\n", 9, &Tmp, NULL);
\r
339 if((szBuf = malloc(10*1024)) != NULL)
\r
341 va_start(vaArgs, szFormat);
\r
342 if(wvsprintf(szBuf, szFormat, vaArgs) != EOF)
\r
344 WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), szBuf, strlen(szBuf), &Tmp, NULL);
\r
345 WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), "\n", strlen("\n"), &Tmp, NULL);
\r
351 //WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), "33333333\n", 9, &Tmp, NULL);
\r
352 ReleaseSemaphore(DispLogSemaphore2, 1, NULL);
\r
353 //WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), "44444444\n", 9, &Tmp, NULL);
\r