238878dce42b2877ba90c719b9a62e46bfb4b945
3 Date of creation : 05/12/2022
5 Copyright : Soft'n'design
6 Author : Laurent Mazet <mazet@softndesign.org>
8 Description : This file contains embedded printf
20 int stdfdout
= STDOUT_FILENO
;
21 int stdfderr
= STDERR_FILENO
;
23 unsigned int nextpow (unsigned int x
, int base
) {
29 return (n
== 0) ? 1 : n
;
32 /* simple fprintf function */
34 int fdprintf (int fd
, const char *fmt
, ...)
36 char buffer
[1024 + 1] = { 0 };
47 /* copy standard char */
57 if ((*fmt
== ' ') || (*fmt
== '0')) {
62 if ((*fmt
>= '1') && (*fmt
<= '9')) {
66 /* process format char */
69 c
= (char) va_arg (ap
, int);
80 case 'u': /* unsigned int */
81 u
= (t
) ? (unsigned int)d
: va_arg (ap
, unsigned int);
82 for (i
= nextpow (u
, 10), s
= str
; i
> 0; i
--, s
++) {
83 str
[i
- 1] = '0' + (u
% 10);
88 case 'p': /* pointer */
92 sz
= sizeof (void *) * 2;
93 p
= va_arg (ap
, void *);
95 case 'x': /* integer hexa */
97 u
= va_arg (ap
, unsigned int);
104 for (i
= sz
, t
= 1; i
> 0; i
--) {
105 char x
= (char)((u
>> (i
* 4 - 4)) & 0xf);
106 if ((t
== 1) && (x
== 0)) {
109 *str
++ = (x
> 9) ? 'a' + x
- 10 : '0' + x
;
114 case 's': /* string */
115 s
= va_arg (ap
, char *);
127 int n
= str
- buffer
;
128 if (n
< (int)sizeof (buffer
) - 1) {
129 return write (fd
, buffer
, n
);
134 /* vim: set ts=4 sw=4 et: */