📄 debugout.c
字号:
/* * TOPPERS/JSP Kernel * Toyohashi Open Platform for Embedded Real-Time Systems/ * Just Standard Profile Kernel * * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory * Toyohashi Univ. of Technology, JAPAN * * 惧淡螟侯涪荚は·笆布の (1)×(4) の掘凤か·Free Software Foundation * によって给山されている GNU General Public License の Version 2 に淡 * 揭されている掘凤を塔たす眷圭に嘎り·塑ソフトウェア∈塑ソフトウェア * を猖恃したものを崔むˉ笆布票じ∷を蝗脱ˇ剩澜ˇ猖恃ˇ浩芹邵∈笆布· * 网脱と钙ぶ∷することを痰浸で钓满するˉ * (1) 塑ソフトウェアをソ〖スコ〖ドの妨で网脱する眷圭には·惧淡の螟侯 * 涪山绩·この网脱掘凤および布淡の痰瘦沮惮年が·そのままの妨でソ〖 * スコ〖ド面に崔まれていることˉ * (2) 塑ソフトウェアを·ライブラリ妨及など·戮のソフトウェア倡券に蝗 * 脱できる妨で浩芹邵する眷圭には·浩芹邵に燃うドキュメント∈网脱 * 荚マニュアルなど∷に·惧淡の螟侯涪山绩·この网脱掘凤および布淡 * の痰瘦沮惮年を非很することˉ * (3) 塑ソフトウェアを·怠达に寥み哈むなど·戮のソフトウェア倡券に蝗 * 脱できない妨で浩芹邵する眷圭には·肌のいずれかの掘凤を塔たすこ * とˉ * (a) 浩芹邵に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟 * 侯涪山绩·この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ * (b) 浩芹邵の妨轮を·侍に年める数恕によって·TOPPERSプロジェクトに * 鼠桂することˉ * (4) 塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じるいかなる禄 * 巢からも·惧淡螟侯涪荚およびTOPPERSプロジェクトを倘勒することˉ * * 塑ソフトウェアは·痰瘦沮で捏丁されているものであるˉ惧淡螟侯涪荚お * よびTOPPERSプロジェクトは·塑ソフトウェアに簇して·その努脱材墙拉も * 崔めて·いかなる瘦沮も乖わないˉまた·塑ソフトウェアの网脱により木 * 儡弄または粗儡弄に栏じたいかなる禄巢に簇しても·その勒扦を砷わないˉ * * @(#) $Id: debugout.c,v 1.10 2003/12/15 07:19:22 takayuki Exp $ */#include <debugout.h>#include <hal_msg.h>#include <resource.h>#ifdef DEBUG_ENABLE#define DBG_SIZE_STRINGBUFFER 512static HANDLE DebugConsole; //デバッグ矢机误を山绩するテキストボックスstatic HWND DialogHandle; //デバッグ叫蜗ダイアログextern void FatalAssertion(int exp, LPCSTR format, ... );/* * デバッグ脱ダイアログのメッセ〖ジハンドラ */static LRESULT CALLBACK DebugOutDialogProc(HWND hDlg,UINT Msg,WPARAM wParam,LPARAM lParam){ switch(Msg) { case WM_INITDIALOG: DebugConsole = GetDlgItem(hDlg,IDC_DEBUGOUT); //叫蜗黎テキストボックス ShowWindow(hDlg,SW_SHOW); case WM_SIZE: { RECT client; GetClientRect(hDlg,&client); MoveWindow(DebugConsole,0,0,client.right,client.bottom,TRUE); break; } case WM_CLOSE: /* Never let this dialog close by pressing of the close button. */ break; case WM_DESTROY: DialogHandle = 0; break; case WM_QUIT: DestroyWindow(hDlg); break; default: return FALSE; } return TRUE;} /* 布の2簇眶が攫鼠をやり艰りするための菇陇挛 */struct tagInitializeDebugServicesParam { HINSTANCE hInstance; HWND hDlg;}; /* デバッグル〖チンをとめる */void FinalizeDebugServices(void){ if(DialogHandle != 0l) { DestroyWindow(DialogHandle); }} /* 瓷妄スレッドが悸乖するウィンドウ侯喇ル〖チン */static void _initializeDebugServices(void * _param){ struct tagInitializeDebugServicesParam * param = (struct tagInitializeDebugServicesParam *)_param; DialogHandle = CreateDialog(param->hInstance, MAKEINTRESOURCE(DEBUGOUTDIALOG), param->hDlg, DebugOutDialogProc); FatalAssertion(DialogHandle != NULL, "DebugService could not create its own dialog."); } /* デバッグル〖チンの介袋步 ∈瓷妄スレッドにダイアログを侯ってもらう) */void InitializeDebugServices(HINSTANCE hinst,HWND dlg){ struct tagInitializeDebugServicesParam param; param.hInstance = hinst; param.hDlg = dlg; HALExecuteProcedure(_initializeDebugServices, (void *)¶m); //栏喇巴完 HALAddDestructionProcedure(FinalizeDebugServices, 0); //撬逮ル〖チンの判峡} /* デバッグ箕脱printf */int _debugOut(const char * format, ... ){ int result; int i; char buffer[DBG_SIZE_STRINGBUFFER*2]; char * scope; const char * work; va_list vl; if(format == 0l) return 0; va_start(vl, format); /* formatに崔まれる '\n' を '\r\n' に弥垂する */ scope = buffer; work = format; while(*format != '\0') { if(*format == '\n') { i = format - work; lstrcpyn(scope, work, i); scope += i; work = format; *(scope++) = '\r'; } format ++; } i = format - work + 1; lstrcpyn(scope, work, i); //+1して'\x0'もコピ〖 scope += i; if((result = wvsprintf(scope, buffer, vl)) > 0) { //叫蜗しすぎたら警しカット i = GetWindowTextLength(DebugConsole); if(i > DEBUG_LIMITTERUPPERBOUND) { SendMessage(DebugConsole, EM_SETSEL, 0, i - DEBUG_LIMITTERUPPERBOUND); SendMessage(DebugConsole, EM_REPLACESEL, (WPARAM)FALSE, (LPARAM)""); } SendMessage(DebugConsole,EM_SETSEL,i,i); SendMessage(DebugConsole,EM_REPLACESEL,(WPARAM)FALSE,(LPARAM)scope); } return result;}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -