gbdk-2020 | GameBoy Development Kit |
| download: https://git.y1.nz/archives/gbdk.tar.gz | |
| README | Files | Log | Refs | LICENSE |
gbdk-lib/libc/targets/sm83/gprintf.c
1 #include <stdint.h>
2 #include <stdarg.h>
3 #include <gb/drawing.h>
4
5 int8_t gprintf(char *fmt, ...) NONBANKED
6 {
7 va_list ap;
8 int8_t nb = 0;
9
10 va_start(ap, fmt);
11 for(; *fmt; fmt++)
12 if(*fmt == '%') {
13 switch(*++fmt) {
14 case 'c': {
15 /* char */
16 char c = va_arg(ap, char);
17 wrtchr(c);
18 break;
19 }
20 case 'd': {
21 /* decimal int */
22 int8_t b = va_arg(ap, int8_t);
23 gprintn(b, 10, SIGNED);
24 break;
25 }
26 case 'u': {
27 /* unsigned int */
28 int8_t b = (int8_t)va_arg(ap, int);
29 gprintn(b, 10, UNSIGNED);
30 break;
31 }
32 case 'o': {
33 /* octal int */
34 int8_t b = va_arg(ap, int8_t);
35 gprintn(b, 8, UNSIGNED);
36 break;
37 }
38 case 'x': {
39 /* hexadecimal int */
40 int8_t b = va_arg(ap, int8_t);
41 gprintn(b, 16, UNSIGNED);
42 break;
43 }
44 case 's': {
45 /* string */
46 char *s = va_arg(ap, char *);
47 gprint(s);
48 break;
49 }
50 #if 0
51 case 'l':
52 /* long */
53 switch(*++fmt) {
54 case 'd':
55 /* decimal long */
56 gprintln(va_arg(ap, int16_t), 10, SIGNED);
57 break;
58 case 'u':
59 /* unsigned long */
60 gprintln(va_arg(ap, int16_t), 10, UNSIGNED);
61 break;
62 case 'o':
63 /* octal long */
64 gprintln(va_arg(ap, int16_t), 8, UNSIGNED);
65 break;
66 case 'x':
67 /* hexadecimal long */
68 gprintln(va_arg(ap, int16_t), 16, UNSIGNED);
69 break;
70 }
71 break;
72 #endif
73 case '%':
74 /* % */
75 wrtchr(*fmt);
76 break;
77 default:
78 return -1;
79 }
80 nb++;
81 } else
82 wrtchr(*fmt);
83 va_end(ap);
84
85 return nb;
86 }
This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.