mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
76 lines
1.9 KiB
C
76 lines
1.9 KiB
C
/*
|
|
* Copyright 2019 Otto-von-Guericke-Universität Magdeburg
|
|
*
|
|
* This file is subject to the terms and conditions of the GNU Lesser
|
|
* General Public License v2.1. See the file LICENSE in the top level
|
|
* directory for more details.
|
|
*/
|
|
|
|
/**
|
|
* @ingroup sys_fmt_table
|
|
* @{
|
|
*
|
|
* @file
|
|
* @brief Implementation of the table extensions of the string formatting
|
|
* library
|
|
*
|
|
* @author Marian Buschsieweke <marian.buschsieweke@ovgu.de>
|
|
*
|
|
* @}
|
|
*/
|
|
|
|
#include <stdarg.h>
|
|
#include <stdint.h>
|
|
#include <unistd.h>
|
|
#include <string.h>
|
|
|
|
#include "fmt.h"
|
|
#include "fmt_table.h"
|
|
|
|
static const char fmt_table_spaces[16] = " ";
|
|
|
|
/**
|
|
* @brief Prints @p fill_size bytes of the given pattern, repeating the
|
|
* pattern if needed
|
|
* @param pat Pattern to print
|
|
* @param pat_size Size of the pattern in bytes
|
|
* @param fill_size Number of bytes to print (if bigger than @p pat_size, the
|
|
* pattern will be repeated)
|
|
*
|
|
* E.g. `print_pattern("ab", 2, 5);` will print `ababa` to the console.
|
|
* This can be used to fill table columns with spaces, draw lines, etc.
|
|
*/
|
|
static void print_pattern(const char *pat, size_t pat_size, size_t fill_size)
|
|
{
|
|
while (fill_size > pat_size) {
|
|
print(pat, pat_size);
|
|
fill_size -= pat_size;
|
|
}
|
|
|
|
print(pat, fill_size);
|
|
}
|
|
|
|
void print_col_u32_dec(uint32_t number, size_t width)
|
|
{
|
|
char sbuf[10]; /* "4294967295" */
|
|
size_t slen;
|
|
|
|
slen = fmt_u32_dec(sbuf, number);
|
|
if (width > slen) {
|
|
print_pattern(fmt_table_spaces, sizeof(fmt_table_spaces), width - slen);
|
|
}
|
|
print(sbuf, slen);
|
|
}
|
|
|
|
void print_col_s32_dec(int32_t number, size_t width)
|
|
{
|
|
char sbuf[11]; /* "-2147483648" */
|
|
size_t slen;
|
|
|
|
slen = fmt_s32_dec(sbuf, number);
|
|
if (width > slen) {
|
|
print_pattern(fmt_table_spaces, sizeof(fmt_table_spaces), width - slen);
|
|
}
|
|
print(sbuf, slen);
|
|
}
|