summaryrefslogtreecommitdiff
path: root/apps/misc.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/misc.c')
-rw-r--r--apps/misc.c38
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 */
1061void format_time(char* buf, int buf_size, long t) 1062void 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 */
1258int 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}