1/* Parse a string, yielding a struct partime that describes it.  */
2
3/* Copyright 1993, 1994, 1995, 1997 Paul Eggert
4   Distributed under license by the Free Software Foundation, Inc.
5
6   This file is part of RCS.
7
8   RCS is free software; you can redistribute it and/or modify
9   it under the terms of the GNU General Public License as published by
10   the Free Software Foundation; either version 2, or (at your option)
11   any later version.
12
13   RCS is distributed in the hope that it will be useful,
14   but WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16   GNU General Public License for more details.
17
18   You should have received a copy of the GNU General Public License
19   along with RCS; see the file COPYING.
20   If not, write to the Free Software Foundation,
21   59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22
23   Report problems and direct all questions to:
24
25   rcs-bugs@cs.purdue.edu
26
27 */
28
29#define TM_UNDEFINED (-1)
30#define TM_DEFINED(x) (0 <= (x))
31
32/* #include <limits.h> if you want to use these symbols.  */
33#define TM_LOCAL_ZONE LONG_MIN
34#define TM_UNDEFINED_ZONE (LONG_MIN + 1)
35
36struct partime
37  {
38    /* This structure describes the parsed time.
39       Only the following tm_* members are used:
40		sec, min, hour, mday, mon, year, wday, yday.
41       If ! TM_DEFINED (value), the parser never found the value.
42       The tm_year field is the actual year, not the year - 1900;
43       but see ymodulus below.  */
44    struct tm tm;
45
46    /* Like tm, but values are relative to the value in tm,
47       and values are initialized to 0 rather than to TM_UNDEFINED.
48       Only the following tm_* members are used:
49		sec, min, hour, mday, mon, year.  */
50    struct tm tmr;
51
52    /* If TM_DEFINED (wday_ordinal),
53       then day number (e.g. 3 in "3rd Sunday").  */
54    int wday_ordinal;
55
56    /* If TM_DEFINED (ymodulus),
57       then tm.tm_year is actually modulo ymodulus.  */
58    int ymodulus;
59
60    /* Week of year, ISO 8601 style.
61       If ! TM_DEFINED (yweek), the parser never found yweek.
62       Weeks start on Mondays.
63       Week 1 includes Jan 4.  */
64    int yweek;
65
66    /* Seconds east of UTC; or TM_LOCAL_ZONE or TM_UNDEFINED_ZONE.  */
67    long zone;
68  };
69
70#if defined __STDC__ || has_prototypes
71# define __PARTIME_P(x) x
72#else
73# define __PARTIME_P(x) ()
74#endif
75
76char *partime __PARTIME_P ((char const *, struct partime *));
77char *parzone __PARTIME_P ((char const *, long *));
78