Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/lib/libast/string/fmtclock.c
1810 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 1985-2011 AT&T Intellectual Property *
5
* and is licensed under the *
6
* Eclipse Public License, Version 1.0 *
7
* by AT&T Intellectual Property *
8
* *
9
* A copy of the License is available at *
10
* http://www.eclipse.org/org/documents/epl-v10.html *
11
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12
* *
13
* Information and Software Systems Research *
14
* AT&T Research *
15
* Florham Park NJ *
16
* *
17
* Glenn Fowler <[email protected]> *
18
* David Korn <[email protected]> *
19
* Phong Vo <[email protected]> *
20
* *
21
***********************************************************************/
22
#pragma prototyped
23
/*
24
* return pointer to formatted clock() tics t
25
* return value length is at most 6
26
*/
27
28
#include <ast.h>
29
#include <tm.h>
30
31
char*
32
fmtclock(register Sfulong_t t)
33
{
34
register int u;
35
char* buf;
36
int z;
37
38
static unsigned int clk_tck;
39
40
if (!clk_tck)
41
{
42
#ifdef CLOCKS_PER_SEC
43
clk_tck = CLOCKS_PER_SEC;
44
#else
45
if (!(clk_tck = (unsigned int)strtoul(astconf("CLK_TCK", NiL, NiL), NiL, 10)))
46
clk_tck = 60;
47
#endif
48
}
49
if (t == 0)
50
return "0";
51
if (t == ((Sfulong_t)~0))
52
return "%";
53
t = (t * 1000000) / clk_tck;
54
if (t < 1000)
55
u = 'u';
56
else if ((t /= 1000) < 1000)
57
u = 'm';
58
else
59
return fmtelapsed(t / 10, 100);
60
buf = fmtbuf(z = 7);
61
sfsprintf(buf, z, "%I*u%cs", sizeof(t), t, u);
62
return buf;
63
}
64
65