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