mirror of
https://github.com/qmk/qmk_firmware.git
synced 2024-12-05 01:15:19 +00:00
54 lines
1.1 KiB
C
54 lines
1.1 KiB
C
|
// Copyright 2022 Takeshi Ishii (@mtei)
|
||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||
|
|
||
|
#include "pseudo_sprintf.h"
|
||
|
|
||
|
static char *sprint_decimal(char *buf, int data) {
|
||
|
if (data > 9) {
|
||
|
buf = sprint_decimal(buf, data/10);
|
||
|
}
|
||
|
*buf++ = "0123456789"[data%10];
|
||
|
*buf = '\0';
|
||
|
return buf;
|
||
|
}
|
||
|
|
||
|
static char *sprint_hex(char *buf, uint32_t data) {
|
||
|
if (data > 0xf) {
|
||
|
buf = sprint_hex(buf, data/0x10);
|
||
|
}
|
||
|
*buf++ = "0123456789abcdef"[data & 0xf];
|
||
|
*buf = '\0';
|
||
|
return buf;
|
||
|
}
|
||
|
|
||
|
char *sprints(char *buf, char *src) {
|
||
|
while (*src) {
|
||
|
*buf++ = *src++;
|
||
|
}
|
||
|
*buf = '\0';
|
||
|
return buf;
|
||
|
}
|
||
|
|
||
|
char *sprintx(char *buf, char *leadstr, uint32_t data) {
|
||
|
buf = sprints(buf, leadstr);
|
||
|
buf = sprint_hex(buf, data);
|
||
|
return buf;
|
||
|
}
|
||
|
|
||
|
char *sprintd(char *buf, char *leadstr, int data) {
|
||
|
buf = sprints(buf, leadstr);
|
||
|
buf = sprint_decimal(buf, data);
|
||
|
return buf;
|
||
|
}
|
||
|
|
||
|
char *sprint2d(char *buf, char *leadstr, int data) {
|
||
|
buf = sprints(buf, leadstr);
|
||
|
if (data > 99) {
|
||
|
return sprint_decimal(buf, data);
|
||
|
}
|
||
|
if (data < 10) {
|
||
|
*buf++ = ' ';
|
||
|
}
|
||
|
return sprint_decimal(buf, data);
|
||
|
}
|