source: asp_ewarm/asp-1.7.0/library/log_output.c

Last change on this file was 61, checked in by ertl-honda, 11 years ago

ASP for EWARM のコミット.

File size: 5.2 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
6 * Toyohashi Univ. of Technology, JAPAN
7 * Copyright (C) 2004-2008 by Embedded and Real-Time Systems Laboratory
8 * Graduate School of Information Science, Nagoya Univ., JAPAN
9 *
10 * ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
11 * ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
12 * •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
13 * (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
14 * Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
15 * ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
16 * (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
17 * —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ…
18ƒƒ“ƒgi—˜—p
19 * ŽÒƒ}ƒjƒ…
20ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
21 * ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
22 * (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
23 * —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
24 * ‚ƁD
25 * (a) Ä”z•z‚É”º‚¤ƒhƒLƒ…
26ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ…
27ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
28 * ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
29 * (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
30 * •ñ‚·‚邱‚ƁD
31 * (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
32 * ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
33 * ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
34 * —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
35 * –Ɛӂ·‚邱‚ƁD
36 *
37 * –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
38 * ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
39 * ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
40 * ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
41 * ‚̐ӔC‚𕉂í‚È‚¢D
42 *
43 * @(#) $Id: log_output.c 1176 2008-07-01 10:24:46Z ertl-hiro $
44 */
45
46/*
47 * ƒVƒXƒeƒ€ƒƒO‚̃tƒH[ƒ}ƒbƒgo—Í
48 */
49
50#include <t_stddef.h>
51#include <t_syslog.h>
52
53/*
54 * ”’l‚𕶎š—ñ‚É•ÏŠ·
55 */
56#define CONVERT_BUFLEN ((sizeof(uintptr_t) * CHAR_BIT + 2) / 3)
57 /* uintptr_tŒ^‚̐”’l‚̍ő啶Žš” */
58static void
59convert(uintptr_t val, uint_t radix, const char *radchar,
60 uint_t width, bool_t minus, bool_t padzero, void (*putc)(char_t))
61{
62 char buf[CONVERT_BUFLEN];
63 uint_t i, j;
64
65 i = 0U;
66 do {
67 buf[i++] = radchar[val % radix];
68 val /= radix;
69 } while (i < CONVERT_BUFLEN && val != 0);
70
71 if (minus && width > 0) {
72 width -= 1;
73 }
74 if (minus && padzero) {
75 (*putc)('-');
76 }
77 for (j = i; j < width; j++) {
78 (*putc)((char_t)(padzero ? '0' : ' '));
79 }
80 if (minus && !padzero) {
81 (*putc)('-');
82 }
83 while (i > 0U) {
84 (*putc)(buf[--i]);
85 }
86}
87
88/*
89 * •¶Žš—ñ®Œ`o—Í
90 */
91static const char raddec[] = "0123456789";
92static const char radhex[] = "0123456789abcdef";
93static const char radHEX[] = "0123456789ABCDEF";
94
95void
96syslog_printf(const char *format, const intptr_t *p_args, void (*putc)(char_t))
97{
98 char c;
99 uint_t width;
100 bool_t padzero;
101 intptr_t val;
102 const char *str;
103
104 while ((c = *format++) != '\0') {
105 if (c != '%') {
106 (*putc)(c);
107 continue;
108 }
109
110 width = 0U;
111 padzero = false;
112 if ((c = *format++) == '0') {
113 padzero = true;
114 c = *format++;
115 }
116 while ('0' <= c && c <= '9') {
117 width = width * 10U + c - '0';
118 c = *format++;
119 }
120 if (c == 'l') {
121 c = *format++;
122 }
123 switch (c) {
124 case 'd':
125 val = (intptr_t)(*p_args++);
126 if (val >= 0) {
127 convert((uintptr_t) val, 10U, raddec,
128 width, false, padzero, putc);
129 }
130 else {
131 convert((uintptr_t)(-val), 10U, raddec,
132 width, true, padzero, putc);
133 }
134 break;
135 case 'u':
136 val = (intptr_t)(*p_args++);
137 convert((uintptr_t) val, 10U, raddec, width, false, padzero, putc);
138 break;
139 case 'x':
140 case 'p':
141 val = (intptr_t)(*p_args++);
142 convert((uintptr_t) val, 16U, radhex, width, false, padzero, putc);
143 break;
144 case 'X':
145 val = (intptr_t)(*p_args++);
146 convert((uintptr_t) val, 16U, radHEX, width, false, padzero, putc);
147 break;
148 case 'c':
149 (*putc)((char_t)(intptr_t)(*p_args++));
150 break;
151 case 's':
152 str = (const char *)(*p_args++);
153 while ((c = *str++) != '\0') {
154 (*putc)(c);
155 }
156 break;
157 case '%':
158 (*putc)('%');
159 break;
160 case '\0':
161 format--;
162 break;
163 default:
164 break;
165 }
166 }
167}
168
169/*
170 * ƒƒOî•ñ‚̏o—Í
171 */
172void
173syslog_print(const SYSLOG *p_syslog, void (*putc)(char_t))
174{
175 switch (p_syslog->logtype) {
176 case LOG_TYPE_COMMENT:
177 syslog_printf((const char *)(p_syslog->loginfo[0]),
178 &(p_syslog->loginfo[1]), putc);
179 break;
180 case LOG_TYPE_ASSERT:
181 syslog_printf("%s:%u: Assertion `%s' failed.",
182 &(p_syslog->loginfo[0]), putc);
183 break;
184 }
185}
186
187/*
188 * ƒƒOî•ñ‘rŽ¸ƒƒbƒZ[ƒW‚̏o—Í
189 */
190void
191syslog_lostmsg(uint_t lost, void (*putc)(char_t))
192{
193 intptr_t lostinfo[1];
194
195 lostinfo[0] = (intptr_t) lost;
196 syslog_printf("%d messages are lost.", lostinfo, putc);
197 (*putc)('\n');
198}
Note: See TracBrowser for help on using the repository browser.