LOG.C
[目次 | 関数]
1|/**************************************************************************
2| 1. <<< 処理の記録 (Log) >>>
3|***************************************************************************/
4|
5|
6|#include <Log.ah> /* Auto include header, Look at mixer-... folder */
7|
8|
9|/*---------------------------------------------------------------------*/
10|/* 2. <<<◆(Log) 処理の記録 >>> */
11|/*---------------------------------------------------------------------*/
12|
13|
14|/**************************************************************************
15| 3. <<< [Log_init] 初期化する >>>
16|【引数】
17| ・Log* m; 処理の記録
18|***************************************************************************/
19|void Log_init( Log* m )
20|{
21| ERRORS_INITCHK( m, 0 );
22|
23| m->mem = NULL;
24| m->console = 0;
25| #ifdef USES_FILEX
26| m->file = NULL;
27| #endif
28| #ifdef FOR_WIN32
29| //m->edit = 0;
30| #endif
31|
32| ERRORS_FINISHCHK_FOR_INIT( Log_finish );
33|}
34|
35|
36|
37|/**************************************************************************
38| 4. <<< [Log_finish] 後始末する >>>
39|***************************************************************************/
40|void Log_finish( Log* m )
41|{
42| ERRORS_INITCHK( m, 1 );
43| ERRORS_FINISHCHK_FOR_FINISH( Log_finish );
44|
45|// if ( m->file != NULL )
46| // fclose( m->file );
47|}
48|
49|
50|
51|/**************************************************************************
52| 5. <<< [Log_print] デバッグ表示する >>>
53|***************************************************************************/
54|#ifndef ERRORS_CUT_DEBUG_TOOL
55|void Log_print( Log* m, const char* title )
56|{
57| Errors_printf( "%sLog[%p]", title, m );
58| Errors_printf( "%s mem = %p, mem_over = %p, mem_p = %p",
59| title, m->mem, m->mem_over, m->mem_p );
60| Errors_printf( "%s console = %d", title, m->console );
61| #ifdef USES_FILEX
62| Errors_printf( "%s file = 0x%p", title, m->file );
63| #endif
64| #ifdef FOR_WIN32
65| //Errors_printf( "%s edit = 0x%X", title, m->edit );
66| #endif
67|}
68|#endif
69|
70|
71|
72|/**************************************************************************
73| 6. <<< [Log_setMemory] メモリへの出力を設定する >>>
74|【引数】
75| ・Log* m; 処理の記録
76| ・void* mem; メモリ領域の先頭アドレス
77| ・int mem_size; メモリ領域のサイズ
78|***************************************************************************/
79|void Log_setMemory( Log* m, void* mem, int mem_size )
80|{
81| ERRORS_INITCHK( m, 1 );
82|
83| m->mem = mem;
84| m->mem_over = (char*)mem + mem_size;
85| m->mem_p = mem;
86|}
87|
88|
89|
90|/**************************************************************************
91| 7. <<< [Log_setConsole] コンソールへの出力を設定する >>>
92|【引数】
93| ・Log* m; 処理の記録
94| ・int sw; コンソール・スイッチ
95|【補足】
96|・switch には、出力をオンにするものを次の定数から選んで | (or) で結びます。
97| Log_StdOut, Log_StdErr
98|・printf に出力する前後に改行を出力するとき、sw に以下の定数を | (or) で結びます。
99| Log_StdOut_RetBefore, Log_StdOut_RetAfter
100|***************************************************************************/
101|void Log_setConsole( Log* m, int sw )
102|{
103| ERRORS_INITCHK( m, 1 );
104|
105| m->console = sw;
106|}
107|
108|
109|
110|/**************************************************************************
111| 8. <<< [Log_setFile] ファイルへの出力を設定する >>>
112|【引数】
113| ・Log* m; 処理の記録
114| ・char* path; ファイルパス
115|***************************************************************************/
116|#ifdef USES_FILEX
117|void Log_setFile( Log* m, const char* path )
118|{
119| m->file = FileX_open( path, "rt" );
120|}
121|#endif
122|
123|/**************************************************************************
124| 9. <<< [Log_setEditCtrl] エディット・コントロールへの出力を設定する >>>
125|【引数】
126| ・Log* m; 処理の記録
127| ・CEdit* edit; エディット・コンソール
128|***************************************************************************/
129|#ifdef FOR_WIN32
130|#if 0
131|void Log_setEditCtrl( Log* m, CEdit* edit )
132|{
133| m->edit = edit;
134| Errors_notSupport();
135|}
136|#endif
137|#endif
138|
139|/**************************************************************************
140| 10. <<< [Log_printf] 出力する >>>
141|【引数】
142| ・Log* m; 処理の記録
143| ・char* fmt; 書式
144| ・... 変数の列挙
145|***************************************************************************/
146|void Log_printf( Log* m, const char* fmt, ... )
147|{
148| if ( m->mem != NULL ) {
149| va_list va;
150| char* p;
151| char* p_over;
152| char* ps;
153| char s[1]; /* infinite size */
154|
155| va_start( va, fmt );
156| vsprintf( s, fmt, va );
157| va_end( va );
158|
159| p = m->mem_p;
160| p_over = m->mem_over;
161| ps = s;
162| for ( ; *ps != '\0' && p < p_over; p++, ps++ )
163| *p = *ps;
164| m->mem_p = p;
165| }
166|
167| if ( m->console & Log_StdOut ) {
168| va_list va;
169|
170| if ( m->console & Log_StdOut_RetBefore )
171| fputc( '\n', stdout );
172|
173| va_start( va, fmt );
174| vfprintf( stdout, fmt, va );
175| va_end( va );
176|
177| if ( m->console & Log_StdOut_RetAfter )
178| fputc( '\n', stdout );
179| }
180|
181| if ( m->console & Log_StdErr ) {
182| va_list va;
183|
184| va_start( va, fmt );
185| vfprintf( stderr, fmt, va );
186| va_end( va );
187| }
188|
189| if ( m->file != NULL ) {
190| va_list va;
191|
192| va_start( va, fmt );
193| vfprintf( m->file, fmt, va );
194| va_end( va );
195| }
196|}
197|
198|/**************************************************************************
199| 11. <<< [Log_clear] これまでの出力をクリアする >>>
200|【引数】
201| ・Log* m; 処理の記録
202|***************************************************************************/
203|void Log_clear( Log* m )
204|{
205| if ( m->mem != NULL ) {
206| m->mem_p = m->mem;
207| }
208| if ( m->file != NULL ) {
209| rewind( m->file );
210| }
211|}
212|
213|