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