Lines 20-25
Link Here
|
20 |
|
20 |
|
21 |
#include <shared.h> |
21 |
#include <shared.h> |
22 |
#include <term.h> |
22 |
#include <term.h> |
|
|
23 |
#include <stdarg.h> |
23 |
|
24 |
|
24 |
#ifdef SUPPORT_HERCULES |
25 |
#ifdef SUPPORT_HERCULES |
25 |
# include <hercules.h> |
26 |
# include <hercules.h> |
Lines 178-187
Link Here
|
178 |
void |
179 |
void |
179 |
grub_printf (const char *format,...) |
180 |
grub_printf (const char *format,...) |
180 |
{ |
181 |
{ |
181 |
int *dataptr = (int *) &format; |
182 |
va_list ap ; |
|
|
183 |
va_start(ap, format); |
184 |
|
182 |
char c, str[16]; |
185 |
char c, str[16]; |
183 |
|
186 |
|
184 |
dataptr++; |
|
|
185 |
|
187 |
|
186 |
while ((c = *(format++)) != 0) |
188 |
while ((c = *(format++)) != 0) |
187 |
{ |
189 |
{ |
Lines 196-212
Link Here
|
196 |
case 'X': |
198 |
case 'X': |
197 |
#endif |
199 |
#endif |
198 |
case 'u': |
200 |
case 'u': |
199 |
*convert_to_ascii (str, c, *((unsigned long *) dataptr++)) = 0; |
201 |
*convert_to_ascii (str, c, va_arg(ap,unsigned long)) = 0; |
200 |
grub_putstr (str); |
202 |
grub_putstr (str); |
201 |
break; |
203 |
break; |
202 |
|
204 |
|
203 |
#ifndef STAGE1_5 |
205 |
#ifndef STAGE1_5 |
204 |
case 'c': |
206 |
case 'c': |
205 |
grub_putchar ((*(dataptr++)) & 0xff); |
207 |
grub_putchar (va_arg(ap,char) & 0xff); |
206 |
break; |
208 |
break; |
207 |
|
209 |
|
208 |
case 's': |
210 |
case 's': |
209 |
grub_putstr ((char *) *(dataptr++)); |
211 |
grub_putstr (va_arg(ap,char *)); |
210 |
break; |
212 |
break; |
211 |
#endif |
213 |
#endif |
212 |
} |
214 |
} |
Lines 219-230
Link Here
|
219 |
{ |
221 |
{ |
220 |
/* XXX hohmuth |
222 |
/* XXX hohmuth |
221 |
ugly hack -- should unify with printf() */ |
223 |
ugly hack -- should unify with printf() */ |
222 |
int *dataptr = (int *) &format; |
224 |
va_list ap ; |
|
|
225 |
va_start(ap, format); |
226 |
|
223 |
char c, *ptr, str[16]; |
227 |
char c, *ptr, str[16]; |
224 |
char *bp = buffer; |
228 |
char *bp = buffer; |
225 |
|
229 |
|
226 |
dataptr++; |
|
|
227 |
|
228 |
while ((c = *format++) != 0) |
230 |
while ((c = *format++) != 0) |
229 |
{ |
231 |
{ |
230 |
if (c != '%') |
232 |
if (c != '%') |
Lines 233-239
Link Here
|
233 |
switch (c = *(format++)) |
235 |
switch (c = *(format++)) |
234 |
{ |
236 |
{ |
235 |
case 'd': case 'u': case 'x': |
237 |
case 'd': case 'u': case 'x': |
236 |
*convert_to_ascii (str, c, *((unsigned long *) dataptr++)) = 0; |
238 |
*convert_to_ascii (str, c, va_arg(ap,unsigned long)) = 0; |
237 |
|
239 |
|
238 |
ptr = str; |
240 |
ptr = str; |
239 |
|
241 |
|
Lines 241-252
Link Here
|
241 |
*bp++ = *(ptr++); /* putchar(*(ptr++)); */ |
243 |
*bp++ = *(ptr++); /* putchar(*(ptr++)); */ |
242 |
break; |
244 |
break; |
243 |
|
245 |
|
244 |
case 'c': *bp++ = (*(dataptr++))&0xff; |
246 |
case 'c': *bp++ = va_arg(ap,char) & 0xff; |
245 |
/* putchar((*(dataptr++))&0xff); */ |
247 |
/* putchar (va_arg(ap,char) & 0xff); */ |
246 |
break; |
248 |
break; |
247 |
|
249 |
|
248 |
case 's': |
250 |
case 's': |
249 |
ptr = (char *) (*(dataptr++)); |
251 |
ptr = va_arg(ap,char *); |
250 |
|
252 |
|
251 |
while ((c = *ptr++) != 0) |
253 |
while ((c = *ptr++) != 0) |
252 |
*bp++ = c; /* putchar(c); */ |
254 |
*bp++ = c; /* putchar(c); */ |