|
|
1.1 root 1: /*
2: * Copyright (c) 1983 Eric P. Allman
3: * Copyright (c) 1988 Regents of the University of California.
4: * All rights reserved.
5: *
6: * Redistribution and use in source and binary forms are permitted
7: * provided that the above copyright notice and this paragraph are
8: * duplicated in all such forms and that any documentation,
9: * advertising materials, and other materials related to such
10: * distribution and use acknowledge that the software was developed
11: * by the University of California, Berkeley. The name of the
12: * University may not be used to endorse or promote products derived
13: * from this software without specific prior written permission.
14: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
15: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
16: * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
17: */
18:
19: #ifndef lint
20: static char sccsid[] = "@(#)convtime.c 5.3 (Berkeley) 6/30/88";
21: #endif /* not lint */
22:
23: # include <ctype.h>
24: # include "useful.h"
25:
26: /*
27: ** CONVTIME -- convert time
28: **
29: ** Takes a time as an ascii string with a trailing character
30: ** giving units:
31: ** s -- seconds
32: ** m -- minutes
33: ** h -- hours
34: ** d -- days (default)
35: ** w -- weeks
36: ** For example, "3d12h" is three and a half days.
37: **
38: ** Parameters:
39: ** p -- pointer to ascii time.
40: **
41: ** Returns:
42: ** time in seconds.
43: **
44: ** Side Effects:
45: ** none.
46: */
47:
48: time_t
49: convtime(p)
50: char *p;
51: {
52: register time_t t, r;
53: register char c;
54:
55: r = 0;
56: while (*p != '\0')
57: {
58: t = 0;
59: while (isdigit(c = *p++))
60: t = t * 10 + (c - '0');
61: if (c == '\0')
62: p--;
63: switch (c)
64: {
65: case 'w': /* weeks */
66: t *= 7;
67:
68: case 'd': /* days */
69: default:
70: t *= 24;
71:
72: case 'h': /* hours */
73: t *= 60;
74:
75: case 'm': /* minutes */
76: t *= 60;
77:
78: case 's': /* seconds */
79: break;
80: }
81: r += t;
82: }
83:
84: return (r);
85: }
86: /*
87: ** PINTVL -- produce printable version of a time interval
88: **
89: ** Parameters:
90: ** intvl -- the interval to be converted
91: ** brief -- if TRUE, print this in an extremely compact form
92: ** (basically used for logging).
93: **
94: ** Returns:
95: ** A pointer to a string version of intvl suitable for
96: ** printing or framing.
97: **
98: ** Side Effects:
99: ** none.
100: **
101: ** Warning:
102: ** The string returned is in a static buffer.
103: */
104:
105: # define PLURAL(n) ((n) == 1 ? "" : "s")
106:
107: char *
108: pintvl(intvl, brief)
109: time_t intvl;
110: bool brief;
111: {
112: static char buf[256];
113: register char *p;
114: int wk, dy, hr, mi, se;
115:
116: if (intvl == 0 && !brief)
117: return ("zero seconds");
118:
119: /* decode the interval into weeks, days, hours, minutes, seconds */
120: se = intvl % 60;
121: intvl /= 60;
122: mi = intvl % 60;
123: intvl /= 60;
124: hr = intvl % 24;
125: intvl /= 24;
126: if (brief)
127: dy = intvl;
128: else
129: {
130: dy = intvl % 7;
131: intvl /= 7;
132: wk = intvl;
133: }
134:
135: /* now turn it into a sexy form */
136: p = buf;
137: if (brief)
138: {
139: if (dy > 0)
140: {
141: (void) sprintf(p, "%d+", dy);
142: p += strlen(p);
143: }
144: (void) sprintf(p, "%02d:%02d:%02d", hr, mi, se);
145: return (buf);
146: }
147:
148: /* use the verbose form */
149: if (wk > 0)
150: {
151: (void) sprintf(p, ", %d week%s", wk, PLURAL(wk));
152: p += strlen(p);
153: }
154: if (dy > 0)
155: {
156: (void) sprintf(p, ", %d day%s", dy, PLURAL(dy));
157: p += strlen(p);
158: }
159: if (hr > 0)
160: {
161: (void) sprintf(p, ", %d hour%s", hr, PLURAL(hr));
162: p += strlen(p);
163: }
164: if (mi > 0)
165: {
166: (void) sprintf(p, ", %d minute%s", mi, PLURAL(mi));
167: p += strlen(p);
168: }
169: if (se > 0)
170: {
171: (void) sprintf(p, ", %d second%s", se, PLURAL(se));
172: p += strlen(p);
173: }
174:
175: return (buf + 2);
176: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.