rh

Hex Artifact Content
Login

Artifact 48612c3c59682b7d55c8c2ca22c91a91d7715830029f728bd74100c14451b8c6:


0000: 25 74 6f 6b 65 6e 20 49 44 20 4d 4f 4e 54 48 20  %token ID MONTH 
0010: 44 41 59 20 4d 45 52 49 44 49 41 4e 20 4e 55 4d  DAY MERIDIAN NUM
0020: 42 45 52 20 55 4e 49 54 20 4d 55 4e 49 54 20 53  BER UNIT MUNIT S
0030: 55 4e 49 54 20 5a 4f 4e 45 20 44 41 59 5a 4f 4e  UNIT ZONE DAYZON
0040: 45 20 41 47 4f 0a 25 7b 0a 09 2f 2a 20 67 65 74  E AGO.%{../* get
0050: 64 61 74 65 2e 79 09 09 09 09 09 09 2a 2f 0a 09  date.y......*/..
0060: 2f 2a 09 09 09 09 09 09 09 2a 2f 0a 09 2f 2a 20  /*.......*/../* 
0070: 09 53 74 65 76 65 6e 20 4d 2e 20 42 65 6c 6c 6f  .Steven M. Bello
0080: 76 69 6e 20 28 75 6e 63 21 73 6d 62 29 09 09 09  vin (unc!smb)...
0090: 2a 2f 0a 09 2f 2a 09 44 65 70 74 2e 20 6f 66 20  */../*.Dept. of 
00a0: 43 6f 6d 70 75 74 65 72 20 53 63 69 65 6e 63 65  Computer Science
00b0: 09 09 09 2a 2f 0a 09 2f 2a 09 55 6e 69 76 65 72  ...*/../*.Univer
00c0: 73 69 74 79 20 6f 66 20 4e 6f 72 74 68 20 43 61  sity of North Ca
00d0: 72 6f 6c 69 6e 61 20 61 74 20 43 68 61 70 65 6c  rolina at Chapel
00e0: 20 48 69 6c 6c 09 2a 2f 0a 09 2f 2a 09 40 28 23   Hill.*/../*.@(#
00f0: 29 67 65 74 64 61 74 65 2e 79 09 32 2e 31 33 09  )getdate.y.2.13.
0100: 39 2f 31 36 2f 38 36 09 09 09 2a 2f 0a 0a 23 69  9/16/86...*/..#i
0110: 66 20 21 64 65 66 69 6e 65 64 28 6c 69 6e 74 29  f !defined(lint)
0120: 0a 73 74 61 74 69 63 20 63 68 61 72 20 72 63 73  .static char rcs
0130: 69 64 5b 5d 20 3d 20 22 24 49 64 3a 20 67 65 74  id[] = "$Id: get
0140: 64 61 74 65 2e 79 2c 76 20 31 2e 31 20 31 39 39  date.y,v 1.1 199
0150: 34 2f 30 31 2f 31 32 20 31 39 3a 33 35 3a 35 34  4/01/12 19:35:54
0160: 20 72 69 63 6b 20 45 78 70 20 24 22 3b 0a 23 65   rick Exp $";.#e
0170: 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 3c  ndif..#include <
0180: 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64  stdio.h>.#includ
0190: 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e  e <stdlib.h>.#in
01a0: 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e  clude <string.h>
01b0: 0a 23 69 6e 63 6c 75 64 65 20 3c 74 69 6d 65 2e  .#include <time.
01c0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73  h>.#include <sys
01d0: 2f 74 79 70 65 73 2e 68 3e 0a 23 69 6e 63 6c 75  /types.h>.#inclu
01e0: 64 65 20 3c 73 79 73 2f 74 69 6d 65 62 2e 68 3e  de <sys/timeb.h>
01f0: 0a 23 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65  .#include <ctype
0200: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79  .h>.#include <sy
0210: 73 2f 74 79 70 65 73 2e 68 3e 0a 23 69 6e 63 6c  s/types.h>.#incl
0220: 75 64 65 20 3c 73 79 73 2f 74 69 6d 65 2e 68 3e  ude <sys/time.h>
0230: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 74  .#include <sys/t
0240: 69 6d 65 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  imeb.h>.#include
0250: 20 22 67 65 74 64 61 74 65 2e 68 22 0a 0a 23 64   "getdate.h"..#d
0260: 65 66 69 6e 65 20 64 61 79 73 65 63 20 28 32 34  efine daysec (24
0270: 4c 2a 36 30 4c 2a 36 30 4c 29 0a 0a 73 74 61 74  L*60L*60L)..stat
0280: 69 63 20 69 6e 74 20 74 69 6d 65 66 6c 61 67 2c  ic int timeflag,
0290: 20 7a 6f 6e 65 66 6c 61 67 2c 20 64 61 74 65 66   zoneflag, datef
02a0: 6c 61 67 2c 20 64 61 79 66 6c 61 67 2c 20 72 65  lag, dayflag, re
02b0: 6c 66 6c 61 67 3b 0a 73 74 61 74 69 63 20 74 69  lflag;.static ti
02c0: 6d 65 5f 74 20 72 65 6c 73 65 63 2c 20 72 65 6c  me_t relsec, rel
02d0: 6d 6f 6e 74 68 3b 0a 73 74 61 74 69 63 20 69 6e  month;.static in
02e0: 74 20 68 68 2c 20 6d 6d 2c 20 73 73 2c 20 6d 65  t hh, mm, ss, me
02f0: 72 69 64 2c 20 64 79 6c 69 67 68 74 3b 0a 73 74  rid, dylight;.st
0300: 61 74 69 63 20 69 6e 74 20 64 61 79 6f 72 64 2c  atic int dayord,
0310: 20 64 61 79 72 65 71 3b 0a 73 74 61 74 69 63 20   dayreq;.static 
0320: 69 6e 74 20 6d 6f 6e 74 68 2c 20 64 61 79 2c 20  int month, day, 
0330: 79 65 61 72 3b 0a 73 74 61 74 69 63 20 69 6e 74  year;.static int
0340: 20 6f 75 72 7a 6f 6e 65 3b 0a 0a 23 64 65 66 69   ourzone;..#defi
0350: 6e 65 20 41 4d 20 31 0a 23 64 65 66 69 6e 65 20  ne AM 1.#define 
0360: 50 4d 20 32 0a 23 64 65 66 69 6e 65 20 44 41 59  PM 2.#define DAY
0370: 4c 49 47 48 54 20 31 0a 23 64 65 66 69 6e 65 20  LIGHT 1.#define 
0380: 53 54 41 4e 44 41 52 44 20 32 0a 23 64 65 66 69  STANDARD 2.#defi
0390: 6e 65 20 4d 41 59 42 45 20 20 20 20 33 0a 0a 73  ne MAYBE    3..s
03a0: 74 61 74 69 63 20 69 6e 74 20 67 64 5f 6c 65 78  tatic int gd_lex
03b0: 28 29 2c 20 6c 6f 6f 6b 75 70 28 29 3b 0a 73 74  (), lookup();.st
03c0: 61 74 69 63 20 74 69 6d 65 5f 74 20 74 69 6d 65  atic time_t time
03d0: 63 6f 6e 76 28 29 2c 20 64 61 79 6c 63 6f 72 72  conv(), daylcorr
03e0: 28 29 2c 20 64 61 74 65 63 6f 6e 76 28 29 2c 20  (), dateconv(), 
03f0: 64 61 79 6c 63 6f 72 72 28 29 3b 0a 0a 25 7d 0a  daylcorr();..%}.
0400: 0a 25 25 0a 74 69 6d 65 64 61 74 65 3a 20 09 09  .%%.timedate: ..
0410: 2f 2a 20 65 6d 70 74 79 20 2a 2f 0a 09 7c 20 74  /* empty */..| t
0420: 69 6d 65 64 61 74 65 20 69 74 65 6d 3b 0a 0a 69  imedate item;..i
0430: 74 65 6d 3a 09 74 73 70 65 63 20 3d 0a 09 09 7b  tem:.tspec =...{
0440: 74 69 6d 65 66 6c 61 67 2b 2b 3b 7d 0a 09 7c 20  timeflag++;}..| 
0450: 7a 6f 6e 65 20 3d 0a 09 09 7b 7a 6f 6e 65 66 6c  zone =...{zonefl
0460: 61 67 2b 2b 3b 7d 0a 09 7c 20 64 74 73 70 65 63  ag++;}..| dtspec
0470: 20 3d 0a 09 09 7b 64 61 74 65 66 6c 61 67 2b 2b   =...{dateflag++
0480: 3b 7d 0a 09 7c 20 64 79 73 70 65 63 20 3d 0a 09  ;}..| dyspec =..
0490: 09 7b 64 61 79 66 6c 61 67 2b 2b 3b 7d 0a 09 7c  .{dayflag++;}..|
04a0: 20 72 73 70 65 63 20 3d 0a 09 09 7b 72 65 6c 66   rspec =...{relf
04b0: 6c 61 67 2b 2b 3b 7d 0a 09 7c 20 6e 73 70 65 63  lag++;}..| nspec
04c0: 3b 0a 0a 6e 73 70 65 63 3a 09 4e 55 4d 42 45 52  ;..nspec:.NUMBER
04d0: 20 3d 0a 09 09 7b 69 66 20 28 74 69 6d 65 66 6c   =...{if (timefl
04e0: 61 67 20 26 26 20 64 61 74 65 66 6c 61 67 20 26  ag && dateflag &
04f0: 26 20 21 72 65 6c 66 6c 61 67 29 20 79 65 61 72  & !relflag) year
0500: 20 3d 20 24 31 3b 0a 09 09 65 6c 73 65 20 7b 74   = $1;...else {t
0510: 69 6d 65 66 6c 61 67 2b 2b 3b 68 68 20 3d 20 24  imeflag++;hh = $
0520: 31 2f 31 30 30 3b 6d 6d 20 3d 20 24 31 25 31 30  1/100;mm = $1%10
0530: 30 3b 73 73 20 3d 20 30 3b 6d 65 72 69 64 20 3d  0;ss = 0;merid =
0540: 20 32 34 3b 7d 7d 3b 0a 0a 74 73 70 65 63 3a 09   24;}};..tspec:.
0550: 4e 55 4d 42 45 52 20 4d 45 52 49 44 49 41 4e 20  NUMBER MERIDIAN 
0560: 3d 0a 09 09 7b 68 68 20 3d 20 24 31 3b 20 6d 6d  =...{hh = $1; mm
0570: 20 3d 20 30 3b 20 73 73 20 3d 20 30 3b 20 6d 65   = 0; ss = 0; me
0580: 72 69 64 20 3d 20 24 32 3b 7d 0a 09 7c 20 4e 55  rid = $2;}..| NU
0590: 4d 42 45 52 20 27 3a 27 20 4e 55 4d 42 45 52 20  MBER ':' NUMBER 
05a0: 3d 0a 09 09 7b 68 68 20 3d 20 24 31 3b 20 6d 6d  =...{hh = $1; mm
05b0: 20 3d 20 24 33 3b 20 6d 65 72 69 64 20 3d 20 32   = $3; merid = 2
05c0: 34 3b 7d 0a 09 7c 20 4e 55 4d 42 45 52 20 27 3a  4;}..| NUMBER ':
05d0: 27 20 4e 55 4d 42 45 52 20 4d 45 52 49 44 49 41  ' NUMBER MERIDIA
05e0: 4e 20 3d 0a 09 09 7b 68 68 20 3d 20 24 31 3b 20  N =...{hh = $1; 
05f0: 6d 6d 20 3d 20 24 33 3b 20 6d 65 72 69 64 20 3d  mm = $3; merid =
0600: 20 24 34 3b 7d 0a 09 7c 20 4e 55 4d 42 45 52 20   $4;}..| NUMBER 
0610: 27 3a 27 20 4e 55 4d 42 45 52 20 4e 55 4d 42 45  ':' NUMBER NUMBE
0620: 52 20 3d 0a 09 09 7b 68 68 20 3d 20 24 31 3b 20  R =...{hh = $1; 
0630: 6d 6d 20 3d 20 24 33 3b 20 6d 65 72 69 64 20 3d  mm = $3; merid =
0640: 20 32 34 3b 0a 09 09 64 79 6c 69 67 68 74 20 3d   24;...dylight =
0650: 20 53 54 41 4e 44 41 52 44 3b 20 6f 75 72 7a 6f   STANDARD; ourzo
0660: 6e 65 20 3d 20 24 34 25 31 30 30 20 2b 20 36 30  ne = $4%100 + 60
0670: 2a 24 34 2f 31 30 30 3b 7d 0a 09 7c 20 4e 55 4d  *$4/100;}..| NUM
0680: 42 45 52 20 27 3a 27 20 4e 55 4d 42 45 52 20 27  BER ':' NUMBER '
0690: 3a 27 20 4e 55 4d 42 45 52 20 3d 0a 09 09 7b 68  :' NUMBER =...{h
06a0: 68 20 3d 20 24 31 3b 20 6d 6d 20 3d 20 24 33 3b  h = $1; mm = $3;
06b0: 20 73 73 20 3d 20 24 35 3b 20 6d 65 72 69 64 20   ss = $5; merid 
06c0: 3d 20 32 34 3b 7d 0a 09 7c 20 4e 55 4d 42 45 52  = 24;}..| NUMBER
06d0: 20 27 3a 27 20 4e 55 4d 42 45 52 20 27 3a 27 20   ':' NUMBER ':' 
06e0: 4e 55 4d 42 45 52 20 4d 45 52 49 44 49 41 4e 20  NUMBER MERIDIAN 
06f0: 3d 0a 09 09 7b 68 68 20 3d 20 24 31 3b 20 6d 6d  =...{hh = $1; mm
0700: 20 3d 20 24 33 3b 20 73 73 20 3d 20 24 35 3b 20   = $3; ss = $5; 
0710: 6d 65 72 69 64 20 3d 20 24 36 3b 7d 0a 09 7c 20  merid = $6;}..| 
0720: 4e 55 4d 42 45 52 20 27 3a 27 20 4e 55 4d 42 45  NUMBER ':' NUMBE
0730: 52 20 27 3a 27 20 4e 55 4d 42 45 52 20 4e 55 4d  R ':' NUMBER NUM
0740: 42 45 52 20 3d 0a 09 09 7b 68 68 20 3d 20 24 31  BER =...{hh = $1
0750: 3b 20 6d 6d 20 3d 20 24 33 3b 20 73 73 20 3d 20  ; mm = $3; ss = 
0760: 24 35 3b 20 6d 65 72 69 64 20 3d 20 32 34 3b 0a  $5; merid = 24;.
0770: 09 09 64 79 6c 69 67 68 74 20 3d 20 53 54 41 4e  ..dylight = STAN
0780: 44 41 52 44 3b 20 6f 75 72 7a 6f 6e 65 20 3d 20  DARD; ourzone = 
0790: 24 36 25 31 30 30 20 2b 20 36 30 2a 24 36 2f 31  $6%100 + 60*$6/1
07a0: 30 30 3b 7d 3b 0a 0a 7a 6f 6e 65 3a 09 5a 4f 4e  00;};..zone:.ZON
07b0: 45 20 3d 0a 09 09 7b 6f 75 72 7a 6f 6e 65 20 3d  E =...{ourzone =
07c0: 20 24 31 3b 20 64 79 6c 69 67 68 74 20 3d 20 53   $1; dylight = S
07d0: 54 41 4e 44 41 52 44 3b 7d 0a 09 7c 20 44 41 59  TANDARD;}..| DAY
07e0: 5a 4f 4e 45 20 3d 0a 09 09 7b 6f 75 72 7a 6f 6e  ZONE =...{ourzon
07f0: 65 20 3d 20 24 31 3b 20 64 79 6c 69 67 68 74 20  e = $1; dylight 
0800: 3d 20 44 41 59 4c 49 47 48 54 3b 7d 3b 0a 0a 64  = DAYLIGHT;};..d
0810: 79 73 70 65 63 3a 09 44 41 59 20 3d 0a 09 09 7b  yspec:.DAY =...{
0820: 64 61 79 6f 72 64 20 3d 20 31 3b 20 64 61 79 72  dayord = 1; dayr
0830: 65 71 20 3d 20 24 31 3b 7d 0a 09 7c 20 44 41 59  eq = $1;}..| DAY
0840: 20 27 2c 27 20 3d 0a 09 09 7b 64 61 79 6f 72 64   ',' =...{dayord
0850: 20 3d 20 31 3b 20 64 61 79 72 65 71 20 3d 20 24   = 1; dayreq = $
0860: 31 3b 7d 0a 09 7c 20 4e 55 4d 42 45 52 20 44 41  1;}..| NUMBER DA
0870: 59 20 3d 0a 09 09 7b 64 61 79 6f 72 64 20 3d 20  Y =...{dayord = 
0880: 24 31 3b 20 64 61 79 72 65 71 20 3d 20 24 32 3b  $1; dayreq = $2;
0890: 7d 3b 0a 0a 64 74 73 70 65 63 3a 09 4e 55 4d 42  };..dtspec:.NUMB
08a0: 45 52 20 27 2f 27 20 4e 55 4d 42 45 52 20 3d 0a  ER '/' NUMBER =.
08b0: 09 09 7b 6d 6f 6e 74 68 20 3d 20 24 31 3b 20 64  ..{month = $1; d
08c0: 61 79 20 3d 20 24 33 3b 7d 0a 09 7c 20 4e 55 4d  ay = $3;}..| NUM
08d0: 42 45 52 20 27 2f 27 20 4e 55 4d 42 45 52 20 27  BER '/' NUMBER '
08e0: 2f 27 20 4e 55 4d 42 45 52 20 3d 0a 09 09 7b 0a  /' NUMBER =...{.
08f0: 09 09 20 20 20 20 2f 2a 0a 09 09 20 20 20 20 20  ..    /*...     
0900: 2a 20 48 41 43 4b 20 41 4c 45 52 54 21 21 21 21  * HACK ALERT!!!!
0910: 0a 09 09 20 20 20 20 20 2a 20 54 68 65 20 31 30  ...     * The 10
0920: 30 30 20 69 73 20 61 20 6d 61 67 69 63 20 6e 75  00 is a magic nu
0930: 6d 62 65 72 20 74 6f 20 61 74 74 65 6d 70 74 20  mber to attempt 
0940: 74 6f 20 66 6f 72 63 65 0a 09 09 20 20 20 20 20  to force...     
0950: 2a 20 75 73 65 20 6f 66 20 34 20 64 69 67 69 74  * use of 4 digit
0960: 20 79 65 61 72 73 20 69 66 20 79 65 61 72 2f 6d   years if year/m
0970: 6f 6e 74 68 2f 64 61 79 20 63 61 6e 20 62 65 0a  onth/day can be.
0980: 09 09 20 20 20 20 20 2a 20 70 61 72 73 65 64 2e  ..     * parsed.
0990: 20 54 68 69 73 20 77 61 73 20 6f 6e 6c 79 20 64   This was only d
09a0: 6f 6e 65 20 66 6f 72 20 62 61 63 6b 77 61 72 64  one for backward
09b0: 73 0a 09 09 20 20 20 20 20 2a 20 63 6f 6d 70 61  s...     * compa
09c0: 74 69 62 69 6c 69 74 79 20 69 6e 20 72 68 2e 0a  tibility in rh..
09d0: 09 09 20 20 20 20 20 2a 2f 0a 09 09 20 20 20 20  ..     */...    
09e0: 69 66 20 28 24 31 20 3e 20 31 30 30 30 29 20 7b  if ($1 > 1000) {
09f0: 0a 09 09 09 79 65 61 72 20 3d 20 24 31 3b 20 6d  ....year = $1; m
0a00: 6f 6e 74 68 20 3d 20 24 33 3b 20 64 61 79 20 3d  onth = $3; day =
0a10: 20 24 35 3b 0a 09 09 20 20 20 20 7d 0a 09 09 20   $5;...    }... 
0a20: 20 20 20 65 6c 73 65 20 7b 0a 09 09 09 6d 6f 6e     else {....mon
0a30: 74 68 20 3d 20 24 31 3b 20 64 61 79 20 3d 20 24  th = $1; day = $
0a40: 33 3b 20 79 65 61 72 20 3d 20 24 35 3b 0a 09 09  3; year = $5;...
0a50: 20 20 20 20 7d 0a 09 09 7d 0a 09 7c 20 4d 4f 4e      }...}..| MON
0a60: 54 48 20 4e 55 4d 42 45 52 20 3d 0a 09 09 7b 6d  TH NUMBER =...{m
0a70: 6f 6e 74 68 20 3d 20 24 31 3b 20 64 61 79 20 3d  onth = $1; day =
0a80: 20 24 32 3b 7d 0a 09 7c 20 4d 4f 4e 54 48 20 4e   $2;}..| MONTH N
0a90: 55 4d 42 45 52 20 27 2c 27 20 4e 55 4d 42 45 52  UMBER ',' NUMBER
0aa0: 20 3d 0a 09 09 7b 6d 6f 6e 74 68 20 3d 20 24 31   =...{month = $1
0ab0: 3b 20 64 61 79 20 3d 20 24 32 3b 20 79 65 61 72  ; day = $2; year
0ac0: 20 3d 20 24 34 3b 7d 0a 09 7c 20 4e 55 4d 42 45   = $4;}..| NUMBE
0ad0: 52 20 4d 4f 4e 54 48 20 3d 0a 09 09 7b 6d 6f 6e  R MONTH =...{mon
0ae0: 74 68 20 3d 20 24 32 3b 20 64 61 79 20 3d 20 24  th = $2; day = $
0af0: 31 3b 7d 0a 09 7c 20 4e 55 4d 42 45 52 20 4d 4f  1;}..| NUMBER MO
0b00: 4e 54 48 20 4e 55 4d 42 45 52 20 3d 0a 09 09 7b  NTH NUMBER =...{
0b10: 6d 6f 6e 74 68 20 3d 20 24 32 3b 20 64 61 79 20  month = $2; day 
0b20: 3d 20 24 31 3b 20 79 65 61 72 20 3d 20 24 33 3b  = $1; year = $3;
0b30: 7d 3b 0a 0a 0a 72 73 70 65 63 3a 09 4e 55 4d 42  };...rspec:.NUMB
0b40: 45 52 20 55 4e 49 54 20 3d 0a 09 09 7b 72 65 6c  ER UNIT =...{rel
0b50: 73 65 63 20 2b 3d 20 20 36 30 4c 20 2a 20 24 31  sec +=  60L * $1
0b60: 20 2a 20 24 32 3b 7d 0a 09 7c 20 4e 55 4d 42 45   * $2;}..| NUMBE
0b70: 52 20 4d 55 4e 49 54 20 3d 0a 09 09 7b 72 65 6c  R MUNIT =...{rel
0b80: 6d 6f 6e 74 68 20 2b 3d 20 24 31 20 2a 20 24 32  month += $1 * $2
0b90: 3b 7d 0a 09 7c 20 4e 55 4d 42 45 52 20 53 55 4e  ;}..| NUMBER SUN
0ba0: 49 54 20 3d 0a 09 09 7b 72 65 6c 73 65 63 20 2b  IT =...{relsec +
0bb0: 3d 20 24 31 3b 7d 0a 09 7c 20 55 4e 49 54 20 3d  = $1;}..| UNIT =
0bc0: 0a 09 09 7b 72 65 6c 73 65 63 20 2b 3d 20 20 36  ...{relsec +=  6
0bd0: 30 4c 20 2a 20 24 31 3b 7d 0a 09 7c 20 4d 55 4e  0L * $1;}..| MUN
0be0: 49 54 20 3d 0a 09 09 7b 72 65 6c 6d 6f 6e 74 68  IT =...{relmonth
0bf0: 20 2b 3d 20 24 31 3b 7d 0a 09 7c 20 53 55 4e 49   += $1;}..| SUNI
0c00: 54 20 3d 0a 09 09 7b 72 65 6c 73 65 63 2b 2b 3b  T =...{relsec++;
0c10: 7d 0a 09 7c 20 72 73 70 65 63 20 41 47 4f 20 3d  }..| rspec AGO =
0c20: 0a 09 09 7b 72 65 6c 73 65 63 20 3d 20 2d 72 65  ...{relsec = -re
0c30: 6c 73 65 63 3b 20 72 65 6c 6d 6f 6e 74 68 20 3d  lsec; relmonth =
0c40: 20 2d 72 65 6c 6d 6f 6e 74 68 3b 7d 3b 0a 25 25   -relmonth;};.%%
0c50: 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 6d 64 61  ..static int mda
0c60: 79 73 5b 31 32 5d 20 3d 0a 09 7b 33 31 2c 20 30  ys[12] =..{31, 0
0c70: 2c 20 33 31 2c 20 20 33 30 2c 20 33 31 2c 20 33  , 31,  30, 31, 3
0c80: 30 2c 20 20 33 31 2c 20 33 31 2c 20 33 30 2c 20  0,  31, 31, 30, 
0c90: 20 33 31 2c 20 33 30 2c 20 33 31 7d 3b 0a 23 64   31, 30, 31};.#d
0ca0: 65 66 69 6e 65 20 65 70 6f 63 68 20 31 39 37 30  efine epoch 1970
0cb0: 0a 0a 65 78 74 65 72 6e 20 73 74 72 75 63 74 20  ..extern struct 
0cc0: 74 6d 20 2a 6c 6f 63 61 6c 74 69 6d 65 28 29 3b  tm *localtime();
0cd0: 0a 0a 73 74 61 74 69 63 20 74 69 6d 65 5f 74 0a  ..static time_t.
0ce0: 64 61 74 65 63 6f 6e 76 28 6d 6d 2c 20 64 64 2c  dateconv(mm, dd,
0cf0: 20 79 79 2c 20 68 2c 20 6d 2c 20 73 2c 20 6d 65   yy, h, m, s, me
0d00: 72 2c 20 7a 6f 6e 65 2c 20 64 61 79 66 6c 61 67  r, zone, dayflag
0d10: 29 0a 69 6e 74 20 6d 6d 2c 20 64 64 2c 20 79 79  ).int mm, dd, yy
0d20: 2c 20 68 2c 20 6d 2c 20 73 2c 20 6d 65 72 2c 20  , h, m, s, mer, 
0d30: 7a 6f 6e 65 2c 20 64 61 79 66 6c 61 67 3b 0a 7b  zone, dayflag;.{
0d40: 0a 09 74 69 6d 65 5f 74 20 74 6f 64 2c 20 6a 64  ..time_t tod, jd
0d50: 61 74 65 3b 0a 09 72 65 67 69 73 74 65 72 20 69  ate;..register i
0d60: 6e 74 20 69 3b 0a 0a 09 69 66 20 28 79 79 20 3c  nt i;...if (yy <
0d70: 20 30 29 20 79 79 20 3d 20 2d 79 79 3b 0a 09 69   0) yy = -yy;..i
0d80: 66 20 28 79 79 20 3c 20 31 30 30 29 20 79 79 20  f (yy < 100) yy 
0d90: 2b 3d 20 31 39 30 30 3b 0a 09 6d 64 61 79 73 5b  += 1900;..mdays[
0da0: 31 5d 20 3d 0a 09 20 20 20 20 32 38 20 2b 20 28  1] =..    28 + (
0db0: 28 79 79 20 25 20 34 20 3d 3d 20 30 20 26 26 20  (yy % 4 == 0 && 
0dc0: 28 79 79 20 25 20 31 30 30 20 21 3d 20 30 20 7c  (yy % 100 != 0 |
0dd0: 7c 20 79 79 20 25 20 34 30 30 20 3d 3d 20 30 29  | yy % 400 == 0)
0de0: 29 20 3f 20 31 20 3a 20 30 29 3b 0a 09 69 66 20  ) ? 1 : 0);..if 
0df0: 28 79 79 20 3c 20 65 70 6f 63 68 20 7c 7c 20 79  (yy < epoch || y
0e00: 79 20 3e 20 31 39 39 39 20 7c 7c 20 6d 6d 20 3c  y > 1999 || mm <
0e10: 20 31 20 7c 7c 20 6d 6d 20 3e 20 31 32 20 7c 7c   1 || mm > 12 ||
0e20: 0a 09 09 64 64 20 3c 20 31 20 7c 7c 20 64 64 20  ...dd < 1 || dd 
0e30: 3e 20 6d 64 61 79 73 5b 2d 2d 6d 6d 5d 29 20 72  > mdays[--mm]) r
0e40: 65 74 75 72 6e 20 28 2d 31 29 3b 0a 09 6a 64 61  eturn (-1);..jda
0e50: 74 65 20 3d 20 64 64 2d 31 3b 0a 20 20 20 20 20  te = dd-1;.     
0e60: 20 20 20 66 6f 72 20 28 69 3d 30 3b 20 69 3c 6d     for (i=0; i<m
0e70: 6d 3b 20 69 2b 2b 29 20 6a 64 61 74 65 20 2b 3d  m; i++) jdate +=
0e80: 20 6d 64 61 79 73 5b 69 5d 3b 0a 09 66 6f 72 20   mdays[i];..for 
0e90: 28 69 20 3d 20 65 70 6f 63 68 3b 20 69 20 3c 20  (i = epoch; i < 
0ea0: 79 79 3b 20 69 2b 2b 29 20 7b 0a 09 20 20 20 20  yy; i++) {..    
0eb0: 6a 64 61 74 65 20 2b 3d 20 33 36 35 20 2b 20 28  jdate += 365 + (
0ec0: 28 69 20 25 20 34 20 3d 3d 20 30 20 26 26 20 28  (i % 4 == 0 && (
0ed0: 69 20 25 20 31 30 30 20 21 3d 20 30 20 7c 7c 20  i % 100 != 0 || 
0ee0: 69 20 25 20 34 30 30 20 3d 3d 20 30 29 29 20 3f  i % 400 == 0)) ?
0ef0: 20 31 20 3a 20 30 29 3b 0a 09 7d 0a 09 6a 64 61   1 : 0);..}..jda
0f00: 74 65 20 2a 3d 20 64 61 79 73 65 63 3b 0a 09 6a  te *= daysec;..j
0f10: 64 61 74 65 20 2b 3d 20 7a 6f 6e 65 20 2a 20 36  date += zone * 6
0f20: 30 4c 3b 0a 09 69 66 20 28 28 74 6f 64 20 3d 20  0L;..if ((tod = 
0f30: 74 69 6d 65 63 6f 6e 76 28 68 2c 20 6d 2c 20 73  timeconv(h, m, s
0f40: 2c 20 6d 65 72 29 29 20 3c 20 30 29 20 72 65 74  , mer)) < 0) ret
0f50: 75 72 6e 20 28 2d 31 29 3b 0a 09 6a 64 61 74 65  urn (-1);..jdate
0f60: 20 2b 3d 20 74 6f 64 3b 0a 09 69 66 20 28 64 61   += tod;..if (da
0f70: 79 66 6c 61 67 20 3d 3d 20 44 41 59 4c 49 47 48  yflag == DAYLIGH
0f80: 54 0a 09 20 20 20 20 7c 7c 20 28 64 61 79 66 6c  T..    || (dayfl
0f90: 61 67 20 3d 3d 20 4d 41 59 42 45 20 26 26 20 6c  ag == MAYBE && l
0fa0: 6f 63 61 6c 74 69 6d 65 28 26 6a 64 61 74 65 29  ocaltime(&jdate)
0fb0: 2d 3e 74 6d 5f 69 73 64 73 74 29 29 20 7b 0a 09  ->tm_isdst)) {..
0fc0: 20 20 20 20 6a 64 61 74 65 20 2b 3d 20 2d 31 2a      jdate += -1*
0fd0: 36 30 2a 36 30 3b 0a 09 7d 0a 09 72 65 74 75 72  60*60;..}..retur
0fe0: 6e 20 28 6a 64 61 74 65 29 3b 0a 7d 0a 0a 73 74  n (jdate);.}..st
0ff0: 61 74 69 63 20 74 69 6d 65 5f 74 0a 64 61 79 63  atic time_t.dayc
1000: 6f 6e 76 28 6f 72 64 2c 20 64 61 79 2c 20 6e 6f  onv(ord, day, no
1010: 77 29 0a 69 6e 74 20 6f 72 64 2c 20 64 61 79 3b  w).int ord, day;
1020: 20 74 69 6d 65 5f 74 20 6e 6f 77 3b 0a 7b 0a 09   time_t now;.{..
1030: 72 65 67 69 73 74 65 72 20 73 74 72 75 63 74 20  register struct 
1040: 74 6d 20 2a 6c 6f 63 74 69 6d 65 3b 0a 09 74 69  tm *loctime;..ti
1050: 6d 65 5f 74 20 74 6f 64 3b 0a 0a 09 74 6f 64 20  me_t tod;...tod 
1060: 3d 20 6e 6f 77 3b 0a 09 6c 6f 63 74 69 6d 65 20  = now;..loctime 
1070: 3d 20 6c 6f 63 61 6c 74 69 6d 65 28 26 74 6f 64  = localtime(&tod
1080: 29 3b 0a 09 74 6f 64 20 2b 3d 20 64 61 79 73 65  );..tod += dayse
1090: 63 20 2a 20 28 28 64 61 79 20 2d 20 6c 6f 63 74  c * ((day - loct
10a0: 69 6d 65 2d 3e 74 6d 5f 77 64 61 79 20 2b 20 37  ime->tm_wday + 7
10b0: 29 20 25 20 37 29 3b 0a 09 74 6f 64 20 2b 3d 20  ) % 7);..tod += 
10c0: 37 20 2a 20 64 61 79 73 65 63 20 2a 20 28 28 6f  7 * daysec * ((o
10d0: 72 64 20 3c 3d 20 30 29 20 3f 20 6f 72 64 20 3a  rd <= 0) ? ord :
10e0: 20 28 6f 72 64 20 2d 20 31 29 29 3b 0a 09 72 65   (ord - 1));..re
10f0: 74 75 72 6e 20 64 61 79 6c 63 6f 72 72 28 74 6f  turn daylcorr(to
1100: 64 2c 20 6e 6f 77 29 3b 0a 7d 0a 0a 73 74 61 74  d, now);.}..stat
1110: 69 63 20 74 69 6d 65 5f 74 0a 74 69 6d 65 63 6f  ic time_t.timeco
1120: 6e 76 28 68 68 2c 20 6d 6d 2c 20 73 73 2c 20 6d  nv(hh, mm, ss, m
1130: 65 72 29 0a 72 65 67 69 73 74 65 72 20 69 6e 74  er).register int
1140: 20 68 68 2c 20 6d 6d 2c 20 73 73 2c 20 6d 65 72   hh, mm, ss, mer
1150: 3b 0a 7b 0a 09 69 66 20 28 6d 6d 20 3c 20 30 20  ;.{..if (mm < 0 
1160: 7c 7c 20 6d 6d 20 3e 20 35 39 20 7c 7c 20 73 73  || mm > 59 || ss
1170: 20 3c 20 30 20 7c 7c 20 73 73 20 3e 20 35 39 29   < 0 || ss > 59)
1180: 20 72 65 74 75 72 6e 20 28 2d 31 29 3b 0a 09 73   return (-1);..s
1190: 77 69 74 63 68 20 28 6d 65 72 29 20 7b 0a 09 09  witch (mer) {...
11a0: 63 61 73 65 20 41 4d 3a 20 69 66 20 28 68 68 20  case AM: if (hh 
11b0: 3c 20 31 20 7c 7c 20 68 68 20 3e 20 31 32 29 20  < 1 || hh > 12) 
11c0: 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 09 20  return(-1);.... 
11d0: 72 65 74 75 72 6e 20 28 36 30 4c 20 2a 20 28 28  return (60L * ((
11e0: 68 68 25 31 32 29 2a 36 30 4c 20 2b 20 6d 6d 29  hh%12)*60L + mm)
11f0: 2b 73 73 29 3b 0a 09 09 63 61 73 65 20 50 4d 3a  +ss);...case PM:
1200: 20 69 66 20 28 68 68 20 3c 20 31 20 7c 7c 20 68   if (hh < 1 || h
1210: 68 20 3e 20 31 32 29 20 72 65 74 75 72 6e 28 2d  h > 12) return(-
1220: 31 29 3b 0a 09 09 09 20 72 65 74 75 72 6e 20 28  1);.... return (
1230: 36 30 4c 20 2a 20 28 28 68 68 25 31 32 20 2b 31  60L * ((hh%12 +1
1240: 32 29 2a 36 30 4c 20 2b 20 6d 6d 29 2b 73 73 29  2)*60L + mm)+ss)
1250: 3b 0a 09 09 63 61 73 65 20 32 34 3a 20 69 66 20  ;...case 24: if 
1260: 28 68 68 20 3c 20 30 20 7c 7c 20 68 68 20 3e 20  (hh < 0 || hh > 
1270: 32 33 29 20 72 65 74 75 72 6e 20 28 2d 31 29 3b  23) return (-1);
1280: 0a 09 09 09 20 72 65 74 75 72 6e 20 28 36 30 4c  .... return (60L
1290: 20 2a 20 28 68 68 2a 36 30 4c 20 2b 20 6d 6d 29   * (hh*60L + mm)
12a0: 2b 73 73 29 3b 0a 09 09 64 65 66 61 75 6c 74 3a  +ss);...default:
12b0: 20 72 65 74 75 72 6e 20 28 2d 31 29 3b 0a 09 7d   return (-1);..}
12c0: 0a 7d 0a 0a 73 74 61 74 69 63 20 74 69 6d 65 5f  .}..static time_
12d0: 74 0a 6d 6f 6e 74 68 61 64 64 28 73 64 61 74 65  t.monthadd(sdate
12e0: 2c 20 72 65 6c 6d 6f 6e 74 68 29 0a 74 69 6d 65  , relmonth).time
12f0: 5f 74 20 73 64 61 74 65 2c 20 72 65 6c 6d 6f 6e  _t sdate, relmon
1300: 74 68 3b 0a 7b 0a 09 73 74 72 75 63 74 20 74 6d  th;.{..struct tm
1310: 20 2a 6c 74 69 6d 65 3b 0a 09 69 6e 74 20 6d 6d   *ltime;..int mm
1320: 2c 20 79 79 3b 0a 0a 09 69 66 20 28 72 65 6c 6d  , yy;...if (relm
1330: 6f 6e 74 68 20 3d 3d 20 30 29 20 72 65 74 75 72  onth == 0) retur
1340: 6e 20 30 3b 0a 09 6c 74 69 6d 65 20 3d 20 6c 6f  n 0;..ltime = lo
1350: 63 61 6c 74 69 6d 65 28 26 73 64 61 74 65 29 3b  caltime(&sdate);
1360: 0a 09 6d 6d 20 3d 20 31 32 2a 6c 74 69 6d 65 2d  ..mm = 12*ltime-
1370: 3e 74 6d 5f 79 65 61 72 20 2b 20 6c 74 69 6d 65  >tm_year + ltime
1380: 2d 3e 74 6d 5f 6d 6f 6e 20 2b 20 72 65 6c 6d 6f  ->tm_mon + relmo
1390: 6e 74 68 3b 0a 09 79 79 20 3d 20 6d 6d 2f 31 32  nth;..yy = mm/12
13a0: 3b 0a 09 6d 6d 20 3d 20 6d 6d 25 31 32 20 2b 20  ;..mm = mm%12 + 
13b0: 31 3b 0a 09 72 65 74 75 72 6e 20 64 61 79 6c 63  1;..return daylc
13c0: 6f 72 72 28 64 61 74 65 63 6f 6e 76 28 6d 6d 2c  orr(dateconv(mm,
13d0: 20 6c 74 69 6d 65 2d 3e 74 6d 5f 6d 64 61 79 2c   ltime->tm_mday,
13e0: 20 79 79 2c 20 6c 74 69 6d 65 2d 3e 74 6d 5f 68   yy, ltime->tm_h
13f0: 6f 75 72 2c 0a 09 09 6c 74 69 6d 65 2d 3e 74 6d  our,...ltime->tm
1400: 5f 6d 69 6e 2c 20 6c 74 69 6d 65 2d 3e 74 6d 5f  _min, ltime->tm_
1410: 73 65 63 2c 20 32 34 2c 20 6f 75 72 7a 6f 6e 65  sec, 24, ourzone
1420: 2c 20 4d 41 59 42 45 29 2c 20 73 64 61 74 65 29  , MAYBE), sdate)
1430: 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 74 69 6d 65  ;.}..static time
1440: 5f 74 0a 64 61 79 6c 63 6f 72 72 28 66 75 74 75  _t.daylcorr(futu
1450: 72 65 2c 20 6e 6f 77 29 0a 74 69 6d 65 5f 74 20  re, now).time_t 
1460: 66 75 74 75 72 65 2c 20 6e 6f 77 3b 0a 7b 0a 09  future, now;.{..
1470: 69 6e 74 20 66 64 61 79 6c 2c 20 6e 6f 77 64 61  int fdayl, nowda
1480: 79 6c 3b 0a 0a 09 6e 6f 77 64 61 79 6c 20 3d 20  yl;...nowdayl = 
1490: 28 6c 6f 63 61 6c 74 69 6d 65 28 26 6e 6f 77 29  (localtime(&now)
14a0: 2d 3e 74 6d 5f 68 6f 75 72 2b 31 29 20 25 20 32  ->tm_hour+1) % 2
14b0: 34 3b 0a 09 66 64 61 79 6c 20 3d 20 28 6c 6f 63  4;..fdayl = (loc
14c0: 61 6c 74 69 6d 65 28 26 66 75 74 75 72 65 29 2d  altime(&future)-
14d0: 3e 74 6d 5f 68 6f 75 72 2b 31 29 20 25 20 32 34  >tm_hour+1) % 24
14e0: 3b 0a 09 72 65 74 75 72 6e 20 28 66 75 74 75 72  ;..return (futur
14f0: 65 2d 6e 6f 77 29 20 2b 20 36 30 4c 20 2a 20 36  e-now) + 60L * 6
1500: 30 4c 20 2a 20 28 6e 6f 77 64 61 79 6c 20 2d 20  0L * (nowdayl - 
1510: 66 64 61 79 6c 29 3b 0a 7d 0a 0a 73 74 61 74 69  fdayl);.}..stati
1520: 63 20 63 68 61 72 20 2a 6c 70 74 72 3b 0a 0a 73  c char *lptr;..s
1530: 74 61 74 69 63 20 69 6e 74 20 67 64 5f 6c 65 78  tatic int gd_lex
1540: 28 29 0a 7b 0a 09 65 78 74 65 72 6e 20 69 6e 74  ().{..extern int
1550: 20 67 64 5f 6c 76 61 6c 3b 0a 09 69 6e 74 20 73   gd_lval;..int s
1560: 69 67 6e 3b 0a 09 72 65 67 69 73 74 65 72 20 63  ign;..register c
1570: 68 61 72 20 63 3b 0a 09 72 65 67 69 73 74 65 72  har c;..register
1580: 20 63 68 61 72 20 2a 70 3b 0a 09 63 68 61 72 20   char *p;..char 
1590: 69 64 62 75 66 5b 32 30 5d 3b 0a 09 69 6e 74 20  idbuf[20];..int 
15a0: 70 63 6e 74 3b 0a 0a 09 66 6f 72 20 28 3b 3b 29  pcnt;...for (;;)
15b0: 20 7b 0a 09 09 77 68 69 6c 65 20 28 69 73 73 70   {...while (issp
15c0: 61 63 65 28 2a 6c 70 74 72 29 29 20 6c 70 74 72  ace(*lptr)) lptr
15d0: 2b 2b 3b 0a 0a 09 09 69 66 20 28 69 73 64 69 67  ++;....if (isdig
15e0: 69 74 28 63 20 3d 20 2a 6c 70 74 72 29 20 7c 7c  it(c = *lptr) ||
15f0: 20 63 20 3d 3d 20 27 2d 27 20 7c 7c 20 63 20 3d   c == '-' || c =
1600: 3d 20 27 2b 27 29 20 7b 0a 09 09 09 69 66 20 28  = '+') {....if (
1610: 63 3d 3d 20 27 2d 27 20 7c 7c 20 63 20 3d 3d 20  c== '-' || c == 
1620: 27 2b 27 29 20 7b 0a 09 09 09 09 69 66 20 28 63  '+') {.....if (c
1630: 3d 3d 27 2d 27 29 20 73 69 67 6e 20 3d 20 2d 31  =='-') sign = -1
1640: 3b 0a 09 09 09 09 65 6c 73 65 20 73 69 67 6e 20  ;.....else sign 
1650: 3d 20 31 3b 0a 09 09 09 09 69 66 20 28 21 69 73  = 1;.....if (!is
1660: 64 69 67 69 74 28 2a 2b 2b 6c 70 74 72 29 29 20  digit(*++lptr)) 
1670: 7b 0a 09 09 09 09 09 2f 2a 20 67 64 5f 6c 76 61  {....../* gd_lva
1680: 6c 20 3d 20 73 69 67 6e 3b 20 72 65 74 75 72 6e  l = sign; return
1690: 20 28 4e 55 4d 42 45 52 29 3b 20 2a 2f 0a 09 09   (NUMBER); */...
16a0: 09 09 09 72 65 74 75 72 6e 20 67 64 5f 6c 65 78  ...return gd_lex
16b0: 28 29 3b 2f 2a 20 73 6b 69 70 20 74 68 65 20 27  ();/* skip the '
16c0: 2d 27 20 73 69 67 6e 20 2a 2f 0a 09 09 09 09 7d  -' sign */.....}
16d0: 0a 09 09 09 7d 20 65 6c 73 65 20 73 69 67 6e 20  ....} else sign 
16e0: 3d 20 31 3b 0a 09 09 09 67 64 5f 6c 76 61 6c 20  = 1;....gd_lval 
16f0: 3d 20 30 3b 0a 09 09 09 77 68 69 6c 65 20 28 69  = 0;....while (i
1700: 73 64 69 67 69 74 28 63 20 3d 20 2a 6c 70 74 72  sdigit(c = *lptr
1710: 2b 2b 29 29 20 67 64 5f 6c 76 61 6c 20 3d 20 31  ++)) gd_lval = 1
1720: 30 2a 67 64 5f 6c 76 61 6c 20 2b 20 63 20 2d 20  0*gd_lval + c - 
1730: 27 30 27 3b 0a 09 09 09 67 64 5f 6c 76 61 6c 20  '0';....gd_lval 
1740: 2a 3d 20 73 69 67 6e 3b 0a 09 09 09 6c 70 74 72  *= sign;....lptr
1750: 2d 2d 3b 0a 09 09 09 72 65 74 75 72 6e 20 28 4e  --;....return (N
1760: 55 4d 42 45 52 29 3b 0a 0a 09 09 7d 20 65 6c 73  UMBER);....} els
1770: 65 20 69 66 20 28 69 73 61 6c 70 68 61 28 63 29  e if (isalpha(c)
1780: 29 20 7b 0a 09 09 09 70 20 3d 20 69 64 62 75 66  ) {....p = idbuf
1790: 3b 0a 09 09 09 77 68 69 6c 65 20 28 69 73 61 6c  ;....while (isal
17a0: 70 68 61 28 63 20 3d 20 2a 6c 70 74 72 2b 2b 29  pha(c = *lptr++)
17b0: 20 7c 7c 20 63 3d 3d 27 2e 27 29 0a 09 09 09 09   || c=='.').....
17c0: 69 66 20 28 70 20 3c 20 26 69 64 62 75 66 5b 73  if (p < &idbuf[s
17d0: 69 7a 65 6f 66 28 69 64 62 75 66 29 2d 31 5d 29  izeof(idbuf)-1])
17e0: 0a 09 09 09 09 09 2a 70 2b 2b 20 3d 20 63 3b 0a  ......*p++ = c;.
17f0: 09 09 09 2a 70 20 3d 20 27 5c 30 27 3b 0a 09 09  ...*p = '\0';...
1800: 09 6c 70 74 72 2d 2d 3b 0a 09 09 09 72 65 74 75  .lptr--;....retu
1810: 72 6e 20 28 6c 6f 6f 6b 75 70 28 69 64 62 75 66  rn (lookup(idbuf
1820: 29 29 3b 0a 09 09 7d 0a 0a 09 09 65 6c 73 65 20  ));...}....else 
1830: 69 66 20 28 63 20 3d 3d 20 27 28 27 29 20 7b 0a  if (c == '(') {.
1840: 09 09 09 70 63 6e 74 20 3d 20 30 3b 0a 09 09 09  ...pcnt = 0;....
1850: 64 6f 20 7b 0a 09 09 09 09 63 20 3d 20 2a 6c 70  do {.....c = *lp
1860: 74 72 2b 2b 3b 0a 09 09 09 09 69 66 20 28 63 20  tr++;.....if (c 
1870: 3d 3d 20 27 5c 30 27 29 20 72 65 74 75 72 6e 28  == '\0') return(
1880: 63 29 3b 0a 09 09 09 09 65 6c 73 65 20 69 66 20  c);.....else if 
1890: 28 63 20 3d 3d 20 27 28 27 29 20 70 63 6e 74 2b  (c == '(') pcnt+
18a0: 2b 3b 0a 09 09 09 09 65 6c 73 65 20 69 66 20 28  +;.....else if (
18b0: 63 20 3d 3d 20 27 29 27 29 20 70 63 6e 74 2d 2d  c == ')') pcnt--
18c0: 3b 0a 09 09 09 7d 20 77 68 69 6c 65 20 28 70 63  ;....} while (pc
18d0: 6e 74 20 3e 20 30 29 3b 0a 09 09 7d 0a 0a 09 09  nt > 0);...}....
18e0: 65 6c 73 65 20 72 65 74 75 72 6e 20 28 2a 6c 70  else return (*lp
18f0: 74 72 2b 2b 29 3b 0a 09 7d 0a 7d 0a 0a 73 74 72  tr++);..}.}..str
1900: 75 63 74 20 74 61 62 6c 65 20 7b 0a 09 63 68 61  uct table {..cha
1910: 72 20 2a 6e 61 6d 65 3b 0a 09 69 6e 74 20 74 79  r *name;..int ty
1920: 70 65 2c 20 76 61 6c 75 65 3b 0a 7d 3b 0a 0a 73  pe, value;.};..s
1930: 74 61 74 69 63 20 73 74 72 75 63 74 20 74 61 62  tatic struct tab
1940: 6c 65 20 6d 64 74 61 62 5b 5d 20 3d 20 7b 0a 09  le mdtab[] = {..
1950: 7b 22 4a 61 6e 75 61 72 79 22 2c 20 4d 4f 4e 54  {"January", MONT
1960: 48 2c 20 31 7d 2c 0a 09 7b 22 46 65 62 72 75 61  H, 1},..{"Februa
1970: 72 79 22 2c 20 4d 4f 4e 54 48 2c 20 32 7d 2c 0a  ry", MONTH, 2},.
1980: 09 7b 22 4d 61 72 63 68 22 2c 20 4d 4f 4e 54 48  .{"March", MONTH
1990: 2c 20 33 7d 2c 0a 09 7b 22 41 70 72 69 6c 22 2c  , 3},..{"April",
19a0: 20 4d 4f 4e 54 48 2c 20 34 7d 2c 0a 09 7b 22 4d   MONTH, 4},..{"M
19b0: 61 79 22 2c 20 4d 4f 4e 54 48 2c 20 35 7d 2c 0a  ay", MONTH, 5},.
19c0: 09 7b 22 4a 75 6e 65 22 2c 20 4d 4f 4e 54 48 2c  .{"June", MONTH,
19d0: 20 36 7d 2c 0a 09 7b 22 4a 75 6c 79 22 2c 20 4d   6},..{"July", M
19e0: 4f 4e 54 48 2c 20 37 7d 2c 0a 09 7b 22 41 75 67  ONTH, 7},..{"Aug
19f0: 75 73 74 22 2c 20 4d 4f 4e 54 48 2c 20 38 7d 2c  ust", MONTH, 8},
1a00: 0a 09 7b 22 53 65 70 74 65 6d 62 65 72 22 2c 20  ..{"September", 
1a10: 4d 4f 4e 54 48 2c 20 39 7d 2c 0a 09 7b 22 53 65  MONTH, 9},..{"Se
1a20: 70 74 22 2c 20 4d 4f 4e 54 48 2c 20 39 7d 2c 0a  pt", MONTH, 9},.
1a30: 09 7b 22 4f 63 74 6f 62 65 72 22 2c 20 4d 4f 4e  .{"October", MON
1a40: 54 48 2c 20 31 30 7d 2c 0a 09 7b 22 4e 6f 76 65  TH, 10},..{"Nove
1a50: 6d 62 65 72 22 2c 20 4d 4f 4e 54 48 2c 20 31 31  mber", MONTH, 11
1a60: 7d 2c 0a 09 7b 22 44 65 63 65 6d 62 65 72 22 2c  },..{"December",
1a70: 20 4d 4f 4e 54 48 2c 20 31 32 7d 2c 0a 0a 09 7b   MONTH, 12},...{
1a80: 22 53 75 6e 64 61 79 22 2c 20 44 41 59 2c 20 30  "Sunday", DAY, 0
1a90: 7d 2c 0a 09 7b 22 4d 6f 6e 64 61 79 22 2c 20 44  },..{"Monday", D
1aa0: 41 59 2c 20 31 7d 2c 0a 09 7b 22 54 75 65 73 64  AY, 1},..{"Tuesd
1ab0: 61 79 22 2c 20 44 41 59 2c 20 32 7d 2c 0a 09 7b  ay", DAY, 2},..{
1ac0: 22 54 75 65 73 22 2c 20 44 41 59 2c 20 32 7d 2c  "Tues", DAY, 2},
1ad0: 0a 09 7b 22 57 65 64 6e 65 73 64 61 79 22 2c 20  ..{"Wednesday", 
1ae0: 44 41 59 2c 20 33 7d 2c 0a 09 7b 22 57 65 64 6e  DAY, 3},..{"Wedn
1af0: 65 73 22 2c 20 44 41 59 2c 20 33 7d 2c 0a 09 7b  es", DAY, 3},..{
1b00: 22 54 68 75 72 73 64 61 79 22 2c 20 44 41 59 2c  "Thursday", DAY,
1b10: 20 34 7d 2c 0a 09 7b 22 54 68 75 72 22 2c 20 44   4},..{"Thur", D
1b20: 41 59 2c 20 34 7d 2c 0a 09 7b 22 54 68 75 72 73  AY, 4},..{"Thurs
1b30: 22 2c 20 44 41 59 2c 20 34 7d 2c 0a 09 7b 22 46  ", DAY, 4},..{"F
1b40: 72 69 64 61 79 22 2c 20 44 41 59 2c 20 35 7d 2c  riday", DAY, 5},
1b50: 0a 09 7b 22 53 61 74 75 72 64 61 79 22 2c 20 44  ..{"Saturday", D
1b60: 41 59 2c 20 36 7d 2c 0a 09 7b 30 2c 20 30 2c 20  AY, 6},..{0, 0, 
1b70: 30 7d 7d 3b 0a 0a 23 64 65 66 69 6e 65 20 48 52  0}};..#define HR
1b80: 53 20 2a 36 30 0a 23 64 65 66 69 6e 65 20 48 41  S *60.#define HA
1b90: 4c 46 48 52 20 33 30 0a 73 74 61 74 69 63 20 73  LFHR 30.static s
1ba0: 74 72 75 63 74 20 74 61 62 6c 65 20 6d 7a 74 61  truct table mzta
1bb0: 62 5b 5d 20 3d 20 7b 0a 09 7b 22 61 2e 6d 2e 22  b[] = {..{"a.m."
1bc0: 2c 20 4d 45 52 49 44 49 41 4e 2c 20 41 4d 7d 2c  , MERIDIAN, AM},
1bd0: 0a 09 7b 22 61 6d 22 2c 20 4d 45 52 49 44 49 41  ..{"am", MERIDIA
1be0: 4e 2c 20 41 4d 7d 2c 0a 09 7b 22 70 2e 6d 2e 22  N, AM},..{"p.m."
1bf0: 2c 20 4d 45 52 49 44 49 41 4e 2c 20 50 4d 7d 2c  , MERIDIAN, PM},
1c00: 0a 09 7b 22 70 6d 22 2c 20 4d 45 52 49 44 49 41  ..{"pm", MERIDIA
1c10: 4e 2c 20 50 4d 7d 2c 0a 09 7b 22 6e 73 74 22 2c  N, PM},..{"nst",
1c20: 20 5a 4f 4e 45 2c 20 33 20 48 52 53 20 2b 20 48   ZONE, 3 HRS + H
1c30: 41 4c 46 48 52 7d 2c 09 09 2f 2a 20 4e 65 77 66  ALFHR},../* Newf
1c40: 6f 75 6e 64 6c 61 6e 64 20 2a 2f 0a 09 7b 22 6e  oundland */..{"n
1c50: 2e 73 2e 74 2e 22 2c 20 5a 4f 4e 45 2c 20 33 20  .s.t.", ZONE, 3 
1c60: 48 52 53 20 2b 20 48 41 4c 46 48 52 7d 2c 0a 09  HRS + HALFHR},..
1c70: 7b 22 61 73 74 22 2c 20 5a 4f 4e 45 2c 20 34 20  {"ast", ZONE, 4 
1c80: 48 52 53 7d 2c 09 09 2f 2a 20 41 74 6c 61 6e 74  HRS},../* Atlant
1c90: 69 63 20 2a 2f 0a 09 7b 22 61 2e 73 2e 74 2e 22  ic */..{"a.s.t."
1ca0: 2c 20 5a 4f 4e 45 2c 20 34 20 48 52 53 7d 2c 0a  , ZONE, 4 HRS},.
1cb0: 09 7b 22 61 64 74 22 2c 20 44 41 59 5a 4f 4e 45  .{"adt", DAYZONE
1cc0: 2c 20 34 20 48 52 53 7d 2c 0a 09 7b 22 61 2e 64  , 4 HRS},..{"a.d
1cd0: 2e 74 2e 22 2c 20 44 41 59 5a 4f 4e 45 2c 20 34  .t.", DAYZONE, 4
1ce0: 20 48 52 53 7d 2c 0a 09 7b 22 65 73 74 22 2c 20   HRS},..{"est", 
1cf0: 5a 4f 4e 45 2c 20 35 20 48 52 53 7d 2c 09 09 2f  ZONE, 5 HRS},../
1d00: 2a 20 45 61 73 74 65 72 6e 20 2a 2f 0a 09 7b 22  * Eastern */..{"
1d10: 65 2e 73 2e 74 2e 22 2c 20 5a 4f 4e 45 2c 20 35  e.s.t.", ZONE, 5
1d20: 20 48 52 53 7d 2c 0a 09 7b 22 65 64 74 22 2c 20   HRS},..{"edt", 
1d30: 44 41 59 5a 4f 4e 45 2c 20 35 20 48 52 53 7d 2c  DAYZONE, 5 HRS},
1d40: 0a 09 7b 22 65 2e 64 2e 74 2e 22 2c 20 44 41 59  ..{"e.d.t.", DAY
1d50: 5a 4f 4e 45 2c 20 35 20 48 52 53 7d 2c 0a 09 7b  ZONE, 5 HRS},..{
1d60: 22 63 73 74 22 2c 20 5a 4f 4e 45 2c 20 36 20 48  "cst", ZONE, 6 H
1d70: 52 53 7d 2c 09 09 2f 2a 20 43 65 6e 74 72 61 6c  RS},../* Central
1d80: 20 2a 2f 0a 09 7b 22 63 2e 73 2e 74 2e 22 2c 20   */..{"c.s.t.", 
1d90: 5a 4f 4e 45 2c 20 36 20 48 52 53 7d 2c 0a 09 7b  ZONE, 6 HRS},..{
1da0: 22 63 64 74 22 2c 20 44 41 59 5a 4f 4e 45 2c 20  "cdt", DAYZONE, 
1db0: 36 20 48 52 53 7d 2c 0a 09 7b 22 63 2e 64 2e 74  6 HRS},..{"c.d.t
1dc0: 2e 22 2c 20 44 41 59 5a 4f 4e 45 2c 20 36 20 48  .", DAYZONE, 6 H
1dd0: 52 53 7d 2c 0a 09 7b 22 6d 73 74 22 2c 20 5a 4f  RS},..{"mst", ZO
1de0: 4e 45 2c 20 37 20 48 52 53 7d 2c 09 09 2f 2a 20  NE, 7 HRS},../* 
1df0: 4d 6f 75 6e 74 61 69 6e 20 2a 2f 0a 09 7b 22 6d  Mountain */..{"m
1e00: 2e 73 2e 74 2e 22 2c 20 5a 4f 4e 45 2c 20 37 20  .s.t.", ZONE, 7 
1e10: 48 52 53 7d 2c 0a 09 7b 22 6d 64 74 22 2c 20 44  HRS},..{"mdt", D
1e20: 41 59 5a 4f 4e 45 2c 20 37 20 48 52 53 7d 2c 0a  AYZONE, 7 HRS},.
1e30: 09 7b 22 6d 2e 64 2e 74 2e 22 2c 20 44 41 59 5a  .{"m.d.t.", DAYZ
1e40: 4f 4e 45 2c 20 37 20 48 52 53 7d 2c 0a 09 7b 22  ONE, 7 HRS},..{"
1e50: 70 73 74 22 2c 20 5a 4f 4e 45 2c 20 38 20 48 52  pst", ZONE, 8 HR
1e60: 53 7d 2c 09 09 2f 2a 20 50 61 63 69 66 69 63 20  S},../* Pacific 
1e70: 2a 2f 0a 09 7b 22 70 2e 73 2e 74 2e 22 2c 20 5a  */..{"p.s.t.", Z
1e80: 4f 4e 45 2c 20 38 20 48 52 53 7d 2c 0a 09 7b 22  ONE, 8 HRS},..{"
1e90: 70 64 74 22 2c 20 44 41 59 5a 4f 4e 45 2c 20 38  pdt", DAYZONE, 8
1ea0: 20 48 52 53 7d 2c 0a 09 7b 22 70 2e 64 2e 74 2e   HRS},..{"p.d.t.
1eb0: 22 2c 20 44 41 59 5a 4f 4e 45 2c 20 38 20 48 52  ", DAYZONE, 8 HR
1ec0: 53 7d 2c 0a 09 7b 22 79 73 74 22 2c 20 5a 4f 4e  S},..{"yst", ZON
1ed0: 45 2c 20 39 20 48 52 53 7d 2c 09 09 2f 2a 20 59  E, 9 HRS},../* Y
1ee0: 75 6b 6f 6e 20 2a 2f 0a 09 7b 22 79 2e 73 2e 74  ukon */..{"y.s.t
1ef0: 2e 22 2c 20 5a 4f 4e 45 2c 20 39 20 48 52 53 7d  .", ZONE, 9 HRS}
1f00: 2c 0a 09 7b 22 79 64 74 22 2c 20 44 41 59 5a 4f  ,..{"ydt", DAYZO
1f10: 4e 45 2c 20 39 20 48 52 53 7d 2c 0a 09 7b 22 79  NE, 9 HRS},..{"y
1f20: 2e 64 2e 74 2e 22 2c 20 44 41 59 5a 4f 4e 45 2c  .d.t.", DAYZONE,
1f30: 20 39 20 48 52 53 7d 2c 0a 09 7b 22 68 73 74 22   9 HRS},..{"hst"
1f40: 2c 20 5a 4f 4e 45 2c 20 31 30 20 48 52 53 7d 2c  , ZONE, 10 HRS},
1f50: 09 09 2f 2a 20 48 61 77 61 69 69 20 2a 2f 0a 09  ../* Hawaii */..
1f60: 7b 22 68 2e 73 2e 74 2e 22 2c 20 5a 4f 4e 45 2c  {"h.s.t.", ZONE,
1f70: 20 31 30 20 48 52 53 7d 2c 0a 09 7b 22 68 64 74   10 HRS},..{"hdt
1f80: 22 2c 20 44 41 59 5a 4f 4e 45 2c 20 31 30 20 48  ", DAYZONE, 10 H
1f90: 52 53 7d 2c 0a 09 7b 22 68 2e 64 2e 74 2e 22 2c  RS},..{"h.d.t.",
1fa0: 20 44 41 59 5a 4f 4e 45 2c 20 31 30 20 48 52 53   DAYZONE, 10 HRS
1fb0: 7d 2c 0a 0a 09 7b 22 67 6d 74 22 2c 20 5a 4f 4e  },...{"gmt", ZON
1fc0: 45 2c 20 30 20 48 52 53 7d 2c 0a 09 7b 22 67 2e  E, 0 HRS},..{"g.
1fd0: 6d 2e 74 2e 22 2c 20 5a 4f 4e 45 2c 20 30 20 48  m.t.", ZONE, 0 H
1fe0: 52 53 7d 2c 0a 09 7b 22 62 73 74 22 2c 20 44 41  RS},..{"bst", DA
1ff0: 59 5a 4f 4e 45 2c 20 30 20 48 52 53 7d 2c 09 09  YZONE, 0 HRS},..
2000: 2f 2a 20 42 72 69 74 69 73 68 20 53 75 6d 6d 65  /* British Summe
2010: 72 20 54 69 6d 65 20 2a 2f 0a 09 7b 22 62 2e 73  r Time */..{"b.s
2020: 2e 74 2e 22 2c 20 44 41 59 5a 4f 4e 45 2c 20 30  .t.", DAYZONE, 0
2030: 20 48 52 53 7d 2c 0a 09 7b 22 65 65 74 22 2c 20   HRS},..{"eet", 
2040: 5a 4f 4e 45 2c 20 30 20 48 52 53 7d 2c 09 09 2f  ZONE, 0 HRS},../
2050: 2a 20 45 75 72 6f 70 65 61 6e 20 45 61 73 74 65  * European Easte
2060: 72 6e 20 54 69 6d 65 20 2a 2f 0a 09 7b 22 65 2e  rn Time */..{"e.
2070: 65 2e 74 2e 22 2c 20 5a 4f 4e 45 2c 20 30 20 48  e.t.", ZONE, 0 H
2080: 52 53 7d 2c 0a 09 7b 22 65 65 73 74 22 2c 20 44  RS},..{"eest", D
2090: 41 59 5a 4f 4e 45 2c 20 30 20 48 52 53 7d 2c 09  AYZONE, 0 HRS},.
20a0: 2f 2a 20 45 75 72 6f 70 65 61 6e 20 45 61 73 74  /* European East
20b0: 65 72 6e 20 53 75 6d 6d 65 72 20 54 69 6d 65 20  ern Summer Time 
20c0: 2a 2f 0a 09 7b 22 65 2e 65 2e 73 2e 74 2e 22 2c  */..{"e.e.s.t.",
20d0: 20 44 41 59 5a 4f 4e 45 2c 20 30 20 48 52 53 7d   DAYZONE, 0 HRS}
20e0: 2c 0a 09 7b 22 6d 65 74 22 2c 20 5a 4f 4e 45 2c  ,..{"met", ZONE,
20f0: 20 2d 31 20 48 52 53 7d 2c 09 09 2f 2a 20 4d 69   -1 HRS},../* Mi
2100: 64 64 6c 65 20 45 75 72 6f 70 65 61 6e 20 54 69  ddle European Ti
2110: 6d 65 20 2a 2f 0a 09 7b 22 6d 2e 65 2e 74 2e 22  me */..{"m.e.t."
2120: 2c 20 5a 4f 4e 45 2c 20 2d 31 20 48 52 53 7d 2c  , ZONE, -1 HRS},
2130: 0a 09 7b 22 6d 65 73 74 22 2c 20 44 41 59 5a 4f  ..{"mest", DAYZO
2140: 4e 45 2c 20 2d 31 20 48 52 53 7d 2c 09 2f 2a 20  NE, -1 HRS},./* 
2150: 4d 69 64 64 6c 65 20 45 75 72 6f 70 65 61 6e 20  Middle European 
2160: 53 75 6d 6d 65 72 20 54 69 6d 65 20 2a 2f 0a 09  Summer Time */..
2170: 7b 22 6d 2e 65 2e 73 2e 74 2e 22 2c 20 44 41 59  {"m.e.s.t.", DAY
2180: 5a 4f 4e 45 2c 20 2d 31 20 48 52 53 7d 2c 0a 09  ZONE, -1 HRS},..
2190: 7b 22 77 65 74 22 2c 20 5a 4f 4e 45 2c 20 2d 32  {"wet", ZONE, -2
21a0: 20 48 52 53 20 7d 2c 09 09 2f 2a 20 57 65 73 74   HRS },../* West
21b0: 65 72 6e 20 45 75 72 6f 70 65 61 6e 20 54 69 6d  ern European Tim
21c0: 65 20 2a 2f 0a 09 7b 22 77 2e 65 2e 74 2e 22 2c  e */..{"w.e.t.",
21d0: 20 5a 4f 4e 45 2c 20 2d 32 20 48 52 53 20 7d 2c   ZONE, -2 HRS },
21e0: 0a 09 7b 22 77 65 73 74 22 2c 20 44 41 59 5a 4f  ..{"west", DAYZO
21f0: 4e 45 2c 20 2d 32 20 48 52 53 7d 2c 09 2f 2a 20  NE, -2 HRS},./* 
2200: 57 65 73 74 65 72 6e 20 45 75 72 6f 70 65 61 6e  Western European
2210: 20 53 75 6d 6d 65 72 20 54 69 6d 65 20 2a 2f 0a   Summer Time */.
2220: 09 7b 22 77 2e 65 2e 73 2e 74 2e 22 2c 20 44 41  .{"w.e.s.t.", DA
2230: 59 5a 4f 4e 45 2c 20 2d 32 20 48 52 53 7d 2c 0a  YZONE, -2 HRS},.
2240: 0a 09 7b 22 6a 73 74 22 2c 20 5a 4f 4e 45 2c 20  ..{"jst", ZONE, 
2250: 2d 39 20 48 52 53 7d 2c 09 09 2f 2a 20 4a 61 70  -9 HRS},../* Jap
2260: 61 6e 20 53 74 61 6e 64 61 72 64 20 54 69 6d 65  an Standard Time
2270: 20 2a 2f 0a 09 7b 22 6a 2e 73 2e 74 2e 22 2c 20   */..{"j.s.t.", 
2280: 5a 4f 4e 45 2c 20 2d 39 20 48 52 53 7d 2c 09 2f  ZONE, -9 HRS},./
2290: 2a 20 4a 61 70 61 6e 20 53 74 61 6e 64 61 72 64  * Japan Standard
22a0: 20 54 69 6d 65 20 2a 2f 0a 09 09 09 09 09 2f 2a   Time */....../*
22b0: 20 4e 6f 20 64 61 79 6c 69 67 68 74 20 73 61 76   No daylight sav
22c0: 69 6e 67 73 20 74 69 6d 65 20 2a 2f 0a 0a 09 7b  ings time */...{
22d0: 22 61 65 73 74 22 2c 20 5a 4f 4e 45 2c 20 2d 31  "aest", ZONE, -1
22e0: 30 20 48 52 53 7d 2c 09 2f 2a 20 41 75 73 74 72  0 HRS},./* Austr
22f0: 61 6c 69 61 6e 20 45 61 73 74 65 72 6e 20 54 69  alian Eastern Ti
2300: 6d 65 20 2a 2f 0a 09 7b 22 61 2e 65 2e 73 2e 74  me */..{"a.e.s.t
2310: 2e 22 2c 20 5a 4f 4e 45 2c 20 2d 31 30 20 48 52  .", ZONE, -10 HR
2320: 53 7d 2c 0a 09 7b 22 61 65 73 73 74 22 2c 20 44  S},..{"aesst", D
2330: 41 59 5a 4f 4e 45 2c 20 2d 31 30 20 48 52 53 7d  AYZONE, -10 HRS}
2340: 2c 09 2f 2a 20 41 75 73 74 72 61 6c 69 61 6e 20  ,./* Australian 
2350: 45 61 73 74 65 72 6e 20 53 75 6d 6d 65 72 20 54  Eastern Summer T
2360: 69 6d 65 20 2a 2f 0a 09 7b 22 61 2e 65 2e 73 2e  ime */..{"a.e.s.
2370: 73 2e 74 2e 22 2c 20 44 41 59 5a 4f 4e 45 2c 20  s.t.", DAYZONE, 
2380: 2d 31 30 20 48 52 53 7d 2c 0a 09 7b 22 61 63 73  -10 HRS},..{"acs
2390: 74 22 2c 20 5a 4f 4e 45 2c 20 2d 28 39 20 48 52  t", ZONE, -(9 HR
23a0: 53 20 2b 20 48 41 4c 46 48 52 29 7d 2c 09 2f 2a  S + HALFHR)},./*
23b0: 20 41 75 73 74 72 61 6c 69 61 6e 20 43 65 6e 74   Australian Cent
23c0: 72 61 6c 20 54 69 6d 65 20 2a 2f 0a 09 7b 22 61  ral Time */..{"a
23d0: 2e 63 2e 73 2e 74 2e 22 2c 20 5a 4f 4e 45 2c 20  .c.s.t.", ZONE, 
23e0: 2d 28 39 20 48 52 53 20 2b 20 48 41 4c 46 48 52  -(9 HRS + HALFHR
23f0: 29 7d 2c 0a 09 7b 22 61 63 73 73 74 22 2c 20 44  )},..{"acsst", D
2400: 41 59 5a 4f 4e 45 2c 20 2d 28 39 20 48 52 53 20  AYZONE, -(9 HRS 
2410: 2b 20 48 41 4c 46 48 52 29 7d 2c 09 2f 2a 20 41  + HALFHR)},./* A
2420: 75 73 74 72 61 6c 69 61 6e 20 43 65 6e 74 72 61  ustralian Centra
2430: 6c 20 53 75 6d 6d 65 72 20 2a 2f 0a 09 7b 22 61  l Summer */..{"a
2440: 2e 63 2e 73 2e 73 2e 74 2e 22 2c 20 44 41 59 5a  .c.s.s.t.", DAYZ
2450: 4f 4e 45 2c 20 2d 28 39 20 48 52 53 20 2b 20 48  ONE, -(9 HRS + H
2460: 41 4c 46 48 52 29 7d 2c 0a 09 7b 22 61 77 73 74  ALFHR)},..{"awst
2470: 22 2c 20 5a 4f 4e 45 2c 20 2d 38 20 48 52 53 7d  ", ZONE, -8 HRS}
2480: 2c 09 09 2f 2a 20 41 75 73 74 72 61 6c 69 61 6e  ,../* Australian
2490: 20 57 65 73 74 65 72 6e 20 54 69 6d 65 20 2a 2f   Western Time */
24a0: 0a 09 7b 22 61 2e 77 2e 73 2e 74 2e 22 2c 20 5a  ..{"a.w.s.t.", Z
24b0: 4f 4e 45 2c 20 2d 38 20 48 52 53 7d 2c 09 2f 2a  ONE, -8 HRS},./*
24c0: 20 28 6e 6f 20 64 61 79 6c 69 67 68 74 20 74 69   (no daylight ti
24d0: 6d 65 20 74 68 65 72 65 2c 20 49 27 6d 20 74 6f  me there, I'm to
24e0: 6c 64 20 2a 2f 0a 09 7b 30 2c 20 30 2c 20 30 7d  ld */..{0, 0, 0}
24f0: 7d 3b 0a 0a 73 74 61 74 69 63 20 73 74 72 75 63  };..static struc
2500: 74 20 74 61 62 6c 65 20 75 6e 69 74 74 62 5b 5d  t table unittb[]
2510: 20 3d 20 7b 0a 09 7b 22 79 65 61 72 22 2c 20 4d   = {..{"year", M
2520: 55 4e 49 54 2c 20 31 32 7d 2c 0a 09 7b 22 6d 6f  UNIT, 12},..{"mo
2530: 6e 74 68 22 2c 20 4d 55 4e 49 54 2c 20 31 7d 2c  nth", MUNIT, 1},
2540: 0a 09 7b 22 66 6f 72 74 6e 69 67 68 74 22 2c 20  ..{"fortnight", 
2550: 55 4e 49 54 2c 20 31 34 2a 32 34 2a 36 30 7d 2c  UNIT, 14*24*60},
2560: 0a 09 7b 22 77 65 65 6b 22 2c 20 55 4e 49 54 2c  ..{"week", UNIT,
2570: 20 37 2a 32 34 2a 36 30 7d 2c 0a 09 7b 22 64 61   7*24*60},..{"da
2580: 79 22 2c 20 55 4e 49 54 2c 20 31 2a 32 34 2a 36  y", UNIT, 1*24*6
2590: 30 7d 2c 0a 09 7b 22 68 6f 75 72 22 2c 20 55 4e  0},..{"hour", UN
25a0: 49 54 2c 20 36 30 7d 2c 0a 09 7b 22 6d 69 6e 75  IT, 60},..{"minu
25b0: 74 65 22 2c 20 55 4e 49 54 2c 20 31 7d 2c 0a 09  te", UNIT, 1},..
25c0: 7b 22 6d 69 6e 22 2c 20 55 4e 49 54 2c 20 31 7d  {"min", UNIT, 1}
25d0: 2c 0a 09 7b 22 73 65 63 6f 6e 64 22 2c 20 53 55  ,..{"second", SU
25e0: 4e 49 54 2c 20 31 7d 2c 0a 09 7b 22 73 65 63 22  NIT, 1},..{"sec"
25f0: 2c 20 53 55 4e 49 54 2c 20 31 7d 2c 0a 09 7b 30  , SUNIT, 1},..{0
2600: 2c 20 30 2c 20 30 7d 7d 3b 0a 0a 73 74 61 74 69  , 0, 0}};..stati
2610: 63 20 73 74 72 75 63 74 20 74 61 62 6c 65 20 6f  c struct table o
2620: 74 68 65 72 74 62 5b 5d 20 3d 20 7b 0a 09 7b 22  thertb[] = {..{"
2630: 74 6f 6d 6f 72 72 6f 77 22 2c 20 55 4e 49 54 2c  tomorrow", UNIT,
2640: 20 31 2a 32 34 2a 36 30 7d 2c 0a 09 7b 22 79 65   1*24*60},..{"ye
2650: 73 74 65 72 64 61 79 22 2c 20 55 4e 49 54 2c 20  sterday", UNIT, 
2660: 2d 31 2a 32 34 2a 36 30 7d 2c 0a 09 7b 22 74 6f  -1*24*60},..{"to
2670: 64 61 79 22 2c 20 55 4e 49 54 2c 20 30 7d 2c 0a  day", UNIT, 0},.
2680: 09 7b 22 6e 6f 77 22 2c 20 55 4e 49 54 2c 20 30  .{"now", UNIT, 0
2690: 7d 2c 0a 09 7b 22 6c 61 73 74 22 2c 20 4e 55 4d  },..{"last", NUM
26a0: 42 45 52 2c 20 2d 31 7d 2c 0a 09 7b 22 74 68 69  BER, -1},..{"thi
26b0: 73 22 2c 20 55 4e 49 54 2c 20 30 7d 2c 0a 09 7b  s", UNIT, 0},..{
26c0: 22 6e 65 78 74 22 2c 20 4e 55 4d 42 45 52 2c 20  "next", NUMBER, 
26d0: 32 7d 2c 0a 09 7b 22 66 69 72 73 74 22 2c 20 4e  2},..{"first", N
26e0: 55 4d 42 45 52 2c 20 31 7d 2c 0a 09 2f 2a 20 7b  UMBER, 1},../* {
26f0: 22 73 65 63 6f 6e 64 22 2c 20 4e 55 4d 42 45 52  "second", NUMBER
2700: 2c 20 32 7d 2c 20 2a 2f 0a 09 7b 22 74 68 69 72  , 2}, */..{"thir
2710: 64 22 2c 20 4e 55 4d 42 45 52 2c 20 33 7d 2c 0a  d", NUMBER, 3},.
2720: 09 7b 22 66 6f 75 72 74 68 22 2c 20 4e 55 4d 42  .{"fourth", NUMB
2730: 45 52 2c 20 34 7d 2c 0a 09 7b 22 66 69 66 74 68  ER, 4},..{"fifth
2740: 22 2c 20 4e 55 4d 42 45 52 2c 20 35 7d 2c 0a 09  ", NUMBER, 5},..
2750: 7b 22 73 69 78 74 68 22 2c 20 4e 55 4d 42 45 52  {"sixth", NUMBER
2760: 2c 20 36 7d 2c 0a 09 7b 22 73 65 76 65 6e 74 68  , 6},..{"seventh
2770: 22 2c 20 4e 55 4d 42 45 52 2c 20 37 7d 2c 0a 09  ", NUMBER, 7},..
2780: 7b 22 65 69 67 74 68 22 2c 20 4e 55 4d 42 45 52  {"eigth", NUMBER
2790: 2c 20 38 7d 2c 0a 09 7b 22 6e 69 6e 74 68 22 2c  , 8},..{"ninth",
27a0: 20 4e 55 4d 42 45 52 2c 20 39 7d 2c 0a 09 7b 22   NUMBER, 9},..{"
27b0: 74 65 6e 74 68 22 2c 20 4e 55 4d 42 45 52 2c 20  tenth", NUMBER, 
27c0: 31 30 7d 2c 0a 09 7b 22 65 6c 65 76 65 6e 74 68  10},..{"eleventh
27d0: 22 2c 20 4e 55 4d 42 45 52 2c 20 31 31 7d 2c 0a  ", NUMBER, 11},.
27e0: 09 7b 22 74 77 65 6c 66 74 68 22 2c 20 4e 55 4d  .{"twelfth", NUM
27f0: 42 45 52 2c 20 31 32 7d 2c 0a 09 7b 22 61 67 6f  BER, 12},..{"ago
2800: 22 2c 20 41 47 4f 2c 20 31 7d 2c 0a 09 7b 30 2c  ", AGO, 1},..{0,
2810: 20 30 2c 20 30 7d 7d 3b 0a 0a 73 74 61 74 69 63   0, 0}};..static
2820: 20 73 74 72 75 63 74 20 74 61 62 6c 65 20 6d 69   struct table mi
2830: 6c 7a 6f 6e 65 5b 5d 20 3d 20 7b 0a 09 7b 22 61  lzone[] = {..{"a
2840: 22 2c 20 5a 4f 4e 45 2c 20 31 20 48 52 53 7d 2c  ", ZONE, 1 HRS},
2850: 0a 09 7b 22 62 22 2c 20 5a 4f 4e 45 2c 20 32 20  ..{"b", ZONE, 2 
2860: 48 52 53 7d 2c 0a 09 7b 22 63 22 2c 20 5a 4f 4e  HRS},..{"c", ZON
2870: 45 2c 20 33 20 48 52 53 7d 2c 0a 09 7b 22 64 22  E, 3 HRS},..{"d"
2880: 2c 20 5a 4f 4e 45 2c 20 34 20 48 52 53 7d 2c 0a  , ZONE, 4 HRS},.
2890: 09 7b 22 65 22 2c 20 5a 4f 4e 45 2c 20 35 20 48  .{"e", ZONE, 5 H
28a0: 52 53 7d 2c 0a 09 7b 22 66 22 2c 20 5a 4f 4e 45  RS},..{"f", ZONE
28b0: 2c 20 36 20 48 52 53 7d 2c 0a 09 7b 22 67 22 2c  , 6 HRS},..{"g",
28c0: 20 5a 4f 4e 45 2c 20 37 20 48 52 53 7d 2c 0a 09   ZONE, 7 HRS},..
28d0: 7b 22 68 22 2c 20 5a 4f 4e 45 2c 20 38 20 48 52  {"h", ZONE, 8 HR
28e0: 53 7d 2c 0a 09 7b 22 69 22 2c 20 5a 4f 4e 45 2c  S},..{"i", ZONE,
28f0: 20 39 20 48 52 53 7d 2c 0a 09 7b 22 6b 22 2c 20   9 HRS},..{"k", 
2900: 5a 4f 4e 45 2c 20 31 30 20 48 52 53 7d 2c 0a 09  ZONE, 10 HRS},..
2910: 7b 22 6c 22 2c 20 5a 4f 4e 45 2c 20 31 31 20 48  {"l", ZONE, 11 H
2920: 52 53 7d 2c 0a 09 7b 22 6d 22 2c 20 5a 4f 4e 45  RS},..{"m", ZONE
2930: 2c 20 31 32 20 48 52 53 7d 2c 0a 09 7b 22 6e 22  , 12 HRS},..{"n"
2940: 2c 20 5a 4f 4e 45 2c 20 2d 31 20 48 52 53 7d 2c  , ZONE, -1 HRS},
2950: 0a 09 7b 22 6f 22 2c 20 5a 4f 4e 45 2c 20 2d 32  ..{"o", ZONE, -2
2960: 20 48 52 53 7d 2c 0a 09 7b 22 70 22 2c 20 5a 4f   HRS},..{"p", ZO
2970: 4e 45 2c 20 2d 33 20 48 52 53 7d 2c 0a 09 7b 22  NE, -3 HRS},..{"
2980: 71 22 2c 20 5a 4f 4e 45 2c 20 2d 34 20 48 52 53  q", ZONE, -4 HRS
2990: 7d 2c 0a 09 7b 22 72 22 2c 20 5a 4f 4e 45 2c 20  },..{"r", ZONE, 
29a0: 2d 35 20 48 52 53 7d 2c 0a 09 7b 22 73 22 2c 20  -5 HRS},..{"s", 
29b0: 5a 4f 4e 45 2c 20 2d 36 20 48 52 53 7d 2c 0a 09  ZONE, -6 HRS},..
29c0: 7b 22 74 22 2c 20 5a 4f 4e 45 2c 20 2d 37 20 48  {"t", ZONE, -7 H
29d0: 52 53 7d 2c 0a 09 7b 22 75 22 2c 20 5a 4f 4e 45  RS},..{"u", ZONE
29e0: 2c 20 2d 38 20 48 52 53 7d 2c 0a 09 7b 22 76 22  , -8 HRS},..{"v"
29f0: 2c 20 5a 4f 4e 45 2c 20 2d 39 20 48 52 53 7d 2c  , ZONE, -9 HRS},
2a00: 0a 09 7b 22 77 22 2c 20 5a 4f 4e 45 2c 20 2d 31  ..{"w", ZONE, -1
2a10: 30 20 48 52 53 7d 2c 0a 09 7b 22 78 22 2c 20 5a  0 HRS},..{"x", Z
2a20: 4f 4e 45 2c 20 2d 31 31 20 48 52 53 7d 2c 0a 09  ONE, -11 HRS},..
2a30: 7b 22 79 22 2c 20 5a 4f 4e 45 2c 20 2d 31 32 20  {"y", ZONE, -12 
2a40: 48 52 53 7d 2c 0a 09 7b 22 7a 22 2c 20 5a 4f 4e  HRS},..{"z", ZON
2a50: 45 2c 20 30 20 48 52 53 7d 2c 0a 09 7b 30 2c 20  E, 0 HRS},..{0, 
2a60: 30 2c 20 30 7d 7d 3b 0a 0a 73 74 61 74 69 63 20  0, 0}};..static 
2a70: 69 6e 74 20 6c 6f 6f 6b 75 70 28 69 64 29 0a 63  int lookup(id).c
2a80: 68 61 72 20 2a 69 64 3b 0a 7b 0a 23 64 65 66 69  har *id;.{.#defi
2a90: 6e 65 20 67 6f 74 69 74 20 28 67 64 5f 6c 76 61  ne gotit (gd_lva
2aa0: 6c 20 3d 20 69 2d 3e 76 61 6c 75 65 20 2c 20 69  l = i->value , i
2ab0: 2d 3e 74 79 70 65 29 0a 23 64 65 66 69 6e 65 20  ->type).#define 
2ac0: 67 65 74 69 64 20 66 6f 72 28 6a 20 3d 20 69 64  getid for(j = id
2ad0: 76 61 72 2c 20 6b 20 3d 20 69 64 3b 20 28 2a 6a  var, k = id; (*j
2ae0: 2b 2b 20 3d 20 2a 6b 2b 2b 29 20 21 3d 20 27 5c  ++ = *k++) != '\
2af0: 30 27 3b 20 2f 2a 20 76 6f 69 64 20 2a 2f 29 0a  0'; /* void */).
2b00: 0a 09 63 68 61 72 20 69 64 76 61 72 5b 32 30 5d  ..char idvar[20]
2b10: 3b 0a 09 72 65 67 69 73 74 65 72 20 63 68 61 72  ;..register char
2b20: 20 2a 6a 2c 20 2a 6b 3b 0a 09 72 65 67 69 73 74   *j, *k;..regist
2b30: 65 72 20 73 74 72 75 63 74 20 74 61 62 6c 65 20  er struct table 
2b40: 2a 69 3b 0a 09 69 6e 74 20 61 62 62 72 65 76 3b  *i;..int abbrev;
2b50: 0a 0a 09 67 65 74 69 64 3b 0a 09 69 66 20 28 73  ...getid;..if (s
2b60: 74 72 6c 65 6e 28 69 64 76 61 72 29 20 3d 3d 20  trlen(idvar) == 
2b70: 33 29 20 7b 0a 09 20 20 20 20 61 62 62 72 65 76  3) {..    abbrev
2b80: 20 3d 20 31 3b 0a 09 7d 0a 09 65 6c 73 65 20 69   = 1;..}..else i
2b90: 66 20 28 73 74 72 6c 65 6e 28 69 64 76 61 72 29  f (strlen(idvar)
2ba0: 20 3d 3d 20 34 20 26 26 20 69 64 76 61 72 5b 33   == 4 && idvar[3
2bb0: 5d 20 3d 3d 20 27 2e 27 29 20 7b 0a 09 09 61 62  ] == '.') {...ab
2bc0: 62 72 65 76 20 3d 20 31 3b 0a 09 09 69 64 76 61  brev = 1;...idva
2bd0: 72 5b 33 5d 20 3d 20 27 5c 30 27 3b 0a 09 7d 0a  r[3] = '\0';..}.
2be0: 09 65 6c 73 65 20 61 62 62 72 65 76 20 3d 20 30  .else abbrev = 0
2bf0: 3b 0a 0a 09 69 66 20 28 69 73 6c 6f 77 65 72 28  ;...if (islower(
2c00: 2a 69 64 76 61 72 29 29 20 2a 69 64 76 61 72 20  *idvar)) *idvar 
2c10: 3d 20 74 6f 75 70 70 65 72 28 2a 69 64 76 61 72  = toupper(*idvar
2c20: 29 3b 0a 0a 09 66 6f 72 20 28 69 20 3d 20 6d 64  );...for (i = md
2c30: 74 61 62 3b 20 69 2d 3e 6e 61 6d 65 3b 20 69 2b  tab; i->name; i+
2c40: 2b 29 20 7b 0a 09 09 6b 20 3d 20 69 64 76 61 72  +) {...k = idvar
2c50: 3b 0a 09 09 66 6f 72 20 28 6a 20 3d 20 69 2d 3e  ;...for (j = i->
2c60: 6e 61 6d 65 3b 20 2a 6a 2b 2b 20 3d 3d 20 2a 6b  name; *j++ == *k
2c70: 2b 2b 3b 29 20 7b 0a 09 09 09 69 66 20 28 61 62  ++;) {....if (ab
2c80: 62 72 65 76 20 26 26 20 6a 3d 3d 69 2d 3e 6e 61  brev && j==i->na
2c90: 6d 65 2b 33 29 20 72 65 74 75 72 6e 20 67 6f 74  me+3) return got
2ca0: 69 74 3b 0a 09 09 09 69 66 20 28 6a 5b 2d 31 5d  it;....if (j[-1]
2cb0: 20 3d 3d 20 30 29 20 72 65 74 75 72 6e 20 67 6f   == 0) return go
2cc0: 74 69 74 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 67 65  tit;...}..}...ge
2cd0: 74 69 64 3b 0a 09 66 6f 72 20 28 69 20 3d 20 6d  tid;..for (i = m
2ce0: 7a 74 61 62 3b 20 69 2d 3e 6e 61 6d 65 3b 20 69  ztab; i->name; i
2cf0: 2b 2b 29 0a 09 09 69 66 20 28 73 74 72 63 6d 70  ++)...if (strcmp
2d00: 28 69 2d 3e 6e 61 6d 65 2c 20 69 64 76 61 72 29  (i->name, idvar)
2d10: 20 3d 3d 20 30 29 20 72 65 74 75 72 6e 20 67 6f   == 0) return go
2d20: 74 69 74 3b 0a 0a 09 66 6f 72 20 28 6a 20 3d 20  tit;...for (j = 
2d30: 69 64 76 61 72 3b 20 2a 6a 3b 20 6a 2b 2b 29 0a  idvar; *j; j++).
2d40: 09 09 69 66 20 28 69 73 75 70 70 65 72 28 2a 6a  ..if (isupper(*j
2d50: 29 29 20 2a 6a 20 3d 20 74 6f 6c 6f 77 65 72 28  )) *j = tolower(
2d60: 2a 6a 29 3b 0a 09 66 6f 72 20 28 69 3d 6d 7a 74  *j);..for (i=mzt
2d70: 61 62 3b 20 69 2d 3e 6e 61 6d 65 3b 20 69 2b 2b  ab; i->name; i++
2d80: 29 0a 09 09 69 66 20 28 73 74 72 63 6d 70 28 69  )...if (strcmp(i
2d90: 2d 3e 6e 61 6d 65 2c 20 69 64 76 61 72 29 20 3d  ->name, idvar) =
2da0: 3d 20 30 29 20 72 65 74 75 72 6e 20 67 6f 74 69  = 0) return goti
2db0: 74 3b 0a 0a 09 67 65 74 69 64 3b 0a 09 66 6f 72  t;...getid;..for
2dc0: 20 28 69 3d 75 6e 69 74 74 62 3b 20 69 2d 3e 6e   (i=unittb; i->n
2dd0: 61 6d 65 3b 20 69 2b 2b 29 0a 09 09 69 66 20 28  ame; i++)...if (
2de0: 73 74 72 63 6d 70 28 69 2d 3e 6e 61 6d 65 2c 20  strcmp(i->name, 
2df0: 69 64 76 61 72 29 20 3d 3d 20 30 29 20 72 65 74  idvar) == 0) ret
2e00: 75 72 6e 20 67 6f 74 69 74 3b 0a 0a 09 69 66 20  urn gotit;...if 
2e10: 28 69 64 76 61 72 5b 73 74 72 6c 65 6e 28 69 64  (idvar[strlen(id
2e20: 76 61 72 29 2d 31 5d 20 3d 3d 20 27 73 27 29 0a  var)-1] == 's').
2e30: 09 09 69 64 76 61 72 5b 73 74 72 6c 65 6e 28 69  ..idvar[strlen(i
2e40: 64 76 61 72 29 2d 31 5d 20 3d 20 27 5c 30 27 3b  dvar)-1] = '\0';
2e50: 0a 09 66 6f 72 20 28 69 3d 75 6e 69 74 74 62 3b  ..for (i=unittb;
2e60: 20 69 2d 3e 6e 61 6d 65 3b 20 69 2b 2b 29 0a 09   i->name; i++)..
2e70: 09 69 66 20 28 73 74 72 63 6d 70 28 69 2d 3e 6e  .if (strcmp(i->n
2e80: 61 6d 65 2c 20 69 64 76 61 72 29 20 3d 3d 20 30  ame, idvar) == 0
2e90: 29 20 72 65 74 75 72 6e 20 67 6f 74 69 74 3b 0a  ) return gotit;.
2ea0: 0a 09 67 65 74 69 64 3b 0a 09 66 6f 72 20 28 69  ..getid;..for (i
2eb0: 20 3d 20 6f 74 68 65 72 74 62 3b 20 69 2d 3e 6e   = othertb; i->n
2ec0: 61 6d 65 3b 20 69 2b 2b 29 0a 09 09 69 66 20 28  ame; i++)...if (
2ed0: 73 74 72 63 6d 70 28 69 2d 3e 6e 61 6d 65 2c 20  strcmp(i->name, 
2ee0: 69 64 76 61 72 29 20 3d 3d 20 30 29 20 72 65 74  idvar) == 0) ret
2ef0: 75 72 6e 20 67 6f 74 69 74 3b 0a 0a 09 67 65 74  urn gotit;...get
2f00: 69 64 3b 0a 09 69 66 20 28 73 74 72 6c 65 6e 28  id;..if (strlen(
2f10: 69 64 76 61 72 29 20 3d 3d 20 31 20 26 26 20 69  idvar) == 1 && i
2f20: 73 61 6c 70 68 61 28 2a 69 64 76 61 72 29 29 20  salpha(*idvar)) 
2f30: 7b 0a 09 09 69 66 20 28 69 73 75 70 70 65 72 28  {...if (isupper(
2f40: 2a 69 64 76 61 72 29 29 20 2a 69 64 76 61 72 20  *idvar)) *idvar 
2f50: 3d 20 74 6f 6c 6f 77 65 72 28 2a 69 64 76 61 72  = tolower(*idvar
2f60: 29 3b 0a 09 09 66 6f 72 20 28 69 20 3d 20 6d 69  );...for (i = mi
2f70: 6c 7a 6f 6e 65 3b 20 69 2d 3e 6e 61 6d 65 3b 20  lzone; i->name; 
2f80: 69 2b 2b 29 0a 09 09 09 69 66 20 28 73 74 72 63  i++)....if (strc
2f90: 6d 70 28 69 2d 3e 6e 61 6d 65 2c 20 69 64 76 61  mp(i->name, idva
2fa0: 72 29 20 3d 3d 20 30 29 20 72 65 74 75 72 6e 20  r) == 0) return 
2fb0: 67 6f 74 69 74 3b 0a 09 7d 0a 0a 09 72 65 74 75  gotit;..}...retu
2fc0: 72 6e 28 49 44 29 3b 0a 7d 0a 0a 64 61 74 65 5f  rn(ID);.}..date_
2fd0: 69 6e 66 6f 20 67 65 74 64 61 74 65 28 70 2c 20  info getdate(p, 
2fe0: 6e 6f 77 29 0a 63 68 61 72 20 2a 70 3b 0a 73 74  now).char *p;.st
2ff0: 72 75 63 74 20 74 69 6d 65 62 20 2a 6e 6f 77 3b  ruct timeb *now;
3000: 0a 7b 0a 23 64 65 66 69 6e 65 20 6d 63 68 65 63  .{.#define mchec
3010: 6b 28 66 29 09 69 66 20 28 66 3e 31 29 20 65 72  k(f).if (f>1) er
3020: 72 2b 2b 0a 20 20 20 20 69 6e 74 20 67 64 5f 70  r++.    int gd_p
3030: 61 72 73 65 28 29 3b 0a 20 20 20 20 74 69 6d 65  arse();.    time
3040: 5f 74 20 6d 6f 6e 74 68 61 64 64 28 29 3b 0a 20  _t monthadd();. 
3050: 20 20 20 69 6e 74 20 65 72 72 3b 0a 20 20 20 20     int err;.    
3060: 73 74 72 75 63 74 20 74 6d 20 2a 6c 74 3b 0a 20  struct tm *lt;. 
3070: 20 20 20 73 74 72 75 63 74 20 74 69 6d 65 62 20     struct timeb 
3080: 66 74 7a 3b 0a 20 20 20 20 64 61 74 65 5f 69 6e  ftz;.    date_in
3090: 66 6f 20 76 61 6c 75 65 3b 0a 20 20 20 20 0a 20  fo value;.    . 
30a0: 20 20 20 74 69 6d 65 5f 74 20 73 64 61 74 65 2c     time_t sdate,
30b0: 20 74 6f 64 3b 0a 20 20 20 20 0a 20 20 20 20 6c   tod;.    .    l
30c0: 70 74 72 20 3d 20 70 3b 0a 20 20 20 20 69 66 20  ptr = p;.    if 
30d0: 28 6e 6f 77 20 3d 3d 20 28 28 73 74 72 75 63 74  (now == ((struct
30e0: 20 74 69 6d 65 62 20 2a 29 20 4e 55 4c 4c 29 29   timeb *) NULL))
30f0: 20 7b 0a 09 6e 6f 77 20 3d 20 26 66 74 7a 3b 0a   {..now = &ftz;.
3100: 09 66 74 69 6d 65 28 26 66 74 7a 29 3b 0a 20 20  .ftime(&ftz);.  
3110: 20 20 7d 0a 20 20 20 20 6c 74 20 3d 20 6c 6f 63    }.    lt = loc
3120: 61 6c 74 69 6d 65 28 26 6e 6f 77 2d 3e 74 69 6d  altime(&now->tim
3130: 65 29 3b 0a 20 20 20 20 79 65 61 72 20 3d 20 6c  e);.    year = l
3140: 74 2d 3e 74 6d 5f 79 65 61 72 3b 0a 20 20 20 20  t->tm_year;.    
3150: 6d 6f 6e 74 68 20 3d 20 6c 74 2d 3e 74 6d 5f 6d  month = lt->tm_m
3160: 6f 6e 2b 31 3b 0a 20 20 20 20 64 61 79 20 3d 20  on+1;.    day = 
3170: 6c 74 2d 3e 74 6d 5f 6d 64 61 79 3b 0a 20 20 20  lt->tm_mday;.   
3180: 20 72 65 6c 73 65 63 20 3d 20 30 3b 20 72 65 6c   relsec = 0; rel
3190: 6d 6f 6e 74 68 20 3d 20 30 3b 0a 20 20 20 20 74  month = 0;.    t
31a0: 69 6d 65 66 6c 61 67 20 3d 20 7a 6f 6e 65 66 6c  imeflag = zonefl
31b0: 61 67 20 3d 20 64 61 74 65 66 6c 61 67 20 3d 20  ag = dateflag = 
31c0: 64 61 79 66 6c 61 67 20 3d 20 72 65 6c 66 6c 61  dayflag = relfla
31d0: 67 20 3d 20 30 3b 0a 20 20 20 20 6f 75 72 7a 6f  g = 0;.    ourzo
31e0: 6e 65 20 3d 20 6e 6f 77 2d 3e 74 69 6d 65 7a 6f  ne = now->timezo
31f0: 6e 65 3b 0a 20 20 20 20 64 79 6c 69 67 68 74 20  ne;.    dylight 
3200: 3d 20 4d 41 59 42 45 3b 0a 20 20 20 20 68 68 20  = MAYBE;.    hh 
3210: 3d 20 6d 6d 20 3d 20 73 73 20 3d 20 30 3b 0a 20  = mm = ss = 0;. 
3220: 20 20 20 6d 65 72 69 64 20 3d 20 32 34 3b 0a 20     merid = 24;. 
3230: 20 20 20 0a 20 20 20 20 69 66 20 28 65 72 72 20     .    if (err 
3240: 3d 20 67 64 5f 70 61 72 73 65 28 29 29 20 7b 0a  = gd_parse()) {.
3250: 09 76 61 6c 75 65 2e 73 65 63 6f 6e 64 73 20 3d  .value.seconds =
3260: 20 2d 31 3b 0a 09 72 65 74 75 72 6e 20 76 61 6c   -1;..return val
3270: 75 65 3b 0a 20 20 20 20 7d 0a 20 20 20 20 0a 20  ue;.    }.    . 
3280: 20 20 20 6d 63 68 65 63 6b 28 74 69 6d 65 66 6c     mcheck(timefl
3290: 61 67 29 3b 0a 20 20 20 20 6d 63 68 65 63 6b 28  ag);.    mcheck(
32a0: 7a 6f 6e 65 66 6c 61 67 29 3b 0a 20 20 20 20 6d  zoneflag);.    m
32b0: 63 68 65 63 6b 28 64 61 74 65 66 6c 61 67 29 3b  check(dateflag);
32c0: 0a 20 20 20 20 6d 63 68 65 63 6b 28 64 61 79 66  .    mcheck(dayf
32d0: 6c 61 67 29 3b 0a 20 20 20 20 0a 20 20 20 20 69  lag);.    .    i
32e0: 66 20 28 65 72 72 29 20 7b 0a 09 76 61 6c 75 65  f (err) {..value
32f0: 2e 73 65 63 6f 6e 64 73 20 3d 20 2d 31 3b 0a 09  .seconds = -1;..
3300: 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0a 20 20  return value;.  
3310: 20 20 7d 0a 20 20 20 20 69 66 20 28 64 61 74 65    }.    if (date
3320: 66 6c 61 67 20 7c 7c 20 74 69 6d 65 66 6c 61 67  flag || timeflag
3330: 20 7c 7c 20 64 61 79 66 6c 61 67 29 20 7b 0a 09   || dayflag) {..
3340: 73 64 61 74 65 20 3d 20 64 61 74 65 63 6f 6e 76  sdate = dateconv
3350: 28 6d 6f 6e 74 68 2c 64 61 79 2c 79 65 61 72 2c  (month,day,year,
3360: 68 68 2c 6d 6d 2c 73 73 2c 6d 65 72 69 64 2c 6f  hh,mm,ss,merid,o
3370: 75 72 7a 6f 6e 65 2c 64 79 6c 69 67 68 74 29 3b  urzone,dylight);
3380: 0a 09 69 66 20 28 73 64 61 74 65 20 3c 20 30 29  ..if (sdate < 0)
3390: 20 7b 0a 09 20 20 20 20 76 61 6c 75 65 2e 73 65   {..    value.se
33a0: 63 6f 6e 64 73 20 3d 20 2d 31 3b 0a 09 20 20 20  conds = -1;..   
33b0: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0a 09   return value;..
33c0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65  }.    }.    else
33d0: 20 7b 0a 09 73 64 61 74 65 20 3d 20 6e 6f 77 2d   {..sdate = now-
33e0: 3e 74 69 6d 65 3b 0a 09 69 66 20 28 72 65 6c 66  >time;..if (relf
33f0: 6c 61 67 20 3d 3d 20 30 29 0a 09 20 20 20 20 73  lag == 0)..    s
3400: 64 61 74 65 20 2d 3d 20 28 6c 74 2d 3e 74 6d 5f  date -= (lt->tm_
3410: 73 65 63 20 2b 20 6c 74 2d 3e 74 6d 5f 6d 69 6e  sec + lt->tm_min
3420: 20 2a 20 36 30 0a 09 09 20 20 20 20 20 20 2b 20   * 60...      + 
3430: 6c 74 2d 3e 74 6d 5f 68 6f 75 72 20 2a 20 28 36  lt->tm_hour * (6
3440: 30 4c 20 2a 20 36 30 4c 29 29 3b 0a 20 20 20 20  0L * 60L));.    
3450: 7d 0a 20 20 20 20 0a 20 20 20 20 73 64 61 74 65  }.    .    sdate
3460: 20 2b 3d 20 72 65 6c 73 65 63 3b 0a 20 20 20 20   += relsec;.    
3470: 73 64 61 74 65 20 2b 3d 20 6d 6f 6e 74 68 61 64  sdate += monthad
3480: 64 28 73 64 61 74 65 2c 20 72 65 6c 6d 6f 6e 74  d(sdate, relmont
3490: 68 29 3b 0a 20 20 20 20 0a 20 20 20 20 69 66 20  h);.    .    if 
34a0: 28 64 61 79 66 6c 61 67 20 26 26 20 21 64 61 74  (dayflag && !dat
34b0: 65 66 6c 61 67 29 20 7b 0a 09 74 6f 64 20 3d 20  eflag) {..tod = 
34c0: 64 61 79 63 6f 6e 76 28 64 61 79 6f 72 64 2c 20  dayconv(dayord, 
34d0: 64 61 79 72 65 71 2c 20 73 64 61 74 65 29 3b 0a  dayreq, sdate);.
34e0: 09 73 64 61 74 65 20 2b 3d 20 74 6f 64 3b 0a 20  .sdate += tod;. 
34f0: 20 20 20 7d 0a 20 20 20 20 0a 23 69 66 20 64 65     }.    .#if de
3500: 66 69 6e 65 64 28 44 45 42 55 47 32 29 0a 20 20  fined(DEBUG2).  
3510: 20 20 28 76 6f 69 64 29 20 66 70 72 69 6e 74 66    (void) fprintf
3520: 28 73 74 64 65 72 72 2c 20 22 74 69 6d 65 66 6c  (stderr, "timefl
3530: 61 67 20 3d 20 25 64 2c 20 7a 6f 6e 65 66 6c 61  ag = %d, zonefla
3540: 67 20 3d 20 25 64 2c 20 64 61 74 65 66 6c 61 67  g = %d, dateflag
3550: 20 3d 20 25 64 5c 6e 22 2c 0a 09 09 20 20 20 74   = %d\n",...   t
3560: 69 6d 65 66 6c 61 67 2c 20 7a 6f 6e 65 66 6c 61  imeflag, zonefla
3570: 67 2c 20 64 61 74 65 66 6c 61 67 29 3b 0a 20 20  g, dateflag);.  
3580: 20 20 28 76 6f 69 64 29 20 66 70 72 69 6e 74 66    (void) fprintf
3590: 28 73 74 64 65 72 72 2c 20 22 64 61 79 66 6c 61  (stderr, "dayfla
35a0: 67 20 3d 20 25 64 2c 20 72 65 6c 66 6c 61 67 20  g = %d, relflag 
35b0: 3d 20 25 64 5c 6e 22 2c 0a 09 09 20 20 20 64 61  = %d\n",...   da
35c0: 79 66 6c 61 67 2c 20 72 65 6c 66 6c 61 67 29 3b  yflag, relflag);
35d0: 0a 20 20 20 20 28 76 6f 69 64 29 20 66 70 72 69  .    (void) fpri
35e0: 6e 74 66 28 73 74 64 65 72 72 2c 20 22 73 65 63  ntf(stderr, "sec
35f0: 6f 6e 64 73 20 3d 20 25 6c 75 5c 6e 22 2c 20 73  onds = %lu\n", s
3600: 64 61 74 65 29 3b 0a 23 65 6e 64 69 66 0a 20 20  date);.#endif.  
3610: 20 20 0a 20 20 20 20 76 61 6c 75 65 2e 73 65 63    .    value.sec
3620: 6f 6e 64 73 20 3d 20 73 64 61 74 65 3b 0a 20 20  onds = sdate;.  
3630: 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0a    return value;.
3640: 7d 0a 0a 2f 2a 41 52 47 53 55 53 45 44 2a 2f 0a  }../*ARGSUSED*/.
3650: 76 6f 69 64 20 67 64 5f 65 72 72 6f 72 28 63 68  void gd_error(ch
3660: 61 72 20 2a 73 29 0a 7b 0a 20 20 20 20 72 65 74  ar *s).{.    ret
3670: 75 72 6e 3b 0a 7d 0a                             urn;.}.