xref: /freebsd/crypto/heimdal/lib/roken/parse_time.3 (revision 6a068746777241722b2b32c5d0bc443a2a64d80b)
1*ae771770SStanislav Sedov.\" Copyright (c) 2004 Kungliga Tekniska Högskolan
2c19800e8SDoug Rabson.\" (Royal Institute of Technology, Stockholm, Sweden).
3c19800e8SDoug Rabson.\" All rights reserved.
4c19800e8SDoug Rabson.\"
5c19800e8SDoug Rabson.\" Redistribution and use in source and binary forms, with or without
6c19800e8SDoug Rabson.\" modification, are permitted provided that the following conditions
7c19800e8SDoug Rabson.\" are met:
8c19800e8SDoug Rabson.\"
9c19800e8SDoug Rabson.\" 1. Redistributions of source code must retain the above copyright
10c19800e8SDoug Rabson.\"    notice, this list of conditions and the following disclaimer.
11c19800e8SDoug Rabson.\"
12c19800e8SDoug Rabson.\" 2. Redistributions in binary form must reproduce the above copyright
13c19800e8SDoug Rabson.\"    notice, this list of conditions and the following disclaimer in the
14c19800e8SDoug Rabson.\"    documentation and/or other materials provided with the distribution.
15c19800e8SDoug Rabson.\"
16c19800e8SDoug Rabson.\" 3. Neither the name of the Institute nor the names of its contributors
17c19800e8SDoug Rabson.\"    may be used to endorse or promote products derived from this software
18c19800e8SDoug Rabson.\"    without specific prior written permission.
19c19800e8SDoug Rabson.\"
20c19800e8SDoug Rabson.\" THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
21c19800e8SDoug Rabson.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22c19800e8SDoug Rabson.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23c19800e8SDoug Rabson.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
24c19800e8SDoug Rabson.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25c19800e8SDoug Rabson.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26c19800e8SDoug Rabson.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27c19800e8SDoug Rabson.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28c19800e8SDoug Rabson.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29c19800e8SDoug Rabson.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30c19800e8SDoug Rabson.\" SUCH DAMAGE.
31*ae771770SStanislav Sedov.\" $Id$
32c19800e8SDoug Rabson.\"
33c19800e8SDoug Rabson.Dd October 31, 2004
34c19800e8SDoug Rabson.Dt PARSE_TIME 3
35c19800e8SDoug Rabson.Os HEIMDAL
36c19800e8SDoug Rabson.Sh NAME
37c19800e8SDoug Rabson.Nm parse_time ,
38c19800e8SDoug Rabson.Nm print_time_table ,
39c19800e8SDoug Rabson.Nm unparse_time ,
40c19800e8SDoug Rabson.Nm unparse_time_approx ,
41c19800e8SDoug Rabson.Nd parse and unparse time intervals
42c19800e8SDoug Rabson.Sh LIBRARY
43c19800e8SDoug RabsonThe roken library (libroken, -lroken)
44c19800e8SDoug Rabson.Sh SYNOPSIS
45c19800e8SDoug Rabson.Fd #include <parse_time.h>
46c19800e8SDoug Rabson.Ft int
47c19800e8SDoug Rabson.Fn parse_time "const char *timespec" "const char *def_unit"
48c19800e8SDoug Rabson.Ft void
49c19800e8SDoug Rabson.Fn print_time_table "FILE *f"
50c19800e8SDoug Rabson.Ft size_t
51c19800e8SDoug Rabson.Fn unparse_time "int seconds" "char *buf" "size_t len"
52c19800e8SDoug Rabson.Ft size_t
53c19800e8SDoug Rabson.Fn unparse_time_approx "int seconds" "char *buf" "size_t len"
54c19800e8SDoug Rabson.Sh DESCRIPTION
55c19800e8SDoug RabsonThe
56c19800e8SDoug Rabson.Fn parse_time
57c19800e8SDoug Rabsonfunction converts a the period of time specified in
58c19800e8SDoug Rabsoninto a number of seconds.
59c19800e8SDoug RabsonThe
60c19800e8SDoug Rabson.Fa timespec
61c19800e8SDoug Rabsoncan be any number of
62c19800e8SDoug Rabson.Aq number unit
63c19800e8SDoug Rabsonpairs separated by comma and whitespace. The number can be
64c19800e8SDoug Rabsonnegative. Number without explicit units are taken as being
65c19800e8SDoug Rabson.Fa def_unit .
66c19800e8SDoug Rabson.Pp
67c19800e8SDoug RabsonThe
68c19800e8SDoug Rabson.Fn unparse_time
69c19800e8SDoug Rabsonand
70c19800e8SDoug Rabson.Fn unparse_time_approx
71c19800e8SDoug Rabsondoes the opposite of
72c19800e8SDoug Rabson.Fn parse_time ,
73c19800e8SDoug Rabsonthat is they take a number of seconds and express that as human
74c19800e8SDoug Rabsonreadable string.
75c19800e8SDoug Rabson.Fa unparse_time
76c19800e8SDoug Rabsonproduces an exact time, while
77c19800e8SDoug Rabson.Fa unparse_time_approx
78c19800e8SDoug Rabsonrestricts the result to only include one units.
79c19800e8SDoug Rabson.Pp
80c19800e8SDoug Rabson.Fn print_time_table
81c19800e8SDoug Rabsonprints a descriptive list of available units on the passed file
82c19800e8SDoug Rabsondescriptor.
83c19800e8SDoug Rabson.Pp
84c19800e8SDoug RabsonThe possible units include:
85c19800e8SDoug Rabson.Bl -tag -width "month" -compact -offset indent
86c19800e8SDoug Rabson.It Li second , s
87c19800e8SDoug Rabson.It Li minute , m
88c19800e8SDoug Rabson.It Li hour , h
89c19800e8SDoug Rabson.It day
90c19800e8SDoug Rabson.It week
91c19800e8SDoug Rabsonseven days
92c19800e8SDoug Rabson.It month
93c19800e8SDoug Rabson30 days
94c19800e8SDoug Rabson.It year
95c19800e8SDoug Rabson365 days
96c19800e8SDoug Rabson.El
97c19800e8SDoug Rabson.Pp
98c19800e8SDoug RabsonUnits names can be arbitrarily abbreviated (as long as they are
99c19800e8SDoug Rabsonunique).
100c19800e8SDoug Rabson.Sh RETURN VALUES
101c19800e8SDoug Rabson.Fn parse_time
102c19800e8SDoug Rabsonreturns the number of seconds that represents the expression in
103c19800e8SDoug Rabson.Fa timespec
104c19800e8SDoug Rabsonor -1 on error.
105c19800e8SDoug Rabson.Fn unparse_time
106c19800e8SDoug Rabsonand
107c19800e8SDoug Rabson.Fn unparse_time_approx
108c19800e8SDoug Rabsonreturn the number of characters written to
109c19800e8SDoug Rabson.Fa buf .
110c19800e8SDoug Rabsonif the return value is greater than or equal to the
111c19800e8SDoug Rabson.Fa len
112c19800e8SDoug Rabsonargument, the string was too short and some of the printed characters
113c19800e8SDoug Rabsonwere discarded.
114c19800e8SDoug Rabson.Sh EXAMPLES
115c19800e8SDoug Rabson.Bd -literal
116c19800e8SDoug Rabson#include <stdio.h>
117c19800e8SDoug Rabson#include <parse_time.h>
118c19800e8SDoug Rabson
119c19800e8SDoug Rabsonint
120c19800e8SDoug Rabsonmain(int argc, char **argv)
121c19800e8SDoug Rabson{
122c19800e8SDoug Rabson    int i;
123c19800e8SDoug Rabson    int result;
124c19800e8SDoug Rabson    char buf[128];
125c19800e8SDoug Rabson    print_time_table(stdout);
126c19800e8SDoug Rabson    for (i = 1; i < argc; i++) {
127c19800e8SDoug Rabson	result = parse_time(argv[i], "second");
128c19800e8SDoug Rabson	if(result == -1) {
129c19800e8SDoug Rabson	    fprintf(stderr, "%s: parse error\\n", argv[i]);
130c19800e8SDoug Rabson	    continue;
131c19800e8SDoug Rabson	}
132c19800e8SDoug Rabson	printf("--\\n");
133c19800e8SDoug Rabson	printf("parse_time = %d\\n", result);
134c19800e8SDoug Rabson	unparse_time(result, buf, sizeof(buf));
135c19800e8SDoug Rabson	printf("unparse_time = %s\\n", buf);
136c19800e8SDoug Rabson	unparse_time_approx(result, buf, sizeof(buf));
137c19800e8SDoug Rabson	printf("unparse_time_approx = %s\\n", buf);
138c19800e8SDoug Rabson    }
139c19800e8SDoug Rabson    return 0;
140c19800e8SDoug Rabson}
141c19800e8SDoug Rabson.Ed
142c19800e8SDoug Rabson.Bd -literal
143c19800e8SDoug Rabson$ ./a.out "1 minute 30 seconds" "90 s" "1 y -1 s"
144c19800e8SDoug Rabson1   year = 365 days
145c19800e8SDoug Rabson1  month = 30 days
146c19800e8SDoug Rabson1   week = 7 days
147c19800e8SDoug Rabson1    day = 24 hours
148c19800e8SDoug Rabson1   hour = 60 minutes
149c19800e8SDoug Rabson1 minute = 60 seconds
150c19800e8SDoug Rabson1 second
151c19800e8SDoug Rabson--
152c19800e8SDoug Rabsonparse_time = 90
153c19800e8SDoug Rabsonunparse_time = 1 minute 30 seconds
154c19800e8SDoug Rabsonunparse_time_approx = 1 minute
155c19800e8SDoug Rabson--
156c19800e8SDoug Rabsonparse_time = 90
157c19800e8SDoug Rabsonunparse_time = 1 minute 30 seconds
158c19800e8SDoug Rabsonunparse_time_approx = 1 minute
159c19800e8SDoug Rabson--
160c19800e8SDoug Rabsonparse_time = 31535999
161c19800e8SDoug Rabsonunparse_time = 12 months 4 days 23 hours 59 minutes 59 seconds
162c19800e8SDoug Rabsonunparse_time_approx = 12 months
163c19800e8SDoug Rabson.Ed
164c19800e8SDoug Rabson.Sh BUGS
165c19800e8SDoug RabsonSince
166c19800e8SDoug Rabson.Fn parse_time
167c19800e8SDoug Rabsonreturns -1 on error there is no way to parse "minus one second".
168c19800e8SDoug RabsonCurrently "s" at the end of units is ignored. This is a hack for
169c19800e8SDoug RabsonEnglish plural forms. If these functions are ever localised, this
170c19800e8SDoug Rabsonscheme will have to change.
171c19800e8SDoug Rabson.\".Sh SEE ALSO
172c19800e8SDoug Rabson.\".Xr parse_bytes 3
173c19800e8SDoug Rabson.\".Xr parse_units 3
174