⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcldate.c

📁 linux系统下的音频通信
💻 C
📖 第 1 页 / 共 4 页
字号:
/*  * tclDate.c -- * *	This file is generated from a yacc grammar defined in *	the file tclGetDate.y.  It should not be edited directly. * * Copyright (c) 1992-1995 Karl Lehenbauer and Mark Diekhans. * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * @(#) tclDate.c 1.32 97/02/03 14:54:37 */#include "tclInt.h"#include "tclPort.h"#ifdef MAC_TCL#   define EPOCH           1904#   define START_OF_TIME   1904#   define END_OF_TIME     2039#else#   define EPOCH           1970#   define START_OF_TIME   1902#   define END_OF_TIME     2037#endif/* * The offset of tm_year of struct tm returned by localtime, gmtime, etc. * I don't know how universal this is; K&R II, the NetBSD manpages, and * ../compat/strftime.c all agree that tm_year is the year-1900.  However, * some systems may have a different value.  This #define should be the * same as in ../compat/strftime.c. */#define TM_YEAR_BASE 1900#define HOUR(x)         ((int) (60 * x))#define SECSPERDAY      (24L * 60L * 60L)/* *  An entry in the lexical lookup table. */typedef struct _TABLE {    char        *name;    int         type;    time_t      value;} TABLE;/* *  Daylight-savings mode:  on, off, or not yet known. */typedef enum _DSTMODE {    DSTon, DSToff, DSTmaybe} DSTMODE;/* *  Meridian:  am, pm, or 24-hour style. */typedef enum _MERIDIAN {    MERam, MERpm, MER24} MERIDIAN;/* *  Global variables.  We could get rid of most of these by using a good *  union as the yacc stack.  (This routine was originally written before *  yacc had the %union construct.)  Maybe someday; right now we only use *  the %union very rarely. */static char     *TclDateInput;static DSTMODE  TclDateDSTmode;static time_t   TclDateDayOrdinal;static time_t   TclDateDayNumber;static int      TclDateHaveDate;static int      TclDateHaveDay;static int      TclDateHaveRel;static int      TclDateHaveTime;static int      TclDateHaveZone;static time_t   TclDateTimezone;static time_t   TclDateDay;static time_t   TclDateHour;static time_t   TclDateMinutes;static time_t   TclDateMonth;static time_t   TclDateSeconds;static time_t   TclDateYear;static MERIDIAN TclDateMeridian;static time_t   TclDateRelMonth;static time_t   TclDateRelSeconds;/* * Prototypes of internal functions. */static void	TclDateerror _ANSI_ARGS_((char *s));static time_t	ToSeconds _ANSI_ARGS_((time_t Hours, time_t Minutes,		    time_t Seconds, MERIDIAN Meridian));static int	Convert _ANSI_ARGS_((time_t Month, time_t Day, time_t Year,		    time_t Hours, time_t Minutes, time_t Seconds,		    MERIDIAN Meridia, DSTMODE DSTmode, time_t *TimePtr));static time_t	DSTcorrect _ANSI_ARGS_((time_t Start, time_t Future));static time_t	RelativeDate _ANSI_ARGS_((time_t Start, time_t DayOrdinal,		    time_t DayNumber));static int	RelativeMonth _ANSI_ARGS_((time_t Start, time_t RelMonth,		    time_t *TimePtr));static int	LookupWord _ANSI_ARGS_((char *buff));static int	TclDatelex _ANSI_ARGS_((void));intTclDateparse _ANSI_ARGS_((void));typedef union#ifdef __cplusplus	YYSTYPE#endif {    time_t              Number;    enum _MERIDIAN      Meridian;} YYSTYPE;# define tAGO 257# define tDAY 258# define tDAYZONE 259# define tID 260# define tMERIDIAN 261# define tMINUTE_UNIT 262# define tMONTH 263# define tMONTH_UNIT 264# define tSEC_UNIT 265# define tSNUMBER 266# define tUNUMBER 267# define tZONE 268# define tEPOCH 269# define tDST 270#ifdef __cplusplus#ifndef TclDateerror	void TclDateerror(const char *);#endif#ifndef TclDatelex#ifdef __EXTERN_C__	extern "C" { int TclDatelex(void); }#else	int TclDatelex(void);#endif#endif	int TclDateparse(void);#endif#define TclDateclearin TclDatechar = -1#define TclDateerrok TclDateerrflag = 0extern int TclDatechar;extern int TclDateerrflag;YYSTYPE TclDatelval;YYSTYPE TclDateval;typedef int TclDatetabelem;#ifndef YYMAXDEPTH#define YYMAXDEPTH 150#endif#if YYMAXDEPTH > 0int TclDate_TclDates[YYMAXDEPTH], *TclDates = TclDate_TclDates;YYSTYPE TclDate_TclDatev[YYMAXDEPTH], *TclDatev = TclDate_TclDatev;#else	/* user does initial allocation */int *TclDates;YYSTYPE *TclDatev;#endifstatic int TclDatemaxdepth = YYMAXDEPTH;# define YYERRCODE 256/* * Month and day table. */static TABLE    MonthDayTable[] = {    { "january",        tMONTH,  1 },    { "february",       tMONTH,  2 },    { "march",          tMONTH,  3 },    { "april",          tMONTH,  4 },    { "may",            tMONTH,  5 },    { "june",           tMONTH,  6 },    { "july",           tMONTH,  7 },    { "august",         tMONTH,  8 },    { "september",      tMONTH,  9 },    { "sept",           tMONTH,  9 },    { "october",        tMONTH, 10 },    { "november",       tMONTH, 11 },    { "december",       tMONTH, 12 },    { "sunday",         tDAY, 0 },    { "monday",         tDAY, 1 },    { "tuesday",        tDAY, 2 },    { "tues",           tDAY, 2 },    { "wednesday",      tDAY, 3 },    { "wednes",         tDAY, 3 },    { "thursday",       tDAY, 4 },    { "thur",           tDAY, 4 },    { "thurs",          tDAY, 4 },    { "friday",         tDAY, 5 },    { "saturday",       tDAY, 6 },    { NULL }};/* * Time units table. */static TABLE    UnitsTable[] = {    { "year",           tMONTH_UNIT,    12 },    { "month",          tMONTH_UNIT,    1 },    { "fortnight",      tMINUTE_UNIT,   14 * 24 * 60 },    { "week",           tMINUTE_UNIT,   7 * 24 * 60 },    { "day",            tMINUTE_UNIT,   1 * 24 * 60 },    { "hour",           tMINUTE_UNIT,   60 },    { "minute",         tMINUTE_UNIT,   1 },    { "min",            tMINUTE_UNIT,   1 },    { "second",         tSEC_UNIT,      1 },    { "sec",            tSEC_UNIT,      1 },    { NULL }};/* * Assorted relative-time words. */static TABLE    OtherTable[] = {    { "tomorrow",       tMINUTE_UNIT,   1 * 24 * 60 },    { "yesterday",      tMINUTE_UNIT,   -1 * 24 * 60 },    { "today",          tMINUTE_UNIT,   0 },    { "now",            tMINUTE_UNIT,   0 },    { "last",           tUNUMBER,       -1 },    { "this",           tMINUTE_UNIT,   0 },    { "next",           tUNUMBER,       2 },#if 0    { "first",          tUNUMBER,       1 },/*  { "second",         tUNUMBER,       2 }, */    { "third",          tUNUMBER,       3 },    { "fourth",         tUNUMBER,       4 },    { "fifth",          tUNUMBER,       5 },    { "sixth",          tUNUMBER,       6 },    { "seventh",        tUNUMBER,       7 },    { "eighth",         tUNUMBER,       8 },    { "ninth",          tUNUMBER,       9 },    { "tenth",          tUNUMBER,       10 },    { "eleventh",       tUNUMBER,       11 },    { "twelfth",        tUNUMBER,       12 },#endif    { "ago",            tAGO,   1 },    { "epoch",          tEPOCH,   0 },    { NULL }};/* * The timezone table.  (Note: This table was modified to not use any floating * point constants to work around an SGI compiler bug). */static TABLE    TimezoneTable[] = {    { "gmt",    tZONE,     HOUR( 0) },      /* Greenwich Mean */    { "ut",     tZONE,     HOUR( 0) },      /* Universal (Coordinated) */    { "utc",    tZONE,     HOUR( 0) },    { "wet",    tZONE,     HOUR( 0) } ,     /* Western European */    { "bst",    tDAYZONE,  HOUR( 0) },      /* British Summer */    { "wat",    tZONE,     HOUR( 1) },      /* West Africa */    { "at",     tZONE,     HOUR( 2) },      /* Azores */#if     0    /* For completeness.  BST is also British Summer, and GST is     * also Guam Standard. */    { "bst",    tZONE,     HOUR( 3) },      /* Brazil Standard */    { "gst",    tZONE,     HOUR( 3) },      /* Greenland Standard */#endif    { "nft",    tZONE,     HOUR( 7/2) },    /* Newfoundland */    { "nst",    tZONE,     HOUR( 7/2) },    /* Newfoundland Standard */    { "ndt",    tDAYZONE,  HOUR( 7/2) },    /* Newfoundland Daylight */    { "ast",    tZONE,     HOUR( 4) },      /* Atlantic Standard */    { "adt",    tDAYZONE,  HOUR( 4) },      /* Atlantic Daylight */    { "est",    tZONE,     HOUR( 5) },      /* Eastern Standard */    { "edt",    tDAYZONE,  HOUR( 5) },      /* Eastern Daylight */    { "cst",    tZONE,     HOUR( 6) },      /* Central Standard */    { "cdt",    tDAYZONE,  HOUR( 6) },      /* Central Daylight */    { "mst",    tZONE,     HOUR( 7) },      /* Mountain Standard */    { "mdt",    tDAYZONE,  HOUR( 7) },      /* Mountain Daylight */    { "pst",    tZONE,     HOUR( 8) },      /* Pacific Standard */    { "pdt",    tDAYZONE,  HOUR( 8) },      /* Pacific Daylight */    { "yst",    tZONE,     HOUR( 9) },      /* Yukon Standard */    { "ydt",    tDAYZONE,  HOUR( 9) },      /* Yukon Daylight */    { "hst",    tZONE,     HOUR(10) },      /* Hawaii Standard */    { "hdt",    tDAYZONE,  HOUR(10) },      /* Hawaii Daylight */    { "cat",    tZONE,     HOUR(10) },      /* Central Alaska */    { "ahst",   tZONE,     HOUR(10) },      /* Alaska-Hawaii Standard */    { "nt",     tZONE,     HOUR(11) },      /* Nome */    { "idlw",   tZONE,     HOUR(12) },      /* International Date Line West */    { "cet",    tZONE,    -HOUR( 1) },      /* Central European */    { "met",    tZONE,    -HOUR( 1) },      /* Middle European */    { "mewt",   tZONE,    -HOUR( 1) },      /* Middle European Winter */    { "mest",   tDAYZONE, -HOUR( 1) },      /* Middle European Summer */    { "swt",    tZONE,    -HOUR( 1) },      /* Swedish Winter */    { "sst",    tDAYZONE, -HOUR( 1) },      /* Swedish Summer */    { "fwt",    tZONE,    -HOUR( 1) },      /* French Winter */    { "fst",    tDAYZONE, -HOUR( 1) },      /* French Summer */    { "eet",    tZONE,    -HOUR( 2) },      /* Eastern Europe, USSR Zone 1 */    { "bt",     tZONE,    -HOUR( 3) },      /* Baghdad, USSR Zone 2 */    { "it",     tZONE,    -HOUR( 7/2) },    /* Iran */    { "zp4",    tZONE,    -HOUR( 4) },      /* USSR Zone 3 */    { "zp5",    tZONE,    -HOUR( 5) },      /* USSR Zone 4 */    { "ist",    tZONE,    -HOUR(11/2) },    /* Indian Standard */    { "zp6",    tZONE,    -HOUR( 6) },      /* USSR Zone 5 */#if     0    /* For completeness.  NST is also Newfoundland Stanard, nad SST is     * also Swedish Summer. */    { "nst",    tZONE,    -HOUR(13/2) },    /* North Sumatra */    { "sst",    tZONE,    -HOUR( 7) },      /* South Sumatra, USSR Zone 6 */#endif  /* 0 */    { "wast",   tZONE,    -HOUR( 7) },      /* West Australian Standard */    { "wadt",   tDAYZONE, -HOUR( 7) },      /* West Australian Daylight */    { "jt",     tZONE,    -HOUR(15/2) },    /* Java (3pm in Cronusland!) */    { "cct",    tZONE,    -HOUR( 8) },      /* China Coast, USSR Zone 7 */    { "jst",    tZONE,    -HOUR( 9) },      /* Japan Standard, USSR Zone 8 */    { "cast",   tZONE,    -HOUR(19/2) },    /* Central Australian Standard */    { "cadt",   tDAYZONE, -HOUR(19/2) },    /* Central Australian Daylight */    { "east",   tZONE,    -HOUR(10) },      /* Eastern Australian Standard */    { "eadt",   tDAYZONE, -HOUR(10) },      /* Eastern Australian Daylight */    { "gst",    tZONE,    -HOUR(10) },      /* Guam Standard, USSR Zone 9 */    { "nzt",    tZONE,    -HOUR(12) },      /* New Zealand */    { "nzst",   tZONE,    -HOUR(12) },      /* New Zealand Standard */    { "nzdt",   tDAYZONE, -HOUR(12) },      /* New Zealand Daylight */    { "idle",   tZONE,    -HOUR(12) },      /* International Date Line East */    /* ADDED BY Marco Nijdam */    { "dst",    tDST,     HOUR( 0) },       /* DST on (hour is ignored) */    /* End ADDED */    {  NULL  }};/* * Military timezone table. */static TABLE    MilitaryTable[] = {    { "a",      tZONE,  HOUR(  1) },    { "b",      tZONE,  HOUR(  2) },    { "c",      tZONE,  HOUR(  3) },    { "d",      tZONE,  HOUR(  4) },    { "e",      tZONE,  HOUR(  5) },    { "f",      tZONE,  HOUR(  6) },    { "g",      tZONE,  HOUR(  7) },    { "h",      tZONE,  HOUR(  8) },    { "i",      tZONE,  HOUR(  9) },    { "k",      tZONE,  HOUR( 10) },    { "l",      tZONE,  HOUR( 11) },    { "m",      tZONE,  HOUR( 12) },    { "n",      tZONE,  HOUR(- 1) },    { "o",      tZONE,  HOUR(- 2) },    { "p",      tZONE,  HOUR(- 3) },    { "q",      tZONE,  HOUR(- 4) },    { "r",      tZONE,  HOUR(- 5) },    { "s",      tZONE,  HOUR(- 6) },    { "t",      tZONE,  HOUR(- 7) },    { "u",      tZONE,  HOUR(- 8) },    { "v",      tZONE,  HOUR(- 9) },    { "w",      tZONE,  HOUR(-10) },    { "x",      tZONE,  HOUR(-11) },    { "y",      tZONE,  HOUR(-12) },    { "z",      tZONE,  HOUR(  0) },    { NULL }};/* * Dump error messages in the bit bucket. */static voidTclDateerror(s)    char  *s;{}static time_tToSeconds(Hours, Minutes, Seconds, Meridian)    time_t      Hours;    time_t      Minutes;    time_t      Seconds;    MERIDIAN    Meridian;{    if (Minutes < 0 || Minutes > 59 || Seconds < 0 || Seconds > 59)        return -1;    switch (Meridian) {    case MER24:        if (Hours < 0 || Hours > 23)            return -1;        return (Hours * 60L + Minutes) * 60L + Seconds;    case MERam:        if (Hours < 1 || Hours > 12)            return -1;        return ((Hours % 12) * 60L + Minutes) * 60L + Seconds;    case MERpm:        if (Hours < 1 || Hours > 12)            return -1;        return (((Hours % 12) + 12) * 60L + Minutes) * 60L + Seconds;    }    return -1;  /* Should never be reached */}static intConvert(Month, Day, Year, Hours, Minutes, Seconds, Meridian, DSTmode, TimePtr)    time_t      Month;    time_t      Day;    time_t      Year;    time_t      Hours;    time_t      Minutes;    time_t      Seconds;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -