61 #define MILLION 1000000
66 int sig_dig,
int max_dig)
68 static int pow10[] = {1, 10, 100, 1000, 10000, 100000, 1000000};
77 if (max_dig < 0 || max_dig > 6)
78 msg_panic(
"format_tv: bad maximum decimal count %d", max_dig);
79 if (sec < 0 || usec < 0 || usec >
MILLION)
80 msg_panic(
"format_tv: bad time %lds %ldus", sec, usec);
81 if (sig_dig < 1 || sig_dig > 6)
82 msg_panic(
"format_tv: bad significant decimal count %d", sig_dig);
83 ures = MILLION / pow10[max_dig];
91 for (n = 1; sec >= n && n <= wid / 10; n *= 10)
93 ures = (MILLION / wid) * n;
95 while (usec >= wid * ures)
105 if (usec >= MILLION) {
117 for (rem = usec, n = MILLION / 10; rem >= ures && n > 0; n /= 10) {
132 int main(
int argc,
char **argv)
146 if (sscanf(
vstring_str(in),
"%lf %d %d", &tval, &sig_dig, &max_dig) != 3)
151 format_tv(out, sec, usec, sig_dig, max_dig);
int vstring_get_nonl(VSTRING *vp, VSTREAM *fp)
NORETURN msg_panic(const char *fmt,...)
int main(int argc, char **argv)
#define VSTRING_TERMINATE(vp)
#define VSTRING_ADDCH(vp, ch)
VSTRING * vstring_sprintf_append(VSTRING *vp, const char *format,...)
VSTREAM * vstream_printf(const char *fmt,...)
#define VSTRING_RESET(vp)
VSTRING * vstring_alloc(ssize_t len)
NORETURN msg_fatal(const char *fmt,...)
int vstream_fflush(VSTREAM *stream)
VSTRING * vstring_free(VSTRING *vp)