#pragma once #include static inline bool camu_split_time(u64 nanoseconds, u32 *hours, u32 *minutes, u32 *seconds, u32 *hundredths) { *hours = nanoseconds / 3600000000u; *minutes = nanoseconds / 60000000u; *seconds = nanoseconds / 1000000u; *hundredths = nanoseconds / 10000u; bool over_an_hour = *minutes >= 60u; *hundredths -= *seconds * 100u; *seconds -= *minutes * 60u; *minutes -= *hours * 60u; return over_an_hour; } static inline s32 camu_print_time(char *buf, size_t size, u64 nanoseconds, bool always_show_hour, u32 hour_padding) { u32 hours, minutes, seconds, hundredths; bool show_hour = camu_split_time(nanoseconds, &hours, &minutes, &seconds, &hundredths); show_hour |= always_show_hour; s32 offset = 0; if (show_hour && hour_padding >= 2 && hour_padding <= 4) { static const char *padding_table[] = { "%.2u:", "%.3u:", "%.4u:" }; offset += al_snprintf(buf, size, padding_table[hour_padding - 2u], hours); } offset += al_snprintf(buf + offset, size - offset, "%.2u:%.2u.%.2u", minutes, seconds, hundredths); return offset; }