source: anotherchoice/tags/jsp-1.4.4-full-UTF8/config/m16c-renesas/oaks16_mini/syslog_mini.c@ 26

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

initial

File size: 5.9 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,2001 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2003-2004 by Ryosuke Takeuchi
9 * Platform Development Center RICOH COMPANY,LTD. JAPAN
10 *
11 * 上記著作権者
12は,Free Software Foundation によってå…
13¬è¡¨ã•ã‚Œã¦ã„ã‚‹
14 * GNU General Public License の Version 2 に記述されている条件か,以
15 * 下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェア(本ソフトウェ
16 * アを改変したものを含む.以下同じ)を使用・複製・改変・再é…
17å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
18 * 利用と呼ぶ)することを無償で許諾する.
19 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
20 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
21 * スコード中に含まれていること.
22 * (2) 本ソフトウェアを再利用可能なバイナリコード(リロケータブルオブ
23 * ジェクトファイルやライブラリなど)の形で利用する場合には,利用
24 * に伴うドキュメント(利用者
25マニュアルなど)に,上記の著作権表示,
26 * この利用条件および下記の無保証規定を掲載すること.
27 * (3) 本ソフトウェアを再利用不可能なバイナリコードの形または機器に組
28 * み込んだ形で利用する場合には,次のいずれかの条件を満たすこと.
29 * (a) 利用に伴うドキュメント(利用者
30マニュアルなど)に,上記の著作
31 * 権表示,この利用条件および下記の無保証規定を掲載すること.
32 * (b) 利用の形æ…
33‹ã‚’,別に定める方法によって,上記著作権者
34に報告する
35 * こと.
36 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
37 * 害からも,上記著作権者
38をå…
39è²¬ã™ã‚‹ã“と.
40 *
41 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
42は,
43 * 本ソフトウェアに関して,その適用可能性も含めて,いかなる保証も行わ
44 * ない.また,本ソフトウェアの利用により直接的または間接的に生じたい
45 * かなる損害に関しても,その責任を負わない.
46 *
47 * @(#) $Id: syslog_mini.c,v 1.3 2005/11/24 12:41:23 honda Exp $
48 */
49
50/*
51 * システムログ機能簡略版
52 */
53
54#undef OMIT_SYSLOG
55#include "jsp_kernel.h"
56#include "time_event.h"
57#include "serial.h"
58
59/*
60 * 出力すべきログ情
61報の重要度(ビットマップ)
62 */
63static UINT syslog_logmask; /* 記録/出力すべき重要度 */
64static UINT syslog_lowmask; /* 低レベル出力すべき重要度 */
65
66/*
67 * システムログ機能の初期化
68 */
69void syslog_initialize(void)
70{
71 syslog_logmask = LOG_UPTO(LOG_NOTICE);
72 syslog_lowmask = LOG_UPTO(LOG_NOTICE);
73}
74
75/*
76 * ログ情
77報の出力
78 */
79SYSCALL ER
80vwri_log(UINT prio, SYSLOG *p_log)
81{
82 BOOL locked;
83
84 p_log->logtim = systim_offset + current_time;
85 if ((syslog_logmask & LOG_MASK(prio)) != 0) {
86 /*
87 * 低レベル出力への書出し
88 */
89 syslog_print(p_log, sys_putc);
90 sys_putc('\n');
91 }
92 return(E_OK);
93}
94
95/*
96 * 出力すべきログ情
97報の重要度の設定
98 */
99SYSCALL ER
100vmsk_log(UINT logmask, UINT lowmask)
101{
102 syslog_logmask = logmask;
103 syslog_lowmask = lowmask;
104 return(E_OK);
105}
106
107/*
108 * システムログ機能の終了処理
109 *
110 * ログバッファに記録されたログ情
111報を,低レベル出力機能を用いて出力す
112 * る.
113 */
114void
115syslog_terminate(void){}
116
117/*
118 * 数値を文字列に変換
119 */
120static void
121convert(unsigned long val, int radix, const char *radchar, int width,
122 int minus, int padzero, void (*putc)(char))
123{
124 char buf[12];
125 int i, j;
126
127 i = 0;
128 do {
129 buf[i++] = radchar[val % radix];
130 val /= radix;
131 } while (val != 0);
132
133 width -= minus;
134 if (minus > 0 && padzero > 0) {
135 (*putc)('-');
136 }
137 for (j = i; j < width; j++) {
138 (*putc)((char)(padzero > 0 ? '0' : ' '));
139 }
140 if (minus > 0 && padzero <= 0) {
141 (*putc)('-');
142 }
143 while (i > 0) {
144 (*putc)(buf[--i]);
145 }
146}
147
148/*
149 * ログ情
150報フォーマット用ライブラリ関数
151 */
152static char const raddec[] = "0123456789";
153static char const radhex[] = "0123456789abcdef";
154static char const radHEX[] = "0123456789ABCDEF";
155
156void
157syslog_print(SYSLOG *p_syslog, void (*putc)(char))
158{
159 char const *format;
160 int argno;
161 int c;
162 int width;
163 int padzero;
164 long val;
165 char const *str;
166
167 format = (char const *)(p_syslog->loginfo[0]);
168 argno = 1;
169
170 while ((c = *format++) != '\0') {
171 if (c != '%') {
172 (*putc)((char) c);
173 continue;
174 }
175
176 width = padzero = 0;
177 if ((c = *format++) == '0') {
178 padzero = 1;
179 c = *format++;
180 }
181 while ('0' <= c && c <= '9') {
182 width = width*10 + c - '0';
183 c = *format++;
184 }
185 switch (c) {
186 case 'd':
187 val = (long)(p_syslog->loginfo[argno++]);
188 if (val >= 0) {
189 convert(val, 10, raddec, width,
190 0, padzero, putc);
191 }
192 else {
193 convert(-val, 10, raddec, width,
194 1, padzero, putc);
195 }
196 break;
197 case 'u':
198 val = (long)(p_syslog->loginfo[argno++]);
199 convert(val, 10, raddec, width, 0, padzero, putc);
200 break;
201 case 'x':
202 val = (long)(p_syslog->loginfo[argno++]);
203 convert(val, 16, radhex, width, 0, padzero, putc);
204 break;
205 case 'X':
206 val = (long)(p_syslog->loginfo[argno++]);
207 convert(val, 16, radHEX, width, 0, padzero, putc);
208 break;
209 case 'c':
210 (*putc)((char)(int)(p_syslog->loginfo[argno++]));
211 break;
212 case 's':
213 str = (char const *)(p_syslog->loginfo[argno++]);
214 while ((c = *str++) != '\0') {
215 (*putc)((char) c);
216 }
217 break;
218 case '%':
219 (*putc)('%');
220 break;
221 case '\0':
222 format--;
223 break;
224 default:
225 break;
226 }
227 }
228}
229
Note: See TracBrowser for help on using the repository browser.