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 |
|
---|
36 | struct 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 |
|
---|
76 | char *partime __PARTIME_P ((char const *, struct partime *));
|
---|
77 | char *parzone __PARTIME_P ((char const *, long *));
|
---|