diff options
Diffstat (limited to 'apps/misc.c')
-rw-r--r-- | apps/misc.c | 38 |
1 files changed, 23 insertions, 15 deletions
diff --git a/apps/misc.c b/apps/misc.c index 3fdcab85e6..bfe3e990f5 100644 --- a/apps/misc.c +++ b/apps/misc.c | |||
@@ -62,6 +62,7 @@ | |||
62 | #include "yesno.h" | 62 | #include "yesno.h" |
63 | #include "viewport.h" | 63 | #include "viewport.h" |
64 | #include "list.h" | 64 | #include "list.h" |
65 | #include "fixedpoint.h" | ||
65 | 66 | ||
66 | #include "debug.h" | 67 | #include "debug.h" |
67 | 68 | ||
@@ -1060,21 +1061,13 @@ char* skip_whitespace(char* const str) | |||
1060 | */ | 1061 | */ |
1061 | void format_time(char* buf, int buf_size, long t) | 1062 | void format_time(char* buf, int buf_size, long t) |
1062 | { | 1063 | { |
1063 | int const time = abs(t / 1000); | 1064 | unsigned long time = labs(t / 1000); |
1064 | int const hours = time / 3600; | 1065 | unsigned long hours = time / 3600; |
1065 | int const minutes = time / 60 - hours * 60; | 1066 | unsigned long minutes = time / 60 - hours * 60; |
1066 | int const seconds = time % 60; | 1067 | unsigned long seconds = time % 60; |
1067 | const char * const sign = &"-"[t < 0 ? 0 : 1]; | 1068 | int hashours = hours > 0; |
1068 | 1069 | snprintf(buf, buf_size, "%.*s%.0lu%.*s%.*lu:%.2lu", | |
1069 | if ( hours == 0 ) | 1070 | t < 0, "-", hours, hashours, ":", hashours+1, minutes, seconds); |
1070 | { | ||
1071 | snprintf(buf, buf_size, "%s%d:%02d", sign, minutes, seconds); | ||
1072 | } | ||
1073 | else | ||
1074 | { | ||
1075 | snprintf(buf, buf_size, "%s%d:%02d:%02d", sign, hours, minutes, | ||
1076 | seconds); | ||
1077 | } | ||
1078 | } | 1071 | } |
1079 | 1072 | ||
1080 | /** | 1073 | /** |
@@ -1260,3 +1253,18 @@ enum current_activity get_current_activity(void) | |||
1260 | } | 1253 | } |
1261 | 1254 | ||
1262 | #endif | 1255 | #endif |
1256 | |||
1257 | /* format a sound value like: -1.05 dB */ | ||
1258 | int format_sound_value(char *buf, size_t size, int snd, int val) | ||
1259 | { | ||
1260 | int numdec = sound_numdecimals(snd); | ||
1261 | const char *unit = sound_unit(snd); | ||
1262 | int physval = sound_val2phys(snd, val); | ||
1263 | |||
1264 | unsigned int factor = ipow(10, numdec); | ||
1265 | unsigned int av = abs(physval); | ||
1266 | unsigned int i = av / factor; | ||
1267 | unsigned int d = av - i*factor; | ||
1268 | return snprintf(buf, size, "%c%u%.*s%.*u %s", " -"[physval < 0], | ||
1269 | i, numdec, ".", numdec, d, unit); | ||
1270 | } | ||