source: anotherchoice/tags/jsp-1.4.4-full-UTF8/config/windows/debugout.c@ 26

Last change on this file since 26 was 26, checked in by ykominami, 10 years ago

initial

File size: 5.8 KB
Line 
1/*
2 * TOPPERS/JSP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Just Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 *
9 * 上記著作権者
10は,以下の (1)〜(4) の条件か,Free Software Foundation
11 * によってå…
12¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
13 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
14 * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
15å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
16 * 利用と呼ぶ)することを無償で許諾する.
17 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
18 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
19 * スコード中に含まれていること.
20 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
21 * 用できる形で再é…
22å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
23å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
24 * 者
25マニュアルなど)に,上記の著作権表示,この利用条件および下記
26 * の無保証規定を掲載すること.
27 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
28 * 用できない形で再é…
29å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
30 * と.
31 * (a) 再é…
32å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
33マニュアルなど)に,上記の著
34 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
35 * (b) 再é…
36å¸ƒã®å½¢æ…
37‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
38 * 報告すること.
39 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
40 * 害からも,上記著作権者
41およびTOPPERSプロジェクトをå…
42è²¬ã™ã‚‹ã“と.
43 *
44 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
45お
46 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
47 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
48 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
49 *
50 * @(#) $Id: debugout.c,v 1.10 2003/12/15 07:19:22 takayuki Exp $
51 */
52
53#include <debugout.h>
54#include <hal_msg.h>
55#include <resource.h>
56
57#ifdef DEBUG_ENABLE
58
59#define DBG_SIZE_STRINGBUFFER 512
60
61static HANDLE DebugConsole; //デバッグ文字列を表示するテキストボックス
62static HWND DialogHandle; //デバッグ出力ダイアログ
63
64extern void FatalAssertion(int exp, LPCSTR format, ... );
65
66/*
67 * デバッグ用ダイアログのメッセージハンドラ
68 */
69static LRESULT CALLBACK DebugOutDialogProc(HWND hDlg,UINT Msg,WPARAM wParam,LPARAM lParam)
70{
71 switch(Msg)
72 {
73 case WM_INITDIALOG:
74 DebugConsole = GetDlgItem(hDlg,IDC_DEBUGOUT); //出力å…
75ˆãƒ†ã‚­ã‚¹ãƒˆãƒœãƒƒã‚¯ã‚¹
76 ShowWindow(hDlg,SW_SHOW);
77
78 case WM_SIZE:
79 {
80 RECT client;
81 GetClientRect(hDlg,&client);
82 MoveWindow(DebugConsole,0,0,client.right,client.bottom,TRUE);
83 break;
84 }
85
86 case WM_CLOSE:
87 /* Never let this dialog close by pressing of the close button. */
88 break;
89
90 case WM_DESTROY:
91 DialogHandle = 0;
92 break;
93
94 case WM_QUIT:
95 DestroyWindow(hDlg);
96 break;
97
98 default:
99 return FALSE;
100 }
101 return TRUE;
102}
103
104 /* 下の2関数が情
105報をやり取りするための構造体 */
106struct tagInitializeDebugServicesParam {
107 HINSTANCE hInstance;
108 HWND hDlg;
109};
110
111 /* デバッグルーチンをとめる */
112void FinalizeDebugServices(void)
113{
114 if(DialogHandle != 0l) {
115 DestroyWindow(DialogHandle);
116 }
117}
118
119 /* 管理スレッドが実行するウィンドウ作成ルーチン */
120static void _initializeDebugServices(void * _param)
121{
122 struct tagInitializeDebugServicesParam * param = (struct tagInitializeDebugServicesParam *)_param;
123 DialogHandle = CreateDialog(param->hInstance, MAKEINTRESOURCE(DEBUGOUTDIALOG), param->hDlg, DebugOutDialogProc);
124 FatalAssertion(DialogHandle != NULL, "DebugService could not create its own dialog.");
125}
126
127 /* デバッグルーチンの初期化 (管理スレッドにダイアログを作ってもらう) */
128void InitializeDebugServices(HINSTANCE hinst,HWND dlg)
129{
130 struct tagInitializeDebugServicesParam param;
131 param.hInstance = hinst;
132 param.hDlg = dlg;
133
134 HALExecuteProcedure(_initializeDebugServices, (void *)&param); //生成依頼
135 HALAddDestructionProcedure(FinalizeDebugServices, 0); //破棄ルーチンの登録
136}
137
138 /* デバッグ時用printf */
139int _debugOut(const char * format, ... )
140{
141 int result;
142 int i;
143 char buffer[DBG_SIZE_STRINGBUFFER*2];
144 char * scope;
145 const char * work;
146 va_list vl;
147
148 if(format == 0l)
149 return 0;
150
151 va_start(vl, format);
152
153 /* formatに含まれる '\n' を '\r\n' に置換する */
154 scope = buffer;
155 work = format;
156
157 while(*format != '\0')
158 {
159 if(*format == '\n')
160 {
161 i = format - work;
162 lstrcpyn(scope, work, i);
163
164 scope += i;
165 work = format;
166
167 *(scope++) = '\r';
168 }
169 format ++;
170 }
171
172 i = format - work + 1;
173 lstrcpyn(scope, work, i); //+1して'\x0'もコピー
174 scope += i;
175
176 if((result = wvsprintf(scope, buffer, vl)) > 0)
177 {
178 //出力しすぎたら少しカット
179 i = GetWindowTextLength(DebugConsole);
180 if(i > DEBUG_LIMITTERUPPERBOUND)
181 {
182 SendMessage(DebugConsole, EM_SETSEL, 0, i - DEBUG_LIMITTERUPPERBOUND);
183 SendMessage(DebugConsole, EM_REPLACESEL, (WPARAM)FALSE, (LPARAM)"");
184 }
185
186 SendMessage(DebugConsole,EM_SETSEL,i,i);
187 SendMessage(DebugConsole,EM_REPLACESEL,(WPARAM)FALSE,(LPARAM)scope);
188 }
189
190 return result;
191}
192
193#endif
194
195
Note: See TracBrowser for help on using the repository browser.