usr/bin/date000075500000171370147207261210007003 0ustar00ELF>J"@@x@8 @@@@@@88@8@@@ ``X ``TT@T@DDPtdLL@L@QtdRtd``x x /lib64/ld-linux-x86-64.so.2GNU GNU3(-i|CnՁc_vyL`K0JSbr=Z=K7 ) C Qh E3&lGEX'`ttlibc.so.6__stpcpy_chkfflushstrcpy__printf_chksetlocalembrtowcfopenstrncmpoptindstrrchrdcgettexterror__stack_chk_failiswprintreallocabortstdin_exitprogram_invocation_namestrftime__ctype_get_mb_cur_maxcallocstrlenungetcmemset__errno_locationmemcmpunsetenv__fprintf_chkputenvstdoutfputclseekmemcpyfclosemallocmbsinit__uflownl_langinfo__ctype_b_locgetenvoptarg__freadingstderrclock_settimefscanfgetopt_longsettimeofdayfileno__getdelimfwritegettimeofdayclock_gettime__fpendinglocaltimestrchrmktimeprogram_invocation_short_namefdopen__ctype_toupper_loc__ctype_tolower_loc__sprintf_chk__xstatbindtextdomainstrcmp__libc_start_mainfseeko__overflowfputs_unlockedfree__progname__progname_full__cxa_atexit__gmon_start__GLIBC_2.3.4GLIBC_2.14GLIBC_2.4GLIBC_2.17GLIBC_2.2.5GLIBC_2.3ti ii &0ui ;ii G` ```+`,`.`K`O` `(`0`8`@`H`P` X` `` h` p`x```````````````` `!`"`#`$`% `&(`'0`(8`)@`*H`,P`-X`/``0h`1p`2x`3`4`5`6`7`8`9`:`;`<`=`>`?`@`B`C`D`E`F`G`H `I(`J0`L8`M@`NH`PHH Ht{H5 % @% h% h% h% h% h% h% h% hp% h`%z h P%r h @%j h 0%b h %Z h %R h%J h%B h%: h%2 h%* h%" h% h% h% hp% h`% hP% h@% h0% h % h% h% h% h % h!% h"% h#% h$% h%% h&% h'p% h(`%z h)P%r h*@%j h+0%b h, %Z h-%R h.%J h/%B h0%: h1%2 h2%* h3%" h4% h5% h6% h7p% h8`% h9P% h:@% h;0% h< % h=% h>% h?% h@% hA% hB% hC% hD% hE% hFAWE1AVE1AUATE1USHHH>dH%(H$1fVH5H5|H=|"H=|H=:|D$HD$H$H M HƑE1Hމ);d~5sffOrH* L8D=~3IRL-SMt$H51[1H¿1M>fut\HHK HD H %H={ALH H0HDlH[IIlH={6tH? H0HH H H H=U{ALHD,HGIIH L0X=}ukHf L{HzH5m{E1HH H81Bp1 H|AjH5zHú1HH111z HY D$HHD$1H9 HH$E1'MAMA1H<$AA~&H5%1i1H11lʀjH Hc9~+p9H<À?+z|$oMEA>-1A~&H5y1IH> H(HD$ L|$(HD$ HD$(H$HD$0HD$H<$H LHIxwHt$ H|$1Cu?H|$ JD/8 tIhH5iyHú1AHH1111Ht$0HT$8L !wH|$ HqH|$ 1@|$H5‹UH5;LvHHLgH0HHٿ1|$Hڿ Hc9HH|$0HHD$MHD$8D$u4H|$PgH52xHú1 HH11|$Ht$0HT$8L!EHT$@Lpt0HL1H$HD$0H$HD$8zLfH0HnjH1KMt6H51DD$L$"1H¿1DD$L$Hy H5r HcPL$IH|$0fH5v11H0H118eHH5ljH|$0@&lDD$L$X8IċL$DD$JH5>v1@DD$IċL$&HL$H$H|$0HHE1HHD$?1I^HHPTI`@H@H@f.f`UH-`HHw]øHt]``UH-`HHHH?HHu]úHt]Hƿ`= uUH~]ֿ @H= tHtU`H]{sATUSHH@H|$HT$Ht$dH%(HD$81!HHL%L9}H-& DD$1HH}K$H}HG(H;G0HPHW( L9t$HL$8dH3 %(H@[]A\DH5"DH5HD$HT$cH|$Ht$ 1?$H5hsHú1HH111x_ DADf.AUATUSHt@HQ H5:t1HHH) HH81`L% H5"t1I$RH1HHH H5Ot1L+ HL%L+H5st1LHL+H5t1LHL+H59v1LHL+H5v1LHL+H5x1{LHL+H5x1ZLH_L+H5x19LH>L+H5T$ EЅɈT$  EHD$ AxKOEHD$ QdH)1z9AA)1E1fAEEHD$(HHDH@tA:HHiA)ǃ0@yuυuE9EMEDt$X E |$-=1E1D$`HL$(HQHHT$hT$X)HH)ЅD$p |$_ HcT$XLHH9E1EAAIHcHLEL9HttHvaD$XuY|$0McIBE1Ht?Hl$xHHLMIf.H IL9wHHl$xM|$`HrME1HLct$ptfH޿0IOM9rMM1E1HD$hH)H9HHHD$`LHBHHL$hH9 Ht]H9s=D$Xu5McL+d$`|$0 E1Mt@H޿ IM9u|$  HT$`HHL|$hE HD$ QAdAp)ljA)c؃dNPAD$<: IT$A@DAA = L9wHL$IdL\$(D$ L|$ HH$@L\$(rAEH<"t%H<\H0Hh@r@<"uH=GHκHL$(Ү|$ HL$(1҅Lm@AEPv< tyDIf.1H$DŽ$ @ HDŽ$$H=GO1҅!>H\$0H$HD\HH$LHD$@H$HD$HH$HD$PH$HD$XH$HD$`H$HD$hH$HD$pLHLHD$HL$H$xH$pu}$t$X$IDD$L))))1H$H~19H)DLD$`)ȉD$LS1HHH$8H$0H$@HH H |$PL$LD\$TD 7DED9@H?1D9H?1@E9H?8 $LDT$TDL$PDD$LD$H$D$D$D$@$D$`荮1HHH$t9H$HHHH)H+D$hH)H9H?18HH$(H$`I& .HIIHH?HH)Hiʚ;I)Iʚ;LILH?HHH)H$HHiʚ;LiI)LL$PH)N9JII)HH?IOML$XHH)M9I?I<D1L9L$XI?D1 M9I?D1L9H?8rHD$H8HpHωD$ &D$ LE"H~$H$t.tbHw3ʉT$HH$T$DH$ T$@HqH vH tD$H1HDfAlIOHHQH wQ H uº LHT$(LL$ Ht$HT$(HLL$ Ht$D@USHHdH%(HD$1Htar7Hu)utH|$dH3<%(H[]@ H0HHtS@1f.1>DudfdF-l1vDjt@AWAVAUATIHUSHHdH%(H$1,Iǃv.H߉T$ MT$ III)HMDLHHt4I t.1H$dH3 %(H[]A\A]A^A_Mt tM)IuMb0 wLCJ+A0I0 wI9uI'L|$ 1SDSDHAHL9u@IUA@D$PAGD$LAGD$HAG D$DMAF0 AVJЃ DBЉD$@HD$@L$LH$HD$HH$HD$PH$HD$XH$HD$`H$HD$hDŽ$H$HD$pH$QHHD$LWG3T$P3D$TL$@ ‹G 3D$L ‹G3D$H ‹G3D$D ‹1 tH<L$HLg59H|$fPLl@HD$I$DIE1H|$賥HHHfH|$TLAO|14DIwH|$TCUL|$ D$@]/f.DHSHtw/]HtRHPHH)H~BHpH=}Fu.H=uFHH@@8uHXH!n HH'q HHn H[H n H=E7HP蛤f.HHHdH%(HD$81HHt]4$H$HL$8dH3 %(HHD$HBHD$HBHD$HBHD$ HB HD$(HB(HD$0HB0HuHHAUATAHUH1SH葤H9HtHH[]A\A]߀UuhP߀Tu<P߀Fu0x-u*x8u$xu;`H EHDHDH<HDAHE|DGuP߀Buπx1uɀx8uÀx0ux3ux0uxuIHDHDA}`HE#ff.AWIAVEAUIATUSDHH$H|$(HL$ DD$4D$HD$XH$H$H$ HD$xdH%(H$1:H$AD$3 H6DDL\$ HcHDD$3D$ E1HD$h1D$3M1MMރD$8D$ $H$HD$`H$HD$pL9IzMAt |$ M)E1E A~HCAHcHD$4$HEI9A|)?uA4N߀wrHQ8tb|$3L9s H|$(?HSI9v H|$(D"HSI9v H|$(D"HSI9v H|$(D?HAHfD|$8t $u!Ht$XHtDDҋrEt|$3L9s HD$(\HHL9s HD$(D$HL9IA<)~HMMu|$4u |$3|$3u6H|$ht.HT$ht"HL$(H)fDI9vHuL9HH|$(fIIH|$4|$3DMMHD$xD$LDD$4H|$(LH$LHD$H$AHD$WH$dH3<%(H[]A\A]A^A_fDr|$4{|$ -A\Dbfffvfnftfaf|$ }|$3L9s HD$(\HUHCI9v/A|)WЀ w!I9HCI9v HD$(D0HCHA0cf|$ t|$3t ED|$4%|$3ZL9s HD$('HCI9v HD$(D\HCI9v HD$(D'HDH$LL$PLT$HD\$@腡HAD\$@LT$HLL$PPf"T$ H|$3HL$(s@L9s\HsI9vD@0@tHsI9vD@0@tAHA0HH9jL9sD$E$)HuEtL9s\HE1D|$34MtHD$('H>D$ AHD$hW|$3MtHD$("H5D$ AHD$hD$3D$ E1HD$h1H=D$3D$ A1D$4HD$hDHH5D$3D$ A1D$4HD$hD\$4t3H=-=L\$ H==H$~L\$ HD$x1ۀ|$3u/H$t HL$(L9sHuHl$xL\$8HHl$hID$ L\$8INdu%IvLLT$HLL$@轛LT$HLL$@IM9M)rOHt$hLLLL$PLT$HLD$@hLD$@LT$HLL$Pu|$3 AE1HD$`IH1H$D$Hl$HHL$D$ALl$PMLt$@L$HD$HHT$@HL$`H|$pL,O4/L)LHHHH|$3tL|$4uEHt?fDA<O!wHH+HHHH9uы$]H|$`DDH5:DD$D$HHl$HL$H$Ll$PLt$@MH"T$ $*HLl$PL\$@WAy˘LL$LD$PD\$HLL$@|L$ILD$PD\$HLL$@#|$3zDH|$(0"DHHl$HL$D$MH$D$Ll$PLt$@ HHl$HL$D$D$MH$Ll$PLt$@MMLt$@LHHl$HL$D$I9D$H$Ll$PL$v"A?uDA<tHHTI9wSH8D$ A1HD$h3.H0D$ A1HD$hAWLcAVAUATUSHHHHt$ HT$(IŋEL%c D$4kD;=c rhAoHc ALHI9-1&H5b H=b IHb H0Hx=b L1H)HHL-b HC0IkMDL{M$Mt$HD$HC(HL$(HT$ ALL<$LHD$L\$8CL\$8I9wnHpH~b I9I4$tLHt$8Ht$8HHt$8ID$IHC0DHL$(AHT$ Ht$8LHD$HC(L<$HD$D$4AEHHL[]A\A]A^A_ÐL IHa 脕@ATUHS脕H=b D HHþ8HE&D#[]A\@f.Hb HHENjDf.Hyb HHElj0Df.HYb HHE@@H4~1ƒ1Vf.Hb HHDGwÐf.Ha HHHDHtHt Hw(HW0Hlff.AWHa IAVIAUIATUSLH(MHDH|$>D HHC0DKH|$LLLHD$HC(HD$HCH$DDeH([]A\A]A^A_ÐAWH7a AVIAUIATIUSHHHHHD1INjM@ kLSLL1D$HC01LT$0AHD$HC(L$HD$DzHpHD$8HHt$(d HHD$ HC0LT$0Ht$(ALLHD$HC(L$HD$D+D$MAt L\$8M$HD$ HH[]A\A]A^A_fH1fDAT^ L%^ USv$LHIlH{H苒H9uI|$H^ H9tpH^ H^ H^ I9tLJH^ []o^ A\@H _ H f.H _ @H1fDHH1ATIUSH@HdH%(HD$81KHHLHL$8dH3 %(u H@[]A\艒fAUIATIUSHHHdH%(HD$81LHL6HT$8dH3%(u HH[]A\A]&fDH14@HH1ATIUHSH@dH%(HD$81HS^ HH$HM^ HD$HI^ HD$HE^ HD$HA^ HD$ H=^ HD$(H9^ HD$0H1LH_HL$8dH3 %(u H@[]A\Q@H@:fD:&fDAUMATIUSHHdH%(HD$81Hw] HH$Hq] HD$Hm] HD$Hi] HD$He] HD$ Ha] HD$(H]] HD$0#HLLHL$8dH3 %(u HH[]A\A]sID@HHH1IHHH1f.H )[ @HH1H@H1fDUHSH1H(dH%(HD$1譑1҅tC8t7HHKHS㥛 H1H$HH?HHH)HT$Ht$dH34%(uH([]d@AWAVAUATMUHSLHXHIHv2I1HH5p21Hj5HAH1ґH521诎HH贏I H4JcHf.LK8LCH53HC1Lk0Lc(L{ LsLL$@LD$8HHD$0?LL$@LD$8HLl$Ld$HL|$L4$LL$ LL$0H1HX[]A\A]A^A_@LS@LK8H53HCLCLk0Lc(L{ LsHLT$HLL$@HD$0LD$81覍LL$@LT$HHLD$8Ll$HLd$L|$HLL$ LL$0L4$LT$(1pHX[]A\A]A^A_Ð蛌HH5012HXHH[]A\A]A^A_H¾1LcH50H1HXHH[]MH¾A\A]A^A_1؏LkLcH5_0H1袌HXHMHMH[]A\A]A^A_1鉏fLsLkH5A1LcH1NL4$HMMHپH1?'f.L{ LsH51LkLc1HL|$HL4$MMHپH1LCH50Lc(L{ Ls1LkHLD$0衋LD$0HLd$L|$L4$MHپH1膎nLKLCH50Lk0Lc(1L{ LsHLL$8LD$08LL$8LD$0HLl$Ld$HL|$L4$H1IHHo.1fLS@LK8HCLCH50Lk0Lc(L{ LsLT$HLL$@HD$0LD$8HE1I8tIK<u@HhLE1dL%(LD$XE1I$ELXADMMOt.II t$DA0rLXMSLPMMOuHD$XdH3%(uHhfHLD$@LL$Ht7)D$P)L$`)T$p)$)$)$)$)$dH%(HD$1H$IHD$HD$ $ D$0HD$HD$dH3%(uHifSH5,1H,Hƿ1vH5,1H Ht Hƿ1FH7Q H5.1H蹈HH[齉f.SHgHt[HtfD1HHH9r HPf.HSHtHHt[HtV1[HtHH1HH9r HP]f.HIHt51HIH9s=HAHHHIHXHu1Ҹ1IHHP@f.HHt(HH9w0HPHHHH@HHDHHPSHwH1H[鹇fHHtHXUHHSHH,HHH[]H(SHdžHHp[f.H5H-H1yHQ H11:H訅ATUSHԇHx\hu4H\tD胅D HHEt De[]A\fH與1zHuH[]A\鸅HSHt uH[镇DtHߺ1 H[pSHHHGH9GtHH[!HG H9G(uHHuT$ H4$T$ H4$ӅHt #H1H[f.ATUHS贄]HI …ut Mt,[]A\Dһu2[]A\D1ۃ8 ۉ[]A\f.AWAVAUATUSHdH%(H$1bL5SQ HHH'(HDMuLhIlH[LtA.@t)LHrt @*uA~uL)I\;H*HDH$dH3 %(H?HĨ[]A\A]A^A_H=*ނHIt 8gL=v* A A</A$.MI}GHHLLḦ́$tBD%/IHcharset.IEsAEaliafAE H1辅AH5UHIHD$`Ld$ H$HD$fIGI;G?HPIW8 tGvڃ#L詄HL$H5)1LLPL H!%tLT$DHJHDHL)A I!%tDIJLDIL+T$H<$I&HHHxHT$LT$H $踃LT$HT$IM:L4$HLH)M)LLCHt$K|5M1IGI;GL蛀D@L52%H葀L5BN E1$H^HItH@DtIGI;GHPIW u݃LH$HwAtH$LLT$HT$HHHpH $LT$IHT$L5k$<ȀLL5W$L1L@af.AWAAVIAUIATL%; UH-; SL)1HH~HtLLDAHH9uH[]A\A]A^A_Ðf.f.@H1Ht H1骂1HHtime %s is out of range %s online help: <%s> GNU coreutilsen_/usr/share/locale--rfc-3339--iso-8601TZ=UTC0David MacKenzieextra operand %s%a %b %e %H:%M:%S %Z %Ystandard inputinvalid date %scannot set datefilereferencerfc-822rfc-2822setuctutcuniversalhelpversionhoursminutessecondsnsTry '%s --help' for more information. Usage: %s [OPTION]... [+FORMAT] or: %s [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] Display the current time in the given FORMAT, or set the system date. Mandatory arguments to long options are mandatory for short options too. -d, --date=STRING display time described by STRING, not 'now' -f, --file=DATEFILE like --date once for each line of DATEFILE -I[TIMESPEC], --iso-8601[=TIMESPEC] output date/time in ISO 8601 format. TIMESPEC='date' for date only (the default), 'hours', 'minutes', 'seconds', or 'ns' for date and time to the indicated precision. -r, --reference=FILE display the last modification time of FILE -R, --rfc-2822 output date and time in RFC 2822 format. Example: Mon, 07 Aug 2006 12:34:56 -0600 --rfc-3339=TIMESPEC output date and time in RFC 3339 format. TIMESPEC='date', 'seconds', or 'ns' for date and time to the indicated precision. Date and time components are separated by a single space: 2006-08-07 12:34:56-06:00 -s, --set=STRING set time described by STRING -u, --utc, --universal print or set Coordinated Universal Time (UTC) --help display this help and exit --version output version information and exit FORMAT controls the output. Interpreted sequences are: %% a literal % %a locale's abbreviated weekday name (e.g., Sun) %A locale's full weekday name (e.g., Sunday) %b locale's abbreviated month name (e.g., Jan) %B locale's full month name (e.g., January) %c locale's date and time (e.g., Thu Mar 3 23:05:25 2005) %C century; like %Y, except omit last two digits (e.g., 20) %d day of month (e.g., 01) %D date; same as %m/%d/%y %e day of month, space padded; same as %_d %F full date; same as %Y-%m-%d %g last two digits of year of ISO week number (see %G) %G year of ISO week number (see %V); normally useful only with %V %h same as %b %H hour (00..23) %I hour (01..12) %j day of year (001..366) %k hour, space padded ( 0..23); same as %_H %l hour, space padded ( 1..12); same as %_I %m month (01..12) %M minute (00..59) %n a newline %N nanoseconds (000000000..999999999) %p locale's equivalent of either AM or PM; blank if not known %P like %p, but lower case %r locale's 12-hour clock time (e.g., 11:11:04 PM) %R 24-hour hour and minute; same as %H:%M %s seconds since 1970-01-01 00:00:00 UTC %S second (00..60) %t a tab %T time; same as %H:%M:%S %u day of week (1..7); 1 is Monday %U week number of year, with Sunday as first day of week (00..53) %V ISO week number, with Monday as first day of week (01..53) %w day of week (0..6); 0 is Sunday %W week number of year, with Monday as first day of week (00..53) %x locale's date representation (e.g., 12/31/99) %X locale's time representation (e.g., 23:13:48) %y last two digits of year (00..99) %Y year %z +hhmm numeric time zone (e.g., -0400) %:z +hh:mm numeric time zone (e.g., -04:00) %::z +hh:mm:ss numeric time zone (e.g., -04:00:00) %:::z numeric time zone with : to necessary precision (e.g., -04, +05:30) %Z alphabetic time zone abbreviation (e.g., EDT) By default, date pads numeric fields with zeroes. The following optional flags may follow '%': - (hyphen) do not pad the field _ (underscore) pad with spaces 0 (zero) pad with zeros ^ use upper case if possible # use opposite case if possible After any flags comes an optional field width, as a decimal number; then an optional modifier, which is either E to use the locale's alternate representations if available, or O to use the locale's alternate numeric symbols if available. Examples: Convert seconds since the epoch (1970-01-01 UTC) to a date $ date --date='@2147483647' Show the time on the west coast of the US (use tzselect(1) to find TZ) $ TZ='America/Los_Angeles' date Show the local time for 9AM next Friday on the west coast of the US $ date --date='TZ="America/Los_Angeles" 09:00 next Fri' http://www.gnu.org/software/coreutils/Report %s translation bugs to For complete documentation, run: info coreutils '%s invocation' multiple output formats specifiedthe options to specify dates for printing are mutually exclusivethe options to print and set the time may not be used togetherthe argument %s lacks a leading '+'; when using an option to specify date(s), any non-option argument must be a format string beginning with '+'%Y-%m-%d%Y-%m-%dT%H:%M:%S%z%Y-%m-%dT%H:%M:%S,%N%z%Y-%m-%dT%H%z%Y-%m-%dT%H:%M%z%Y-%m-%d%Y-%m-%d %H:%M:%S%:z%Y-%m-%d %H:%M:%S.%N%:zd:f:I::r:Rs:u%a, %d %b %Y %H:%M:%S %z8.22invalid argument %s for %sambiguous argument %s for %sValid arguments are: - %s, %swrite error%s: %s%m/%d/%y%Y-%m-%d%H:%M%H:%M:%S7SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSޑ,SSSSS͑,GSSSSSSۅŅS,Sь|SSZSцTZGMTWETAMJANUARYYEARTOMORROWDSTTZ="XXX%s%ld:%02dABFGPQUVXWESTBSTARTBRTBRSTNSTNDTCLTCLSTEDTCSTCDTMSTMDTPSTPDTAKSTAKDTHSTHASTHADTSSTWATCETCESTMETMEZMESTMESZEETEESTCATSASTEATMSKMSDISTSGTJSTGSTNZSTNZDTUTUTCYESTERDAYTODAYNOWLASTTHISNEXTFIRSTTHIRDFOURTHFIFTHSIXTHSEVENTHEIGHTHNINTHTENTHELEVENTHTWELFTHAGOHENCEMONTHFORTNIGHTWEEKHOURMINUTEMINSECONDSECFEBRUARYMARCHAPRILMAYJUNEJULYAUGUSTSEPTEMBERSEPTOCTOBERNOVEMBERDECEMBERSUNDAYMONDAYTUESDAYTUESWEDNESDAYWEDNESTHURSDAYTHURTHURSFRIDAYSATURDAYA.M.PMP.M.lWJ=0դS&æhJ(ĥ]3Ȣ]H&}D;EL ]T%}EL٣ !"####$$$%%&''((((((())))*********+,,,---------------------....../0011223455  fp  kq `   ;TOCDEFGH:IdkJKenL12efqM;N=>?@AB=>?@ABee\oZ[jpXoX O345678 9=>?@AB<0P/SQRTUVW^_`YiabclmeX !"#gh$%&'()*+, -.]壣<+UWTVRS8;ADI>Q%#X 1 4J5&-69?BE<'$Z KLNOPM7:@CF=(/ZYGH!3,"+02).[Z*&M.>RBJSTKG]NHOPQUVLWEXYE[ A NULL argv[0] was passed through an exec system call. /.libs/lt-’'e‘`literalshellshell-alwaysc-maybeescapeclocalep@ppplTTTTTT\ L<,TTTTTTTTTTTTTTTTTTNNNEN,NNNN,,,,,,,,,,,,,,,,NNNNtT,,,,,,,,,,,,,,,,,,,,,,,,,,Nܿ,N,N,,,,,,,,,,,,,,,,,,,,,,,,,,,N,E%s (%s) %s %s %s (C)Written by %s. Written by %s and %s. Written by %s, %s, and %s. Report bugs to: %s bug-coreutils@gnu.org%s home page: <%s> License GPLv3+: GNU GPL version 3 or later . This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by %s, %s, %s, and %s. Written by %s, %s, %s, %s, and %s. Written by %s, %s, %s, %s, %s, and %s. Written by %s, %s, %s, %s, %s, %s, and %s. Written by %s, %s, %s, %s, %s, %s, %s, and %s. Written by %s, %s, %s, %s, %s, %s, %s, %s, and %s. Written by %s, %s, %s, %s, %s, %s, %s, %s, %s, and others. General help using GNU software: HP(x(Copyright %s %d Free Software Foundation, Inc.memory exhausted/usr/lib64ASCIICHARSETALIASDIR%50s %50s;]W<t\c ddDfTjdjk|l$m m\mmnn4odo4olpĉ 44ԊLdd|Tčt44į T ijt T d $$ t  4 T  $ tl d t  $ 44 DL Td  $ 4 D \ t  ,$D4\DttTl$dD$\t$Tt,4dtdL$zRx `*zRx $TFJ w?;*3$"4DaABAA G`  AABF $|bBBA C(D04XBEE B(D0C8JPf dHf-BEB B(D0D8D` 8A0A(B BBBG T 8D0A(B BBBA ,\gsBJD v JBN \`gBGB E(I0K8D@ 8A0A(B BBBA D8F0A(B BBBLhmBEE E(G0G8M@N 8A0A(B BBBA <<0hNBBB A(A0{(A EBB|@h8h,0hAAD } AAA hii+AZ E J4(iGBBA D(D0s(A ABB4L@iGBBA D(D0s(A ABBLXiBEB B(D0A8J  8A0A(B BBBF $bAL0N AA ,Dr$\`fAG ~ AI <aAKD c GAE D GAL DCA؅4pBDK k ABA qADL~BOE B(A0A8I  8A0A(B BBBC Ld(< BBB E(A0A8G8 8A0A(B BBBJ ,AAG0@ AAE LABBB B(G0C8J~ 8A0A(B BBBD 4D{ A THDPz A <tBGG F(D0Q (D ABBD L BEE E(A0A8J 8A0A(B BBBG LBEB B(A0A8Gm 8D0A(B BBBB ,TX2BAD gABhpx64Kc A DȸBLE E(A0A8G`S8A0A(B BBBLLBIE E(D0A8G8A0A(B BBB ,BND jAL  , 4D WBDC D`@  AABA <| ZBED C(Dp| (A ABBA  0  (4 BLD D`  AABA $ < T <l BED C(Dp (A ABBA      $ غ < к ,T ȺADI@v AAA (BBB B(D0D8G 8A0A(B BBBE  8A0A(B BBBB b 8G0A(B BBBV ^ 8G0A(M BBBO b 8P0A(B BBBU 4  L Dp} A l G A  A} AN A  [ $ 8DS I M A $ #^< b]T MHl PAQ PDN A $ P(AGG IGA XAP X8K4 xBAA F ABC `ABD@DR J [,deAG N DF CAD(vBAD p ABF W ABF RABL`5BGB B(A0A8G 8A0A(B BBBA D,PeBEE E(H0H8M@l8A0A(B BBBtxp#@"@@d@f@I@r@R@R@@s@u@u@u@~Ę@}̘@Ҙ@@ژ@@@!@@L@d@#@%@\@ /@y@@l@0@<^@x'@)@@,@h@T+@-@@X/@X@@@1@ 6@ :@L>@LB@ LG@.K@ .@@ O@S@ @X@ \@`@ d@\h@ \l@ p@  t@y@ ~@@@ @0@<@<@ <@<@<@ <@ <@x@ x@x@x@Ű@ɰ@ Ͱ@JѰ@u@հ@ٰ@Xݰ@@ @@@@ @ @ @ @@ @@@@$@*@0@8@?@ E@ K@ T@ \@`@@f@l@ v@ ,@ {@@@@@@@@@@@@@@ ʱ@ ϱ@ ױ@ @ @ @ @ @ @ @ @ @ #@ )@ 0@ @@9@>@A@/@7@=@@J@R@@Y@ @ @``o@P @@ Q `x@@ oH@oo @`V@f@v@@@@@@@@@@@&@6@F@V@f@v@@@@@@@@@@@&@6@F@V@f@v@@@@@@@@@@@&@6@F@V@f@v@@@@@@@@@@@&@6@F@V@f@v@@@@@d@(@``date.debugR7zXZִF!t//+]?Eh=ڊ̓N=bD`Jx:<{UUC|023ֳDZcPX]"ܩb:lLELC8d=,s;e`[. %lbՔJ?WoXSAu^s."V ߺ-ǒY#k Vd'hQ,9 T"{D):noxO:*1zp8dMt=veI9ޱDLn_πI :*>~/};%zqoP~~ 3Vј.X@+($0/ ?./p{ŕU}uw /_cRn"]bCm[*!-HP,-kZR5vtFP0y1qy$<\̸-'f7BsNB ,=%u(77*4ؼ"ZPC5૤ @w^ɾWX\' ;_ް^ 66_Ф1m3p(5Æ6&_?qLg%vQjڵ'2&T,W/o-)7ng2Ɏ=wZ_Ý֡Q,t],nJOV :pZgǵ)?}f{P@LP &?TuYqF^ɷr9)&GN _bu~p}>ϥ64AuJW4 w<|X۽vzo@ HeFeEd2I Ƽ>T7sT+ r) m S?\a5)X38lޘnzdňx+NHsMO4'17ބ ({O eھ\rr I(L:E K!9ʦ+t-7_A®~mu?թ͜\DVkd󍖒NnKDf?uH&_*g5WҏJ(7ݖҟ$Ջb 9X 8.^FEH=oC!$e8bh lkzȝ%uQdwh e.7\FIZO}q5TR6RYB, W8GgYZ.shstrtab.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.jcr.data.rel.ro.dynamic.got.got.plt.data.bss.gnu_debuglink.gnu_debugdata 8@8T@T !t@t$4o@> @FP @P QNo @ [oH@Hpj@tBx@x~ @ y@@@@|@ @& L@L@@@````H ``@`P``` ``  l\sys/devices/pnp0/00:00/rtc/rtc0/date000044400000000013147221625050012626 0ustar002025-03-14 format.rb000064400000000063147556201460006372 0ustar00# format.rb: Written by Tadayoshi Funaba 1999-2011 php_date.h000064400000016610147564377720006533 0ustar00/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2017 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Derick Rethans | +----------------------------------------------------------------------+ */ /* $Id$ */ #ifndef PHP_DATE_H #define PHP_DATE_H #include "lib/timelib.h" #include "Zend/zend_hash.h" #include "php_version.h" #define PHP_DATE_VERSION PHP_VERSION extern zend_module_entry date_module_entry; #define phpext_date_ptr &date_module_entry PHP_FUNCTION(date); PHP_FUNCTION(idate); PHP_FUNCTION(gmdate); PHP_FUNCTION(strtotime); PHP_FUNCTION(mktime); PHP_FUNCTION(gmmktime); PHP_FUNCTION(checkdate); #ifdef HAVE_STRFTIME PHP_FUNCTION(strftime); PHP_FUNCTION(gmstrftime); #endif PHP_FUNCTION(time); PHP_FUNCTION(localtime); PHP_FUNCTION(getdate); /* Advanced Interface */ PHP_METHOD(DateTime, __construct); PHP_METHOD(DateTime, __wakeup); PHP_METHOD(DateTime, __set_state); PHP_FUNCTION(date_create); PHP_FUNCTION(date_create_immutable); PHP_FUNCTION(date_create_from_format); PHP_FUNCTION(date_create_immutable_from_format); PHP_FUNCTION(date_parse); PHP_FUNCTION(date_parse_from_format); PHP_FUNCTION(date_get_last_errors); PHP_FUNCTION(date_format); PHP_FUNCTION(date_modify); PHP_FUNCTION(date_add); PHP_FUNCTION(date_sub); PHP_FUNCTION(date_timezone_get); PHP_FUNCTION(date_timezone_set); PHP_FUNCTION(date_offset_get); PHP_FUNCTION(date_diff); PHP_FUNCTION(date_time_set); PHP_FUNCTION(date_date_set); PHP_FUNCTION(date_isodate_set); PHP_FUNCTION(date_timestamp_set); PHP_FUNCTION(date_timestamp_get); PHP_METHOD(DateTimeImmutable, __construct); PHP_METHOD(DateTimeImmutable, __set_state); PHP_METHOD(DateTimeImmutable, modify); PHP_METHOD(DateTimeImmutable, add); PHP_METHOD(DateTimeImmutable, sub); PHP_METHOD(DateTimeImmutable, setTimezone); PHP_METHOD(DateTimeImmutable, setTime); PHP_METHOD(DateTimeImmutable, setDate); PHP_METHOD(DateTimeImmutable, setISODate); PHP_METHOD(DateTimeImmutable, setTimestamp); PHP_METHOD(DateTimeImmutable, createFromMutable); PHP_METHOD(DateTimeZone, __construct); PHP_METHOD(DateTimeZone, __wakeup); PHP_METHOD(DateTimeZone, __set_state); PHP_FUNCTION(timezone_open); PHP_FUNCTION(timezone_name_get); PHP_FUNCTION(timezone_name_from_abbr); PHP_FUNCTION(timezone_offset_get); PHP_FUNCTION(timezone_transitions_get); PHP_FUNCTION(timezone_location_get); PHP_FUNCTION(timezone_identifiers_list); PHP_FUNCTION(timezone_abbreviations_list); PHP_FUNCTION(timezone_version_get); PHP_METHOD(DateInterval, __construct); PHP_METHOD(DateInterval, __wakeup); PHP_METHOD(DateInterval, __set_state); PHP_FUNCTION(date_interval_format); PHP_FUNCTION(date_interval_create_from_date_string); PHP_METHOD(DatePeriod, __construct); PHP_METHOD(DatePeriod, __wakeup); PHP_METHOD(DatePeriod, __set_state); PHP_METHOD(DatePeriod, getStartDate); PHP_METHOD(DatePeriod, getEndDate); PHP_METHOD(DatePeriod, getDateInterval); /* Options and Configuration */ PHP_FUNCTION(date_default_timezone_set); PHP_FUNCTION(date_default_timezone_get); /* Astro functions */ PHP_FUNCTION(date_sunrise); PHP_FUNCTION(date_sunset); PHP_FUNCTION(date_sun_info); PHP_RINIT_FUNCTION(date); PHP_RSHUTDOWN_FUNCTION(date); PHP_MINIT_FUNCTION(date); PHP_MSHUTDOWN_FUNCTION(date); PHP_MINFO_FUNCTION(date); typedef struct _php_date_obj php_date_obj; typedef struct _php_timezone_obj php_timezone_obj; typedef struct _php_interval_obj php_interval_obj; typedef struct _php_period_obj php_period_obj; struct _php_date_obj { timelib_time *time; HashTable *props; zend_object std; }; static inline php_date_obj *php_date_obj_from_obj(zend_object *obj) { return (php_date_obj*)((char*)(obj) - XtOffsetOf(php_date_obj, std)); } #define Z_PHPDATE_P(zv) php_date_obj_from_obj(Z_OBJ_P((zv))) struct _php_timezone_obj { int initialized; int type; union { timelib_tzinfo *tz; /* TIMELIB_ZONETYPE_ID */ timelib_sll utc_offset; /* TIMELIB_ZONETYPE_OFFSET */ timelib_abbr_info z; /* TIMELIB_ZONETYPE_ABBR */ } tzi; HashTable *props; zend_object std; }; static inline php_timezone_obj *php_timezone_obj_from_obj(zend_object *obj) { return (php_timezone_obj*)((char*)(obj) - XtOffsetOf(php_timezone_obj, std)); } #define Z_PHPTIMEZONE_P(zv) php_timezone_obj_from_obj(Z_OBJ_P((zv))) struct _php_interval_obj { timelib_rel_time *diff; HashTable *props; int initialized; zend_object std; }; static inline php_interval_obj *php_interval_obj_from_obj(zend_object *obj) { return (php_interval_obj*)((char*)(obj) - XtOffsetOf(php_interval_obj, std)); } #define Z_PHPINTERVAL_P(zv) php_interval_obj_from_obj(Z_OBJ_P((zv))) struct _php_period_obj { timelib_time *start; zend_class_entry *start_ce; timelib_time *current; timelib_time *end; timelib_rel_time *interval; int recurrences; int initialized; int include_start_date; zend_object std; }; static inline php_period_obj *php_period_obj_from_obj(zend_object *obj) { return (php_period_obj*)((char*)(obj) - XtOffsetOf(php_period_obj, std)); } #define Z_PHPPERIOD_P(zv) php_period_obj_from_obj(Z_OBJ_P((zv))) ZEND_BEGIN_MODULE_GLOBALS(date) char *default_timezone; char *timezone; HashTable *tzcache; timelib_error_container *last_errors; int timezone_valid; ZEND_END_MODULE_GLOBALS(date) #define DATEG(v) ZEND_MODULE_GLOBALS_ACCESSOR(date, v) /* Backwards compatibility wrapper */ PHPAPI zend_long php_parse_date(char *string, zend_long *now); PHPAPI void php_mktime(INTERNAL_FUNCTION_PARAMETERS, int gmt); PHPAPI int php_idate(char format, time_t ts, int localtime); #if HAVE_STRFTIME #define _php_strftime php_strftime PHPAPI void php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gm); #endif PHPAPI zend_string *php_format_date(char *format, size_t format_len, time_t ts, int localtime); /* Mechanism to set new TZ database */ PHPAPI void php_date_set_tzdb(timelib_tzdb *tzdb); PHPAPI timelib_tzinfo *get_timezone_info(void); /* Grabbing CE's so that other exts can use the date objects too */ PHPAPI zend_class_entry *php_date_get_date_ce(void); PHPAPI zend_class_entry *php_date_get_immutable_ce(void); PHPAPI zend_class_entry *php_date_get_timezone_ce(void); /* Functions for creating DateTime objects, and initializing them from a string */ PHPAPI zval *php_date_instantiate(zend_class_entry *pce, zval *object); PHPAPI int php_date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, size_t time_str_len, char *format, zval *timezone_object, int ctor); #endif /* PHP_DATE_H */ lib/timelib_config.h000064400000000471147564377720010465 0ustar00#ifdef PHP_WIN32 # include "config.w32.h" #else # include #endif #include #define TIMELIB_OMIT_STDINT 1 #include "zend.h" #define timelib_malloc emalloc #define timelib_realloc erealloc #define timelib_calloc ecalloc #define timelib_strdup estrdup #define timelib_free efree lib/timelib.h000064400000015631147564377720007144 0ustar00/* * The MIT License (MIT) * * Copyright (c) 2015 Derick Rethans * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef __TIMELIB_H__ #define __TIMELIB_H__ #include "timelib_structs.h" #if HAVE_LIMITS_H #include #endif #ifndef timelib_malloc # define timelib_malloc malloc # define timelib_realloc realloc # define timelib_calloc calloc # define timelib_strdup strdup # define timelib_free free #endif #define TIMELIB_VERSION 201602 #define TIMELIB_ASCII_VERSION "2016.02" #define TIMELIB_NONE 0x00 #define TIMELIB_OVERRIDE_TIME 0x01 #define TIMELIB_NO_CLONE 0x02 #define TIMELIB_UNSET -99999 #define TIMELIB_SPECIAL_WEEKDAY 0x01 #define TIMELIB_SPECIAL_DAY_OF_WEEK_IN_MONTH 0x02 #define TIMELIB_SPECIAL_LAST_DAY_OF_WEEK_IN_MONTH 0x03 #define TIMELIB_SPECIAL_FIRST_DAY_OF_MONTH 0x01 #define TIMELIB_SPECIAL_LAST_DAY_OF_MONTH 0x02 #ifndef LONG_MAX #define LONG_MAX 2147483647L #endif #ifndef LONG_MIN #define LONG_MIN (- LONG_MAX - 1) #endif #if defined(_MSC_VER) && !defined(strcasecmp) #define strcasecmp stricmp #endif #if defined(_MSC_VER) && !defined(strncasecmp) #define strncasecmp strnicmp #endif /* Function pointers */ typedef timelib_tzinfo* (*timelib_tz_get_wrapper)(char *tzname, const timelib_tzdb *tzdb); /* From dow.c */ timelib_sll timelib_day_of_week(timelib_sll y, timelib_sll m, timelib_sll d); timelib_sll timelib_iso_day_of_week(timelib_sll y, timelib_sll m, timelib_sll d); timelib_sll timelib_day_of_year(timelib_sll y, timelib_sll m, timelib_sll d); timelib_sll timelib_daynr_from_weeknr(timelib_sll y, timelib_sll w, timelib_sll d); timelib_sll timelib_days_in_month(timelib_sll y, timelib_sll m); void timelib_isoweek_from_date(timelib_sll y, timelib_sll m, timelib_sll d, timelib_sll *iw, timelib_sll *iy); int timelib_valid_time(timelib_sll h, timelib_sll i, timelib_sll s); int timelib_valid_date(timelib_sll y, timelib_sll m, timelib_sll d); /* From parse_date.re */ timelib_time *timelib_strtotime(char *s, size_t len, timelib_error_container **errors, const timelib_tzdb *tzdb, timelib_tz_get_wrapper tz_get_wrapper); timelib_time *timelib_parse_from_format(char *format, char *s, size_t len, timelib_error_container **errors, const timelib_tzdb *tzdb, timelib_tz_get_wrapper tz_get_wrapper); void timelib_fill_holes(timelib_time *parsed, timelib_time *now, int options); char *timelib_timezone_id_from_abbr(const char *abbr, timelib_long gmtoffset, int isdst); const timelib_tz_lookup_table *timelib_timezone_abbreviations_list(void); timelib_long timelib_parse_tz_cor(char**); /* From parse_iso_intervals.re */ void timelib_strtointerval(char *s, size_t len, timelib_time **begin, timelib_time **end, timelib_rel_time **period, int *recurrences, struct timelib_error_container **errors); /* From tm2unixtime.c */ void timelib_update_ts(timelib_time* time, timelib_tzinfo* tzi); void timelib_do_normalize(timelib_time *base); void timelib_do_rel_normalize(timelib_time *base, timelib_rel_time *rt); /* From unixtime2tm.c */ int timelib_apply_localtime(timelib_time *t, unsigned int localtime); void timelib_unixtime2gmt(timelib_time* tm, timelib_sll ts); void timelib_unixtime2local(timelib_time *tm, timelib_sll ts); void timelib_update_from_sse(timelib_time *tm); void timelib_set_timezone_from_offset(timelib_time *t, timelib_sll utc_offset); void timelib_set_timezone_from_abbr(timelib_time *t, timelib_abbr_info abbr_info); void timelib_set_timezone(timelib_time *t, timelib_tzinfo *tz); /* From parse_tz.c */ int timelib_timezone_id_is_valid(char *timezone, const timelib_tzdb *tzdb); timelib_tzinfo *timelib_parse_tzfile(char *timezone, const timelib_tzdb *tzdb); int timelib_timestamp_is_in_dst(timelib_sll ts, timelib_tzinfo *tz); timelib_time_offset *timelib_get_time_zone_info(timelib_sll ts, timelib_tzinfo *tz); timelib_sll timelib_get_current_offset(timelib_time *t); void timelib_dump_tzinfo(timelib_tzinfo *tz); const timelib_tzdb *timelib_builtin_db(void); const timelib_tzdb_index_entry *timelib_timezone_builtin_identifiers_list(int *count); timelib_long timelib_parse_zone(char **ptr, int *dst, timelib_time *t, int *tz_not_found, const timelib_tzdb *tzdb, timelib_tz_get_wrapper tz_wrapper); /* From timelib.c */ timelib_tzinfo* timelib_tzinfo_ctor(char *name); void timelib_time_tz_abbr_update(timelib_time* tm, char* tz_abbr); void timelib_time_tz_name_update(timelib_time* tm, char* tz_name); void timelib_tzinfo_dtor(timelib_tzinfo *tz); timelib_tzinfo* timelib_tzinfo_clone(timelib_tzinfo *tz); timelib_rel_time* timelib_rel_time_ctor(void); void timelib_rel_time_dtor(timelib_rel_time* t); timelib_rel_time* timelib_rel_time_clone(timelib_rel_time *tz); timelib_time* timelib_time_ctor(void); void timelib_time_set_option(timelib_time* tm, int option, void* option_value); void timelib_time_dtor(timelib_time* t); timelib_time* timelib_time_clone(timelib_time* orig); int timelib_time_compare(timelib_time *t1, timelib_time *t2); timelib_time_offset* timelib_time_offset_ctor(void); void timelib_time_offset_dtor(timelib_time_offset* t); void timelib_error_container_dtor(timelib_error_container *errors); timelib_long timelib_date_to_int(timelib_time *d, int *error); void timelib_dump_date(timelib_time *d, int options); void timelib_dump_rel_time(timelib_rel_time *d); void timelib_decimal_hour_to_hms(double h, int *hour, int *min, int *sec); timelib_long timelib_parse_tz_cor(char **ptr); /* from astro.c */ double timelib_ts_to_juliandate(timelib_sll ts); int timelib_astro_rise_set_altitude(timelib_time *time, double lon, double lat, double altit, int upper_limb, double *h_rise, double *h_set, timelib_sll *ts_rise, timelib_sll *ts_set, timelib_sll *ts_transit); /* from interval.c */ timelib_rel_time *timelib_diff(timelib_time *one, timelib_time *two); timelib_time *timelib_add(timelib_time *t, timelib_rel_time *interval); timelib_time *timelib_sub(timelib_time *t, timelib_rel_time *interval); #endif lib/timelib_structs.h000064400000017612147565320700010717 0ustar00/* * The MIT License (MIT) * * Copyright (c) 2015 Derick Rethans * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef __TIMELIB_STRUCTS_H__ #define __TIMELIB_STRUCTS_H__ #ifdef HAVE_TIMELIB_CONFIG_H # include "timelib_config.h" #endif #ifndef TIMELIB_OMIT_STDINT #ifdef HAVE_SYS_TYPES_H #include #endif #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif # ifndef HAVE_INT32_T # if SIZEOF_INT == 4 typedef int int32_t; # elif SIZEOF_LONG == 4 typedef long int int32_t; # endif # endif # ifndef HAVE_UINT32_T # if SIZEOF_INT == 4 typedef unsigned int uint32_t; # elif SIZEOF_LONG == 4 typedef unsigned long int uint32_t; # endif # endif #ifdef _WIN32 # if _MSC_VER >= 1600 # include # endif # ifndef SIZEOF_INT # define SIZEOF_INT 4 # endif # ifndef SIZEOF_LONG # define SIZEOF_LONG 4 # endif # ifndef int32_t typedef __int32 int32_t; # endif # ifndef uint32_t typedef unsigned __int32 uint32_t; # endif # ifndef int64_t typedef __int64 int64_t; # endif # ifndef uint64_t typedef unsigned __int64 uint64_t; # endif # ifndef PRId32 # define PRId32 "I32d" # endif # ifndef PRIu32 # define PRIu32 "I32u" # endif # ifndef PRId64 # define PRId64 "I64d" # endif # ifndef PRIu64 # define PRIu64 "I64u" # endif # ifndef INT32_MAX #define INT32_MAX _I32_MAX # endif # ifndef INT32_MIN #define INT32_MIN ((int32_t)_I32_MIN) # endif # ifndef UINT32_MAX #define UINT32_MAX _UI32_MAX # endif # ifndef INT64_MIN #define INT64_MIN ((int64_t)_I64_MIN) # endif # ifndef INT64_MAX #define INT64_MAX _I64_MAX # endif # ifndef UINT64_MAX #define UINT64_MAX _UI64_MAX # endif #endif #endif /* TIMELIB_OMIT_STDINT */ #include #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #else #include #endif #if defined(__x86_64__) || defined(__LP64__) || defined(_LP64) || defined(_WIN64) typedef int64_t timelib_long; typedef uint64_t timelib_ulong; # define TIMELIB_LONG_MAX INT64_MAX # define TIMELIB_LONG_MIN INT64_MIN # define TIMELIB_ULONG_MAX UINT64_MAX # define TIMELIB_LONG_FMT "%" PRId64 # define TIMELIB_ULONG_FMT "%" PRIu64 #else typedef int32_t timelib_long; typedef uint32_t timelib_ulong; # define TIMELIB_LONG_MAX INT32_MAX # define TIMELIB_LONG_MIN INT32_MIN # define TIMELIB_ULONG_MAX UINT32_MAX # define TIMELIB_LONG_FMT "%" PRId32 # define TIMELIB_ULONG_FMT "%" PRIu32 #endif #if defined(_MSC_VER) typedef uint64_t timelib_ull; typedef int64_t timelib_sll; # define TIMELIB_LL_CONST(n) n ## i64 #else typedef unsigned long long timelib_ull; typedef signed long long timelib_sll; # define TIMELIB_LL_CONST(n) n ## ll #endif typedef struct ttinfo { int32_t offset; int isdst; unsigned int abbr_idx; unsigned int isstdcnt; unsigned int isgmtcnt; } ttinfo; typedef struct tlinfo { int32_t trans; int32_t offset; } tlinfo; typedef struct tlocinfo { char country_code[3]; double latitude; double longitude; char *comments; } tlocinfo; typedef struct timelib_tzinfo { char *name; struct { uint32_t ttisgmtcnt; uint32_t ttisstdcnt; uint32_t leapcnt; uint32_t timecnt; uint32_t typecnt; uint32_t charcnt; } bit32; struct { uint64_t ttisgmtcnt; uint64_t ttisstdcnt; uint64_t leapcnt; uint64_t timecnt; uint64_t typecnt; uint64_t charcnt; } bit64; int32_t *trans; unsigned char *trans_idx; ttinfo *type; char *timezone_abbr; tlinfo *leap_times; unsigned char bc; tlocinfo location; } timelib_tzinfo; typedef struct timelib_special { unsigned int type; timelib_sll amount; } timelib_special; typedef struct timelib_rel_time { timelib_sll y, m, d; /* Years, Months and Days */ timelib_sll h, i, s; /* Hours, mInutes and Seconds */ int weekday; /* Stores the day in 'next monday' */ int weekday_behavior; /* 0: the current day should *not* be counted when advancing forwards; 1: the current day *should* be counted */ int first_last_day_of; int invert; /* Whether the difference should be inverted */ timelib_sll days; /* Contains the number of *days*, instead of Y-M-D differences */ timelib_special special; unsigned int have_weekday_relative, have_special_relative; } timelib_rel_time; typedef struct timelib_time_offset { int32_t offset; unsigned int leap_secs; unsigned int is_dst; char *abbr; timelib_sll transistion_time; } timelib_time_offset; typedef struct timelib_time { timelib_sll y, m, d; /* Year, Month, Day */ timelib_sll h, i, s; /* Hour, mInute, Second */ double f; /* Fraction */ int z; /* GMT offset in minutes */ char *tz_abbr; /* Timezone abbreviation (display only) */ timelib_tzinfo *tz_info; /* Timezone structure */ signed int dst; /* Flag if we were parsing a DST zone */ timelib_rel_time relative; timelib_sll sse; /* Seconds since epoch */ unsigned int have_time, have_date, have_zone, have_relative, have_weeknr_day; unsigned int sse_uptodate; /* !0 if the sse member is up to date with the date/time members */ unsigned int tim_uptodate; /* !0 if the date/time members are up to date with the sse member */ unsigned int is_localtime; /* 1 if the current struct represents localtime, 0 if it is in GMT */ unsigned int zone_type; /* 1 time offset, * 3 TimeZone identifier, * 2 TimeZone abbreviation */ } timelib_time; typedef struct timelib_abbr_info { timelib_sll utc_offset; char *abbr; int dst; } timelib_abbr_info; typedef struct timelib_error_message { int position; char character; char *message; } timelib_error_message; typedef struct timelib_error_container { struct timelib_error_message *error_messages; struct timelib_error_message *warning_messages; int error_count; int warning_count; } timelib_error_container; typedef struct _timelib_tz_lookup_table { char *name; int type; float gmtoffset; char *full_tz_name; } timelib_tz_lookup_table; typedef struct _timelib_tzdb_index_entry { char *id; unsigned int pos; } timelib_tzdb_index_entry; typedef struct _timelib_tzdb { char *version; int index_size; const timelib_tzdb_index_entry *index; const unsigned char *data; } timelib_tzdb; #define TIMELIB_ZONETYPE_OFFSET 1 #define TIMELIB_ZONETYPE_ABBR 2 #define TIMELIB_ZONETYPE_ID 3 #define SECS_PER_ERA TIMELIB_LL_CONST(12622780800) #define SECS_PER_DAY 86400 #define DAYS_PER_YEAR 365 #define DAYS_PER_LYEAR 366 /* 400*365 days + 97 leap days */ #define DAYS_PER_LYEAR_PERIOD 146097 #define YEARS_PER_LYEAR_PERIOD 400 #define timelib_is_leap(y) ((y) % 4 == 0 && ((y) % 100 != 0 || (y) % 400 == 0)) #define TIMELIB_DEBUG(s) if (0) { s } #endif php_date.c000064400000506577147577114150006534 0ustar00/* +----------------------------------------------------------------------+ | PHP Version 5 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2016 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Derick Rethans | +----------------------------------------------------------------------+ */ /* $Id$ */ #include "php.h" #include "php_streams.h" #include "php_main.h" #include "php_globals.h" #include "php_ini.h" #include "ext/standard/info.h" #include "ext/standard/php_versioning.h" #include "ext/standard/php_math.h" #include "php_date.h" #include "zend_interfaces.h" #include "lib/timelib.h" #include #ifdef PHP_WIN32 static __inline __int64 php_date_llabs( __int64 i ) { return i >= 0? i: -i; } #elif defined(__GNUC__) && __GNUC__ < 3 static __inline __int64_t php_date_llabs( __int64_t i ) { return i >= 0 ? i : -i; } #else static inline long long php_date_llabs( long long i ) { return i >= 0 ? i : -i; } #endif #ifdef PHP_WIN32 #define DATE_I64_BUF_LEN 65 # define DATE_I64A(i, s, len) _i64toa_s(i, s, len, 10) # define DATE_A64I(i, s) i = _atoi64(s) #else #define DATE_I64_BUF_LEN 65 # define DATE_I64A(i, s, len) \ do { \ int st = snprintf(s, len, "%lld", i); \ s[st] = '\0'; \ } while (0); #ifdef HAVE_ATOLL # define DATE_A64I(i, s) i = atoll(s) #else # define DATE_A64I(i, s) i = strtoll(s, NULL, 10) #endif #endif /* {{{ arginfo */ ZEND_BEGIN_ARG_INFO_EX(arginfo_date, 0, 0, 1) ZEND_ARG_INFO(0, format) ZEND_ARG_INFO(0, timestamp) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_gmdate, 0, 0, 1) ZEND_ARG_INFO(0, format) ZEND_ARG_INFO(0, timestamp) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_idate, 0, 0, 1) ZEND_ARG_INFO(0, format) ZEND_ARG_INFO(0, timestamp) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_strtotime, 0, 0, 1) ZEND_ARG_INFO(0, time) ZEND_ARG_INFO(0, now) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_mktime, 0, 0, 0) ZEND_ARG_INFO(0, hour) ZEND_ARG_INFO(0, min) ZEND_ARG_INFO(0, sec) ZEND_ARG_INFO(0, mon) ZEND_ARG_INFO(0, day) ZEND_ARG_INFO(0, year) ZEND_ARG_INFO(0, is_dst) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_gmmktime, 0, 0, 0) ZEND_ARG_INFO(0, hour) ZEND_ARG_INFO(0, min) ZEND_ARG_INFO(0, sec) ZEND_ARG_INFO(0, mon) ZEND_ARG_INFO(0, day) ZEND_ARG_INFO(0, year) ZEND_ARG_INFO(0, is_dst) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(arginfo_checkdate, 0) ZEND_ARG_INFO(0, month) ZEND_ARG_INFO(0, day) ZEND_ARG_INFO(0, year) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_strftime, 0, 0, 1) ZEND_ARG_INFO(0, format) ZEND_ARG_INFO(0, timestamp) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_gmstrftime, 0, 0, 1) ZEND_ARG_INFO(0, format) ZEND_ARG_INFO(0, timestamp) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(arginfo_time, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_localtime, 0, 0, 0) ZEND_ARG_INFO(0, timestamp) ZEND_ARG_INFO(0, associative_array) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_getdate, 0, 0, 0) ZEND_ARG_INFO(0, timestamp) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(arginfo_date_default_timezone_set, 0) ZEND_ARG_INFO(0, timezone_identifier) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(arginfo_date_default_timezone_get, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_sunrise, 0, 0, 1) ZEND_ARG_INFO(0, time) ZEND_ARG_INFO(0, format) ZEND_ARG_INFO(0, latitude) ZEND_ARG_INFO(0, longitude) ZEND_ARG_INFO(0, zenith) ZEND_ARG_INFO(0, gmt_offset) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_sunset, 0, 0, 1) ZEND_ARG_INFO(0, time) ZEND_ARG_INFO(0, format) ZEND_ARG_INFO(0, latitude) ZEND_ARG_INFO(0, longitude) ZEND_ARG_INFO(0, zenith) ZEND_ARG_INFO(0, gmt_offset) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(arginfo_date_sun_info, 0) ZEND_ARG_INFO(0, time) ZEND_ARG_INFO(0, latitude) ZEND_ARG_INFO(0, longitude) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_create, 0, 0, 0) ZEND_ARG_INFO(0, time) ZEND_ARG_INFO(0, object) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_create_from_format, 0, 0, 2) ZEND_ARG_INFO(0, format) ZEND_ARG_INFO(0, time) ZEND_ARG_INFO(0, object) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_parse, 0, 0, 1) ZEND_ARG_INFO(0, date) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_parse_from_format, 0, 0, 2) ZEND_ARG_INFO(0, format) ZEND_ARG_INFO(0, date) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(arginfo_date_get_last_errors, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_format, 0, 0, 2) ZEND_ARG_INFO(0, object) ZEND_ARG_INFO(0, format) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_method_format, 0, 0, 1) ZEND_ARG_INFO(0, format) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_modify, 0, 0, 2) ZEND_ARG_INFO(0, object) ZEND_ARG_INFO(0, modify) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_method_modify, 0, 0, 1) ZEND_ARG_INFO(0, modify) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_add, 0, 0, 2) ZEND_ARG_INFO(0, object) ZEND_ARG_INFO(0, interval) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_method_add, 0, 0, 1) ZEND_ARG_INFO(0, interval) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_sub, 0, 0, 2) ZEND_ARG_INFO(0, object) ZEND_ARG_INFO(0, interval) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_method_sub, 0, 0, 1) ZEND_ARG_INFO(0, interval) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_timezone_get, 0, 0, 1) ZEND_ARG_INFO(0, object) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(arginfo_date_method_timezone_get, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_timezone_set, 0, 0, 2) ZEND_ARG_INFO(0, object) ZEND_ARG_INFO(0, timezone) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_method_timezone_set, 0, 0, 1) ZEND_ARG_INFO(0, timezone) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_offset_get, 0, 0, 1) ZEND_ARG_INFO(0, object) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(arginfo_date_method_offset_get, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_diff, 0, 0, 2) ZEND_ARG_INFO(0, object) ZEND_ARG_INFO(0, object2) ZEND_ARG_INFO(0, absolute) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_method_diff, 0, 0, 1) ZEND_ARG_INFO(0, object) ZEND_ARG_INFO(0, absolute) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_time_set, 0, 0, 3) ZEND_ARG_INFO(0, object) ZEND_ARG_INFO(0, hour) ZEND_ARG_INFO(0, minute) ZEND_ARG_INFO(0, second) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_method_time_set, 0, 0, 2) ZEND_ARG_INFO(0, hour) ZEND_ARG_INFO(0, minute) ZEND_ARG_INFO(0, second) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_date_set, 0, 0, 4) ZEND_ARG_INFO(0, object) ZEND_ARG_INFO(0, year) ZEND_ARG_INFO(0, month) ZEND_ARG_INFO(0, day) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_method_date_set, 0, 0, 3) ZEND_ARG_INFO(0, year) ZEND_ARG_INFO(0, month) ZEND_ARG_INFO(0, day) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_isodate_set, 0, 0, 3) ZEND_ARG_INFO(0, object) ZEND_ARG_INFO(0, year) ZEND_ARG_INFO(0, week) ZEND_ARG_INFO(0, day) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_method_isodate_set, 0, 0, 2) ZEND_ARG_INFO(0, year) ZEND_ARG_INFO(0, week) ZEND_ARG_INFO(0, day) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_timestamp_set, 0, 0, 2) ZEND_ARG_INFO(0, object) ZEND_ARG_INFO(0, unixtimestamp) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_method_timestamp_set, 0, 0, 1) ZEND_ARG_INFO(0, unixtimestamp) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_timestamp_get, 0, 0, 1) ZEND_ARG_INFO(0, object) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(arginfo_date_method_timestamp_get, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_method_create_from_mutable, 0, 0, 1) ZEND_ARG_INFO(0, DateTime) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_timezone_open, 0, 0, 1) ZEND_ARG_INFO(0, timezone) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_timezone_name_get, 0, 0, 1) ZEND_ARG_INFO(0, object) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(arginfo_timezone_method_name_get, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_timezone_name_from_abbr, 0, 0, 1) ZEND_ARG_INFO(0, abbr) ZEND_ARG_INFO(0, gmtoffset) ZEND_ARG_INFO(0, isdst) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_timezone_offset_get, 0, 0, 2) ZEND_ARG_INFO(0, object) ZEND_ARG_INFO(0, datetime) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_timezone_method_offset_get, 0, 0, 1) ZEND_ARG_INFO(0, object) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_timezone_transitions_get, 0, 0, 1) ZEND_ARG_INFO(0, object) ZEND_ARG_INFO(0, timestamp_begin) ZEND_ARG_INFO(0, timestamp_end) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(arginfo_timezone_method_transitions_get, 0) ZEND_ARG_INFO(0, timestamp_begin) ZEND_ARG_INFO(0, timestamp_end) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_timezone_location_get, 0, 0, 1) ZEND_ARG_INFO(0, object) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(arginfo_timezone_method_location_get, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_timezone_identifiers_list, 0, 0, 0) ZEND_ARG_INFO(0, what) ZEND_ARG_INFO(0, country) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(arginfo_timezone_abbreviations_list, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(arginfo_timezone_version_get, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_interval_create_from_date_string, 0, 0, 1) ZEND_ARG_INFO(0, time) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_interval_format, 0, 0, 2) ZEND_ARG_INFO(0, object) ZEND_ARG_INFO(0, format) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(arginfo_date_method_interval_format, 0) ZEND_ARG_INFO(0, format) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_period_construct, 0, 0, 3) ZEND_ARG_INFO(0, start) ZEND_ARG_INFO(0, interval) ZEND_ARG_INFO(0, end) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_date_interval_construct, 0, 0, 1) ZEND_ARG_INFO(0, interval_spec) ZEND_END_ARG_INFO() /* }}} */ /* {{{ Function table */ const zend_function_entry date_functions[] = { PHP_FE(strtotime, arginfo_strtotime) PHP_FE(date, arginfo_date) PHP_FE(idate, arginfo_idate) PHP_FE(gmdate, arginfo_gmdate) PHP_FE(mktime, arginfo_mktime) PHP_FE(gmmktime, arginfo_gmmktime) PHP_FE(checkdate, arginfo_checkdate) #ifdef HAVE_STRFTIME PHP_FE(strftime, arginfo_strftime) PHP_FE(gmstrftime, arginfo_gmstrftime) #endif PHP_FE(time, arginfo_time) PHP_FE(localtime, arginfo_localtime) PHP_FE(getdate, arginfo_getdate) /* Advanced Interface */ PHP_FE(date_create, arginfo_date_create) PHP_FE(date_create_immutable, arginfo_date_create) PHP_FE(date_create_from_format, arginfo_date_create_from_format) PHP_FE(date_create_immutable_from_format, arginfo_date_create_from_format) PHP_FE(date_parse, arginfo_date_parse) PHP_FE(date_parse_from_format, arginfo_date_parse_from_format) PHP_FE(date_get_last_errors, arginfo_date_get_last_errors) PHP_FE(date_format, arginfo_date_format) PHP_FE(date_modify, arginfo_date_modify) PHP_FE(date_add, arginfo_date_add) PHP_FE(date_sub, arginfo_date_sub) PHP_FE(date_timezone_get, arginfo_date_timezone_get) PHP_FE(date_timezone_set, arginfo_date_timezone_set) PHP_FE(date_offset_get, arginfo_date_offset_get) PHP_FE(date_diff, arginfo_date_diff) PHP_FE(date_time_set, arginfo_date_time_set) PHP_FE(date_date_set, arginfo_date_date_set) PHP_FE(date_isodate_set, arginfo_date_isodate_set) PHP_FE(date_timestamp_set, arginfo_date_timestamp_set) PHP_FE(date_timestamp_get, arginfo_date_timestamp_get) PHP_FE(timezone_open, arginfo_timezone_open) PHP_FE(timezone_name_get, arginfo_timezone_name_get) PHP_FE(timezone_name_from_abbr, arginfo_timezone_name_from_abbr) PHP_FE(timezone_offset_get, arginfo_timezone_offset_get) PHP_FE(timezone_transitions_get, arginfo_timezone_transitions_get) PHP_FE(timezone_location_get, arginfo_timezone_location_get) PHP_FE(timezone_identifiers_list, arginfo_timezone_identifiers_list) PHP_FE(timezone_abbreviations_list, arginfo_timezone_abbreviations_list) PHP_FE(timezone_version_get, arginfo_timezone_version_get) PHP_FE(date_interval_create_from_date_string, arginfo_date_interval_create_from_date_string) PHP_FE(date_interval_format, arginfo_date_interval_format) /* Options and Configuration */ PHP_FE(date_default_timezone_set, arginfo_date_default_timezone_set) PHP_FE(date_default_timezone_get, arginfo_date_default_timezone_get) /* Astronomical functions */ PHP_FE(date_sunrise, arginfo_date_sunrise) PHP_FE(date_sunset, arginfo_date_sunset) PHP_FE(date_sun_info, arginfo_date_sun_info) PHP_FE_END }; static const zend_function_entry date_funcs_interface[] = { PHP_ABSTRACT_ME(DateTimeInterface, format, arginfo_date_method_format) PHP_ABSTRACT_ME(DateTimeInterface, getTimezone, arginfo_date_method_timezone_get) PHP_ABSTRACT_ME(DateTimeInterface, getOffset, arginfo_date_method_offset_get) PHP_ABSTRACT_ME(DateTimeInterface, getTimestamp, arginfo_date_method_timestamp_get) PHP_ABSTRACT_ME(DateTimeInterface, diff, arginfo_date_method_diff) PHP_ABSTRACT_ME(DateTimeInterface, __wakeup, NULL) PHP_FE_END }; const zend_function_entry date_funcs_date[] = { PHP_ME(DateTime, __construct, arginfo_date_create, ZEND_ACC_CTOR|ZEND_ACC_PUBLIC) PHP_ME(DateTime, __wakeup, NULL, ZEND_ACC_PUBLIC) PHP_ME(DateTime, __set_state, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) PHP_ME_MAPPING(createFromFormat, date_create_from_format, arginfo_date_create_from_format, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) PHP_ME_MAPPING(getLastErrors, date_get_last_errors, arginfo_date_get_last_errors, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) PHP_ME_MAPPING(format, date_format, arginfo_date_method_format, 0) PHP_ME_MAPPING(modify, date_modify, arginfo_date_method_modify, 0) PHP_ME_MAPPING(add, date_add, arginfo_date_method_add, 0) PHP_ME_MAPPING(sub, date_sub, arginfo_date_method_sub, 0) PHP_ME_MAPPING(getTimezone, date_timezone_get, arginfo_date_method_timezone_get, 0) PHP_ME_MAPPING(setTimezone, date_timezone_set, arginfo_date_method_timezone_set, 0) PHP_ME_MAPPING(getOffset, date_offset_get, arginfo_date_method_offset_get, 0) PHP_ME_MAPPING(setTime, date_time_set, arginfo_date_method_time_set, 0) PHP_ME_MAPPING(setDate, date_date_set, arginfo_date_method_date_set, 0) PHP_ME_MAPPING(setISODate, date_isodate_set, arginfo_date_method_isodate_set, 0) PHP_ME_MAPPING(setTimestamp, date_timestamp_set, arginfo_date_method_timestamp_set, 0) PHP_ME_MAPPING(getTimestamp, date_timestamp_get, arginfo_date_method_timestamp_get, 0) PHP_ME_MAPPING(diff, date_diff, arginfo_date_method_diff, 0) PHP_FE_END }; const zend_function_entry date_funcs_immutable[] = { PHP_ME(DateTimeImmutable, __construct, arginfo_date_create, ZEND_ACC_CTOR|ZEND_ACC_PUBLIC) PHP_ME(DateTime, __wakeup, NULL, ZEND_ACC_PUBLIC) PHP_ME(DateTimeImmutable, __set_state, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) PHP_ME_MAPPING(createFromFormat, date_create_immutable_from_format, arginfo_date_create_from_format, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) PHP_ME_MAPPING(getLastErrors, date_get_last_errors, arginfo_date_get_last_errors, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) PHP_ME_MAPPING(format, date_format, arginfo_date_method_format, 0) PHP_ME_MAPPING(getTimezone, date_timezone_get, arginfo_date_method_timezone_get, 0) PHP_ME_MAPPING(getOffset, date_offset_get, arginfo_date_method_offset_get, 0) PHP_ME_MAPPING(getTimestamp, date_timestamp_get, arginfo_date_method_timestamp_get, 0) PHP_ME_MAPPING(diff, date_diff, arginfo_date_method_diff, 0) PHP_ME(DateTimeImmutable, modify, arginfo_date_method_modify, 0) PHP_ME(DateTimeImmutable, add, arginfo_date_method_add, 0) PHP_ME(DateTimeImmutable, sub, arginfo_date_method_sub, 0) PHP_ME(DateTimeImmutable, setTimezone, arginfo_date_method_timezone_set, 0) PHP_ME(DateTimeImmutable, setTime, arginfo_date_method_time_set, 0) PHP_ME(DateTimeImmutable, setDate, arginfo_date_method_date_set, 0) PHP_ME(DateTimeImmutable, setISODate, arginfo_date_method_isodate_set, 0) PHP_ME(DateTimeImmutable, setTimestamp, arginfo_date_method_timestamp_set, 0) PHP_ME(DateTimeImmutable, createFromMutable, arginfo_date_method_create_from_mutable, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) PHP_FE_END }; const zend_function_entry date_funcs_timezone[] = { PHP_ME(DateTimeZone, __construct, arginfo_timezone_open, ZEND_ACC_CTOR|ZEND_ACC_PUBLIC) PHP_ME(DateTimeZone, __wakeup, NULL, ZEND_ACC_PUBLIC) PHP_ME(DateTimeZone, __set_state, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) PHP_ME_MAPPING(getName, timezone_name_get, arginfo_timezone_method_name_get, 0) PHP_ME_MAPPING(getOffset, timezone_offset_get, arginfo_timezone_method_offset_get, 0) PHP_ME_MAPPING(getTransitions, timezone_transitions_get, arginfo_timezone_method_transitions_get, 0) PHP_ME_MAPPING(getLocation, timezone_location_get, arginfo_timezone_method_location_get, 0) PHP_ME_MAPPING(listAbbreviations, timezone_abbreviations_list, arginfo_timezone_abbreviations_list, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) PHP_ME_MAPPING(listIdentifiers, timezone_identifiers_list, arginfo_timezone_identifiers_list, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) PHP_FE_END }; const zend_function_entry date_funcs_interval[] = { PHP_ME(DateInterval, __construct, arginfo_date_interval_construct, ZEND_ACC_CTOR|ZEND_ACC_PUBLIC) PHP_ME(DateInterval, __wakeup, NULL, ZEND_ACC_PUBLIC) PHP_ME(DateInterval, __set_state, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) PHP_ME_MAPPING(format, date_interval_format, arginfo_date_method_interval_format, 0) PHP_ME_MAPPING(createFromDateString, date_interval_create_from_date_string, arginfo_date_interval_create_from_date_string, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) PHP_FE_END }; const zend_function_entry date_funcs_period[] = { PHP_ME(DatePeriod, __construct, arginfo_date_period_construct, ZEND_ACC_CTOR|ZEND_ACC_PUBLIC) PHP_ME(DatePeriod, __wakeup, NULL, ZEND_ACC_PUBLIC) PHP_ME(DatePeriod, __set_state, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) PHP_ME(DatePeriod, getStartDate, NULL, ZEND_ACC_PUBLIC) PHP_ME(DatePeriod, getEndDate, NULL, ZEND_ACC_PUBLIC) PHP_ME(DatePeriod, getDateInterval, NULL, ZEND_ACC_PUBLIC) PHP_FE_END }; static char* guess_timezone(const timelib_tzdb *tzdb TSRMLS_DC); static void date_register_classes(TSRMLS_D); /* }}} */ ZEND_DECLARE_MODULE_GLOBALS(date) static PHP_GINIT_FUNCTION(date); /* True global */ timelib_tzdb *php_date_global_timezone_db; int php_date_global_timezone_db_enabled; #define DATE_DEFAULT_LATITUDE "31.7667" #define DATE_DEFAULT_LONGITUDE "35.2333" /* on 90'35; common sunset declaration (start of sun body appear) */ #define DATE_SUNSET_ZENITH "90.583333" /* on 90'35; common sunrise declaration (sun body disappeared) */ #define DATE_SUNRISE_ZENITH "90.583333" static PHP_INI_MH(OnUpdate_date_timezone); /* {{{ INI Settings */ PHP_INI_BEGIN() STD_PHP_INI_ENTRY("date.timezone", "", PHP_INI_ALL, OnUpdate_date_timezone, default_timezone, zend_date_globals, date_globals) PHP_INI_ENTRY("date.default_latitude", DATE_DEFAULT_LATITUDE, PHP_INI_ALL, NULL) PHP_INI_ENTRY("date.default_longitude", DATE_DEFAULT_LONGITUDE, PHP_INI_ALL, NULL) PHP_INI_ENTRY("date.sunset_zenith", DATE_SUNSET_ZENITH, PHP_INI_ALL, NULL) PHP_INI_ENTRY("date.sunrise_zenith", DATE_SUNRISE_ZENITH, PHP_INI_ALL, NULL) PHP_INI_END() /* }}} */ zend_class_entry *date_ce_date, *date_ce_timezone, *date_ce_interval, *date_ce_period; zend_class_entry *date_ce_immutable, *date_ce_interface; PHPAPI zend_class_entry *php_date_get_date_ce(void) { return date_ce_date; } PHPAPI zend_class_entry *php_date_get_immutable_ce(void) { return date_ce_immutable; } PHPAPI zend_class_entry *php_date_get_timezone_ce(void) { return date_ce_timezone; } static zend_object_handlers date_object_handlers_date; static zend_object_handlers date_object_handlers_immutable; static zend_object_handlers date_object_handlers_timezone; static zend_object_handlers date_object_handlers_interval; static zend_object_handlers date_object_handlers_period; #define DATE_SET_CONTEXT \ zval *object; \ object = getThis(); \ #define DATE_FETCH_OBJECT \ php_date_obj *obj; \ DATE_SET_CONTEXT; \ if (object) { \ if (zend_parse_parameters_none() == FAILURE) { \ return; \ } \ } else { \ if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, NULL, "O", &object, date_ce_date) == FAILURE) { \ RETURN_FALSE; \ } \ } \ obj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); \ #define DATE_CHECK_INITIALIZED(member, class_name) \ if (!(member)) { \ php_error_docref(NULL TSRMLS_CC, E_WARNING, "The " #class_name " object has not been correctly initialized by its constructor"); \ RETURN_FALSE; \ } static void date_object_free_storage_date(void *object TSRMLS_DC); static void date_object_free_storage_timezone(void *object TSRMLS_DC); static void date_object_free_storage_interval(void *object TSRMLS_DC); static void date_object_free_storage_period(void *object TSRMLS_DC); static zend_object_value date_object_new_date(zend_class_entry *class_type TSRMLS_DC); static zend_object_value date_object_new_timezone(zend_class_entry *class_type TSRMLS_DC); static zend_object_value date_object_new_interval(zend_class_entry *class_type TSRMLS_DC); static zend_object_value date_object_new_period(zend_class_entry *class_type TSRMLS_DC); static zend_object_value date_object_clone_date(zval *this_ptr TSRMLS_DC); static zend_object_value date_object_clone_timezone(zval *this_ptr TSRMLS_DC); static zend_object_value date_object_clone_interval(zval *this_ptr TSRMLS_DC); static zend_object_value date_object_clone_period(zval *this_ptr TSRMLS_DC); static int date_object_compare_date(zval *d1, zval *d2 TSRMLS_DC); static HashTable *date_object_get_gc(zval *object, zval ***table, int *n TSRMLS_DC); static HashTable *date_object_get_properties(zval *object TSRMLS_DC); static HashTable *date_object_get_gc_interval(zval *object, zval ***table, int *n TSRMLS_DC); static HashTable *date_object_get_properties_interval(zval *object TSRMLS_DC); static HashTable *date_object_get_gc_period(zval *object, zval ***table, int *n TSRMLS_DC); static HashTable *date_object_get_properties_period(zval *object TSRMLS_DC); static HashTable *date_object_get_properties_timezone(zval *object TSRMLS_DC); static HashTable *date_object_get_gc_timezone(zval *object, zval ***table, int *n TSRMLS_DC); zval *date_interval_read_property(zval *object, zval *member, int type, const zend_literal *key TSRMLS_DC); void date_interval_write_property(zval *object, zval *member, zval *value, const zend_literal *key TSRMLS_DC); static zval *date_period_read_property(zval *object, zval *member, int type, const zend_literal *key TSRMLS_DC); static void date_period_write_property(zval *object, zval *member, zval *value, const zend_literal *key TSRMLS_DC); /* {{{ Module struct */ zend_module_entry date_module_entry = { STANDARD_MODULE_HEADER_EX, NULL, NULL, "date", /* extension name */ date_functions, /* function list */ PHP_MINIT(date), /* process startup */ PHP_MSHUTDOWN(date), /* process shutdown */ PHP_RINIT(date), /* request startup */ PHP_RSHUTDOWN(date), /* request shutdown */ PHP_MINFO(date), /* extension info */ PHP_VERSION, /* extension version */ PHP_MODULE_GLOBALS(date), /* globals descriptor */ PHP_GINIT(date), /* globals ctor */ NULL, /* globals dtor */ NULL, /* post deactivate */ STANDARD_MODULE_PROPERTIES_EX }; /* }}} */ /* {{{ PHP_GINIT_FUNCTION */ static PHP_GINIT_FUNCTION(date) { date_globals->default_timezone = NULL; date_globals->timezone = NULL; date_globals->tzcache = NULL; date_globals->timezone_valid = 0; } /* }}} */ static void _php_date_tzinfo_dtor(void *tzinfo) { timelib_tzinfo **tzi = (timelib_tzinfo **)tzinfo; timelib_tzinfo_dtor(*tzi); } /* {{{ PHP_RINIT_FUNCTION */ PHP_RINIT_FUNCTION(date) { if (DATEG(timezone)) { efree(DATEG(timezone)); } DATEG(timezone) = NULL; DATEG(tzcache) = NULL; DATEG(last_errors) = NULL; return SUCCESS; } /* }}} */ /* {{{ PHP_RSHUTDOWN_FUNCTION */ PHP_RSHUTDOWN_FUNCTION(date) { if (DATEG(timezone)) { efree(DATEG(timezone)); } DATEG(timezone) = NULL; if(DATEG(tzcache)) { zend_hash_destroy(DATEG(tzcache)); FREE_HASHTABLE(DATEG(tzcache)); DATEG(tzcache) = NULL; } if (DATEG(last_errors)) { timelib_error_container_dtor(DATEG(last_errors)); DATEG(last_errors) = NULL; } return SUCCESS; } /* }}} */ #define DATE_TIMEZONEDB php_date_global_timezone_db ? php_date_global_timezone_db : timelib_builtin_db() /* * RFC822, Section 5.1: http://www.ietf.org/rfc/rfc822.txt * date-time = [ day "," ] date time ; dd mm yy hh:mm:ss zzz * day = "Mon" / "Tue" / "Wed" / "Thu" / "Fri" / "Sat" / "Sun" * date = 1*2DIGIT month 2DIGIT ; day month year e.g. 20 Jun 82 * month = "Jan" / "Feb" / "Mar" / "Apr" / "May" / "Jun" / "Jul" / "Aug" / "Sep" / "Oct" / "Nov" / "Dec" * time = hour zone ; ANSI and Military * hour = 2DIGIT ":" 2DIGIT [":" 2DIGIT] ; 00:00:00 - 23:59:59 * zone = "UT" / "GMT" / "EST" / "EDT" / "CST" / "CDT" / "MST" / "MDT" / "PST" / "PDT" / 1ALPHA / ( ("+" / "-") 4DIGIT ) */ #define DATE_FORMAT_RFC822 "D, d M y H:i:s O" /* * RFC850, Section 2.1.4: http://www.ietf.org/rfc/rfc850.txt * Format must be acceptable both to the ARPANET and to the getdate routine. * One format that is acceptable to both is Weekday, DD-Mon-YY HH:MM:SS TIMEZONE * TIMEZONE can be any timezone name (3 or more letters) */ #define DATE_FORMAT_RFC850 "l, d-M-y H:i:s T" /* * RFC1036, Section 2.1.2: http://www.ietf.org/rfc/rfc1036.txt * Its format must be acceptable both in RFC-822 and to the getdate(3) * Wdy, DD Mon YY HH:MM:SS TIMEZONE * There is no hope of having a complete list of timezones. Universal * Time (GMT), the North American timezones (PST, PDT, MST, MDT, CST, * CDT, EST, EDT) and the +/-hhmm offset specifed in RFC-822 should be supported. */ #define DATE_FORMAT_RFC1036 "D, d M y H:i:s O" /* * RFC1123, Section 5.2.14: http://www.ietf.org/rfc/rfc1123.txt * RFC-822 Date and Time Specification: RFC-822 Section 5 * The syntax for the date is hereby changed to: date = 1*2DIGIT month 2*4DIGIT */ #define DATE_FORMAT_RFC1123 "D, d M Y H:i:s O" /* * RFC2822, Section 3.3: http://www.ietf.org/rfc/rfc2822.txt * FWS = ([*WSP CRLF] 1*WSP) / ; Folding white space * CFWS = *([FWS] comment) (([FWS] comment) / FWS) * * date-time = [ day-of-week "," ] date FWS time [CFWS] * day-of-week = ([FWS] day-name) * day-name = "Mon" / "Tue" / "Wed" / "Thu" / "Fri" / "Sat" / "Sun" * date = day month year * year = 4*DIGIT * month = (FWS month-name FWS) * month-name = "Jan" / "Feb" / "Mar" / "Apr" / "May" / "Jun" / "Jul" / "Aug" / "Sep" / "Oct" / "Nov" / "Dec" * day = ([FWS] 1*2DIGIT) * time = time-of-day FWS zone * time-of-day = hour ":" minute [ ":" second ] * hour = 2DIGIT * minute = 2DIGIT * second = 2DIGIT * zone = (( "+" / "-" ) 4DIGIT) */ #define DATE_FORMAT_RFC2822 "D, d M Y H:i:s O" /* * RFC3339, Section 5.6: http://www.ietf.org/rfc/rfc3339.txt * date-fullyear = 4DIGIT * date-month = 2DIGIT ; 01-12 * date-mday = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on month/year * * time-hour = 2DIGIT ; 00-23 * time-minute = 2DIGIT ; 00-59 * time-second = 2DIGIT ; 00-58, 00-59, 00-60 based on leap second rules * * time-secfrac = "." 1*DIGIT * time-numoffset = ("+" / "-") time-hour ":" time-minute * time-offset = "Z" / time-numoffset * * partial-time = time-hour ":" time-minute ":" time-second [time-secfrac] * full-date = date-fullyear "-" date-month "-" date-mday * full-time = partial-time time-offset * * date-time = full-date "T" full-time */ #define DATE_FORMAT_RFC3339 "Y-m-d\\TH:i:sP" #define DATE_FORMAT_ISO8601 "Y-m-d\\TH:i:sO" /* * This comes from various sources that like to contradict. I'm going with the * format here because of: * http://msdn.microsoft.com/en-us/library/windows/desktop/aa384321%28v=vs.85%29.aspx * and http://curl.haxx.se/rfc/cookie_spec.html */ #define DATE_FORMAT_COOKIE "l, d-M-Y H:i:s T" #define DATE_TZ_ERRMSG \ "It is not safe to rely on the system's timezone settings. You are " \ "*required* to use the date.timezone setting or the " \ "date_default_timezone_set() function. In case you used any of those " \ "methods and you are still getting this warning, you most likely " \ "misspelled the timezone identifier. " #define SUNFUNCS_RET_TIMESTAMP 0 #define SUNFUNCS_RET_STRING 1 #define SUNFUNCS_RET_DOUBLE 2 /* {{{ PHP_MINIT_FUNCTION */ PHP_MINIT_FUNCTION(date) { REGISTER_INI_ENTRIES(); date_register_classes(TSRMLS_C); /* * RFC4287, Section 3.3: http://www.ietf.org/rfc/rfc4287.txt * A Date construct is an element whose content MUST conform to the * "date-time" production in [RFC3339]. In addition, an uppercase "T" * character MUST be used to separate date and time, and an uppercase * "Z" character MUST be present in the absence of a numeric time zone offset. */ REGISTER_STRING_CONSTANT("DATE_ATOM", DATE_FORMAT_RFC3339, CONST_CS | CONST_PERSISTENT); /* * Preliminary specification: http://wp.netscape.com/newsref/std/cookie_spec.html * "This is based on RFC 822, RFC 850, RFC 1036, and RFC 1123, * with the variations that the only legal time zone is GMT * and the separators between the elements of the date must be dashes." */ REGISTER_STRING_CONSTANT("DATE_COOKIE", DATE_FORMAT_COOKIE, CONST_CS | CONST_PERSISTENT); REGISTER_STRING_CONSTANT("DATE_ISO8601", DATE_FORMAT_ISO8601, CONST_CS | CONST_PERSISTENT); REGISTER_STRING_CONSTANT("DATE_RFC822", DATE_FORMAT_RFC822, CONST_CS | CONST_PERSISTENT); REGISTER_STRING_CONSTANT("DATE_RFC850", DATE_FORMAT_RFC850, CONST_CS | CONST_PERSISTENT); REGISTER_STRING_CONSTANT("DATE_RFC1036", DATE_FORMAT_RFC1036, CONST_CS | CONST_PERSISTENT); REGISTER_STRING_CONSTANT("DATE_RFC1123", DATE_FORMAT_RFC1123, CONST_CS | CONST_PERSISTENT); REGISTER_STRING_CONSTANT("DATE_RFC2822", DATE_FORMAT_RFC2822, CONST_CS | CONST_PERSISTENT); REGISTER_STRING_CONSTANT("DATE_RFC3339", DATE_FORMAT_RFC3339, CONST_CS | CONST_PERSISTENT); /* * RSS 2.0 Specification: http://blogs.law.harvard.edu/tech/rss * "All date-times in RSS conform to the Date and Time Specification of RFC 822, * with the exception that the year may be expressed with two characters or four characters (four preferred)" */ REGISTER_STRING_CONSTANT("DATE_RSS", DATE_FORMAT_RFC1123, CONST_CS | CONST_PERSISTENT); REGISTER_STRING_CONSTANT("DATE_W3C", DATE_FORMAT_RFC3339, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SUNFUNCS_RET_TIMESTAMP", SUNFUNCS_RET_TIMESTAMP, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SUNFUNCS_RET_STRING", SUNFUNCS_RET_STRING, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SUNFUNCS_RET_DOUBLE", SUNFUNCS_RET_DOUBLE, CONST_CS | CONST_PERSISTENT); php_date_global_timezone_db = NULL; php_date_global_timezone_db_enabled = 0; DATEG(last_errors) = NULL; return SUCCESS; } /* }}} */ /* {{{ PHP_MSHUTDOWN_FUNCTION */ PHP_MSHUTDOWN_FUNCTION(date) { UNREGISTER_INI_ENTRIES(); if (DATEG(last_errors)) { timelib_error_container_dtor(DATEG(last_errors)); } #ifndef ZTS DATEG(default_timezone) = NULL; #endif return SUCCESS; } /* }}} */ /* {{{ PHP_MINFO_FUNCTION */ PHP_MINFO_FUNCTION(date) { const timelib_tzdb *tzdb = DATE_TIMEZONEDB; php_info_print_table_start(); php_info_print_table_row(2, "date/time support", "enabled"); php_info_print_table_row(2, "\"Olson\" Timezone Database Version", tzdb->version); php_info_print_table_row(2, "Timezone Database", php_date_global_timezone_db_enabled ? "external" : "internal"); php_info_print_table_row(2, "Default timezone", guess_timezone(tzdb TSRMLS_CC)); php_info_print_table_end(); DISPLAY_INI_ENTRIES(); } /* }}} */ /* {{{ Timezone Cache functions */ static timelib_tzinfo *php_date_parse_tzfile(char *formal_tzname, const timelib_tzdb *tzdb TSRMLS_DC) { timelib_tzinfo *tzi, **ptzi; if(!DATEG(tzcache)) { ALLOC_HASHTABLE(DATEG(tzcache)); zend_hash_init(DATEG(tzcache), 4, NULL, _php_date_tzinfo_dtor, 0); } if (zend_hash_find(DATEG(tzcache), formal_tzname, strlen(formal_tzname) + 1, (void **) &ptzi) == SUCCESS) { return *ptzi; } tzi = timelib_parse_tzfile(formal_tzname, tzdb); if (tzi) { zend_hash_add(DATEG(tzcache), formal_tzname, strlen(formal_tzname) + 1, (void *) &tzi, sizeof(timelib_tzinfo*), NULL); } return tzi; } timelib_tzinfo *php_date_parse_tzfile_wrapper(char *formal_tzname, const timelib_tzdb *tzdb) { TSRMLS_FETCH(); return php_date_parse_tzfile(formal_tzname, tzdb TSRMLS_CC); } /* }}} */ /* Callback to check the date.timezone only when changed increases performance */ /* {{{ static PHP_INI_MH(OnUpdate_date_timezone) */ static PHP_INI_MH(OnUpdate_date_timezone) { if (OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC) == FAILURE) { return FAILURE; } DATEG(timezone_valid) = 0; if (stage == PHP_INI_STAGE_RUNTIME) { if (!timelib_timezone_id_is_valid(DATEG(default_timezone), DATE_TIMEZONEDB)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, DATE_TZ_ERRMSG); } else { DATEG(timezone_valid) = 1; } } return SUCCESS; } /* }}} */ /* {{{ Helper functions */ static char* guess_timezone(const timelib_tzdb *tzdb TSRMLS_DC) { /* Checking configure timezone */ if (DATEG(timezone) && (strlen(DATEG(timezone))) > 0) { return DATEG(timezone); } /* Check config setting for default timezone */ if (!DATEG(default_timezone)) { /* Special case: ext/date wasn't initialized yet */ zval ztz; if (SUCCESS == zend_get_configuration_directive("date.timezone", sizeof("date.timezone"), &ztz) && Z_TYPE(ztz) == IS_STRING && Z_STRLEN(ztz) > 0 && timelib_timezone_id_is_valid(Z_STRVAL(ztz), tzdb)) { return Z_STRVAL(ztz); } } else if (*DATEG(default_timezone)) { if (DATEG(timezone_valid) == 1) { return DATEG(default_timezone); } if (!timelib_timezone_id_is_valid(DATEG(default_timezone), tzdb)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid date.timezone value '%s', we selected the timezone 'UTC' for now.", DATEG(default_timezone)); return "UTC"; } DATEG(timezone_valid) = 1; return DATEG(default_timezone); } /* Fallback to UTC */ php_error_docref(NULL TSRMLS_CC, E_WARNING, DATE_TZ_ERRMSG "We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone."); return "UTC"; } PHPAPI timelib_tzinfo *get_timezone_info(TSRMLS_D) { char *tz; timelib_tzinfo *tzi; tz = guess_timezone(DATE_TIMEZONEDB TSRMLS_CC); tzi = php_date_parse_tzfile(tz, DATE_TIMEZONEDB TSRMLS_CC); if (! tzi) { php_error_docref(NULL TSRMLS_CC, E_ERROR, "Timezone database is corrupt - this should *never* happen!"); } return tzi; } /* }}} */ /* {{{ date() and gmdate() data */ #include "ext/standard/php_smart_str.h" static char *mon_full_names[] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; static char *mon_short_names[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; static char *day_full_names[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; static char *day_short_names[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; static char *english_suffix(timelib_sll number) { if (number >= 10 && number <= 19) { return "th"; } else { switch (number % 10) { case 1: return "st"; case 2: return "nd"; case 3: return "rd"; } } return "th"; } /* }}} */ /* {{{ day of week helpers */ char *php_date_full_day_name(timelib_sll y, timelib_sll m, timelib_sll d) { timelib_sll day_of_week = timelib_day_of_week(y, m, d); if (day_of_week < 0) { return "Unknown"; } return day_full_names[day_of_week]; } char *php_date_short_day_name(timelib_sll y, timelib_sll m, timelib_sll d) { timelib_sll day_of_week = timelib_day_of_week(y, m, d); if (day_of_week < 0) { return "Unknown"; } return day_short_names[day_of_week]; } /* }}} */ /* {{{ date_format - (gm)date helper */ static char *date_format(char *format, int format_len, timelib_time *t, int localtime) { smart_str string = {0}; int i, length = 0; char buffer[97]; timelib_time_offset *offset = NULL; timelib_sll isoweek, isoyear; int rfc_colon; int weekYearSet = 0; if (!format_len) { return estrdup(""); } if (localtime) { if (t->zone_type == TIMELIB_ZONETYPE_ABBR) { offset = timelib_time_offset_ctor(); offset->offset = (t->z - (t->dst * 60)) * -60; offset->leap_secs = 0; offset->is_dst = t->dst; offset->abbr = strdup(t->tz_abbr); } else if (t->zone_type == TIMELIB_ZONETYPE_OFFSET) { offset = timelib_time_offset_ctor(); offset->offset = (t->z) * -60; offset->leap_secs = 0; offset->is_dst = 0; offset->abbr = malloc(9); /* GMT�xxxx\0 */ snprintf(offset->abbr, 9, "GMT%c%02d%02d", localtime ? ((offset->offset < 0) ? '-' : '+') : '+', localtime ? abs(offset->offset / 3600) : 0, localtime ? abs((offset->offset % 3600) / 60) : 0 ); } else { offset = timelib_get_time_zone_info(t->sse, t->tz_info); } } for (i = 0; i < format_len; i++) { rfc_colon = 0; switch (format[i]) { /* day */ case 'd': length = slprintf(buffer, 32, "%02d", (int) t->d); break; case 'D': length = slprintf(buffer, 32, "%s", php_date_short_day_name(t->y, t->m, t->d)); break; case 'j': length = slprintf(buffer, 32, "%d", (int) t->d); break; case 'l': length = slprintf(buffer, 32, "%s", php_date_full_day_name(t->y, t->m, t->d)); break; case 'S': length = slprintf(buffer, 32, "%s", english_suffix(t->d)); break; case 'w': length = slprintf(buffer, 32, "%d", (int) timelib_day_of_week(t->y, t->m, t->d)); break; case 'N': length = slprintf(buffer, 32, "%d", (int) timelib_iso_day_of_week(t->y, t->m, t->d)); break; case 'z': length = slprintf(buffer, 32, "%d", (int) timelib_day_of_year(t->y, t->m, t->d)); break; /* week */ case 'W': if(!weekYearSet) { timelib_isoweek_from_date(t->y, t->m, t->d, &isoweek, &isoyear); weekYearSet = 1; } length = slprintf(buffer, 32, "%02d", (int) isoweek); break; /* iso weeknr */ case 'o': if(!weekYearSet) { timelib_isoweek_from_date(t->y, t->m, t->d, &isoweek, &isoyear); weekYearSet = 1; } length = slprintf(buffer, 32, "%d", (int) isoyear); break; /* iso year */ /* month */ case 'F': length = slprintf(buffer, 32, "%s", mon_full_names[t->m - 1]); break; case 'm': length = slprintf(buffer, 32, "%02d", (int) t->m); break; case 'M': length = slprintf(buffer, 32, "%s", mon_short_names[t->m - 1]); break; case 'n': length = slprintf(buffer, 32, "%d", (int) t->m); break; case 't': length = slprintf(buffer, 32, "%d", (int) timelib_days_in_month(t->y, t->m)); break; /* year */ case 'L': length = slprintf(buffer, 32, "%d", timelib_is_leap((int) t->y)); break; case 'y': length = slprintf(buffer, 32, "%02d", (int) t->y % 100); break; case 'Y': length = slprintf(buffer, 32, "%s%04lld", t->y < 0 ? "-" : "", php_date_llabs((timelib_sll) t->y)); break; /* time */ case 'a': length = slprintf(buffer, 32, "%s", t->h >= 12 ? "pm" : "am"); break; case 'A': length = slprintf(buffer, 32, "%s", t->h >= 12 ? "PM" : "AM"); break; case 'B': { int retval = (((((long)t->sse)-(((long)t->sse) - ((((long)t->sse) % 86400) + 3600))) * 10) / 864); while (retval < 0) { retval += 1000; } retval = retval % 1000; length = slprintf(buffer, 32, "%03d", retval); break; } case 'g': length = slprintf(buffer, 32, "%d", (t->h % 12) ? (int) t->h % 12 : 12); break; case 'G': length = slprintf(buffer, 32, "%d", (int) t->h); break; case 'h': length = slprintf(buffer, 32, "%02d", (t->h % 12) ? (int) t->h % 12 : 12); break; case 'H': length = slprintf(buffer, 32, "%02d", (int) t->h); break; case 'i': length = slprintf(buffer, 32, "%02d", (int) t->i); break; case 's': length = slprintf(buffer, 32, "%02d", (int) t->s); break; case 'u': length = slprintf(buffer, 32, "%06d", (int) floor(t->f * 1000000 + 0.5)); break; /* timezone */ case 'I': length = slprintf(buffer, 32, "%d", localtime ? offset->is_dst : 0); break; case 'P': rfc_colon = 1; /* break intentionally missing */ case 'O': length = slprintf(buffer, 32, "%c%02d%s%02d", localtime ? ((offset->offset < 0) ? '-' : '+') : '+', localtime ? abs(offset->offset / 3600) : 0, rfc_colon ? ":" : "", localtime ? abs((offset->offset % 3600) / 60) : 0 ); break; case 'T': length = slprintf(buffer, 32, "%s", localtime ? offset->abbr : "GMT"); break; case 'e': if (!localtime) { length = slprintf(buffer, 32, "%s", "UTC"); } else { switch (t->zone_type) { case TIMELIB_ZONETYPE_ID: length = slprintf(buffer, 32, "%s", t->tz_info->name); break; case TIMELIB_ZONETYPE_ABBR: length = slprintf(buffer, 32, "%s", offset->abbr); break; case TIMELIB_ZONETYPE_OFFSET: length = slprintf(buffer, 32, "%c%02d:%02d", ((offset->offset < 0) ? '-' : '+'), abs(offset->offset / 3600), abs((offset->offset % 3600) / 60) ); break; } } break; case 'Z': length = slprintf(buffer, 32, "%d", localtime ? offset->offset : 0); break; /* full date/time */ case 'c': length = slprintf(buffer, 96, "%04d-%02d-%02dT%02d:%02d:%02d%c%02d:%02d", (int) t->y, (int) t->m, (int) t->d, (int) t->h, (int) t->i, (int) t->s, localtime ? ((offset->offset < 0) ? '-' : '+') : '+', localtime ? abs(offset->offset / 3600) : 0, localtime ? abs((offset->offset % 3600) / 60) : 0 ); break; case 'r': length = slprintf(buffer, 96, "%3s, %02d %3s %04d %02d:%02d:%02d %c%02d%02d", php_date_short_day_name(t->y, t->m, t->d), (int) t->d, mon_short_names[t->m - 1], (int) t->y, (int) t->h, (int) t->i, (int) t->s, localtime ? ((offset->offset < 0) ? '-' : '+') : '+', localtime ? abs(offset->offset / 3600) : 0, localtime ? abs((offset->offset % 3600) / 60) : 0 ); break; case 'U': length = slprintf(buffer, 32, "%lld", (timelib_sll) t->sse); break; case '\\': if (i < format_len) i++; /* break intentionally missing */ default: buffer[0] = format[i]; buffer[1] = '\0'; length = 1; break; } smart_str_appendl(&string, buffer, length); } smart_str_0(&string); if (localtime) { timelib_time_offset_dtor(offset); } return string.c; } static void php_date(INTERNAL_FUNCTION_PARAMETERS, int localtime) { char *format; int format_len; long ts; char *string; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &format, &format_len, &ts) == FAILURE) { RETURN_FALSE; } if (ZEND_NUM_ARGS() == 1) { ts = time(NULL); } string = php_format_date(format, format_len, ts, localtime TSRMLS_CC); RETVAL_STRING(string, 0); } /* }}} */ PHPAPI char *php_format_date(char *format, int format_len, time_t ts, int localtime TSRMLS_DC) /* {{{ */ { timelib_time *t; timelib_tzinfo *tzi; char *string; t = timelib_time_ctor(); if (localtime) { tzi = get_timezone_info(TSRMLS_C); t->tz_info = tzi; t->zone_type = TIMELIB_ZONETYPE_ID; timelib_unixtime2local(t, ts); } else { tzi = NULL; timelib_unixtime2gmt(t, ts); } string = date_format(format, format_len, t, localtime); timelib_time_dtor(t); return string; } /* }}} */ /* {{{ php_idate */ PHPAPI int php_idate(char format, time_t ts, int localtime TSRMLS_DC) { timelib_time *t; timelib_tzinfo *tzi; int retval = -1; timelib_time_offset *offset = NULL; timelib_sll isoweek, isoyear; t = timelib_time_ctor(); if (!localtime) { tzi = get_timezone_info(TSRMLS_C); t->tz_info = tzi; t->zone_type = TIMELIB_ZONETYPE_ID; timelib_unixtime2local(t, ts); } else { tzi = NULL; timelib_unixtime2gmt(t, ts); } if (!localtime) { if (t->zone_type == TIMELIB_ZONETYPE_ABBR) { offset = timelib_time_offset_ctor(); offset->offset = (t->z - (t->dst * 60)) * -60; offset->leap_secs = 0; offset->is_dst = t->dst; offset->abbr = strdup(t->tz_abbr); } else if (t->zone_type == TIMELIB_ZONETYPE_OFFSET) { offset = timelib_time_offset_ctor(); offset->offset = (t->z - (t->dst * 60)) * -60; offset->leap_secs = 0; offset->is_dst = t->dst; offset->abbr = malloc(9); /* GMT�xxxx\0 */ snprintf(offset->abbr, 9, "GMT%c%02d%02d", !localtime ? ((offset->offset < 0) ? '-' : '+') : '+', !localtime ? abs(offset->offset / 3600) : 0, !localtime ? abs((offset->offset % 3600) / 60) : 0 ); } else { offset = timelib_get_time_zone_info(t->sse, t->tz_info); } } timelib_isoweek_from_date(t->y, t->m, t->d, &isoweek, &isoyear); switch (format) { /* day */ case 'd': case 'j': retval = (int) t->d; break; case 'w': retval = (int) timelib_day_of_week(t->y, t->m, t->d); break; case 'z': retval = (int) timelib_day_of_year(t->y, t->m, t->d); break; /* week */ case 'W': retval = (int) isoweek; break; /* iso weeknr */ /* month */ case 'm': case 'n': retval = (int) t->m; break; case 't': retval = (int) timelib_days_in_month(t->y, t->m); break; /* year */ case 'L': retval = (int) timelib_is_leap((int) t->y); break; case 'y': retval = (int) (t->y % 100); break; case 'Y': retval = (int) t->y; break; /* Swatch Beat a.k.a. Internet Time */ case 'B': retval = (((((long)t->sse)-(((long)t->sse) - ((((long)t->sse) % 86400) + 3600))) * 10) / 864); while (retval < 0) { retval += 1000; } retval = retval % 1000; break; /* time */ case 'g': case 'h': retval = (int) ((t->h % 12) ? (int) t->h % 12 : 12); break; case 'H': case 'G': retval = (int) t->h; break; case 'i': retval = (int) t->i; break; case 's': retval = (int) t->s; break; /* timezone */ case 'I': retval = (int) (!localtime ? offset->is_dst : 0); break; case 'Z': retval = (int) (!localtime ? offset->offset : 0); break; case 'U': retval = (int) t->sse; break; } if (!localtime) { timelib_time_offset_dtor(offset); } timelib_time_dtor(t); return retval; } /* }}} */ /* {{{ proto string date(string format [, long timestamp]) Format a local date/time */ PHP_FUNCTION(date) { php_date(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); } /* }}} */ /* {{{ proto string gmdate(string format [, long timestamp]) Format a GMT date/time */ PHP_FUNCTION(gmdate) { php_date(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); } /* }}} */ /* {{{ proto int idate(string format [, int timestamp]) Format a local time/date as integer */ PHP_FUNCTION(idate) { char *format; int format_len; long ts = 0; int ret; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &format, &format_len, &ts) == FAILURE) { RETURN_FALSE; } if (format_len != 1) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "idate format is one char"); RETURN_FALSE; } if (ZEND_NUM_ARGS() == 1) { ts = time(NULL); } ret = php_idate(format[0], ts, 0 TSRMLS_CC); if (ret == -1) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unrecognized date format token."); RETURN_FALSE; } RETURN_LONG(ret); } /* }}} */ /* {{{ php_date_set_tzdb - NOT THREADSAFE */ PHPAPI void php_date_set_tzdb(timelib_tzdb *tzdb) { const timelib_tzdb *builtin = timelib_builtin_db(); if (php_version_compare(tzdb->version, builtin->version) > 0) { php_date_global_timezone_db = tzdb; php_date_global_timezone_db_enabled = 1; } } /* }}} */ /* {{{ php_parse_date: Backwards compatibility function */ PHPAPI signed long php_parse_date(char *string, signed long *now) { timelib_time *parsed_time; timelib_error_container *error = NULL; int error2; signed long retval; parsed_time = timelib_strtotime(string, strlen(string), &error, DATE_TIMEZONEDB, php_date_parse_tzfile_wrapper); if (error->error_count) { timelib_time_dtor(parsed_time); timelib_error_container_dtor(error); return -1; } timelib_error_container_dtor(error); timelib_update_ts(parsed_time, NULL); retval = timelib_date_to_int(parsed_time, &error2); timelib_time_dtor(parsed_time); if (error2) { return -1; } return retval; } /* }}} */ /* {{{ proto int strtotime(string time [, int now ]) Convert string representation of date and time to a timestamp */ PHP_FUNCTION(strtotime) { char *times, *initial_ts; int time_len, error1, error2; struct timelib_error_container *error; long preset_ts = 0, ts; timelib_time *t, *now; timelib_tzinfo *tzi; tzi = get_timezone_info(TSRMLS_C); if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "sl", ×, &time_len, &preset_ts) != FAILURE) { /* We have an initial timestamp */ now = timelib_time_ctor(); initial_ts = emalloc(25); snprintf(initial_ts, 24, "@%ld UTC", preset_ts); t = timelib_strtotime(initial_ts, strlen(initial_ts), NULL, DATE_TIMEZONEDB, php_date_parse_tzfile_wrapper); /* we ignore the error here, as this should never fail */ timelib_update_ts(t, tzi); now->tz_info = tzi; now->zone_type = TIMELIB_ZONETYPE_ID; timelib_unixtime2local(now, t->sse); timelib_time_dtor(t); efree(initial_ts); } else if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", ×, &time_len, &preset_ts) != FAILURE) { /* We have no initial timestamp */ now = timelib_time_ctor(); now->tz_info = tzi; now->zone_type = TIMELIB_ZONETYPE_ID; timelib_unixtime2local(now, (timelib_sll) time(NULL)); } else { RETURN_FALSE; } if (!time_len) { timelib_time_dtor(now); RETURN_FALSE; } t = timelib_strtotime(times, time_len, &error, DATE_TIMEZONEDB, php_date_parse_tzfile_wrapper); error1 = error->error_count; timelib_error_container_dtor(error); timelib_fill_holes(t, now, TIMELIB_NO_CLONE); timelib_update_ts(t, tzi); ts = timelib_date_to_int(t, &error2); timelib_time_dtor(now); timelib_time_dtor(t); if (error1 || error2) { RETURN_FALSE; } else { RETURN_LONG(ts); } } /* }}} */ /* {{{ php_mktime - (gm)mktime helper */ PHPAPI void php_mktime(INTERNAL_FUNCTION_PARAMETERS, int gmt) { long hou = 0, min = 0, sec = 0, mon = 0, day = 0, yea = 0, dst = -1; timelib_time *now; timelib_tzinfo *tzi = NULL; long ts, adjust_seconds = 0; int error; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|lllllll", &hou, &min, &sec, &mon, &day, &yea, &dst) == FAILURE) { RETURN_FALSE; } /* Initialize structure with current time */ now = timelib_time_ctor(); if (gmt) { timelib_unixtime2gmt(now, (timelib_sll) time(NULL)); } else { tzi = get_timezone_info(TSRMLS_C); now->tz_info = tzi; now->zone_type = TIMELIB_ZONETYPE_ID; timelib_unixtime2local(now, (timelib_sll) time(NULL)); } /* Fill in the new data */ switch (ZEND_NUM_ARGS()) { case 7: /* break intentionally missing */ case 6: if (yea >= 0 && yea < 70) { yea += 2000; } else if (yea >= 70 && yea <= 100) { yea += 1900; } now->y = yea; /* break intentionally missing again */ case 5: now->d = day; /* break missing intentionally here too */ case 4: now->m = mon; /* and here */ case 3: now->s = sec; /* yup, this break isn't here on purpose too */ case 2: now->i = min; /* last intentionally missing break */ case 1: now->h = hou; break; default: php_error_docref(NULL TSRMLS_CC, E_STRICT, "You should be using the time() function instead"); } /* Update the timestamp */ if (gmt) { timelib_update_ts(now, NULL); } else { timelib_update_ts(now, tzi); } /* Support for the deprecated is_dst parameter */ if (dst != -1) { php_error_docref(NULL TSRMLS_CC, E_DEPRECATED, "The is_dst parameter is deprecated"); if (gmt) { /* GMT never uses DST */ if (dst == 1) { adjust_seconds = -3600; } } else { /* Figure out is_dst for current TS */ timelib_time_offset *tmp_offset; tmp_offset = timelib_get_time_zone_info(now->sse, tzi); if (dst == 1 && tmp_offset->is_dst == 0) { adjust_seconds = -3600; } if (dst == 0 && tmp_offset->is_dst == 1) { adjust_seconds = +3600; } timelib_time_offset_dtor(tmp_offset); } } /* Clean up and return */ ts = timelib_date_to_int(now, &error); ts += adjust_seconds; timelib_time_dtor(now); if (error) { RETURN_FALSE; } else { RETURN_LONG(ts); } } /* }}} */ /* {{{ proto int mktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]]) Get UNIX timestamp for a date */ PHP_FUNCTION(mktime) { php_mktime(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); } /* }}} */ /* {{{ proto int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]]) Get UNIX timestamp for a GMT date */ PHP_FUNCTION(gmmktime) { php_mktime(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); } /* }}} */ /* {{{ proto bool checkdate(int month, int day, int year) Returns true(1) if it is a valid date in gregorian calendar */ PHP_FUNCTION(checkdate) { long m, d, y; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &m, &d, &y) == FAILURE) { RETURN_FALSE; } if (y < 1 || y > 32767 || !timelib_valid_date(y, m, d)) { RETURN_FALSE; } RETURN_TRUE; /* True : This month, day, year arguments are valid */ } /* }}} */ #ifdef HAVE_STRFTIME /* {{{ php_strftime - (gm)strftime helper */ PHPAPI void php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gmt) { char *format, *buf; int format_len; long timestamp = 0; struct tm ta; int max_reallocs = 5; size_t buf_len = 256, real_len; timelib_time *ts; timelib_tzinfo *tzi; timelib_time_offset *offset = NULL; timestamp = (long) time(NULL); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &format, &format_len, ×tamp) == FAILURE) { RETURN_FALSE; } if (format_len == 0) { RETURN_FALSE; } ts = timelib_time_ctor(); if (gmt) { tzi = NULL; timelib_unixtime2gmt(ts, (timelib_sll) timestamp); } else { tzi = get_timezone_info(TSRMLS_C); ts->tz_info = tzi; ts->zone_type = TIMELIB_ZONETYPE_ID; timelib_unixtime2local(ts, (timelib_sll) timestamp); } ta.tm_sec = ts->s; ta.tm_min = ts->i; ta.tm_hour = ts->h; ta.tm_mday = ts->d; ta.tm_mon = ts->m - 1; ta.tm_year = ts->y - 1900; ta.tm_wday = timelib_day_of_week(ts->y, ts->m, ts->d); ta.tm_yday = timelib_day_of_year(ts->y, ts->m, ts->d); if (gmt) { ta.tm_isdst = 0; #if HAVE_TM_GMTOFF ta.tm_gmtoff = 0; #endif #if HAVE_TM_ZONE ta.tm_zone = "GMT"; #endif } else { offset = timelib_get_time_zone_info(timestamp, tzi); ta.tm_isdst = offset->is_dst; #if HAVE_TM_GMTOFF ta.tm_gmtoff = offset->offset; #endif #if HAVE_TM_ZONE ta.tm_zone = offset->abbr; #endif } /* VS2012 crt has a bug where strftime crash with %z and %Z format when the initial buffer is too small. See http://connect.microsoft.com/VisualStudio/feedback/details/759720/vs2012-strftime-crash-with-z-formatting-code */ buf = (char *) emalloc(buf_len); while ((real_len=strftime(buf, buf_len, format, &ta))==buf_len || real_len==0) { buf_len *= 2; buf = (char *) erealloc(buf, buf_len); if (!--max_reallocs) { break; } } #if defined(PHP_WIN32) && _MSC_VER >= 1700 /* VS2012 strftime() returns number of characters, not bytes. See VC++11 bug id 766205. */ if (real_len > 0) { real_len = strlen(buf); } #endif timelib_time_dtor(ts); if (!gmt) { timelib_time_offset_dtor(offset); } if (real_len && real_len != buf_len) { buf = (char *) erealloc(buf, real_len + 1); RETURN_STRINGL(buf, real_len, 0); } efree(buf); RETURN_FALSE; } /* }}} */ /* {{{ proto string strftime(string format [, int timestamp]) Format a local time/date according to locale settings */ PHP_FUNCTION(strftime) { php_strftime(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); } /* }}} */ /* {{{ proto string gmstrftime(string format [, int timestamp]) Format a GMT/UCT time/date according to locale settings */ PHP_FUNCTION(gmstrftime) { php_strftime(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); } /* }}} */ #endif /* {{{ proto int time(void) Return current UNIX timestamp */ PHP_FUNCTION(time) { RETURN_LONG((long)time(NULL)); } /* }}} */ /* {{{ proto array localtime([int timestamp [, bool associative_array]]) Returns the results of the C system call localtime as an associative array if the associative_array argument is set to 1 other wise it is a regular array */ PHP_FUNCTION(localtime) { long timestamp = (long)time(NULL); zend_bool associative = 0; timelib_tzinfo *tzi; timelib_time *ts; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|lb", ×tamp, &associative) == FAILURE) { RETURN_FALSE; } tzi = get_timezone_info(TSRMLS_C); ts = timelib_time_ctor(); ts->tz_info = tzi; ts->zone_type = TIMELIB_ZONETYPE_ID; timelib_unixtime2local(ts, (timelib_sll) timestamp); array_init(return_value); if (associative) { add_assoc_long(return_value, "tm_sec", ts->s); add_assoc_long(return_value, "tm_min", ts->i); add_assoc_long(return_value, "tm_hour", ts->h); add_assoc_long(return_value, "tm_mday", ts->d); add_assoc_long(return_value, "tm_mon", ts->m - 1); add_assoc_long(return_value, "tm_year", ts->y - 1900); add_assoc_long(return_value, "tm_wday", timelib_day_of_week(ts->y, ts->m, ts->d)); add_assoc_long(return_value, "tm_yday", timelib_day_of_year(ts->y, ts->m, ts->d)); add_assoc_long(return_value, "tm_isdst", ts->dst); } else { add_next_index_long(return_value, ts->s); add_next_index_long(return_value, ts->i); add_next_index_long(return_value, ts->h); add_next_index_long(return_value, ts->d); add_next_index_long(return_value, ts->m - 1); add_next_index_long(return_value, ts->y- 1900); add_next_index_long(return_value, timelib_day_of_week(ts->y, ts->m, ts->d)); add_next_index_long(return_value, timelib_day_of_year(ts->y, ts->m, ts->d)); add_next_index_long(return_value, ts->dst); } timelib_time_dtor(ts); } /* }}} */ /* {{{ proto array getdate([int timestamp]) Get date/time information */ PHP_FUNCTION(getdate) { long timestamp = (long)time(NULL); timelib_tzinfo *tzi; timelib_time *ts; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", ×tamp) == FAILURE) { RETURN_FALSE; } tzi = get_timezone_info(TSRMLS_C); ts = timelib_time_ctor(); ts->tz_info = tzi; ts->zone_type = TIMELIB_ZONETYPE_ID; timelib_unixtime2local(ts, (timelib_sll) timestamp); array_init(return_value); add_assoc_long(return_value, "seconds", ts->s); add_assoc_long(return_value, "minutes", ts->i); add_assoc_long(return_value, "hours", ts->h); add_assoc_long(return_value, "mday", ts->d); add_assoc_long(return_value, "wday", timelib_day_of_week(ts->y, ts->m, ts->d)); add_assoc_long(return_value, "mon", ts->m); add_assoc_long(return_value, "year", ts->y); add_assoc_long(return_value, "yday", timelib_day_of_year(ts->y, ts->m, ts->d)); add_assoc_string(return_value, "weekday", php_date_full_day_name(ts->y, ts->m, ts->d), 1); add_assoc_string(return_value, "month", mon_full_names[ts->m - 1], 1); add_index_long(return_value, 0, timestamp); timelib_time_dtor(ts); } /* }}} */ #define PHP_DATE_TIMEZONE_GROUP_AFRICA 0x0001 #define PHP_DATE_TIMEZONE_GROUP_AMERICA 0x0002 #define PHP_DATE_TIMEZONE_GROUP_ANTARCTICA 0x0004 #define PHP_DATE_TIMEZONE_GROUP_ARCTIC 0x0008 #define PHP_DATE_TIMEZONE_GROUP_ASIA 0x0010 #define PHP_DATE_TIMEZONE_GROUP_ATLANTIC 0x0020 #define PHP_DATE_TIMEZONE_GROUP_AUSTRALIA 0x0040 #define PHP_DATE_TIMEZONE_GROUP_EUROPE 0x0080 #define PHP_DATE_TIMEZONE_GROUP_INDIAN 0x0100 #define PHP_DATE_TIMEZONE_GROUP_PACIFIC 0x0200 #define PHP_DATE_TIMEZONE_GROUP_UTC 0x0400 #define PHP_DATE_TIMEZONE_GROUP_ALL 0x07FF #define PHP_DATE_TIMEZONE_GROUP_ALL_W_BC 0x0FFF #define PHP_DATE_TIMEZONE_PER_COUNTRY 0x1000 #define PHP_DATE_PERIOD_EXCLUDE_START_DATE 0x0001 /* define an overloaded iterator structure */ typedef struct { zend_object_iterator intern; zval *date_period_zval; zval *current; php_period_obj *object; int current_index; } date_period_it; /* {{{ date_period_it_invalidate_current */ static void date_period_it_invalidate_current(zend_object_iterator *iter TSRMLS_DC) { date_period_it *iterator = (date_period_it *)iter; if (iterator->current) { zval_ptr_dtor(&iterator->current); iterator->current = NULL; } } /* }}} */ /* {{{ date_period_it_dtor */ static void date_period_it_dtor(zend_object_iterator *iter TSRMLS_DC) { date_period_it *iterator = (date_period_it *)iter; date_period_it_invalidate_current(iter TSRMLS_CC); zval_ptr_dtor(&iterator->date_period_zval); efree(iterator); } /* }}} */ /* {{{ date_period_it_has_more */ static int date_period_it_has_more(zend_object_iterator *iter TSRMLS_DC) { date_period_it *iterator = (date_period_it *)iter; php_period_obj *object = iterator->object; timelib_time *it_time = object->current; /* apply modification if it's not the first iteration */ if (!object->include_start_date || iterator->current_index > 0) { it_time->have_relative = 1; it_time->relative = *object->interval; it_time->sse_uptodate = 0; timelib_update_ts(it_time, NULL); timelib_update_from_sse(it_time); } if (object->end) { return object->current->sse < object->end->sse ? SUCCESS : FAILURE; } else { return (iterator->current_index < object->recurrences) ? SUCCESS : FAILURE; } } /* }}} */ /* {{{ date_period_it_current_data */ static void date_period_it_current_data(zend_object_iterator *iter, zval ***data TSRMLS_DC) { date_period_it *iterator = (date_period_it *)iter; php_period_obj *object = iterator->object; timelib_time *it_time = object->current; php_date_obj *newdateobj; /* Create new object */ MAKE_STD_ZVAL(iterator->current); php_date_instantiate(object->start_ce, iterator->current TSRMLS_CC); newdateobj = (php_date_obj *) zend_object_store_get_object(iterator->current TSRMLS_CC); newdateobj->time = timelib_time_ctor(); *newdateobj->time = *it_time; if (it_time->tz_abbr) { newdateobj->time->tz_abbr = strdup(it_time->tz_abbr); } if (it_time->tz_info) { newdateobj->time->tz_info = it_time->tz_info; } *data = &iterator->current; } /* }}} */ /* {{{ date_period_it_current_key */ static void date_period_it_current_key(zend_object_iterator *iter, zval *key TSRMLS_DC) { date_period_it *iterator = (date_period_it *)iter; ZVAL_LONG(key, iterator->current_index); } /* }}} */ /* {{{ date_period_it_move_forward */ static void date_period_it_move_forward(zend_object_iterator *iter TSRMLS_DC) { date_period_it *iterator = (date_period_it *)iter; iterator->current_index++; date_period_it_invalidate_current(iter TSRMLS_CC); } /* }}} */ /* {{{ date_period_it_rewind */ static void date_period_it_rewind(zend_object_iterator *iter TSRMLS_DC) { date_period_it *iterator = (date_period_it *)iter; iterator->current_index = 0; if (iterator->object->current) { timelib_time_dtor(iterator->object->current); } iterator->object->current = timelib_time_clone(iterator->object->start); date_period_it_invalidate_current(iter TSRMLS_CC); } /* }}} */ /* iterator handler table */ zend_object_iterator_funcs date_period_it_funcs = { date_period_it_dtor, date_period_it_has_more, date_period_it_current_data, date_period_it_current_key, date_period_it_move_forward, date_period_it_rewind, date_period_it_invalidate_current }; zend_object_iterator *date_object_period_get_iterator(zend_class_entry *ce, zval *object, int by_ref TSRMLS_DC) { date_period_it *iterator = emalloc(sizeof(date_period_it)); php_period_obj *dpobj = (php_period_obj *)zend_object_store_get_object(object TSRMLS_CC); if (by_ref) { zend_error(E_ERROR, "An iterator cannot be used with foreach by reference"); } Z_ADDREF_P(object); iterator->intern.data = (void*) dpobj; iterator->intern.funcs = &date_period_it_funcs; iterator->date_period_zval = object; iterator->object = dpobj; iterator->current = NULL; return (zend_object_iterator*)iterator; } static int implement_date_interface_handler(zend_class_entry *interface, zend_class_entry *implementor TSRMLS_DC) { if (implementor->type == ZEND_USER_CLASS && !instanceof_function(implementor, date_ce_date TSRMLS_CC) && !instanceof_function(implementor, date_ce_immutable TSRMLS_CC) ) { zend_error(E_ERROR, "DateTimeInterface can't be implemented by user classes"); } return SUCCESS; } static void date_register_classes(TSRMLS_D) { zend_class_entry ce_date, ce_immutable, ce_timezone, ce_interval, ce_period, ce_interface; INIT_CLASS_ENTRY(ce_interface, "DateTimeInterface", date_funcs_interface); date_ce_interface = zend_register_internal_interface(&ce_interface TSRMLS_CC); date_ce_interface->interface_gets_implemented = implement_date_interface_handler; INIT_CLASS_ENTRY(ce_date, "DateTime", date_funcs_date); ce_date.create_object = date_object_new_date; date_ce_date = zend_register_internal_class_ex(&ce_date, NULL, NULL TSRMLS_CC); memcpy(&date_object_handlers_date, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); date_object_handlers_date.clone_obj = date_object_clone_date; date_object_handlers_date.compare_objects = date_object_compare_date; date_object_handlers_date.get_properties = date_object_get_properties; date_object_handlers_date.get_gc = date_object_get_gc; zend_class_implements(date_ce_date TSRMLS_CC, 1, date_ce_interface); #define REGISTER_DATE_CLASS_CONST_STRING(const_name, value) \ zend_declare_class_constant_stringl(date_ce_date, const_name, sizeof(const_name)-1, value, sizeof(value)-1 TSRMLS_CC); REGISTER_DATE_CLASS_CONST_STRING("ATOM", DATE_FORMAT_RFC3339); REGISTER_DATE_CLASS_CONST_STRING("COOKIE", DATE_FORMAT_COOKIE); REGISTER_DATE_CLASS_CONST_STRING("ISO8601", DATE_FORMAT_ISO8601); REGISTER_DATE_CLASS_CONST_STRING("RFC822", DATE_FORMAT_RFC822); REGISTER_DATE_CLASS_CONST_STRING("RFC850", DATE_FORMAT_RFC850); REGISTER_DATE_CLASS_CONST_STRING("RFC1036", DATE_FORMAT_RFC1036); REGISTER_DATE_CLASS_CONST_STRING("RFC1123", DATE_FORMAT_RFC1123); REGISTER_DATE_CLASS_CONST_STRING("RFC2822", DATE_FORMAT_RFC2822); REGISTER_DATE_CLASS_CONST_STRING("RFC3339", DATE_FORMAT_RFC3339); REGISTER_DATE_CLASS_CONST_STRING("RSS", DATE_FORMAT_RFC1123); REGISTER_DATE_CLASS_CONST_STRING("W3C", DATE_FORMAT_RFC3339); INIT_CLASS_ENTRY(ce_immutable, "DateTimeImmutable", date_funcs_immutable); ce_immutable.create_object = date_object_new_date; date_ce_immutable = zend_register_internal_class_ex(&ce_immutable, NULL, NULL TSRMLS_CC); memcpy(&date_object_handlers_immutable, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); date_object_handlers_immutable.clone_obj = date_object_clone_date; date_object_handlers_immutable.compare_objects = date_object_compare_date; date_object_handlers_immutable.get_properties = date_object_get_properties; date_object_handlers_immutable.get_gc = date_object_get_gc; zend_class_implements(date_ce_immutable TSRMLS_CC, 1, date_ce_interface); INIT_CLASS_ENTRY(ce_timezone, "DateTimeZone", date_funcs_timezone); ce_timezone.create_object = date_object_new_timezone; date_ce_timezone = zend_register_internal_class_ex(&ce_timezone, NULL, NULL TSRMLS_CC); memcpy(&date_object_handlers_timezone, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); date_object_handlers_timezone.clone_obj = date_object_clone_timezone; date_object_handlers_timezone.get_properties = date_object_get_properties_timezone; date_object_handlers_timezone.get_gc = date_object_get_gc_timezone; #define REGISTER_TIMEZONE_CLASS_CONST_STRING(const_name, value) \ zend_declare_class_constant_long(date_ce_timezone, const_name, sizeof(const_name)-1, value TSRMLS_CC); REGISTER_TIMEZONE_CLASS_CONST_STRING("AFRICA", PHP_DATE_TIMEZONE_GROUP_AFRICA); REGISTER_TIMEZONE_CLASS_CONST_STRING("AMERICA", PHP_DATE_TIMEZONE_GROUP_AMERICA); REGISTER_TIMEZONE_CLASS_CONST_STRING("ANTARCTICA", PHP_DATE_TIMEZONE_GROUP_ANTARCTICA); REGISTER_TIMEZONE_CLASS_CONST_STRING("ARCTIC", PHP_DATE_TIMEZONE_GROUP_ARCTIC); REGISTER_TIMEZONE_CLASS_CONST_STRING("ASIA", PHP_DATE_TIMEZONE_GROUP_ASIA); REGISTER_TIMEZONE_CLASS_CONST_STRING("ATLANTIC", PHP_DATE_TIMEZONE_GROUP_ATLANTIC); REGISTER_TIMEZONE_CLASS_CONST_STRING("AUSTRALIA", PHP_DATE_TIMEZONE_GROUP_AUSTRALIA); REGISTER_TIMEZONE_CLASS_CONST_STRING("EUROPE", PHP_DATE_TIMEZONE_GROUP_EUROPE); REGISTER_TIMEZONE_CLASS_CONST_STRING("INDIAN", PHP_DATE_TIMEZONE_GROUP_INDIAN); REGISTER_TIMEZONE_CLASS_CONST_STRING("PACIFIC", PHP_DATE_TIMEZONE_GROUP_PACIFIC); REGISTER_TIMEZONE_CLASS_CONST_STRING("UTC", PHP_DATE_TIMEZONE_GROUP_UTC); REGISTER_TIMEZONE_CLASS_CONST_STRING("ALL", PHP_DATE_TIMEZONE_GROUP_ALL); REGISTER_TIMEZONE_CLASS_CONST_STRING("ALL_WITH_BC", PHP_DATE_TIMEZONE_GROUP_ALL_W_BC); REGISTER_TIMEZONE_CLASS_CONST_STRING("PER_COUNTRY", PHP_DATE_TIMEZONE_PER_COUNTRY); INIT_CLASS_ENTRY(ce_interval, "DateInterval", date_funcs_interval); ce_interval.create_object = date_object_new_interval; date_ce_interval = zend_register_internal_class_ex(&ce_interval, NULL, NULL TSRMLS_CC); memcpy(&date_object_handlers_interval, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); date_object_handlers_interval.clone_obj = date_object_clone_interval; date_object_handlers_interval.read_property = date_interval_read_property; date_object_handlers_interval.write_property = date_interval_write_property; date_object_handlers_interval.get_properties = date_object_get_properties_interval; date_object_handlers_interval.get_property_ptr_ptr = NULL; date_object_handlers_interval.get_gc = date_object_get_gc_interval; INIT_CLASS_ENTRY(ce_period, "DatePeriod", date_funcs_period); ce_period.create_object = date_object_new_period; date_ce_period = zend_register_internal_class_ex(&ce_period, NULL, NULL TSRMLS_CC); date_ce_period->get_iterator = date_object_period_get_iterator; date_ce_period->iterator_funcs.funcs = &date_period_it_funcs; zend_class_implements(date_ce_period TSRMLS_CC, 1, zend_ce_traversable); memcpy(&date_object_handlers_period, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); date_object_handlers_period.clone_obj = date_object_clone_period; date_object_handlers_period.get_properties = date_object_get_properties_period; date_object_handlers_period.get_property_ptr_ptr = NULL; date_object_handlers_period.get_gc = date_object_get_gc_period; date_object_handlers_period.read_property = date_period_read_property; date_object_handlers_period.write_property = date_period_write_property; #define REGISTER_PERIOD_CLASS_CONST_STRING(const_name, value) \ zend_declare_class_constant_long(date_ce_period, const_name, sizeof(const_name)-1, value TSRMLS_CC); REGISTER_PERIOD_CLASS_CONST_STRING("EXCLUDE_START_DATE", PHP_DATE_PERIOD_EXCLUDE_START_DATE); } static inline zend_object_value date_object_new_date_ex(zend_class_entry *class_type, php_date_obj **ptr TSRMLS_DC) { php_date_obj *intern; zend_object_value retval; intern = emalloc(sizeof(php_date_obj)); memset(intern, 0, sizeof(php_date_obj)); if (ptr) { *ptr = intern; } zend_object_std_init(&intern->std, class_type TSRMLS_CC); object_properties_init(&intern->std, class_type); retval.handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t) date_object_free_storage_date, NULL TSRMLS_CC); retval.handlers = &date_object_handlers_date; return retval; } static zend_object_value date_object_new_date(zend_class_entry *class_type TSRMLS_DC) { return date_object_new_date_ex(class_type, NULL TSRMLS_CC); } static zend_object_value date_object_clone_date(zval *this_ptr TSRMLS_DC) { php_date_obj *new_obj = NULL; php_date_obj *old_obj = (php_date_obj *) zend_object_store_get_object(this_ptr TSRMLS_CC); zend_object_value new_ov = date_object_new_date_ex(old_obj->std.ce, &new_obj TSRMLS_CC); zend_objects_clone_members(&new_obj->std, new_ov, &old_obj->std, Z_OBJ_HANDLE_P(this_ptr) TSRMLS_CC); if (!old_obj->time) { return new_ov; } /* this should probably moved to a new `timelib_time *timelime_time_clone(timelib_time *)` */ new_obj->time = timelib_time_ctor(); *new_obj->time = *old_obj->time; if (old_obj->time->tz_abbr) { new_obj->time->tz_abbr = strdup(old_obj->time->tz_abbr); } if (old_obj->time->tz_info) { new_obj->time->tz_info = old_obj->time->tz_info; } return new_ov; } static zval* date_clone_immutable(zval *object TSRMLS_DC) { zval *new_object; ALLOC_ZVAL(new_object); Z_OBJVAL_P(new_object) = date_object_clone_date(object TSRMLS_CC); Z_SET_REFCOUNT_P(new_object, 1); Z_SET_ISREF_P(new_object); Z_TYPE_P(new_object) = IS_OBJECT; return new_object; } static int date_object_compare_date(zval *d1, zval *d2 TSRMLS_DC) { php_date_obj *o1 = zend_object_store_get_object(d1 TSRMLS_CC); php_date_obj *o2 = zend_object_store_get_object(d2 TSRMLS_CC); if (!o1->time || !o2->time) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Trying to compare an incomplete DateTime or DateTimeImmutable object"); return 1; } if (!o1->time->sse_uptodate) { timelib_update_ts(o1->time, o1->time->tz_info); } if (!o2->time->sse_uptodate) { timelib_update_ts(o2->time, o2->time->tz_info); } return timelib_time_compare(o1->time, o2->time); } static HashTable *date_object_get_gc(zval *object, zval ***table, int *n TSRMLS_DC) { *table = NULL; *n = 0; return zend_std_get_properties(object TSRMLS_CC); } static HashTable *date_object_get_gc_timezone(zval *object, zval ***table, int *n TSRMLS_DC) { *table = NULL; *n = 0; return zend_std_get_properties(object TSRMLS_CC); } static HashTable *date_object_get_properties(zval *object TSRMLS_DC) { HashTable *props; zval *zv; php_date_obj *dateobj; dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); props = zend_std_get_properties(object TSRMLS_CC); if (!dateobj->time) { return props; } /* first we add the date and time in ISO format */ MAKE_STD_ZVAL(zv); ZVAL_STRING(zv, date_format("Y-m-d H:i:s.u", 14, dateobj->time, 1), 0); zend_hash_update(props, "date", 5, &zv, sizeof(zv), NULL); /* then we add the timezone name (or similar) */ if (dateobj->time->is_localtime) { MAKE_STD_ZVAL(zv); ZVAL_LONG(zv, dateobj->time->zone_type); zend_hash_update(props, "timezone_type", 14, &zv, sizeof(zv), NULL); MAKE_STD_ZVAL(zv); switch (dateobj->time->zone_type) { case TIMELIB_ZONETYPE_ID: ZVAL_STRING(zv, dateobj->time->tz_info->name, 1); break; case TIMELIB_ZONETYPE_OFFSET: { char *tmpstr = emalloc(sizeof("UTC+05:00")); timelib_sll utc_offset = dateobj->time->z; snprintf(tmpstr, sizeof("+05:00"), "%c%02d:%02d", utc_offset > 0 ? '-' : '+', abs(utc_offset / 60), abs((utc_offset % 60))); ZVAL_STRING(zv, tmpstr, 0); } break; case TIMELIB_ZONETYPE_ABBR: ZVAL_STRING(zv, dateobj->time->tz_abbr, 1); break; } zend_hash_update(props, "timezone", 9, &zv, sizeof(zv), NULL); } return props; } static inline zend_object_value date_object_new_timezone_ex(zend_class_entry *class_type, php_timezone_obj **ptr TSRMLS_DC) { php_timezone_obj *intern; zend_object_value retval; intern = emalloc(sizeof(php_timezone_obj)); memset(intern, 0, sizeof(php_timezone_obj)); if (ptr) { *ptr = intern; } zend_object_std_init(&intern->std, class_type TSRMLS_CC); object_properties_init(&intern->std, class_type); retval.handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t) date_object_free_storage_timezone, NULL TSRMLS_CC); retval.handlers = &date_object_handlers_timezone; return retval; } static zend_object_value date_object_new_timezone(zend_class_entry *class_type TSRMLS_DC) { return date_object_new_timezone_ex(class_type, NULL TSRMLS_CC); } static zend_object_value date_object_clone_timezone(zval *this_ptr TSRMLS_DC) { php_timezone_obj *new_obj = NULL; php_timezone_obj *old_obj = (php_timezone_obj *) zend_object_store_get_object(this_ptr TSRMLS_CC); zend_object_value new_ov = date_object_new_timezone_ex(old_obj->std.ce, &new_obj TSRMLS_CC); zend_objects_clone_members(&new_obj->std, new_ov, &old_obj->std, Z_OBJ_HANDLE_P(this_ptr) TSRMLS_CC); if (!old_obj->initialized) { return new_ov; } new_obj->type = old_obj->type; new_obj->initialized = 1; switch (new_obj->type) { case TIMELIB_ZONETYPE_ID: new_obj->tzi.tz = old_obj->tzi.tz; break; case TIMELIB_ZONETYPE_OFFSET: new_obj->tzi.utc_offset = old_obj->tzi.utc_offset; break; case TIMELIB_ZONETYPE_ABBR: new_obj->tzi.z.utc_offset = old_obj->tzi.z.utc_offset; new_obj->tzi.z.dst = old_obj->tzi.z.dst; new_obj->tzi.z.abbr = strdup(old_obj->tzi.z.abbr); break; } return new_ov; } static HashTable *date_object_get_properties_timezone(zval *object TSRMLS_DC) { HashTable *props; zval *zv; php_timezone_obj *tzobj; tzobj = (php_timezone_obj *) zend_object_store_get_object(object TSRMLS_CC); props = zend_std_get_properties(object TSRMLS_CC); if (!tzobj->initialized) { return props; } MAKE_STD_ZVAL(zv); ZVAL_LONG(zv, tzobj->type); zend_hash_update(props, "timezone_type", 14, &zv, sizeof(zv), NULL); MAKE_STD_ZVAL(zv); switch (tzobj->type) { case TIMELIB_ZONETYPE_ID: ZVAL_STRING(zv, tzobj->tzi.tz->name, 1); break; case TIMELIB_ZONETYPE_OFFSET: { char *tmpstr = emalloc(sizeof("UTC+05:00")); snprintf(tmpstr, sizeof("+05:00"), "%c%02d:%02d", tzobj->tzi.utc_offset > 0 ? '-' : '+', abs(tzobj->tzi.utc_offset / 60), abs((tzobj->tzi.utc_offset % 60))); ZVAL_STRING(zv, tmpstr, 0); } break; case TIMELIB_ZONETYPE_ABBR: ZVAL_STRING(zv, tzobj->tzi.z.abbr, 1); break; } zend_hash_update(props, "timezone", 9, &zv, sizeof(zv), NULL); return props; } static inline zend_object_value date_object_new_interval_ex(zend_class_entry *class_type, php_interval_obj **ptr TSRMLS_DC) { php_interval_obj *intern; zend_object_value retval; intern = emalloc(sizeof(php_interval_obj)); memset(intern, 0, sizeof(php_interval_obj)); if (ptr) { *ptr = intern; } zend_object_std_init(&intern->std, class_type TSRMLS_CC); object_properties_init(&intern->std, class_type); retval.handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t) date_object_free_storage_interval, NULL TSRMLS_CC); retval.handlers = &date_object_handlers_interval; return retval; } static zend_object_value date_object_new_interval(zend_class_entry *class_type TSRMLS_DC) { return date_object_new_interval_ex(class_type, NULL TSRMLS_CC); } static zend_object_value date_object_clone_interval(zval *this_ptr TSRMLS_DC) { php_interval_obj *new_obj = NULL; php_interval_obj *old_obj = (php_interval_obj *) zend_object_store_get_object(this_ptr TSRMLS_CC); zend_object_value new_ov = date_object_new_interval_ex(old_obj->std.ce, &new_obj TSRMLS_CC); zend_objects_clone_members(&new_obj->std, new_ov, &old_obj->std, Z_OBJ_HANDLE_P(this_ptr) TSRMLS_CC); /** FIX ME ADD CLONE STUFF **/ return new_ov; } static HashTable *date_object_get_gc_interval(zval *object, zval ***table, int *n TSRMLS_DC) { *table = NULL; *n = 0; return zend_std_get_properties(object TSRMLS_CC); } static HashTable *date_object_get_properties_interval(zval *object TSRMLS_DC) { HashTable *props; zval *zv; php_interval_obj *intervalobj; intervalobj = (php_interval_obj *) zend_object_store_get_object(object TSRMLS_CC); props = zend_std_get_properties(object TSRMLS_CC); if (!intervalobj->initialized) { return props; } #define PHP_DATE_INTERVAL_ADD_PROPERTY(n,f) \ MAKE_STD_ZVAL(zv); \ ZVAL_LONG(zv, (long)intervalobj->diff->f); \ zend_hash_update(props, n, strlen(n) + 1, &zv, sizeof(zv), NULL); PHP_DATE_INTERVAL_ADD_PROPERTY("y", y); PHP_DATE_INTERVAL_ADD_PROPERTY("m", m); PHP_DATE_INTERVAL_ADD_PROPERTY("d", d); PHP_DATE_INTERVAL_ADD_PROPERTY("h", h); PHP_DATE_INTERVAL_ADD_PROPERTY("i", i); PHP_DATE_INTERVAL_ADD_PROPERTY("s", s); PHP_DATE_INTERVAL_ADD_PROPERTY("weekday", weekday); PHP_DATE_INTERVAL_ADD_PROPERTY("weekday_behavior", weekday_behavior); PHP_DATE_INTERVAL_ADD_PROPERTY("first_last_day_of", first_last_day_of); PHP_DATE_INTERVAL_ADD_PROPERTY("invert", invert); if (intervalobj->diff->days != -99999) { PHP_DATE_INTERVAL_ADD_PROPERTY("days", days); } else { MAKE_STD_ZVAL(zv); ZVAL_FALSE(zv); zend_hash_update(props, "days", 5, &zv, sizeof(zv), NULL); } PHP_DATE_INTERVAL_ADD_PROPERTY("special_type", special.type); PHP_DATE_INTERVAL_ADD_PROPERTY("special_amount", special.amount); PHP_DATE_INTERVAL_ADD_PROPERTY("have_weekday_relative", have_weekday_relative); PHP_DATE_INTERVAL_ADD_PROPERTY("have_special_relative", have_special_relative); return props; } static inline zend_object_value date_object_new_period_ex(zend_class_entry *class_type, php_period_obj **ptr TSRMLS_DC) { php_period_obj *intern; zend_object_value retval; intern = emalloc(sizeof(php_period_obj)); memset(intern, 0, sizeof(php_period_obj)); if (ptr) { *ptr = intern; } zend_object_std_init(&intern->std, class_type TSRMLS_CC); object_properties_init(&intern->std, class_type); retval.handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t) date_object_free_storage_period, NULL TSRMLS_CC); retval.handlers = &date_object_handlers_period; return retval; } static zend_object_value date_object_new_period(zend_class_entry *class_type TSRMLS_DC) { return date_object_new_period_ex(class_type, NULL TSRMLS_CC); } static zend_object_value date_object_clone_period(zval *this_ptr TSRMLS_DC) { php_period_obj *new_obj = NULL; php_period_obj *old_obj = (php_period_obj *) zend_object_store_get_object(this_ptr TSRMLS_CC); zend_object_value new_ov = date_object_new_period_ex(old_obj->std.ce, &new_obj TSRMLS_CC); zend_objects_clone_members(&new_obj->std, new_ov, &old_obj->std, Z_OBJ_HANDLE_P(this_ptr) TSRMLS_CC); /** FIX ME ADD CLONE STUFF **/ return new_ov; } static void date_object_free_storage_date(void *object TSRMLS_DC) { php_date_obj *intern = (php_date_obj *)object; if (intern->time) { timelib_time_dtor(intern->time); } zend_object_std_dtor(&intern->std TSRMLS_CC); efree(object); } static void date_object_free_storage_timezone(void *object TSRMLS_DC) { php_timezone_obj *intern = (php_timezone_obj *)object; if (intern->type == TIMELIB_ZONETYPE_ABBR) { free(intern->tzi.z.abbr); } zend_object_std_dtor(&intern->std TSRMLS_CC); efree(object); } static void date_object_free_storage_interval(void *object TSRMLS_DC) { php_interval_obj *intern = (php_interval_obj *)object; timelib_rel_time_dtor(intern->diff); zend_object_std_dtor(&intern->std TSRMLS_CC); efree(object); } static void date_object_free_storage_period(void *object TSRMLS_DC) { php_period_obj *intern = (php_period_obj *)object; if (intern->start) { timelib_time_dtor(intern->start); } if (intern->current) { timelib_time_dtor(intern->current); } if (intern->end) { timelib_time_dtor(intern->end); } timelib_rel_time_dtor(intern->interval); zend_object_std_dtor(&intern->std TSRMLS_CC); efree(object); } /* Advanced Interface */ PHPAPI zval *php_date_instantiate(zend_class_entry *pce, zval *object TSRMLS_DC) { object_init_ex(object, pce); return object; } /* Helper function used to store the latest found warnings and errors while * parsing, from either strtotime or parse_from_format. */ static void update_errors_warnings(timelib_error_container *last_errors TSRMLS_DC) { if (DATEG(last_errors)) { timelib_error_container_dtor(DATEG(last_errors)); DATEG(last_errors) = NULL; } DATEG(last_errors) = last_errors; } PHPAPI int php_date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, int time_str_len, char *format, zval *timezone_object, int ctor TSRMLS_DC) { timelib_time *now; timelib_tzinfo *tzi = NULL; timelib_error_container *err = NULL; int type = TIMELIB_ZONETYPE_ID, new_dst = 0; char *new_abbr = NULL; timelib_sll new_offset; if (dateobj->time) { timelib_time_dtor(dateobj->time); } if (format) { dateobj->time = timelib_parse_from_format(format, time_str_len ? time_str : "", time_str_len ? time_str_len : 0, &err, DATE_TIMEZONEDB, php_date_parse_tzfile_wrapper); } else { dateobj->time = timelib_strtotime(time_str_len ? time_str : "now", time_str_len ? time_str_len : sizeof("now") -1, &err, DATE_TIMEZONEDB, php_date_parse_tzfile_wrapper); } /* update last errors and warnings */ update_errors_warnings(err TSRMLS_CC); if (ctor && err && err->error_count) { /* spit out the first library error message, at least */ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to parse time string (%s) at position %d (%c): %s", time_str, err->error_messages[0].position, err->error_messages[0].character, err->error_messages[0].message); } if (err && err->error_count) { timelib_time_dtor(dateobj->time); dateobj->time = 0; return 0; } if (timezone_object) { php_timezone_obj *tzobj; tzobj = (php_timezone_obj *) zend_object_store_get_object(timezone_object TSRMLS_CC); switch (tzobj->type) { case TIMELIB_ZONETYPE_ID: tzi = tzobj->tzi.tz; break; case TIMELIB_ZONETYPE_OFFSET: new_offset = tzobj->tzi.utc_offset; break; case TIMELIB_ZONETYPE_ABBR: new_offset = tzobj->tzi.z.utc_offset; new_dst = tzobj->tzi.z.dst; new_abbr = strdup(tzobj->tzi.z.abbr); break; } type = tzobj->type; } else if (dateobj->time->tz_info) { tzi = dateobj->time->tz_info; } else { tzi = get_timezone_info(TSRMLS_C); } now = timelib_time_ctor(); now->zone_type = type; switch (type) { case TIMELIB_ZONETYPE_ID: now->tz_info = tzi; break; case TIMELIB_ZONETYPE_OFFSET: now->z = new_offset; break; case TIMELIB_ZONETYPE_ABBR: now->z = new_offset; now->dst = new_dst; now->tz_abbr = new_abbr; break; } timelib_unixtime2local(now, (timelib_sll) time(NULL)); timelib_fill_holes(dateobj->time, now, TIMELIB_NO_CLONE); timelib_update_ts(dateobj->time, tzi); timelib_update_from_sse(dateobj->time); dateobj->time->have_relative = 0; timelib_time_dtor(now); return 1; } /* {{{ proto DateTime date_create([string time[, DateTimeZone object]]) Returns new DateTime object */ PHP_FUNCTION(date_create) { zval *timezone_object = NULL; char *time_str = NULL; int time_str_len = 0; zval datetime_object; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sO!", &time_str, &time_str_len, &timezone_object, date_ce_timezone) == FAILURE) { RETURN_FALSE; } php_date_instantiate(date_ce_date, &datetime_object TSRMLS_CC); if (!php_date_initialize(zend_object_store_get_object(&datetime_object TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 0 TSRMLS_CC)) { zval_dtor(&datetime_object); RETURN_FALSE; } RETVAL_ZVAL(&datetime_object, 0, 0); } /* }}} */ /* {{{ proto DateTime date_create_immutable([string time[, DateTimeZone object]]) Returns new DateTime object */ PHP_FUNCTION(date_create_immutable) { zval *timezone_object = NULL; char *time_str = NULL; int time_str_len = 0; zval datetime_object; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sO!", &time_str, &time_str_len, &timezone_object, date_ce_timezone) == FAILURE) { RETURN_FALSE; } php_date_instantiate(date_ce_immutable, &datetime_object TSRMLS_CC); if (!php_date_initialize(zend_object_store_get_object(&datetime_object TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 0 TSRMLS_CC)) { zval_dtor(&datetime_object); RETURN_FALSE; } RETVAL_ZVAL(&datetime_object, 0, 0); } /* }}} */ /* {{{ proto DateTime date_create_from_format(string format, string time[, DateTimeZone object]) Returns new DateTime object formatted according to the specified format */ PHP_FUNCTION(date_create_from_format) { zval *timezone_object = NULL; char *time_str = NULL, *format_str = NULL; int time_str_len = 0, format_str_len = 0; zval datetime_object; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|O", &format_str, &format_str_len, &time_str, &time_str_len, &timezone_object, date_ce_timezone) == FAILURE) { RETURN_FALSE; } php_date_instantiate(date_ce_date, &datetime_object TSRMLS_CC); if (!php_date_initialize(zend_object_store_get_object(&datetime_object TSRMLS_CC), time_str, time_str_len, format_str, timezone_object, 0 TSRMLS_CC)) { zval_dtor(&datetime_object); RETURN_FALSE; } RETVAL_ZVAL(&datetime_object, 0, 0); } /* }}} */ /* {{{ proto DateTime date_create_immutable_from_format(string format, string time[, DateTimeZone object]) Returns new DateTime object formatted according to the specified format */ PHP_FUNCTION(date_create_immutable_from_format) { zval *timezone_object = NULL; char *time_str = NULL, *format_str = NULL; int time_str_len = 0, format_str_len = 0; zval datetime_object; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|O", &format_str, &format_str_len, &time_str, &time_str_len, &timezone_object, date_ce_timezone) == FAILURE) { RETURN_FALSE; } php_date_instantiate(date_ce_immutable, &datetime_object TSRMLS_CC); if (!php_date_initialize(zend_object_store_get_object(&datetime_object TSRMLS_CC), time_str, time_str_len, format_str, timezone_object, 0 TSRMLS_CC)) { zval_dtor(&datetime_object); RETURN_FALSE; } RETVAL_ZVAL(&datetime_object, 0, 0); } /* }}} */ /* {{{ proto DateTime::__construct([string time[, DateTimeZone object]]) Creates new DateTime object */ PHP_METHOD(DateTime, __construct) { zval *timezone_object = NULL; char *time_str = NULL; int time_str_len = 0; zend_error_handling error_handling; zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC); if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sO!", &time_str, &time_str_len, &timezone_object, date_ce_timezone)) { php_date_initialize(zend_object_store_get_object(getThis() TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 1 TSRMLS_CC); } zend_restore_error_handling(&error_handling TSRMLS_CC); } /* }}} */ /* {{{ proto DateTimeImmutable::__construct([string time[, DateTimeZone object]]) Creates new DateTimeImmutable object */ PHP_METHOD(DateTimeImmutable, __construct) { zval *timezone_object = NULL; char *time_str = NULL; int time_str_len = 0; zend_error_handling error_handling; zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC); if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sO!", &time_str, &time_str_len, &timezone_object, date_ce_timezone)) { php_date_initialize(zend_object_store_get_object(getThis() TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 1 TSRMLS_CC); } zend_restore_error_handling(&error_handling TSRMLS_CC); } /* }}} */ /* {{{ proto DateTimeImmutable::createFromMutable(DateTimeZone object) Creates new DateTimeImmutable object from an existing mutable DateTime object. */ PHP_METHOD(DateTimeImmutable, createFromMutable) { zval *datetime_object = NULL; php_date_obj *new_obj = NULL; php_date_obj *old_obj = NULL; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &datetime_object, date_ce_date) == FAILURE) { return; } php_date_instantiate(date_ce_immutable, return_value TSRMLS_CC); old_obj = (php_date_obj *) zend_object_store_get_object(datetime_object TSRMLS_CC); new_obj = (php_date_obj *) zend_object_store_get_object(return_value TSRMLS_CC); new_obj->time = timelib_time_ctor(); *new_obj->time = *old_obj->time; if (old_obj->time->tz_abbr) { new_obj->time->tz_abbr = strdup(old_obj->time->tz_abbr); } if (old_obj->time->tz_info) { new_obj->time->tz_info = old_obj->time->tz_info; } } /* }}} */ static int php_date_initialize_from_hash(php_date_obj **dateobj, HashTable *myht TSRMLS_DC) { zval **z_date = NULL; zval **z_timezone = NULL; zval **z_timezone_type = NULL; zval *tmp_obj = NULL; timelib_tzinfo *tzi; php_timezone_obj *tzobj; if (zend_hash_find(myht, "date", 5, (void**) &z_date) == SUCCESS && Z_TYPE_PP(z_date) == IS_STRING) { if (zend_hash_find(myht, "timezone_type", 14, (void**) &z_timezone_type) == SUCCESS && Z_TYPE_PP(z_timezone_type) == IS_LONG) { if (zend_hash_find(myht, "timezone", 9, (void**) &z_timezone) == SUCCESS && Z_TYPE_PP(z_timezone) == IS_STRING) { switch (Z_LVAL_PP(z_timezone_type)) { case TIMELIB_ZONETYPE_OFFSET: case TIMELIB_ZONETYPE_ABBR: { char *tmp = emalloc(Z_STRLEN_PP(z_date) + Z_STRLEN_PP(z_timezone) + 2); int ret; snprintf(tmp, Z_STRLEN_PP(z_date) + Z_STRLEN_PP(z_timezone) + 2, "%s %s", Z_STRVAL_PP(z_date), Z_STRVAL_PP(z_timezone)); ret = php_date_initialize(*dateobj, tmp, Z_STRLEN_PP(z_date) + Z_STRLEN_PP(z_timezone) + 1, NULL, NULL, 0 TSRMLS_CC); efree(tmp); return 1 == ret; } case TIMELIB_ZONETYPE_ID: { int ret; tzi = php_date_parse_tzfile(Z_STRVAL_PP(z_timezone), DATE_TIMEZONEDB TSRMLS_CC); if (tzi == NULL) { return 0; } ALLOC_INIT_ZVAL(tmp_obj); tzobj = zend_object_store_get_object(php_date_instantiate(date_ce_timezone, tmp_obj TSRMLS_CC) TSRMLS_CC); tzobj->type = TIMELIB_ZONETYPE_ID; tzobj->tzi.tz = tzi; tzobj->initialized = 1; ret = php_date_initialize(*dateobj, Z_STRVAL_PP(z_date), Z_STRLEN_PP(z_date), NULL, tmp_obj, 0 TSRMLS_CC); zval_ptr_dtor(&tmp_obj); return 1 == ret; } } } } } return 0; } /* {{{ proto DateTime::__set_state() */ PHP_METHOD(DateTime, __set_state) { php_date_obj *dateobj; zval *array; HashTable *myht; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &array) == FAILURE) { RETURN_FALSE; } myht = HASH_OF(array); php_date_instantiate(date_ce_date, return_value TSRMLS_CC); dateobj = (php_date_obj *) zend_object_store_get_object(return_value TSRMLS_CC); if (!php_date_initialize_from_hash(&dateobj, myht TSRMLS_CC)) { php_error(E_ERROR, "Invalid serialization data for DateTime object"); } } /* }}} */ /* {{{ proto DateTimeImmutable::__set_state() */ PHP_METHOD(DateTimeImmutable, __set_state) { php_date_obj *dateobj; zval *array; HashTable *myht; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &array) == FAILURE) { RETURN_FALSE; } myht = HASH_OF(array); php_date_instantiate(date_ce_immutable, return_value TSRMLS_CC); dateobj = (php_date_obj *) zend_object_store_get_object(return_value TSRMLS_CC); if (!php_date_initialize_from_hash(&dateobj, myht TSRMLS_CC)) { php_error(E_ERROR, "Invalid serialization data for DateTimeImmutable object"); } } /* }}} */ /* {{{ proto DateTime::__wakeup() */ PHP_METHOD(DateTime, __wakeup) { zval *object = getThis(); php_date_obj *dateobj; HashTable *myht; dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); myht = Z_OBJPROP_P(object); if (!php_date_initialize_from_hash(&dateobj, myht TSRMLS_CC)) { php_error(E_ERROR, "Invalid serialization data for DateTime object"); } } /* }}} */ /* Helper function used to add an associative array of warnings and errors to a zval */ static void zval_from_error_container(zval *z, timelib_error_container *error) { int i; zval *element; add_assoc_long(z, "warning_count", error->warning_count); MAKE_STD_ZVAL(element); array_init(element); for (i = 0; i < error->warning_count; i++) { add_index_string(element, error->warning_messages[i].position, error->warning_messages[i].message, 1); } add_assoc_zval(z, "warnings", element); add_assoc_long(z, "error_count", error->error_count); MAKE_STD_ZVAL(element); array_init(element); for (i = 0; i < error->error_count; i++) { add_index_string(element, error->error_messages[i].position, error->error_messages[i].message, 1); } add_assoc_zval(z, "errors", element); } /* {{{ proto array date_get_last_errors() Returns the warnings and errors found while parsing a date/time string. */ PHP_FUNCTION(date_get_last_errors) { if (DATEG(last_errors)) { array_init(return_value); zval_from_error_container(return_value, DATEG(last_errors)); } else { RETURN_FALSE; } } /* }}} */ void php_date_do_return_parsed_time(INTERNAL_FUNCTION_PARAMETERS, timelib_time *parsed_time, struct timelib_error_container *error) { zval *element; array_init(return_value); #define PHP_DATE_PARSE_DATE_SET_TIME_ELEMENT(name, elem) \ if (parsed_time->elem == -99999) { \ add_assoc_bool(return_value, #name, 0); \ } else { \ add_assoc_long(return_value, #name, parsed_time->elem); \ } PHP_DATE_PARSE_DATE_SET_TIME_ELEMENT(year, y); PHP_DATE_PARSE_DATE_SET_TIME_ELEMENT(month, m); PHP_DATE_PARSE_DATE_SET_TIME_ELEMENT(day, d); PHP_DATE_PARSE_DATE_SET_TIME_ELEMENT(hour, h); PHP_DATE_PARSE_DATE_SET_TIME_ELEMENT(minute, i); PHP_DATE_PARSE_DATE_SET_TIME_ELEMENT(second, s); if (parsed_time->f == -99999) { add_assoc_bool(return_value, "fraction", 0); } else { add_assoc_double(return_value, "fraction", parsed_time->f); } zval_from_error_container(return_value, error); timelib_error_container_dtor(error); add_assoc_bool(return_value, "is_localtime", parsed_time->is_localtime); if (parsed_time->is_localtime) { PHP_DATE_PARSE_DATE_SET_TIME_ELEMENT(zone_type, zone_type); switch (parsed_time->zone_type) { case TIMELIB_ZONETYPE_OFFSET: PHP_DATE_PARSE_DATE_SET_TIME_ELEMENT(zone, z); add_assoc_bool(return_value, "is_dst", parsed_time->dst); break; case TIMELIB_ZONETYPE_ID: if (parsed_time->tz_abbr) { add_assoc_string(return_value, "tz_abbr", parsed_time->tz_abbr, 1); } if (parsed_time->tz_info) { add_assoc_string(return_value, "tz_id", parsed_time->tz_info->name, 1); } break; case TIMELIB_ZONETYPE_ABBR: PHP_DATE_PARSE_DATE_SET_TIME_ELEMENT(zone, z); add_assoc_bool(return_value, "is_dst", parsed_time->dst); add_assoc_string(return_value, "tz_abbr", parsed_time->tz_abbr, 1); break; } } if (parsed_time->have_relative) { MAKE_STD_ZVAL(element); array_init(element); add_assoc_long(element, "year", parsed_time->relative.y); add_assoc_long(element, "month", parsed_time->relative.m); add_assoc_long(element, "day", parsed_time->relative.d); add_assoc_long(element, "hour", parsed_time->relative.h); add_assoc_long(element, "minute", parsed_time->relative.i); add_assoc_long(element, "second", parsed_time->relative.s); if (parsed_time->relative.have_weekday_relative) { add_assoc_long(element, "weekday", parsed_time->relative.weekday); } if (parsed_time->relative.have_special_relative && (parsed_time->relative.special.type == TIMELIB_SPECIAL_WEEKDAY)) { add_assoc_long(element, "weekdays", parsed_time->relative.special.amount); } if (parsed_time->relative.first_last_day_of) { add_assoc_bool(element, parsed_time->relative.first_last_day_of == TIMELIB_SPECIAL_FIRST_DAY_OF_MONTH ? "first_day_of_month" : "last_day_of_month", 1); } add_assoc_zval(return_value, "relative", element); } timelib_time_dtor(parsed_time); } /* {{{ proto array date_parse(string date) Returns associative array with detailed info about given date */ PHP_FUNCTION(date_parse) { char *date; int date_len; struct timelib_error_container *error; timelib_time *parsed_time; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &date, &date_len) == FAILURE) { RETURN_FALSE; } parsed_time = timelib_strtotime(date, date_len, &error, DATE_TIMEZONEDB, php_date_parse_tzfile_wrapper); php_date_do_return_parsed_time(INTERNAL_FUNCTION_PARAM_PASSTHRU, parsed_time, error); } /* }}} */ /* {{{ proto array date_parse_from_format(string format, string date) Returns associative array with detailed info about given date */ PHP_FUNCTION(date_parse_from_format) { char *date, *format; int date_len, format_len; struct timelib_error_container *error; timelib_time *parsed_time; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &format, &format_len, &date, &date_len) == FAILURE) { RETURN_FALSE; } parsed_time = timelib_parse_from_format(format, date, date_len, &error, DATE_TIMEZONEDB, php_date_parse_tzfile_wrapper); php_date_do_return_parsed_time(INTERNAL_FUNCTION_PARAM_PASSTHRU, parsed_time, error); } /* }}} */ /* {{{ proto string date_format(DateTimeInterface object, string format) Returns date formatted according to given format */ PHP_FUNCTION(date_format) { zval *object; php_date_obj *dateobj; char *format; int format_len; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &object, date_ce_interface, &format, &format_len) == FAILURE) { RETURN_FALSE; } dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); RETURN_STRING(date_format(format, format_len, dateobj->time, dateobj->time->is_localtime), 0); } /* }}} */ static int php_date_modify(zval *object, char *modify, int modify_len TSRMLS_DC) { php_date_obj *dateobj; timelib_time *tmp_time; timelib_error_container *err = NULL; dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); if (!(dateobj->time)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "The DateTime object has not been correctly initialized by its constructor"); return 0; } tmp_time = timelib_strtotime(modify, modify_len, &err, DATE_TIMEZONEDB, php_date_parse_tzfile_wrapper); /* update last errors and warnings */ update_errors_warnings(err TSRMLS_CC); if (err && err->error_count) { /* spit out the first library error message, at least */ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to parse time string (%s) at position %d (%c): %s", modify, err->error_messages[0].position, err->error_messages[0].character, err->error_messages[0].message); timelib_time_dtor(tmp_time); return 0; } memcpy(&dateobj->time->relative, &tmp_time->relative, sizeof(struct timelib_rel_time)); dateobj->time->have_relative = tmp_time->have_relative; dateobj->time->sse_uptodate = 0; if (tmp_time->y != -99999) { dateobj->time->y = tmp_time->y; } if (tmp_time->m != -99999) { dateobj->time->m = tmp_time->m; } if (tmp_time->d != -99999) { dateobj->time->d = tmp_time->d; } if (tmp_time->h != -99999) { dateobj->time->h = tmp_time->h; if (tmp_time->i != -99999) { dateobj->time->i = tmp_time->i; if (tmp_time->s != -99999) { dateobj->time->s = tmp_time->s; } else { dateobj->time->s = 0; } } else { dateobj->time->i = 0; dateobj->time->s = 0; } } timelib_time_dtor(tmp_time); timelib_update_ts(dateobj->time, NULL); timelib_update_from_sse(dateobj->time); dateobj->time->have_relative = 0; memset(&dateobj->time->relative, 0, sizeof(dateobj->time->relative)); return 1; } /* {{{ proto DateTime date_modify(DateTime object, string modify) Alters the timestamp. */ PHP_FUNCTION(date_modify) { zval *object; char *modify; int modify_len; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &object, date_ce_date, &modify, &modify_len) == FAILURE) { RETURN_FALSE; } if (php_date_modify(object, modify, modify_len TSRMLS_CC)) { RETURN_ZVAL(object, 1, 0); } RETURN_FALSE; } /* }}} */ /* {{{ proto DateTimeImmutable::modify() */ PHP_METHOD(DateTimeImmutable, modify) { zval *object, *new_object; char *modify; int modify_len; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &object, date_ce_immutable, &modify, &modify_len) == FAILURE) { RETURN_FALSE; } new_object = date_clone_immutable(object TSRMLS_CC); if (php_date_modify(new_object, modify, modify_len TSRMLS_CC)) { RETURN_ZVAL(new_object, 0, 1); } RETURN_FALSE; } /* }}} */ static void php_date_add(zval *object, zval *interval, zval *return_value TSRMLS_DC) { php_date_obj *dateobj; php_interval_obj *intobj; timelib_time *new_time; dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); intobj = (php_interval_obj *) zend_object_store_get_object(interval TSRMLS_CC); DATE_CHECK_INITIALIZED(intobj->initialized, DateInterval); new_time = timelib_add(dateobj->time, intobj->diff); timelib_time_dtor(dateobj->time); dateobj->time = new_time; } /* {{{ proto DateTime date_add(DateTime object, DateInterval interval) Adds an interval to the current date in object. */ PHP_FUNCTION(date_add) { zval *object, *interval; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &object, date_ce_date, &interval, date_ce_interval) == FAILURE) { RETURN_FALSE; } php_date_add(object, interval, return_value TSRMLS_CC); RETURN_ZVAL(object, 1, 0); } /* }}} */ /* {{{ proto DateTimeImmutable::add() */ PHP_METHOD(DateTimeImmutable, add) { zval *object, *interval, *new_object; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &object, date_ce_immutable, &interval, date_ce_interval) == FAILURE) { RETURN_FALSE; } new_object = date_clone_immutable(object TSRMLS_CC); php_date_add(new_object, interval, return_value TSRMLS_CC); RETURN_ZVAL(new_object, 0, 1); } /* }}} */ static void php_date_sub(zval *object, zval *interval, zval *return_value TSRMLS_DC) { php_date_obj *dateobj; php_interval_obj *intobj; timelib_time *new_time; dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); intobj = (php_interval_obj *) zend_object_store_get_object(interval TSRMLS_CC); DATE_CHECK_INITIALIZED(intobj->initialized, DateInterval); if (intobj->diff->have_special_relative) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Only non-special relative time specifications are supported for subtraction"); return; } new_time = timelib_sub(dateobj->time, intobj->diff); timelib_time_dtor(dateobj->time); dateobj->time = new_time; } /* {{{ proto DateTime date_sub(DateTime object, DateInterval interval) Subtracts an interval to the current date in object. */ PHP_FUNCTION(date_sub) { zval *object, *interval; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &object, date_ce_date, &interval, date_ce_interval) == FAILURE) { RETURN_FALSE; } php_date_sub(object, interval, return_value TSRMLS_CC); RETURN_ZVAL(object, 1, 0); } /* }}} */ /* {{{ proto DateTimeImmutable::sub() */ PHP_METHOD(DateTimeImmutable, sub) { zval *object, *interval, *new_object; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &object, date_ce_immutable, &interval, date_ce_interval) == FAILURE) { RETURN_FALSE; } new_object = date_clone_immutable(object TSRMLS_CC); php_date_sub(new_object, interval, return_value TSRMLS_CC); RETURN_ZVAL(new_object, 0, 1); } /* }}} */ static void set_timezone_from_timelib_time(php_timezone_obj *tzobj, timelib_time *t) { tzobj->initialized = 1; tzobj->type = t->zone_type; switch (t->zone_type) { case TIMELIB_ZONETYPE_ID: tzobj->tzi.tz = t->tz_info; break; case TIMELIB_ZONETYPE_OFFSET: tzobj->tzi.utc_offset = t->z; break; case TIMELIB_ZONETYPE_ABBR: tzobj->tzi.z.utc_offset = t->z; tzobj->tzi.z.dst = t->dst; tzobj->tzi.z.abbr = strdup(t->tz_abbr); break; } } /* {{{ proto DateTimeZone date_timezone_get(DateTimeInterface object) Return new DateTimeZone object relative to give DateTime */ PHP_FUNCTION(date_timezone_get) { zval *object; php_date_obj *dateobj; php_timezone_obj *tzobj; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object, date_ce_interface) == FAILURE) { RETURN_FALSE; } dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); if (dateobj->time->is_localtime/* && dateobj->time->tz_info*/) { php_date_instantiate(date_ce_timezone, return_value TSRMLS_CC); tzobj = (php_timezone_obj *) zend_object_store_get_object(return_value TSRMLS_CC); set_timezone_from_timelib_time(tzobj, dateobj->time); } else { RETURN_FALSE; } } /* }}} */ static void php_date_timezone_set(zval *object, zval *timezone_object, zval *return_value TSRMLS_DC) { php_date_obj *dateobj; php_timezone_obj *tzobj; dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); tzobj = (php_timezone_obj *) zend_object_store_get_object(timezone_object TSRMLS_CC); switch (tzobj->type) { case TIMELIB_ZONETYPE_OFFSET: timelib_set_timezone_from_offset(dateobj->time, tzobj->tzi.utc_offset); break; case TIMELIB_ZONETYPE_ABBR: timelib_set_timezone_from_abbr(dateobj->time, tzobj->tzi.z); break; case TIMELIB_ZONETYPE_ID: timelib_set_timezone(dateobj->time, tzobj->tzi.tz); break; } timelib_unixtime2local(dateobj->time, dateobj->time->sse); } /* {{{ proto DateTime date_timezone_set(DateTime object, DateTimeZone object) Sets the timezone for the DateTime object. */ PHP_FUNCTION(date_timezone_set) { zval *object; zval *timezone_object; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &object, date_ce_date, &timezone_object, date_ce_timezone) == FAILURE) { RETURN_FALSE; } php_date_timezone_set(object, timezone_object, return_value TSRMLS_CC); RETURN_ZVAL(object, 1, 0); } /* }}} */ /* {{{ proto DateTimeImmutable::setTimezone() */ PHP_METHOD(DateTimeImmutable, setTimezone) { zval *object, *new_object; zval *timezone_object; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &object, date_ce_immutable, &timezone_object, date_ce_timezone) == FAILURE) { RETURN_FALSE; } new_object = date_clone_immutable(object TSRMLS_CC); php_date_timezone_set(new_object, timezone_object, return_value TSRMLS_CC); RETURN_ZVAL(new_object, 0, 1); } /* }}} */ /* {{{ proto long date_offset_get(DateTimeInterface object) Returns the DST offset. */ PHP_FUNCTION(date_offset_get) { zval *object; php_date_obj *dateobj; timelib_time_offset *offset; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object, date_ce_interface) == FAILURE) { RETURN_FALSE; } dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); if (dateobj->time->is_localtime/* && dateobj->time->tz_info*/) { switch (dateobj->time->zone_type) { case TIMELIB_ZONETYPE_ID: offset = timelib_get_time_zone_info(dateobj->time->sse, dateobj->time->tz_info); RETVAL_LONG(offset->offset); timelib_time_offset_dtor(offset); break; case TIMELIB_ZONETYPE_OFFSET: RETVAL_LONG(dateobj->time->z * -60); break; case TIMELIB_ZONETYPE_ABBR: RETVAL_LONG((dateobj->time->z - (60 * dateobj->time->dst)) * -60); break; } return; } else { RETURN_LONG(0); } } /* }}} */ static void php_date_time_set(zval *object, long h, long i, long s, zval *return_value TSRMLS_DC) { php_date_obj *dateobj; dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); dateobj->time->h = h; dateobj->time->i = i; dateobj->time->s = s; timelib_update_ts(dateobj->time, NULL); } /* {{{ proto DateTime date_time_set(DateTime object, long hour, long minute[, long second]) Sets the time. */ PHP_FUNCTION(date_time_set) { zval *object; long h, i, s = 0; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oll|l", &object, date_ce_date, &h, &i, &s) == FAILURE) { RETURN_FALSE; } php_date_time_set(object, h, i, s, return_value TSRMLS_CC); RETURN_ZVAL(object, 1, 0); } /* }}} */ /* {{{ proto DateTimeImmutable::setTime() */ PHP_METHOD(DateTimeImmutable, setTime) { zval *object, *new_object; long h, i, s = 0; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oll|l", &object, date_ce_immutable, &h, &i, &s) == FAILURE) { RETURN_FALSE; } new_object = date_clone_immutable(object TSRMLS_CC); php_date_time_set(new_object, h, i, s, return_value TSRMLS_CC); RETURN_ZVAL(new_object, 0, 1); } /* }}} */ static void php_date_date_set(zval *object, long y, long m, long d, zval *return_value TSRMLS_DC) { php_date_obj *dateobj; dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); dateobj->time->y = y; dateobj->time->m = m; dateobj->time->d = d; timelib_update_ts(dateobj->time, NULL); } /* {{{ proto DateTime date_date_set(DateTime object, long year, long month, long day) Sets the date. */ PHP_FUNCTION(date_date_set) { zval *object; long y, m, d; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Olll", &object, date_ce_date, &y, &m, &d) == FAILURE) { RETURN_FALSE; } php_date_date_set(object, y, m, d, return_value TSRMLS_CC); RETURN_ZVAL(object, 1, 0); } /* }}} */ /* {{{ proto DateTimeImmutable::setDate() */ PHP_METHOD(DateTimeImmutable, setDate) { zval *object, *new_object; long y, m, d; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Olll", &object, date_ce_immutable, &y, &m, &d) == FAILURE) { RETURN_FALSE; } new_object = date_clone_immutable(object TSRMLS_CC); php_date_date_set(new_object, y, m, d, return_value TSRMLS_CC); RETURN_ZVAL(new_object, 0, 1); } /* }}} */ static void php_date_isodate_set(zval *object, long y, long w, long d, zval *return_value TSRMLS_DC) { php_date_obj *dateobj; dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); dateobj->time->y = y; dateobj->time->m = 1; dateobj->time->d = 1; memset(&dateobj->time->relative, 0, sizeof(dateobj->time->relative)); dateobj->time->relative.d = timelib_daynr_from_weeknr(y, w, d); dateobj->time->have_relative = 1; timelib_update_ts(dateobj->time, NULL); } /* {{{ proto DateTime date_isodate_set(DateTime object, long year, long week[, long day]) Sets the ISO date. */ PHP_FUNCTION(date_isodate_set) { zval *object; long y, w, d = 1; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oll|l", &object, date_ce_date, &y, &w, &d) == FAILURE) { RETURN_FALSE; } php_date_isodate_set(object, y, w, d, return_value TSRMLS_CC); RETURN_ZVAL(object, 1, 0); } /* }}} */ /* {{{ proto DateTimeImmutable::setISODate() */ PHP_METHOD(DateTimeImmutable, setISODate) { zval *object, *new_object; long y, w, d = 1; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oll|l", &object, date_ce_immutable, &y, &w, &d) == FAILURE) { RETURN_FALSE; } new_object = date_clone_immutable(object TSRMLS_CC); php_date_isodate_set(new_object, y, w, d, return_value TSRMLS_CC); RETURN_ZVAL(new_object, 0, 1); } /* }}} */ static void php_date_timestamp_set(zval *object, long timestamp, zval *return_value TSRMLS_DC) { php_date_obj *dateobj; dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); timelib_unixtime2local(dateobj->time, (timelib_sll)timestamp); timelib_update_ts(dateobj->time, NULL); } /* {{{ proto DateTime date_timestamp_set(DateTime object, long unixTimestamp) Sets the date and time based on an Unix timestamp. */ PHP_FUNCTION(date_timestamp_set) { zval *object; long timestamp; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &object, date_ce_date, ×tamp) == FAILURE) { RETURN_FALSE; } php_date_timestamp_set(object, timestamp, return_value TSRMLS_CC); RETURN_ZVAL(object, 1, 0); } /* }}} */ /* {{{ proto DateTimeImmutable::setTimestamp() */ PHP_METHOD(DateTimeImmutable, setTimestamp) { zval *object, *new_object; long timestamp; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &object, date_ce_immutable, ×tamp) == FAILURE) { RETURN_FALSE; } new_object = date_clone_immutable(object TSRMLS_CC); php_date_timestamp_set(new_object, timestamp, return_value TSRMLS_CC); RETURN_ZVAL(new_object, 0, 1); } /* }}} */ /* {{{ proto long date_timestamp_get(DateTimeInterface object) Gets the Unix timestamp. */ PHP_FUNCTION(date_timestamp_get) { zval *object; php_date_obj *dateobj; long timestamp; int error; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object, date_ce_interface) == FAILURE) { RETURN_FALSE; } dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); timelib_update_ts(dateobj->time, NULL); timestamp = timelib_date_to_int(dateobj->time, &error); if (error) { RETURN_FALSE; } else { RETVAL_LONG(timestamp); } } /* }}} */ /* {{{ proto DateInterval date_diff(DateTime object [, bool absolute]) Returns the difference between two DateTime objects. */ PHP_FUNCTION(date_diff) { zval *object1, *object2; php_date_obj *dateobj1, *dateobj2; php_interval_obj *interval; long absolute = 0; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO|l", &object1, date_ce_interface, &object2, date_ce_interface, &absolute) == FAILURE) { RETURN_FALSE; } dateobj1 = (php_date_obj *) zend_object_store_get_object(object1 TSRMLS_CC); dateobj2 = (php_date_obj *) zend_object_store_get_object(object2 TSRMLS_CC); DATE_CHECK_INITIALIZED(dateobj1->time, DateTimeInterface); DATE_CHECK_INITIALIZED(dateobj2->time, DateTimeInterface); timelib_update_ts(dateobj1->time, NULL); timelib_update_ts(dateobj2->time, NULL); php_date_instantiate(date_ce_interval, return_value TSRMLS_CC); interval = zend_object_store_get_object(return_value TSRMLS_CC); interval->diff = timelib_diff(dateobj1->time, dateobj2->time); if (absolute) { interval->diff->invert = 0; } interval->initialized = 1; } /* }}} */ static int timezone_initialize(php_timezone_obj *tzobj, /*const*/ char *tz, size_t tz_len TSRMLS_DC) { timelib_time *dummy_t = ecalloc(1, sizeof(timelib_time)); int dst, not_found; char *orig_tz = tz; if (strlen(tz) != tz_len) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Timezone must not contain null bytes"); return FAILURE; } dummy_t->z = timelib_parse_zone(&tz, &dst, dummy_t, ¬_found, DATE_TIMEZONEDB, php_date_parse_tzfile_wrapper); if (not_found) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown or bad timezone (%s)", orig_tz); efree(dummy_t); return FAILURE; } else { set_timezone_from_timelib_time(tzobj, dummy_t); free(dummy_t->tz_abbr); efree(dummy_t); return SUCCESS; } } /* {{{ proto DateTimeZone timezone_open(string timezone) Returns new DateTimeZone object */ PHP_FUNCTION(timezone_open) { char *tz; int tz_len; php_timezone_obj *tzobj; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &tz, &tz_len) == FAILURE) { RETURN_FALSE; } tzobj = zend_object_store_get_object(php_date_instantiate(date_ce_timezone, return_value TSRMLS_CC) TSRMLS_CC); if (SUCCESS != timezone_initialize(tzobj, tz, tz_len TSRMLS_CC)) { RETURN_FALSE; } } /* }}} */ /* {{{ proto DateTimeZone::__construct(string timezone) Creates new DateTimeZone object. */ PHP_METHOD(DateTimeZone, __construct) { char *tz; int tz_len; php_timezone_obj *tzobj; zend_error_handling error_handling; zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC); if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &tz, &tz_len)) { tzobj = zend_object_store_get_object(getThis() TSRMLS_CC); if (FAILURE == timezone_initialize(tzobj, tz, tz_len TSRMLS_CC)) { ZVAL_NULL(getThis()); } } zend_restore_error_handling(&error_handling TSRMLS_CC); } /* }}} */ static int php_date_timezone_initialize_from_hash(zval **return_value, php_timezone_obj **tzobj, HashTable *myht TSRMLS_DC) { zval **z_timezone = NULL; zval **z_timezone_type = NULL; if (zend_hash_find(myht, "timezone_type", 14, (void**) &z_timezone_type) == SUCCESS && Z_TYPE_PP(z_timezone_type) == IS_LONG) { if (zend_hash_find(myht, "timezone", 9, (void**) &z_timezone) == SUCCESS && Z_TYPE_PP(z_timezone) == IS_STRING) { if (SUCCESS == timezone_initialize(*tzobj, Z_STRVAL_PP(z_timezone), Z_STRLEN_PP(z_timezone) TSRMLS_CC)) { return SUCCESS; } } } return FAILURE; } /* {{{ proto DateTimeZone::__set_state() * */ PHP_METHOD(DateTimeZone, __set_state) { php_timezone_obj *tzobj; zval *array; HashTable *myht; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &array) == FAILURE) { RETURN_FALSE; } myht = HASH_OF(array); php_date_instantiate(date_ce_timezone, return_value TSRMLS_CC); tzobj = (php_timezone_obj *) zend_object_store_get_object(return_value TSRMLS_CC); if(php_date_timezone_initialize_from_hash(&return_value, &tzobj, myht TSRMLS_CC) != SUCCESS) { php_error_docref(NULL TSRMLS_CC, E_ERROR, "Timezone initialization failed"); } } /* }}} */ /* {{{ proto DateTimeZone::__wakeup() * */ PHP_METHOD(DateTimeZone, __wakeup) { zval *object = getThis(); php_timezone_obj *tzobj; HashTable *myht; tzobj = (php_timezone_obj *) zend_object_store_get_object(object TSRMLS_CC); myht = Z_OBJPROP_P(object); if(php_date_timezone_initialize_from_hash(&return_value, &tzobj, myht TSRMLS_CC) != SUCCESS) { php_error_docref(NULL TSRMLS_CC, E_ERROR, "Timezone initialization failed"); } } /* }}} */ /* {{{ proto string timezone_name_get(DateTimeZone object) Returns the name of the timezone. */ PHP_FUNCTION(timezone_name_get) { zval *object; php_timezone_obj *tzobj; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object, date_ce_timezone) == FAILURE) { RETURN_FALSE; } tzobj = (php_timezone_obj *) zend_object_store_get_object(object TSRMLS_CC); DATE_CHECK_INITIALIZED(tzobj->initialized, DateTimeZone); switch (tzobj->type) { case TIMELIB_ZONETYPE_ID: RETURN_STRING(tzobj->tzi.tz->name, 1); break; case TIMELIB_ZONETYPE_OFFSET: { char *tmpstr = emalloc(sizeof("UTC+05:00")); timelib_sll utc_offset = tzobj->tzi.utc_offset; snprintf(tmpstr, sizeof("+05:00"), "%c%02d:%02d", utc_offset > 0 ? '-' : '+', abs(utc_offset / 60), abs((utc_offset % 60))); RETURN_STRING(tmpstr, 0); } break; case TIMELIB_ZONETYPE_ABBR: RETURN_STRING(tzobj->tzi.z.abbr, 1); break; } } /* }}} */ /* {{{ proto string timezone_name_from_abbr(string abbr[, long gmtOffset[, long isdst]]) Returns the timezone name from abbrevation */ PHP_FUNCTION(timezone_name_from_abbr) { char *abbr; char *tzid; int abbr_len; long gmtoffset = -1; long isdst = -1; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ll", &abbr, &abbr_len, &gmtoffset, &isdst) == FAILURE) { RETURN_FALSE; } tzid = timelib_timezone_id_from_abbr(abbr, gmtoffset, isdst); if (tzid) { RETURN_STRING(tzid, 1); } else { RETURN_FALSE; } } /* }}} */ /* {{{ proto long timezone_offset_get(DateTimeZone object, DateTimeInterface object) Returns the timezone offset. */ PHP_FUNCTION(timezone_offset_get) { zval *object, *dateobject; php_timezone_obj *tzobj; php_date_obj *dateobj; timelib_time_offset *offset; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &object, date_ce_timezone, &dateobject, date_ce_interface) == FAILURE) { RETURN_FALSE; } tzobj = (php_timezone_obj *) zend_object_store_get_object(object TSRMLS_CC); DATE_CHECK_INITIALIZED(tzobj->initialized, DateTimeZone); dateobj = (php_date_obj *) zend_object_store_get_object(dateobject TSRMLS_CC); DATE_CHECK_INITIALIZED(dateobj->time, DateTimeInterface); switch (tzobj->type) { case TIMELIB_ZONETYPE_ID: offset = timelib_get_time_zone_info(dateobj->time->sse, tzobj->tzi.tz); RETVAL_LONG(offset->offset); timelib_time_offset_dtor(offset); break; case TIMELIB_ZONETYPE_OFFSET: RETURN_LONG(tzobj->tzi.utc_offset * -60); break; case TIMELIB_ZONETYPE_ABBR: RETURN_LONG((tzobj->tzi.z.utc_offset - (tzobj->tzi.z.dst*60)) * -60); break; } } /* }}} */ /* {{{ proto array timezone_transitions_get(DateTimeZone object [, long timestamp_begin [, long timestamp_end ]]) Returns numerically indexed array containing associative array for all transitions in the specified range for the timezone. */ PHP_FUNCTION(timezone_transitions_get) { zval *object, *element; php_timezone_obj *tzobj; unsigned int i, begin = 0, found; long timestamp_begin = LONG_MIN, timestamp_end = LONG_MAX; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|ll", &object, date_ce_timezone, ×tamp_begin, ×tamp_end) == FAILURE) { RETURN_FALSE; } tzobj = (php_timezone_obj *) zend_object_store_get_object(object TSRMLS_CC); DATE_CHECK_INITIALIZED(tzobj->initialized, DateTimeZone); if (tzobj->type != TIMELIB_ZONETYPE_ID) { RETURN_FALSE; } #define add_nominal() \ MAKE_STD_ZVAL(element); \ array_init(element); \ add_assoc_long(element, "ts", timestamp_begin); \ add_assoc_string(element, "time", php_format_date(DATE_FORMAT_ISO8601, 13, timestamp_begin, 0 TSRMLS_CC), 0); \ add_assoc_long(element, "offset", tzobj->tzi.tz->type[0].offset); \ add_assoc_bool(element, "isdst", tzobj->tzi.tz->type[0].isdst); \ add_assoc_string(element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[0].abbr_idx], 1); \ add_next_index_zval(return_value, element); #define add(i,ts) \ MAKE_STD_ZVAL(element); \ array_init(element); \ add_assoc_long(element, "ts", ts); \ add_assoc_string(element, "time", php_format_date(DATE_FORMAT_ISO8601, 13, ts, 0 TSRMLS_CC), 0); \ add_assoc_long(element, "offset", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].offset); \ add_assoc_bool(element, "isdst", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].isdst); \ add_assoc_string(element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].abbr_idx], 1); \ add_next_index_zval(return_value, element); #define add_last() add(tzobj->tzi.tz->bit32.timecnt - 1, timestamp_begin) array_init(return_value); if (timestamp_begin == LONG_MIN) { add_nominal(); begin = 0; found = 1; } else { begin = 0; found = 0; if (tzobj->tzi.tz->bit32.timecnt > 0) { do { if (tzobj->tzi.tz->trans[begin] > timestamp_begin) { if (begin > 0) { add(begin - 1, timestamp_begin); } else { add_nominal(); } found = 1; break; } begin++; } while (begin < tzobj->tzi.tz->bit32.timecnt); } } if (!found) { if (tzobj->tzi.tz->bit32.timecnt > 0) { add_last(); } else { add_nominal(); } } else { for (i = begin; i < tzobj->tzi.tz->bit32.timecnt; ++i) { if (tzobj->tzi.tz->trans[i] < timestamp_end) { add(i, tzobj->tzi.tz->trans[i]); } } } } /* }}} */ /* {{{ proto array timezone_location_get() Returns location information for a timezone, including country code, latitude/longitude and comments */ PHP_FUNCTION(timezone_location_get) { zval *object; php_timezone_obj *tzobj; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object, date_ce_timezone) == FAILURE) { RETURN_FALSE; } tzobj = (php_timezone_obj *) zend_object_store_get_object(object TSRMLS_CC); DATE_CHECK_INITIALIZED(tzobj->initialized, DateTimeZone); if (tzobj->type != TIMELIB_ZONETYPE_ID) { RETURN_FALSE; } array_init(return_value); add_assoc_string(return_value, "country_code", tzobj->tzi.tz->location.country_code, 1); add_assoc_double(return_value, "latitude", tzobj->tzi.tz->location.latitude); add_assoc_double(return_value, "longitude", tzobj->tzi.tz->location.longitude); add_assoc_string(return_value, "comments", tzobj->tzi.tz->location.comments, 1); } /* }}} */ static int date_interval_initialize(timelib_rel_time **rt, /*const*/ char *format, int format_length TSRMLS_DC) { timelib_time *b = NULL, *e = NULL; timelib_rel_time *p = NULL; int r = 0; int retval = 0; struct timelib_error_container *errors; timelib_strtointerval(format, format_length, &b, &e, &p, &r, &errors); if (errors->error_count > 0) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown or bad format (%s)", format); retval = FAILURE; } else { if(p) { *rt = p; retval = SUCCESS; } else { if(b && e) { timelib_update_ts(b, NULL); timelib_update_ts(e, NULL); *rt = timelib_diff(b, e); retval = SUCCESS; } else { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to parse interval (%s)", format); retval = FAILURE; } } } timelib_error_container_dtor(errors); return retval; } /* {{{ date_interval_read_property */ zval *date_interval_read_property(zval *object, zval *member, int type, const zend_literal *key TSRMLS_DC) { php_interval_obj *obj; zval *retval; zval tmp_member; timelib_sll value = -1; if (member->type != IS_STRING) { tmp_member = *member; zval_copy_ctor(&tmp_member); convert_to_string(&tmp_member); member = &tmp_member; key = NULL; } obj = (php_interval_obj *)zend_objects_get_address(object TSRMLS_CC); if (!obj->initialized) { retval = (zend_get_std_object_handlers())->read_property(object, member, type, key TSRMLS_CC); if (member == &tmp_member) { zval_dtor(member); } return retval; } #define GET_VALUE_FROM_STRUCT(n,m) \ if (strcmp(Z_STRVAL_P(member), m) == 0) { \ value = obj->diff->n; \ break; \ } do { GET_VALUE_FROM_STRUCT(y, "y"); GET_VALUE_FROM_STRUCT(m, "m"); GET_VALUE_FROM_STRUCT(d, "d"); GET_VALUE_FROM_STRUCT(h, "h"); GET_VALUE_FROM_STRUCT(i, "i"); GET_VALUE_FROM_STRUCT(s, "s"); GET_VALUE_FROM_STRUCT(invert, "invert"); GET_VALUE_FROM_STRUCT(days, "days"); /* didn't find any */ retval = (zend_get_std_object_handlers())->read_property(object, member, type, key TSRMLS_CC); if (member == &tmp_member) { zval_dtor(member); } return retval; } while(0); ALLOC_INIT_ZVAL(retval); Z_SET_REFCOUNT_P(retval, 0); if (value != -99999) { ZVAL_LONG(retval, value); } else { ZVAL_FALSE(retval); } if (member == &tmp_member) { zval_dtor(member); } return retval; } /* }}} */ /* {{{ date_interval_write_property */ void date_interval_write_property(zval *object, zval *member, zval *value, const zend_literal *key TSRMLS_DC) { php_interval_obj *obj; zval tmp_member, tmp_value; if (member->type != IS_STRING) { tmp_member = *member; zval_copy_ctor(&tmp_member); convert_to_string(&tmp_member); member = &tmp_member; key = NULL; } obj = (php_interval_obj *)zend_objects_get_address(object TSRMLS_CC); if (!obj->initialized) { (zend_get_std_object_handlers())->write_property(object, member, value, key TSRMLS_CC); if (member == &tmp_member) { zval_dtor(member); } return; } #define SET_VALUE_FROM_STRUCT(n,m) \ if (strcmp(Z_STRVAL_P(member), m) == 0) { \ if (value->type != IS_LONG) { \ tmp_value = *value; \ zval_copy_ctor(&tmp_value); \ convert_to_long(&tmp_value); \ value = &tmp_value; \ } \ obj->diff->n = Z_LVAL_P(value); \ if (value == &tmp_value) { \ zval_dtor(value); \ } \ break; \ } do { SET_VALUE_FROM_STRUCT(y, "y"); SET_VALUE_FROM_STRUCT(m, "m"); SET_VALUE_FROM_STRUCT(d, "d"); SET_VALUE_FROM_STRUCT(h, "h"); SET_VALUE_FROM_STRUCT(i, "i"); SET_VALUE_FROM_STRUCT(s, "s"); SET_VALUE_FROM_STRUCT(invert, "invert"); /* didn't find any */ (zend_get_std_object_handlers())->write_property(object, member, value, key TSRMLS_CC); } while(0); if (member == &tmp_member) { zval_dtor(member); } } /* }}} */ /* {{{ proto DateInterval::__construct([string interval_spec]) Creates new DateInterval object. */ PHP_METHOD(DateInterval, __construct) { char *interval_string = NULL; int interval_string_length; php_interval_obj *diobj; timelib_rel_time *reltime; zend_error_handling error_handling; zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &interval_string, &interval_string_length) == SUCCESS) { if (date_interval_initialize(&reltime, interval_string, interval_string_length TSRMLS_CC) == SUCCESS) { diobj = zend_object_store_get_object(getThis() TSRMLS_CC); diobj->diff = reltime; diobj->initialized = 1; } else { ZVAL_NULL(getThis()); } } zend_restore_error_handling(&error_handling TSRMLS_CC); } /* }}} */ static int php_date_interval_initialize_from_hash(zval **return_value, php_interval_obj **intobj, HashTable *myht TSRMLS_DC) { (*intobj)->diff = timelib_rel_time_ctor(); #define PHP_DATE_INTERVAL_READ_PROPERTY(element, member, itype, def) \ do { \ zval **z_arg = NULL; \ if (zend_hash_find(myht, element, strlen(element) + 1, (void**) &z_arg) == SUCCESS && Z_TYPE_PP(z_arg) == IS_LONG) { \ (*intobj)->diff->member = (itype)Z_LVAL_PP(z_arg); \ } else { \ (*intobj)->diff->member = (itype)def; \ } \ } while (0); #define PHP_DATE_INTERVAL_READ_PROPERTY_I64(element, member) \ do { \ zval **z_arg = NULL; \ if (zend_hash_find(myht, element, strlen(element) + 1, (void**) &z_arg) == SUCCESS) { \ if (Z_TYPE_PP(z_arg) == IS_STRING) { \ DATE_A64I((*intobj)->diff->member, Z_STRVAL_PP(z_arg)); \ } else if (Z_TYPE_PP(z_arg) == IS_LONG || Z_TYPE_PP(z_arg) == IS_BOOL) { \ (*intobj)->diff->member = (timelib_sll)Z_LVAL_PP(z_arg); \ } else if (Z_TYPE_PP(z_arg) == IS_DOUBLE) { \ (*intobj)->diff->member = (timelib_sll)Z_DVAL_PP(z_arg); \ } else { \ (*intobj)->diff->member = -1LL; \ } \ } else { \ (*intobj)->diff->member = -1LL; \ } \ } while (0); PHP_DATE_INTERVAL_READ_PROPERTY("y", y, timelib_sll, -1) PHP_DATE_INTERVAL_READ_PROPERTY("m", m, timelib_sll, -1) PHP_DATE_INTERVAL_READ_PROPERTY("d", d, timelib_sll, -1) PHP_DATE_INTERVAL_READ_PROPERTY("h", h, timelib_sll, -1) PHP_DATE_INTERVAL_READ_PROPERTY("i", i, timelib_sll, -1) PHP_DATE_INTERVAL_READ_PROPERTY("s", s, timelib_sll, -1) PHP_DATE_INTERVAL_READ_PROPERTY("weekday", weekday, int, -1) PHP_DATE_INTERVAL_READ_PROPERTY("weekday_behavior", weekday_behavior, int, -1) PHP_DATE_INTERVAL_READ_PROPERTY("first_last_day_of", first_last_day_of, int, -1) PHP_DATE_INTERVAL_READ_PROPERTY("invert", invert, int, 0); PHP_DATE_INTERVAL_READ_PROPERTY_I64("days", days); PHP_DATE_INTERVAL_READ_PROPERTY("special_type", special.type, unsigned int, 0); PHP_DATE_INTERVAL_READ_PROPERTY_I64("special_amount", special.amount); PHP_DATE_INTERVAL_READ_PROPERTY("have_weekday_relative", have_weekday_relative, unsigned int, 0); PHP_DATE_INTERVAL_READ_PROPERTY("have_special_relative", have_special_relative, unsigned int, 0); (*intobj)->initialized = 1; return 0; } /* {{{ proto DateInterval::__set_state() */ PHP_METHOD(DateInterval, __set_state) { php_interval_obj *intobj; zval *array; HashTable *myht; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &array) == FAILURE) { RETURN_FALSE; } myht = HASH_OF(array); php_date_instantiate(date_ce_interval, return_value TSRMLS_CC); intobj = (php_interval_obj *) zend_object_store_get_object(return_value TSRMLS_CC); php_date_interval_initialize_from_hash(&return_value, &intobj, myht TSRMLS_CC); } /* }}} */ /* {{{ proto DateInterval::__wakeup() */ PHP_METHOD(DateInterval, __wakeup) { zval *object = getThis(); php_interval_obj *intobj; HashTable *myht; intobj = (php_interval_obj *) zend_object_store_get_object(object TSRMLS_CC); myht = Z_OBJPROP_P(object); php_date_interval_initialize_from_hash(&return_value, &intobj, myht TSRMLS_CC); } /* }}} */ /* {{{ proto DateInterval date_interval_create_from_date_string(string time) Uses the normal date parsers and sets up a DateInterval from the relative parts of the parsed string */ PHP_FUNCTION(date_interval_create_from_date_string) { char *time_str = NULL; int time_str_len = 0; timelib_time *time; timelib_error_container *err = NULL; php_interval_obj *diobj; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &time_str, &time_str_len) == FAILURE) { RETURN_FALSE; } php_date_instantiate(date_ce_interval, return_value TSRMLS_CC); time = timelib_strtotime(time_str, time_str_len, &err, DATE_TIMEZONEDB, php_date_parse_tzfile_wrapper); diobj = (php_interval_obj *) zend_object_store_get_object(return_value TSRMLS_CC); diobj->diff = timelib_rel_time_clone(&time->relative); diobj->initialized = 1; timelib_time_dtor(time); timelib_error_container_dtor(err); } /* }}} */ /* {{{ date_interval_format - */ static char *date_interval_format(char *format, int format_len, timelib_rel_time *t) { smart_str string = {0}; int i, length, have_format_spec = 0; char buffer[33]; if (!format_len) { return STR_EMPTY_ALLOC(); } for (i = 0; i < format_len; i++) { if (have_format_spec) { switch (format[i]) { case 'Y': length = slprintf(buffer, 32, "%02d", (int) t->y); break; case 'y': length = slprintf(buffer, 32, "%d", (int) t->y); break; case 'M': length = slprintf(buffer, 32, "%02d", (int) t->m); break; case 'm': length = slprintf(buffer, 32, "%d", (int) t->m); break; case 'D': length = slprintf(buffer, 32, "%02d", (int) t->d); break; case 'd': length = slprintf(buffer, 32, "%d", (int) t->d); break; case 'H': length = slprintf(buffer, 32, "%02d", (int) t->h); break; case 'h': length = slprintf(buffer, 32, "%d", (int) t->h); break; case 'I': length = slprintf(buffer, 32, "%02d", (int) t->i); break; case 'i': length = slprintf(buffer, 32, "%d", (int) t->i); break; case 'S': length = slprintf(buffer, 32, "%02ld", (long) t->s); break; case 's': length = slprintf(buffer, 32, "%ld", (long) t->s); break; case 'a': { if ((int) t->days != -99999) { length = slprintf(buffer, 32, "%d", (int) t->days); } else { length = slprintf(buffer, 32, "(unknown)"); } } break; case 'r': length = slprintf(buffer, 32, "%s", t->invert ? "-" : ""); break; case 'R': length = slprintf(buffer, 32, "%c", t->invert ? '-' : '+'); break; case '%': length = slprintf(buffer, 32, "%%"); break; default: buffer[0] = '%'; buffer[1] = format[i]; buffer[2] = '\0'; length = 2; break; } smart_str_appendl(&string, buffer, length); have_format_spec = 0; } else { if (format[i] == '%') { have_format_spec = 1; } else { smart_str_appendc(&string, format[i]); } } } smart_str_0(&string); if (string.c == NULL) { return STR_EMPTY_ALLOC(); } return string.c; } /* }}} */ /* {{{ proto string date_interval_format(DateInterval object, string format) Formats the interval. */ PHP_FUNCTION(date_interval_format) { zval *object; php_interval_obj *diobj; char *format; int format_len; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &object, date_ce_interval, &format, &format_len) == FAILURE) { RETURN_FALSE; } diobj = (php_interval_obj *) zend_object_store_get_object(object TSRMLS_CC); DATE_CHECK_INITIALIZED(diobj->initialized, DateInterval); RETURN_STRING(date_interval_format(format, format_len, diobj->diff), 0); } /* }}} */ static int date_period_initialize(timelib_time **st, timelib_time **et, timelib_rel_time **d, long *recurrences, /*const*/ char *format, int format_length TSRMLS_DC) { timelib_time *b = NULL, *e = NULL; timelib_rel_time *p = NULL; int r = 0; int retval = 0; struct timelib_error_container *errors; timelib_strtointerval(format, format_length, &b, &e, &p, &r, &errors); if (errors->error_count > 0) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown or bad format (%s)", format); retval = FAILURE; } else { *st = b; *et = e; *d = p; *recurrences = r; retval = SUCCESS; } timelib_error_container_dtor(errors); return retval; } /* {{{ proto DatePeriod::__construct(DateTime $start, DateInterval $interval, int recurrences|DateTime $end) Creates new DatePeriod object. */ PHP_METHOD(DatePeriod, __construct) { php_period_obj *dpobj; php_date_obj *dateobj; php_interval_obj *intobj; zval *start, *end = NULL, *interval; long recurrences = 0, options = 0; char *isostr = NULL; int isostr_len = 0; timelib_time *clone; zend_error_handling error_handling; zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC); if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "OOl|l", &start, date_ce_interface, &interval, date_ce_interval, &recurrences, &options) == FAILURE) { if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "OOO|l", &start, date_ce_interface, &interval, date_ce_interval, &end, date_ce_interface, &options) == FAILURE) { if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &isostr, &isostr_len, &options) == FAILURE) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "This constructor accepts either (DateTimeInterface, DateInterval, int) OR (DateTimeInterface, DateInterval, DateTime) OR (string) as arguments."); zend_restore_error_handling(&error_handling TSRMLS_CC); return; } } } dpobj = zend_object_store_get_object(getThis() TSRMLS_CC); dpobj->current = NULL; if (isostr) { date_period_initialize(&(dpobj->start), &(dpobj->end), &(dpobj->interval), &recurrences, isostr, isostr_len TSRMLS_CC); if (dpobj->start == NULL) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "The ISO interval '%s' did not contain a start date.", isostr); } if (dpobj->interval == NULL) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "The ISO interval '%s' did not contain an interval.", isostr); } if (dpobj->end == NULL && recurrences == 0) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "The ISO interval '%s' did not contain an end date or a recurrence count.", isostr); } if (dpobj->start) { timelib_update_ts(dpobj->start, NULL); } if (dpobj->end) { timelib_update_ts(dpobj->end, NULL); } dpobj->start_ce = date_ce_date; } else { /* init */ intobj = (php_interval_obj *) zend_object_store_get_object(interval TSRMLS_CC); /* start date */ dateobj = (php_date_obj *) zend_object_store_get_object(start TSRMLS_CC); clone = timelib_time_ctor(); memcpy(clone, dateobj->time, sizeof(timelib_time)); if (dateobj->time->tz_abbr) { clone->tz_abbr = strdup(dateobj->time->tz_abbr); } if (dateobj->time->tz_info) { clone->tz_info = dateobj->time->tz_info; } dpobj->start = clone; dpobj->start_ce = Z_OBJCE_P(start); /* interval */ dpobj->interval = timelib_rel_time_clone(intobj->diff); /* end date */ if (end) { dateobj = (php_date_obj *) zend_object_store_get_object(end TSRMLS_CC); clone = timelib_time_clone(dateobj->time); dpobj->end = clone; } } /* options */ dpobj->include_start_date = !(options & PHP_DATE_PERIOD_EXCLUDE_START_DATE); /* recurrrences */ dpobj->recurrences = recurrences + dpobj->include_start_date; dpobj->initialized = 1; zend_restore_error_handling(&error_handling TSRMLS_CC); } /* }}} */ /* {{{ proto DatePeriod::getStartDate() Get start date. */ PHP_METHOD(DatePeriod, getStartDate) { php_period_obj *dpobj; php_date_obj *dateobj; if (zend_parse_parameters_none() == FAILURE) { return; } dpobj = (php_period_obj *)zend_object_store_get_object(getThis() TSRMLS_CC); php_date_instantiate(dpobj->start_ce, return_value TSRMLS_CC); dateobj = (php_date_obj *)zend_object_store_get_object(return_value TSRMLS_CC); dateobj->time = timelib_time_ctor(); *dateobj->time = *dpobj->start; if (dpobj->start->tz_abbr) { dateobj->time->tz_abbr = strdup(dpobj->start->tz_abbr); } if (dpobj->start->tz_info) { dateobj->time->tz_info = dpobj->start->tz_info; } } /* }}} */ /* {{{ proto DatePeriod::getEndDate() Get end date. */ PHP_METHOD(DatePeriod, getEndDate) { php_period_obj *dpobj; php_date_obj *dateobj; if (zend_parse_parameters_none() == FAILURE) { return; } dpobj = (php_period_obj *)zend_object_store_get_object(getThis() TSRMLS_CC); if (!dpobj->end) { return; } php_date_instantiate(dpobj->start_ce, return_value TSRMLS_CC); dateobj = (php_date_obj *)zend_object_store_get_object(return_value TSRMLS_CC); dateobj->time = timelib_time_ctor(); *dateobj->time = *dpobj->end; if (dpobj->end->tz_abbr) { dateobj->time->tz_abbr = strdup(dpobj->end->tz_abbr); } if (dpobj->end->tz_info) { dateobj->time->tz_info = dpobj->end->tz_info; } } /* }}} */ /* {{{ proto DatePeriod::getDateInterval() Get date interval. */ PHP_METHOD(DatePeriod, getDateInterval) { php_period_obj *dpobj; php_interval_obj *diobj; if (zend_parse_parameters_none() == FAILURE) { return; } dpobj = (php_period_obj *)zend_object_store_get_object(getThis() TSRMLS_CC); php_date_instantiate(date_ce_interval, return_value TSRMLS_CC); diobj = (php_interval_obj *)zend_object_store_get_object(return_value TSRMLS_CC); diobj->diff = timelib_rel_time_clone(dpobj->interval); diobj->initialized = 1; } /* }}} */ static int check_id_allowed(char *id, long what) /* {{{ */ { if (what & PHP_DATE_TIMEZONE_GROUP_AFRICA && strncasecmp(id, "Africa/", 7) == 0) return 1; if (what & PHP_DATE_TIMEZONE_GROUP_AMERICA && strncasecmp(id, "America/", 8) == 0) return 1; if (what & PHP_DATE_TIMEZONE_GROUP_ANTARCTICA && strncasecmp(id, "Antarctica/", 11) == 0) return 1; if (what & PHP_DATE_TIMEZONE_GROUP_ARCTIC && strncasecmp(id, "Arctic/", 7) == 0) return 1; if (what & PHP_DATE_TIMEZONE_GROUP_ASIA && strncasecmp(id, "Asia/", 5) == 0) return 1; if (what & PHP_DATE_TIMEZONE_GROUP_ATLANTIC && strncasecmp(id, "Atlantic/", 9) == 0) return 1; if (what & PHP_DATE_TIMEZONE_GROUP_AUSTRALIA && strncasecmp(id, "Australia/", 10) == 0) return 1; if (what & PHP_DATE_TIMEZONE_GROUP_EUROPE && strncasecmp(id, "Europe/", 7) == 0) return 1; if (what & PHP_DATE_TIMEZONE_GROUP_INDIAN && strncasecmp(id, "Indian/", 7) == 0) return 1; if (what & PHP_DATE_TIMEZONE_GROUP_PACIFIC && strncasecmp(id, "Pacific/", 8) == 0) return 1; if (what & PHP_DATE_TIMEZONE_GROUP_UTC && strncasecmp(id, "UTC", 3) == 0) return 1; return 0; } /* {{{ proto array timezone_identifiers_list([long what[, string country]]) Returns numerically index array with all timezone identifiers. */ PHP_FUNCTION(timezone_identifiers_list) { const timelib_tzdb *tzdb; const timelib_tzdb_index_entry *table; int i, item_count; long what = PHP_DATE_TIMEZONE_GROUP_ALL; char *option = NULL; int option_len = 0; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ls", &what, &option, &option_len) == FAILURE) { RETURN_FALSE; } /* Extra validation */ if (what == PHP_DATE_TIMEZONE_PER_COUNTRY && option_len != 2) { php_error_docref(NULL TSRMLS_CC, E_NOTICE, "A two-letter ISO 3166-1 compatible country code is expected"); RETURN_FALSE; } tzdb = DATE_TIMEZONEDB; item_count = tzdb->index_size; table = tzdb->index; array_init(return_value); for (i = 0; i < item_count; ++i) { if (what == PHP_DATE_TIMEZONE_PER_COUNTRY) { if (tzdb->data[table[i].pos + 5] == option[0] && tzdb->data[table[i].pos + 6] == option[1]) { add_next_index_string(return_value, table[i].id, 1); } } else if (what == PHP_DATE_TIMEZONE_GROUP_ALL_W_BC || (check_id_allowed(table[i].id, what) && (tzdb->data[table[i].pos + 4] == '\1'))) { add_next_index_string(return_value, table[i].id, 1); } }; } /* }}} */ /* {{{ proto array timezone_version_get() Returns the Olson database version number. */ PHP_FUNCTION(timezone_version_get) { const timelib_tzdb *tzdb; tzdb = DATE_TIMEZONEDB; RETURN_STRING(tzdb->version, 1); } /* }}} */ /* {{{ proto array timezone_abbreviations_list() Returns associative array containing dst, offset and the timezone name */ PHP_FUNCTION(timezone_abbreviations_list) { const timelib_tz_lookup_table *table, *entry; zval *element, **abbr_array_pp, *abbr_array; table = timelib_timezone_abbreviations_list(); array_init(return_value); entry = table; do { MAKE_STD_ZVAL(element); array_init(element); add_assoc_bool(element, "dst", entry->type); add_assoc_long(element, "offset", entry->gmtoffset); if (entry->full_tz_name) { add_assoc_string(element, "timezone_id", entry->full_tz_name, 1); } else { add_assoc_null(element, "timezone_id"); } if (zend_hash_find(HASH_OF(return_value), entry->name, strlen(entry->name) + 1, (void **) &abbr_array_pp) == FAILURE) { MAKE_STD_ZVAL(abbr_array); array_init(abbr_array); add_assoc_zval(return_value, entry->name, abbr_array); } else { abbr_array = *abbr_array_pp; } add_next_index_zval(abbr_array, element); entry++; } while (entry->name); } /* }}} */ /* {{{ proto bool date_default_timezone_set(string timezone_identifier) Sets the default timezone used by all date/time functions in a script */ PHP_FUNCTION(date_default_timezone_set) { char *zone; int zone_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &zone, &zone_len) == FAILURE) { RETURN_FALSE; } if (!timelib_timezone_id_is_valid(zone, DATE_TIMEZONEDB)) { php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Timezone ID '%s' is invalid", zone); RETURN_FALSE; } if (DATEG(timezone)) { efree(DATEG(timezone)); DATEG(timezone) = NULL; } DATEG(timezone) = estrndup(zone, zone_len); RETURN_TRUE; } /* }}} */ /* {{{ proto string date_default_timezone_get() Gets the default timezone used by all date/time functions in a script */ PHP_FUNCTION(date_default_timezone_get) { timelib_tzinfo *default_tz; default_tz = get_timezone_info(TSRMLS_C); RETVAL_STRING(default_tz->name, 1); } /* }}} */ /* {{{ php_do_date_sunrise_sunset * Common for date_sunrise() and date_sunset() functions */ static void php_do_date_sunrise_sunset(INTERNAL_FUNCTION_PARAMETERS, int calc_sunset) { double latitude = 0.0, longitude = 0.0, zenith = 0.0, gmt_offset = 0, altitude; double h_rise, h_set, N; timelib_sll rise, set, transit; long time, retformat = 0; int rs; timelib_time *t; timelib_tzinfo *tzi; char *retstr; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|ldddd", &time, &retformat, &latitude, &longitude, &zenith, &gmt_offset) == FAILURE) { RETURN_FALSE; } switch (ZEND_NUM_ARGS()) { case 1: retformat = SUNFUNCS_RET_STRING; case 2: latitude = INI_FLT("date.default_latitude"); case 3: longitude = INI_FLT("date.default_longitude"); case 4: if (calc_sunset) { zenith = INI_FLT("date.sunset_zenith"); } else { zenith = INI_FLT("date.sunrise_zenith"); } case 5: case 6: break; default: php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid format"); RETURN_FALSE; break; } if (retformat != SUNFUNCS_RET_TIMESTAMP && retformat != SUNFUNCS_RET_STRING && retformat != SUNFUNCS_RET_DOUBLE) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Wrong return format given, pick one of SUNFUNCS_RET_TIMESTAMP, SUNFUNCS_RET_STRING or SUNFUNCS_RET_DOUBLE"); RETURN_FALSE; } altitude = 90 - zenith; /* Initialize time struct */ t = timelib_time_ctor(); tzi = get_timezone_info(TSRMLS_C); t->tz_info = tzi; t->zone_type = TIMELIB_ZONETYPE_ID; if (ZEND_NUM_ARGS() <= 5) { gmt_offset = timelib_get_current_offset(t) / 3600; } timelib_unixtime2local(t, time); rs = timelib_astro_rise_set_altitude(t, longitude, latitude, altitude, 1, &h_rise, &h_set, &rise, &set, &transit); timelib_time_dtor(t); if (rs != 0) { RETURN_FALSE; } if (retformat == SUNFUNCS_RET_TIMESTAMP) { RETURN_LONG(calc_sunset ? set : rise); } N = (calc_sunset ? h_set : h_rise) + gmt_offset; if (N > 24 || N < 0) { N -= floor(N / 24) * 24; } switch (retformat) { case SUNFUNCS_RET_STRING: spprintf(&retstr, 0, "%02d:%02d", (int) N, (int) (60 * (N - (int) N))); RETURN_STRINGL(retstr, 5, 0); break; case SUNFUNCS_RET_DOUBLE: RETURN_DOUBLE(N); break; } } /* }}} */ /* {{{ proto mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]]) Returns time of sunrise for a given day and location */ PHP_FUNCTION(date_sunrise) { php_do_date_sunrise_sunset(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); } /* }}} */ /* {{{ proto mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]]) Returns time of sunset for a given day and location */ PHP_FUNCTION(date_sunset) { php_do_date_sunrise_sunset(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); } /* }}} */ /* {{{ proto array date_sun_info(long time, float latitude, float longitude) Returns an array with information about sun set/rise and twilight begin/end */ PHP_FUNCTION(date_sun_info) { long time; double latitude, longitude; timelib_time *t, *t2; timelib_tzinfo *tzi; int rs; timelib_sll rise, set, transit; int dummy; double ddummy; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ldd", &time, &latitude, &longitude) == FAILURE) { RETURN_FALSE; } /* Initialize time struct */ t = timelib_time_ctor(); tzi = get_timezone_info(TSRMLS_C); t->tz_info = tzi; t->zone_type = TIMELIB_ZONETYPE_ID; timelib_unixtime2local(t, time); /* Setup */ t2 = timelib_time_ctor(); array_init(return_value); /* Get sun up/down and transit */ rs = timelib_astro_rise_set_altitude(t, longitude, latitude, -35.0/60, 1, &ddummy, &ddummy, &rise, &set, &transit); switch (rs) { case -1: /* always below */ add_assoc_bool(return_value, "sunrise", 0); add_assoc_bool(return_value, "sunset", 0); break; case 1: /* always above */ add_assoc_bool(return_value, "sunrise", 1); add_assoc_bool(return_value, "sunset", 1); break; default: t2->sse = rise; add_assoc_long(return_value, "sunrise", timelib_date_to_int(t2, &dummy)); t2->sse = set; add_assoc_long(return_value, "sunset", timelib_date_to_int(t2, &dummy)); } t2->sse = transit; add_assoc_long(return_value, "transit", timelib_date_to_int(t2, &dummy)); /* Get civil twilight */ rs = timelib_astro_rise_set_altitude(t, longitude, latitude, -6.0, 0, &ddummy, &ddummy, &rise, &set, &transit); switch (rs) { case -1: /* always below */ add_assoc_bool(return_value, "civil_twilight_begin", 0); add_assoc_bool(return_value, "civil_twilight_end", 0); break; case 1: /* always above */ add_assoc_bool(return_value, "civil_twilight_begin", 1); add_assoc_bool(return_value, "civil_twilight_end", 1); break; default: t2->sse = rise; add_assoc_long(return_value, "civil_twilight_begin", timelib_date_to_int(t2, &dummy)); t2->sse = set; add_assoc_long(return_value, "civil_twilight_end", timelib_date_to_int(t2, &dummy)); } /* Get nautical twilight */ rs = timelib_astro_rise_set_altitude(t, longitude, latitude, -12.0, 0, &ddummy, &ddummy, &rise, &set, &transit); switch (rs) { case -1: /* always below */ add_assoc_bool(return_value, "nautical_twilight_begin", 0); add_assoc_bool(return_value, "nautical_twilight_end", 0); break; case 1: /* always above */ add_assoc_bool(return_value, "nautical_twilight_begin", 1); add_assoc_bool(return_value, "nautical_twilight_end", 1); break; default: t2->sse = rise; add_assoc_long(return_value, "nautical_twilight_begin", timelib_date_to_int(t2, &dummy)); t2->sse = set; add_assoc_long(return_value, "nautical_twilight_end", timelib_date_to_int(t2, &dummy)); } /* Get astronomical twilight */ rs = timelib_astro_rise_set_altitude(t, longitude, latitude, -18.0, 0, &ddummy, &ddummy, &rise, &set, &transit); switch (rs) { case -1: /* always below */ add_assoc_bool(return_value, "astronomical_twilight_begin", 0); add_assoc_bool(return_value, "astronomical_twilight_end", 0); break; case 1: /* always above */ add_assoc_bool(return_value, "astronomical_twilight_begin", 1); add_assoc_bool(return_value, "astronomical_twilight_end", 1); break; default: t2->sse = rise; add_assoc_long(return_value, "astronomical_twilight_begin", timelib_date_to_int(t2, &dummy)); t2->sse = set; add_assoc_long(return_value, "astronomical_twilight_end", timelib_date_to_int(t2, &dummy)); } timelib_time_dtor(t); timelib_time_dtor(t2); } /* }}} */ static HashTable *date_object_get_gc_period(zval *object, zval ***table, int *n TSRMLS_DC) { *table = NULL; *n = 0; return zend_std_get_properties(object TSRMLS_CC); } static HashTable *date_object_get_properties_period(zval *object TSRMLS_DC) { HashTable *props; zval *zv; php_period_obj *period_obj; period_obj = zend_object_store_get_object(object TSRMLS_CC); props = zend_std_get_properties(object TSRMLS_CC); if (!period_obj->start) { return props; } MAKE_STD_ZVAL(zv); if (period_obj->start) { php_date_obj *date_obj; object_init_ex(zv, date_ce_date); date_obj = zend_object_store_get_object(zv TSRMLS_CC); date_obj->time = timelib_time_clone(period_obj->start); } else { ZVAL_NULL(zv); } zend_hash_update(props, "start", sizeof("start"), &zv, sizeof(zv), NULL); MAKE_STD_ZVAL(zv); if (period_obj->current) { php_date_obj *date_obj; object_init_ex(zv, date_ce_date); date_obj = zend_object_store_get_object(zv TSRMLS_CC); date_obj->time = timelib_time_clone(period_obj->current); } else { ZVAL_NULL(zv); } zend_hash_update(props, "current", sizeof("current"), &zv, sizeof(zv), NULL); MAKE_STD_ZVAL(zv); if (period_obj->end) { php_date_obj *date_obj; object_init_ex(zv, date_ce_date); date_obj = zend_object_store_get_object(zv TSRMLS_CC); date_obj->time = timelib_time_clone(period_obj->end); } else { ZVAL_NULL(zv); } zend_hash_update(props, "end", sizeof("end"), &zv, sizeof(zv), NULL); MAKE_STD_ZVAL(zv); if (period_obj->interval) { php_interval_obj *interval_obj; object_init_ex(zv, date_ce_interval); interval_obj = zend_object_store_get_object(zv TSRMLS_CC); interval_obj->diff = timelib_rel_time_clone(period_obj->interval); interval_obj->initialized = 1; } else { ZVAL_NULL(zv); } zend_hash_update(props, "interval", sizeof("interval"), &zv, sizeof(zv), NULL); /* converted to larger type (int->long); must check when unserializing */ MAKE_STD_ZVAL(zv); ZVAL_LONG(zv, (long) period_obj->recurrences); zend_hash_update(props, "recurrences", sizeof("recurrences"), &zv, sizeof(zv), NULL); MAKE_STD_ZVAL(zv); ZVAL_BOOL(zv, period_obj->include_start_date); zend_hash_update(props, "include_start_date", sizeof("include_start_date"), &zv, sizeof(zv), NULL); return props; } static int php_date_period_initialize_from_hash(php_period_obj *period_obj, HashTable *myht TSRMLS_DC) { zval **ht_entry; /* this function does no rollback on error */ if (zend_hash_find(myht, "start", sizeof("start"), (void**) &ht_entry) == SUCCESS) { if (Z_TYPE_PP(ht_entry) == IS_OBJECT && Z_OBJCE_PP(ht_entry) == date_ce_date) { php_date_obj *date_obj; date_obj = zend_object_store_get_object(*ht_entry TSRMLS_CC); period_obj->start = timelib_time_clone(date_obj->time); period_obj->start_ce = Z_OBJCE_PP(ht_entry); } else if (Z_TYPE_PP(ht_entry) != IS_NULL) { return 0; } } else { return 0; } if (zend_hash_find(myht, "end", sizeof("end"), (void**) &ht_entry) == SUCCESS) { if (Z_TYPE_PP(ht_entry) == IS_OBJECT && Z_OBJCE_PP(ht_entry) == date_ce_date) { php_date_obj *date_obj; date_obj = zend_object_store_get_object(*ht_entry TSRMLS_CC); period_obj->end = timelib_time_clone(date_obj->time); } else if (Z_TYPE_PP(ht_entry) != IS_NULL) { return 0; } } else { return 0; } if (zend_hash_find(myht, "current", sizeof("current"), (void**) &ht_entry) == SUCCESS) { if (Z_TYPE_PP(ht_entry) == IS_OBJECT && Z_OBJCE_PP(ht_entry) == date_ce_date) { php_date_obj *date_obj; date_obj = zend_object_store_get_object(*ht_entry TSRMLS_CC); period_obj->current = timelib_time_clone(date_obj->time); } else if (Z_TYPE_PP(ht_entry) != IS_NULL) { return 0; } } else { return 0; } if (zend_hash_find(myht, "interval", sizeof("interval"), (void**) &ht_entry) == SUCCESS) { if (Z_TYPE_PP(ht_entry) == IS_OBJECT && Z_OBJCE_PP(ht_entry) == date_ce_interval) { php_interval_obj *interval_obj; interval_obj = zend_object_store_get_object(*ht_entry TSRMLS_CC); period_obj->interval = timelib_rel_time_clone(interval_obj->diff); } else { /* interval is required */ return 0; } } else { return 0; } if (zend_hash_find(myht, "recurrences", sizeof("recurrences"), (void**) &ht_entry) == SUCCESS && Z_TYPE_PP(ht_entry) == IS_LONG && Z_LVAL_PP(ht_entry) >= 0 && Z_LVAL_PP(ht_entry) <= INT_MAX) { period_obj->recurrences = Z_LVAL_PP(ht_entry); } else { return 0; } if (zend_hash_find(myht, "include_start_date", sizeof("include_start_date"), (void**) &ht_entry) == SUCCESS && Z_TYPE_PP(ht_entry) == IS_BOOL) { period_obj->include_start_date = Z_BVAL_PP(ht_entry); } else { return 0; } period_obj->initialized = 1; return 1; } /* {{{ proto DatePeriod::__set_state() */ PHP_METHOD(DatePeriod, __set_state) { php_period_obj *period_obj; zval *array; HashTable *myht; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &array) == FAILURE) { RETURN_FALSE; } myht = Z_ARRVAL_P(array); object_init_ex(return_value, date_ce_period); period_obj = zend_object_store_get_object(return_value TSRMLS_CC); if (!php_date_period_initialize_from_hash(period_obj, myht TSRMLS_CC)) { php_error(E_ERROR, "Invalid serialization data for DatePeriod object"); } } /* }}} */ /* {{{ proto DatePeriod::__wakeup() */ PHP_METHOD(DatePeriod, __wakeup) { zval *object = getThis(); php_period_obj *period_obj; HashTable *myht; period_obj = zend_object_store_get_object(object TSRMLS_CC); myht = Z_OBJPROP_P(object); if (!php_date_period_initialize_from_hash(period_obj, myht TSRMLS_CC)) { php_error(E_ERROR, "Invalid serialization data for DatePeriod object"); } } /* }}} */ /* {{{ date_period_read_property */ static zval *date_period_read_property(zval *object, zval *member, int type, const zend_literal *key TSRMLS_DC) { zval *zv; if (type != BP_VAR_IS && type != BP_VAR_R) { php_error_docref(NULL TSRMLS_CC, E_ERROR, "Retrieval of DatePeriod properties for modification is unsupported"); } Z_OBJPROP_P(object); /* build properties hash table */ zv = std_object_handlers.read_property(object, member, type, key TSRMLS_CC); if (Z_TYPE_P(zv) == IS_OBJECT && Z_OBJ_HANDLER_P(zv, clone_obj)) { /* defensive copy */ zend_object_value zov = Z_OBJ_HANDLER_P(zv, clone_obj)(zv TSRMLS_CC); MAKE_STD_ZVAL(zv); Z_TYPE_P(zv) = IS_OBJECT; Z_OBJVAL_P(zv) = zov; } return zv; } /* }}} */ /* {{{ date_period_write_property */ static void date_period_write_property(zval *object, zval *member, zval *value, const zend_literal *key TSRMLS_DC) { php_error_docref(NULL TSRMLS_CC, E_ERROR, "Writing to DatePeriod properties is unsupported"); } /* }}} */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: fdm=marker * vim: noet sw=4 ts=4 */ lib/tm2unixtime.c000064400000031167147577114150007767 0ustar00/* * The MIT License (MIT) * * Copyright (c) 2015 Derick Rethans * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "timelib.h" /* jan feb mrt apr may jun jul aug sep oct nov dec */ static int month_tab_leap[12] = { -1, 30, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; static int month_tab[12] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; /* dec jan feb mrt apr may jun jul aug sep oct nov dec */ static int days_in_month_leap[13] = { 31, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; static int days_in_month[13] = { 31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; static void do_range_limit(timelib_sll start, timelib_sll end, timelib_sll adj, timelib_sll *a, timelib_sll *b) { if (*a < start) { *b -= (start - *a - 1) / adj + 1; *a += adj * ((start - *a - 1) / adj + 1); } if (*a >= end) { *b += *a / adj; *a -= adj * (*a / adj); } } static void inc_month(timelib_sll *y, timelib_sll *m) { (*m)++; if (*m > 12) { *m -= 12; (*y)++; } } static void dec_month(timelib_sll *y, timelib_sll *m) { (*m)--; if (*m < 1) { *m += 12; (*y)--; } } static void do_range_limit_days_relative(timelib_sll *base_y, timelib_sll *base_m, timelib_sll *y, timelib_sll *m, timelib_sll *d, timelib_sll invert) { timelib_sll leapyear; timelib_sll month, year; timelib_sll days; do_range_limit(1, 13, 12, base_m, base_y); year = *base_y; month = *base_m; /* printf( "S: Y%d M%d %d %d %d %d\n", year, month, *y, *m, *d, days); */ if (!invert) { while (*d < 0) { dec_month(&year, &month); leapyear = timelib_is_leap(year); days = leapyear ? days_in_month_leap[month] : days_in_month[month]; /* printf( "I Y%d M%d %d %d %d %d\n", year, month, *y, *m, *d, days); */ *d += days; (*m)--; } } else { while (*d < 0) { leapyear = timelib_is_leap(year); days = leapyear ? days_in_month_leap[month] : days_in_month[month]; /* printf( "I Y%d M%d %d %d %d %d\n", year, month, *y, *m, *d, days); */ *d += days; (*m)--; inc_month(&year, &month); } } /* printf( "E: Y%d M%d %d %d %d %d\n", year, month, *y, *m, *d, days); */ } static int do_range_limit_days(timelib_sll *y, timelib_sll *m, timelib_sll *d) { timelib_sll leapyear; timelib_sll days_this_month; timelib_sll last_month, last_year; timelib_sll days_last_month; /* can jump an entire leap year period quickly */ if (*d >= DAYS_PER_LYEAR_PERIOD || *d <= -DAYS_PER_LYEAR_PERIOD) { *y += YEARS_PER_LYEAR_PERIOD * (*d / DAYS_PER_LYEAR_PERIOD); *d -= DAYS_PER_LYEAR_PERIOD * (*d / DAYS_PER_LYEAR_PERIOD); } do_range_limit(1, 13, 12, m, y); leapyear = timelib_is_leap(*y); days_this_month = leapyear ? days_in_month_leap[*m] : days_in_month[*m]; last_month = (*m) - 1; if (last_month < 1) { last_month += 12; last_year = (*y) - 1; } else { last_year = (*y); } leapyear = timelib_is_leap(last_year); days_last_month = leapyear ? days_in_month_leap[last_month] : days_in_month[last_month]; if (*d <= 0) { *d += days_last_month; (*m)--; return 1; } if (*d > days_this_month) { *d -= days_this_month; (*m)++; return 1; } return 0; } static void do_adjust_for_weekday(timelib_time* time) { timelib_sll current_dow, difference; current_dow = timelib_day_of_week(time->y, time->m, time->d); if (time->relative.weekday_behavior == 2) { /* To make "this week" work, where the current DOW is a "sunday" */ if (current_dow == 0 && time->relative.weekday != 0) { time->relative.weekday = -6; } /* To make "sunday this week" work, where the current DOW is not a * "sunday" */ if (time->relative.weekday == 0 && current_dow != 0) { time->relative.weekday = 7; } time->d -= current_dow; time->d += time->relative.weekday; return; } difference = time->relative.weekday - current_dow; if ((time->relative.d < 0 && difference < 0) || (time->relative.d >= 0 && difference <= -time->relative.weekday_behavior)) { difference += 7; } if (time->relative.weekday >= 0) { time->d += difference; } else { time->d -= (7 - (abs(time->relative.weekday) - current_dow)); } time->relative.have_weekday_relative = 0; } void timelib_do_rel_normalize(timelib_time *base, timelib_rel_time *rt) { do_range_limit(0, 60, 60, &rt->s, &rt->i); do_range_limit(0, 60, 60, &rt->i, &rt->h); do_range_limit(0, 24, 24, &rt->h, &rt->d); do_range_limit(0, 12, 12, &rt->m, &rt->y); do_range_limit_days_relative(&base->y, &base->m, &rt->y, &rt->m, &rt->d, rt->invert); do_range_limit(0, 12, 12, &rt->m, &rt->y); } void timelib_do_normalize(timelib_time* time) { if (time->s != TIMELIB_UNSET) do_range_limit(0, 60, 60, &time->s, &time->i); if (time->s != TIMELIB_UNSET) do_range_limit(0, 60, 60, &time->i, &time->h); if (time->s != TIMELIB_UNSET) do_range_limit(0, 24, 24, &time->h, &time->d); do_range_limit(1, 13, 12, &time->m, &time->y); do {} while (do_range_limit_days(&time->y, &time->m, &time->d)); do_range_limit(1, 13, 12, &time->m, &time->y); } static void do_adjust_relative(timelib_time* time) { if (time->relative.have_weekday_relative) { do_adjust_for_weekday(time); } timelib_do_normalize(time); if (time->have_relative) { time->s += time->relative.s; time->i += time->relative.i; time->h += time->relative.h; time->d += time->relative.d; time->m += time->relative.m; time->y += time->relative.y; } switch (time->relative.first_last_day_of) { case TIMELIB_SPECIAL_FIRST_DAY_OF_MONTH: /* first */ time->d = 1; break; case TIMELIB_SPECIAL_LAST_DAY_OF_MONTH: /* last */ time->d = 0; time->m++; break; } timelib_do_normalize(time); } static void do_adjust_special_weekday(timelib_time* time) { timelib_sll count, dow, rem; count = time->relative.special.amount; dow = timelib_day_of_week(time->y, time->m, time->d); /* Add increments of 5 weekdays as a week, leaving the DOW unchanged. */ time->d += (count / 5) * 7; /* Deal with the remainder. */ rem = (count % 5); if (count > 0) { if (rem == 0) { /* Head back to Friday if we stop on the weekend. */ if (dow == 0) { time->d -= 2; } else if (dow == 6) { time->d -= 1; } } else if (dow == 6) { /* We ended up on Saturday, but there's still work to do, so move * to Sunday and continue from there. */ time->d += 1; } else if (dow + rem > 5) { /* We're on a weekday, but we're going past Friday, so skip right * over the weekend. */ time->d += 2; } } else { /* Completely mirror the forward direction. This also covers the 0 * case, since if we start on the weekend, we want to move forward as * if we stopped there while going backwards. */ if (rem == 0) { if (dow == 6) { time->d += 2; } else if (dow == 0) { time->d += 1; } } else if (dow == 0) { time->d -= 1; } else if (dow + rem < 1) { time->d -= 2; } } time->d += rem; } static void do_adjust_special(timelib_time* time) { if (time->relative.have_special_relative) { switch (time->relative.special.type) { case TIMELIB_SPECIAL_WEEKDAY: do_adjust_special_weekday(time); break; } } timelib_do_normalize(time); memset(&(time->relative.special), 0, sizeof(time->relative.special)); } static void do_adjust_special_early(timelib_time* time) { if (time->relative.have_special_relative) { switch (time->relative.special.type) { case TIMELIB_SPECIAL_DAY_OF_WEEK_IN_MONTH: time->d = 1; time->m += time->relative.m; time->relative.m = 0; break; case TIMELIB_SPECIAL_LAST_DAY_OF_WEEK_IN_MONTH: time->d = 1; time->m += time->relative.m + 1; time->relative.m = 0; break; } } switch (time->relative.first_last_day_of) { case TIMELIB_SPECIAL_FIRST_DAY_OF_MONTH: /* first */ time->d = 1; break; case TIMELIB_SPECIAL_LAST_DAY_OF_MONTH: /* last */ time->d = 0; time->m++; break; } timelib_do_normalize(time); } static timelib_sll do_years(timelib_sll year) { timelib_sll i; timelib_sll res = 0; timelib_sll eras; eras = (year - 1970) / 40000; if (eras != 0) { year = year - (eras * 40000); res += (SECS_PER_ERA * eras * 100); } if (year >= 1970) { for (i = year - 1; i >= 1970; i--) { if (timelib_is_leap(i)) { res += (DAYS_PER_LYEAR * SECS_PER_DAY); } else { res += (DAYS_PER_YEAR * SECS_PER_DAY); } } } else { for (i = 1969; i >= year; i--) { if (timelib_is_leap(i)) { res -= (DAYS_PER_LYEAR * SECS_PER_DAY); } else { res -= (DAYS_PER_YEAR * SECS_PER_DAY); } } } return res; } static timelib_sll do_months(timelib_ull month, timelib_ull year) { if (timelib_is_leap(year)) { return ((month_tab_leap[month - 1] + 1) * SECS_PER_DAY); } else { return ((month_tab[month - 1]) * SECS_PER_DAY); } } static timelib_sll do_days(timelib_ull day) { return ((day - 1) * SECS_PER_DAY); } static timelib_sll do_time(timelib_ull hour, timelib_ull minute, timelib_ull second) { timelib_sll res = 0; res += hour * 3600; res += minute * 60; res += second; return res; } static timelib_sll do_adjust_timezone(timelib_time *tz, timelib_tzinfo *tzi) { switch (tz->zone_type) { case TIMELIB_ZONETYPE_OFFSET: tz->is_localtime = 1; return tz->z * 60; break; case TIMELIB_ZONETYPE_ABBR: { timelib_sll tmp; tz->is_localtime = 1; tmp = tz->z; tmp -= tz->dst * 60; tmp *= 60; return tmp; } break; case TIMELIB_ZONETYPE_ID: tzi = tz->tz_info; /* Break intentionally missing */ default: /* No timezone in struct, fallback to reference if possible */ if (tzi) { timelib_time_offset *before, *after; timelib_sll tmp; int in_transistion; tz->is_localtime = 1; before = timelib_get_time_zone_info(tz->sse, tzi); after = timelib_get_time_zone_info(tz->sse - before->offset, tzi); timelib_set_timezone(tz, tzi); in_transistion = ( ((tz->sse - after->offset) >= (after->transistion_time + (before->offset - after->offset))) && ((tz->sse - after->offset) < after->transistion_time) ); if ((before->offset != after->offset) && !in_transistion) { tmp = -after->offset; } else { tmp = -tz->z; } timelib_time_offset_dtor(before); timelib_time_offset_dtor(after); { timelib_time_offset *gmt_offset; gmt_offset = timelib_get_time_zone_info(tz->sse + tmp, tzi); tz->z = gmt_offset->offset; tz->dst = gmt_offset->is_dst; if (tz->tz_abbr) { timelib_free(tz->tz_abbr); } tz->tz_abbr = timelib_strdup(gmt_offset->abbr); timelib_time_offset_dtor(gmt_offset); } return tmp; } } return 0; } void timelib_update_ts(timelib_time* time, timelib_tzinfo* tzi) { timelib_sll res = 0; do_adjust_special_early(time); do_adjust_relative(time); do_adjust_special(time); res += do_years(time->y); res += do_months(time->m, time->y); res += do_days(time->d); res += do_time(time->h, time->i, time->s); time->sse = res; res += do_adjust_timezone(time, tzi); time->sse = res; time->sse_uptodate = 1; time->have_relative = time->relative.have_weekday_relative = time->relative.have_special_relative = 0; } #if 0 int main(void) { timelib_sll res; timelib_time time; time = timelib_strtotime("10 Feb 2005 06:07:03 PM CET"); /* 1108055223 */ printf ("%04d-%02d-%02d %02d:%02d:%02d.%-5d %+04d %1d", time.y, time.m, time.d, time.h, time.i, time.s, time.f, time.z, time.dst); if (time.have_relative) { printf ("%3dY %3dM %3dD / %3dH %3dM %3dS", time.relative.y, time.relative.m, time.relative.d, time.relative.h, time.relative.i, time.relative.s); } if (time.have_weekday_relative) { printf (" / %d", time.relative.weekday); } res = time2unixtime(&time); printf("%Ld\n", res); return 0; } #endif lib/interval.c000064400000011613147577114150007320 0ustar00/* * The MIT License (MIT) * * Copyright (c) 2015 Derick Rethans * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "timelib.h" #include timelib_rel_time *timelib_diff(timelib_time *one, timelib_time *two) { timelib_rel_time *rt; timelib_time *swp; timelib_sll dst_corr = 0 ,dst_h_corr = 0, dst_m_corr = 0; timelib_time one_backup, two_backup; rt = timelib_rel_time_ctor(); rt->invert = 0; if (one->sse > two->sse) { swp = two; two = one; one = swp; rt->invert = 1; } /* Calculate correction for DST change over, but only if the TZ type is ID * and it's the same */ if (one->zone_type == 3 && two->zone_type == 3 && (strcmp(one->tz_info->name, two->tz_info->name) == 0) && (one->z != two->z)) { dst_corr = two->z - one->z; dst_h_corr = dst_corr / 3600; dst_m_corr = (dst_corr % 3600) / 60; } /* Save old TZ info */ memcpy(&one_backup, one, sizeof(one_backup)); memcpy(&two_backup, two, sizeof(two_backup)); timelib_apply_localtime(one, 0); timelib_apply_localtime(two, 0); rt->y = two->y - one->y; rt->m = two->m - one->m; rt->d = two->d - one->d; rt->h = two->h - one->h; rt->i = two->i - one->i; rt->s = two->s - one->s; if (one_backup.dst == 0 && two_backup.dst == 1 && two->sse >= one->sse + 86400 - dst_corr) { rt->h += dst_h_corr; rt->i += dst_m_corr; } rt->days = fabs(floor((one->sse - two->sse - (dst_h_corr * 3600) - (dst_m_corr * 60)) / 86400)); timelib_do_rel_normalize(rt->invert ? one : two, rt); /* We need to do this after normalisation otherwise we can't get "24H" */ if (one_backup.dst == 1 && two_backup.dst == 0 && two->sse >= one->sse + 86400) { if (two->sse < one->sse + 86400 - dst_corr) { rt->d--; rt->h = 24; } else { rt->h += dst_h_corr; rt->i += dst_m_corr; } } /* Restore old TZ info */ memcpy(one, &one_backup, sizeof(one_backup)); memcpy(two, &two_backup, sizeof(two_backup)); return rt; } timelib_time *timelib_add(timelib_time *old_time, timelib_rel_time *interval) { int bias = 1; timelib_time *t = timelib_time_clone(old_time); if (interval->have_weekday_relative || interval->have_special_relative) { memcpy(&t->relative, interval, sizeof(struct timelib_rel_time)); } else { if (interval->invert) { bias = -1; } memset(&t->relative, 0, sizeof(struct timelib_rel_time)); t->relative.y = interval->y * bias; t->relative.m = interval->m * bias; t->relative.d = interval->d * bias; t->relative.h = interval->h * bias; t->relative.i = interval->i * bias; t->relative.s = interval->s * bias; } t->have_relative = 1; t->sse_uptodate = 0; timelib_update_ts(t, NULL); // printf("%lld %lld %d\n", old_time->dst, t->dst, (t->sse - old_time->sse)); /* Adjust for backwards DST changeover */ if (old_time->dst == 1 && t->dst == 0 && !interval->y && !interval->m && !interval->d) { t->sse -= old_time->z; t->sse += t->z; } timelib_update_from_sse(t); t->have_relative = 0; return t; } timelib_time *timelib_sub(timelib_time *old_time, timelib_rel_time *interval) { int bias = 1; timelib_time *t = timelib_time_clone(old_time); if (interval->invert) { bias = -1; } memset(&t->relative, 0, sizeof(struct timelib_rel_time)); t->relative.y = 0 - (interval->y * bias); t->relative.m = 0 - (interval->m * bias); t->relative.d = 0 - (interval->d * bias); t->relative.h = 0 - (interval->h * bias); t->relative.i = 0 - (interval->i * bias); t->relative.s = 0 - (interval->s * bias); t->have_relative = 1; t->sse_uptodate = 0; timelib_update_ts(t, NULL); /* Adjust for backwards DST changeover */ if (old_time->dst == 1 && t->dst == 0 && !interval->y && !interval->m && !interval->d) { t->sse -= old_time->z; t->sse += t->z; } /* Adjust for forwards DST changeover */ if (old_time->dst == 0 && t->dst == 1 && !interval->y && !interval->m && !interval->d ) { t->sse -= old_time->z; t->sse += t->z; } timelib_update_from_sse(t); t->have_relative = 0; return t; } lib/astro.c000064400000026466147577114150006640 0ustar00/* * The MIT License (MIT) * * Copyright (c) 2015 Derick Rethans * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /* | Algorithms are taken from a public domain source by Paul | | Schlyter, who wrote this in December 1992 | */ #include #include #include "timelib.h" #define days_since_2000_Jan_0(y,m,d) \ (367L*(y)-((7*((y)+(((m)+9)/12)))/4)+((275*(m))/9)+(d)-730530L) #ifndef PI #define PI 3.1415926535897932384 #endif #define RADEG ( 180.0 / PI ) #define DEGRAD ( PI / 180.0 ) /* The trigonometric functions in degrees */ #define sind(x) sin((x)*DEGRAD) #define cosd(x) cos((x)*DEGRAD) #define tand(x) tan((x)*DEGRAD) #define atand(x) (RADEG*atan(x)) #define asind(x) (RADEG*asin(x)) #define acosd(x) (RADEG*acos(x)) #define atan2d(y,x) (RADEG*atan2(y,x)) /* Following are some macros around the "workhorse" function __daylen__ */ /* They mainly fill in the desired values for the reference altitude */ /* below the horizon, and also selects whether this altitude should */ /* refer to the Sun's center or its upper limb. */ #include "astro.h" /******************************************************************/ /* This function reduces any angle to within the first revolution */ /* by subtracting or adding even multiples of 360.0 until the */ /* result is >= 0.0 and < 360.0 */ /******************************************************************/ #define INV360 (1.0 / 360.0) /*****************************************/ /* Reduce angle to within 0..360 degrees */ /*****************************************/ static double astro_revolution(double x) { return (x - 360.0 * floor(x * INV360)); } /*********************************************/ /* Reduce angle to within +180..+180 degrees */ /*********************************************/ static double astro_rev180( double x ) { return (x - 360.0 * floor(x * INV360 + 0.5)); } /*******************************************************************/ /* This function computes GMST0, the Greenwich Mean Sidereal Time */ /* at 0h UT (i.e. the sidereal time at the Greenwhich meridian at */ /* 0h UT). GMST is then the sidereal time at Greenwich at any */ /* time of the day. I've generalized GMST0 as well, and define it */ /* as: GMST0 = GMST - UT -- this allows GMST0 to be computed at */ /* other times than 0h UT as well. While this sounds somewhat */ /* contradictory, it is very practical: instead of computing */ /* GMST like: */ /* */ /* GMST = (GMST0) + UT * (366.2422/365.2422) */ /* */ /* where (GMST0) is the GMST last time UT was 0 hours, one simply */ /* computes: */ /* */ /* GMST = GMST0 + UT */ /* */ /* where GMST0 is the GMST "at 0h UT" but at the current moment! */ /* Defined in this way, GMST0 will increase with about 4 min a */ /* day. It also happens that GMST0 (in degrees, 1 hr = 15 degr) */ /* is equal to the Sun's mean longitude plus/minus 180 degrees! */ /* (if we neglect aberration, which amounts to 20 seconds of arc */ /* or 1.33 seconds of time) */ /* */ /*******************************************************************/ static double astro_GMST0(double d) { double sidtim0; /* Sidtime at 0h UT = L (Sun's mean longitude) + 180.0 degr */ /* L = M + w, as defined in sunpos(). Since I'm too lazy to */ /* add these numbers, I'll let the C compiler do it for me. */ /* Any decent C compiler will add the constants at compile */ /* time, imposing no runtime or code overhead. */ sidtim0 = astro_revolution((180.0 + 356.0470 + 282.9404) + (0.9856002585 + 4.70935E-5) * d); return sidtim0; } /* This function computes the Sun's position at any instant */ /******************************************************/ /* Computes the Sun's ecliptic longitude and distance */ /* at an instant given in d, number of days since */ /* 2000 Jan 0.0. The Sun's ecliptic latitude is not */ /* computed, since it's always very near 0. */ /******************************************************/ static void astro_sunpos(double d, double *lon, double *r) { double M, /* Mean anomaly of the Sun */ w, /* Mean longitude of perihelion */ /* Note: Sun's mean longitude = M + w */ e, /* Eccentricity of Earth's orbit */ E, /* Eccentric anomaly */ x, y, /* x, y coordinates in orbit */ v; /* True anomaly */ /* Compute mean elements */ M = astro_revolution(356.0470 + 0.9856002585 * d); w = 282.9404 + 4.70935E-5 * d; e = 0.016709 - 1.151E-9 * d; /* Compute true longitude and radius vector */ E = M + e * RADEG * sind(M) * (1.0 + e * cosd(M)); x = cosd(E) - e; y = sqrt(1.0 - e*e) * sind(E); *r = sqrt(x*x + y*y); /* Solar distance */ v = atan2d(y, x); /* True anomaly */ *lon = v + w; /* True solar longitude */ if (*lon >= 360.0) { *lon -= 360.0; /* Make it 0..360 degrees */ } } static void astro_sun_RA_dec(double d, double *RA, double *dec, double *r) { double lon, obl_ecl, x, y, z; /* Compute Sun's ecliptical coordinates */ astro_sunpos(d, &lon, r); /* Compute ecliptic rectangular coordinates (z=0) */ x = *r * cosd(lon); y = *r * sind(lon); /* Compute obliquity of ecliptic (inclination of Earth's axis) */ obl_ecl = 23.4393 - 3.563E-7 * d; /* Convert to equatorial rectangular coordinates - x is unchanged */ z = y * sind(obl_ecl); y = y * cosd(obl_ecl); /* Convert to spherical coordinates */ *RA = atan2d(y, x); *dec = atan2d(z, sqrt(x*x + y*y)); } /** * Note: timestamp = unixtimestamp (NEEDS to be 00:00:00 UT) * Eastern longitude positive, Western longitude negative * Northern latitude positive, Southern latitude negative * The longitude value IS critical in this function! * altit = the altitude which the Sun should cross * Set to -35/60 degrees for rise/set, -6 degrees * for civil, -12 degrees for nautical and -18 * degrees for astronomical twilight. * upper_limb: non-zero -> upper limb, zero -> center * Set to non-zero (e.g. 1) when computing rise/set * times, and to zero when computing start/end of * twilight. * *rise = where to store the rise time * *set = where to store the set time * Both times are relative to the specified altitude, * and thus this function can be used to compute * various twilight times, as well as rise/set times * Return value: 0 = sun rises/sets this day, times stored at * *trise and *tset. * +1 = sun above the specified "horizon" 24 hours. * *trise set to time when the sun is at south, * minus 12 hours while *tset is set to the south * time plus 12 hours. "Day" length = 24 hours * -1 = sun is below the specified "horizon" 24 hours * "Day" length = 0 hours, *trise and *tset are * both set to the time when the sun is at south. * */ int timelib_astro_rise_set_altitude(timelib_time *t_loc, double lon, double lat, double altit, int upper_limb, double *h_rise, double *h_set, timelib_sll *ts_rise, timelib_sll *ts_set, timelib_sll *ts_transit) { double d, /* Days since 2000 Jan 0.0 (negative before) */ sr, /* Solar distance, astronomical units */ sRA, /* Sun's Right Ascension */ sdec, /* Sun's declination */ sradius, /* Sun's apparent radius */ t, /* Diurnal arc */ tsouth, /* Time when Sun is at south */ sidtime; /* Local sidereal time */ timelib_time *t_utc; timelib_sll timestamp, old_sse; int rc = 0; /* Return cde from function - usually 0 */ /* Normalize time */ old_sse = t_loc->sse; t_loc->h = 12; t_loc->i = t_loc->s = 0; timelib_update_ts(t_loc, NULL); /* Calculate TS belonging to UTC 00:00 of the current day */ t_utc = timelib_time_ctor(); t_utc->y = t_loc->y; t_utc->m = t_loc->m; t_utc->d = t_loc->d; t_utc->h = t_utc->i = t_utc->s = 0; timelib_update_ts(t_utc, NULL); /* Compute d of 12h local mean solar time */ timestamp = t_loc->sse; d = timelib_ts_to_juliandate(timestamp) - lon/360.0; /* Compute local sidereal time of this moment */ sidtime = astro_revolution(astro_GMST0(d) + 180.0 + lon); /* Compute Sun's RA + Decl at this moment */ astro_sun_RA_dec( d, &sRA, &sdec, &sr ); /* Compute time when Sun is at south - in hours UT */ tsouth = 12.0 - astro_rev180(sidtime - sRA) / 15.0; /* Compute the Sun's apparent radius, degrees */ sradius = 0.2666 / sr; /* Do correction to upper limb, if necessary */ if (upper_limb) { altit -= sradius; } /* Compute the diurnal arc that the Sun traverses to reach */ /* the specified altitude altit: */ { double cost; cost = (sind(altit) - sind(lat) * sind(sdec)) / (cosd(lat) * cosd(sdec)); *ts_transit = t_utc->sse + (tsouth * 3600); if (cost >= 1.0) { rc = -1; t = 0.0; /* Sun always below altit */ *ts_rise = *ts_set = t_utc->sse + (tsouth * 3600); } else if (cost <= -1.0) { rc = +1; t = 12.0; /* Sun always above altit */ *ts_rise = t_loc->sse - (12 * 3600); *ts_set = t_loc->sse + (12 * 3600); } else { t = acosd(cost) / 15.0; /* The diurnal arc, hours */ /* Store rise and set times - as Unix Timestamp */ *ts_rise = ((tsouth - t) * 3600) + t_utc->sse; *ts_set = ((tsouth + t) * 3600) + t_utc->sse; *h_rise = (tsouth - t); *h_set = (tsouth + t); } } /* Kill temporary time and restore original sse */ timelib_time_dtor(t_utc); t_loc->sse = old_sse; return rc; } double timelib_ts_to_juliandate(timelib_sll ts) { double tmp; tmp = ts; tmp /= 86400; tmp += 2440587.5; tmp -= 2451543; return tmp; } lib/timelib.c000064400000021074147577114150007123 0ustar00/* * The MIT License (MIT) * * Copyright (c) 2015 Derick Rethans * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "timelib.h" #include #include #define TIMELIB_TIME_FREE(m) \ if (m) { \ timelib_free(m); \ m = NULL; \ } \ #define TIMELIB_LLABS(y) (y < 0 ? (y * -1) : y) #define HOUR(a) (int)(a * 60) timelib_time* timelib_time_ctor(void) { timelib_time *t; t = timelib_calloc(1, sizeof(timelib_time)); return t; } timelib_rel_time* timelib_rel_time_ctor(void) { timelib_rel_time *t; t = timelib_calloc(1, sizeof(timelib_rel_time)); return t; } timelib_time* timelib_time_clone(timelib_time *orig) { timelib_time *tmp = timelib_time_ctor(); memcpy(tmp, orig, sizeof(timelib_time)); if (orig->tz_abbr) { tmp->tz_abbr = timelib_strdup(orig->tz_abbr); } if (orig->tz_info) { tmp->tz_info = orig->tz_info; } return tmp; } int timelib_time_compare(timelib_time *t1, timelib_time *t2) { if (t1->sse == t2->sse) { if (t1->f == t2->f) { return 0; } if (t1->sse < 0) { return (t1->f < t2->f) ? 1 : -1; } else { return (t1->f < t2->f) ? -1 : 1; } } return (t1->sse < t2->sse) ? -1 : 1; } timelib_rel_time* timelib_rel_time_clone(timelib_rel_time *rel) { timelib_rel_time *tmp = timelib_rel_time_ctor(); memcpy(tmp, rel, sizeof(timelib_rel_time)); return tmp; } void timelib_time_tz_abbr_update(timelib_time* tm, char* tz_abbr) { unsigned int i; size_t tz_abbr_len = strlen(tz_abbr); TIMELIB_TIME_FREE(tm->tz_abbr); tm->tz_abbr = timelib_strdup(tz_abbr); for (i = 0; i < tz_abbr_len; i++) { tm->tz_abbr[i] = toupper(tz_abbr[i]); } } void timelib_time_dtor(timelib_time* t) { TIMELIB_TIME_FREE(t->tz_abbr); TIMELIB_TIME_FREE(t); } void timelib_rel_time_dtor(timelib_rel_time* t) { TIMELIB_TIME_FREE(t); } timelib_time_offset* timelib_time_offset_ctor(void) { timelib_time_offset *t; t = timelib_calloc(1, sizeof(timelib_time_offset)); return t; } void timelib_time_offset_dtor(timelib_time_offset* t) { TIMELIB_TIME_FREE(t->abbr); TIMELIB_TIME_FREE(t); } timelib_tzinfo* timelib_tzinfo_ctor(char *name) { timelib_tzinfo *t; t = timelib_calloc(1, sizeof(timelib_tzinfo)); t->name = timelib_strdup(name); return t; } timelib_tzinfo *timelib_tzinfo_clone(timelib_tzinfo *tz) { timelib_tzinfo *tmp = timelib_tzinfo_ctor(tz->name); tmp->bit32.ttisgmtcnt = tz->bit32.ttisgmtcnt; tmp->bit32.ttisstdcnt = tz->bit32.ttisstdcnt; tmp->bit32.leapcnt = tz->bit32.leapcnt; tmp->bit32.timecnt = tz->bit32.timecnt; tmp->bit32.typecnt = tz->bit32.typecnt; tmp->bit32.charcnt = tz->bit32.charcnt; tmp->trans = (int32_t *) timelib_malloc(tz->bit32.timecnt * sizeof(int32_t)); tmp->trans_idx = (unsigned char*) timelib_malloc(tz->bit32.timecnt * sizeof(unsigned char)); memcpy(tmp->trans, tz->trans, tz->bit32.timecnt * sizeof(int32_t)); memcpy(tmp->trans_idx, tz->trans_idx, tz->bit32.timecnt * sizeof(unsigned char)); tmp->type = (ttinfo*) timelib_malloc(tz->bit32.typecnt * sizeof(struct ttinfo)); memcpy(tmp->type, tz->type, tz->bit32.typecnt * sizeof(struct ttinfo)); tmp->timezone_abbr = (char*) timelib_malloc(tz->bit32.charcnt); memcpy(tmp->timezone_abbr, tz->timezone_abbr, tz->bit32.charcnt); tmp->leap_times = (tlinfo*) timelib_malloc(tz->bit32.leapcnt * sizeof(tlinfo)); memcpy(tmp->leap_times, tz->leap_times, tz->bit32.leapcnt * sizeof(tlinfo)); return tmp; } void timelib_tzinfo_dtor(timelib_tzinfo *tz) { TIMELIB_TIME_FREE(tz->name); TIMELIB_TIME_FREE(tz->trans); TIMELIB_TIME_FREE(tz->trans_idx); TIMELIB_TIME_FREE(tz->type); TIMELIB_TIME_FREE(tz->timezone_abbr); TIMELIB_TIME_FREE(tz->leap_times); TIMELIB_TIME_FREE(tz->location.comments); TIMELIB_TIME_FREE(tz); tz = NULL; } char *timelib_get_tz_abbr_ptr(timelib_time *t) { if (!t->sse_uptodate) { timelib_update_ts(t, NULL); }; return t->tz_abbr; } void timelib_error_container_dtor(timelib_error_container *errors) { int i; for (i = 0; i < errors->warning_count; i++) { timelib_free(errors->warning_messages[i].message); } timelib_free(errors->warning_messages); for (i = 0; i < errors->error_count; i++) { timelib_free(errors->error_messages[i].message); } timelib_free(errors->error_messages); timelib_free(errors); } timelib_long timelib_date_to_int(timelib_time *d, int *error) { timelib_sll ts; ts = d->sse; if (ts < TIMELIB_LONG_MIN || ts > TIMELIB_LONG_MAX) { if (error) { *error = 1; } return 0; } if (error) { *error = 0; } return (timelib_long) d->sse; } void timelib_decimal_hour_to_hms(double h, int *hour, int *min, int *sec) { *hour = floor(h); *min = floor((h - *hour) * 60); *sec = (h - *hour - ((float) *min / 60)) * 3600; } void timelib_dump_date(timelib_time *d, int options) { if ((options & 2) == 2) { printf("TYPE: %d ", d->zone_type); } printf("TS: %lld | %s%04lld-%02lld-%02lld %02lld:%02lld:%02lld", d->sse, d->y < 0 ? "-" : "", TIMELIB_LLABS(d->y), d->m, d->d, d->h, d->i, d->s); if (d->f > +0.0) { printf(" %.5f", d->f); } if (d->is_localtime) { switch (d->zone_type) { case TIMELIB_ZONETYPE_OFFSET: /* Only offset */ printf(" GMT %05d%s", d->z, d->dst == 1 ? " (DST)" : ""); break; case TIMELIB_ZONETYPE_ID: /* Timezone struct */ /* Show abbreviation if wanted */ if (d->tz_abbr) { printf(" %s", d->tz_abbr); } /* Do we have a TimeZone struct? */ if (d->tz_info) { printf(" %s", d->tz_info->name); } break; case TIMELIB_ZONETYPE_ABBR: printf(" %s", d->tz_abbr); printf(" %05d%s", d->z, d->dst == 1 ? " (DST)" : ""); break; } } if ((options & 1) == 1) { if (d->have_relative) { printf("%3lldY %3lldM %3lldD / %3lldH %3lldM %3lldS", d->relative.y, d->relative.m, d->relative.d, d->relative.h, d->relative.i, d->relative.s); if (d->relative.first_last_day_of != 0) { switch (d->relative.first_last_day_of) { case 1: printf(" / first day of"); break; case 2: printf(" / last day of"); break; } } if (d->relative.have_weekday_relative) { printf(" / %d.%d", d->relative.weekday, d->relative.weekday_behavior); } if (d->relative.have_special_relative) { switch (d->relative.special.type) { case TIMELIB_SPECIAL_WEEKDAY: printf(" / %lld weekday", d->relative.special.amount); break; case TIMELIB_SPECIAL_DAY_OF_WEEK_IN_MONTH: printf(" / x y of z month"); break; case TIMELIB_SPECIAL_LAST_DAY_OF_WEEK_IN_MONTH: printf(" / last y of z month"); break; } } } } printf("\n"); } void timelib_dump_rel_time(timelib_rel_time *d) { printf("%3lldY %3lldM %3lldD / %3lldH %3lldM %3lldS (days: %lld)%s", d->y, d->m, d->d, d->h, d->i, d->s, d->days, d->invert ? " inverted" : ""); if (d->first_last_day_of != 0) { switch (d->first_last_day_of) { case 1: printf(" / first day of"); break; case 2: printf(" / last day of"); break; } } printf("\n"); } timelib_long timelib_parse_tz_cor(char **ptr) { char *begin = *ptr, *end; timelib_long tmp; while (isdigit(**ptr) || **ptr == ':') { ++*ptr; } end = *ptr; switch (end - begin) { case 1: /* H */ case 2: /* HH */ return HOUR(strtol(begin, NULL, 10)); break; case 3: /* H:M */ case 4: /* H:MM, HH:M, HHMM */ if (begin[1] == ':') { tmp = HOUR(strtol(begin, NULL, 10)) + strtol(begin + 2, NULL, 10); return tmp; } else if (begin[2] == ':') { tmp = HOUR(strtol(begin, NULL, 10)) + strtol(begin + 3, NULL, 10); return tmp; } else { tmp = strtol(begin, NULL, 10); return HOUR(tmp / 100) + tmp % 100; } case 5: /* HH:MM */ tmp = HOUR(strtol(begin, NULL, 10)) + strtol(begin + 3, NULL, 10); return tmp; } return 0; } lib/unixtime2tm.c000064400000016760147577114150007771 0ustar00/* * The MIT License (MIT) * * Copyright (c) 2015 Derick Rethans * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "timelib.h" #include #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #else #include #endif static int month_tab_leap[12] = { -1, 30, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; static int month_tab[12] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; /* Converts a Unix timestamp value into broken down time, in GMT */ void timelib_unixtime2gmt(timelib_time* tm, timelib_sll ts) { timelib_sll days, remainder, tmp_days; timelib_sll cur_year = 1970; timelib_sll i; timelib_sll hours, minutes, seconds; int *months; days = ts / SECS_PER_DAY; remainder = ts - (days * SECS_PER_DAY); if (ts < 0 && remainder == 0) { days++; remainder -= SECS_PER_DAY; } TIMELIB_DEBUG(printf("days=%lld, rem=%lld\n", days, remainder);); if (ts >= 0) { tmp_days = days + 1; if (tmp_days >= DAYS_PER_LYEAR_PERIOD || tmp_days <= -DAYS_PER_LYEAR_PERIOD) { cur_year += YEARS_PER_LYEAR_PERIOD * (tmp_days / DAYS_PER_LYEAR_PERIOD); tmp_days -= DAYS_PER_LYEAR_PERIOD * (tmp_days / DAYS_PER_LYEAR_PERIOD); } while (tmp_days >= DAYS_PER_LYEAR) { cur_year++; if (timelib_is_leap(cur_year)) { tmp_days -= DAYS_PER_LYEAR; } else { tmp_days -= DAYS_PER_YEAR; } } } else { tmp_days = days; /* Guess why this might be for, it has to do with a pope ;-). It's also * only valid for Great Brittain and it's colonies. It needs fixing for * other locales. *sigh*, why is this crap so complex! */ /* if (ts <= TIMELIB_LL_CONST(-6857352000)) { tmp_days -= 11; } */ while (tmp_days <= 0) { if (tmp_days < -1460970) { cur_year -= 4000; TIMELIB_DEBUG(printf("tmp_days=%lld, year=%lld\n", tmp_days, cur_year);); tmp_days += 1460970; } else { cur_year--; TIMELIB_DEBUG(printf("tmp_days=%lld, year=%lld\n", tmp_days, cur_year);); if (timelib_is_leap(cur_year)) { tmp_days += DAYS_PER_LYEAR; } else { tmp_days += DAYS_PER_YEAR; } } } remainder += SECS_PER_DAY; } TIMELIB_DEBUG(printf("tmp_days=%lld, year=%lld\n", tmp_days, cur_year);); months = timelib_is_leap(cur_year) ? month_tab_leap : month_tab; if (timelib_is_leap(cur_year) && cur_year < 1970) { tmp_days--; } i = 11; while (i > 0) { TIMELIB_DEBUG(printf("month=%lld (%d)\n", i, months[i]);); if (tmp_days > months[i]) { break; } i--; } TIMELIB_DEBUG(printf("A: ts=%lld, year=%lld, month=%lld, day=%lld,", ts, cur_year, i + 1, tmp_days - months[i]);); /* That was the date, now we do the tiiiime */ hours = remainder / 3600; minutes = (remainder - hours * 3600) / 60; seconds = remainder % 60; TIMELIB_DEBUG(printf(" hour=%lld, minute=%lld, second=%lld\n", hours, minutes, seconds);); tm->y = cur_year; tm->m = i + 1; tm->d = tmp_days - months[i]; tm->h = hours; tm->i = minutes; tm->s = seconds; tm->z = 0; tm->dst = 0; tm->sse = ts; tm->sse_uptodate = 1; tm->tim_uptodate = 1; tm->is_localtime = 0; } void timelib_update_from_sse(timelib_time *tm) { timelib_sll sse; int z = tm->z; signed int dst = tm->dst; sse = tm->sse; switch (tm->zone_type) { case TIMELIB_ZONETYPE_ABBR: case TIMELIB_ZONETYPE_OFFSET: { timelib_unixtime2gmt(tm, tm->sse - (tm->z * 60) + (tm->dst * 3600)); goto cleanup; } case TIMELIB_ZONETYPE_ID: { timelib_time_offset *gmt_offset; gmt_offset = timelib_get_time_zone_info(tm->sse, tm->tz_info); timelib_unixtime2gmt(tm, tm->sse + gmt_offset->offset); timelib_time_offset_dtor(gmt_offset); goto cleanup; } default: timelib_unixtime2gmt(tm, tm->sse); goto cleanup; } cleanup: tm->sse = sse; tm->is_localtime = 1; tm->have_zone = 1; tm->z = z; tm->dst = dst; } void timelib_unixtime2local(timelib_time *tm, timelib_sll ts) { timelib_time_offset *gmt_offset; timelib_tzinfo *tz = tm->tz_info; switch (tm->zone_type) { case TIMELIB_ZONETYPE_ABBR: case TIMELIB_ZONETYPE_OFFSET: { int z = tm->z; signed int dst = tm->dst; timelib_unixtime2gmt(tm, ts - (tm->z * 60) + (tm->dst * 3600)); tm->z = z; tm->dst = dst; break; } case TIMELIB_ZONETYPE_ID: gmt_offset = timelib_get_time_zone_info(ts, tz); timelib_unixtime2gmt(tm, ts + gmt_offset->offset); /* we need to reset the sse here as unixtime2gmt modifies it */ tm->sse = ts; tm->dst = gmt_offset->is_dst; tm->z = gmt_offset->offset; tm->tz_info = tz; timelib_time_tz_abbr_update(tm, gmt_offset->abbr); timelib_time_offset_dtor(gmt_offset); break; default: tm->is_localtime = 0; tm->have_zone = 0; return; } tm->is_localtime = 1; tm->have_zone = 1; } void timelib_set_timezone_from_offset(timelib_time *t, timelib_sll utc_offset) { if (t->tz_abbr) { timelib_free(t->tz_abbr); } t->tz_abbr = NULL; t->z = utc_offset; t->have_zone = 1; t->zone_type = TIMELIB_ZONETYPE_OFFSET; t->dst = 0; t->tz_info = NULL; } void timelib_set_timezone_from_abbr(timelib_time *t, timelib_abbr_info abbr_info) { if (t->tz_abbr) { timelib_free(t->tz_abbr); } t->tz_abbr = timelib_strdup(abbr_info.abbr); t->z = abbr_info.utc_offset; t->have_zone = 1; t->zone_type = TIMELIB_ZONETYPE_ABBR; t->dst = abbr_info.dst; t->tz_info = NULL; } void timelib_set_timezone(timelib_time *t, timelib_tzinfo *tz) { timelib_time_offset *gmt_offset; gmt_offset = timelib_get_time_zone_info(t->sse, tz); t->z = gmt_offset->offset; /* if (t->dst != gmt_offset->is_dst) { printf("ERROR (%d, %d)\n", t->dst, gmt_offset->is_dst); exit(1); } */ t->dst = gmt_offset->is_dst; t->tz_info = tz; if (t->tz_abbr) { timelib_free(t->tz_abbr); } t->tz_abbr = timelib_strdup(gmt_offset->abbr); timelib_time_offset_dtor(gmt_offset); t->have_zone = 1; t->zone_type = TIMELIB_ZONETYPE_ID; } /* Converts the time stored in the struct to localtime if localtime = true, * otherwise it converts it to gmttime. This is only done when necessary * ofcourse. */ int timelib_apply_localtime(timelib_time *t, unsigned int localtime) { if (localtime) { /* Converting from GMT time to local time */ TIMELIB_DEBUG(printf("Converting from GMT time to local time\n");); /* Check if TZ is set */ if (!t->tz_info) { TIMELIB_DEBUG(printf("E: No timezone configured, can't switch to local time\n");); return -1; } timelib_unixtime2local(t, t->sse); } else { /* Converting from local time to GMT time */ TIMELIB_DEBUG(printf("Converting from local time to GMT time\n");); timelib_unixtime2gmt(t, t->sse); } return 0; } lib/dow.c000064400000012050147577114150006261 0ustar00/* * The MIT License (MIT) * * Copyright (c) 2015 Derick Rethans * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "timelib.h" static int m_table_common[13] = { -1, 0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5 }; /* 1 = jan */ static int m_table_leap[13] = { -1, 6, 2, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5 }; /* 1 = jan */ static timelib_sll positive_mod(timelib_sll x, timelib_sll y) { timelib_sll tmp; tmp = x % y; if (tmp < 0) { tmp += y; } return tmp; } static timelib_sll century_value(timelib_sll j) { return 6 - positive_mod(j, 4) * 2; } static timelib_sll timelib_day_of_week_ex(timelib_sll y, timelib_sll m, timelib_sll d, int iso) { timelib_sll c1, y1, m1, dow; /* Only valid for Gregorian calendar, commented out as we don't handle * Julian calendar. We just return the 'wrong' day of week to be * consistent. */ c1 = century_value(y / 100); y1 = positive_mod(y, 100); m1 = timelib_is_leap(y) ? m_table_leap[m] : m_table_common[m]; dow = positive_mod((c1 + y1 + m1 + (y1 / 4) + d), 7); if (iso) { if (dow == 0) { dow = 7; } } return dow; } timelib_sll timelib_day_of_week(timelib_sll y, timelib_sll m, timelib_sll d) { return timelib_day_of_week_ex(y, m, d, 0); } timelib_sll timelib_iso_day_of_week(timelib_sll y, timelib_sll m, timelib_sll d) { return timelib_day_of_week_ex(y, m, d, 1); } /* jan feb mar apr may jun jul aug sep oct nov dec */ static int d_table_common[13] = { 0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; static int d_table_leap[13] = { 0, 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335 }; static int ml_table_common[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; static int ml_table_leap[13] = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; timelib_sll timelib_day_of_year(timelib_sll y, timelib_sll m, timelib_sll d) { return (timelib_is_leap(y) ? d_table_leap[m] : d_table_common[m]) + d - 1; } timelib_sll timelib_days_in_month(timelib_sll y, timelib_sll m) { return timelib_is_leap(y) ? ml_table_leap[m] : ml_table_common[m]; } void timelib_isoweek_from_date(timelib_sll y, timelib_sll m, timelib_sll d, timelib_sll *iw, timelib_sll *iy) { int y_leap, prev_y_leap, doy, jan1weekday, weekday; y_leap = timelib_is_leap(y); prev_y_leap = timelib_is_leap(y-1); doy = timelib_day_of_year(y, m, d) + 1; if (y_leap && m > 2) { doy++; } jan1weekday = timelib_day_of_week(y, 1, 1); weekday = timelib_day_of_week(y, m, d); if (weekday == 0) weekday = 7; if (jan1weekday == 0) jan1weekday = 7; /* Find if Y M D falls in YearNumber Y-1, WeekNumber 52 or 53 */ if (doy <= (8 - jan1weekday) && jan1weekday > 4) { *iy = y - 1; if (jan1weekday == 5 || (jan1weekday == 6 && prev_y_leap)) { *iw = 53; } else { *iw = 52; } } else { *iy = y; } /* 8. Find if Y M D falls in YearNumber Y+1, WeekNumber 1 */ if (*iy == y) { int i; i = y_leap ? 366 : 365; if ((i - (doy - y_leap)) < (4 - weekday)) { *iy = y + 1; *iw = 1; return; } } /* 9. Find if Y M D falls in YearNumber Y, WeekNumber 1 through 53 */ if (*iy == y) { int j; j = doy + (7 - weekday) + (jan1weekday - 1); *iw = j / 7; if (jan1weekday > 4) { *iw -= 1; } } } timelib_sll timelib_daynr_from_weeknr(timelib_sll y, timelib_sll w, timelib_sll d) { timelib_sll dow, day; /* Figure out the dayofweek for y-1-1 */ dow = timelib_day_of_week(y, 1, 1); /* then use that to figure out the offset for day 1 of week 1 */ day = 0 - (dow > 4 ? dow - 7 : dow); /* Add weeks and days */ return day + ((w - 1) * 7) + d; } int timelib_valid_time(timelib_sll h, timelib_sll i, timelib_sll s) { if (h < 0 || h > 23 || i < 0 || i > 59 || s < 0 || s > 59) { return 0; } return 1; } int timelib_valid_date(timelib_sll y, timelib_sll m, timelib_sll d) { if (m < 1 || m > 12 || d < 1 || d > timelib_days_in_month(y, m)) { return 0; } return 1; } #if 0 int main(void) { printf("dow = %d\n", timelib_day_of_week(1978, 12, 22)); /* 5 */ printf("dow = %d\n", timelib_day_of_week(2005, 2, 19)); /* 6 */ } #endif lib/parse_tz.c000064400000067741147577114150007340 0ustar00/* * The MIT License (MIT) * * Copyright (c) 2015 Derick Rethans * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "timelib.h" #ifdef HAVE_SYSTEM_TZDATA #include #include #include #include #include #include "php_scandir.h" #endif #include #ifdef HAVE_LOCALE_H #include #endif #ifdef HAVE_STRING_H #include #else #include #endif #ifndef HAVE_SYSTEM_TZDATA #define TIMELIB_SUPPORTS_V2DATA #include "timezonedb.h" #endif #include #if (defined(__APPLE__) || defined(__APPLE_CC__)) && (defined(__BIG_ENDIAN__) || defined(__LITTLE_ENDIAN__)) # if defined(__LITTLE_ENDIAN__) # undef WORDS_BIGENDIAN # else # if defined(__BIG_ENDIAN__) # define WORDS_BIGENDIAN # endif # endif #endif #ifdef WORDS_BIGENDIAN #define timelib_conv_int(l) (l) #else #define timelib_conv_int(l) ((l & 0x000000ff) << 24) + ((l & 0x0000ff00) << 8) + ((l & 0x00ff0000) >> 8) + ((l & 0xff000000) >> 24) #endif static int read_preamble(const unsigned char **tzf, timelib_tzinfo *tz) { uint32_t version; if (memcmp(*tzf, "TZif", 4) == 0) { *tzf += 20; return 0; } /* read ID */ version = (*tzf)[3] - '0'; *tzf += 4; /* read BC flag */ tz->bc = (**tzf == '\1'); *tzf += 1; /* read country code */ memcpy(tz->location.country_code, *tzf, 2); tz->location.country_code[2] = '\0'; *tzf += 2; /* skip rest of preamble */ *tzf += 13; return version; } static void read_header(const unsigned char **tzf, timelib_tzinfo *tz) { uint32_t buffer[6]; memcpy(&buffer, *tzf, sizeof(buffer)); tz->bit32.ttisgmtcnt = timelib_conv_int(buffer[0]); tz->bit32.ttisstdcnt = timelib_conv_int(buffer[1]); tz->bit32.leapcnt = timelib_conv_int(buffer[2]); tz->bit32.timecnt = timelib_conv_int(buffer[3]); tz->bit32.typecnt = timelib_conv_int(buffer[4]); tz->bit32.charcnt = timelib_conv_int(buffer[5]); *tzf += sizeof(buffer); } static void skip_64bit_transistions(const unsigned char **tzf, timelib_tzinfo *tz) { if (tz->bit64.timecnt) { *tzf += (sizeof(int64_t) * tz->bit64.timecnt); *tzf += (sizeof(unsigned char) * tz->bit64.timecnt); } } static void read_transistions(const unsigned char **tzf, timelib_tzinfo *tz) { int32_t *buffer = NULL; uint32_t i; unsigned char *cbuffer = NULL; if (tz->bit32.timecnt) { buffer = (int32_t*) timelib_malloc(tz->bit32.timecnt * sizeof(int32_t)); if (!buffer) { return; } memcpy(buffer, *tzf, sizeof(int32_t) * tz->bit32.timecnt); *tzf += (sizeof(int32_t) * tz->bit32.timecnt); for (i = 0; i < tz->bit32.timecnt; i++) { buffer[i] = timelib_conv_int(buffer[i]); } cbuffer = (unsigned char*) timelib_malloc(tz->bit32.timecnt * sizeof(unsigned char)); if (!cbuffer) { timelib_free(buffer); return; } memcpy(cbuffer, *tzf, sizeof(unsigned char) * tz->bit32.timecnt); *tzf += sizeof(unsigned char) * tz->bit32.timecnt; } tz->trans = buffer; tz->trans_idx = cbuffer; } static void skip_64bit_types(const unsigned char **tzf, timelib_tzinfo *tz) { *tzf += sizeof(unsigned char) * 6 * tz->bit64.typecnt; *tzf += sizeof(char) * tz->bit64.charcnt; if (tz->bit64.leapcnt) { *tzf += sizeof(int64_t) * tz->bit64.leapcnt * 2; } if (tz->bit64.ttisstdcnt) { *tzf += sizeof(unsigned char) * tz->bit64.ttisstdcnt; } if (tz->bit64.ttisgmtcnt) { *tzf += sizeof(unsigned char) * tz->bit64.ttisgmtcnt; } } static void read_types(const unsigned char **tzf, timelib_tzinfo *tz) { unsigned char *buffer; int32_t *leap_buffer; unsigned int i, j; buffer = (unsigned char*) timelib_malloc(tz->bit32.typecnt * sizeof(unsigned char) * 6); if (!buffer) { return; } memcpy(buffer, *tzf, sizeof(unsigned char) * 6 * tz->bit32.typecnt); *tzf += sizeof(unsigned char) * 6 * tz->bit32.typecnt; tz->type = (ttinfo*) timelib_malloc(tz->bit32.typecnt * sizeof(struct ttinfo)); if (!tz->type) { timelib_free(buffer); return; } for (i = 0; i < tz->bit32.typecnt; i++) { j = i * 6; tz->type[i].offset = (buffer[j] * 16777216) + (buffer[j + 1] * 65536) + (buffer[j + 2] * 256) + buffer[j + 3]; tz->type[i].isdst = buffer[j + 4]; tz->type[i].abbr_idx = buffer[j + 5]; } timelib_free(buffer); tz->timezone_abbr = (char*) timelib_malloc(tz->bit32.charcnt); if (!tz->timezone_abbr) { return; } memcpy(tz->timezone_abbr, *tzf, sizeof(char) * tz->bit32.charcnt); *tzf += sizeof(char) * tz->bit32.charcnt; if (tz->bit32.leapcnt) { leap_buffer = (int32_t *) timelib_malloc(tz->bit32.leapcnt * 2 * sizeof(int32_t)); if (!leap_buffer) { return; } memcpy(leap_buffer, *tzf, sizeof(int32_t) * tz->bit32.leapcnt * 2); *tzf += sizeof(int32_t) * tz->bit32.leapcnt * 2; tz->leap_times = (tlinfo*) timelib_malloc(tz->bit32.leapcnt * sizeof(tlinfo)); if (!tz->leap_times) { timelib_free(leap_buffer); return; } for (i = 0; i < tz->bit32.leapcnt; i++) { tz->leap_times[i].trans = timelib_conv_int(leap_buffer[i * 2]); tz->leap_times[i].offset = timelib_conv_int(leap_buffer[i * 2 + 1]); } timelib_free(leap_buffer); } if (tz->bit32.ttisstdcnt) { buffer = (unsigned char*) timelib_malloc(tz->bit32.ttisstdcnt * sizeof(unsigned char)); if (!buffer) { return; } memcpy(buffer, *tzf, sizeof(unsigned char) * tz->bit32.ttisstdcnt); *tzf += sizeof(unsigned char) * tz->bit32.ttisstdcnt; for (i = 0; i < tz->bit32.ttisstdcnt; i++) { tz->type[i].isstdcnt = buffer[i]; } timelib_free(buffer); } if (tz->bit32.ttisgmtcnt) { buffer = (unsigned char*) timelib_malloc(tz->bit32.ttisgmtcnt * sizeof(unsigned char)); if (!buffer) { return; } memcpy(buffer, *tzf, sizeof(unsigned char) * tz->bit32.ttisgmtcnt); *tzf += sizeof(unsigned char) * tz->bit32.ttisgmtcnt; for (i = 0; i < tz->bit32.ttisgmtcnt; i++) { tz->type[i].isgmtcnt = buffer[i]; } timelib_free(buffer); } } static void skip_posix_string(const unsigned char **tzf, timelib_tzinfo *tz) { int n_count = 0; do { if (*tzf[0] == '\n') { n_count++; } (*tzf)++; } while (n_count < 2); } static void read_location(const unsigned char **tzf, timelib_tzinfo *tz) { uint32_t buffer[3]; uint32_t comments_len; memcpy(&buffer, *tzf, sizeof(buffer)); tz->location.latitude = timelib_conv_int(buffer[0]); tz->location.latitude = (tz->location.latitude / 100000) - 90; tz->location.longitude = timelib_conv_int(buffer[1]); tz->location.longitude = (tz->location.longitude / 100000) - 180; comments_len = timelib_conv_int(buffer[2]); *tzf += sizeof(buffer); tz->location.comments = timelib_malloc(comments_len + 1); memcpy(tz->location.comments, *tzf, comments_len); tz->location.comments[comments_len] = '\0'; *tzf += comments_len; } void timelib_dump_tzinfo(timelib_tzinfo *tz) { uint32_t i; printf("Country Code: %s\n", tz->location.country_code); printf("Geo Location: %f,%f\n", tz->location.latitude, tz->location.longitude); printf("Comments:\n%s\n", tz->location.comments); printf("BC: %s\n", tz->bc ? "" : "yes"); printf("UTC/Local count: " TIMELIB_ULONG_FMT "\n", (timelib_ulong) tz->bit32.ttisgmtcnt); printf("Std/Wall count: " TIMELIB_ULONG_FMT "\n", (timelib_ulong) tz->bit32.ttisstdcnt); printf("Leap.sec. count: " TIMELIB_ULONG_FMT "\n", (timelib_ulong) tz->bit32.leapcnt); printf("Trans. count: " TIMELIB_ULONG_FMT "\n", (timelib_ulong) tz->bit32.timecnt); printf("Local types count: " TIMELIB_ULONG_FMT "\n", (timelib_ulong) tz->bit32.typecnt); printf("Zone Abbr. count: " TIMELIB_ULONG_FMT "\n", (timelib_ulong) tz->bit32.charcnt); printf ("%8s (%12s) = %3d [%5ld %1d %3d '%s' (%d,%d)]\n", "", "", 0, (long int) tz->type[0].offset, tz->type[0].isdst, tz->type[0].abbr_idx, &tz->timezone_abbr[tz->type[0].abbr_idx], tz->type[0].isstdcnt, tz->type[0].isgmtcnt ); for (i = 0; i < tz->bit32.timecnt; i++) { printf ("%08X (%12d) = %3d [%5ld %1d %3d '%s' (%d,%d)]\n", tz->trans[i], tz->trans[i], tz->trans_idx[i], (long int) tz->type[tz->trans_idx[i]].offset, tz->type[tz->trans_idx[i]].isdst, tz->type[tz->trans_idx[i]].abbr_idx, &tz->timezone_abbr[tz->type[tz->trans_idx[i]].abbr_idx], tz->type[tz->trans_idx[i]].isstdcnt, tz->type[tz->trans_idx[i]].isgmtcnt ); } for (i = 0; i < tz->bit32.leapcnt; i++) { printf ("%08X (%12ld) = %d\n", tz->leap_times[i].trans, (long) tz->leap_times[i].trans, tz->leap_times[i].offset); } } #ifdef HAVE_SYSTEM_TZDATA #ifdef HAVE_SYSTEM_TZDATA_PREFIX #define ZONEINFO_PREFIX HAVE_SYSTEM_TZDATA_PREFIX #else #define ZONEINFO_PREFIX "/usr/share/zoneinfo" #endif /* System timezone database pointer. */ static const timelib_tzdb *timezonedb_system; /* Hash table entry for the cache of the zone.tab mapping table. */ struct location_info { char code[2]; double latitude, longitude; char name[64]; char *comment; struct location_info *next; }; /* Cache of zone.tab. */ static struct location_info **system_location_table; /* Size of the zone.tab hash table; a random-ish prime big enough to * prevent too many collisions. */ #define LOCINFO_HASH_SIZE (1021) /* Compute a case insensitive hash of str */ static uint32_t tz_hash(const char *str) { const unsigned char *p = (const unsigned char *)str; uint32_t hash = 5381; int c; while ((c = tolower(*p++)) != '\0') { hash = (hash << 5) ^ hash ^ c; } return hash % LOCINFO_HASH_SIZE; } /* Parse an ISO-6709 date as used in zone.tab. Returns end of the * parsed string on success, or NULL on parse error. On success, * writes the parsed number to *result. */ static char *parse_iso6709(char *p, double *result) { double v, sign; char *pend; size_t len; if (*p == '+') sign = 1.0; else if (*p == '-') sign = -1.0; else return NULL; p++; for (pend = p; *pend >= '0' && *pend <= '9'; pend++) ;; /* Annoying encoding used by zone.tab has no decimal point, so use * the length to determine the format: * * 4 = DDMM * 5 = DDDMM * 6 = DDMMSS * 7 = DDDMMSS */ len = pend - p; if (len < 4 || len > 7) { return NULL; } /* p => [D]DD */ v = (p[0] - '0') * 10.0 + (p[1] - '0'); p += 2; if (len == 5 || len == 7) v = v * 10.0 + (*p++ - '0'); /* p => MM[SS] */ v += (10.0 * (p[0] - '0') + p[1] - '0') / 60.0; p += 2; /* p => [SS] */ if (len > 5) { v += (10.0 * (p[0] - '0') + p[1] - '0') / 3600.0; p += 2; } /* Round to five decimal place, not because it's a good idea, * but, because the builtin data uses rounded data, so, match * that. */ *result = trunc(v * sign * 100000.0) / 100000.0; return p; } /* This function parses the zone.tab file to build up the mapping of * timezone to country code and geographic location, and returns a * hash table. The hash table is indexed by the function: * * tz_hash(timezone-name) */ static struct location_info **create_location_table(void) { struct location_info **li, *i; char zone_tab[PATH_MAX]; char line[512]; FILE *fp; strncpy(zone_tab, ZONEINFO_PREFIX "/zone.tab", sizeof zone_tab); fp = fopen(zone_tab, "r"); if (!fp) { return NULL; } li = calloc(LOCINFO_HASH_SIZE, sizeof *li); while (fgets(line, sizeof line, fp)) { char *p = line, *code, *name, *comment; uint32_t hash; double latitude, longitude; while (isspace(*p)) p++; if (*p == '#' || *p == '\0' || *p == '\n') continue; if (!isalpha(p[0]) || !isalpha(p[1]) || p[2] != '\t') continue; /* code => AA */ code = p; p[2] = 0; p += 3; /* coords => [+-][D]DDMM[SS][+-][D]DDMM[SS] */ p = parse_iso6709(p, &latitude); if (!p) { continue; } p = parse_iso6709(p, &longitude); if (!p) { continue; } if (!p || *p != '\t') { continue; } /* name = string */ name = ++p; while (*p != '\t' && *p && *p != '\n') p++; *p++ = '\0'; /* comment = string */ comment = p; while (*p != '\t' && *p && *p != '\n') p++; if (*p == '\n' || *p == '\t') *p = '\0'; hash = tz_hash(name); i = malloc(sizeof *i); memcpy(i->code, code, 2); strncpy(i->name, name, sizeof i->name); i->comment = strdup(comment); i->longitude = longitude; i->latitude = latitude; i->next = li[hash]; li[hash] = i; /* printf("%s [%u, %f, %f]\n", name, hash, latitude, longitude); */ } fclose(fp); return li; } /* Return location info from hash table, using given timezone name. * Returns NULL if the name could not be found. */ const struct location_info *find_zone_info(struct location_info **li, const char *name) { uint32_t hash = tz_hash(name); const struct location_info *l; if (!li) { return NULL; } for (l = li[hash]; l; l = l->next) { if (strcasecmp(l->name, name) == 0) return l; } return NULL; } /* Filter out some non-tzdata files and the posix/right databases, if * present. */ static int index_filter(const struct dirent *ent) { return strcmp(ent->d_name, ".") != 0 && strcmp(ent->d_name, "..") != 0 && strcmp(ent->d_name, "posix") != 0 && strcmp(ent->d_name, "posixrules") != 0 && strcmp(ent->d_name, "right") != 0 && strstr(ent->d_name, ".tab") == NULL; } static int sysdbcmp(const void *first, const void *second) { const timelib_tzdb_index_entry *alpha = first, *beta = second; return strcasecmp(alpha->id, beta->id); } /* Create the zone identifier index by trawling the filesystem. */ static void create_zone_index(timelib_tzdb *db) { size_t dirstack_size, dirstack_top; size_t index_size, index_next; timelib_tzdb_index_entry *db_index; char **dirstack; /* LIFO stack to hold directory entries to scan; each slot is a * directory name relative to the zoneinfo prefix. */ dirstack_size = 32; dirstack = malloc(dirstack_size * sizeof *dirstack); dirstack_top = 1; dirstack[0] = strdup(""); /* Index array. */ index_size = 64; db_index = malloc(index_size * sizeof *db_index); index_next = 0; do { struct dirent **ents; char name[PATH_MAX], *top; int count; /* Pop the top stack entry, and iterate through its contents. */ top = dirstack[--dirstack_top]; snprintf(name, sizeof name, ZONEINFO_PREFIX "/%s", top); count = php_scandir(name, &ents, index_filter, php_alphasort); while (count > 0) { struct stat st; const char *leaf = ents[count - 1]->d_name; snprintf(name, sizeof name, ZONEINFO_PREFIX "/%s/%s", top, leaf); if (strlen(name) && stat(name, &st) == 0) { /* Name, relative to the zoneinfo prefix. */ const char *root = top; if (root[0] == '/') root++; snprintf(name, sizeof name, "%s%s%s", root, *root ? "/": "", leaf); if (S_ISDIR(st.st_mode)) { if (dirstack_top == dirstack_size) { dirstack_size *= 2; dirstack = realloc(dirstack, dirstack_size * sizeof *dirstack); } dirstack[dirstack_top++] = strdup(name); } else { if (index_next == index_size) { index_size *= 2; db_index = realloc(db_index, index_size * sizeof *db_index); } db_index[index_next++].id = strdup(name); } } free(ents[--count]); } if (count != -1) free(ents); free(top); } while (dirstack_top); qsort(db_index, index_next, sizeof *db_index, sysdbcmp); db->index = db_index; db->index_size = index_next; free(dirstack); } #define FAKE_HEADER "1234\0??\1??" #define FAKE_UTC_POS (7 - 4) /* Create a fake data segment for database 'sysdb'. */ static void fake_data_segment(timelib_tzdb *sysdb, struct location_info **info) { size_t n; char *data, *p; data = malloc(3 * sysdb->index_size + 7); p = mempcpy(data, FAKE_HEADER, sizeof(FAKE_HEADER) - 1); for (n = 0; n < sysdb->index_size; n++) { const struct location_info *li; timelib_tzdb_index_entry *ent; ent = (timelib_tzdb_index_entry *)&sysdb->index[n]; /* Lookup the timezone name in the hash table. */ if (strcmp(ent->id, "UTC") == 0) { ent->pos = FAKE_UTC_POS; continue; } li = find_zone_info(info, ent->id); if (li) { /* If found, append the BC byte and the * country code; set the position for this * section of timezone data. */ ent->pos = (p - data) - 4; *p++ = '\1'; *p++ = li->code[0]; *p++ = li->code[1]; } else { /* If not found, the timezone data can * point at the header. */ ent->pos = 0; } } sysdb->data = (unsigned char *)data; } /* Returns true if the passed-in stat structure describes a * probably-valid timezone file. */ static int is_valid_tzfile(const struct stat *st) { return S_ISREG(st->st_mode) && st->st_size > 20; } /* To allow timezone names to be used case-insensitively, find the * canonical name for this timezone, if possible. */ static const char *canonical_tzname(const char *timezone) { if (timezonedb_system) { timelib_tzdb_index_entry *ent, lookup; lookup.id = (char *)timezone; ent = bsearch(&lookup, timezonedb_system->index, timezonedb_system->index_size, sizeof lookup, sysdbcmp); if (ent) { return ent->id; } } return timezone; } /* Return the mmap()ed tzfile if found, else NULL. On success, the * length of the mapped data is placed in *length. */ static char *map_tzfile(const char *timezone, size_t *length) { char fname[PATH_MAX]; struct stat st; char *p; int fd; if (timezone[0] == '\0' || strstr(timezone, "..") != NULL) { return NULL; } snprintf(fname, sizeof fname, ZONEINFO_PREFIX "/%s", canonical_tzname(timezone)); fd = open(fname, O_RDONLY); if (fd == -1) { return NULL; } else if (fstat(fd, &st) != 0 || !is_valid_tzfile(&st)) { close(fd); return NULL; } *length = st.st_size; p = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0); close(fd); return p != MAP_FAILED ? p : NULL; } #endif static int inmem_seek_to_tz_position(const unsigned char **tzf, char *timezone, const timelib_tzdb *tzdb) { int left = 0, right = tzdb->index_size - 1; #ifdef HAVE_SETLOCALE char *cur_locale = NULL, *tmp; tmp = setlocale(LC_CTYPE, NULL); if (tmp) { cur_locale = timelib_strdup(tmp); } setlocale(LC_CTYPE, "C"); #endif do { int mid = ((unsigned)left + right) >> 1; int cmp = strcasecmp(timezone, tzdb->index[mid].id); if (cmp < 0) { right = mid - 1; } else if (cmp > 0) { left = mid + 1; } else { /* (cmp == 0) */ (*tzf) = &(tzdb->data[tzdb->index[mid].pos]); #ifdef HAVE_SETLOCALE setlocale(LC_CTYPE, cur_locale); if (cur_locale) timelib_free(cur_locale); #endif return 1; } } while (left <= right); #ifdef HAVE_SETLOCALE setlocale(LC_CTYPE, cur_locale); if (cur_locale) timelib_free(cur_locale); #endif return 0; } static int seek_to_tz_position(const unsigned char **tzf, char *timezone, char **map, size_t *maplen, const timelib_tzdb *tzdb) { #ifdef HAVE_SYSTEM_TZDATA if (tzdb == timezonedb_system) { char *orig; orig = map_tzfile(timezone, maplen); if (orig == NULL) { return 0; } (*tzf) = (unsigned char *)orig ; *map = orig; return 1; } else #endif { return inmem_seek_to_tz_position(tzf, timezone, tzdb); } } const timelib_tzdb *timelib_builtin_db(void) { #ifdef HAVE_SYSTEM_TZDATA if (timezonedb_system == NULL) { timelib_tzdb *tmp = malloc(sizeof *tmp); tmp->version = "0.system"; tmp->data = NULL; create_zone_index(tmp); system_location_table = create_location_table(); fake_data_segment(tmp, system_location_table); timezonedb_system = tmp; } return timezonedb_system; #else return &timezonedb_builtin; #endif } const timelib_tzdb_index_entry *timelib_timezone_builtin_identifiers_list(int *count) { #ifdef HAVE_SYSTEM_TZDATA *count = timezonedb_system->index_size; return timezonedb_system->index; #else *count = sizeof(timezonedb_idx_builtin) / sizeof(*timezonedb_idx_builtin); return timezonedb_idx_builtin; #endif } int timelib_timezone_id_is_valid(char *timezone, const timelib_tzdb *tzdb) { const unsigned char *tzf; #ifdef HAVE_SYSTEM_TZDATA if (tzdb == timezonedb_system) { char fname[PATH_MAX]; struct stat st; if (timezone[0] == '\0' || strstr(timezone, "..") != NULL) { return 0; } if (system_location_table) { if (find_zone_info(system_location_table, timezone) != NULL) { /* found in cache */ return 1; } } snprintf(fname, sizeof fname, ZONEINFO_PREFIX "/%s", canonical_tzname(timezone)); return stat(fname, &st) == 0 && is_valid_tzfile(&st); } #endif return (inmem_seek_to_tz_position(&tzf, timezone, tzdb)); } static void skip_64bit_preamble(const unsigned char **tzf, timelib_tzinfo *tz) { *tzf += 20; } static void read_64bit_header(const unsigned char **tzf, timelib_tzinfo *tz) { uint32_t buffer[6]; memcpy(&buffer, *tzf, sizeof(buffer)); tz->bit64.ttisgmtcnt = timelib_conv_int(buffer[0]); tz->bit64.ttisstdcnt = timelib_conv_int(buffer[1]); tz->bit64.leapcnt = timelib_conv_int(buffer[2]); tz->bit64.timecnt = timelib_conv_int(buffer[3]); tz->bit64.typecnt = timelib_conv_int(buffer[4]); tz->bit64.charcnt = timelib_conv_int(buffer[5]); *tzf += sizeof(buffer); } timelib_tzinfo *timelib_parse_tzfile(char *timezone, const timelib_tzdb *tzdb) { const unsigned char *tzf; char *memmap = NULL; size_t maplen; timelib_tzinfo *tmp; int version; if (seek_to_tz_position(&tzf, timezone, &memmap, &maplen, tzdb)) { tmp = timelib_tzinfo_ctor(timezone); version = read_preamble(&tzf, tmp); read_header(&tzf, tmp); read_transistions(&tzf, tmp); read_types(&tzf, tmp); #ifdef HAVE_SYSTEM_TZDATA if (memmap) { const struct location_info *li; /* TZif-style - grok the location info from the system database, * if possible. */ if ((li = find_zone_info(system_location_table, timezone)) != NULL) { tmp->location.comments = strdup(li->comment); strncpy(tmp->location.country_code, li->code, 2); tmp->location.longitude = li->longitude; tmp->location.latitude = li->latitude; tmp->bc = 1; } else { strcpy(tmp->location.country_code, "??"); tmp->bc = 0; tmp->location.comments = strdup(""); } /* Now done with the mmap segment - discard it. */ munmap(memmap, maplen); } else #endif { if (version == 2) { skip_64bit_preamble(&tzf, tmp); read_64bit_header(&tzf, tmp); skip_64bit_transistions(&tzf, tmp); skip_64bit_types(&tzf, tmp); skip_posix_string(&tzf, tmp); } /* PHP-style - use the embedded info. */ read_location(&tzf, tmp); } } else { tmp = NULL; } return tmp; } static ttinfo* fetch_timezone_offset(timelib_tzinfo *tz, timelib_sll ts, timelib_sll *transition_time) { uint32_t i; /* If there is no transition time, we pick the first one, if that doesn't * exist we return NULL */ if (!tz->bit32.timecnt || !tz->trans) { *transition_time = 0; if (tz->bit32.typecnt == 1) { return &(tz->type[0]); } return NULL; } /* If the TS is lower than the first transition time, then we scan over * all the transition times to find the first non-DST one, or the first * one in case there are only DST entries. Not sure which smartass came up * with this idea in the first though :) */ if (ts < tz->trans[0]) { uint32_t j; *transition_time = 0; j = 0; while (j < tz->bit32.timecnt && tz->type[tz->trans_idx[j]].isdst) { ++j; } if (j == tz->bit32.timecnt) { j = 0; } return &(tz->type[tz->trans_idx[j]]); } /* In all other cases we loop through the available transtion times to find * the correct entry */ for (i = 0; i < tz->bit32.timecnt; i++) { if (ts < tz->trans[i]) { *transition_time = tz->trans[i - 1]; return &(tz->type[tz->trans_idx[i - 1]]); } } *transition_time = tz->trans[tz->bit32.timecnt - 1]; return &(tz->type[tz->trans_idx[tz->bit32.timecnt - 1]]); } static tlinfo* fetch_leaptime_offset(timelib_tzinfo *tz, timelib_sll ts) { int i; if (!tz->bit32.leapcnt || !tz->leap_times) { return NULL; } for (i = tz->bit32.leapcnt - 1; i > 0; i--) { if (ts > tz->leap_times[i].trans) { return &(tz->leap_times[i]); } } return NULL; } int timelib_timestamp_is_in_dst(timelib_sll ts, timelib_tzinfo *tz) { ttinfo *to; timelib_sll dummy; if ((to = fetch_timezone_offset(tz, ts, &dummy))) { return to->isdst; } return -1; } timelib_time_offset *timelib_get_time_zone_info(timelib_sll ts, timelib_tzinfo *tz) { ttinfo *to; tlinfo *tl; int32_t offset = 0, leap_secs = 0; char *abbr; timelib_time_offset *tmp = timelib_time_offset_ctor(); timelib_sll transistion_time; if ((to = fetch_timezone_offset(tz, ts, &transistion_time))) { offset = to->offset; abbr = &(tz->timezone_abbr[to->abbr_idx]); tmp->is_dst = to->isdst; tmp->transistion_time = transistion_time; } else { offset = 0; abbr = tz->timezone_abbr; tmp->is_dst = 0; tmp->transistion_time = 0; } if ((tl = fetch_leaptime_offset(tz, ts))) { leap_secs = -tl->offset; } tmp->offset = offset; tmp->leap_secs = leap_secs; tmp->abbr = abbr ? timelib_strdup(abbr) : timelib_strdup("GMT"); return tmp; } timelib_sll timelib_get_current_offset(timelib_time *t) { timelib_time_offset *gmt_offset; timelib_sll retval; switch (t->zone_type) { case TIMELIB_ZONETYPE_ABBR: case TIMELIB_ZONETYPE_OFFSET: return (t->z + t->dst) * -60; case TIMELIB_ZONETYPE_ID: gmt_offset = timelib_get_time_zone_info(t->sse, t->tz_info); retval = gmt_offset->offset; timelib_time_offset_dtor(gmt_offset); return retval; default: return 0; } } lib/parse_date.c000064400001711643147577114150007616 0ustar00/* Generated by re2c 0.15.3 on Tue Oct 24 10:49:45 2017 */ /* * The MIT License (MIT) * * Copyright (c) 2015 Derick Rethans * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /* $Id$ */ #include "timelib.h" #include #include #include #include #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #else #include #endif #if defined(_MSC_VER) # define strtoll(s, f, b) _atoi64(s) #elif !defined(HAVE_STRTOLL) # if defined(HAVE_ATOLL) # define strtoll(s, f, b) atoll(s) # else # define strtoll(s, f, b) strtol(s, f, b) # endif #endif #define TIMELIB_UNSET -99999 #define TIMELIB_SECOND 1 #define TIMELIB_MINUTE 2 #define TIMELIB_HOUR 3 #define TIMELIB_DAY 4 #define TIMELIB_MONTH 5 #define TIMELIB_YEAR 6 #define TIMELIB_WEEKDAY 7 #define TIMELIB_SPECIAL 8 #define EOI 257 #define TIME 258 #define DATE 259 #define TIMELIB_XMLRPC_SOAP 260 #define TIMELIB_TIME12 261 #define TIMELIB_TIME24 262 #define TIMELIB_GNU_NOCOLON 263 #define TIMELIB_GNU_NOCOLON_TZ 264 #define TIMELIB_ISO_NOCOLON 265 #define TIMELIB_AMERICAN 266 #define TIMELIB_ISO_DATE 267 #define TIMELIB_DATE_FULL 268 #define TIMELIB_DATE_TEXT 269 #define TIMELIB_DATE_NOCOLON 270 #define TIMELIB_PG_YEARDAY 271 #define TIMELIB_PG_TEXT 272 #define TIMELIB_PG_REVERSE 273 #define TIMELIB_CLF 274 #define TIMELIB_DATE_NO_DAY 275 #define TIMELIB_SHORTDATE_WITH_TIME 276 #define TIMELIB_DATE_FULL_POINTED 277 #define TIMELIB_TIME24_WITH_ZONE 278 #define TIMELIB_ISO_WEEK 279 #define TIMELIB_LF_DAY_OF_MONTH 280 #define TIMELIB_WEEK_DAY_OF_MONTH 281 #define TIMELIB_TIMEZONE 300 #define TIMELIB_AGO 301 #define TIMELIB_RELATIVE 310 #define TIMELIB_ERROR 999 /* Some compilers like AIX, defines uchar in sys/types.h */ #undef uchar typedef unsigned char uchar; #define BSIZE 8192 #define YYCTYPE uchar #define YYCURSOR cursor #define YYLIMIT s->lim #define YYMARKER s->ptr #define YYFILL(n) return EOI; #define RET(i) {s->cur = cursor; return i;} #define timelib_string_free timelib_free #define TIMELIB_HAVE_TIME() { if (s->time->have_time) { add_error(s, "Double time specification"); timelib_string_free(str); return TIMELIB_ERROR; } else { s->time->have_time = 1; s->time->h = 0; s->time->i = 0; s->time->s = 0; s->time->f = 0; } } #define TIMELIB_UNHAVE_TIME() { s->time->have_time = 0; s->time->h = 0; s->time->i = 0; s->time->s = 0; s->time->f = 0; } #define TIMELIB_HAVE_DATE() { if (s->time->have_date) { add_error(s, "Double date specification"); timelib_string_free(str); return TIMELIB_ERROR; } else { s->time->have_date = 1; } } #define TIMELIB_UNHAVE_DATE() { s->time->have_date = 0; s->time->d = 0; s->time->m = 0; s->time->y = 0; } #define TIMELIB_HAVE_RELATIVE() { s->time->have_relative = 1; } #define TIMELIB_HAVE_WEEKDAY_RELATIVE() { s->time->have_relative = 1; s->time->relative.have_weekday_relative = 1; } #define TIMELIB_HAVE_SPECIAL_RELATIVE() { s->time->have_relative = 1; s->time->relative.have_special_relative = 1; } #define TIMELIB_HAVE_TZ() { s->cur = cursor; if (s->time->have_zone) { s->time->have_zone > 1 ? add_error(s, "Double timezone specification") : add_warning(s, "Double timezone specification"); timelib_string_free(str); s->time->have_zone++; return TIMELIB_ERROR; } else { s->time->have_zone++; } } #define TIMELIB_INIT s->cur = cursor; str = timelib_string(s); ptr = str #define TIMELIB_DEINIT timelib_string_free(str) #define TIMELIB_ADJUST_RELATIVE_WEEKDAY() if (in->time.have_weekday_relative && (in.rel.d > 0)) { in.rel.d -= 7; } #define TIMELIB_PROCESS_YEAR(x, l) { \ if (((x) == TIMELIB_UNSET) || ((l) >= 4)) { \ /* (x) = 0; */ \ } else if ((x) < 100) { \ if ((x) < 70) { \ (x) += 2000; \ } else { \ (x) += 1900; \ } \ } \ } #ifdef DEBUG_PARSER #define DEBUG_OUTPUT(s) printf("%s\n", s); #define YYDEBUG(s,c) { if (s != -1) { printf("state: %d ", s); printf("[%c]\n", c); } } #else #define DEBUG_OUTPUT(s) #define YYDEBUG(s,c) #endif #include "timelib_structs.h" typedef struct timelib_elems { unsigned int c; /* Number of elements */ char **v; /* Values */ } timelib_elems; typedef struct Scanner { int fd; uchar *lim, *str, *ptr, *cur, *tok, *pos; unsigned int line, len; struct timelib_error_container *errors; struct timelib_time *time; const timelib_tzdb *tzdb; } Scanner; typedef struct _timelib_lookup_table { const char *name; int type; int value; } timelib_lookup_table; typedef struct _timelib_relunit { const char *name; int unit; int multiplier; } timelib_relunit; /* The timezone table. */ const static timelib_tz_lookup_table timelib_timezone_lookup[] = { #include "timezonemap.h" { NULL, 0, 0, NULL }, }; const static timelib_tz_lookup_table timelib_timezone_fallbackmap[] = { #include "fallbackmap.h" { NULL, 0, 0, NULL }, }; const static timelib_tz_lookup_table timelib_timezone_utc[] = { { "utc", 0, 0, "UTC" }, }; static timelib_relunit const timelib_relunit_lookup[] = { { "sec", TIMELIB_SECOND, 1 }, { "secs", TIMELIB_SECOND, 1 }, { "second", TIMELIB_SECOND, 1 }, { "seconds", TIMELIB_SECOND, 1 }, { "min", TIMELIB_MINUTE, 1 }, { "mins", TIMELIB_MINUTE, 1 }, { "minute", TIMELIB_MINUTE, 1 }, { "minutes", TIMELIB_MINUTE, 1 }, { "hour", TIMELIB_HOUR, 1 }, { "hours", TIMELIB_HOUR, 1 }, { "day", TIMELIB_DAY, 1 }, { "days", TIMELIB_DAY, 1 }, { "week", TIMELIB_DAY, 7 }, { "weeks", TIMELIB_DAY, 7 }, { "fortnight", TIMELIB_DAY, 14 }, { "fortnights", TIMELIB_DAY, 14 }, { "forthnight", TIMELIB_DAY, 14 }, { "forthnights", TIMELIB_DAY, 14 }, { "month", TIMELIB_MONTH, 1 }, { "months", TIMELIB_MONTH, 1 }, { "year", TIMELIB_YEAR, 1 }, { "years", TIMELIB_YEAR, 1 }, { "monday", TIMELIB_WEEKDAY, 1 }, { "mon", TIMELIB_WEEKDAY, 1 }, { "tuesday", TIMELIB_WEEKDAY, 2 }, { "tue", TIMELIB_WEEKDAY, 2 }, { "wednesday", TIMELIB_WEEKDAY, 3 }, { "wed", TIMELIB_WEEKDAY, 3 }, { "thursday", TIMELIB_WEEKDAY, 4 }, { "thu", TIMELIB_WEEKDAY, 4 }, { "friday", TIMELIB_WEEKDAY, 5 }, { "fri", TIMELIB_WEEKDAY, 5 }, { "saturday", TIMELIB_WEEKDAY, 6 }, { "sat", TIMELIB_WEEKDAY, 6 }, { "sunday", TIMELIB_WEEKDAY, 0 }, { "sun", TIMELIB_WEEKDAY, 0 }, { "weekday", TIMELIB_SPECIAL, TIMELIB_SPECIAL_WEEKDAY }, { "weekdays", TIMELIB_SPECIAL, TIMELIB_SPECIAL_WEEKDAY }, { NULL, 0, 0 } }; /* The relative text table. */ static timelib_lookup_table const timelib_reltext_lookup[] = { { "first", 0, 1 }, { "next", 0, 1 }, { "second", 0, 2 }, { "third", 0, 3 }, { "fourth", 0, 4 }, { "fifth", 0, 5 }, { "sixth", 0, 6 }, { "seventh", 0, 7 }, { "eight", 0, 8 }, { "eighth", 0, 8 }, { "ninth", 0, 9 }, { "tenth", 0, 10 }, { "eleventh", 0, 11 }, { "twelfth", 0, 12 }, { "last", 0, -1 }, { "previous", 0, -1 }, { "this", 1, 0 }, { NULL, 1, 0 } }; /* The month table. */ static timelib_lookup_table const timelib_month_lookup[] = { { "jan", 0, 1 }, { "feb", 0, 2 }, { "mar", 0, 3 }, { "apr", 0, 4 }, { "may", 0, 5 }, { "jun", 0, 6 }, { "jul", 0, 7 }, { "aug", 0, 8 }, { "sep", 0, 9 }, { "sept", 0, 9 }, { "oct", 0, 10 }, { "nov", 0, 11 }, { "dec", 0, 12 }, { "i", 0, 1 }, { "ii", 0, 2 }, { "iii", 0, 3 }, { "iv", 0, 4 }, { "v", 0, 5 }, { "vi", 0, 6 }, { "vii", 0, 7 }, { "viii", 0, 8 }, { "ix", 0, 9 }, { "x", 0, 10 }, { "xi", 0, 11 }, { "xii", 0, 12 }, { "january", 0, 1 }, { "february", 0, 2 }, { "march", 0, 3 }, { "april", 0, 4 }, { "may", 0, 5 }, { "june", 0, 6 }, { "july", 0, 7 }, { "august", 0, 8 }, { "september", 0, 9 }, { "october", 0, 10 }, { "november", 0, 11 }, { "december", 0, 12 }, { NULL, 0, 0 } }; #if 0 static char* timelib_ltrim(char *s) { char *ptr = s; while (ptr[0] == ' ' || ptr[0] == '\t') { ptr++; } return ptr; } #endif #if 0 uchar *fill(Scanner *s, uchar *cursor){ if(!s->eof){ unsigned int cnt = s->tok - s->bot; if(cnt){ memcpy(s->bot, s->tok, s->lim - s->tok); s->tok = s->bot; s->ptr -= cnt; cursor -= cnt; s->pos -= cnt; s->lim -= cnt; } if((s->top - s->lim) < BSIZE){ uchar *buf = (uchar*) timelib_malloc(((s->lim - s->bot) + BSIZE)*sizeof(uchar)); memcpy(buf, s->tok, s->lim - s->tok); s->tok = buf; s->ptr = &buf[s->ptr - s->bot]; cursor = &buf[cursor - s->bot]; s->pos = &buf[s->pos - s->bot]; s->lim = &buf[s->lim - s->bot]; s->top = &s->lim[BSIZE]; timelib_free(s->bot); s->bot = buf; } if((cnt = read(s->fd, (char*) s->lim, BSIZE)) != BSIZE){ s->eof = &s->lim[cnt]; *(s->eof)++ = '\n'; } s->lim += cnt; } return cursor; } #endif static void add_warning(Scanner *s, char *error) { s->errors->warning_count++; s->errors->warning_messages = timelib_realloc(s->errors->warning_messages, s->errors->warning_count * sizeof(timelib_error_message)); s->errors->warning_messages[s->errors->warning_count - 1].position = s->tok ? s->tok - s->str : 0; s->errors->warning_messages[s->errors->warning_count - 1].character = s->tok ? *s->tok : 0; s->errors->warning_messages[s->errors->warning_count - 1].message = timelib_strdup(error); } static void add_error(Scanner *s, char *error) { s->errors->error_count++; s->errors->error_messages = timelib_realloc(s->errors->error_messages, s->errors->error_count * sizeof(timelib_error_message)); s->errors->error_messages[s->errors->error_count - 1].position = s->tok ? s->tok - s->str : 0; s->errors->error_messages[s->errors->error_count - 1].character = s->tok ? *s->tok : 0; s->errors->error_messages[s->errors->error_count - 1].message = timelib_strdup(error); } static void add_pbf_warning(Scanner *s, char *error, char *sptr, char *cptr) { s->errors->warning_count++; s->errors->warning_messages = timelib_realloc(s->errors->warning_messages, s->errors->warning_count * sizeof(timelib_error_message)); s->errors->warning_messages[s->errors->warning_count - 1].position = cptr - sptr; s->errors->warning_messages[s->errors->warning_count - 1].character = *cptr; s->errors->warning_messages[s->errors->warning_count - 1].message = timelib_strdup(error); } static void add_pbf_error(Scanner *s, char *error, char *sptr, char *cptr) { s->errors->error_count++; s->errors->error_messages = timelib_realloc(s->errors->error_messages, s->errors->error_count * sizeof(timelib_error_message)); s->errors->error_messages[s->errors->error_count - 1].position = cptr - sptr; s->errors->error_messages[s->errors->error_count - 1].character = *cptr; s->errors->error_messages[s->errors->error_count - 1].message = timelib_strdup(error); } static timelib_sll timelib_meridian(char **ptr, timelib_sll h) { timelib_sll retval = 0; while (!strchr("AaPp", **ptr)) { ++*ptr; } if (**ptr == 'a' || **ptr == 'A') { if (h == 12) { retval = -12; } } else if (h != 12) { retval = 12; } ++*ptr; if (**ptr == '.') { ++*ptr; } if (**ptr == 'M' || **ptr == 'm') { ++*ptr; } if (**ptr == '.') { ++*ptr; } return retval; } static timelib_sll timelib_meridian_with_check(char **ptr, timelib_sll h) { timelib_sll retval = 0; while (**ptr && !strchr("AaPp", **ptr)) { ++*ptr; } if(!**ptr) { return TIMELIB_UNSET; } if (**ptr == 'a' || **ptr == 'A') { if (h == 12) { retval = -12; } } else if (h != 12) { retval = 12; } ++*ptr; if (**ptr == '.') { ++*ptr; if (**ptr != 'm' && **ptr != 'M') { return TIMELIB_UNSET; } ++*ptr; if (**ptr != '.' ) { return TIMELIB_UNSET; } ++*ptr; } else if (**ptr == 'm' || **ptr == 'M') { ++*ptr; } else { return TIMELIB_UNSET; } return retval; } static char *timelib_string(Scanner *s) { char *tmp = timelib_calloc(1, s->cur - s->tok + 1); memcpy(tmp, s->tok, s->cur - s->tok); return tmp; } static timelib_sll timelib_get_nr_ex(char **ptr, int max_length, int *scanned_length) { char *begin, *end, *str; timelib_sll tmp_nr = TIMELIB_UNSET; int len = 0; while ((**ptr < '0') || (**ptr > '9')) { if (**ptr == '\0') { return TIMELIB_UNSET; } ++*ptr; } begin = *ptr; while ((**ptr >= '0') && (**ptr <= '9') && len < max_length) { ++*ptr; ++len; } end = *ptr; if (scanned_length) { *scanned_length = end - begin; } str = timelib_calloc(1, end - begin + 1); memcpy(str, begin, end - begin); tmp_nr = strtoll(str, NULL, 10); timelib_free(str); return tmp_nr; } static timelib_sll timelib_get_nr(char **ptr, int max_length) { return timelib_get_nr_ex(ptr, max_length, NULL); } static void timelib_skip_day_suffix(char **ptr) { if (isspace(**ptr)) { return; } if (!strncasecmp(*ptr, "nd", 2) || !strncasecmp(*ptr, "rd", 2) ||!strncasecmp(*ptr, "st", 2) || !strncasecmp(*ptr, "th", 2)) { *ptr += 2; } } static double timelib_get_frac_nr(char **ptr, int max_length) { char *begin, *end, *str; double tmp_nr = TIMELIB_UNSET; int len = 0; while ((**ptr != '.') && (**ptr != ':') && ((**ptr < '0') || (**ptr > '9'))) { if (**ptr == '\0') { return TIMELIB_UNSET; } ++*ptr; } begin = *ptr; while (((**ptr == '.') || (**ptr == ':') || ((**ptr >= '0') && (**ptr <= '9'))) && len < max_length) { ++*ptr; ++len; } end = *ptr; str = timelib_calloc(1, end - begin + 1); memcpy(str, begin, end - begin); if (str[0] == ':') { str[0] = '.'; } tmp_nr = strtod(str, NULL); timelib_free(str); return tmp_nr; } static timelib_ull timelib_get_unsigned_nr(char **ptr, int max_length) { timelib_ull dir = 1; while (((**ptr < '0') || (**ptr > '9')) && (**ptr != '+') && (**ptr != '-')) { if (**ptr == '\0') { return TIMELIB_UNSET; } ++*ptr; } while (**ptr == '+' || **ptr == '-') { if (**ptr == '-') { dir *= -1; } ++*ptr; } return dir * timelib_get_nr(ptr, max_length); } static timelib_sll timelib_lookup_relative_text(char **ptr, int *behavior) { char *word; char *begin = *ptr, *end; timelib_sll value = 0; const timelib_lookup_table *tp; while ((**ptr >= 'A' && **ptr <= 'Z') || (**ptr >= 'a' && **ptr <= 'z')) { ++*ptr; } end = *ptr; word = timelib_calloc(1, end - begin + 1); memcpy(word, begin, end - begin); for (tp = timelib_reltext_lookup; tp->name; tp++) { if (strcasecmp(word, tp->name) == 0) { value = tp->value; *behavior = tp->type; } } timelib_free(word); return value; } static timelib_sll timelib_get_relative_text(char **ptr, int *behavior) { while (**ptr == ' ' || **ptr == '\t' || **ptr == '-' || **ptr == '/') { ++*ptr; } return timelib_lookup_relative_text(ptr, behavior); } static timelib_long timelib_lookup_month(char **ptr) { char *word; char *begin = *ptr, *end; timelib_long value = 0; const timelib_lookup_table *tp; while ((**ptr >= 'A' && **ptr <= 'Z') || (**ptr >= 'a' && **ptr <= 'z')) { ++*ptr; } end = *ptr; word = timelib_calloc(1, end - begin + 1); memcpy(word, begin, end - begin); for (tp = timelib_month_lookup; tp->name; tp++) { if (strcasecmp(word, tp->name) == 0) { value = tp->value; } } timelib_free(word); return value; } static timelib_long timelib_get_month(char **ptr) { while (**ptr == ' ' || **ptr == '\t' || **ptr == '-' || **ptr == '.' || **ptr == '/') { ++*ptr; } return timelib_lookup_month(ptr); } static void timelib_eat_spaces(char **ptr) { while (**ptr == ' ' || **ptr == '\t') { ++*ptr; } } static void timelib_eat_until_separator(char **ptr) { ++*ptr; while (strchr(" \t.,:;/-0123456789", **ptr) == NULL) { ++*ptr; } } static const timelib_relunit* timelib_lookup_relunit(char **ptr) { char *word; char *begin = *ptr, *end; const timelib_relunit *tp, *value = NULL; while (**ptr != '\0' && **ptr != ' ' && **ptr != ',' && **ptr != '\t' && **ptr != ';' && **ptr != ':' && **ptr != '/' && **ptr != '.' && **ptr != '-' && **ptr != '(' && **ptr != ')' ) { ++*ptr; } end = *ptr; word = timelib_calloc(1, end - begin + 1); memcpy(word, begin, end - begin); for (tp = timelib_relunit_lookup; tp->name; tp++) { if (strcasecmp(word, tp->name) == 0) { value = tp; break; } } timelib_free(word); return value; } static void timelib_set_relative(char **ptr, timelib_sll amount, int behavior, Scanner *s) { const timelib_relunit* relunit; if (!(relunit = timelib_lookup_relunit(ptr))) { return; } switch (relunit->unit) { case TIMELIB_SECOND: s->time->relative.s += amount * relunit->multiplier; break; case TIMELIB_MINUTE: s->time->relative.i += amount * relunit->multiplier; break; case TIMELIB_HOUR: s->time->relative.h += amount * relunit->multiplier; break; case TIMELIB_DAY: s->time->relative.d += amount * relunit->multiplier; break; case TIMELIB_MONTH: s->time->relative.m += amount * relunit->multiplier; break; case TIMELIB_YEAR: s->time->relative.y += amount * relunit->multiplier; break; case TIMELIB_WEEKDAY: TIMELIB_HAVE_WEEKDAY_RELATIVE(); TIMELIB_UNHAVE_TIME(); s->time->relative.d += (amount > 0 ? amount - 1 : amount) * 7; s->time->relative.weekday = relunit->multiplier; s->time->relative.weekday_behavior = behavior; break; case TIMELIB_SPECIAL: TIMELIB_HAVE_SPECIAL_RELATIVE(); TIMELIB_UNHAVE_TIME(); s->time->relative.special.type = relunit->multiplier; s->time->relative.special.amount = amount; } } const static timelib_tz_lookup_table* abbr_search(const char *word, timelib_long gmtoffset, int isdst) { int first_found = 0; const timelib_tz_lookup_table *tp, *first_found_elem = NULL; const timelib_tz_lookup_table *fmp; if (strcasecmp("utc", word) == 0 || strcasecmp("gmt", word) == 0) { return timelib_timezone_utc; } for (tp = timelib_timezone_lookup; tp->name; tp++) { if (strcasecmp(word, tp->name) == 0) { if (!first_found) { first_found = 1; first_found_elem = tp; if (gmtoffset == -1) { return tp; } } if (tp->gmtoffset == gmtoffset) { return tp; } } } if (first_found) { return first_found_elem; } /* Still didn't find anything, let's find the zone solely based on * offset/isdst then */ for (fmp = timelib_timezone_fallbackmap; fmp->name; fmp++) { if ((fmp->gmtoffset * 60) == gmtoffset && fmp->type == isdst) { return fmp; } } return NULL; } static timelib_long timelib_lookup_abbr(char **ptr, int *dst, char **tz_abbr, int *found) { char *word; char *begin = *ptr, *end; timelib_long value = 0; const timelib_tz_lookup_table *tp; while (**ptr != '\0' && **ptr != ')' && **ptr != ' ') { ++*ptr; } end = *ptr; word = timelib_calloc(1, end - begin + 1); memcpy(word, begin, end - begin); if ((tp = abbr_search(word, -1, 0))) { value = -tp->gmtoffset / 60; *dst = tp->type; value += tp->type * 60; *found = 1; } else { *found = 0; } *tz_abbr = word; return value; } timelib_long timelib_parse_zone(char **ptr, int *dst, timelib_time *t, int *tz_not_found, const timelib_tzdb *tzdb, timelib_tz_get_wrapper tz_wrapper) { timelib_tzinfo *res; timelib_long retval = 0; *tz_not_found = 0; while (**ptr == ' ' || **ptr == '\t' || **ptr == '(') { ++*ptr; } if ((*ptr)[0] == 'G' && (*ptr)[1] == 'M' && (*ptr)[2] == 'T' && ((*ptr)[3] == '+' || (*ptr)[3] == '-')) { *ptr += 3; } if (**ptr == '+') { ++*ptr; t->is_localtime = 1; t->zone_type = TIMELIB_ZONETYPE_OFFSET; *tz_not_found = 0; t->dst = 0; retval = -1 * timelib_parse_tz_cor(ptr); } else if (**ptr == '-') { ++*ptr; t->is_localtime = 1; t->zone_type = TIMELIB_ZONETYPE_OFFSET; *tz_not_found = 0; t->dst = 0; retval = timelib_parse_tz_cor(ptr); } else { int found = 0; timelib_long offset = 0; char *tz_abbr; t->is_localtime = 1; /* First, we lookup by abbreviation only */ offset = timelib_lookup_abbr(ptr, dst, &tz_abbr, &found); if (found) { t->zone_type = TIMELIB_ZONETYPE_ABBR; timelib_time_tz_abbr_update(t, tz_abbr); } /* Otherwise, we look if we have a TimeZone identifier */ if (!found || strcmp("UTC", tz_abbr) == 0) { if ((res = tz_wrapper(tz_abbr, tzdb)) != NULL) { t->tz_info = res; t->zone_type = TIMELIB_ZONETYPE_ID; found++; } } timelib_free(tz_abbr); *tz_not_found = (found == 0); retval = offset; } while (**ptr == ')') { ++*ptr; } return retval; } #define timelib_split_free(arg) { \ int i; \ for (i = 0; i < arg.c; i++) { \ timelib_free(arg.v[i]); \ } \ if (arg.v) { \ timelib_free(arg.v); \ } \ } static int scan(Scanner *s, timelib_tz_get_wrapper tz_get_wrapper) { uchar *cursor = s->cur; char *str, *ptr = NULL; std: s->tok = cursor; s->len = 0; { YYCTYPE yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 64, 160, 96, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 24, 24, 24, 88, 24, 24, 24, 88, 24, 24, 24, 24, 24, 88, 24, 24, 24, 88, 88, 88, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; YYDEBUG(0, *YYCURSOR); if ((YYLIMIT - YYCURSOR) < 33) YYFILL(33); yych = *YYCURSOR; switch (yych) { case 0x00: case '\n': goto yy51; case '\t': case ' ': goto yy48; case '(': goto yy45; case '+': case '-': goto yy30; case ',': case '.': goto yy50; case '0': goto yy25; case '1': goto yy26; case '2': goto yy27; case '3': goto yy28; case '4': case '5': case '6': case '7': case '8': case '9': goto yy29; case '@': goto yy11; case 'A': goto yy36; case 'B': goto yy17; case 'C': case 'H': case 'K': case 'Q': case 'R': case 'U': case 'Z': goto yy46; case 'D': goto yy40; case 'E': goto yy21; case 'F': goto yy13; case 'G': goto yy44; case 'I': goto yy31; case 'J': goto yy34; case 'L': goto yy15; case 'M': goto yy7; case 'N': goto yy5; case 'O': goto yy38; case 'P': goto yy23; case 'S': goto yy19; case 'T': goto yy9; case 'V': goto yy32; case 'W': goto yy42; case 'X': goto yy33; case 'Y': goto yy2; case 'a': goto yy37; case 'b': goto yy18; case 'c': case 'g': case 'h': case 'i': case 'k': case 'q': case 'r': case 'u': case 'v': case 'x': case 'z': goto yy47; case 'd': goto yy41; case 'e': goto yy22; case 'f': goto yy14; case 'j': goto yy35; case 'l': goto yy16; case 'm': goto yy8; case 'n': goto yy6; case 'o': goto yy39; case 'p': goto yy24; case 's': goto yy20; case 't': goto yy10; case 'w': goto yy43; case 'y': goto yy4; default: goto yy53; } yy2: YYDEBUG(2, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= 'E') { if (yych <= ')') { if (yych >= ')') goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'D') goto yy140; goto yy1465; } } else { if (yych <= 'd') { if (yych <= 'Z') goto yy140; if (yych >= 'a') goto yy145; } else { if (yych <= 'e') goto yy1474; if (yych <= 'z') goto yy145; } } yy3: YYDEBUG(3, *YYCURSOR); { int tz_not_found; DEBUG_OUTPUT("tzcorrection | tz"); TIMELIB_INIT; TIMELIB_HAVE_TZ(); s->time->z = timelib_parse_zone((char **) &ptr, &s->time->dst, s->time, &tz_not_found, s->tzdb, tz_get_wrapper); if (tz_not_found) { add_error(s, "The timezone could not be found in the database"); } TIMELIB_DEINIT; return TIMELIB_TIMEZONE; } yy4: YYDEBUG(4, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'E') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'D') goto yy140; goto yy1465; } } else { if (yych <= 'd') { if (yych <= 'Z') goto yy140; if (yych <= '`') goto yy3; goto yy140; } else { if (yych <= 'e') goto yy1465; if (yych <= 'z') goto yy140; goto yy3; } } yy5: YYDEBUG(5, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'O') { if (yych <= 'D') { if (yych == ')') goto yy139; if (yych <= '@') goto yy3; goto yy140; } else { if (yych <= 'H') { if (yych <= 'E') goto yy1436; goto yy140; } else { if (yych <= 'I') goto yy1437; if (yych <= 'N') goto yy140; goto yy1435; } } } else { if (yych <= 'h') { if (yych <= '`') { if (yych <= 'Z') goto yy140; goto yy3; } else { if (yych == 'e') goto yy1452; goto yy145; } } else { if (yych <= 'n') { if (yych <= 'i') goto yy1453; goto yy145; } else { if (yych <= 'o') goto yy1451; if (yych <= 'z') goto yy145; goto yy3; } } } yy6: YYDEBUG(6, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'O') { if (yych <= 'D') { if (yych == ')') goto yy139; if (yych <= '@') goto yy3; goto yy140; } else { if (yych <= 'H') { if (yych <= 'E') goto yy1436; goto yy140; } else { if (yych <= 'I') goto yy1437; if (yych <= 'N') goto yy140; goto yy1435; } } } else { if (yych <= 'h') { if (yych <= '`') { if (yych <= 'Z') goto yy140; goto yy3; } else { if (yych == 'e') goto yy1436; goto yy140; } } else { if (yych <= 'n') { if (yych <= 'i') goto yy1437; goto yy140; } else { if (yych <= 'o') goto yy1435; if (yych <= 'z') goto yy140; goto yy3; } } } yy7: YYDEBUG(7, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'O') { if (yych <= 'A') { if (yych == ')') goto yy139; if (yych <= '@') goto yy3; goto yy1405; } else { if (yych == 'I') goto yy1406; if (yych <= 'N') goto yy140; goto yy1407; } } else { if (yych <= 'h') { if (yych <= 'Z') goto yy140; if (yych <= '`') goto yy3; if (yych <= 'a') goto yy1420; goto yy145; } else { if (yych <= 'n') { if (yych <= 'i') goto yy1421; goto yy145; } else { if (yych <= 'o') goto yy1422; if (yych <= 'z') goto yy145; goto yy3; } } } yy8: YYDEBUG(8, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'O') { if (yych <= 'A') { if (yych == ')') goto yy139; if (yych <= '@') goto yy3; goto yy1405; } else { if (yych == 'I') goto yy1406; if (yych <= 'N') goto yy140; goto yy1407; } } else { if (yych <= 'h') { if (yych <= 'Z') goto yy140; if (yych <= '`') goto yy3; if (yych <= 'a') goto yy1405; goto yy140; } else { if (yych <= 'n') { if (yych <= 'i') goto yy1406; goto yy140; } else { if (yych <= 'o') goto yy1407; if (yych <= 'z') goto yy140; goto yy3; } } } yy9: YYDEBUG(9, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); switch (yych) { case ')': goto yy139; case '0': case '1': goto yy1335; case '2': goto yy1336; case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy1337; case 'A': case 'B': case 'C': case 'D': case 'F': case 'G': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'V': case 'X': case 'Y': case 'Z': goto yy140; case 'E': goto yy1330; case 'H': goto yy1331; case 'O': goto yy1332; case 'U': goto yy1333; case 'W': goto yy1334; case 'a': case 'b': case 'c': case 'd': case 'f': case 'g': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'p': case 'q': case 'r': case 's': case 't': case 'v': case 'x': case 'y': case 'z': goto yy145; case 'e': goto yy1373; case 'h': goto yy1374; case 'o': goto yy1375; case 'u': goto yy1376; case 'w': goto yy1377; default: goto yy3; } yy10: YYDEBUG(10, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); switch (yych) { case ')': goto yy139; case '0': case '1': goto yy1335; case '2': goto yy1336; case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy1337; case 'A': case 'B': case 'C': case 'D': case 'F': case 'G': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'V': case 'X': case 'Y': case 'Z': case 'a': case 'b': case 'c': case 'd': case 'f': case 'g': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'p': case 'q': case 'r': case 's': case 't': case 'v': case 'x': case 'y': case 'z': goto yy140; case 'E': case 'e': goto yy1330; case 'H': case 'h': goto yy1331; case 'O': case 'o': goto yy1332; case 'U': case 'u': goto yy1333; case 'W': case 'w': goto yy1334; default: goto yy3; } yy11: YYDEBUG(11, *YYCURSOR); yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if (yych == '-') goto yy1326; if (yych <= '/') goto yy12; if (yych <= '9') goto yy1327; yy12: YYDEBUG(12, *YYCURSOR); { add_error(s, "Unexpected character"); goto std; } yy13: YYDEBUG(13, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'R') { if (yych <= 'E') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'D') goto yy140; goto yy1261; } } else { if (yych <= 'N') { if (yych == 'I') goto yy1262; goto yy140; } else { if (yych <= 'O') goto yy1263; if (yych <= 'Q') goto yy140; goto yy1264; } } } else { if (yych <= 'i') { if (yych <= 'd') { if (yych <= 'Z') goto yy140; if (yych <= '`') goto yy3; goto yy145; } else { if (yych <= 'e') goto yy1303; if (yych <= 'h') goto yy145; goto yy1304; } } else { if (yych <= 'q') { if (yych == 'o') goto yy1305; goto yy145; } else { if (yych <= 'r') goto yy1306; if (yych <= 'z') goto yy145; goto yy3; } } } yy14: YYDEBUG(14, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'R') { if (yych <= 'E') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'D') goto yy140; goto yy1261; } } else { if (yych <= 'N') { if (yych == 'I') goto yy1262; goto yy140; } else { if (yych <= 'O') goto yy1263; if (yych <= 'Q') goto yy140; goto yy1264; } } } else { if (yych <= 'i') { if (yych <= 'd') { if (yych <= 'Z') goto yy140; if (yych <= '`') goto yy3; goto yy140; } else { if (yych <= 'e') goto yy1261; if (yych <= 'h') goto yy140; goto yy1262; } } else { if (yych <= 'q') { if (yych == 'o') goto yy1263; goto yy140; } else { if (yych <= 'r') goto yy1264; if (yych <= 'z') goto yy140; goto yy3; } } } yy15: YYDEBUG(15, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'A') { if (yych == ')') goto yy139; if (yych <= '@') goto yy3; goto yy1247; } else { if (yych <= '`') { if (yych <= 'Z') goto yy140; goto yy3; } else { if (yych <= 'a') goto yy1258; if (yych <= 'z') goto yy145; goto yy3; } } yy16: YYDEBUG(16, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'A') { if (yych == ')') goto yy139; if (yych <= '@') goto yy3; goto yy1247; } else { if (yych <= '`') { if (yych <= 'Z') goto yy140; goto yy3; } else { if (yych <= 'a') goto yy1247; if (yych <= 'z') goto yy140; goto yy3; } } yy17: YYDEBUG(17, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'A') { if (yych == ')') goto yy139; if (yych <= '@') goto yy3; goto yy1226; } else { if (yych <= '`') { if (yych <= 'Z') goto yy140; goto yy3; } else { if (yych <= 'a') goto yy1244; if (yych <= 'z') goto yy145; goto yy3; } } yy18: YYDEBUG(18, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'A') { if (yych == ')') goto yy139; if (yych <= '@') goto yy3; goto yy1226; } else { if (yych <= '`') { if (yych <= 'Z') goto yy140; goto yy3; } else { if (yych <= 'a') goto yy1226; if (yych <= 'z') goto yy140; goto yy3; } } yy19: YYDEBUG(19, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych <= 'D') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'A') goto yy1169; goto yy140; } } else { if (yych <= 'H') { if (yych <= 'E') goto yy1168; goto yy140; } else { if (yych <= 'I') goto yy1170; if (yych <= 'T') goto yy140; goto yy1171; } } } else { if (yych <= 'e') { if (yych <= '`') { if (yych <= 'Z') goto yy140; goto yy3; } else { if (yych <= 'a') goto yy1198; if (yych <= 'd') goto yy145; goto yy1197; } } else { if (yych <= 't') { if (yych == 'i') goto yy1199; goto yy145; } else { if (yych <= 'u') goto yy1200; if (yych <= 'z') goto yy145; goto yy3; } } } yy20: YYDEBUG(20, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych <= 'D') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'A') goto yy1169; goto yy140; } } else { if (yych <= 'H') { if (yych <= 'E') goto yy1168; goto yy140; } else { if (yych <= 'I') goto yy1170; if (yych <= 'T') goto yy140; goto yy1171; } } } else { if (yych <= 'e') { if (yych <= '`') { if (yych <= 'Z') goto yy140; goto yy3; } else { if (yych <= 'a') goto yy1169; if (yych <= 'd') goto yy140; goto yy1168; } } else { if (yych <= 't') { if (yych == 'i') goto yy1170; goto yy140; } else { if (yych <= 'u') goto yy1171; if (yych <= 'z') goto yy140; goto yy3; } } } yy21: YYDEBUG(21, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'L') { if (yych <= '@') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == 'I') goto yy1138; if (yych <= 'K') goto yy140; goto yy1139; } } else { if (yych <= 'i') { if (yych <= 'Z') goto yy140; if (yych <= '`') goto yy3; if (yych <= 'h') goto yy145; goto yy1156; } else { if (yych == 'l') goto yy1157; if (yych <= 'z') goto yy145; goto yy3; } } yy22: YYDEBUG(22, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'L') { if (yych <= '@') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == 'I') goto yy1138; if (yych <= 'K') goto yy140; goto yy1139; } } else { if (yych <= 'i') { if (yych <= 'Z') goto yy140; if (yych <= '`') goto yy3; if (yych <= 'h') goto yy140; goto yy1138; } else { if (yych == 'l') goto yy1139; if (yych <= 'z') goto yy140; goto yy3; } } yy23: YYDEBUG(23, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'R') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'Q') goto yy140; goto yy1037; } } else { if (yych <= 'q') { if (yych <= 'Z') goto yy140; if (yych <= '`') goto yy3; goto yy145; } else { if (yych <= 'r') goto yy1131; if (yych <= 'z') goto yy145; goto yy3; } } yy24: YYDEBUG(24, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'R') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'Q') goto yy140; goto yy1037; } } else { if (yych <= 'q') { if (yych <= 'Z') goto yy140; if (yych <= '`') goto yy3; goto yy140; } else { if (yych <= 'r') goto yy1037; if (yych <= 'z') goto yy140; goto yy3; } } yy25: YYDEBUG(25, *YYCURSOR); yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); switch (yych) { case '\t': goto yy991; case ' ': case 'A': case 'D': case 'F': case 'H': case 'I': case 'J': case 'M': case 'N': case 'O': case 'S': case 'T': case 'V': case 'W': case 'X': case 'Y': case 'a': case 'd': case 'f': case 'h': case 'j': case 'm': case 'o': case 'w': case 'y': goto yy993; case '-': goto yy412; case '.': goto yy1003; case '/': goto yy411; case '0': goto yy1036; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy1035; case ':': goto yy1004; case 'n': goto yy409; case 'r': goto yy410; case 's': goto yy403; case 't': goto yy407; default: goto yy12; } yy26: YYDEBUG(26, *YYCURSOR); yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); switch (yych) { case '\t': goto yy399; case ' ': case 'A': case 'D': case 'F': case 'H': case 'I': case 'J': case 'M': case 'N': case 'O': case 'P': case 'S': case 'T': case 'V': case 'W': case 'X': case 'Y': case 'a': case 'd': case 'f': case 'h': case 'j': case 'm': case 'o': case 'p': case 'w': case 'y': goto yy401; case '-': goto yy412; case '.': goto yy413; case '/': goto yy411; case '0': case '1': case '2': goto yy1035; case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy1002; case ':': goto yy422; case 'n': goto yy409; case 'r': goto yy410; case 's': goto yy403; case 't': goto yy407; default: goto yy12; } yy27: YYDEBUG(27, *YYCURSOR); yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); switch (yych) { case '\t': goto yy399; case ' ': case 'A': case 'D': case 'F': case 'H': case 'I': case 'J': case 'M': case 'N': case 'O': case 'P': case 'S': case 'T': case 'V': case 'W': case 'X': case 'Y': case 'a': case 'd': case 'f': case 'h': case 'j': case 'm': case 'o': case 'p': case 'w': case 'y': goto yy401; case '-': goto yy412; case '.': goto yy413; case '/': goto yy411; case '0': case '1': case '2': case '3': case '4': goto yy1002; case '5': case '6': case '7': case '8': case '9': goto yy989; case ':': goto yy422; case 'n': goto yy409; case 'r': goto yy410; case 's': goto yy403; case 't': goto yy407; default: goto yy12; } yy28: YYDEBUG(28, *YYCURSOR); yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); switch (yych) { case '\t': goto yy399; case ' ': case 'A': case 'D': case 'F': case 'H': case 'I': case 'J': case 'M': case 'N': case 'O': case 'P': case 'S': case 'T': case 'V': case 'W': case 'X': case 'Y': case 'a': case 'd': case 'f': case 'h': case 'j': case 'm': case 'o': case 'p': case 'w': case 'y': goto yy401; case '-': goto yy412; case '.': goto yy413; case '/': goto yy411; case '0': case '1': goto yy989; case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy408; case ':': goto yy422; case 'n': goto yy409; case 'r': goto yy410; case 's': goto yy403; case 't': goto yy407; default: goto yy12; } yy29: YYDEBUG(29, *YYCURSOR); yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); switch (yych) { case '\t': goto yy399; case ' ': case 'A': case 'D': case 'F': case 'H': case 'I': case 'J': case 'M': case 'N': case 'O': case 'P': case 'S': case 'T': case 'V': case 'W': case 'X': case 'Y': case 'a': case 'd': case 'f': case 'h': case 'j': case 'm': case 'o': case 'p': case 'w': case 'y': goto yy401; case '-': goto yy412; case '.': goto yy413; case '/': goto yy411; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy408; case ':': goto yy422; case 'n': goto yy409; case 'r': goto yy410; case 's': goto yy403; case 't': goto yy407; default: goto yy12; } yy30: YYDEBUG(30, *YYCURSOR); yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 4) { goto yy57; } switch (yych) { case '+': case '-': goto yy379; case '0': case '1': goto yy376; case '2': goto yy377; case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy378; default: goto yy12; } yy31: YYDEBUG(31, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '9') { if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy3; goto yy195; } else { if (yych == ' ') goto yy195; goto yy3; } } else { if (yych <= ',') { if (yych <= ')') goto yy139; goto yy3; } else { if (yych == '/') goto yy3; goto yy195; } } } else { if (yych <= 'V') { if (yych <= 'H') { if (yych <= '@') goto yy3; goto yy140; } else { if (yych <= 'I') goto yy375; if (yych <= 'U') goto yy140; goto yy374; } } else { if (yych <= 'Z') { if (yych == 'X') goto yy374; goto yy140; } else { if (yych <= '`') goto yy3; if (yych <= 'z') goto yy145; goto yy3; } } } yy32: YYDEBUG(32, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= ' ') { if (yych == '\t') goto yy195; if (yych <= 0x1F) goto yy3; goto yy195; } else { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy195; } } else { if (yych <= 'H') { if (yych <= '/') goto yy3; if (yych <= '9') goto yy195; if (yych <= '@') goto yy3; goto yy140; } else { if (yych <= 'Z') { if (yych <= 'I') goto yy371; goto yy140; } else { if (yych <= '`') goto yy3; if (yych <= 'z') goto yy145; goto yy3; } } } yy33: YYDEBUG(33, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= ' ') { if (yych == '\t') goto yy195; if (yych <= 0x1F) goto yy3; goto yy195; } else { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy195; } } else { if (yych <= 'H') { if (yych <= '/') goto yy3; if (yych <= '9') goto yy195; if (yych <= '@') goto yy3; goto yy140; } else { if (yych <= 'Z') { if (yych <= 'I') goto yy369; goto yy140; } else { if (yych <= '`') goto yy3; if (yych <= 'z') goto yy145; goto yy3; } } } yy34: YYDEBUG(34, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych <= '@') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'A') goto yy352; if (yych <= 'T') goto yy140; goto yy351; } } else { if (yych <= 'a') { if (yych <= 'Z') goto yy140; if (yych <= '`') goto yy3; goto yy361; } else { if (yych == 'u') goto yy360; if (yych <= 'z') goto yy145; goto yy3; } } yy35: YYDEBUG(35, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych <= '@') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'A') goto yy352; if (yych <= 'T') goto yy140; goto yy351; } } else { if (yych <= 'a') { if (yych <= 'Z') goto yy140; if (yych <= '`') goto yy3; goto yy352; } else { if (yych == 'u') goto yy351; if (yych <= 'z') goto yy140; goto yy3; } } yy36: YYDEBUG(36, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych <= 'F') { if (yych == ')') goto yy139; if (yych <= '@') goto yy3; goto yy140; } else { if (yych <= 'O') { if (yych <= 'G') goto yy330; goto yy140; } else { if (yych <= 'P') goto yy329; if (yych <= 'T') goto yy140; goto yy328; } } } else { if (yych <= 'o') { if (yych <= '`') { if (yych <= 'Z') goto yy140; goto yy3; } else { if (yych == 'g') goto yy342; goto yy145; } } else { if (yych <= 't') { if (yych <= 'p') goto yy341; goto yy145; } else { if (yych <= 'u') goto yy340; if (yych <= 'z') goto yy145; goto yy3; } } } yy37: YYDEBUG(37, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych <= 'F') { if (yych == ')') goto yy139; if (yych <= '@') goto yy3; goto yy140; } else { if (yych <= 'O') { if (yych <= 'G') goto yy330; goto yy140; } else { if (yych <= 'P') goto yy329; if (yych <= 'T') goto yy140; goto yy328; } } } else { if (yych <= 'o') { if (yych <= '`') { if (yych <= 'Z') goto yy140; goto yy3; } else { if (yych == 'g') goto yy330; goto yy140; } } else { if (yych <= 't') { if (yych <= 'p') goto yy329; goto yy140; } else { if (yych <= 'u') goto yy328; if (yych <= 'z') goto yy140; goto yy3; } } } yy38: YYDEBUG(38, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'C') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'B') goto yy140; goto yy318; } } else { if (yych <= 'b') { if (yych <= 'Z') goto yy140; if (yych <= '`') goto yy3; goto yy145; } else { if (yych <= 'c') goto yy323; if (yych <= 'z') goto yy145; goto yy3; } } yy39: YYDEBUG(39, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'C') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'B') goto yy140; goto yy318; } } else { if (yych <= 'b') { if (yych <= 'Z') goto yy140; if (yych <= '`') goto yy3; goto yy140; } else { if (yych <= 'c') goto yy318; if (yych <= 'z') goto yy140; goto yy3; } } yy40: YYDEBUG(40, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'E') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'D') goto yy140; goto yy191; } } else { if (yych <= 'd') { if (yych <= 'Z') goto yy140; if (yych <= '`') goto yy3; goto yy145; } else { if (yych <= 'e') goto yy309; if (yych <= 'z') goto yy145; goto yy3; } } yy41: YYDEBUG(41, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'E') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'D') goto yy140; goto yy191; } } else { if (yych <= 'd') { if (yych <= 'Z') goto yy140; if (yych <= '`') goto yy3; goto yy140; } else { if (yych <= 'e') goto yy191; if (yych <= 'z') goto yy140; goto yy3; } } yy42: YYDEBUG(42, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'E') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'D') goto yy140; goto yy164; } } else { if (yych <= 'd') { if (yych <= 'Z') goto yy140; if (yych <= '`') goto yy3; goto yy145; } else { if (yych <= 'e') goto yy178; if (yych <= 'z') goto yy145; goto yy3; } } yy43: YYDEBUG(43, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'E') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'D') goto yy140; goto yy164; } } else { if (yych <= 'd') { if (yych <= 'Z') goto yy140; if (yych <= '`') goto yy3; goto yy140; } else { if (yych <= 'e') goto yy164; if (yych <= 'z') goto yy140; goto yy3; } } yy44: YYDEBUG(44, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'L') { if (yych == ')') goto yy139; if (yych <= '@') goto yy3; goto yy140; } else { if (yych <= 'Z') { if (yych <= 'M') goto yy156; goto yy140; } else { if (yych <= '`') goto yy3; if (yych <= 'z') goto yy145; goto yy3; } } yy45: YYDEBUG(45, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '@') goto yy12; if (yych <= 'Z') goto yy155; if (yych <= '`') goto yy12; if (yych <= 'z') goto yy155; goto yy12; yy46: YYDEBUG(46, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '@') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'Z') goto yy140; if (yych <= '`') goto yy3; if (yych <= 'z') goto yy145; goto yy3; } yy47: YYDEBUG(47, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '@') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'Z') goto yy140; if (yych <= '`') goto yy3; if (yych <= 'z') goto yy140; goto yy3; } yy48: YYDEBUG(48, *YYCURSOR); yyaccept = 2; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 4) { goto yy57; } if (yych <= '/') goto yy49; if (yych <= '9') goto yy54; yy49: YYDEBUG(49, *YYCURSOR); { goto std; } yy50: YYDEBUG(50, *YYCURSOR); yych = *++YYCURSOR; goto yy49; yy51: YYDEBUG(51, *YYCURSOR); ++YYCURSOR; YYDEBUG(52, *YYCURSOR); { s->pos = cursor; s->line++; goto std; } yy53: YYDEBUG(53, *YYCURSOR); yych = *++YYCURSOR; goto yy12; yy54: YYDEBUG(54, *YYCURSOR); ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 11) YYFILL(11); yych = *YYCURSOR; YYDEBUG(55, *YYCURSOR); if (yybm[0+yych] & 2) { goto yy54; } if (yych <= 'W') { if (yych <= 'F') { if (yych <= ' ') { if (yych == '\t') goto yy59; if (yych >= ' ') goto yy59; } else { if (yych == 'D') goto yy64; if (yych >= 'F') goto yy65; } } else { if (yych <= 'M') { if (yych == 'H') goto yy63; if (yych >= 'M') goto yy62; } else { if (yych <= 'S') { if (yych >= 'S') goto yy61; } else { if (yych <= 'T') goto yy68; if (yych >= 'W') goto yy67; } } } } else { if (yych <= 'l') { if (yych <= 'd') { if (yych == 'Y') goto yy66; if (yych >= 'd') goto yy64; } else { if (yych <= 'f') { if (yych >= 'f') goto yy65; } else { if (yych == 'h') goto yy63; } } } else { if (yych <= 't') { if (yych <= 'm') goto yy62; if (yych <= 'r') goto yy56; if (yych <= 's') goto yy61; goto yy68; } else { if (yych <= 'w') { if (yych >= 'w') goto yy67; } else { if (yych == 'y') goto yy66; } } } } yy56: YYDEBUG(56, *YYCURSOR); YYCURSOR = YYMARKER; if (yyaccept <= 16) { if (yyaccept <= 8) { if (yyaccept <= 4) { if (yyaccept <= 2) { if (yyaccept <= 1) { if (yyaccept == 0) { goto yy3; } else { goto yy12; } } else { goto yy49; } } else { if (yyaccept == 3) { goto yy72; } else { goto yy166; } } } else { if (yyaccept <= 6) { if (yyaccept == 5) { goto yy193; } else { goto yy207; } } else { if (yyaccept == 7) { goto yy221; } else { goto yy332; } } } } else { if (yyaccept <= 12) { if (yyaccept <= 10) { if (yyaccept == 9) { goto yy415; } else { goto yy430; } } else { if (yyaccept == 11) { goto yy551; } else { goto yy596; } } } else { if (yyaccept <= 14) { if (yyaccept == 13) { goto yy606; } else { goto yy703; } } else { if (yyaccept == 15) { goto yy723; } else { goto yy754; } } } } } else { if (yyaccept <= 24) { if (yyaccept <= 20) { if (yyaccept <= 18) { if (yyaccept == 17) { goto yy761; } else { goto yy788; } } else { if (yyaccept == 19) { goto yy733; } else { goto yy394; } } } else { if (yyaccept <= 22) { if (yyaccept == 21) { goto yy913; } else { goto yy782; } } else { if (yyaccept == 23) { goto yy1007; } else { goto yy1015; } } } } else { if (yyaccept <= 28) { if (yyaccept <= 26) { if (yyaccept == 25) { goto yy1057; } else { goto yy1081; } } else { if (yyaccept == 27) { goto yy1234; } else { goto yy1359; } } } else { if (yyaccept <= 30) { if (yyaccept == 29) { goto yy1362; } else { goto yy1442; } } else { if (yyaccept == 31) { goto yy1450; } else { goto yy1473; } } } } } yy57: YYDEBUG(57, *YYCURSOR); ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; YYDEBUG(58, *YYCURSOR); if (yybm[0+yych] & 4) { goto yy57; } if (yych <= '/') goto yy56; if (yych <= '9') goto yy54; goto yy56; yy59: YYDEBUG(59, *YYCURSOR); ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 11) YYFILL(11); yych = *YYCURSOR; yy60: YYDEBUG(60, *YYCURSOR); if (yych <= 'W') { if (yych <= 'F') { if (yych <= ' ') { if (yych == '\t') goto yy59; if (yych <= 0x1F) goto yy56; goto yy59; } else { if (yych == 'D') goto yy64; if (yych <= 'E') goto yy56; goto yy65; } } else { if (yych <= 'M') { if (yych == 'H') goto yy63; if (yych <= 'L') goto yy56; goto yy62; } else { if (yych <= 'S') { if (yych <= 'R') goto yy56; } else { if (yych <= 'T') goto yy68; if (yych <= 'V') goto yy56; goto yy67; } } } } else { if (yych <= 'l') { if (yych <= 'd') { if (yych == 'Y') goto yy66; if (yych <= 'c') goto yy56; goto yy64; } else { if (yych <= 'f') { if (yych <= 'e') goto yy56; goto yy65; } else { if (yych == 'h') goto yy63; goto yy56; } } } else { if (yych <= 't') { if (yych <= 'm') goto yy62; if (yych <= 'r') goto yy56; if (yych >= 't') goto yy68; } else { if (yych <= 'w') { if (yych <= 'v') goto yy56; goto yy67; } else { if (yych == 'y') goto yy66; goto yy56; } } } } yy61: YYDEBUG(61, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych <= 'D') { if (yych == 'A') goto yy126; goto yy56; } else { if (yych <= 'E') goto yy127; if (yych <= 'T') goto yy56; goto yy125; } } else { if (yych <= 'd') { if (yych == 'a') goto yy126; goto yy56; } else { if (yych <= 'e') goto yy127; if (yych == 'u') goto yy125; goto yy56; } } yy62: YYDEBUG(62, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'O') { if (yych == 'I') goto yy117; if (yych <= 'N') goto yy56; goto yy116; } else { if (yych <= 'i') { if (yych <= 'h') goto yy56; goto yy117; } else { if (yych == 'o') goto yy116; goto yy56; } } yy63: YYDEBUG(63, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'O') goto yy114; if (yych == 'o') goto yy114; goto yy56; yy64: YYDEBUG(64, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy113; if (yych == 'a') goto yy113; goto yy56; yy65: YYDEBUG(65, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'R') { if (yych == 'O') goto yy98; if (yych <= 'Q') goto yy56; goto yy97; } else { if (yych <= 'o') { if (yych <= 'n') goto yy56; goto yy98; } else { if (yych == 'r') goto yy97; goto yy56; } } yy66: YYDEBUG(66, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy94; if (yych == 'e') goto yy94; goto yy56; yy67: YYDEBUG(67, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy82; if (yych == 'e') goto yy82; goto yy56; yy68: YYDEBUG(68, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych == 'H') goto yy69; if (yych <= 'T') goto yy56; goto yy70; } else { if (yych <= 'h') { if (yych <= 'g') goto yy56; } else { if (yych == 'u') goto yy70; goto yy56; } } yy69: YYDEBUG(69, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'U') goto yy77; if (yych == 'u') goto yy77; goto yy56; yy70: YYDEBUG(70, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy71; if (yych != 'e') goto yy56; yy71: YYDEBUG(71, *YYCURSOR); yyaccept = 3; yych = *(YYMARKER = ++YYCURSOR); if (yych == 'S') goto yy73; if (yych == 's') goto yy73; yy72: YYDEBUG(72, *YYCURSOR); { timelib_ull i; DEBUG_OUTPUT("relative"); TIMELIB_INIT; TIMELIB_HAVE_RELATIVE(); while(*ptr) { i = timelib_get_unsigned_nr((char **) &ptr, 24); timelib_eat_spaces((char **) &ptr); timelib_set_relative((char **) &ptr, i, 1, s); } TIMELIB_DEINIT; return TIMELIB_RELATIVE; } yy73: YYDEBUG(73, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'D') goto yy74; if (yych != 'd') goto yy56; yy74: YYDEBUG(74, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy75; if (yych != 'a') goto yy56; yy75: YYDEBUG(75, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy76; if (yych != 'y') goto yy56; yy76: YYDEBUG(76, *YYCURSOR); yych = *++YYCURSOR; goto yy72; yy77: YYDEBUG(77, *YYCURSOR); yyaccept = 3; yych = *(YYMARKER = ++YYCURSOR); if (yych == 'R') goto yy78; if (yych != 'r') goto yy72; yy78: YYDEBUG(78, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'S') goto yy79; if (yych != 's') goto yy56; yy79: YYDEBUG(79, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'D') goto yy80; if (yych != 'd') goto yy56; yy80: YYDEBUG(80, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy81; if (yych != 'a') goto yy56; yy81: YYDEBUG(81, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy76; if (yych == 'y') goto yy76; goto yy56; yy82: YYDEBUG(82, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'E') { if (yych <= 'C') goto yy56; if (yych <= 'D') goto yy84; } else { if (yych <= 'c') goto yy56; if (yych <= 'd') goto yy84; if (yych >= 'f') goto yy56; } YYDEBUG(83, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'K') goto yy90; if (yych == 'k') goto yy90; goto yy56; yy84: YYDEBUG(84, *YYCURSOR); yyaccept = 3; yych = *(YYMARKER = ++YYCURSOR); if (yych == 'N') goto yy85; if (yych != 'n') goto yy72; yy85: YYDEBUG(85, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy86; if (yych != 'e') goto yy56; yy86: YYDEBUG(86, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'S') goto yy87; if (yych != 's') goto yy56; yy87: YYDEBUG(87, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'D') goto yy88; if (yych != 'd') goto yy56; yy88: YYDEBUG(88, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy89; if (yych != 'a') goto yy56; yy89: YYDEBUG(89, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy76; if (yych == 'y') goto yy76; goto yy56; yy90: YYDEBUG(90, *YYCURSOR); yyaccept = 3; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { if (yych == 'D') goto yy91; if (yych <= 'R') goto yy72; goto yy76; } else { if (yych <= 'd') { if (yych <= 'c') goto yy72; } else { if (yych == 's') goto yy76; goto yy72; } } yy91: YYDEBUG(91, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy92; if (yych != 'a') goto yy56; yy92: YYDEBUG(92, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy93; if (yych != 'y') goto yy56; yy93: YYDEBUG(93, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'S') goto yy76; if (yych == 's') goto yy76; goto yy72; yy94: YYDEBUG(94, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy95; if (yych != 'a') goto yy56; yy95: YYDEBUG(95, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy96; if (yych != 'r') goto yy56; yy96: YYDEBUG(96, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'S') goto yy76; if (yych == 's') goto yy76; goto yy72; yy97: YYDEBUG(97, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'I') goto yy110; if (yych == 'i') goto yy110; goto yy56; yy98: YYDEBUG(98, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy99; if (yych != 'r') goto yy56; yy99: YYDEBUG(99, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'T') goto yy100; if (yych != 't') goto yy56; yy100: YYDEBUG(100, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'N') { if (yych == 'H') goto yy102; if (yych <= 'M') goto yy56; } else { if (yych <= 'h') { if (yych <= 'g') goto yy56; goto yy102; } else { if (yych != 'n') goto yy56; } } YYDEBUG(101, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'I') goto yy107; if (yych == 'i') goto yy107; goto yy56; yy102: YYDEBUG(102, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'N') goto yy103; if (yych != 'n') goto yy56; yy103: YYDEBUG(103, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'I') goto yy104; if (yych != 'i') goto yy56; yy104: YYDEBUG(104, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'G') goto yy105; if (yych != 'g') goto yy56; yy105: YYDEBUG(105, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'H') goto yy106; if (yych != 'h') goto yy56; yy106: YYDEBUG(106, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'T') goto yy96; if (yych == 't') goto yy96; goto yy56; yy107: YYDEBUG(107, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'G') goto yy108; if (yych != 'g') goto yy56; yy108: YYDEBUG(108, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'H') goto yy109; if (yych != 'h') goto yy56; yy109: YYDEBUG(109, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'T') goto yy96; if (yych == 't') goto yy96; goto yy56; yy110: YYDEBUG(110, *YYCURSOR); yyaccept = 3; yych = *(YYMARKER = ++YYCURSOR); if (yych == 'D') goto yy111; if (yych != 'd') goto yy72; yy111: YYDEBUG(111, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy112; if (yych != 'a') goto yy56; yy112: YYDEBUG(112, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy76; if (yych == 'y') goto yy76; goto yy56; yy113: YYDEBUG(113, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy96; if (yych == 'y') goto yy96; goto yy56; yy114: YYDEBUG(114, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'U') goto yy115; if (yych != 'u') goto yy56; yy115: YYDEBUG(115, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy96; if (yych == 'r') goto yy96; goto yy56; yy116: YYDEBUG(116, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'N') goto yy121; if (yych == 'n') goto yy121; goto yy56; yy117: YYDEBUG(117, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'N') goto yy118; if (yych != 'n') goto yy56; yy118: YYDEBUG(118, *YYCURSOR); yyaccept = 3; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'U') { if (yych == 'S') goto yy76; if (yych <= 'T') goto yy72; } else { if (yych <= 's') { if (yych <= 'r') goto yy72; goto yy76; } else { if (yych != 'u') goto yy72; } } YYDEBUG(119, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'T') goto yy120; if (yych != 't') goto yy56; yy120: YYDEBUG(120, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy96; if (yych == 'e') goto yy96; goto yy56; yy121: YYDEBUG(121, *YYCURSOR); yyaccept = 3; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'T') { if (yych == 'D') goto yy122; if (yych <= 'S') goto yy72; goto yy123; } else { if (yych <= 'd') { if (yych <= 'c') goto yy72; } else { if (yych == 't') goto yy123; goto yy72; } } yy122: YYDEBUG(122, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy124; if (yych == 'a') goto yy124; goto yy56; yy123: YYDEBUG(123, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'H') goto yy96; if (yych == 'h') goto yy96; goto yy56; yy124: YYDEBUG(124, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy76; if (yych == 'y') goto yy76; goto yy56; yy125: YYDEBUG(125, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'N') goto yy136; if (yych == 'n') goto yy136; goto yy56; yy126: YYDEBUG(126, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'T') goto yy131; if (yych == 't') goto yy131; goto yy56; yy127: YYDEBUG(127, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'C') goto yy128; if (yych != 'c') goto yy56; yy128: YYDEBUG(128, *YYCURSOR); yyaccept = 3; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { if (yych == 'O') goto yy129; if (yych <= 'R') goto yy72; goto yy76; } else { if (yych <= 'o') { if (yych <= 'n') goto yy72; } else { if (yych == 's') goto yy76; goto yy72; } } yy129: YYDEBUG(129, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'N') goto yy130; if (yych != 'n') goto yy56; yy130: YYDEBUG(130, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'D') goto yy96; if (yych == 'd') goto yy96; goto yy56; yy131: YYDEBUG(131, *YYCURSOR); yyaccept = 3; yych = *(YYMARKER = ++YYCURSOR); if (yych == 'U') goto yy132; if (yych != 'u') goto yy72; yy132: YYDEBUG(132, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy133; if (yych != 'r') goto yy56; yy133: YYDEBUG(133, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'D') goto yy134; if (yych != 'd') goto yy56; yy134: YYDEBUG(134, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy135; if (yych != 'a') goto yy56; yy135: YYDEBUG(135, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy76; if (yych == 'y') goto yy76; goto yy56; yy136: YYDEBUG(136, *YYCURSOR); yyaccept = 3; yych = *(YYMARKER = ++YYCURSOR); if (yych == 'D') goto yy137; if (yych != 'd') goto yy72; yy137: YYDEBUG(137, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy138; if (yych != 'a') goto yy56; yy138: YYDEBUG(138, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy76; if (yych == 'y') goto yy76; goto yy56; yy139: YYDEBUG(139, *YYCURSOR); yych = *++YYCURSOR; goto yy3; yy140: YYDEBUG(140, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '@') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; if (yych >= '{') goto yy3; } yy141: YYDEBUG(141, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '@') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy3; if (yych >= '{') goto yy3; } yy142: YYDEBUG(142, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '@') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; if (yych >= '{') goto yy3; } yy143: YYDEBUG(143, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '@') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'Z') goto yy144; if (yych <= '`') goto yy3; if (yych >= '{') goto yy3; } yy144: YYDEBUG(144, *YYCURSOR); yych = *++YYCURSOR; if (yych == ')') goto yy139; goto yy3; yy145: YYDEBUG(145, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; goto yy147; } } else { if (yych <= '^') { if (yych <= '@') goto yy3; if (yych <= 'Z') goto yy141; goto yy3; } else { if (yych <= '_') goto yy147; if (yych <= '`') goto yy3; if (yych >= '{') goto yy3; } } yy146: YYDEBUG(146, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; } } else { if (yych <= '^') { if (yych <= '@') goto yy3; if (yych <= 'Z') goto yy142; goto yy3; } else { if (yych <= '_') goto yy147; if (yych <= '`') goto yy3; if (yych <= 'z') goto yy150; goto yy3; } } yy147: YYDEBUG(147, *YYCURSOR); ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 8) { goto yy148; } goto yy56; yy148: YYDEBUG(148, *YYCURSOR); yyaccept = 0; YYMARKER = ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; YYDEBUG(149, *YYCURSOR); if (yybm[0+yych] & 8) { goto yy148; } if (yych <= '.') { if (yych == '-') goto yy147; goto yy3; } else { if (yych <= '/') goto yy147; if (yych == '_') goto yy147; goto yy3; } yy150: YYDEBUG(150, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; goto yy147; } } else { if (yych <= '^') { if (yych <= '@') goto yy3; if (yych <= 'Z') goto yy143; goto yy3; } else { if (yych <= '_') goto yy147; if (yych <= '`') goto yy3; if (yych >= '{') goto yy3; } } yy151: YYDEBUG(151, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; goto yy147; } } else { if (yych <= '^') { if (yych <= '@') goto yy3; if (yych <= 'Z') goto yy144; goto yy3; } else { if (yych <= '_') goto yy147; if (yych <= '`') goto yy3; if (yych >= '{') goto yy3; } } yy152: YYDEBUG(152, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 16) { goto yy153; } if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych <= '/') { if (yych <= '.') goto yy3; goto yy147; } else { if (yych == '_') goto yy147; goto yy3; } } yy153: YYDEBUG(153, *YYCURSOR); ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy154: YYDEBUG(154, *YYCURSOR); if (yybm[0+yych] & 16) { goto yy153; } if (yych <= '.') { if (yych == '-') goto yy147; goto yy56; } else { if (yych <= '/') goto yy147; if (yych == '_') goto yy147; goto yy56; } yy155: YYDEBUG(155, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '@') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'Z') goto yy140; if (yych <= '`') goto yy3; if (yych <= 'z') goto yy140; goto yy3; } yy156: YYDEBUG(156, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'S') { if (yych == ')') goto yy139; if (yych <= '@') goto yy3; goto yy141; } else { if (yych <= 'Z') { if (yych >= 'U') goto yy141; } else { if (yych <= '`') goto yy3; if (yych <= 'z') goto yy141; goto yy3; } } YYDEBUG(157, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ',') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych != '+') goto yy3; } } else { if (yych <= 'Z') { if (yych <= '-') goto yy158; if (yych <= '@') goto yy3; goto yy142; } else { if (yych <= '`') goto yy3; if (yych <= 'z') goto yy142; goto yy3; } } yy158: YYDEBUG(158, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '1') goto yy159; if (yych <= '2') goto yy160; if (yych <= '9') goto yy161; goto yy56; yy159: YYDEBUG(159, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy3; if (yych <= '9') goto yy161; if (yych <= ':') goto yy162; goto yy3; yy160: YYDEBUG(160, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '5') { if (yych <= '/') goto yy3; if (yych >= '5') goto yy163; } else { if (yych <= '9') goto yy139; if (yych <= ':') goto yy162; goto yy3; } yy161: YYDEBUG(161, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy3; if (yych <= '5') goto yy163; if (yych <= '9') goto yy139; if (yych >= ';') goto yy3; yy162: YYDEBUG(162, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy3; if (yych <= '5') goto yy163; if (yych <= '9') goto yy139; goto yy3; yy163: YYDEBUG(163, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy3; if (yych <= '9') goto yy139; goto yy3; yy164: YYDEBUG(164, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'E') { if (yych <= '@') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'C') goto yy141; if (yych >= 'E') goto yy167; } } else { if (yych <= 'c') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; goto yy141; } else { if (yych <= 'd') goto yy165; if (yych <= 'e') goto yy167; if (yych <= 'z') goto yy141; goto yy3; } } yy165: YYDEBUG(165, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= 'N') { if (yych <= ')') { if (yych >= ')') goto yy139; } else { if (yych <= '@') goto yy166; if (yych <= 'M') goto yy142; goto yy173; } } else { if (yych <= 'm') { if (yych <= 'Z') goto yy142; if (yych >= 'a') goto yy142; } else { if (yych <= 'n') goto yy173; if (yych <= 'z') goto yy142; } } yy166: YYDEBUG(166, *YYCURSOR); { const timelib_relunit* relunit; DEBUG_OUTPUT("daytext"); TIMELIB_INIT; TIMELIB_HAVE_RELATIVE(); TIMELIB_HAVE_WEEKDAY_RELATIVE(); TIMELIB_UNHAVE_TIME(); relunit = timelib_lookup_relunit((char**) &ptr); s->time->relative.weekday = relunit->multiplier; if (s->time->relative.weekday_behavior != 2) { s->time->relative.weekday_behavior = 1; } TIMELIB_DEINIT; return TIMELIB_WEEKDAY; } yy167: YYDEBUG(167, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'K') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'J') goto yy142; } } else { if (yych <= 'j') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy3; goto yy142; } else { if (yych <= 'k') goto yy168; if (yych <= 'z') goto yy142; goto yy3; } } yy168: YYDEBUG(168, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'D') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'C') goto yy143; } } else { if (yych <= 'c') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 'd') goto yy169; if (yych <= 'z') goto yy143; goto yy3; } } yy169: YYDEBUG(169, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'A') { if (yych == ')') goto yy139; if (yych <= '@') goto yy3; } else { if (yych <= '`') { if (yych <= 'Z') goto yy144; goto yy3; } else { if (yych <= 'a') goto yy170; if (yych <= 'z') goto yy144; goto yy3; } } yy170: YYDEBUG(170, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'X') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'Y') goto yy171; if (yych != 'y') goto yy3; } yy171: YYDEBUG(171, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'S') goto yy172; if (yych != 's') goto yy166; yy172: YYDEBUG(172, *YYCURSOR); yych = *++YYCURSOR; goto yy166; yy173: YYDEBUG(173, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'E') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'D') goto yy143; } } else { if (yych <= 'd') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 'e') goto yy174; if (yych <= 'z') goto yy143; goto yy3; } } yy174: YYDEBUG(174, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'S') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'R') goto yy144; } } else { if (yych <= 'r') { if (yych <= 'Z') goto yy144; if (yych <= '`') goto yy3; goto yy144; } else { if (yych <= 's') goto yy175; if (yych <= 'z') goto yy144; goto yy3; } } yy175: YYDEBUG(175, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'C') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'D') goto yy176; if (yych != 'd') goto yy3; } yy176: YYDEBUG(176, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy177; if (yych != 'a') goto yy56; yy177: YYDEBUG(177, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy172; if (yych == 'y') goto yy172; goto yy56; yy178: YYDEBUG(178, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'D') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych <= '/') { if (yych <= '.') goto yy3; goto yy147; } else { if (yych <= '@') goto yy3; if (yych <= 'C') goto yy141; goto yy165; } } } else { if (yych <= '`') { if (yych <= 'Z') { if (yych <= 'E') goto yy167; goto yy141; } else { if (yych == '_') goto yy147; goto yy3; } } else { if (yych <= 'd') { if (yych <= 'c') goto yy146; } else { if (yych <= 'e') goto yy180; if (yych <= 'z') goto yy146; goto yy3; } } } YYDEBUG(179, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'M') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy166; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy166; goto yy142; } } else { if (yych <= '_') { if (yych <= 'N') goto yy173; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy166; goto yy147; } else { if (yych <= 'm') { if (yych <= '`') goto yy166; goto yy150; } else { if (yych <= 'n') goto yy186; if (yych <= 'z') goto yy150; goto yy166; } } } yy180: YYDEBUG(180, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'J') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy142; } } else { if (yych <= '_') { if (yych <= 'K') goto yy168; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'j') { if (yych <= '`') goto yy3; goto yy150; } else { if (yych <= 'k') goto yy181; if (yych <= 'z') goto yy150; goto yy3; } } } yy181: YYDEBUG(181, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'C') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'D') goto yy169; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'c') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 'd') goto yy182; if (yych <= 'z') goto yy151; goto yy3; } } } yy182: YYDEBUG(182, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '@') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; if (yych <= '/') goto yy147; goto yy3; } } else { if (yych <= '_') { if (yych <= 'A') goto yy170; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= '`') goto yy3; if (yych <= 'a') goto yy183; if (yych <= 'z') goto yy152; goto yy3; } } yy183: YYDEBUG(183, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'X') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; if (yych <= '/') goto yy147; goto yy3; } } else { if (yych <= '`') { if (yych <= 'Y') goto yy171; if (yych == '_') goto yy147; goto yy3; } else { if (yych == 'y') goto yy184; if (yych <= 'z') goto yy153; goto yy3; } } yy184: YYDEBUG(184, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { if (yych <= '.') { if (yych == '-') goto yy147; goto yy166; } else { if (yych <= '/') goto yy147; if (yych <= 'R') goto yy166; goto yy172; } } else { if (yych <= '`') { if (yych == '_') goto yy147; goto yy166; } else { if (yych == 's') goto yy185; if (yych <= 'z') goto yy153; goto yy166; } } yy185: YYDEBUG(185, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 16) { goto yy153; } if (yych <= '.') { if (yych == '-') goto yy147; goto yy166; } else { if (yych <= '/') goto yy147; if (yych == '_') goto yy147; goto yy166; } yy186: YYDEBUG(186, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'D') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'E') goto yy174; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'd') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 'e') goto yy187; if (yych <= 'z') goto yy151; goto yy3; } } } yy187: YYDEBUG(187, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'R') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy144; } } else { if (yych <= '_') { if (yych <= 'S') goto yy175; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'r') { if (yych <= '`') goto yy3; goto yy152; } else { if (yych <= 's') goto yy188; if (yych <= 'z') goto yy152; goto yy3; } } } yy188: YYDEBUG(188, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'C') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; if (yych <= '/') goto yy147; goto yy3; } } else { if (yych <= '`') { if (yych <= 'D') goto yy176; if (yych == '_') goto yy147; goto yy3; } else { if (yych == 'd') goto yy189; if (yych <= 'z') goto yy153; goto yy3; } } yy189: YYDEBUG(189, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy177; if (yych != 'a') goto yy154; YYDEBUG(190, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy172; if (yych == 'y') goto yy185; goto yy154; yy191: YYDEBUG(191, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'C') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'B') goto yy141; } } else { if (yych <= 'b') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; goto yy141; } else { if (yych <= 'c') goto yy192; if (yych <= 'z') goto yy141; goto yy3; } } yy192: YYDEBUG(192, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= '(') { if (yych <= '\t') { if (yych >= '\t') goto yy195; } else { if (yych == ' ') goto yy195; } } else { if (yych <= ',') { if (yych <= ')') goto yy139; } else { if (yych <= '-') goto yy196; if (yych <= '.') goto yy195; } } } else { if (yych <= 'Z') { if (yych <= '@') { if (yych <= '9') goto yy195; } else { if (yych == 'E') goto yy200; goto yy142; } } else { if (yych <= 'd') { if (yych >= 'a') goto yy142; } else { if (yych <= 'e') goto yy200; if (yych <= 'z') goto yy142; } } } yy193: YYDEBUG(193, *YYCURSOR); { DEBUG_OUTPUT("monthtext"); TIMELIB_INIT; TIMELIB_HAVE_DATE(); s->time->m = timelib_lookup_month((char **) &ptr); TIMELIB_DEINIT; return TIMELIB_DATE_TEXT; } yy194: YYDEBUG(194, *YYCURSOR); ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 23) YYFILL(23); yych = *YYCURSOR; yy195: YYDEBUG(195, *YYCURSOR); if (yybm[0+yych] & 32) { goto yy194; } if (yych <= '/') goto yy56; if (yych <= '2') goto yy197; if (yych <= '3') goto yy198; if (yych <= '9') goto yy199; goto yy56; yy196: YYDEBUG(196, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy195; if (yych <= '0') goto yy299; if (yych <= '2') goto yy300; if (yych <= '3') goto yy301; goto yy195; yy197: YYDEBUG(197, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '9') { if (yych <= ' ') { if (yych <= 0x08) { if (yych <= 0x00) goto yy213; goto yy56; } else { if (yych <= '\t') goto yy211; if (yych <= 0x1F) goto yy56; goto yy211; } } else { if (yych <= '-') { if (yych == ',') goto yy211; goto yy56; } else { if (yych <= '.') goto yy211; if (yych <= '/') goto yy56; goto yy298; } } } else { if (yych <= 'm') { if (yych <= 'd') { if (yych <= 'c') goto yy56; goto yy211; } else { if (yych == 'h') goto yy211; goto yy56; } } else { if (yych <= 'r') { if (yych <= 'n') goto yy208; if (yych <= 'q') goto yy56; goto yy209; } else { if (yych <= 's') goto yy206; if (yych <= 't') goto yy210; goto yy56; } } } yy198: YYDEBUG(198, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '1') { if (yych <= ' ') { if (yych <= 0x08) { if (yych <= 0x00) goto yy213; goto yy56; } else { if (yych <= '\t') goto yy211; if (yych <= 0x1F) goto yy56; goto yy211; } } else { if (yych <= '-') { if (yych == ',') goto yy211; goto yy56; } else { if (yych <= '.') goto yy211; if (yych <= '/') goto yy56; goto yy298; } } } else { if (yych <= 'm') { if (yych <= 'd') { if (yych <= '9') goto yy205; if (yych <= 'c') goto yy56; goto yy211; } else { if (yych == 'h') goto yy211; goto yy56; } } else { if (yych <= 'r') { if (yych <= 'n') goto yy208; if (yych <= 'q') goto yy56; goto yy209; } else { if (yych <= 's') goto yy206; if (yych <= 't') goto yy210; goto yy56; } } } yy199: YYDEBUG(199, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '9') { if (yych <= ' ') { if (yych <= 0x08) { if (yych <= 0x00) goto yy213; goto yy56; } else { if (yych <= '\t') goto yy211; if (yych <= 0x1F) goto yy56; goto yy211; } } else { if (yych <= '-') { if (yych == ',') goto yy211; goto yy56; } else { if (yych <= '.') goto yy211; if (yych <= '/') goto yy56; goto yy205; } } } else { if (yych <= 'm') { if (yych <= 'd') { if (yych <= 'c') goto yy56; goto yy211; } else { if (yych == 'h') goto yy211; goto yy56; } } else { if (yych <= 'r') { if (yych <= 'n') goto yy208; if (yych <= 'q') goto yy56; goto yy209; } else { if (yych <= 's') goto yy206; if (yych <= 't') goto yy210; goto yy56; } } } yy200: YYDEBUG(200, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'M') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'L') goto yy143; } } else { if (yych <= 'l') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 'm') goto yy201; if (yych <= 'z') goto yy143; goto yy3; } } yy201: YYDEBUG(201, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'B') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'A') goto yy144; } } else { if (yych <= 'a') { if (yych <= 'Z') goto yy144; if (yych <= '`') goto yy3; goto yy144; } else { if (yych <= 'b') goto yy202; if (yych <= 'z') goto yy144; goto yy3; } } yy202: YYDEBUG(202, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'D') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'E') goto yy203; if (yych != 'e') goto yy3; } yy203: YYDEBUG(203, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy204; if (yych != 'r') goto yy56; yy204: YYDEBUG(204, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ' ') { if (yych == '\t') goto yy195; if (yych <= 0x1F) goto yy193; goto yy195; } else { if (yych <= '.') { if (yych <= ',') goto yy193; goto yy195; } else { if (yych <= '/') goto yy193; if (yych <= '9') goto yy195; goto yy193; } } yy205: YYDEBUG(205, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '9') goto yy295; goto yy56; yy206: YYDEBUG(206, *YYCURSOR); yyaccept = 6; yych = *(YYMARKER = ++YYCURSOR); if (yych == 't') goto yy294; goto yy212; yy207: YYDEBUG(207, *YYCURSOR); { int length = 0; DEBUG_OUTPUT("datetextual | datenoyear"); TIMELIB_INIT; TIMELIB_HAVE_DATE(); s->time->m = timelib_get_month((char **) &ptr); s->time->d = timelib_get_nr((char **) &ptr, 2); s->time->y = timelib_get_nr_ex((char **) &ptr, 4, &length); TIMELIB_PROCESS_YEAR(s->time->y, length); TIMELIB_DEINIT; return TIMELIB_DATE_TEXT; } yy208: YYDEBUG(208, *YYCURSOR); yyaccept = 6; yych = *(YYMARKER = ++YYCURSOR); if (yych == 'd') goto yy294; goto yy212; yy209: YYDEBUG(209, *YYCURSOR); yyaccept = 6; yych = *(YYMARKER = ++YYCURSOR); if (yych == 'd') goto yy294; goto yy212; yy210: YYDEBUG(210, *YYCURSOR); yyaccept = 6; yych = *(YYMARKER = ++YYCURSOR); if (yych == 'h') goto yy294; goto yy212; yy211: YYDEBUG(211, *YYCURSOR); yyaccept = 6; YYMARKER = ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 18) YYFILL(18); yych = *YYCURSOR; yy212: YYDEBUG(212, *YYCURSOR); if (yybm[0+yych] & 64) { goto yy211; } if (yych <= '2') { if (yych <= '/') goto yy207; if (yych <= '0') goto yy285; if (yych <= '1') goto yy286; goto yy287; } else { if (yych <= '9') goto yy288; if (yych == 'T') goto yy214; goto yy207; } yy213: YYDEBUG(213, *YYCURSOR); yyaccept = 6; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '9') { if (yych <= '0') { if (yych <= '/') goto yy207; goto yy215; } else { if (yych <= '1') goto yy216; if (yych <= '2') goto yy217; goto yy218; } } else { if (yych <= 'T') { if (yych <= 'S') goto yy207; } else { if (yych != 't') goto yy207; } } yy214: YYDEBUG(214, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '1') goto yy283; if (yych <= '2') goto yy284; if (yych <= '9') goto yy273; goto yy56; yy215: YYDEBUG(215, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') { if (yych == '.') goto yy274; goto yy56; } else { if (yych <= '0') goto yy273; if (yych <= '9') goto yy218; if (yych <= ':') goto yy274; goto yy56; } yy216: YYDEBUG(216, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') { if (yych == '.') goto yy219; goto yy56; } else { if (yych <= '2') goto yy218; if (yych <= '9') goto yy273; if (yych <= ':') goto yy219; goto yy56; } yy217: YYDEBUG(217, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') { if (yych == '.') goto yy219; goto yy56; } else { if (yych <= '4') goto yy273; if (yych == ':') goto yy219; goto yy56; } yy218: YYDEBUG(218, *YYCURSOR); yych = *++YYCURSOR; if (yych == '.') goto yy219; if (yych != ':') goto yy56; yy219: YYDEBUG(219, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '5') goto yy220; if (yych <= '9') goto yy222; goto yy56; yy220: YYDEBUG(220, *YYCURSOR); yyaccept = 7; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych == '.') goto yy223; } else { if (yych <= '9') goto yy266; if (yych <= ':') goto yy223; } yy221: YYDEBUG(221, *YYCURSOR); { int tz_not_found; DEBUG_OUTPUT("dateshortwithtimeshort | dateshortwithtimelong | dateshortwithtimelongtz"); TIMELIB_INIT; TIMELIB_HAVE_DATE(); s->time->m = timelib_get_month((char **) &ptr); s->time->d = timelib_get_nr((char **) &ptr, 2); TIMELIB_HAVE_TIME(); s->time->h = timelib_get_nr((char **) &ptr, 2); s->time->i = timelib_get_nr((char **) &ptr, 2); if (*ptr == ':') { s->time->s = timelib_get_nr((char **) &ptr, 2); if (*ptr == '.') { s->time->f = timelib_get_frac_nr((char **) &ptr, 8); } } if (*ptr != '\0') { s->time->z = timelib_parse_zone((char **) &ptr, &s->time->dst, s->time, &tz_not_found, s->tzdb, tz_get_wrapper); if (tz_not_found) { add_error(s, "The timezone could not be found in the database"); } } TIMELIB_DEINIT; return TIMELIB_SHORTDATE_WITH_TIME; } yy222: YYDEBUG(222, *YYCURSOR); yyaccept = 7; yych = *(YYMARKER = ++YYCURSOR); if (yych == '.') goto yy223; if (yych != ':') goto yy221; yy223: YYDEBUG(223, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '5') goto yy224; if (yych <= '6') goto yy225; if (yych <= '9') goto yy226; goto yy56; yy224: YYDEBUG(224, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy221; if (yych <= '9') goto yy227; goto yy221; yy225: YYDEBUG(225, *YYCURSOR); yych = *++YYCURSOR; if (yych == '0') goto yy227; goto yy221; yy226: YYDEBUG(226, *YYCURSOR); yych = *++YYCURSOR; goto yy221; yy227: YYDEBUG(227, *YYCURSOR); yyaccept = 7; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '*') { if (yych <= 0x1F) { if (yych == '\t') goto yy229; goto yy221; } else { if (yych <= ' ') goto yy229; if (yych == '(') goto yy229; goto yy221; } } else { if (yych <= '@') { if (yych == ',') goto yy221; if (yych <= '-') goto yy229; goto yy221; } else { if (yych <= 'Z') goto yy229; if (yych <= '`') goto yy221; if (yych <= 'z') goto yy229; goto yy221; } } yy228: YYDEBUG(228, *YYCURSOR); ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 9) YYFILL(9); yych = *YYCURSOR; yy229: YYDEBUG(229, *YYCURSOR); if (yych <= '@') { if (yych <= '\'') { if (yych <= '\t') { if (yych <= 0x08) goto yy56; goto yy228; } else { if (yych == ' ') goto yy228; goto yy56; } } else { if (yych <= '+') { if (yych <= '(') goto yy232; if (yych <= '*') goto yy56; goto yy231; } else { if (yych == '-') goto yy231; goto yy56; } } } else { if (yych <= 'Z') { if (yych <= 'G') { if (yych <= 'A') goto yy233; if (yych <= 'F') goto yy234; } else { if (yych == 'P') goto yy233; goto yy234; } } else { if (yych <= 'o') { if (yych <= '`') goto yy56; if (yych <= 'a') goto yy235; goto yy236; } else { if (yych <= 'p') goto yy235; if (yych <= 'z') goto yy236; goto yy56; } } } yy230: YYDEBUG(230, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'L') { if (yych == ')') goto yy226; if (yych <= '@') goto yy221; goto yy237; } else { if (yych <= 'Z') { if (yych <= 'M') goto yy264; goto yy237; } else { if (yych <= '`') goto yy221; if (yych <= 'z') goto yy248; goto yy221; } } yy231: YYDEBUG(231, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '1') goto yy259; if (yych <= '2') goto yy260; if (yych <= '9') goto yy261; goto yy56; yy232: YYDEBUG(232, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '@') goto yy56; if (yych <= 'Z') goto yy236; if (yych <= '`') goto yy56; if (yych <= 'z') goto yy236; goto yy56; yy233: YYDEBUG(233, *YYCURSOR); yyaccept = 7; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'L') { if (yych <= '-') { if (yych == ')') goto yy226; goto yy221; } else { if (yych <= '.') goto yy242; if (yych <= '@') goto yy221; goto yy237; } } else { if (yych <= '`') { if (yych <= 'M') goto yy243; if (yych <= 'Z') goto yy237; goto yy221; } else { if (yych == 'm') goto yy258; if (yych <= 'z') goto yy248; goto yy221; } } yy234: YYDEBUG(234, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '@') { if (yych == ')') goto yy226; goto yy221; } else { if (yych <= 'Z') goto yy237; if (yych <= '`') goto yy221; if (yych <= 'z') goto yy248; goto yy221; } yy235: YYDEBUG(235, *YYCURSOR); yyaccept = 7; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'L') { if (yych <= '-') { if (yych == ')') goto yy226; goto yy221; } else { if (yych <= '.') goto yy242; if (yych <= '@') goto yy221; goto yy237; } } else { if (yych <= '`') { if (yych <= 'M') goto yy243; if (yych <= 'Z') goto yy237; goto yy221; } else { if (yych == 'm') goto yy243; if (yych <= 'z') goto yy237; goto yy221; } } yy236: YYDEBUG(236, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '@') { if (yych == ')') goto yy226; goto yy221; } else { if (yych <= 'Z') goto yy237; if (yych <= '`') goto yy221; if (yych >= '{') goto yy221; } yy237: YYDEBUG(237, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '@') { if (yych == ')') goto yy226; goto yy221; } else { if (yych <= 'Z') goto yy238; if (yych <= '`') goto yy221; if (yych >= '{') goto yy221; } yy238: YYDEBUG(238, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '@') { if (yych == ')') goto yy226; goto yy221; } else { if (yych <= 'Z') goto yy239; if (yych <= '`') goto yy221; if (yych >= '{') goto yy221; } yy239: YYDEBUG(239, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '@') { if (yych == ')') goto yy226; goto yy221; } else { if (yych <= 'Z') goto yy240; if (yych <= '`') goto yy221; if (yych >= '{') goto yy221; } yy240: YYDEBUG(240, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '@') { if (yych == ')') goto yy226; goto yy221; } else { if (yych <= 'Z') goto yy241; if (yych <= '`') goto yy221; if (yych >= '{') goto yy221; } yy241: YYDEBUG(241, *YYCURSOR); yych = *++YYCURSOR; if (yych == ')') goto yy226; goto yy221; yy242: YYDEBUG(242, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'M') goto yy247; if (yych == 'm') goto yy247; goto yy56; yy243: YYDEBUG(243, *YYCURSOR); yyaccept = 7; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ')') { if (yych <= '\t') { if (yych <= 0x00) goto yy245; if (yych <= 0x08) goto yy221; goto yy245; } else { if (yych == ' ') goto yy245; if (yych <= '(') goto yy221; goto yy226; } } else { if (yych <= '@') { if (yych != '.') goto yy221; } else { if (yych <= 'Z') goto yy238; if (yych <= '`') goto yy221; if (yych <= 'z') goto yy238; goto yy221; } } yy244: YYDEBUG(244, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '\t') { if (yych <= 0x00) goto yy245; if (yych <= 0x08) goto yy56; } else { if (yych != ' ') goto yy56; } yy245: YYDEBUG(245, *YYCURSOR); ++YYCURSOR; YYDEBUG(246, *YYCURSOR); { DEBUG_OUTPUT("dateshortwithtimeshort12 | dateshortwithtimelong12"); TIMELIB_INIT; TIMELIB_HAVE_DATE(); s->time->m = timelib_get_month((char **) &ptr); s->time->d = timelib_get_nr((char **) &ptr, 2); TIMELIB_HAVE_TIME(); s->time->h = timelib_get_nr((char **) &ptr, 2); s->time->i = timelib_get_nr((char **) &ptr, 2); if (*ptr == ':' || *ptr == '.') { s->time->s = timelib_get_nr((char **) &ptr, 2); if (*ptr == '.') { s->time->f = timelib_get_frac_nr((char **) &ptr, 8); } } s->time->h += timelib_meridian((char **) &ptr, s->time->h); TIMELIB_DEINIT; return TIMELIB_SHORTDATE_WITH_TIME; } yy247: YYDEBUG(247, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 0x1F) { if (yych <= 0x00) goto yy245; if (yych == '\t') goto yy245; goto yy56; } else { if (yych <= ' ') goto yy245; if (yych == '.') goto yy244; goto yy56; } yy248: YYDEBUG(248, *YYCURSOR); yyaccept = 7; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= ',') { if (yych == ')') goto yy226; goto yy221; } else { if (yych == '.') goto yy221; goto yy250; } } else { if (yych <= '^') { if (yych <= '@') goto yy221; if (yych <= 'Z') goto yy238; goto yy221; } else { if (yych <= '_') goto yy250; if (yych <= '`') goto yy221; if (yych >= '{') goto yy221; } } yy249: YYDEBUG(249, *YYCURSOR); yyaccept = 7; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= ',') { if (yych == ')') goto yy226; goto yy221; } else { if (yych == '.') goto yy221; } } else { if (yych <= '^') { if (yych <= '@') goto yy221; if (yych <= 'Z') goto yy239; goto yy221; } else { if (yych <= '_') goto yy250; if (yych <= '`') goto yy221; if (yych <= 'z') goto yy253; goto yy221; } } yy250: YYDEBUG(250, *YYCURSOR); ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= '@') goto yy56; if (yych <= 'Z') goto yy251; if (yych <= '`') goto yy56; if (yych >= '{') goto yy56; yy251: YYDEBUG(251, *YYCURSOR); yyaccept = 7; YYMARKER = ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; YYDEBUG(252, *YYCURSOR); if (yych <= '@') { if (yych <= '-') { if (yych <= ',') goto yy221; goto yy250; } else { if (yych == '/') goto yy250; goto yy221; } } else { if (yych <= '_') { if (yych <= 'Z') goto yy251; if (yych <= '^') goto yy221; goto yy250; } else { if (yych <= '`') goto yy221; if (yych <= 'z') goto yy251; goto yy221; } } yy253: YYDEBUG(253, *YYCURSOR); yyaccept = 7; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= ',') { if (yych == ')') goto yy226; goto yy221; } else { if (yych == '.') goto yy221; goto yy250; } } else { if (yych <= '^') { if (yych <= '@') goto yy221; if (yych <= 'Z') goto yy240; goto yy221; } else { if (yych <= '_') goto yy250; if (yych <= '`') goto yy221; if (yych >= '{') goto yy221; } } YYDEBUG(254, *YYCURSOR); yyaccept = 7; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= ',') { if (yych == ')') goto yy226; goto yy221; } else { if (yych == '.') goto yy221; goto yy250; } } else { if (yych <= '^') { if (yych <= '@') goto yy221; if (yych <= 'Z') goto yy241; goto yy221; } else { if (yych <= '_') goto yy250; if (yych <= '`') goto yy221; if (yych >= '{') goto yy221; } } YYDEBUG(255, *YYCURSOR); yyaccept = 7; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= ')') { if (yych <= '(') goto yy221; goto yy226; } else { if (yych == '-') goto yy250; goto yy221; } } else { if (yych <= '_') { if (yych <= '/') goto yy250; if (yych <= '^') goto yy221; goto yy250; } else { if (yych <= '`') goto yy221; if (yych >= '{') goto yy221; } } yy256: YYDEBUG(256, *YYCURSOR); ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; YYDEBUG(257, *YYCURSOR); if (yych <= '/') { if (yych == '-') goto yy250; if (yych <= '.') goto yy56; goto yy250; } else { if (yych <= '_') { if (yych <= '^') goto yy56; goto yy250; } else { if (yych <= '`') goto yy56; if (yych <= 'z') goto yy256; goto yy56; } } yy258: YYDEBUG(258, *YYCURSOR); yyaccept = 7; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '-') { if (yych <= 0x1F) { if (yych <= 0x00) goto yy245; if (yych == '\t') goto yy245; goto yy221; } else { if (yych <= '(') { if (yych <= ' ') goto yy245; goto yy221; } else { if (yych <= ')') goto yy226; if (yych <= ',') goto yy221; goto yy250; } } } else { if (yych <= 'Z') { if (yych <= '.') goto yy244; if (yych <= '/') goto yy250; if (yych <= '@') goto yy221; goto yy238; } else { if (yych <= '_') { if (yych <= '^') goto yy221; goto yy250; } else { if (yych <= '`') goto yy221; if (yych <= 'z') goto yy249; goto yy221; } } } yy259: YYDEBUG(259, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy221; if (yych <= '9') goto yy261; if (yych <= ':') goto yy262; goto yy221; yy260: YYDEBUG(260, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '5') { if (yych <= '/') goto yy221; if (yych >= '5') goto yy263; } else { if (yych <= '9') goto yy226; if (yych <= ':') goto yy262; goto yy221; } yy261: YYDEBUG(261, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy221; if (yych <= '5') goto yy263; if (yych <= '9') goto yy226; if (yych >= ';') goto yy221; yy262: YYDEBUG(262, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy221; if (yych <= '5') goto yy263; if (yych <= '9') goto yy226; goto yy221; yy263: YYDEBUG(263, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy221; if (yych <= '9') goto yy226; goto yy221; yy264: YYDEBUG(264, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'S') { if (yych == ')') goto yy226; if (yych <= '@') goto yy221; goto yy238; } else { if (yych <= 'Z') { if (yych >= 'U') goto yy238; } else { if (yych <= '`') goto yy221; if (yych <= 'z') goto yy238; goto yy221; } } YYDEBUG(265, *YYCURSOR); yyaccept = 7; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ',') { if (yych <= ')') { if (yych <= '(') goto yy221; goto yy226; } else { if (yych == '+') goto yy231; goto yy221; } } else { if (yych <= 'Z') { if (yych <= '-') goto yy231; if (yych <= '@') goto yy221; goto yy239; } else { if (yych <= '`') goto yy221; if (yych <= 'z') goto yy239; goto yy221; } } yy266: YYDEBUG(266, *YYCURSOR); yyaccept = 7; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ':') { if (yych <= ' ') { if (yych == '\t') goto yy267; if (yych <= 0x1F) goto yy221; } else { if (yych == '.') goto yy223; if (yych <= '9') goto yy221; goto yy223; } } else { if (yych <= 'P') { if (yych == 'A') goto yy269; if (yych <= 'O') goto yy221; goto yy269; } else { if (yych <= 'a') { if (yych <= '`') goto yy221; goto yy269; } else { if (yych == 'p') goto yy269; goto yy221; } } } yy267: YYDEBUG(267, *YYCURSOR); ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5); yych = *YYCURSOR; YYDEBUG(268, *YYCURSOR); if (yych <= 'A') { if (yych <= 0x1F) { if (yych == '\t') goto yy267; goto yy56; } else { if (yych <= ' ') goto yy267; if (yych <= '@') goto yy56; } } else { if (yych <= '`') { if (yych != 'P') goto yy56; } else { if (yych <= 'a') goto yy269; if (yych != 'p') goto yy56; } } yy269: YYDEBUG(269, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'L') { if (yych != '.') goto yy56; } else { if (yych <= 'M') goto yy271; if (yych == 'm') goto yy271; goto yy56; } YYDEBUG(270, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'M') goto yy271; if (yych != 'm') goto yy56; yy271: YYDEBUG(271, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 0x1F) { if (yych <= 0x00) goto yy245; if (yych == '\t') goto yy245; goto yy56; } else { if (yych <= ' ') goto yy245; if (yych != '.') goto yy56; } YYDEBUG(272, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '\t') { if (yych <= 0x00) goto yy245; if (yych <= 0x08) goto yy56; goto yy245; } else { if (yych == ' ') goto yy245; goto yy56; } yy273: YYDEBUG(273, *YYCURSOR); yych = *++YYCURSOR; if (yych == '.') goto yy274; if (yych != ':') goto yy56; yy274: YYDEBUG(274, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '5') goto yy275; if (yych <= '9') goto yy276; goto yy56; yy275: YYDEBUG(275, *YYCURSOR); yyaccept = 7; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych == '.') goto yy277; goto yy221; } else { if (yych <= '9') goto yy276; if (yych <= ':') goto yy277; goto yy221; } yy276: YYDEBUG(276, *YYCURSOR); yyaccept = 7; yych = *(YYMARKER = ++YYCURSOR); if (yych == '.') goto yy277; if (yych != ':') goto yy221; yy277: YYDEBUG(277, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '5') goto yy278; if (yych <= '6') goto yy279; if (yych <= '9') goto yy226; goto yy56; yy278: YYDEBUG(278, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy221; if (yych <= '9') goto yy280; goto yy221; yy279: YYDEBUG(279, *YYCURSOR); yych = *++YYCURSOR; if (yych != '0') goto yy221; yy280: YYDEBUG(280, *YYCURSOR); yyaccept = 7; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '*') { if (yych <= 0x1F) { if (yych == '\t') goto yy282; goto yy221; } else { if (yych <= ' ') goto yy282; if (yych == '(') goto yy282; goto yy221; } } else { if (yych <= '@') { if (yych == ',') goto yy221; if (yych <= '-') goto yy282; goto yy221; } else { if (yych <= 'Z') goto yy282; if (yych <= '`') goto yy221; if (yych <= 'z') goto yy282; goto yy221; } } yy281: YYDEBUG(281, *YYCURSOR); ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 9) YYFILL(9); yych = *YYCURSOR; yy282: YYDEBUG(282, *YYCURSOR); if (yych <= '+') { if (yych <= ' ') { if (yych == '\t') goto yy281; if (yych <= 0x1F) goto yy56; goto yy281; } else { if (yych == '(') goto yy232; if (yych <= '*') goto yy56; goto yy231; } } else { if (yych <= 'F') { if (yych == '-') goto yy231; if (yych <= '@') goto yy56; goto yy234; } else { if (yych <= 'Z') { if (yych <= 'G') goto yy230; goto yy234; } else { if (yych <= '`') goto yy56; if (yych <= 'z') goto yy236; goto yy56; } } } yy283: YYDEBUG(283, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') { if (yych == '.') goto yy274; goto yy56; } else { if (yych <= '9') goto yy273; if (yych <= ':') goto yy274; goto yy56; } yy284: YYDEBUG(284, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') { if (yych == '.') goto yy274; goto yy56; } else { if (yych <= '4') goto yy273; if (yych == ':') goto yy274; goto yy56; } yy285: YYDEBUG(285, *YYCURSOR); yyaccept = 6; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych == '.') goto yy274; goto yy207; } else { if (yych <= '0') goto yy292; if (yych <= '9') goto yy293; if (yych <= ':') goto yy274; goto yy207; } yy286: YYDEBUG(286, *YYCURSOR); yyaccept = 6; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych == '.') goto yy219; goto yy207; } else { if (yych <= '2') goto yy293; if (yych <= '9') goto yy292; if (yych <= ':') goto yy219; goto yy207; } yy287: YYDEBUG(287, *YYCURSOR); yyaccept = 6; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych == '.') goto yy219; goto yy207; } else { if (yych <= '4') goto yy292; if (yych <= '9') goto yy289; if (yych <= ':') goto yy219; goto yy207; } yy288: YYDEBUG(288, *YYCURSOR); yyaccept = 6; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych == '.') goto yy219; goto yy207; } else { if (yych <= '9') goto yy289; if (yych <= ':') goto yy219; goto yy207; } yy289: YYDEBUG(289, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy207; if (yych >= ':') goto yy207; yy290: YYDEBUG(290, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy207; if (yych >= ':') goto yy207; YYDEBUG(291, *YYCURSOR); yych = *++YYCURSOR; goto yy207; yy292: YYDEBUG(292, *YYCURSOR); yyaccept = 6; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych == '.') goto yy274; goto yy207; } else { if (yych <= '9') goto yy290; if (yych <= ':') goto yy274; goto yy207; } yy293: YYDEBUG(293, *YYCURSOR); yyaccept = 6; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych == '.') goto yy219; goto yy207; } else { if (yych <= '9') goto yy290; if (yych <= ':') goto yy219; goto yy207; } yy294: YYDEBUG(294, *YYCURSOR); yyaccept = 6; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 0x00) goto yy213; goto yy212; yy295: YYDEBUG(295, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= ':') goto yy56; YYDEBUG(296, *YYCURSOR); ++YYCURSOR; YYDEBUG(297, *YYCURSOR); { int length = 0; DEBUG_OUTPUT("datenoday"); TIMELIB_INIT; TIMELIB_HAVE_DATE(); s->time->m = timelib_get_month((char **) &ptr); s->time->y = timelib_get_nr_ex((char **) &ptr, 4, &length); s->time->d = 1; TIMELIB_PROCESS_YEAR(s->time->y, length); TIMELIB_DEINIT; return TIMELIB_DATE_NO_DAY; } yy298: YYDEBUG(298, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '9') { if (yych <= ' ') { if (yych <= 0x08) { if (yych <= 0x00) goto yy213; goto yy56; } else { if (yych <= '\t') goto yy211; if (yych <= 0x1F) goto yy56; goto yy211; } } else { if (yych <= '-') { if (yych == ',') goto yy211; goto yy56; } else { if (yych <= '.') goto yy211; if (yych <= '/') goto yy56; goto yy295; } } } else { if (yych <= 'm') { if (yych <= 'd') { if (yych <= 'c') goto yy56; goto yy211; } else { if (yych == 'h') goto yy211; goto yy56; } } else { if (yych <= 'r') { if (yych <= 'n') goto yy208; if (yych <= 'q') goto yy56; goto yy209; } else { if (yych <= 's') goto yy206; if (yych <= 't') goto yy210; goto yy56; } } } yy299: YYDEBUG(299, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '9') { if (yych <= ' ') { if (yych <= 0x08) { if (yych <= 0x00) goto yy213; goto yy56; } else { if (yych <= '\t') goto yy211; if (yych <= 0x1F) goto yy56; goto yy211; } } else { if (yych <= '-') { if (yych == ',') goto yy211; goto yy56; } else { if (yych <= '.') goto yy211; if (yych <= '/') goto yy56; goto yy302; } } } else { if (yych <= 'm') { if (yych <= 'd') { if (yych <= 'c') goto yy56; goto yy211; } else { if (yych == 'h') goto yy211; goto yy56; } } else { if (yych <= 'r') { if (yych <= 'n') goto yy208; if (yych <= 'q') goto yy56; goto yy209; } else { if (yych <= 's') goto yy206; if (yych <= 't') goto yy210; goto yy56; } } } yy300: YYDEBUG(300, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '9') { if (yych <= ' ') { if (yych <= 0x08) { if (yych <= 0x00) goto yy213; goto yy56; } else { if (yych <= '\t') goto yy211; if (yych <= 0x1F) goto yy56; goto yy211; } } else { if (yych <= '-') { if (yych == ',') goto yy211; goto yy56; } else { if (yych <= '.') goto yy211; if (yych <= '/') goto yy56; goto yy302; } } } else { if (yych <= 'm') { if (yych <= 'd') { if (yych <= 'c') goto yy56; goto yy211; } else { if (yych == 'h') goto yy211; goto yy56; } } else { if (yych <= 'r') { if (yych <= 'n') goto yy208; if (yych <= 'q') goto yy56; goto yy209; } else { if (yych <= 's') goto yy206; if (yych <= 't') goto yy210; goto yy56; } } } yy301: YYDEBUG(301, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '1') { if (yych <= ' ') { if (yych <= 0x08) { if (yych <= 0x00) goto yy213; goto yy56; } else { if (yych <= '\t') goto yy211; if (yych <= 0x1F) goto yy56; goto yy211; } } else { if (yych <= '-') { if (yych == ',') goto yy211; goto yy56; } else { if (yych <= '.') goto yy211; if (yych <= '/') goto yy56; } } } else { if (yych <= 'm') { if (yych <= 'd') { if (yych <= '9') goto yy205; if (yych <= 'c') goto yy56; goto yy211; } else { if (yych == 'h') goto yy211; goto yy56; } } else { if (yych <= 'r') { if (yych <= 'n') goto yy208; if (yych <= 'q') goto yy56; goto yy209; } else { if (yych <= 's') goto yy206; if (yych <= 't') goto yy210; goto yy56; } } } yy302: YYDEBUG(302, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '9') { if (yych <= ' ') { if (yych <= 0x08) { if (yych <= 0x00) goto yy213; goto yy56; } else { if (yych <= '\t') goto yy211; if (yych <= 0x1F) goto yy56; goto yy211; } } else { if (yych <= '-') { if (yych <= '+') goto yy56; if (yych <= ',') goto yy211; } else { if (yych <= '.') goto yy211; if (yych <= '/') goto yy56; goto yy295; } } } else { if (yych <= 'm') { if (yych <= 'd') { if (yych <= 'c') goto yy56; goto yy211; } else { if (yych == 'h') goto yy211; goto yy56; } } else { if (yych <= 'r') { if (yych <= 'n') goto yy208; if (yych <= 'q') goto yy56; goto yy209; } else { if (yych <= 's') goto yy206; if (yych <= 't') goto yy210; goto yy56; } } } YYDEBUG(303, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= ':') goto yy56; YYDEBUG(304, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '/') goto yy305; if (yych <= '9') goto yy306; yy305: YYDEBUG(305, *YYCURSOR); { int length = 0; DEBUG_OUTPUT("pgtextshort"); TIMELIB_INIT; TIMELIB_HAVE_DATE(); s->time->m = timelib_get_month((char **) &ptr); s->time->d = timelib_get_nr((char **) &ptr, 2); s->time->y = timelib_get_nr_ex((char **) &ptr, 4, &length); TIMELIB_PROCESS_YEAR(s->time->y, length); TIMELIB_DEINIT; return TIMELIB_PG_TEXT; } yy306: YYDEBUG(306, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy305; if (yych >= ':') goto yy305; YYDEBUG(307, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy305; if (yych >= ':') goto yy305; YYDEBUG(308, *YYCURSOR); yych = *++YYCURSOR; goto yy305; yy309: YYDEBUG(309, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'B') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy141; } } else { if (yych <= '_') { if (yych <= 'C') goto yy192; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'b') { if (yych <= '`') goto yy3; goto yy146; } else { if (yych <= 'c') goto yy310; if (yych <= 'z') goto yy146; goto yy3; } } } yy310: YYDEBUG(310, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '9') { if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy193; goto yy195; } else { if (yych == ' ') goto yy195; goto yy193; } } else { if (yych <= '-') { if (yych <= ')') goto yy139; if (yych <= ',') goto yy193; } else { if (yych == '/') goto yy147; goto yy195; } } } else { if (yych <= '^') { if (yych <= 'D') { if (yych <= '@') goto yy193; goto yy142; } else { if (yych <= 'E') goto yy200; if (yych <= 'Z') goto yy142; goto yy193; } } else { if (yych <= 'd') { if (yych <= '_') goto yy147; if (yych <= '`') goto yy193; goto yy150; } else { if (yych <= 'e') goto yy312; if (yych <= 'z') goto yy150; goto yy193; } } } yy311: YYDEBUG(311, *YYCURSOR); yych = *++YYCURSOR; if (yybm[0+yych] & 8) { goto yy148; } if (yych <= '/') goto yy195; if (yych <= '0') goto yy299; if (yych <= '2') goto yy300; if (yych <= '3') goto yy301; goto yy195; yy312: YYDEBUG(312, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'L') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'M') goto yy201; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'l') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 'm') goto yy313; if (yych <= 'z') goto yy151; goto yy3; } } } yy313: YYDEBUG(313, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'A') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy144; } } else { if (yych <= '_') { if (yych <= 'B') goto yy202; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'a') { if (yych <= '`') goto yy3; goto yy152; } else { if (yych <= 'b') goto yy314; if (yych <= 'z') goto yy152; goto yy3; } } } yy314: YYDEBUG(314, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'D') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; if (yych <= '/') goto yy147; goto yy3; } } else { if (yych <= '`') { if (yych <= 'E') goto yy203; if (yych == '_') goto yy147; goto yy3; } else { if (yych == 'e') goto yy315; if (yych <= 'z') goto yy153; goto yy3; } } yy315: YYDEBUG(315, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy204; if (yych != 'r') goto yy154; yy316: YYDEBUG(316, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 16) { goto yy153; } if (yych <= '-') { if (yych <= 0x1F) { if (yych == '\t') goto yy195; goto yy193; } else { if (yych <= ' ') goto yy195; if (yych <= ',') goto yy193; } } else { if (yych <= '9') { if (yych == '/') goto yy147; goto yy195; } else { if (yych == '_') goto yy147; goto yy193; } } yy317: YYDEBUG(317, *YYCURSOR); yych = *++YYCURSOR; if (yybm[0+yych] & 8) { goto yy148; } goto yy195; yy318: YYDEBUG(318, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'S') goto yy141; } } else { if (yych <= 's') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; goto yy141; } else { if (yych <= 't') goto yy319; if (yych <= 'z') goto yy141; goto yy3; } } yy319: YYDEBUG(319, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy193; goto yy195; } else { if (yych == ' ') goto yy195; goto yy193; } } else { if (yych <= ',') { if (yych <= ')') goto yy139; goto yy193; } else { if (yych <= '-') goto yy196; if (yych <= '.') goto yy195; goto yy193; } } } else { if (yych <= 'Z') { if (yych <= '@') { if (yych <= '9') goto yy195; goto yy193; } else { if (yych != 'O') goto yy142; } } else { if (yych <= 'n') { if (yych <= '`') goto yy193; goto yy142; } else { if (yych <= 'o') goto yy320; if (yych <= 'z') goto yy142; goto yy193; } } } yy320: YYDEBUG(320, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'B') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'A') goto yy143; } } else { if (yych <= 'a') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 'b') goto yy321; if (yych <= 'z') goto yy143; goto yy3; } } yy321: YYDEBUG(321, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'E') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'D') goto yy144; } } else { if (yych <= 'd') { if (yych <= 'Z') goto yy144; if (yych <= '`') goto yy3; goto yy144; } else { if (yych <= 'e') goto yy322; if (yych <= 'z') goto yy144; goto yy3; } } yy322: YYDEBUG(322, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'Q') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'R') goto yy204; if (yych == 'r') goto yy204; goto yy3; } yy323: YYDEBUG(323, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy141; } } else { if (yych <= '_') { if (yych <= 'T') goto yy319; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 's') { if (yych <= '`') goto yy3; goto yy146; } else { if (yych <= 't') goto yy324; if (yych <= 'z') goto yy146; goto yy3; } } } yy324: YYDEBUG(324, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '9') { if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy193; goto yy195; } else { if (yych == ' ') goto yy195; goto yy193; } } else { if (yych <= '-') { if (yych <= ')') goto yy139; if (yych <= ',') goto yy193; goto yy311; } else { if (yych == '/') goto yy147; goto yy195; } } } else { if (yych <= '^') { if (yych <= 'N') { if (yych <= '@') goto yy193; goto yy142; } else { if (yych <= 'O') goto yy320; if (yych <= 'Z') goto yy142; goto yy193; } } else { if (yych <= 'n') { if (yych <= '_') goto yy147; if (yych <= '`') goto yy193; goto yy150; } else { if (yych <= 'o') goto yy325; if (yych <= 'z') goto yy150; goto yy193; } } } yy325: YYDEBUG(325, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'A') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'B') goto yy321; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'a') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 'b') goto yy326; if (yych <= 'z') goto yy151; goto yy3; } } } yy326: YYDEBUG(326, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'D') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy144; } } else { if (yych <= '_') { if (yych <= 'E') goto yy322; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'd') { if (yych <= '`') goto yy3; goto yy152; } else { if (yych <= 'e') goto yy327; if (yych <= 'z') goto yy152; goto yy3; } } } yy327: YYDEBUG(327, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'Q') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; if (yych <= '/') goto yy147; goto yy3; } } else { if (yych <= '`') { if (yych <= 'R') goto yy204; if (yych == '_') goto yy147; goto yy3; } else { if (yych == 'r') goto yy316; if (yych <= 'z') goto yy153; goto yy3; } } yy328: YYDEBUG(328, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'G') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'F') goto yy141; goto yy336; } } else { if (yych <= 'f') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; goto yy141; } else { if (yych <= 'g') goto yy336; if (yych <= 'z') goto yy141; goto yy3; } } yy329: YYDEBUG(329, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'R') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'Q') goto yy141; goto yy333; } } else { if (yych <= 'q') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; goto yy141; } else { if (yych <= 'r') goto yy333; if (yych <= 'z') goto yy141; goto yy3; } } yy330: YYDEBUG(330, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'O') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'N') goto yy141; } } else { if (yych <= 'n') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; goto yy141; } else { if (yych <= 'o') goto yy331; if (yych <= 'z') goto yy141; goto yy3; } } yy331: YYDEBUG(331, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '@') { if (yych == ')') goto yy139; } else { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy332; if (yych <= 'z') goto yy142; } yy332: YYDEBUG(332, *YYCURSOR); { DEBUG_OUTPUT("ago"); TIMELIB_INIT; s->time->relative.y = 0 - s->time->relative.y; s->time->relative.m = 0 - s->time->relative.m; s->time->relative.d = 0 - s->time->relative.d; s->time->relative.h = 0 - s->time->relative.h; s->time->relative.i = 0 - s->time->relative.i; s->time->relative.s = 0 - s->time->relative.s; s->time->relative.weekday = 0 - s->time->relative.weekday; if (s->time->relative.weekday == 0) { s->time->relative.weekday = -7; } if (s->time->relative.have_special_relative && s->time->relative.special.type == TIMELIB_SPECIAL_WEEKDAY) { s->time->relative.special.amount = 0 - s->time->relative.special.amount; } TIMELIB_DEINIT; return TIMELIB_AGO; } yy333: YYDEBUG(333, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy193; goto yy195; } else { if (yych == ' ') goto yy195; goto yy193; } } else { if (yych <= ',') { if (yych <= ')') goto yy139; goto yy193; } else { if (yych <= '-') goto yy196; if (yych <= '.') goto yy195; goto yy193; } } } else { if (yych <= 'Z') { if (yych <= '@') { if (yych <= '9') goto yy195; goto yy193; } else { if (yych != 'I') goto yy142; } } else { if (yych <= 'h') { if (yych <= '`') goto yy193; goto yy142; } else { if (yych <= 'i') goto yy334; if (yych <= 'z') goto yy142; goto yy193; } } } yy334: YYDEBUG(334, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'L') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'K') goto yy143; } } else { if (yych <= 'k') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 'l') goto yy335; if (yych <= 'z') goto yy143; goto yy3; } } yy335: YYDEBUG(335, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ',') { if (yych <= 0x1F) { if (yych == '\t') goto yy195; goto yy193; } else { if (yych <= ' ') goto yy195; if (yych == ')') goto yy139; goto yy193; } } else { if (yych <= '@') { if (yych == '/') goto yy193; if (yych <= '9') goto yy195; goto yy193; } else { if (yych <= 'Z') goto yy144; if (yych <= '`') goto yy193; if (yych <= 'z') goto yy144; goto yy193; } } yy336: YYDEBUG(336, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy193; goto yy195; } else { if (yych == ' ') goto yy195; goto yy193; } } else { if (yych <= ',') { if (yych <= ')') goto yy139; goto yy193; } else { if (yych <= '-') goto yy196; if (yych <= '.') goto yy195; goto yy193; } } } else { if (yych <= 'Z') { if (yych <= '@') { if (yych <= '9') goto yy195; goto yy193; } else { if (yych != 'U') goto yy142; } } else { if (yych <= 't') { if (yych <= '`') goto yy193; goto yy142; } else { if (yych <= 'u') goto yy337; if (yych <= 'z') goto yy142; goto yy193; } } } yy337: YYDEBUG(337, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'S') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'R') goto yy143; } } else { if (yych <= 'r') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 's') goto yy338; if (yych <= 'z') goto yy143; goto yy3; } } yy338: YYDEBUG(338, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'S') goto yy144; } } else { if (yych <= 's') { if (yych <= 'Z') goto yy144; if (yych <= '`') goto yy3; goto yy144; } else { if (yych <= 't') goto yy339; if (yych <= 'z') goto yy144; goto yy3; } } yy339: YYDEBUG(339, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy193; goto yy195; } else { if (yych == ' ') goto yy195; goto yy193; } } else { if (yych <= '.') { if (yych <= ')') goto yy139; if (yych <= ',') goto yy193; goto yy195; } else { if (yych <= '/') goto yy193; if (yych <= '9') goto yy195; goto yy193; } } yy340: YYDEBUG(340, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'F') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy141; } } else { if (yych <= '_') { if (yych <= 'G') goto yy336; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'f') { if (yych <= '`') goto yy3; goto yy146; } else { if (yych <= 'g') goto yy347; if (yych <= 'z') goto yy146; goto yy3; } } } yy341: YYDEBUG(341, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'Q') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy141; } } else { if (yych <= '_') { if (yych <= 'R') goto yy333; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'q') { if (yych <= '`') goto yy3; goto yy146; } else { if (yych <= 'r') goto yy344; if (yych <= 'z') goto yy146; goto yy3; } } } yy342: YYDEBUG(342, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'N') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy141; } } else { if (yych <= '_') { if (yych <= 'O') goto yy331; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'n') { if (yych <= '`') goto yy3; goto yy146; } else { if (yych <= 'o') goto yy343; if (yych <= 'z') goto yy146; goto yy3; } } } yy343: YYDEBUG(343, *YYCURSOR); yyaccept = 8; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy332; } else { if (yych == '.') goto yy332; goto yy147; } } else { if (yych <= '^') { if (yych <= '@') goto yy332; if (yych <= 'Z') goto yy142; goto yy332; } else { if (yych <= '_') goto yy147; if (yych <= '`') goto yy332; if (yych <= 'z') goto yy150; goto yy332; } } yy344: YYDEBUG(344, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '9') { if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy193; goto yy195; } else { if (yych == ' ') goto yy195; goto yy193; } } else { if (yych <= '-') { if (yych <= ')') goto yy139; if (yych <= ',') goto yy193; goto yy311; } else { if (yych == '/') goto yy147; goto yy195; } } } else { if (yych <= '^') { if (yych <= 'H') { if (yych <= '@') goto yy193; goto yy142; } else { if (yych <= 'I') goto yy334; if (yych <= 'Z') goto yy142; goto yy193; } } else { if (yych <= 'h') { if (yych <= '_') goto yy147; if (yych <= '`') goto yy193; goto yy150; } else { if (yych <= 'i') goto yy345; if (yych <= 'z') goto yy150; goto yy193; } } } yy345: YYDEBUG(345, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'K') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'L') goto yy335; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'k') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 'l') goto yy346; if (yych <= 'z') goto yy151; goto yy3; } } } yy346: YYDEBUG(346, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= ' ') { if (yych == '\t') goto yy195; if (yych <= 0x1F) goto yy193; goto yy195; } else { if (yych <= ')') { if (yych <= '(') goto yy193; goto yy139; } else { if (yych <= ',') goto yy193; if (yych <= '-') goto yy317; goto yy195; } } } else { if (yych <= 'Z') { if (yych <= '/') goto yy147; if (yych <= '9') goto yy195; if (yych <= '@') goto yy193; goto yy144; } else { if (yych <= '_') { if (yych <= '^') goto yy193; goto yy147; } else { if (yych <= '`') goto yy193; if (yych <= 'z') goto yy152; goto yy193; } } } yy347: YYDEBUG(347, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '9') { if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy193; goto yy195; } else { if (yych == ' ') goto yy195; goto yy193; } } else { if (yych <= '-') { if (yych <= ')') goto yy139; if (yych <= ',') goto yy193; goto yy311; } else { if (yych == '/') goto yy147; goto yy195; } } } else { if (yych <= '^') { if (yych <= 'T') { if (yych <= '@') goto yy193; goto yy142; } else { if (yych <= 'U') goto yy337; if (yych <= 'Z') goto yy142; goto yy193; } } else { if (yych <= 't') { if (yych <= '_') goto yy147; if (yych <= '`') goto yy193; goto yy150; } else { if (yych <= 'u') goto yy348; if (yych <= 'z') goto yy150; goto yy193; } } } yy348: YYDEBUG(348, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'R') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'S') goto yy338; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'r') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 's') goto yy349; if (yych <= 'z') goto yy151; goto yy3; } } } yy349: YYDEBUG(349, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy144; } } else { if (yych <= '_') { if (yych <= 'T') goto yy339; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 's') { if (yych <= '`') goto yy3; goto yy152; } else { if (yych <= 't') goto yy350; if (yych <= 'z') goto yy152; goto yy3; } } } yy350: YYDEBUG(350, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 16) { goto yy153; } if (yych <= ',') { if (yych <= 0x1F) { if (yych == '\t') goto yy195; goto yy193; } else { if (yych <= ' ') goto yy195; if (yych == ')') goto yy139; goto yy193; } } else { if (yych <= '/') { if (yych <= '-') goto yy317; if (yych <= '.') goto yy195; goto yy147; } else { if (yych <= '9') goto yy195; if (yych == '_') goto yy147; goto yy193; } } yy351: YYDEBUG(351, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'N') { if (yych <= '@') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == 'L') goto yy358; if (yych <= 'M') goto yy141; goto yy357; } } else { if (yych <= 'l') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; if (yych <= 'k') goto yy141; goto yy358; } else { if (yych == 'n') goto yy357; if (yych <= 'z') goto yy141; goto yy3; } } yy352: YYDEBUG(352, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'N') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'M') goto yy141; } } else { if (yych <= 'm') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; goto yy141; } else { if (yych <= 'n') goto yy353; if (yych <= 'z') goto yy141; goto yy3; } } yy353: YYDEBUG(353, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy193; goto yy195; } else { if (yych == ' ') goto yy195; goto yy193; } } else { if (yych <= ',') { if (yych <= ')') goto yy139; goto yy193; } else { if (yych <= '-') goto yy196; if (yych <= '.') goto yy195; goto yy193; } } } else { if (yych <= 'Z') { if (yych <= '@') { if (yych <= '9') goto yy195; goto yy193; } else { if (yych != 'U') goto yy142; } } else { if (yych <= 't') { if (yych <= '`') goto yy193; goto yy142; } else { if (yych <= 'u') goto yy354; if (yych <= 'z') goto yy142; goto yy193; } } } yy354: YYDEBUG(354, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'A') { if (yych == ')') goto yy139; if (yych <= '@') goto yy3; } else { if (yych <= '`') { if (yych <= 'Z') goto yy143; goto yy3; } else { if (yych <= 'a') goto yy355; if (yych <= 'z') goto yy143; goto yy3; } } yy355: YYDEBUG(355, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'R') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'Q') goto yy144; } } else { if (yych <= 'q') { if (yych <= 'Z') goto yy144; if (yych <= '`') goto yy3; goto yy144; } else { if (yych <= 'r') goto yy356; if (yych <= 'z') goto yy144; goto yy3; } } yy356: YYDEBUG(356, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'X') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'Y') goto yy204; if (yych == 'y') goto yy204; goto yy3; } yy357: YYDEBUG(357, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy193; goto yy195; } else { if (yych == ' ') goto yy195; goto yy193; } } else { if (yych <= ',') { if (yych <= ')') goto yy139; goto yy193; } else { if (yych <= '-') goto yy196; if (yych <= '.') goto yy195; goto yy193; } } } else { if (yych <= 'Z') { if (yych <= '@') { if (yych <= '9') goto yy195; goto yy193; } else { if (yych == 'E') goto yy359; goto yy142; } } else { if (yych <= 'd') { if (yych <= '`') goto yy193; goto yy142; } else { if (yych <= 'e') goto yy359; if (yych <= 'z') goto yy142; goto yy193; } } } yy358: YYDEBUG(358, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy193; goto yy195; } else { if (yych == ' ') goto yy195; goto yy193; } } else { if (yych <= ',') { if (yych <= ')') goto yy139; goto yy193; } else { if (yych <= '-') goto yy196; if (yych <= '.') goto yy195; goto yy193; } } } else { if (yych <= 'Z') { if (yych <= '@') { if (yych <= '9') goto yy195; goto yy193; } else { if (yych != 'Y') goto yy142; } } else { if (yych <= 'x') { if (yych <= '`') goto yy193; goto yy142; } else { if (yych <= 'y') goto yy359; if (yych <= 'z') goto yy142; goto yy193; } } } yy359: YYDEBUG(359, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ',') { if (yych <= 0x1F) { if (yych == '\t') goto yy195; goto yy193; } else { if (yych <= ' ') goto yy195; if (yych == ')') goto yy139; goto yy193; } } else { if (yych <= '@') { if (yych == '/') goto yy193; if (yych <= '9') goto yy195; goto yy193; } else { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy193; if (yych <= 'z') goto yy143; goto yy193; } } yy360: YYDEBUG(360, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'M') { if (yych <= '.') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych == '-') goto yy147; goto yy3; } } else { if (yych <= '@') { if (yych <= '/') goto yy147; goto yy3; } else { if (yych == 'L') goto yy358; goto yy141; } } } else { if (yych <= '`') { if (yych <= 'Z') { if (yych <= 'N') goto yy357; goto yy141; } else { if (yych == '_') goto yy147; goto yy3; } } else { if (yych <= 'm') { if (yych == 'l') goto yy367; goto yy146; } else { if (yych <= 'n') goto yy366; if (yych <= 'z') goto yy146; goto yy3; } } } yy361: YYDEBUG(361, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'M') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy141; } } else { if (yych <= '_') { if (yych <= 'N') goto yy353; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'm') { if (yych <= '`') goto yy3; goto yy146; } else { if (yych <= 'n') goto yy362; if (yych <= 'z') goto yy146; goto yy3; } } } yy362: YYDEBUG(362, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '9') { if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy193; goto yy195; } else { if (yych == ' ') goto yy195; goto yy193; } } else { if (yych <= '-') { if (yych <= ')') goto yy139; if (yych <= ',') goto yy193; goto yy311; } else { if (yych == '/') goto yy147; goto yy195; } } } else { if (yych <= '^') { if (yych <= 'T') { if (yych <= '@') goto yy193; goto yy142; } else { if (yych <= 'U') goto yy354; if (yych <= 'Z') goto yy142; goto yy193; } } else { if (yych <= 't') { if (yych <= '_') goto yy147; if (yych <= '`') goto yy193; goto yy150; } else { if (yych <= 'u') goto yy363; if (yych <= 'z') goto yy150; goto yy193; } } } yy363: YYDEBUG(363, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '@') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; if (yych <= '/') goto yy147; goto yy3; } } else { if (yych <= '_') { if (yych <= 'A') goto yy355; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= '`') goto yy3; if (yych <= 'a') goto yy364; if (yych <= 'z') goto yy151; goto yy3; } } yy364: YYDEBUG(364, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'Q') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy144; } } else { if (yych <= '_') { if (yych <= 'R') goto yy356; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'q') { if (yych <= '`') goto yy3; goto yy152; } else { if (yych <= 'r') goto yy365; if (yych <= 'z') goto yy152; goto yy3; } } } yy365: YYDEBUG(365, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'X') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; if (yych <= '/') goto yy147; goto yy3; } } else { if (yych <= '`') { if (yych <= 'Y') goto yy204; if (yych == '_') goto yy147; goto yy3; } else { if (yych == 'y') goto yy316; if (yych <= 'z') goto yy153; goto yy3; } } yy366: YYDEBUG(366, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '9') { if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy193; goto yy195; } else { if (yych == ' ') goto yy195; goto yy193; } } else { if (yych <= '-') { if (yych <= ')') goto yy139; if (yych <= ',') goto yy193; goto yy311; } else { if (yych == '/') goto yy147; goto yy195; } } } else { if (yych <= '^') { if (yych <= 'D') { if (yych <= '@') goto yy193; goto yy142; } else { if (yych <= 'E') goto yy359; if (yych <= 'Z') goto yy142; goto yy193; } } else { if (yych <= 'd') { if (yych <= '_') goto yy147; if (yych <= '`') goto yy193; goto yy150; } else { if (yych <= 'e') goto yy368; if (yych <= 'z') goto yy150; goto yy193; } } } yy367: YYDEBUG(367, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '9') { if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy193; goto yy195; } else { if (yych == ' ') goto yy195; goto yy193; } } else { if (yych <= '-') { if (yych <= ')') goto yy139; if (yych <= ',') goto yy193; goto yy311; } else { if (yych == '/') goto yy147; goto yy195; } } } else { if (yych <= '^') { if (yych <= 'X') { if (yych <= '@') goto yy193; goto yy142; } else { if (yych <= 'Y') goto yy359; if (yych <= 'Z') goto yy142; goto yy193; } } else { if (yych <= 'x') { if (yych <= '_') goto yy147; if (yych <= '`') goto yy193; goto yy150; } else { if (yych <= 'y') goto yy368; if (yych <= 'z') goto yy150; goto yy193; } } } yy368: YYDEBUG(368, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= ' ') { if (yych == '\t') goto yy195; if (yych <= 0x1F) goto yy193; goto yy195; } else { if (yych <= ')') { if (yych <= '(') goto yy193; goto yy139; } else { if (yych <= ',') goto yy193; if (yych <= '-') goto yy317; goto yy195; } } } else { if (yych <= 'Z') { if (yych <= '/') goto yy147; if (yych <= '9') goto yy195; if (yych <= '@') goto yy193; goto yy143; } else { if (yych <= '_') { if (yych <= '^') goto yy193; goto yy147; } else { if (yych <= '`') goto yy193; if (yych <= 'z') goto yy151; goto yy193; } } } yy369: YYDEBUG(369, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= ' ') { if (yych == '\t') goto yy195; if (yych <= 0x1F) goto yy3; goto yy195; } else { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy195; } } else { if (yych <= 'H') { if (yych <= '/') goto yy3; if (yych <= '9') goto yy195; if (yych <= '@') goto yy3; goto yy141; } else { if (yych <= 'Z') { if (yych >= 'J') goto yy141; } else { if (yych <= '`') goto yy3; if (yych <= 'z') goto yy141; goto yy3; } } } yy370: YYDEBUG(370, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ',') { if (yych <= 0x1F) { if (yych == '\t') goto yy195; goto yy3; } else { if (yych <= ' ') goto yy195; if (yych == ')') goto yy139; goto yy3; } } else { if (yych <= '@') { if (yych == '/') goto yy3; if (yych <= '9') goto yy195; goto yy3; } else { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy3; if (yych <= 'z') goto yy142; goto yy3; } } yy371: YYDEBUG(371, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= ' ') { if (yych == '\t') goto yy195; if (yych <= 0x1F) goto yy3; goto yy195; } else { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy195; } } else { if (yych <= 'H') { if (yych <= '/') goto yy3; if (yych <= '9') goto yy195; if (yych <= '@') goto yy3; goto yy141; } else { if (yych <= 'Z') { if (yych >= 'J') goto yy141; } else { if (yych <= '`') goto yy3; if (yych <= 'z') goto yy141; goto yy3; } } } YYDEBUG(372, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= ' ') { if (yych == '\t') goto yy195; if (yych <= 0x1F) goto yy3; goto yy195; } else { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy195; } } else { if (yych <= 'H') { if (yych <= '/') goto yy3; if (yych <= '9') goto yy195; if (yych <= '@') goto yy3; goto yy142; } else { if (yych <= 'Z') { if (yych >= 'J') goto yy142; } else { if (yych <= '`') goto yy3; if (yych <= 'z') goto yy142; goto yy3; } } } YYDEBUG(373, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ',') { if (yych <= 0x1F) { if (yych == '\t') goto yy195; goto yy3; } else { if (yych <= ' ') goto yy195; if (yych == ')') goto yy139; goto yy3; } } else { if (yych <= '@') { if (yych == '/') goto yy3; if (yych <= '9') goto yy195; goto yy3; } else { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; if (yych <= 'z') goto yy143; goto yy3; } } yy374: YYDEBUG(374, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ',') { if (yych <= 0x1F) { if (yych == '\t') goto yy195; goto yy3; } else { if (yych <= ' ') goto yy195; if (yych == ')') goto yy139; goto yy3; } } else { if (yych <= '@') { if (yych == '/') goto yy3; if (yych <= '9') goto yy195; goto yy3; } else { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; if (yych <= 'z') goto yy141; goto yy3; } } yy375: YYDEBUG(375, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= ' ') { if (yych == '\t') goto yy195; if (yych <= 0x1F) goto yy3; goto yy195; } else { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy195; } } else { if (yych <= 'H') { if (yych <= '/') goto yy3; if (yych <= '9') goto yy195; if (yych <= '@') goto yy3; goto yy141; } else { if (yych <= 'Z') { if (yych <= 'I') goto yy370; goto yy141; } else { if (yych <= '`') goto yy3; if (yych <= 'z') goto yy141; goto yy3; } } } yy376: YYDEBUG(376, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'V') { if (yych <= 'D') { if (yych <= ' ') { if (yych == '\t') goto yy60; if (yych <= 0x1F) goto yy3; goto yy60; } else { if (yych <= '9') { if (yych <= '/') goto yy3; goto yy396; } else { if (yych <= ':') goto yy162; if (yych <= 'C') goto yy3; goto yy60; } } } else { if (yych <= 'H') { if (yych == 'F') goto yy60; if (yych <= 'G') goto yy3; goto yy60; } else { if (yych <= 'M') { if (yych <= 'L') goto yy3; goto yy60; } else { if (yych <= 'R') goto yy3; if (yych <= 'T') goto yy60; goto yy3; } } } } else { if (yych <= 'h') { if (yych <= 'c') { if (yych == 'X') goto yy3; if (yych <= 'Y') goto yy60; goto yy3; } else { if (yych <= 'e') { if (yych <= 'd') goto yy60; goto yy3; } else { if (yych == 'g') goto yy3; goto yy60; } } } else { if (yych <= 't') { if (yych == 'm') goto yy60; if (yych <= 'r') goto yy3; goto yy60; } else { if (yych <= 'w') { if (yych <= 'v') goto yy3; goto yy60; } else { if (yych == 'y') goto yy60; goto yy3; } } } } yy377: YYDEBUG(377, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'T') { if (yych <= ':') { if (yych <= ' ') { if (yych == '\t') goto yy60; if (yych <= 0x1F) goto yy3; goto yy60; } else { if (yych <= '4') { if (yych <= '/') goto yy3; goto yy396; } else { if (yych <= '5') goto yy381; if (yych <= '9') goto yy382; goto yy162; } } } else { if (yych <= 'G') { if (yych <= 'D') { if (yych <= 'C') goto yy3; goto yy60; } else { if (yych == 'F') goto yy60; goto yy3; } } else { if (yych <= 'L') { if (yych <= 'H') goto yy60; goto yy3; } else { if (yych <= 'M') goto yy60; if (yych <= 'R') goto yy3; goto yy60; } } } } else { if (yych <= 'g') { if (yych <= 'Y') { if (yych == 'W') goto yy60; if (yych <= 'X') goto yy3; goto yy60; } else { if (yych <= 'd') { if (yych <= 'c') goto yy3; goto yy60; } else { if (yych == 'f') goto yy60; goto yy3; } } } else { if (yych <= 't') { if (yych <= 'l') { if (yych <= 'h') goto yy60; goto yy3; } else { if (yych <= 'm') goto yy60; if (yych <= 'r') goto yy3; goto yy60; } } else { if (yych <= 'w') { if (yych <= 'v') goto yy3; goto yy60; } else { if (yych == 'y') goto yy60; goto yy3; } } } } yy378: YYDEBUG(378, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'T') { if (yych <= 'C') { if (yych <= ' ') { if (yych == '\t') goto yy60; if (yych <= 0x1F) goto yy3; goto yy60; } else { if (yych <= '5') { if (yych <= '/') goto yy3; goto yy381; } else { if (yych <= '9') goto yy382; if (yych <= ':') goto yy162; goto yy3; } } } else { if (yych <= 'G') { if (yych == 'E') goto yy3; if (yych <= 'F') goto yy60; goto yy3; } else { if (yych <= 'L') { if (yych <= 'H') goto yy60; goto yy3; } else { if (yych <= 'M') goto yy60; if (yych <= 'R') goto yy3; goto yy60; } } } } else { if (yych <= 'g') { if (yych <= 'Y') { if (yych == 'W') goto yy60; if (yych <= 'X') goto yy3; goto yy60; } else { if (yych <= 'd') { if (yych <= 'c') goto yy3; goto yy60; } else { if (yych == 'f') goto yy60; goto yy3; } } } else { if (yych <= 't') { if (yych <= 'l') { if (yych <= 'h') goto yy60; goto yy3; } else { if (yych <= 'm') goto yy60; if (yych <= 'r') goto yy3; goto yy60; } } else { if (yych <= 'w') { if (yych <= 'v') goto yy3; goto yy60; } else { if (yych == 'y') goto yy60; goto yy3; } } } } yy379: YYDEBUG(379, *YYCURSOR); ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; YYDEBUG(380, *YYCURSOR); if (yybm[0+yych] & 4) { goto yy57; } if (yych <= ',') { if (yych == '+') goto yy379; goto yy56; } else { if (yych <= '-') goto yy379; if (yych <= '/') goto yy56; if (yych <= '9') goto yy54; goto yy56; } yy381: YYDEBUG(381, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'V') { if (yych <= 'D') { if (yych <= ' ') { if (yych == '\t') goto yy60; if (yych <= 0x1F) goto yy3; goto yy60; } else { if (yych <= '/') goto yy3; if (yych <= '9') goto yy395; if (yych <= 'C') goto yy3; goto yy60; } } else { if (yych <= 'H') { if (yych == 'F') goto yy60; if (yych <= 'G') goto yy3; goto yy60; } else { if (yych <= 'M') { if (yych <= 'L') goto yy3; goto yy60; } else { if (yych <= 'R') goto yy3; if (yych <= 'T') goto yy60; goto yy3; } } } } else { if (yych <= 'h') { if (yych <= 'c') { if (yych == 'X') goto yy3; if (yych <= 'Y') goto yy60; goto yy3; } else { if (yych <= 'e') { if (yych <= 'd') goto yy60; goto yy3; } else { if (yych == 'g') goto yy3; goto yy60; } } } else { if (yych <= 't') { if (yych == 'm') goto yy60; if (yych <= 'r') goto yy3; goto yy60; } else { if (yych <= 'w') { if (yych <= 'v') goto yy3; goto yy60; } else { if (yych == 'y') goto yy60; goto yy3; } } } } yy382: YYDEBUG(382, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'V') { if (yych <= 'D') { if (yych <= ' ') { if (yych == '\t') goto yy60; if (yych <= 0x1F) goto yy3; goto yy60; } else { if (yych <= '/') goto yy3; if (yych <= '9') goto yy383; if (yych <= 'C') goto yy3; goto yy60; } } else { if (yych <= 'H') { if (yych == 'F') goto yy60; if (yych <= 'G') goto yy3; goto yy60; } else { if (yych <= 'M') { if (yych <= 'L') goto yy3; goto yy60; } else { if (yych <= 'R') goto yy3; if (yych <= 'T') goto yy60; goto yy3; } } } } else { if (yych <= 'h') { if (yych <= 'c') { if (yych == 'X') goto yy3; if (yych <= 'Y') goto yy60; goto yy3; } else { if (yych <= 'e') { if (yych <= 'd') goto yy60; goto yy3; } else { if (yych == 'g') goto yy3; goto yy60; } } } else { if (yych <= 't') { if (yych == 'm') goto yy60; if (yych <= 'r') goto yy3; goto yy60; } else { if (yych <= 'w') { if (yych <= 'v') goto yy3; goto yy60; } else { if (yych == 'y') goto yy60; goto yy3; } } } } yy383: YYDEBUG(383, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy60; if (yych >= ':') goto yy60; yy384: YYDEBUG(384, *YYCURSOR); yych = *++YYCURSOR; if (yybm[0+yych] & 2) { goto yy54; } if (yych != '-') goto yy60; yy385: YYDEBUG(385, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '0') goto yy386; if (yych <= '1') goto yy387; goto yy56; yy386: YYDEBUG(386, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '9') goto yy388; goto yy56; yy387: YYDEBUG(387, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= '3') goto yy56; yy388: YYDEBUG(388, *YYCURSOR); yych = *++YYCURSOR; if (yych != '-') goto yy56; YYDEBUG(389, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '0') goto yy390; if (yych <= '2') goto yy391; if (yych <= '3') goto yy392; goto yy56; yy390: YYDEBUG(390, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '9') goto yy393; goto yy56; yy391: YYDEBUG(391, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '9') goto yy393; goto yy56; yy392: YYDEBUG(392, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= '2') goto yy56; yy393: YYDEBUG(393, *YYCURSOR); ++YYCURSOR; yy394: YYDEBUG(394, *YYCURSOR); { DEBUG_OUTPUT("iso8601date4 | iso8601date2 | iso8601dateslash | dateslash"); TIMELIB_INIT; TIMELIB_HAVE_DATE(); s->time->y = timelib_get_unsigned_nr((char **) &ptr, 4); s->time->m = timelib_get_nr((char **) &ptr, 2); s->time->d = timelib_get_nr((char **) &ptr, 2); TIMELIB_DEINIT; return TIMELIB_ISO_DATE; } yy395: YYDEBUG(395, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'V') { if (yych <= 'D') { if (yych <= ' ') { if (yych == '\t') goto yy60; if (yych <= 0x1F) goto yy3; goto yy60; } else { if (yych <= '/') goto yy3; if (yych <= '9') goto yy384; if (yych <= 'C') goto yy3; goto yy60; } } else { if (yych <= 'H') { if (yych == 'F') goto yy60; if (yych <= 'G') goto yy3; goto yy60; } else { if (yych <= 'M') { if (yych <= 'L') goto yy3; goto yy60; } else { if (yych <= 'R') goto yy3; if (yych <= 'T') goto yy60; goto yy3; } } } } else { if (yych <= 'h') { if (yych <= 'c') { if (yych == 'X') goto yy3; if (yych <= 'Y') goto yy60; goto yy3; } else { if (yych <= 'e') { if (yych <= 'd') goto yy60; goto yy3; } else { if (yych == 'g') goto yy3; goto yy60; } } } else { if (yych <= 't') { if (yych == 'm') goto yy60; if (yych <= 'r') goto yy3; goto yy60; } else { if (yych <= 'w') { if (yych <= 'v') goto yy3; goto yy60; } else { if (yych == 'y') goto yy60; goto yy3; } } } } yy396: YYDEBUG(396, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'T') { if (yych <= 'C') { if (yych <= ' ') { if (yych == '\t') goto yy60; if (yych <= 0x1F) goto yy3; goto yy60; } else { if (yych <= '5') { if (yych <= '/') goto yy3; } else { if (yych <= '9') goto yy395; if (yych <= ':') goto yy162; goto yy3; } } } else { if (yych <= 'G') { if (yych == 'E') goto yy3; if (yych <= 'F') goto yy60; goto yy3; } else { if (yych <= 'L') { if (yych <= 'H') goto yy60; goto yy3; } else { if (yych <= 'M') goto yy60; if (yych <= 'R') goto yy3; goto yy60; } } } } else { if (yych <= 'g') { if (yych <= 'Y') { if (yych == 'W') goto yy60; if (yych <= 'X') goto yy3; goto yy60; } else { if (yych <= 'd') { if (yych <= 'c') goto yy3; goto yy60; } else { if (yych == 'f') goto yy60; goto yy3; } } } else { if (yych <= 't') { if (yych <= 'l') { if (yych <= 'h') goto yy60; goto yy3; } else { if (yych <= 'm') goto yy60; if (yych <= 'r') goto yy3; goto yy60; } } else { if (yych <= 'w') { if (yych <= 'v') goto yy3; goto yy60; } else { if (yych == 'y') goto yy60; goto yy3; } } } } YYDEBUG(397, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'V') { if (yych <= 'D') { if (yych <= ' ') { if (yych == '\t') goto yy60; if (yych <= 0x1F) goto yy3; goto yy60; } else { if (yych <= '/') goto yy3; if (yych <= '9') goto yy398; if (yych <= 'C') goto yy3; goto yy60; } } else { if (yych <= 'H') { if (yych == 'F') goto yy60; if (yych <= 'G') goto yy3; goto yy60; } else { if (yych <= 'M') { if (yych <= 'L') goto yy3; goto yy60; } else { if (yych <= 'R') goto yy3; if (yych <= 'T') goto yy60; goto yy3; } } } } else { if (yych <= 'h') { if (yych <= 'c') { if (yych == 'X') goto yy3; if (yych <= 'Y') goto yy60; goto yy3; } else { if (yych <= 'e') { if (yych <= 'd') goto yy60; goto yy3; } else { if (yych == 'g') goto yy3; goto yy60; } } } else { if (yych <= 't') { if (yych == 'm') goto yy60; if (yych <= 'r') goto yy3; goto yy60; } else { if (yych <= 'w') { if (yych <= 'v') goto yy3; goto yy60; } else { if (yych == 'y') goto yy60; goto yy3; } } } } yy398: YYDEBUG(398, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 2) { goto yy54; } if (yych <= 'V') { if (yych <= 'D') { if (yych <= ' ') { if (yych == '\t') goto yy60; if (yych <= 0x1F) goto yy3; goto yy60; } else { if (yych == '-') goto yy385; if (yych <= 'C') goto yy3; goto yy60; } } else { if (yych <= 'H') { if (yych == 'F') goto yy60; if (yych <= 'G') goto yy3; goto yy60; } else { if (yych <= 'M') { if (yych <= 'L') goto yy3; goto yy60; } else { if (yych <= 'R') goto yy3; if (yych <= 'T') goto yy60; goto yy3; } } } } else { if (yych <= 'h') { if (yych <= 'c') { if (yych == 'X') goto yy3; if (yych <= 'Y') goto yy60; goto yy3; } else { if (yych <= 'e') { if (yych <= 'd') goto yy60; goto yy3; } else { if (yych == 'g') goto yy3; goto yy60; } } } else { if (yych <= 't') { if (yych == 'm') goto yy60; if (yych <= 'r') goto yy3; goto yy60; } else { if (yych <= 'w') { if (yych <= 'v') goto yy3; goto yy60; } else { if (yych == 'y') goto yy60; goto yy3; } } } } yy399: YYDEBUG(399, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy401; if (yych <= '0') goto yy675; if (yych <= '1') goto yy676; if (yych <= '9') goto yy677; goto yy401; yy400: YYDEBUG(400, *YYCURSOR); ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 13) YYFILL(13); yych = *YYCURSOR; yy401: YYDEBUG(401, *YYCURSOR); switch (yych) { case '\t': case ' ': goto yy400; case '-': case '.': goto yy516; case 'A': case 'a': goto yy419; case 'D': case 'd': goto yy405; case 'F': case 'f': goto yy406; case 'H': case 'h': goto yy63; case 'I': goto yy414; case 'J': case 'j': goto yy418; case 'M': case 'm': goto yy404; case 'N': case 'n': goto yy421; case 'O': case 'o': goto yy420; case 'P': case 'p': goto yy423; case 'S': case 's': goto yy402; case 'T': case 't': goto yy68; case 'V': goto yy416; case 'W': case 'w': goto yy67; case 'X': goto yy417; case 'Y': case 'y': goto yy66; default: goto yy56; } yy402: YYDEBUG(402, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych <= 'D') { if (yych == 'A') goto yy126; goto yy56; } else { if (yych <= 'E') goto yy988; if (yych <= 'T') goto yy56; goto yy125; } } else { if (yych <= 'd') { if (yych == 'a') goto yy126; goto yy56; } else { if (yych <= 'e') goto yy988; if (yych == 'u') goto yy125; goto yy56; } } yy403: YYDEBUG(403, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '`') { if (yych <= 'D') { if (yych == 'A') goto yy126; goto yy56; } else { if (yych <= 'E') goto yy988; if (yych == 'U') goto yy125; goto yy56; } } else { if (yych <= 'e') { if (yych <= 'a') goto yy126; if (yych <= 'd') goto yy56; goto yy988; } else { if (yych <= 's') goto yy56; if (yych <= 't') goto yy668; if (yych <= 'u') goto yy125; goto yy56; } } yy404: YYDEBUG(404, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'O') { if (yych <= 'H') { if (yych == 'A') goto yy531; goto yy56; } else { if (yych <= 'I') goto yy117; if (yych <= 'N') goto yy56; goto yy116; } } else { if (yych <= 'h') { if (yych == 'a') goto yy531; goto yy56; } else { if (yych <= 'i') goto yy117; if (yych == 'o') goto yy116; goto yy56; } } yy405: YYDEBUG(405, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'E') { if (yych == 'A') goto yy113; if (yych <= 'D') goto yy56; goto yy518; } else { if (yych <= 'a') { if (yych <= '`') goto yy56; goto yy113; } else { if (yych == 'e') goto yy518; goto yy56; } } yy406: YYDEBUG(406, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'R') { if (yych <= 'N') { if (yych == 'E') goto yy534; goto yy56; } else { if (yych <= 'O') goto yy98; if (yych <= 'Q') goto yy56; goto yy97; } } else { if (yych <= 'n') { if (yych == 'e') goto yy534; goto yy56; } else { if (yych <= 'o') goto yy98; if (yych == 'r') goto yy97; goto yy56; } } yy407: YYDEBUG(407, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych == 'H') goto yy69; if (yych <= 'T') goto yy56; goto yy70; } else { if (yych <= 'h') { if (yych <= 'g') goto yy56; goto yy987; } else { if (yych == 'u') goto yy70; goto yy56; } } yy408: YYDEBUG(408, *YYCURSOR); yych = *++YYCURSOR; if (yych == '-') goto yy681; if (yych <= '/') goto yy60; if (yych <= '9') goto yy680; goto yy60; yy409: YYDEBUG(409, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'c') { if (yych == 'O') goto yy469; goto yy56; } else { if (yych <= 'd') goto yy668; if (yych == 'o') goto yy469; goto yy56; } yy410: YYDEBUG(410, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'd') goto yy668; goto yy56; yy411: YYDEBUG(411, *YYCURSOR); yych = *++YYCURSOR; switch (yych) { case '0': case '1': case '2': goto yy605; case '3': goto yy607; case '4': case '5': case '6': case '7': case '8': case '9': goto yy608; case 'A': case 'a': goto yy612; case 'D': case 'd': goto yy616; case 'F': case 'f': goto yy610; case 'J': case 'j': goto yy609; case 'M': case 'm': goto yy611; case 'N': case 'n': goto yy615; case 'O': case 'o': goto yy614; case 'S': case 's': goto yy613; default: goto yy56; } yy412: YYDEBUG(412, *YYCURSOR); yych = *++YYCURSOR; switch (yych) { case '0': goto yy555; case '1': goto yy556; case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy557; case 'A': case 'a': goto yy561; case 'D': case 'd': goto yy565; case 'F': case 'f': goto yy559; case 'J': case 'j': goto yy558; case 'M': case 'm': goto yy560; case 'N': case 'n': goto yy564; case 'O': case 'o': goto yy563; case 'S': case 's': goto yy562; default: goto yy517; } yy413: YYDEBUG(413, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '1') { if (yych <= '/') goto yy517; if (yych <= '0') goto yy507; goto yy508; } else { if (yych <= '5') goto yy509; if (yych <= '9') goto yy510; goto yy517; } yy414: YYDEBUG(414, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= 0x1F) { if (yych == '\t') goto yy471; } else { if (yych <= ' ') goto yy471; if (yych <= ',') goto yy415; if (yych <= '.') goto yy471; } } else { if (yych <= 'U') { if (yych <= '9') goto yy473; if (yych == 'I') goto yy506; } else { if (yych == 'W') goto yy415; if (yych <= 'X') goto yy479; } } yy415: YYDEBUG(415, *YYCURSOR); { DEBUG_OUTPUT("datenoyearrev"); TIMELIB_INIT; TIMELIB_HAVE_DATE(); s->time->d = timelib_get_nr((char **) &ptr, 2); timelib_skip_day_suffix((char **) &ptr); s->time->m = timelib_get_month((char **) &ptr); TIMELIB_DEINIT; return TIMELIB_DATE_TEXT; } yy416: YYDEBUG(416, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ',') { if (yych <= '\t') { if (yych <= 0x08) goto yy415; goto yy471; } else { if (yych == ' ') goto yy471; goto yy415; } } else { if (yych <= '9') { if (yych <= '.') goto yy471; if (yych <= '/') goto yy415; goto yy473; } else { if (yych == 'I') goto yy504; goto yy415; } } yy417: YYDEBUG(417, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ',') { if (yych <= '\t') { if (yych <= 0x08) goto yy415; goto yy471; } else { if (yych == ' ') goto yy471; goto yy415; } } else { if (yych <= '9') { if (yych <= '.') goto yy471; if (yych <= '/') goto yy415; goto yy473; } else { if (yych == 'I') goto yy503; goto yy415; } } yy418: YYDEBUG(418, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych == 'A') goto yy496; if (yych <= 'T') goto yy56; goto yy495; } else { if (yych <= 'a') { if (yych <= '`') goto yy56; goto yy496; } else { if (yych == 'u') goto yy495; goto yy56; } } yy419: YYDEBUG(419, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= 'L') { if (yych == '.') goto yy424; goto yy56; } else { if (yych <= 'M') goto yy425; if (yych == 'P') goto yy489; goto yy56; } } else { if (yych <= 'o') { if (yych <= 'U') goto yy488; if (yych == 'm') goto yy425; goto yy56; } else { if (yych <= 'p') goto yy489; if (yych == 'u') goto yy488; goto yy56; } } yy420: YYDEBUG(420, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'C') goto yy483; if (yych == 'c') goto yy483; goto yy56; yy421: YYDEBUG(421, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'O') goto yy469; if (yych == 'o') goto yy469; goto yy56; yy422: YYDEBUG(422, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '5') goto yy429; if (yych <= '9') goto yy431; goto yy56; yy423: YYDEBUG(423, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'L') { if (yych != '.') goto yy56; } else { if (yych <= 'M') goto yy425; if (yych == 'm') goto yy425; goto yy56; } yy424: YYDEBUG(424, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'M') goto yy425; if (yych != 'm') goto yy56; yy425: YYDEBUG(425, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 0x1F) { if (yych <= 0x00) goto yy427; if (yych == '\t') goto yy427; goto yy56; } else { if (yych <= ' ') goto yy427; if (yych != '.') goto yy56; } YYDEBUG(426, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '\t') { if (yych <= 0x00) goto yy427; if (yych <= 0x08) goto yy56; } else { if (yych != ' ') goto yy56; } yy427: YYDEBUG(427, *YYCURSOR); ++YYCURSOR; YYDEBUG(428, *YYCURSOR); { DEBUG_OUTPUT("timetiny12 | timeshort12 | timelong12"); TIMELIB_INIT; TIMELIB_HAVE_TIME(); s->time->h = timelib_get_nr((char **) &ptr, 2); if (*ptr == ':' || *ptr == '.') { s->time->i = timelib_get_nr((char **) &ptr, 2); if (*ptr == ':' || *ptr == '.') { s->time->s = timelib_get_nr((char **) &ptr, 2); } } s->time->h += timelib_meridian((char **) &ptr, s->time->h); TIMELIB_DEINIT; return TIMELIB_TIME12; } yy429: YYDEBUG(429, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych == '.') goto yy432; } else { if (yych <= '9') goto yy446; if (yych <= ':') goto yy432; } yy430: YYDEBUG(430, *YYCURSOR); { int tz_not_found; DEBUG_OUTPUT("timeshort24 | timelong24 | iso8601long"); TIMELIB_INIT; TIMELIB_HAVE_TIME(); s->time->h = timelib_get_nr((char **) &ptr, 2); s->time->i = timelib_get_nr((char **) &ptr, 2); if (*ptr == ':' || *ptr == '.') { s->time->s = timelib_get_nr((char **) &ptr, 2); if (*ptr == '.') { s->time->f = timelib_get_frac_nr((char **) &ptr, 8); } } if (*ptr != '\0') { s->time->z = timelib_parse_zone((char **) &ptr, &s->time->dst, s->time, &tz_not_found, s->tzdb, tz_get_wrapper); if (tz_not_found) { add_error(s, "The timezone could not be found in the database"); } } TIMELIB_DEINIT; return TIMELIB_TIME24_WITH_ZONE; } yy431: YYDEBUG(431, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych == '.') goto yy432; if (yych != ':') goto yy430; yy432: YYDEBUG(432, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '5') goto yy433; if (yych <= '6') goto yy434; if (yych <= '9') goto yy435; goto yy56; yy433: YYDEBUG(433, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych == '.') goto yy436; if (yych <= '/') goto yy430; if (yych <= '9') goto yy439; goto yy430; yy434: YYDEBUG(434, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych == '.') goto yy436; if (yych == '0') goto yy439; goto yy430; yy435: YYDEBUG(435, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych != '.') goto yy430; yy436: YYDEBUG(436, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= ':') goto yy56; yy437: YYDEBUG(437, *YYCURSOR); ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; YYDEBUG(438, *YYCURSOR); if (yych <= '/') goto yy430; if (yych <= '9') goto yy437; goto yy430; yy439: YYDEBUG(439, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '@') { if (yych <= 0x1F) { if (yych != '\t') goto yy430; } else { if (yych <= ' ') goto yy440; if (yych == '.') goto yy436; goto yy430; } } else { if (yych <= '`') { if (yych <= 'A') goto yy442; if (yych == 'P') goto yy442; goto yy430; } else { if (yych <= 'a') goto yy442; if (yych == 'p') goto yy442; goto yy430; } } yy440: YYDEBUG(440, *YYCURSOR); ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5); yych = *YYCURSOR; YYDEBUG(441, *YYCURSOR); if (yych <= 'A') { if (yych <= 0x1F) { if (yych == '\t') goto yy440; goto yy56; } else { if (yych <= ' ') goto yy440; if (yych <= '@') goto yy56; } } else { if (yych <= '`') { if (yych != 'P') goto yy56; } else { if (yych <= 'a') goto yy442; if (yych != 'p') goto yy56; } } yy442: YYDEBUG(442, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'L') { if (yych != '.') goto yy56; } else { if (yych <= 'M') goto yy444; if (yych == 'm') goto yy444; goto yy56; } YYDEBUG(443, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'M') goto yy444; if (yych != 'm') goto yy56; yy444: YYDEBUG(444, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 0x1F) { if (yych <= 0x00) goto yy427; if (yych == '\t') goto yy427; goto yy56; } else { if (yych <= ' ') goto yy427; if (yych != '.') goto yy56; } YYDEBUG(445, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '\t') { if (yych <= 0x00) goto yy427; if (yych <= 0x08) goto yy56; goto yy427; } else { if (yych == ' ') goto yy427; goto yy56; } yy446: YYDEBUG(446, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ':') { if (yych <= ' ') { if (yych == '\t') goto yy447; if (yych <= 0x1F) goto yy430; } else { if (yych == '.') goto yy432; if (yych <= '9') goto yy430; goto yy450; } } else { if (yych <= 'P') { if (yych == 'A') goto yy449; if (yych <= 'O') goto yy430; goto yy449; } else { if (yych <= 'a') { if (yych <= '`') goto yy430; goto yy449; } else { if (yych == 'p') goto yy449; goto yy430; } } } yy447: YYDEBUG(447, *YYCURSOR); ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5); yych = *YYCURSOR; YYDEBUG(448, *YYCURSOR); if (yych <= 'A') { if (yych <= 0x1F) { if (yych == '\t') goto yy447; goto yy56; } else { if (yych <= ' ') goto yy447; if (yych <= '@') goto yy56; } } else { if (yych <= '`') { if (yych != 'P') goto yy56; } else { if (yych <= 'a') goto yy449; if (yych != 'p') goto yy56; } } yy449: YYDEBUG(449, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'L') { if (yych == '.') goto yy466; goto yy56; } else { if (yych <= 'M') goto yy467; if (yych == 'm') goto yy467; goto yy56; } yy450: YYDEBUG(450, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '5') goto yy451; if (yych <= '6') goto yy452; if (yych <= '9') goto yy435; goto yy56; yy451: YYDEBUG(451, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych == '.') goto yy436; if (yych <= '/') goto yy430; if (yych <= '9') goto yy453; goto yy430; yy452: YYDEBUG(452, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych == '.') goto yy436; if (yych != '0') goto yy430; yy453: YYDEBUG(453, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ':') { if (yych <= ' ') { if (yych == '\t') goto yy440; if (yych <= 0x1F) goto yy430; goto yy440; } else { if (yych == '.') goto yy454; if (yych <= '9') goto yy430; goto yy455; } } else { if (yych <= 'P') { if (yych == 'A') goto yy442; if (yych <= 'O') goto yy430; goto yy442; } else { if (yych <= 'a') { if (yych <= '`') goto yy430; goto yy442; } else { if (yych == 'p') goto yy442; goto yy430; } } } yy454: YYDEBUG(454, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '9') goto yy464; goto yy56; yy455: YYDEBUG(455, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= ':') goto yy56; yy456: YYDEBUG(456, *YYCURSOR); ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5); yych = *YYCURSOR; YYDEBUG(457, *YYCURSOR); if (yych <= 'O') { if (yych <= '9') { if (yych <= '/') goto yy56; goto yy456; } else { if (yych != 'A') goto yy56; } } else { if (yych <= 'a') { if (yych <= 'P') goto yy458; if (yych <= '`') goto yy56; } else { if (yych != 'p') goto yy56; } } yy458: YYDEBUG(458, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'L') { if (yych != '.') goto yy56; } else { if (yych <= 'M') goto yy460; if (yych == 'm') goto yy460; goto yy56; } YYDEBUG(459, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'M') goto yy460; if (yych != 'm') goto yy56; yy460: YYDEBUG(460, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 0x1F) { if (yych <= 0x00) goto yy462; if (yych == '\t') goto yy462; goto yy56; } else { if (yych <= ' ') goto yy462; if (yych != '.') goto yy56; } YYDEBUG(461, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '\t') { if (yych <= 0x00) goto yy462; if (yych <= 0x08) goto yy56; } else { if (yych != ' ') goto yy56; } yy462: YYDEBUG(462, *YYCURSOR); ++YYCURSOR; YYDEBUG(463, *YYCURSOR); { DEBUG_OUTPUT("mssqltime"); TIMELIB_INIT; TIMELIB_HAVE_TIME(); s->time->h = timelib_get_nr((char **) &ptr, 2); s->time->i = timelib_get_nr((char **) &ptr, 2); if (*ptr == ':' || *ptr == '.') { s->time->s = timelib_get_nr((char **) &ptr, 2); if (*ptr == ':' || *ptr == '.') { s->time->f = timelib_get_frac_nr((char **) &ptr, 8); } } timelib_eat_spaces((char **) &ptr); s->time->h += timelib_meridian((char **) &ptr, s->time->h); TIMELIB_DEINIT; return TIMELIB_TIME24_WITH_ZONE; } yy464: YYDEBUG(464, *YYCURSOR); yyaccept = 10; YYMARKER = ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5); yych = *YYCURSOR; YYDEBUG(465, *YYCURSOR); if (yych <= 'O') { if (yych <= '9') { if (yych <= '/') goto yy430; goto yy464; } else { if (yych == 'A') goto yy458; goto yy430; } } else { if (yych <= 'a') { if (yych <= 'P') goto yy458; if (yych <= '`') goto yy430; goto yy458; } else { if (yych == 'p') goto yy458; goto yy430; } } yy466: YYDEBUG(466, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'M') goto yy467; if (yych != 'm') goto yy56; yy467: YYDEBUG(467, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 0x1F) { if (yych <= 0x00) goto yy427; if (yych == '\t') goto yy427; goto yy56; } else { if (yych <= ' ') goto yy427; if (yych != '.') goto yy56; } YYDEBUG(468, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '\t') { if (yych <= 0x00) goto yy427; if (yych <= 0x08) goto yy56; goto yy427; } else { if (yych == ' ') goto yy427; goto yy56; } yy469: YYDEBUG(469, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'V') goto yy470; if (yych != 'v') goto yy56; yy470: YYDEBUG(470, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= 0x1F) { if (yych != '\t') goto yy415; } else { if (yych <= ' ') goto yy471; if (yych <= ',') goto yy415; } } else { if (yych <= 'D') { if (yych <= '/') goto yy415; if (yych <= '9') goto yy473; goto yy415; } else { if (yych <= 'E') goto yy475; if (yych == 'e') goto yy475; goto yy415; } } yy471: YYDEBUG(471, *YYCURSOR); ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4); yych = *YYCURSOR; yy472: YYDEBUG(472, *YYCURSOR); if (yych <= ' ') { if (yych == '\t') goto yy471; if (yych <= 0x1F) goto yy56; goto yy471; } else { if (yych <= '.') { if (yych <= ',') goto yy56; goto yy471; } else { if (yych <= '/') goto yy56; if (yych >= ':') goto yy56; } } yy473: YYDEBUG(473, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '/') goto yy474; if (yych <= '9') goto yy480; yy474: YYDEBUG(474, *YYCURSOR); { int length = 0; DEBUG_OUTPUT("datefull"); TIMELIB_INIT; TIMELIB_HAVE_DATE(); s->time->d = timelib_get_nr((char **) &ptr, 2); timelib_skip_day_suffix((char **) &ptr); s->time->m = timelib_get_month((char **) &ptr); s->time->y = timelib_get_nr_ex((char **) &ptr, 4, &length); TIMELIB_PROCESS_YEAR(s->time->y, length); TIMELIB_DEINIT; return TIMELIB_DATE_FULL; } yy475: YYDEBUG(475, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'M') goto yy476; if (yych != 'm') goto yy56; yy476: YYDEBUG(476, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'B') goto yy477; if (yych != 'b') goto yy56; yy477: YYDEBUG(477, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy478; if (yych != 'e') goto yy56; yy478: YYDEBUG(478, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy479; if (yych != 'r') goto yy56; yy479: YYDEBUG(479, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ' ') { if (yych == '\t') goto yy471; if (yych <= 0x1F) goto yy415; goto yy471; } else { if (yych <= '.') { if (yych <= ',') goto yy415; goto yy471; } else { if (yych <= '/') goto yy415; if (yych <= '9') goto yy473; goto yy415; } } yy480: YYDEBUG(480, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy474; if (yych >= ':') goto yy474; yy481: YYDEBUG(481, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy474; if (yych >= ':') goto yy474; YYDEBUG(482, *YYCURSOR); yych = *++YYCURSOR; goto yy474; yy483: YYDEBUG(483, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'T') goto yy484; if (yych != 't') goto yy56; yy484: YYDEBUG(484, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= 0x1F) { if (yych == '\t') goto yy471; goto yy415; } else { if (yych <= ' ') goto yy471; if (yych <= ',') goto yy415; goto yy471; } } else { if (yych <= 'N') { if (yych <= '/') goto yy415; if (yych <= '9') goto yy473; goto yy415; } else { if (yych <= 'O') goto yy485; if (yych != 'o') goto yy415; } } yy485: YYDEBUG(485, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'B') goto yy486; if (yych != 'b') goto yy56; yy486: YYDEBUG(486, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy487; if (yych != 'e') goto yy56; yy487: YYDEBUG(487, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy479; if (yych == 'r') goto yy479; goto yy56; yy488: YYDEBUG(488, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'G') goto yy492; if (yych == 'g') goto yy492; goto yy56; yy489: YYDEBUG(489, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy490; if (yych != 'r') goto yy56; yy490: YYDEBUG(490, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= 0x1F) { if (yych == '\t') goto yy471; goto yy415; } else { if (yych <= ' ') goto yy471; if (yych <= ',') goto yy415; goto yy471; } } else { if (yych <= 'H') { if (yych <= '/') goto yy415; if (yych <= '9') goto yy473; goto yy415; } else { if (yych <= 'I') goto yy491; if (yych != 'i') goto yy415; } } yy491: YYDEBUG(491, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'L') goto yy479; if (yych == 'l') goto yy479; goto yy56; yy492: YYDEBUG(492, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= 0x1F) { if (yych == '\t') goto yy471; goto yy415; } else { if (yych <= ' ') goto yy471; if (yych <= ',') goto yy415; goto yy471; } } else { if (yych <= 'T') { if (yych <= '/') goto yy415; if (yych <= '9') goto yy473; goto yy415; } else { if (yych <= 'U') goto yy493; if (yych != 'u') goto yy415; } } yy493: YYDEBUG(493, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'S') goto yy494; if (yych != 's') goto yy56; yy494: YYDEBUG(494, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'T') goto yy479; if (yych == 't') goto yy479; goto yy56; yy495: YYDEBUG(495, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'N') { if (yych == 'L') goto yy502; if (yych <= 'M') goto yy56; goto yy501; } else { if (yych <= 'l') { if (yych <= 'k') goto yy56; goto yy502; } else { if (yych == 'n') goto yy501; goto yy56; } } yy496: YYDEBUG(496, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'N') goto yy497; if (yych != 'n') goto yy56; yy497: YYDEBUG(497, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= 0x1F) { if (yych == '\t') goto yy471; goto yy415; } else { if (yych <= ' ') goto yy471; if (yych <= ',') goto yy415; goto yy471; } } else { if (yych <= 'T') { if (yych <= '/') goto yy415; if (yych <= '9') goto yy473; goto yy415; } else { if (yych <= 'U') goto yy498; if (yych != 'u') goto yy415; } } yy498: YYDEBUG(498, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy499; if (yych != 'a') goto yy56; yy499: YYDEBUG(499, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy500; if (yych != 'r') goto yy56; yy500: YYDEBUG(500, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy479; if (yych == 'y') goto yy479; goto yy56; yy501: YYDEBUG(501, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= 0x1F) { if (yych == '\t') goto yy471; goto yy415; } else { if (yych <= ' ') goto yy471; if (yych <= ',') goto yy415; goto yy471; } } else { if (yych <= 'D') { if (yych <= '/') goto yy415; if (yych <= '9') goto yy473; goto yy415; } else { if (yych <= 'E') goto yy479; if (yych == 'e') goto yy479; goto yy415; } } yy502: YYDEBUG(502, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= 0x1F) { if (yych == '\t') goto yy471; goto yy415; } else { if (yych <= ' ') goto yy471; if (yych <= ',') goto yy415; goto yy471; } } else { if (yych <= 'X') { if (yych <= '/') goto yy415; if (yych <= '9') goto yy473; goto yy415; } else { if (yych <= 'Y') goto yy479; if (yych == 'y') goto yy479; goto yy415; } } yy503: YYDEBUG(503, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ',') { if (yych <= '\t') { if (yych <= 0x08) goto yy415; goto yy471; } else { if (yych == ' ') goto yy471; goto yy415; } } else { if (yych <= '9') { if (yych <= '.') goto yy471; if (yych <= '/') goto yy415; goto yy473; } else { if (yych == 'I') goto yy479; goto yy415; } } yy504: YYDEBUG(504, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ',') { if (yych <= '\t') { if (yych <= 0x08) goto yy415; goto yy471; } else { if (yych == ' ') goto yy471; goto yy415; } } else { if (yych <= '9') { if (yych <= '.') goto yy471; if (yych <= '/') goto yy415; goto yy473; } else { if (yych != 'I') goto yy415; } } YYDEBUG(505, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ',') { if (yych <= '\t') { if (yych <= 0x08) goto yy415; goto yy471; } else { if (yych == ' ') goto yy471; goto yy415; } } else { if (yych <= '9') { if (yych <= '.') goto yy471; if (yych <= '/') goto yy415; goto yy473; } else { if (yych == 'I') goto yy479; goto yy415; } } yy506: YYDEBUG(506, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ',') { if (yych <= '\t') { if (yych <= 0x08) goto yy415; goto yy471; } else { if (yych == ' ') goto yy471; goto yy415; } } else { if (yych <= '9') { if (yych <= '.') goto yy471; if (yych <= '/') goto yy415; goto yy473; } else { if (yych == 'I') goto yy479; goto yy415; } } yy507: YYDEBUG(507, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= ',') goto yy430; if (yych <= '-') goto yy541; goto yy540; } else { if (yych <= '/') goto yy430; if (yych <= '9') goto yy554; if (yych <= ':') goto yy432; goto yy430; } yy508: YYDEBUG(508, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= ',') goto yy430; if (yych <= '-') goto yy541; if (yych <= '.') goto yy540; goto yy430; } else { if (yych <= '2') goto yy554; if (yych <= '9') goto yy553; if (yych <= ':') goto yy432; goto yy430; } yy509: YYDEBUG(509, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= ',') goto yy430; if (yych <= '-') goto yy541; goto yy540; } else { if (yych <= '/') goto yy430; if (yych <= '9') goto yy553; if (yych <= ':') goto yy432; goto yy430; } yy510: YYDEBUG(510, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= ',') goto yy430; if (yych <= '-') goto yy541; goto yy540; } else { if (yych == ':') goto yy432; goto yy430; } yy511: YYDEBUG(511, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy534; if (yych == 'e') goto yy534; goto yy56; yy512: YYDEBUG(512, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy531; if (yych == 'a') goto yy531; goto yy56; yy513: YYDEBUG(513, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych == 'P') goto yy489; if (yych <= 'T') goto yy56; goto yy488; } else { if (yych <= 'p') { if (yych <= 'o') goto yy56; goto yy489; } else { if (yych == 'u') goto yy488; goto yy56; } } yy514: YYDEBUG(514, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy524; if (yych == 'e') goto yy524; goto yy56; yy515: YYDEBUG(515, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy518; if (yych == 'e') goto yy518; goto yy56; yy516: YYDEBUG(516, *YYCURSOR); ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 13) YYFILL(13); yych = *YYCURSOR; yy517: YYDEBUG(517, *YYCURSOR); switch (yych) { case '\t': case ' ': case '-': case '.': goto yy516; case 'A': case 'a': goto yy513; case 'D': case 'd': goto yy515; case 'F': case 'f': goto yy511; case 'I': goto yy414; case 'J': case 'j': goto yy418; case 'M': case 'm': goto yy512; case 'N': case 'n': goto yy421; case 'O': case 'o': goto yy420; case 'S': case 's': goto yy514; case 'V': goto yy416; case 'X': goto yy417; default: goto yy56; } yy518: YYDEBUG(518, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'C') goto yy519; if (yych != 'c') goto yy56; yy519: YYDEBUG(519, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= 0x1F) { if (yych == '\t') goto yy471; goto yy415; } else { if (yych <= ' ') goto yy471; if (yych <= ',') goto yy415; goto yy471; } } else { if (yych <= 'D') { if (yych <= '/') goto yy415; if (yych <= '9') goto yy473; goto yy415; } else { if (yych <= 'E') goto yy520; if (yych != 'e') goto yy415; } } yy520: YYDEBUG(520, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'M') goto yy521; if (yych != 'm') goto yy56; yy521: YYDEBUG(521, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'B') goto yy522; if (yych != 'b') goto yy56; yy522: YYDEBUG(522, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy523; if (yych != 'e') goto yy56; yy523: YYDEBUG(523, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy479; if (yych == 'r') goto yy479; goto yy56; yy524: YYDEBUG(524, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'P') goto yy525; if (yych != 'p') goto yy56; yy525: YYDEBUG(525, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= 0x1F) { if (yych == '\t') goto yy471; goto yy415; } else { if (yych <= ' ') goto yy471; if (yych <= ',') goto yy415; goto yy471; } } else { if (yych <= 'S') { if (yych <= '/') goto yy415; if (yych <= '9') goto yy473; goto yy415; } else { if (yych <= 'T') goto yy526; if (yych != 't') goto yy415; } } yy526: YYDEBUG(526, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= 0x1F) { if (yych == '\t') goto yy471; goto yy415; } else { if (yych <= ' ') goto yy471; if (yych <= ',') goto yy415; goto yy471; } } else { if (yych <= 'D') { if (yych <= '/') goto yy415; if (yych <= '9') goto yy473; goto yy415; } else { if (yych <= 'E') goto yy527; if (yych != 'e') goto yy415; } } yy527: YYDEBUG(527, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'M') goto yy528; if (yych != 'm') goto yy56; yy528: YYDEBUG(528, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'B') goto yy529; if (yych != 'b') goto yy56; yy529: YYDEBUG(529, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy530; if (yych != 'e') goto yy56; yy530: YYDEBUG(530, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy479; if (yych == 'r') goto yy479; goto yy56; yy531: YYDEBUG(531, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'Y') { if (yych == 'R') goto yy532; if (yych <= 'X') goto yy56; goto yy479; } else { if (yych <= 'r') { if (yych <= 'q') goto yy56; } else { if (yych == 'y') goto yy479; goto yy56; } } yy532: YYDEBUG(532, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= 0x1F) { if (yych == '\t') goto yy471; goto yy415; } else { if (yych <= ' ') goto yy471; if (yych <= ',') goto yy415; goto yy471; } } else { if (yych <= 'B') { if (yych <= '/') goto yy415; if (yych <= '9') goto yy473; goto yy415; } else { if (yych <= 'C') goto yy533; if (yych != 'c') goto yy415; } } yy533: YYDEBUG(533, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'H') goto yy479; if (yych == 'h') goto yy479; goto yy56; yy534: YYDEBUG(534, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'B') goto yy535; if (yych != 'b') goto yy56; yy535: YYDEBUG(535, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= 0x1F) { if (yych == '\t') goto yy471; goto yy415; } else { if (yych <= ' ') goto yy471; if (yych <= ',') goto yy415; goto yy471; } } else { if (yych <= 'Q') { if (yych <= '/') goto yy415; if (yych <= '9') goto yy473; goto yy415; } else { if (yych <= 'R') goto yy536; if (yych != 'r') goto yy415; } } yy536: YYDEBUG(536, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'U') goto yy537; if (yych != 'u') goto yy56; yy537: YYDEBUG(537, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy538; if (yych != 'a') goto yy56; yy538: YYDEBUG(538, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy539; if (yych != 'r') goto yy56; yy539: YYDEBUG(539, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy479; if (yych == 'y') goto yy479; goto yy56; yy540: YYDEBUG(540, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '5') goto yy547; if (yych <= '6') goto yy548; if (yych <= '9') goto yy549; goto yy56; yy541: YYDEBUG(541, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= ':') goto yy56; YYDEBUG(542, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= ':') goto yy56; yy543: YYDEBUG(543, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= ':') goto yy56; yy544: YYDEBUG(544, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= ':') goto yy56; YYDEBUG(545, *YYCURSOR); ++YYCURSOR; YYDEBUG(546, *YYCURSOR); { DEBUG_OUTPUT("pointed date YYYY"); TIMELIB_INIT; TIMELIB_HAVE_DATE(); s->time->d = timelib_get_nr((char **) &ptr, 2); s->time->m = timelib_get_nr((char **) &ptr, 2); s->time->y = timelib_get_nr((char **) &ptr, 4); TIMELIB_DEINIT; return TIMELIB_DATE_FULL_POINTED; } yy547: YYDEBUG(547, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych == '.') goto yy436; if (yych <= '/') goto yy430; if (yych <= '9') goto yy552; goto yy430; yy548: YYDEBUG(548, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych == '.') goto yy436; goto yy430; } else { if (yych <= '0') goto yy552; if (yych <= '9') goto yy550; goto yy430; } yy549: YYDEBUG(549, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych == '.') goto yy436; if (yych <= '/') goto yy430; if (yych >= ':') goto yy430; yy550: YYDEBUG(550, *YYCURSOR); yyaccept = 11; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') goto yy551; if (yych <= '9') goto yy544; yy551: YYDEBUG(551, *YYCURSOR); { int length = 0; DEBUG_OUTPUT("pointed date YY"); TIMELIB_INIT; TIMELIB_HAVE_DATE(); s->time->d = timelib_get_nr((char **) &ptr, 2); s->time->m = timelib_get_nr((char **) &ptr, 2); s->time->y = timelib_get_nr_ex((char **) &ptr, 2, &length); TIMELIB_PROCESS_YEAR(s->time->y, length); TIMELIB_DEINIT; return TIMELIB_DATE_FULL_POINTED; } yy552: YYDEBUG(552, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '9') { if (yych <= ' ') { if (yych == '\t') goto yy440; if (yych <= 0x1F) goto yy430; goto yy440; } else { if (yych == '.') goto yy436; if (yych <= '/') goto yy430; goto yy544; } } else { if (yych <= 'P') { if (yych == 'A') goto yy442; if (yych <= 'O') goto yy430; goto yy442; } else { if (yych <= 'a') { if (yych <= '`') goto yy430; goto yy442; } else { if (yych == 'p') goto yy442; goto yy430; } } } yy553: YYDEBUG(553, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ':') { if (yych <= ' ') { if (yych == '\t') goto yy447; if (yych <= 0x1F) goto yy430; goto yy447; } else { if (yych == '.') goto yy432; if (yych <= '9') goto yy430; goto yy432; } } else { if (yych <= 'P') { if (yych == 'A') goto yy449; if (yych <= 'O') goto yy430; goto yy449; } else { if (yych <= 'a') { if (yych <= '`') goto yy430; goto yy449; } else { if (yych == 'p') goto yy449; goto yy430; } } } yy554: YYDEBUG(554, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ':') { if (yych <= ' ') { if (yych == '\t') goto yy447; if (yych <= 0x1F) goto yy430; goto yy447; } else { if (yych <= '-') { if (yych <= ',') goto yy430; goto yy541; } else { if (yych <= '.') goto yy540; if (yych <= '9') goto yy430; goto yy432; } } } else { if (yych <= 'P') { if (yych == 'A') goto yy449; if (yych <= 'O') goto yy430; goto yy449; } else { if (yych <= 'a') { if (yych <= '`') goto yy430; goto yy449; } else { if (yych == 'p') goto yy449; goto yy430; } } } yy555: YYDEBUG(555, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '.') { if (yych <= ',') goto yy56; if (yych <= '-') goto yy594; goto yy541; } else { if (yych <= '/') goto yy56; if (yych <= '9') goto yy557; goto yy56; } yy556: YYDEBUG(556, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '.') { if (yych <= ',') goto yy56; if (yych <= '-') goto yy594; goto yy541; } else { if (yych <= '/') goto yy56; if (yych >= '3') goto yy56; } yy557: YYDEBUG(557, *YYCURSOR); yych = *++YYCURSOR; if (yych <= ',') goto yy56; if (yych <= '-') goto yy594; if (yych <= '.') goto yy541; goto yy56; yy558: YYDEBUG(558, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych == 'A') goto yy590; if (yych <= 'T') goto yy56; goto yy589; } else { if (yych <= 'a') { if (yych <= '`') goto yy56; goto yy590; } else { if (yych == 'u') goto yy589; goto yy56; } } yy559: YYDEBUG(559, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy587; if (yych == 'e') goto yy587; goto yy56; yy560: YYDEBUG(560, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy584; if (yych == 'a') goto yy584; goto yy56; yy561: YYDEBUG(561, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych == 'P') goto yy581; if (yych <= 'T') goto yy56; goto yy580; } else { if (yych <= 'p') { if (yych <= 'o') goto yy56; goto yy581; } else { if (yych == 'u') goto yy580; goto yy56; } } yy562: YYDEBUG(562, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy577; if (yych == 'e') goto yy577; goto yy56; yy563: YYDEBUG(563, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'C') goto yy575; if (yych == 'c') goto yy575; goto yy56; yy564: YYDEBUG(564, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'O') goto yy573; if (yych == 'o') goto yy573; goto yy56; yy565: YYDEBUG(565, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy566; if (yych != 'e') goto yy56; yy566: YYDEBUG(566, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'C') goto yy567; if (yych != 'c') goto yy56; yy567: YYDEBUG(567, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= 0x1F) { if (yych == '\t') goto yy471; goto yy415; } else { if (yych <= ' ') goto yy471; if (yych <= ',') goto yy415; if (yych >= '.') goto yy471; } } else { if (yych <= 'D') { if (yych <= '/') goto yy415; if (yych <= '9') goto yy473; goto yy415; } else { if (yych <= 'E') goto yy520; if (yych == 'e') goto yy520; goto yy415; } } yy568: YYDEBUG(568, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy472; if (yych <= '0') goto yy569; if (yych <= '2') goto yy570; if (yych <= '3') goto yy571; goto yy472; yy569: YYDEBUG(569, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy474; if (yych <= '9') goto yy572; goto yy474; yy570: YYDEBUG(570, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy474; if (yych <= '9') goto yy572; goto yy474; yy571: YYDEBUG(571, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy474; if (yych <= '1') goto yy572; if (yych <= '9') goto yy480; goto yy474; yy572: YYDEBUG(572, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy474; if (yych <= '9') goto yy481; goto yy474; yy573: YYDEBUG(573, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'V') goto yy574; if (yych != 'v') goto yy56; yy574: YYDEBUG(574, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= 0x1F) { if (yych == '\t') goto yy471; goto yy415; } else { if (yych <= ' ') goto yy471; if (yych <= ',') goto yy415; if (yych <= '-') goto yy568; goto yy471; } } else { if (yych <= 'D') { if (yych <= '/') goto yy415; if (yych <= '9') goto yy473; goto yy415; } else { if (yych <= 'E') goto yy475; if (yych == 'e') goto yy475; goto yy415; } } yy575: YYDEBUG(575, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'T') goto yy576; if (yych != 't') goto yy56; yy576: YYDEBUG(576, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= 0x1F) { if (yych == '\t') goto yy471; goto yy415; } else { if (yych <= ' ') goto yy471; if (yych <= ',') goto yy415; if (yych <= '-') goto yy568; goto yy471; } } else { if (yych <= 'N') { if (yych <= '/') goto yy415; if (yych <= '9') goto yy473; goto yy415; } else { if (yych <= 'O') goto yy485; if (yych == 'o') goto yy485; goto yy415; } } yy577: YYDEBUG(577, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'P') goto yy578; if (yych != 'p') goto yy56; yy578: YYDEBUG(578, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= 0x1F) { if (yych == '\t') goto yy471; goto yy415; } else { if (yych <= ' ') goto yy471; if (yych <= ',') goto yy415; if (yych <= '-') goto yy568; goto yy471; } } else { if (yych <= 'S') { if (yych <= '/') goto yy415; if (yych <= '9') goto yy473; goto yy415; } else { if (yych <= 'T') goto yy579; if (yych != 't') goto yy415; } } yy579: YYDEBUG(579, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= 0x1F) { if (yych == '\t') goto yy471; goto yy415; } else { if (yych <= ' ') goto yy471; if (yych <= ',') goto yy415; if (yych <= '-') goto yy568; goto yy471; } } else { if (yych <= 'D') { if (yych <= '/') goto yy415; if (yych <= '9') goto yy473; goto yy415; } else { if (yych <= 'E') goto yy527; if (yych == 'e') goto yy527; goto yy415; } } yy580: YYDEBUG(580, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'G') goto yy583; if (yych == 'g') goto yy583; goto yy56; yy581: YYDEBUG(581, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy582; if (yych != 'r') goto yy56; yy582: YYDEBUG(582, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= 0x1F) { if (yych == '\t') goto yy471; goto yy415; } else { if (yych <= ' ') goto yy471; if (yych <= ',') goto yy415; if (yych <= '-') goto yy568; goto yy471; } } else { if (yych <= 'H') { if (yych <= '/') goto yy415; if (yych <= '9') goto yy473; goto yy415; } else { if (yych <= 'I') goto yy491; if (yych == 'i') goto yy491; goto yy415; } } yy583: YYDEBUG(583, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= 0x1F) { if (yych == '\t') goto yy471; goto yy415; } else { if (yych <= ' ') goto yy471; if (yych <= ',') goto yy415; if (yych <= '-') goto yy568; goto yy471; } } else { if (yych <= 'T') { if (yych <= '/') goto yy415; if (yych <= '9') goto yy473; goto yy415; } else { if (yych <= 'U') goto yy493; if (yych == 'u') goto yy493; goto yy415; } } yy584: YYDEBUG(584, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'Y') { if (yych == 'R') goto yy585; if (yych <= 'X') goto yy56; goto yy586; } else { if (yych <= 'r') { if (yych <= 'q') goto yy56; } else { if (yych == 'y') goto yy586; goto yy56; } } yy585: YYDEBUG(585, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= 0x1F) { if (yych == '\t') goto yy471; goto yy415; } else { if (yych <= ' ') goto yy471; if (yych <= ',') goto yy415; if (yych <= '-') goto yy568; goto yy471; } } else { if (yych <= 'B') { if (yych <= '/') goto yy415; if (yych <= '9') goto yy473; goto yy415; } else { if (yych <= 'C') goto yy533; if (yych == 'c') goto yy533; goto yy415; } } yy586: YYDEBUG(586, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ',') { if (yych <= '\t') { if (yych <= 0x08) goto yy415; goto yy471; } else { if (yych == ' ') goto yy471; goto yy415; } } else { if (yych <= '.') { if (yych <= '-') goto yy568; goto yy471; } else { if (yych <= '/') goto yy415; if (yych <= '9') goto yy473; goto yy415; } } yy587: YYDEBUG(587, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'B') goto yy588; if (yych != 'b') goto yy56; yy588: YYDEBUG(588, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= 0x1F) { if (yych == '\t') goto yy471; goto yy415; } else { if (yych <= ' ') goto yy471; if (yych <= ',') goto yy415; if (yych <= '-') goto yy568; goto yy471; } } else { if (yych <= 'Q') { if (yych <= '/') goto yy415; if (yych <= '9') goto yy473; goto yy415; } else { if (yych <= 'R') goto yy536; if (yych == 'r') goto yy536; goto yy415; } } yy589: YYDEBUG(589, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'N') { if (yych == 'L') goto yy593; if (yych <= 'M') goto yy56; goto yy592; } else { if (yych <= 'l') { if (yych <= 'k') goto yy56; goto yy593; } else { if (yych == 'n') goto yy592; goto yy56; } } yy590: YYDEBUG(590, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'N') goto yy591; if (yych != 'n') goto yy56; yy591: YYDEBUG(591, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= 0x1F) { if (yych == '\t') goto yy471; goto yy415; } else { if (yych <= ' ') goto yy471; if (yych <= ',') goto yy415; if (yych <= '-') goto yy568; goto yy471; } } else { if (yych <= 'T') { if (yych <= '/') goto yy415; if (yych <= '9') goto yy473; goto yy415; } else { if (yych <= 'U') goto yy498; if (yych == 'u') goto yy498; goto yy415; } } yy592: YYDEBUG(592, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= 0x1F) { if (yych == '\t') goto yy471; goto yy415; } else { if (yych <= ' ') goto yy471; if (yych <= ',') goto yy415; if (yych <= '-') goto yy568; goto yy471; } } else { if (yych <= 'D') { if (yych <= '/') goto yy415; if (yych <= '9') goto yy473; goto yy415; } else { if (yych <= 'E') goto yy479; if (yych == 'e') goto yy479; goto yy415; } } yy593: YYDEBUG(593, *YYCURSOR); yyaccept = 9; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= 0x1F) { if (yych == '\t') goto yy471; goto yy415; } else { if (yych <= ' ') goto yy471; if (yych <= ',') goto yy415; if (yych <= '-') goto yy568; goto yy471; } } else { if (yych <= 'X') { if (yych <= '/') goto yy415; if (yych <= '9') goto yy473; goto yy415; } else { if (yych <= 'Y') goto yy479; if (yych == 'y') goto yy479; goto yy415; } } yy594: YYDEBUG(594, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '2') goto yy595; if (yych <= '3') goto yy597; if (yych <= '9') goto yy598; goto yy56; yy595: YYDEBUG(595, *YYCURSOR); yyaccept = 12; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'n') { if (yych <= '/') goto yy596; if (yych <= '9') goto yy604; if (yych >= 'n') goto yy600; } else { if (yych <= 'r') { if (yych >= 'r') goto yy601; } else { if (yych <= 's') goto yy599; if (yych <= 't') goto yy602; } } yy596: YYDEBUG(596, *YYCURSOR); { int length = 0; DEBUG_OUTPUT("gnudateshort"); TIMELIB_INIT; TIMELIB_HAVE_DATE(); s->time->y = timelib_get_nr_ex((char **) &ptr, 4, &length); s->time->m = timelib_get_nr((char **) &ptr, 2); s->time->d = timelib_get_nr((char **) &ptr, 2); TIMELIB_PROCESS_YEAR(s->time->y, length); TIMELIB_DEINIT; return TIMELIB_ISO_DATE; } yy597: YYDEBUG(597, *YYCURSOR); yyaccept = 12; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'n') { if (yych <= '1') { if (yych <= '/') goto yy596; goto yy604; } else { if (yych <= '9') goto yy543; if (yych <= 'm') goto yy596; goto yy600; } } else { if (yych <= 'r') { if (yych <= 'q') goto yy596; goto yy601; } else { if (yych <= 's') goto yy599; if (yych <= 't') goto yy602; goto yy596; } } yy598: YYDEBUG(598, *YYCURSOR); yyaccept = 12; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'n') { if (yych <= '/') goto yy596; if (yych <= '9') goto yy543; if (yych <= 'm') goto yy596; goto yy600; } else { if (yych <= 'r') { if (yych <= 'q') goto yy596; goto yy601; } else { if (yych <= 's') goto yy599; if (yych <= 't') goto yy602; goto yy596; } } yy599: YYDEBUG(599, *YYCURSOR); yych = *++YYCURSOR; if (yych == 't') goto yy603; goto yy56; yy600: YYDEBUG(600, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'd') goto yy603; goto yy56; yy601: YYDEBUG(601, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'd') goto yy603; goto yy56; yy602: YYDEBUG(602, *YYCURSOR); yych = *++YYCURSOR; if (yych != 'h') goto yy56; yy603: YYDEBUG(603, *YYCURSOR); yych = *++YYCURSOR; goto yy596; yy604: YYDEBUG(604, *YYCURSOR); yyaccept = 12; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'n') { if (yych <= '/') goto yy596; if (yych <= '9') goto yy544; if (yych <= 'm') goto yy596; goto yy600; } else { if (yych <= 'r') { if (yych <= 'q') goto yy596; goto yy601; } else { if (yych <= 's') goto yy599; if (yych <= 't') goto yy602; goto yy596; } } yy605: YYDEBUG(605, *YYCURSOR); yyaccept = 13; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'n') { if (yych <= '/') { if (yych >= '/') goto yy662; } else { if (yych <= '9') goto yy608; if (yych >= 'n') goto yy659; } } else { if (yych <= 'r') { if (yych >= 'r') goto yy660; } else { if (yych <= 's') goto yy658; if (yych <= 't') goto yy661; } } yy606: YYDEBUG(606, *YYCURSOR); { int length = 0; DEBUG_OUTPUT("americanshort | american"); TIMELIB_INIT; TIMELIB_HAVE_DATE(); s->time->m = timelib_get_nr((char **) &ptr, 2); s->time->d = timelib_get_nr((char **) &ptr, 2); if (*ptr == '/') { s->time->y = timelib_get_nr_ex((char **) &ptr, 4, &length); TIMELIB_PROCESS_YEAR(s->time->y, length); } TIMELIB_DEINIT; return TIMELIB_AMERICAN; } yy607: YYDEBUG(607, *YYCURSOR); yyaccept = 13; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'n') { if (yych <= '/') { if (yych <= '.') goto yy606; goto yy662; } else { if (yych <= '1') goto yy608; if (yych <= 'm') goto yy606; goto yy659; } } else { if (yych <= 'r') { if (yych <= 'q') goto yy606; goto yy660; } else { if (yych <= 's') goto yy658; if (yych <= 't') goto yy661; goto yy606; } } yy608: YYDEBUG(608, *YYCURSOR); yyaccept = 13; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'n') { if (yych == '/') goto yy662; if (yych <= 'm') goto yy606; goto yy659; } else { if (yych <= 'r') { if (yych <= 'q') goto yy606; goto yy660; } else { if (yych <= 's') goto yy658; if (yych <= 't') goto yy661; goto yy606; } } yy609: YYDEBUG(609, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych == 'A') goto yy657; if (yych <= 'T') goto yy56; goto yy656; } else { if (yych <= 'a') { if (yych <= '`') goto yy56; goto yy657; } else { if (yych == 'u') goto yy656; goto yy56; } } yy610: YYDEBUG(610, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy655; if (yych == 'e') goto yy655; goto yy56; yy611: YYDEBUG(611, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy654; if (yych == 'a') goto yy654; goto yy56; yy612: YYDEBUG(612, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych == 'P') goto yy653; if (yych <= 'T') goto yy56; goto yy652; } else { if (yych <= 'p') { if (yych <= 'o') goto yy56; goto yy653; } else { if (yych == 'u') goto yy652; goto yy56; } } yy613: YYDEBUG(613, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy650; if (yych == 'e') goto yy650; goto yy56; yy614: YYDEBUG(614, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'C') goto yy649; if (yych == 'c') goto yy649; goto yy56; yy615: YYDEBUG(615, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'O') goto yy648; if (yych == 'o') goto yy648; goto yy56; yy616: YYDEBUG(616, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy617; if (yych != 'e') goto yy56; yy617: YYDEBUG(617, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'C') goto yy618; if (yych != 'c') goto yy56; yy618: YYDEBUG(618, *YYCURSOR); yych = *++YYCURSOR; if (yych != '/') goto yy56; yy619: YYDEBUG(619, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= ':') goto yy56; YYDEBUG(620, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= ':') goto yy56; YYDEBUG(621, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= ':') goto yy56; YYDEBUG(622, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= ':') goto yy56; YYDEBUG(623, *YYCURSOR); yych = *++YYCURSOR; if (yych != ':') goto yy56; YYDEBUG(624, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '1') goto yy625; if (yych <= '2') goto yy626; goto yy56; yy625: YYDEBUG(625, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '9') goto yy627; goto yy56; yy626: YYDEBUG(626, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= '5') goto yy56; yy627: YYDEBUG(627, *YYCURSOR); yych = *++YYCURSOR; if (yych != ':') goto yy56; YYDEBUG(628, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= '6') goto yy56; YYDEBUG(629, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= ':') goto yy56; YYDEBUG(630, *YYCURSOR); yych = *++YYCURSOR; if (yych != ':') goto yy56; YYDEBUG(631, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '5') goto yy632; if (yych <= '6') goto yy633; goto yy56; yy632: YYDEBUG(632, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '9') goto yy634; goto yy56; yy633: YYDEBUG(633, *YYCURSOR); yych = *++YYCURSOR; if (yych != '0') goto yy56; yy634: YYDEBUG(634, *YYCURSOR); yych = *++YYCURSOR; if (yych == '\t') goto yy635; if (yych != ' ') goto yy56; yy635: YYDEBUG(635, *YYCURSOR); ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 9) YYFILL(9); yych = *YYCURSOR; YYDEBUG(636, *YYCURSOR); if (yych <= '*') { if (yych <= '\t') { if (yych <= 0x08) goto yy56; goto yy635; } else { if (yych == ' ') goto yy635; goto yy56; } } else { if (yych <= '-') { if (yych == ',') goto yy56; goto yy638; } else { if (yych != 'G') goto yy56; } } YYDEBUG(637, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'M') goto yy646; goto yy56; yy638: YYDEBUG(638, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '1') goto yy639; if (yych <= '2') goto yy641; if (yych <= '9') goto yy642; goto yy56; yy639: YYDEBUG(639, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '/') goto yy640; if (yych <= '9') goto yy642; if (yych <= ':') goto yy643; yy640: YYDEBUG(640, *YYCURSOR); { int tz_not_found; DEBUG_OUTPUT("clf"); TIMELIB_INIT; TIMELIB_HAVE_TIME(); TIMELIB_HAVE_DATE(); s->time->d = timelib_get_nr((char **) &ptr, 2); s->time->m = timelib_get_month((char **) &ptr); s->time->y = timelib_get_nr((char **) &ptr, 4); s->time->h = timelib_get_nr((char **) &ptr, 2); s->time->i = timelib_get_nr((char **) &ptr, 2); s->time->s = timelib_get_nr((char **) &ptr, 2); s->time->z = timelib_parse_zone((char **) &ptr, &s->time->dst, s->time, &tz_not_found, s->tzdb, tz_get_wrapper); if (tz_not_found) { add_error(s, "The timezone could not be found in the database"); } TIMELIB_DEINIT; return TIMELIB_CLF; } yy641: YYDEBUG(641, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '5') { if (yych <= '/') goto yy640; if (yych >= '5') goto yy644; } else { if (yych <= '9') goto yy645; if (yych <= ':') goto yy643; goto yy640; } yy642: YYDEBUG(642, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy640; if (yych <= '5') goto yy644; if (yych <= '9') goto yy645; if (yych >= ';') goto yy640; yy643: YYDEBUG(643, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy640; if (yych <= '5') goto yy644; if (yych <= '9') goto yy645; goto yy640; yy644: YYDEBUG(644, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy640; if (yych >= ':') goto yy640; yy645: YYDEBUG(645, *YYCURSOR); yych = *++YYCURSOR; goto yy640; yy646: YYDEBUG(646, *YYCURSOR); yych = *++YYCURSOR; if (yych != 'T') goto yy56; YYDEBUG(647, *YYCURSOR); yych = *++YYCURSOR; if (yych == '+') goto yy638; if (yych == '-') goto yy638; goto yy56; yy648: YYDEBUG(648, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'V') goto yy618; if (yych == 'v') goto yy618; goto yy56; yy649: YYDEBUG(649, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'T') goto yy618; if (yych == 't') goto yy618; goto yy56; yy650: YYDEBUG(650, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'P') goto yy651; if (yych != 'p') goto yy56; yy651: YYDEBUG(651, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'S') { if (yych == '/') goto yy619; goto yy56; } else { if (yych <= 'T') goto yy618; if (yych == 't') goto yy618; goto yy56; } yy652: YYDEBUG(652, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'G') goto yy618; if (yych == 'g') goto yy618; goto yy56; yy653: YYDEBUG(653, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy618; if (yych == 'r') goto yy618; goto yy56; yy654: YYDEBUG(654, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'Y') { if (yych == 'R') goto yy618; if (yych <= 'X') goto yy56; goto yy618; } else { if (yych <= 'r') { if (yych <= 'q') goto yy56; goto yy618; } else { if (yych == 'y') goto yy618; goto yy56; } } yy655: YYDEBUG(655, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'B') goto yy618; if (yych == 'b') goto yy618; goto yy56; yy656: YYDEBUG(656, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'N') { if (yych == 'L') goto yy618; if (yych <= 'M') goto yy56; goto yy618; } else { if (yych <= 'l') { if (yych <= 'k') goto yy56; goto yy618; } else { if (yych == 'n') goto yy618; goto yy56; } } yy657: YYDEBUG(657, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'N') goto yy618; if (yych == 'n') goto yy618; goto yy56; yy658: YYDEBUG(658, *YYCURSOR); yych = *++YYCURSOR; if (yych == 't') goto yy667; goto yy56; yy659: YYDEBUG(659, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'd') goto yy667; goto yy56; yy660: YYDEBUG(660, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'd') goto yy667; goto yy56; yy661: YYDEBUG(661, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'h') goto yy667; goto yy56; yy662: YYDEBUG(662, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= ':') goto yy56; YYDEBUG(663, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy606; if (yych >= ':') goto yy606; YYDEBUG(664, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy606; if (yych >= ':') goto yy606; YYDEBUG(665, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy606; if (yych >= ':') goto yy606; YYDEBUG(666, *YYCURSOR); yych = *++YYCURSOR; goto yy606; yy667: YYDEBUG(667, *YYCURSOR); yyaccept = 13; yych = *(YYMARKER = ++YYCURSOR); if (yych == '/') goto yy662; goto yy606; yy668: YYDEBUG(668, *YYCURSOR); yych = *++YYCURSOR; if (yych <= ',') { if (yych == '\t') goto yy670; goto yy517; } else { if (yych <= '-') goto yy671; if (yych <= '.') goto yy670; if (yych >= '0') goto yy517; } yy669: YYDEBUG(669, *YYCURSOR); yych = *++YYCURSOR; switch (yych) { case 'A': case 'a': goto yy612; case 'D': case 'd': goto yy616; case 'F': case 'f': goto yy610; case 'J': case 'j': goto yy609; case 'M': case 'm': goto yy611; case 'N': case 'n': goto yy615; case 'O': case 'o': goto yy614; case 'S': case 's': goto yy613; default: goto yy56; } yy670: YYDEBUG(670, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy517; if (yych <= '0') goto yy675; if (yych <= '1') goto yy676; if (yych <= '9') goto yy677; goto yy517; yy671: YYDEBUG(671, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy517; if (yych <= '0') goto yy672; if (yych <= '1') goto yy673; if (yych <= '9') goto yy674; goto yy517; yy672: YYDEBUG(672, *YYCURSOR); yych = *++YYCURSOR; if (yych <= ',') goto yy56; if (yych <= '.') goto yy541; if (yych <= '/') goto yy56; if (yych <= '9') goto yy674; goto yy56; yy673: YYDEBUG(673, *YYCURSOR); yych = *++YYCURSOR; if (yych <= ',') goto yy56; if (yych <= '.') goto yy541; if (yych <= '/') goto yy56; if (yych >= '3') goto yy56; yy674: YYDEBUG(674, *YYCURSOR); yych = *++YYCURSOR; if (yych <= ',') goto yy56; if (yych <= '.') goto yy541; goto yy56; yy675: YYDEBUG(675, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '.') { if (yych <= ',') goto yy56; if (yych <= '-') goto yy541; goto yy678; } else { if (yych <= '/') goto yy56; if (yych <= '9') goto yy677; goto yy56; } yy676: YYDEBUG(676, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '.') { if (yych <= ',') goto yy56; if (yych <= '-') goto yy541; goto yy678; } else { if (yych <= '/') goto yy56; if (yych >= '3') goto yy56; } yy677: YYDEBUG(677, *YYCURSOR); yych = *++YYCURSOR; if (yych <= ',') goto yy56; if (yych <= '-') goto yy541; if (yych >= '/') goto yy56; yy678: YYDEBUG(678, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= ':') goto yy56; YYDEBUG(679, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '9') goto yy550; goto yy56; yy680: YYDEBUG(680, *YYCURSOR); yych = *++YYCURSOR; if (yych == '-') goto yy724; if (yych <= '/') goto yy60; if (yych <= '9') goto yy722; goto yy60; yy681: YYDEBUG(681, *YYCURSOR); yych = *++YYCURSOR; switch (yych) { case '0': goto yy690; case '1': goto yy691; case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy692; case 'A': case 'a': goto yy685; case 'D': case 'd': goto yy689; case 'F': case 'f': goto yy683; case 'J': case 'j': goto yy682; case 'M': case 'm': goto yy684; case 'N': case 'n': goto yy688; case 'O': case 'o': goto yy687; case 'S': case 's': goto yy686; default: goto yy56; } yy682: YYDEBUG(682, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych == 'A') goto yy721; if (yych <= 'T') goto yy56; goto yy720; } else { if (yych <= 'a') { if (yych <= '`') goto yy56; goto yy721; } else { if (yych == 'u') goto yy720; goto yy56; } } yy683: YYDEBUG(683, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy719; if (yych == 'e') goto yy719; goto yy56; yy684: YYDEBUG(684, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy718; if (yych == 'a') goto yy718; goto yy56; yy685: YYDEBUG(685, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych == 'P') goto yy717; if (yych <= 'T') goto yy56; goto yy716; } else { if (yych <= 'p') { if (yych <= 'o') goto yy56; goto yy717; } else { if (yych == 'u') goto yy716; goto yy56; } } yy686: YYDEBUG(686, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy714; if (yych == 'e') goto yy714; goto yy56; yy687: YYDEBUG(687, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'C') goto yy713; if (yych == 'c') goto yy713; goto yy56; yy688: YYDEBUG(688, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'O') goto yy712; if (yych == 'o') goto yy712; goto yy56; yy689: YYDEBUG(689, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy704; if (yych == 'e') goto yy704; goto yy56; yy690: YYDEBUG(690, *YYCURSOR); yych = *++YYCURSOR; if (yych == '-') goto yy693; if (yych <= '/') goto yy56; if (yych <= '9') goto yy697; goto yy56; yy691: YYDEBUG(691, *YYCURSOR); yych = *++YYCURSOR; if (yych == '-') goto yy693; if (yych <= '/') goto yy56; if (yych <= '2') goto yy697; goto yy56; yy692: YYDEBUG(692, *YYCURSOR); yych = *++YYCURSOR; if (yych != '-') goto yy56; yy693: YYDEBUG(693, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '2') goto yy694; if (yych <= '3') goto yy695; if (yych <= '9') goto yy696; goto yy56; yy694: YYDEBUG(694, *YYCURSOR); yyaccept = 12; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'n') { if (yych <= '/') goto yy596; if (yych <= '9') goto yy696; if (yych <= 'm') goto yy596; goto yy600; } else { if (yych <= 'r') { if (yych <= 'q') goto yy596; goto yy601; } else { if (yych <= 's') goto yy599; if (yych <= 't') goto yy602; goto yy596; } } yy695: YYDEBUG(695, *YYCURSOR); yyaccept = 12; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'n') { if (yych <= '/') goto yy596; if (yych <= '1') goto yy696; if (yych <= 'm') goto yy596; goto yy600; } else { if (yych <= 'r') { if (yych <= 'q') goto yy596; goto yy601; } else { if (yych <= 's') goto yy599; if (yych <= 't') goto yy602; goto yy596; } } yy696: YYDEBUG(696, *YYCURSOR); yyaccept = 12; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'q') { if (yych == 'n') goto yy600; goto yy596; } else { if (yych <= 'r') goto yy601; if (yych <= 's') goto yy599; if (yych <= 't') goto yy602; goto yy596; } yy697: YYDEBUG(697, *YYCURSOR); yych = *++YYCURSOR; if (yych != '-') goto yy56; YYDEBUG(698, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '2') { if (yych <= '/') goto yy56; if (yych >= '1') goto yy700; } else { if (yych <= '3') goto yy701; if (yych <= '9') goto yy696; goto yy56; } YYDEBUG(699, *YYCURSOR); yyaccept = 12; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'n') { if (yych <= '/') goto yy596; if (yych <= '9') goto yy702; if (yych <= 'm') goto yy596; goto yy600; } else { if (yych <= 'r') { if (yych <= 'q') goto yy596; goto yy601; } else { if (yych <= 's') goto yy599; if (yych <= 't') goto yy602; goto yy596; } } yy700: YYDEBUG(700, *YYCURSOR); yyaccept = 12; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'n') { if (yych <= '/') goto yy596; if (yych <= '9') goto yy702; if (yych <= 'm') goto yy596; goto yy600; } else { if (yych <= 'r') { if (yych <= 'q') goto yy596; goto yy601; } else { if (yych <= 's') goto yy599; if (yych <= 't') goto yy602; goto yy596; } } yy701: YYDEBUG(701, *YYCURSOR); yyaccept = 12; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'n') { if (yych <= '/') goto yy596; if (yych <= '1') goto yy702; if (yych <= 'm') goto yy596; goto yy600; } else { if (yych <= 'r') { if (yych <= 'q') goto yy596; goto yy601; } else { if (yych <= 's') goto yy599; if (yych <= 't') goto yy602; goto yy596; } } yy702: YYDEBUG(702, *YYCURSOR); yyaccept = 14; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'q') { if (yych == 'n') goto yy600; } else { if (yych <= 'r') goto yy601; if (yych <= 's') goto yy599; if (yych <= 't') goto yy602; } yy703: YYDEBUG(703, *YYCURSOR); { int length = 0; DEBUG_OUTPUT("iso8601date2"); TIMELIB_INIT; TIMELIB_HAVE_DATE(); s->time->y = timelib_get_nr_ex((char **) &ptr, 4, &length); s->time->m = timelib_get_nr((char **) &ptr, 2); s->time->d = timelib_get_nr((char **) &ptr, 2); TIMELIB_PROCESS_YEAR(s->time->y, length); TIMELIB_DEINIT; return TIMELIB_ISO_DATE; } yy704: YYDEBUG(704, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'C') goto yy705; if (yych != 'c') goto yy56; yy705: YYDEBUG(705, *YYCURSOR); yych = *++YYCURSOR; if (yych != '-') goto yy56; yy706: YYDEBUG(706, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '0') goto yy707; if (yych <= '2') goto yy708; if (yych <= '3') goto yy709; goto yy56; yy707: YYDEBUG(707, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '9') goto yy710; goto yy56; yy708: YYDEBUG(708, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '9') goto yy710; goto yy56; yy709: YYDEBUG(709, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= '2') goto yy56; yy710: YYDEBUG(710, *YYCURSOR); ++YYCURSOR; YYDEBUG(711, *YYCURSOR); { int length = 0; DEBUG_OUTPUT("pgtextreverse"); TIMELIB_INIT; TIMELIB_HAVE_DATE(); s->time->y = timelib_get_nr_ex((char **) &ptr, 4, &length); s->time->m = timelib_get_month((char **) &ptr); s->time->d = timelib_get_nr((char **) &ptr, 2); TIMELIB_PROCESS_YEAR(s->time->y, length); TIMELIB_DEINIT; return TIMELIB_PG_TEXT; } yy712: YYDEBUG(712, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'V') goto yy705; if (yych == 'v') goto yy705; goto yy56; yy713: YYDEBUG(713, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'T') goto yy705; if (yych == 't') goto yy705; goto yy56; yy714: YYDEBUG(714, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'P') goto yy715; if (yych != 'p') goto yy56; yy715: YYDEBUG(715, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'S') { if (yych == '-') goto yy706; goto yy56; } else { if (yych <= 'T') goto yy705; if (yych == 't') goto yy705; goto yy56; } yy716: YYDEBUG(716, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'G') goto yy705; if (yych == 'g') goto yy705; goto yy56; yy717: YYDEBUG(717, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy705; if (yych == 'r') goto yy705; goto yy56; yy718: YYDEBUG(718, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'Y') { if (yych == 'R') goto yy705; if (yych <= 'X') goto yy56; goto yy705; } else { if (yych <= 'r') { if (yych <= 'q') goto yy56; goto yy705; } else { if (yych == 'y') goto yy705; goto yy56; } } yy719: YYDEBUG(719, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'B') goto yy705; if (yych == 'b') goto yy705; goto yy56; yy720: YYDEBUG(720, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'N') { if (yych == 'L') goto yy705; if (yych <= 'M') goto yy56; goto yy705; } else { if (yych <= 'l') { if (yych <= 'k') goto yy56; goto yy705; } else { if (yych == 'n') goto yy705; goto yy56; } } yy721: YYDEBUG(721, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'N') goto yy705; if (yych == 'n') goto yy705; goto yy56; yy722: YYDEBUG(722, *YYCURSOR); yyaccept = 15; yych = *(YYMARKER = ++YYCURSOR); switch (yych) { case '\t': case ' ': case 'A': case 'D': case 'F': case 'H': case 'I': case 'J': case 'M': case 'N': case 'O': case 'S': case 'T': case 'V': case 'X': case 'Y': case 'a': case 'd': case 'f': case 'h': case 'j': case 'm': case 'n': case 'o': case 's': case 't': case 'w': case 'y': goto yy730; case '-': goto yy727; case '.': goto yy731; case '/': goto yy728; case '0': goto yy744; case '1': goto yy745; case '2': goto yy747; case '3': goto yy748; case '4': case '5': case '6': case '7': case '8': case '9': goto yy54; case ':': goto yy746; case 'W': goto yy749; default: goto yy723; } yy723: YYDEBUG(723, *YYCURSOR); { DEBUG_OUTPUT("year4"); TIMELIB_INIT; s->time->y = timelib_get_nr((char **) &ptr, 4); TIMELIB_DEINIT; return TIMELIB_CLF; } yy724: YYDEBUG(724, *YYCURSOR); yych = *++YYCURSOR; switch (yych) { case '0': goto yy725; case '1': goto yy726; case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy692; case 'A': case 'a': goto yy685; case 'D': case 'd': goto yy689; case 'F': case 'f': goto yy683; case 'J': case 'j': goto yy682; case 'M': case 'm': goto yy684; case 'N': case 'n': goto yy688; case 'O': case 'o': goto yy687; case 'S': case 's': goto yy686; default: goto yy56; } yy725: YYDEBUG(725, *YYCURSOR); yych = *++YYCURSOR; if (yych == '-') goto yy693; if (yych <= '/') goto yy56; if (yych <= '9') goto yy692; goto yy56; yy726: YYDEBUG(726, *YYCURSOR); yych = *++YYCURSOR; if (yych == '-') goto yy693; if (yych <= '/') goto yy56; if (yych <= '2') goto yy692; goto yy56; yy727: YYDEBUG(727, *YYCURSOR); yych = *++YYCURSOR; switch (yych) { case '0': goto yy912; case '1': goto yy914; case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy915; case 'A': case 'a': goto yy906; case 'D': case 'd': goto yy910; case 'F': case 'f': goto yy904; case 'J': case 'j': goto yy903; case 'M': case 'm': goto yy905; case 'N': case 'n': goto yy909; case 'O': case 'o': goto yy908; case 'S': case 's': goto yy907; case 'W': goto yy911; default: goto yy878; } yy728: YYDEBUG(728, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '0') goto yy886; if (yych <= '1') goto yy887; if (yych <= '9') goto yy888; goto yy56; yy729: YYDEBUG(729, *YYCURSOR); ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 11) YYFILL(11); yych = *YYCURSOR; yy730: YYDEBUG(730, *YYCURSOR); switch (yych) { case '\t': case ' ': goto yy729; case '-': case '.': goto yy877; case 'A': case 'a': goto yy739; case 'D': case 'd': goto yy743; case 'F': case 'f': goto yy737; case 'H': case 'h': goto yy63; case 'I': goto yy732; case 'J': case 'j': goto yy736; case 'M': case 'm': goto yy738; case 'N': case 'n': goto yy742; case 'O': case 'o': goto yy741; case 'S': case 's': goto yy740; case 'T': case 't': goto yy68; case 'V': goto yy734; case 'W': case 'w': goto yy67; case 'X': goto yy735; case 'Y': case 'y': goto yy66; default: goto yy56; } yy731: YYDEBUG(731, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy878; if (yych <= '0') goto yy870; if (yych <= '2') goto yy871; if (yych <= '3') goto yy872; goto yy878; yy732: YYDEBUG(732, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= 'U') { if (yych == 'I') goto yy869; } else { if (yych == 'W') goto yy733; if (yych <= 'X') goto yy823; } yy733: YYDEBUG(733, *YYCURSOR); { int length = 0; DEBUG_OUTPUT("datenodayrev"); TIMELIB_INIT; TIMELIB_HAVE_DATE(); s->time->y = timelib_get_nr_ex((char **) &ptr, 4, &length); s->time->m = timelib_get_month((char **) &ptr); s->time->d = 1; TIMELIB_PROCESS_YEAR(s->time->y, length); TIMELIB_DEINIT; return TIMELIB_DATE_NO_DAY; } yy734: YYDEBUG(734, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'I') goto yy867; goto yy733; yy735: YYDEBUG(735, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'I') goto yy866; goto yy733; yy736: YYDEBUG(736, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych == 'A') goto yy859; if (yych <= 'T') goto yy56; goto yy858; } else { if (yych <= 'a') { if (yych <= '`') goto yy56; goto yy859; } else { if (yych == 'u') goto yy858; goto yy56; } } yy737: YYDEBUG(737, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'R') { if (yych <= 'N') { if (yych == 'E') goto yy852; goto yy56; } else { if (yych <= 'O') goto yy98; if (yych <= 'Q') goto yy56; goto yy97; } } else { if (yych <= 'n') { if (yych == 'e') goto yy852; goto yy56; } else { if (yych <= 'o') goto yy98; if (yych == 'r') goto yy97; goto yy56; } } yy738: YYDEBUG(738, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'O') { if (yych <= 'H') { if (yych == 'A') goto yy849; goto yy56; } else { if (yych <= 'I') goto yy117; if (yych <= 'N') goto yy56; goto yy116; } } else { if (yych <= 'h') { if (yych == 'a') goto yy849; goto yy56; } else { if (yych <= 'i') goto yy117; if (yych == 'o') goto yy116; goto yy56; } } yy739: YYDEBUG(739, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych == 'P') goto yy843; if (yych <= 'T') goto yy56; goto yy842; } else { if (yych <= 'p') { if (yych <= 'o') goto yy56; goto yy843; } else { if (yych == 'u') goto yy842; goto yy56; } } yy740: YYDEBUG(740, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych <= 'D') { if (yych == 'A') goto yy126; goto yy56; } else { if (yych <= 'E') goto yy835; if (yych <= 'T') goto yy56; goto yy125; } } else { if (yych <= 'd') { if (yych == 'a') goto yy126; goto yy56; } else { if (yych <= 'e') goto yy835; if (yych == 'u') goto yy125; goto yy56; } } yy741: YYDEBUG(741, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'C') goto yy830; if (yych == 'c') goto yy830; goto yy56; yy742: YYDEBUG(742, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'O') goto yy824; if (yych == 'o') goto yy824; goto yy56; yy743: YYDEBUG(743, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'E') { if (yych == 'A') goto yy113; if (yych <= 'D') goto yy56; goto yy817; } else { if (yych <= 'a') { if (yych <= '`') goto yy56; goto yy113; } else { if (yych == 'e') goto yy817; goto yy56; } } yy744: YYDEBUG(744, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy60; if (yych <= '0') goto yy814; if (yych <= '9') goto yy815; goto yy60; yy745: YYDEBUG(745, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy60; if (yych <= '2') goto yy783; if (yych <= '9') goto yy762; goto yy60; yy746: YYDEBUG(746, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '0') goto yy763; if (yych <= '1') goto yy764; goto yy56; yy747: YYDEBUG(747, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy60; if (yych <= '9') goto yy762; goto yy60; yy748: YYDEBUG(748, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy60; if (yych <= '5') goto yy758; if (yych <= '6') goto yy759; if (yych <= '9') goto yy54; goto yy60; yy749: YYDEBUG(749, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '5') { if (yych <= '/') goto yy56; if (yych <= '0') goto yy750; if (yych <= '4') goto yy751; goto yy752; } else { if (yych <= 'E') { if (yych <= 'D') goto yy56; goto yy82; } else { if (yych == 'e') goto yy82; goto yy56; } } yy750: YYDEBUG(750, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '0') goto yy56; if (yych <= '9') goto yy753; goto yy56; yy751: YYDEBUG(751, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '9') goto yy753; goto yy56; yy752: YYDEBUG(752, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= '4') goto yy56; yy753: YYDEBUG(753, *YYCURSOR); yyaccept = 16; yych = *(YYMARKER = ++YYCURSOR); if (yych == '-') goto yy755; if (yych <= '/') goto yy754; if (yych <= '7') goto yy756; yy754: YYDEBUG(754, *YYCURSOR); { timelib_sll w, d; DEBUG_OUTPUT("isoweek"); TIMELIB_INIT; TIMELIB_HAVE_DATE(); TIMELIB_HAVE_RELATIVE(); s->time->y = timelib_get_nr((char **) &ptr, 4); w = timelib_get_nr((char **) &ptr, 2); d = 1; s->time->m = 1; s->time->d = 1; s->time->relative.d = timelib_daynr_from_weeknr(s->time->y, w, d); TIMELIB_DEINIT; return TIMELIB_ISO_WEEK; } yy755: YYDEBUG(755, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= '8') goto yy56; yy756: YYDEBUG(756, *YYCURSOR); ++YYCURSOR; YYDEBUG(757, *YYCURSOR); { timelib_sll w, d; DEBUG_OUTPUT("isoweekday"); TIMELIB_INIT; TIMELIB_HAVE_DATE(); TIMELIB_HAVE_RELATIVE(); s->time->y = timelib_get_nr((char **) &ptr, 4); w = timelib_get_nr((char **) &ptr, 2); d = timelib_get_nr((char **) &ptr, 1); s->time->m = 1; s->time->d = 1; s->time->relative.d = timelib_daynr_from_weeknr(s->time->y, w, d); TIMELIB_DEINIT; return TIMELIB_ISO_WEEK; } yy758: YYDEBUG(758, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy60; if (yych <= '9') goto yy760; goto yy60; yy759: YYDEBUG(759, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy60; if (yych <= '6') goto yy760; if (yych <= '9') goto yy54; goto yy60; yy760: YYDEBUG(760, *YYCURSOR); yyaccept = 17; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 2) { goto yy54; } if (yych <= 'W') { if (yych <= 'F') { if (yych <= ' ') { if (yych == '\t') goto yy60; if (yych >= ' ') goto yy60; } else { if (yych == 'D') goto yy60; if (yych >= 'F') goto yy60; } } else { if (yych <= 'M') { if (yych == 'H') goto yy60; if (yych >= 'M') goto yy60; } else { if (yych <= 'R') goto yy761; if (yych <= 'T') goto yy60; if (yych >= 'W') goto yy60; } } } else { if (yych <= 'h') { if (yych <= 'd') { if (yych == 'Y') goto yy60; if (yych >= 'd') goto yy60; } else { if (yych == 'f') goto yy60; if (yych >= 'h') goto yy60; } } else { if (yych <= 't') { if (yych == 'm') goto yy60; if (yych >= 's') goto yy60; } else { if (yych <= 'w') { if (yych >= 'w') goto yy60; } else { if (yych == 'y') goto yy60; } } } } yy761: YYDEBUG(761, *YYCURSOR); { int length = 0; DEBUG_OUTPUT("pgydotd"); TIMELIB_INIT; TIMELIB_HAVE_DATE(); s->time->y = timelib_get_nr_ex((char **) &ptr, 4, &length); s->time->d = timelib_get_nr((char **) &ptr, 3); s->time->m = 1; TIMELIB_PROCESS_YEAR(s->time->y, length); TIMELIB_DEINIT; return TIMELIB_PG_YEARDAY; } yy762: YYDEBUG(762, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy60; if (yych <= '9') goto yy760; goto yy60; yy763: YYDEBUG(763, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '9') goto yy765; goto yy56; yy764: YYDEBUG(764, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= '3') goto yy56; yy765: YYDEBUG(765, *YYCURSOR); yych = *++YYCURSOR; if (yych != ':') goto yy56; YYDEBUG(766, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '0') goto yy767; if (yych <= '2') goto yy768; if (yych <= '3') goto yy769; goto yy56; yy767: YYDEBUG(767, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '9') goto yy770; goto yy56; yy768: YYDEBUG(768, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '9') goto yy770; goto yy56; yy769: YYDEBUG(769, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= '2') goto yy56; yy770: YYDEBUG(770, *YYCURSOR); yych = *++YYCURSOR; if (yych != ' ') goto yy56; YYDEBUG(771, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '1') goto yy772; if (yych <= '2') goto yy773; goto yy56; yy772: YYDEBUG(772, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '9') goto yy774; goto yy56; yy773: YYDEBUG(773, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= '5') goto yy56; yy774: YYDEBUG(774, *YYCURSOR); yych = *++YYCURSOR; if (yych != ':') goto yy56; YYDEBUG(775, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= '6') goto yy56; YYDEBUG(776, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= ':') goto yy56; YYDEBUG(777, *YYCURSOR); yych = *++YYCURSOR; if (yych != ':') goto yy56; YYDEBUG(778, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '5') goto yy779; if (yych <= '6') goto yy780; goto yy56; yy779: YYDEBUG(779, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '9') goto yy781; goto yy56; yy780: YYDEBUG(780, *YYCURSOR); yych = *++YYCURSOR; if (yych != '0') goto yy56; yy781: YYDEBUG(781, *YYCURSOR); ++YYCURSOR; yy782: YYDEBUG(782, *YYCURSOR); { int tz_not_found; DEBUG_OUTPUT("xmlrpc | xmlrpcnocolon | soap | wddx | exif"); TIMELIB_INIT; TIMELIB_HAVE_TIME(); TIMELIB_HAVE_DATE(); s->time->y = timelib_get_nr((char **) &ptr, 4); s->time->m = timelib_get_nr((char **) &ptr, 2); s->time->d = timelib_get_nr((char **) &ptr, 2); s->time->h = timelib_get_nr((char **) &ptr, 2); s->time->i = timelib_get_nr((char **) &ptr, 2); s->time->s = timelib_get_nr((char **) &ptr, 2); if (*ptr == '.') { s->time->f = timelib_get_frac_nr((char **) &ptr, 9); if (*ptr) { /* timezone is optional */ s->time->z = timelib_parse_zone((char **) &ptr, &s->time->dst, s->time, &tz_not_found, s->tzdb, tz_get_wrapper); if (tz_not_found) { add_error(s, "The timezone could not be found in the database"); } } } TIMELIB_DEINIT; return TIMELIB_XMLRPC_SOAP; } yy783: YYDEBUG(783, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '2') { if (yych <= '/') goto yy60; if (yych >= '1') goto yy785; } else { if (yych <= '3') goto yy786; if (yych <= '9') goto yy760; goto yy60; } yy784: YYDEBUG(784, *YYCURSOR); yyaccept = 17; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'V') { if (yych <= 'D') { if (yych <= ' ') { if (yych == '\t') goto yy60; if (yych <= 0x1F) goto yy761; goto yy60; } else { if (yych <= '/') goto yy761; if (yych <= '9') goto yy787; if (yych <= 'C') goto yy761; goto yy60; } } else { if (yych <= 'H') { if (yych == 'F') goto yy60; if (yych <= 'G') goto yy761; goto yy60; } else { if (yych <= 'M') { if (yych <= 'L') goto yy761; goto yy60; } else { if (yych <= 'R') goto yy761; if (yych <= 'T') goto yy60; goto yy761; } } } } else { if (yych <= 'h') { if (yych <= 'c') { if (yych == 'X') goto yy761; if (yych <= 'Y') goto yy60; goto yy761; } else { if (yych <= 'e') { if (yych <= 'd') goto yy60; goto yy761; } else { if (yych == 'g') goto yy761; goto yy60; } } } else { if (yych <= 't') { if (yych == 'm') goto yy60; if (yych <= 'r') goto yy761; goto yy60; } else { if (yych <= 'w') { if (yych <= 'v') goto yy761; goto yy60; } else { if (yych == 'y') goto yy60; goto yy761; } } } } yy785: YYDEBUG(785, *YYCURSOR); yyaccept = 17; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'V') { if (yych <= 'D') { if (yych <= ' ') { if (yych == '\t') goto yy60; if (yych <= 0x1F) goto yy761; goto yy60; } else { if (yych <= '/') goto yy761; if (yych <= '9') goto yy787; if (yych <= 'C') goto yy761; goto yy60; } } else { if (yych <= 'H') { if (yych == 'F') goto yy60; if (yych <= 'G') goto yy761; goto yy60; } else { if (yych <= 'M') { if (yych <= 'L') goto yy761; goto yy60; } else { if (yych <= 'R') goto yy761; if (yych <= 'T') goto yy60; goto yy761; } } } } else { if (yych <= 'h') { if (yych <= 'c') { if (yych == 'X') goto yy761; if (yych <= 'Y') goto yy60; goto yy761; } else { if (yych <= 'e') { if (yych <= 'd') goto yy60; goto yy761; } else { if (yych == 'g') goto yy761; goto yy60; } } } else { if (yych <= 't') { if (yych == 'm') goto yy60; if (yych <= 'r') goto yy761; goto yy60; } else { if (yych <= 'w') { if (yych <= 'v') goto yy761; goto yy60; } else { if (yych == 'y') goto yy60; goto yy761; } } } } yy786: YYDEBUG(786, *YYCURSOR); yyaccept = 17; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'V') { if (yych <= 'D') { if (yych <= ' ') { if (yych == '\t') goto yy60; if (yych <= 0x1F) goto yy761; goto yy60; } else { if (yych <= '1') { if (yych <= '/') goto yy761; } else { if (yych <= '9') goto yy54; if (yych <= 'C') goto yy761; goto yy60; } } } else { if (yych <= 'H') { if (yych == 'F') goto yy60; if (yych <= 'G') goto yy761; goto yy60; } else { if (yych <= 'M') { if (yych <= 'L') goto yy761; goto yy60; } else { if (yych <= 'R') goto yy761; if (yych <= 'T') goto yy60; goto yy761; } } } } else { if (yych <= 'h') { if (yych <= 'c') { if (yych == 'X') goto yy761; if (yych <= 'Y') goto yy60; goto yy761; } else { if (yych <= 'e') { if (yych <= 'd') goto yy60; goto yy761; } else { if (yych == 'g') goto yy761; goto yy60; } } } else { if (yych <= 't') { if (yych == 'm') goto yy60; if (yych <= 'r') goto yy761; goto yy60; } else { if (yych <= 'w') { if (yych <= 'v') goto yy761; goto yy60; } else { if (yych == 'y') goto yy60; goto yy761; } } } } yy787: YYDEBUG(787, *YYCURSOR); yyaccept = 18; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 2) { goto yy54; } if (yych <= 'W') { if (yych <= 'F') { if (yych <= ' ') { if (yych == '\t') goto yy59; if (yych >= ' ') goto yy59; } else { if (yych == 'D') goto yy64; if (yych >= 'F') goto yy65; } } else { if (yych <= 'M') { if (yych == 'H') goto yy63; if (yych >= 'M') goto yy62; } else { if (yych <= 'S') { if (yych >= 'S') goto yy61; } else { if (yych <= 'T') goto yy789; if (yych >= 'W') goto yy67; } } } } else { if (yych <= 'l') { if (yych <= 'd') { if (yych == 'Y') goto yy66; if (yych >= 'd') goto yy64; } else { if (yych <= 'f') { if (yych >= 'f') goto yy65; } else { if (yych == 'h') goto yy63; } } } else { if (yych <= 't') { if (yych <= 'm') goto yy62; if (yych <= 'r') goto yy788; if (yych <= 's') goto yy61; goto yy790; } else { if (yych <= 'w') { if (yych >= 'w') goto yy67; } else { if (yych == 'y') goto yy66; } } } } yy788: YYDEBUG(788, *YYCURSOR); { DEBUG_OUTPUT("datenocolon"); TIMELIB_INIT; TIMELIB_HAVE_DATE(); s->time->y = timelib_get_nr((char **) &ptr, 4); s->time->m = timelib_get_nr((char **) &ptr, 2); s->time->d = timelib_get_nr((char **) &ptr, 2); TIMELIB_DEINIT; return TIMELIB_DATE_NOCOLON; } yy789: YYDEBUG(789, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'H') { if (yych <= '2') { if (yych <= '/') goto yy56; if (yych <= '1') goto yy804; goto yy805; } else { if (yych <= '9') goto yy806; if (yych <= 'G') goto yy56; goto yy69; } } else { if (yych <= 'g') { if (yych == 'U') goto yy70; goto yy56; } else { if (yych <= 'h') goto yy69; if (yych == 'u') goto yy70; goto yy56; } } yy790: YYDEBUG(790, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'H') { if (yych <= '2') { if (yych <= '/') goto yy56; if (yych >= '2') goto yy792; } else { if (yych <= '9') goto yy793; if (yych <= 'G') goto yy56; goto yy69; } } else { if (yych <= 'g') { if (yych == 'U') goto yy70; goto yy56; } else { if (yych <= 'h') goto yy69; if (yych == 'u') goto yy70; goto yy56; } } YYDEBUG(791, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '5') goto yy798; if (yych <= '9') goto yy793; goto yy56; yy792: YYDEBUG(792, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '4') goto yy798; if (yych <= '5') goto yy794; goto yy56; yy793: YYDEBUG(793, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= '6') goto yy56; yy794: YYDEBUG(794, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= ':') goto yy56; yy795: YYDEBUG(795, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '5') goto yy796; if (yych <= '6') goto yy797; goto yy56; yy796: YYDEBUG(796, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '9') goto yy781; goto yy56; yy797: YYDEBUG(797, *YYCURSOR); yych = *++YYCURSOR; if (yych == '0') goto yy781; goto yy56; yy798: YYDEBUG(798, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '5') goto yy799; if (yych <= '9') goto yy795; goto yy56; yy799: YYDEBUG(799, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '5') goto yy800; if (yych <= '6') goto yy801; if (yych <= '9') goto yy795; goto yy56; yy800: YYDEBUG(800, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '5') goto yy802; if (yych <= '6') goto yy803; if (yych <= '9') goto yy781; goto yy56; yy801: YYDEBUG(801, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '0') goto yy802; if (yych <= '5') goto yy796; if (yych <= '6') goto yy797; goto yy56; yy802: YYDEBUG(802, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy782; if (yych <= '9') goto yy781; goto yy782; yy803: YYDEBUG(803, *YYCURSOR); yych = *++YYCURSOR; if (yych == '0') goto yy781; goto yy782; yy804: YYDEBUG(804, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '5') goto yy813; if (yych <= '9') goto yy806; if (yych <= ':') goto yy807; goto yy56; yy805: YYDEBUG(805, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '5') { if (yych <= '/') goto yy56; if (yych <= '4') goto yy813; goto yy794; } else { if (yych == ':') goto yy807; goto yy56; } yy806: YYDEBUG(806, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '5') goto yy794; if (yych != ':') goto yy56; yy807: YYDEBUG(807, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= '6') goto yy56; YYDEBUG(808, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= ':') goto yy56; YYDEBUG(809, *YYCURSOR); yych = *++YYCURSOR; if (yych != ':') goto yy56; YYDEBUG(810, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '5') goto yy811; if (yych <= '6') goto yy812; goto yy56; yy811: YYDEBUG(811, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '9') goto yy781; goto yy56; yy812: YYDEBUG(812, *YYCURSOR); yych = *++YYCURSOR; if (yych == '0') goto yy781; goto yy56; yy813: YYDEBUG(813, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '5') goto yy799; if (yych <= '9') goto yy795; if (yych <= ':') goto yy807; goto yy56; yy814: YYDEBUG(814, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '2') { if (yych <= '/') goto yy60; if (yych <= '0') goto yy816; goto yy785; } else { if (yych <= '3') goto yy786; if (yych <= '9') goto yy760; goto yy60; } yy815: YYDEBUG(815, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '2') { if (yych <= '/') goto yy60; if (yych <= '0') goto yy784; goto yy785; } else { if (yych <= '3') goto yy786; if (yych <= '9') goto yy760; goto yy60; } yy816: YYDEBUG(816, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy60; if (yych <= '9') goto yy787; goto yy60; yy817: YYDEBUG(817, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'C') goto yy818; if (yych != 'c') goto yy56; yy818: YYDEBUG(818, *YYCURSOR); yyaccept = 19; yych = *(YYMARKER = ++YYCURSOR); if (yych == 'E') goto yy819; if (yych != 'e') goto yy733; yy819: YYDEBUG(819, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'M') goto yy820; if (yych != 'm') goto yy56; yy820: YYDEBUG(820, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'B') goto yy821; if (yych != 'b') goto yy56; yy821: YYDEBUG(821, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy822; if (yych != 'e') goto yy56; yy822: YYDEBUG(822, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy823; if (yych != 'r') goto yy56; yy823: YYDEBUG(823, *YYCURSOR); yych = *++YYCURSOR; goto yy733; yy824: YYDEBUG(824, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'V') goto yy825; if (yych != 'v') goto yy56; yy825: YYDEBUG(825, *YYCURSOR); yyaccept = 19; yych = *(YYMARKER = ++YYCURSOR); if (yych == 'E') goto yy826; if (yych != 'e') goto yy733; yy826: YYDEBUG(826, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'M') goto yy827; if (yych != 'm') goto yy56; yy827: YYDEBUG(827, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'B') goto yy828; if (yych != 'b') goto yy56; yy828: YYDEBUG(828, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy829; if (yych != 'e') goto yy56; yy829: YYDEBUG(829, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy823; if (yych == 'r') goto yy823; goto yy56; yy830: YYDEBUG(830, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'T') goto yy831; if (yych != 't') goto yy56; yy831: YYDEBUG(831, *YYCURSOR); yyaccept = 19; yych = *(YYMARKER = ++YYCURSOR); if (yych == 'O') goto yy832; if (yych != 'o') goto yy733; yy832: YYDEBUG(832, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'B') goto yy833; if (yych != 'b') goto yy56; yy833: YYDEBUG(833, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy834; if (yych != 'e') goto yy56; yy834: YYDEBUG(834, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy823; if (yych == 'r') goto yy823; goto yy56; yy835: YYDEBUG(835, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'P') { if (yych == 'C') goto yy128; if (yych <= 'O') goto yy56; } else { if (yych <= 'c') { if (yych <= 'b') goto yy56; goto yy128; } else { if (yych != 'p') goto yy56; } } yy836: YYDEBUG(836, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'T') goto yy837; if (yych != 't') goto yy733; yy837: YYDEBUG(837, *YYCURSOR); yyaccept = 19; yych = *(YYMARKER = ++YYCURSOR); if (yych == 'E') goto yy838; if (yych != 'e') goto yy733; yy838: YYDEBUG(838, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'M') goto yy839; if (yych != 'm') goto yy56; yy839: YYDEBUG(839, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'B') goto yy840; if (yych != 'b') goto yy56; yy840: YYDEBUG(840, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy841; if (yych != 'e') goto yy56; yy841: YYDEBUG(841, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy823; if (yych == 'r') goto yy823; goto yy56; yy842: YYDEBUG(842, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'G') goto yy846; if (yych == 'g') goto yy846; goto yy56; yy843: YYDEBUG(843, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy844; if (yych != 'r') goto yy56; yy844: YYDEBUG(844, *YYCURSOR); yyaccept = 19; yych = *(YYMARKER = ++YYCURSOR); if (yych == 'I') goto yy845; if (yych != 'i') goto yy733; yy845: YYDEBUG(845, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'L') goto yy823; if (yych == 'l') goto yy823; goto yy56; yy846: YYDEBUG(846, *YYCURSOR); yyaccept = 19; yych = *(YYMARKER = ++YYCURSOR); if (yych == 'U') goto yy847; if (yych != 'u') goto yy733; yy847: YYDEBUG(847, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'S') goto yy848; if (yych != 's') goto yy56; yy848: YYDEBUG(848, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'T') goto yy823; if (yych == 't') goto yy823; goto yy56; yy849: YYDEBUG(849, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'Y') { if (yych == 'R') goto yy850; if (yych <= 'X') goto yy56; goto yy823; } else { if (yych <= 'r') { if (yych <= 'q') goto yy56; } else { if (yych == 'y') goto yy823; goto yy56; } } yy850: YYDEBUG(850, *YYCURSOR); yyaccept = 19; yych = *(YYMARKER = ++YYCURSOR); if (yych == 'C') goto yy851; if (yych != 'c') goto yy733; yy851: YYDEBUG(851, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'H') goto yy823; if (yych == 'h') goto yy823; goto yy56; yy852: YYDEBUG(852, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'B') goto yy853; if (yych != 'b') goto yy56; yy853: YYDEBUG(853, *YYCURSOR); yyaccept = 19; yych = *(YYMARKER = ++YYCURSOR); if (yych == 'R') goto yy854; if (yych != 'r') goto yy733; yy854: YYDEBUG(854, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'U') goto yy855; if (yych != 'u') goto yy56; yy855: YYDEBUG(855, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy856; if (yych != 'a') goto yy56; yy856: YYDEBUG(856, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy857; if (yych != 'r') goto yy56; yy857: YYDEBUG(857, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy823; if (yych == 'y') goto yy823; goto yy56; yy858: YYDEBUG(858, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'N') { if (yych == 'L') goto yy865; if (yych <= 'M') goto yy56; goto yy864; } else { if (yych <= 'l') { if (yych <= 'k') goto yy56; goto yy865; } else { if (yych == 'n') goto yy864; goto yy56; } } yy859: YYDEBUG(859, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'N') goto yy860; if (yych != 'n') goto yy56; yy860: YYDEBUG(860, *YYCURSOR); yyaccept = 19; yych = *(YYMARKER = ++YYCURSOR); if (yych == 'U') goto yy861; if (yych != 'u') goto yy733; yy861: YYDEBUG(861, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy862; if (yych != 'a') goto yy56; yy862: YYDEBUG(862, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy863; if (yych != 'r') goto yy56; yy863: YYDEBUG(863, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy823; if (yych == 'y') goto yy823; goto yy56; yy864: YYDEBUG(864, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy823; if (yych == 'e') goto yy823; goto yy733; yy865: YYDEBUG(865, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy823; if (yych == 'y') goto yy823; goto yy733; yy866: YYDEBUG(866, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'I') goto yy823; goto yy733; yy867: YYDEBUG(867, *YYCURSOR); yych = *++YYCURSOR; if (yych != 'I') goto yy733; YYDEBUG(868, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'I') goto yy823; goto yy733; yy869: YYDEBUG(869, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'I') goto yy823; goto yy733; yy870: YYDEBUG(870, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '0') goto yy885; if (yych <= '9') goto yy884; goto yy56; yy871: YYDEBUG(871, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '9') goto yy883; goto yy56; yy872: YYDEBUG(872, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '5') goto yy881; if (yych <= '6') goto yy880; goto yy56; yy873: YYDEBUG(873, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy852; if (yych == 'e') goto yy852; goto yy56; yy874: YYDEBUG(874, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy849; if (yych == 'a') goto yy849; goto yy56; yy875: YYDEBUG(875, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy879; if (yych == 'e') goto yy879; goto yy56; yy876: YYDEBUG(876, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy817; if (yych == 'e') goto yy817; goto yy56; yy877: YYDEBUG(877, *YYCURSOR); ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 9) YYFILL(9); yych = *YYCURSOR; yy878: YYDEBUG(878, *YYCURSOR); switch (yych) { case '\t': case ' ': case '-': case '.': goto yy877; case 'A': case 'a': goto yy739; case 'D': case 'd': goto yy876; case 'F': case 'f': goto yy873; case 'I': goto yy732; case 'J': case 'j': goto yy736; case 'M': case 'm': goto yy874; case 'N': case 'n': goto yy742; case 'O': case 'o': goto yy741; case 'S': case 's': goto yy875; case 'V': goto yy734; case 'X': goto yy735; default: goto yy56; } yy879: YYDEBUG(879, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'P') goto yy836; if (yych == 'p') goto yy836; goto yy56; yy880: YYDEBUG(880, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '6') goto yy882; goto yy56; yy881: YYDEBUG(881, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= ':') goto yy56; yy882: YYDEBUG(882, *YYCURSOR); yych = *++YYCURSOR; goto yy761; yy883: YYDEBUG(883, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '9') goto yy882; goto yy56; yy884: YYDEBUG(884, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '9') goto yy882; goto yy56; yy885: YYDEBUG(885, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '0') goto yy56; if (yych <= '9') goto yy882; goto yy56; yy886: YYDEBUG(886, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '.') goto yy56; if (yych <= '/') goto yy889; if (yych <= '9') goto yy897; goto yy56; yy887: YYDEBUG(887, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '.') goto yy56; if (yych <= '/') goto yy889; if (yych <= '2') goto yy897; goto yy56; yy888: YYDEBUG(888, *YYCURSOR); yych = *++YYCURSOR; if (yych != '/') goto yy56; yy889: YYDEBUG(889, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '2') goto yy890; if (yych <= '3') goto yy891; if (yych <= '9') goto yy892; goto yy56; yy890: YYDEBUG(890, *YYCURSOR); yyaccept = 20; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'n') { if (yych <= '/') goto yy394; if (yych <= '9') goto yy892; if (yych <= 'm') goto yy394; goto yy894; } else { if (yych <= 'r') { if (yych <= 'q') goto yy394; goto yy895; } else { if (yych <= 's') goto yy893; if (yych <= 't') goto yy896; goto yy394; } } yy891: YYDEBUG(891, *YYCURSOR); yyaccept = 20; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'n') { if (yych <= '/') goto yy394; if (yych <= '1') goto yy892; if (yych <= 'm') goto yy394; goto yy894; } else { if (yych <= 'r') { if (yych <= 'q') goto yy394; goto yy895; } else { if (yych <= 's') goto yy893; if (yych <= 't') goto yy896; goto yy394; } } yy892: YYDEBUG(892, *YYCURSOR); yyaccept = 20; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'q') { if (yych == 'n') goto yy894; goto yy394; } else { if (yych <= 'r') goto yy895; if (yych <= 's') goto yy893; if (yych <= 't') goto yy896; goto yy394; } yy893: YYDEBUG(893, *YYCURSOR); yych = *++YYCURSOR; if (yych == 't') goto yy393; goto yy56; yy894: YYDEBUG(894, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'd') goto yy393; goto yy56; yy895: YYDEBUG(895, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'd') goto yy393; goto yy56; yy896: YYDEBUG(896, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'h') goto yy393; goto yy56; yy897: YYDEBUG(897, *YYCURSOR); yych = *++YYCURSOR; if (yych != '/') goto yy56; YYDEBUG(898, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '2') { if (yych <= '/') goto yy56; if (yych >= '1') goto yy900; } else { if (yych <= '3') goto yy901; if (yych <= '9') goto yy892; goto yy56; } YYDEBUG(899, *YYCURSOR); yyaccept = 20; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'n') { if (yych <= '/') goto yy394; if (yych <= '9') goto yy902; if (yych <= 'm') goto yy394; goto yy894; } else { if (yych <= 'r') { if (yych <= 'q') goto yy394; goto yy895; } else { if (yych <= 's') goto yy893; if (yych <= 't') goto yy896; goto yy394; } } yy900: YYDEBUG(900, *YYCURSOR); yyaccept = 20; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'n') { if (yych <= '/') goto yy394; if (yych <= '9') goto yy902; if (yych <= 'm') goto yy394; goto yy894; } else { if (yych <= 'r') { if (yych <= 'q') goto yy394; goto yy895; } else { if (yych <= 's') goto yy893; if (yych <= 't') goto yy896; goto yy394; } } yy901: YYDEBUG(901, *YYCURSOR); yyaccept = 20; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'n') { if (yych <= '/') goto yy394; if (yych <= '1') goto yy902; if (yych <= 'm') goto yy394; goto yy894; } else { if (yych <= 'r') { if (yych <= 'q') goto yy394; goto yy895; } else { if (yych <= 's') goto yy893; if (yych <= 't') goto yy896; goto yy394; } } yy902: YYDEBUG(902, *YYCURSOR); yyaccept = 20; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'n') { if (yych == '/') goto yy393; if (yych <= 'm') goto yy394; goto yy894; } else { if (yych <= 'r') { if (yych <= 'q') goto yy394; goto yy895; } else { if (yych <= 's') goto yy893; if (yych <= 't') goto yy896; goto yy394; } } yy903: YYDEBUG(903, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych == 'A') goto yy983; if (yych <= 'T') goto yy56; goto yy982; } else { if (yych <= 'a') { if (yych <= '`') goto yy56; goto yy983; } else { if (yych == 'u') goto yy982; goto yy56; } } yy904: YYDEBUG(904, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy980; if (yych == 'e') goto yy980; goto yy56; yy905: YYDEBUG(905, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy977; if (yych == 'a') goto yy977; goto yy56; yy906: YYDEBUG(906, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych == 'P') goto yy974; if (yych <= 'T') goto yy56; goto yy973; } else { if (yych <= 'p') { if (yych <= 'o') goto yy56; goto yy974; } else { if (yych == 'u') goto yy973; goto yy56; } } yy907: YYDEBUG(907, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy970; if (yych == 'e') goto yy970; goto yy56; yy908: YYDEBUG(908, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'C') goto yy968; if (yych == 'c') goto yy968; goto yy56; yy909: YYDEBUG(909, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'O') goto yy966; if (yych == 'o') goto yy966; goto yy56; yy910: YYDEBUG(910, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy964; if (yych == 'e') goto yy964; goto yy56; yy911: YYDEBUG(911, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '0') goto yy750; if (yych <= '4') goto yy751; if (yych <= '5') goto yy752; goto yy56; yy912: YYDEBUG(912, *YYCURSOR); yyaccept = 21; yych = *(YYMARKER = ++YYCURSOR); if (yych == '-') goto yy916; if (yych <= '/') goto yy913; if (yych <= '9') goto yy935; yy913: YYDEBUG(913, *YYCURSOR); { int length = 0; DEBUG_OUTPUT("gnudateshorter"); TIMELIB_INIT; TIMELIB_HAVE_DATE(); s->time->y = timelib_get_nr_ex((char **) &ptr, 4, &length); s->time->m = timelib_get_nr((char **) &ptr, 2); s->time->d = 1; TIMELIB_PROCESS_YEAR(s->time->y, length); TIMELIB_DEINIT; return TIMELIB_ISO_DATE; } yy914: YYDEBUG(914, *YYCURSOR); yyaccept = 21; yych = *(YYMARKER = ++YYCURSOR); if (yych == '-') goto yy916; if (yych <= '/') goto yy913; if (yych <= '2') goto yy935; goto yy913; yy915: YYDEBUG(915, *YYCURSOR); yyaccept = 21; yych = *(YYMARKER = ++YYCURSOR); if (yych != '-') goto yy913; yy916: YYDEBUG(916, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '2') goto yy917; if (yych <= '3') goto yy918; if (yych <= '9') goto yy919; goto yy56; yy917: YYDEBUG(917, *YYCURSOR); yyaccept = 12; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'm') { if (yych <= '9') { if (yych <= '/') goto yy596; goto yy919; } else { if (yych == 'T') goto yy924; goto yy596; } } else { if (yych <= 'r') { if (yych <= 'n') goto yy921; if (yych <= 'q') goto yy596; goto yy922; } else { if (yych <= 's') goto yy920; if (yych <= 't') goto yy923; goto yy596; } } yy918: YYDEBUG(918, *YYCURSOR); yyaccept = 12; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'm') { if (yych <= '1') { if (yych <= '/') goto yy596; } else { if (yych == 'T') goto yy924; goto yy596; } } else { if (yych <= 'r') { if (yych <= 'n') goto yy921; if (yych <= 'q') goto yy596; goto yy922; } else { if (yych <= 's') goto yy920; if (yych <= 't') goto yy923; goto yy596; } } yy919: YYDEBUG(919, *YYCURSOR); yyaccept = 12; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'n') { if (yych == 'T') goto yy924; if (yych <= 'm') goto yy596; goto yy921; } else { if (yych <= 'r') { if (yych <= 'q') goto yy596; goto yy922; } else { if (yych <= 's') goto yy920; if (yych <= 't') goto yy923; goto yy596; } } yy920: YYDEBUG(920, *YYCURSOR); yych = *++YYCURSOR; if (yych == 't') goto yy934; goto yy56; yy921: YYDEBUG(921, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'd') goto yy934; goto yy56; yy922: YYDEBUG(922, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'd') goto yy934; goto yy56; yy923: YYDEBUG(923, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'h') goto yy934; goto yy56; yy924: YYDEBUG(924, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '1') goto yy925; if (yych <= '2') goto yy926; if (yych <= '9') goto yy927; goto yy56; yy925: YYDEBUG(925, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '9') goto yy927; if (yych <= ':') goto yy928; goto yy56; yy926: YYDEBUG(926, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '4') goto yy927; if (yych == ':') goto yy928; goto yy56; yy927: YYDEBUG(927, *YYCURSOR); yych = *++YYCURSOR; if (yych != ':') goto yy56; yy928: YYDEBUG(928, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '5') goto yy929; if (yych <= '9') goto yy930; goto yy56; yy929: YYDEBUG(929, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '9') goto yy930; if (yych <= ':') goto yy931; goto yy56; yy930: YYDEBUG(930, *YYCURSOR); yych = *++YYCURSOR; if (yych != ':') goto yy56; yy931: YYDEBUG(931, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '5') goto yy932; if (yych <= '6') goto yy933; if (yych <= '9') goto yy781; goto yy56; yy932: YYDEBUG(932, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy782; if (yych <= '9') goto yy781; goto yy782; yy933: YYDEBUG(933, *YYCURSOR); yych = *++YYCURSOR; if (yych == '0') goto yy781; goto yy782; yy934: YYDEBUG(934, *YYCURSOR); yyaccept = 12; yych = *(YYMARKER = ++YYCURSOR); if (yych == 'T') goto yy924; goto yy596; yy935: YYDEBUG(935, *YYCURSOR); yyaccept = 21; yych = *(YYMARKER = ++YYCURSOR); if (yych != '-') goto yy913; YYDEBUG(936, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '2') { if (yych <= '/') goto yy56; if (yych >= '1') goto yy938; } else { if (yych <= '3') goto yy939; if (yych <= '9') goto yy919; goto yy56; } YYDEBUG(937, *YYCURSOR); yyaccept = 12; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'm') { if (yych <= '9') { if (yych <= '/') goto yy596; goto yy940; } else { if (yych == 'T') goto yy924; goto yy596; } } else { if (yych <= 'r') { if (yych <= 'n') goto yy921; if (yych <= 'q') goto yy596; goto yy922; } else { if (yych <= 's') goto yy920; if (yych <= 't') goto yy923; goto yy596; } } yy938: YYDEBUG(938, *YYCURSOR); yyaccept = 12; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'm') { if (yych <= '9') { if (yych <= '/') goto yy596; goto yy940; } else { if (yych == 'T') goto yy924; goto yy596; } } else { if (yych <= 'r') { if (yych <= 'n') goto yy921; if (yych <= 'q') goto yy596; goto yy922; } else { if (yych <= 's') goto yy920; if (yych <= 't') goto yy923; goto yy596; } } yy939: YYDEBUG(939, *YYCURSOR); yyaccept = 12; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'm') { if (yych <= '1') { if (yych <= '/') goto yy596; } else { if (yych == 'T') goto yy924; goto yy596; } } else { if (yych <= 'r') { if (yych <= 'n') goto yy921; if (yych <= 'q') goto yy596; goto yy922; } else { if (yych <= 's') goto yy920; if (yych <= 't') goto yy923; goto yy596; } } yy940: YYDEBUG(940, *YYCURSOR); yyaccept = 20; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'n') { if (yych == 'T') goto yy941; if (yych <= 'm') goto yy394; goto yy921; } else { if (yych <= 'r') { if (yych <= 'q') goto yy394; goto yy922; } else { if (yych <= 's') goto yy920; if (yych <= 't') goto yy923; goto yy394; } } yy941: YYDEBUG(941, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '1') goto yy942; if (yych <= '2') goto yy943; if (yych <= '9') goto yy927; goto yy56; yy942: YYDEBUG(942, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '9') goto yy944; if (yych <= ':') goto yy928; goto yy56; yy943: YYDEBUG(943, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '4') goto yy944; if (yych == ':') goto yy928; goto yy56; yy944: YYDEBUG(944, *YYCURSOR); yych = *++YYCURSOR; if (yych != ':') goto yy56; YYDEBUG(945, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '5') goto yy946; if (yych <= '9') goto yy930; goto yy56; yy946: YYDEBUG(946, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '9') goto yy947; if (yych <= ':') goto yy931; goto yy56; yy947: YYDEBUG(947, *YYCURSOR); yych = *++YYCURSOR; if (yych != ':') goto yy56; YYDEBUG(948, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '5') goto yy949; if (yych <= '6') goto yy950; if (yych <= '9') goto yy781; goto yy56; yy949: YYDEBUG(949, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy782; if (yych <= '9') goto yy951; goto yy782; yy950: YYDEBUG(950, *YYCURSOR); yych = *++YYCURSOR; if (yych != '0') goto yy782; yy951: YYDEBUG(951, *YYCURSOR); yyaccept = 22; yych = *(YYMARKER = ++YYCURSOR); if (yych != '.') goto yy782; YYDEBUG(952, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= ':') goto yy56; yy953: YYDEBUG(953, *YYCURSOR); yyaccept = 22; YYMARKER = ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 9) YYFILL(9); yych = *YYCURSOR; YYDEBUG(954, *YYCURSOR); if (yych <= '-') { if (yych == '+') goto yy956; if (yych <= ',') goto yy782; goto yy956; } else { if (yych <= '9') { if (yych <= '/') goto yy782; goto yy953; } else { if (yych != 'G') goto yy782; } } YYDEBUG(955, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'M') goto yy962; goto yy56; yy956: YYDEBUG(956, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '1') goto yy957; if (yych <= '2') goto yy958; if (yych <= '9') goto yy959; goto yy56; yy957: YYDEBUG(957, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy782; if (yych <= '9') goto yy959; if (yych <= ':') goto yy960; goto yy782; yy958: YYDEBUG(958, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '5') { if (yych <= '/') goto yy782; if (yych >= '5') goto yy961; } else { if (yych <= '9') goto yy781; if (yych <= ':') goto yy960; goto yy782; } yy959: YYDEBUG(959, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy782; if (yych <= '5') goto yy961; if (yych <= '9') goto yy781; if (yych >= ';') goto yy782; yy960: YYDEBUG(960, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy782; if (yych <= '5') goto yy961; if (yych <= '9') goto yy781; goto yy782; yy961: YYDEBUG(961, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy782; if (yych <= '9') goto yy781; goto yy782; yy962: YYDEBUG(962, *YYCURSOR); yych = *++YYCURSOR; if (yych != 'T') goto yy56; YYDEBUG(963, *YYCURSOR); yych = *++YYCURSOR; if (yych == '+') goto yy956; if (yych == '-') goto yy956; goto yy56; yy964: YYDEBUG(964, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'C') goto yy965; if (yych != 'c') goto yy56; yy965: YYDEBUG(965, *YYCURSOR); yyaccept = 19; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'D') { if (yych == '-') goto yy706; goto yy733; } else { if (yych <= 'E') goto yy819; if (yych == 'e') goto yy819; goto yy733; } yy966: YYDEBUG(966, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'V') goto yy967; if (yych != 'v') goto yy56; yy967: YYDEBUG(967, *YYCURSOR); yyaccept = 19; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'D') { if (yych == '-') goto yy706; goto yy733; } else { if (yych <= 'E') goto yy826; if (yych == 'e') goto yy826; goto yy733; } yy968: YYDEBUG(968, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'T') goto yy969; if (yych != 't') goto yy56; yy969: YYDEBUG(969, *YYCURSOR); yyaccept = 19; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'N') { if (yych == '-') goto yy706; goto yy733; } else { if (yych <= 'O') goto yy832; if (yych == 'o') goto yy832; goto yy733; } yy970: YYDEBUG(970, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'P') goto yy971; if (yych != 'p') goto yy56; yy971: YYDEBUG(971, *YYCURSOR); yyaccept = 19; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { if (yych == '-') goto yy706; goto yy733; } else { if (yych <= 'T') goto yy972; if (yych != 't') goto yy733; } yy972: YYDEBUG(972, *YYCURSOR); yyaccept = 19; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'D') { if (yych == '-') goto yy706; goto yy733; } else { if (yych <= 'E') goto yy838; if (yych == 'e') goto yy838; goto yy733; } yy973: YYDEBUG(973, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'G') goto yy976; if (yych == 'g') goto yy976; goto yy56; yy974: YYDEBUG(974, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy975; if (yych != 'r') goto yy56; yy975: YYDEBUG(975, *YYCURSOR); yyaccept = 19; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'H') { if (yych == '-') goto yy706; goto yy733; } else { if (yych <= 'I') goto yy845; if (yych == 'i') goto yy845; goto yy733; } yy976: YYDEBUG(976, *YYCURSOR); yyaccept = 19; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'T') { if (yych == '-') goto yy706; goto yy733; } else { if (yych <= 'U') goto yy847; if (yych == 'u') goto yy847; goto yy733; } yy977: YYDEBUG(977, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'Y') { if (yych == 'R') goto yy978; if (yych <= 'X') goto yy56; goto yy979; } else { if (yych <= 'r') { if (yych <= 'q') goto yy56; } else { if (yych == 'y') goto yy979; goto yy56; } } yy978: YYDEBUG(978, *YYCURSOR); yyaccept = 19; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'B') { if (yych == '-') goto yy706; goto yy733; } else { if (yych <= 'C') goto yy851; if (yych == 'c') goto yy851; goto yy733; } yy979: YYDEBUG(979, *YYCURSOR); yyaccept = 19; yych = *(YYMARKER = ++YYCURSOR); if (yych == '-') goto yy706; goto yy733; yy980: YYDEBUG(980, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'B') goto yy981; if (yych != 'b') goto yy56; yy981: YYDEBUG(981, *YYCURSOR); yyaccept = 19; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'Q') { if (yych == '-') goto yy706; goto yy733; } else { if (yych <= 'R') goto yy854; if (yych == 'r') goto yy854; goto yy733; } yy982: YYDEBUG(982, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'N') { if (yych == 'L') goto yy986; if (yych <= 'M') goto yy56; goto yy985; } else { if (yych <= 'l') { if (yych <= 'k') goto yy56; goto yy986; } else { if (yych == 'n') goto yy985; goto yy56; } } yy983: YYDEBUG(983, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'N') goto yy984; if (yych != 'n') goto yy56; yy984: YYDEBUG(984, *YYCURSOR); yyaccept = 19; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'T') { if (yych == '-') goto yy706; goto yy733; } else { if (yych <= 'U') goto yy861; if (yych == 'u') goto yy861; goto yy733; } yy985: YYDEBUG(985, *YYCURSOR); yyaccept = 19; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'D') { if (yych == '-') goto yy706; goto yy733; } else { if (yych <= 'E') goto yy823; if (yych == 'e') goto yy823; goto yy733; } yy986: YYDEBUG(986, *YYCURSOR); yyaccept = 19; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'X') { if (yych == '-') goto yy706; goto yy733; } else { if (yych <= 'Y') goto yy823; if (yych == 'y') goto yy823; goto yy733; } yy987: YYDEBUG(987, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '.') { if (yych <= '\t') { if (yych <= 0x08) goto yy517; goto yy670; } else { if (yych <= ',') goto yy517; if (yych <= '-') goto yy671; goto yy670; } } else { if (yych <= 'U') { if (yych <= '/') goto yy669; if (yych <= 'T') goto yy517; goto yy77; } else { if (yych == 'u') goto yy77; goto yy517; } } yy988: YYDEBUG(988, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'P') { if (yych == 'C') goto yy128; if (yych <= 'O') goto yy56; goto yy525; } else { if (yych <= 'c') { if (yych <= 'b') goto yy56; goto yy128; } else { if (yych == 'p') goto yy525; goto yy56; } } yy989: YYDEBUG(989, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '9') { if (yych <= ',') { if (yych == '\t') goto yy991; goto yy993; } else { if (yych <= '-') goto yy990; if (yych <= '.') goto yy670; if (yych <= '/') goto yy669; goto yy680; } } else { if (yych <= 'q') { if (yych == 'n') goto yy409; goto yy993; } else { if (yych <= 'r') goto yy410; if (yych <= 's') goto yy403; if (yych <= 't') goto yy407; goto yy993; } } yy990: YYDEBUG(990, *YYCURSOR); yych = *++YYCURSOR; switch (yych) { case '0': goto yy994; case '1': goto yy995; case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy557; case 'A': case 'a': goto yy561; case 'D': case 'd': goto yy565; case 'F': case 'f': goto yy559; case 'J': case 'j': goto yy558; case 'M': case 'm': goto yy560; case 'N': case 'n': goto yy564; case 'O': case 'o': goto yy563; case 'S': case 's': goto yy562; default: goto yy517; } yy991: YYDEBUG(991, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy993; if (yych <= '0') goto yy675; if (yych <= '1') goto yy676; if (yych <= '9') goto yy677; goto yy993; yy992: YYDEBUG(992, *YYCURSOR); ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 13) YYFILL(13); yych = *YYCURSOR; yy993: YYDEBUG(993, *YYCURSOR); switch (yych) { case '\t': case ' ': goto yy992; case '-': case '.': goto yy516; case 'A': case 'a': goto yy513; case 'D': case 'd': goto yy405; case 'F': case 'f': goto yy406; case 'H': case 'h': goto yy63; case 'I': goto yy414; case 'J': case 'j': goto yy418; case 'M': case 'm': goto yy404; case 'N': case 'n': goto yy421; case 'O': case 'o': goto yy420; case 'S': case 's': goto yy402; case 'T': case 't': goto yy68; case 'V': goto yy416; case 'W': case 'w': goto yy67; case 'X': goto yy417; case 'Y': case 'y': goto yy66; default: goto yy56; } yy994: YYDEBUG(994, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '.') { if (yych <= ',') goto yy56; if (yych <= '-') goto yy594; goto yy541; } else { if (yych <= '/') goto yy56; if (yych <= '9') goto yy996; goto yy56; } yy995: YYDEBUG(995, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '.') { if (yych <= ',') goto yy56; if (yych <= '-') goto yy594; goto yy541; } else { if (yych <= '/') goto yy56; if (yych >= '3') goto yy56; } yy996: YYDEBUG(996, *YYCURSOR); yych = *++YYCURSOR; if (yych <= ',') goto yy56; if (yych <= '-') goto yy997; if (yych <= '.') goto yy541; goto yy56; yy997: YYDEBUG(997, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '2') { if (yych <= '/') goto yy56; if (yych >= '1') goto yy999; } else { if (yych <= '3') goto yy1000; if (yych <= '9') goto yy598; goto yy56; } YYDEBUG(998, *YYCURSOR); yyaccept = 12; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'n') { if (yych <= '/') goto yy596; if (yych <= '9') goto yy1001; if (yych <= 'm') goto yy596; goto yy600; } else { if (yych <= 'r') { if (yych <= 'q') goto yy596; goto yy601; } else { if (yych <= 's') goto yy599; if (yych <= 't') goto yy602; goto yy596; } } yy999: YYDEBUG(999, *YYCURSOR); yyaccept = 12; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'n') { if (yych <= '/') goto yy596; if (yych <= '9') goto yy1001; if (yych <= 'm') goto yy596; goto yy600; } else { if (yych <= 'r') { if (yych <= 'q') goto yy596; goto yy601; } else { if (yych <= 's') goto yy599; if (yych <= 't') goto yy602; goto yy596; } } yy1000: YYDEBUG(1000, *YYCURSOR); yyaccept = 12; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'n') { if (yych <= '1') { if (yych <= '/') goto yy596; } else { if (yych <= '9') goto yy543; if (yych <= 'm') goto yy596; goto yy600; } } else { if (yych <= 'r') { if (yych <= 'q') goto yy596; goto yy601; } else { if (yych <= 's') goto yy599; if (yych <= 't') goto yy602; goto yy596; } } yy1001: YYDEBUG(1001, *YYCURSOR); yyaccept = 14; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'n') { if (yych <= '/') goto yy703; if (yych <= '9') goto yy544; if (yych <= 'm') goto yy703; goto yy600; } else { if (yych <= 'r') { if (yych <= 'q') goto yy703; goto yy601; } else { if (yych <= 's') goto yy599; if (yych <= 't') goto yy602; goto yy703; } } yy1002: YYDEBUG(1002, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '9') { if (yych <= '-') { if (yych == '\t') goto yy991; if (yych <= ',') goto yy993; goto yy990; } else { if (yych <= '.') goto yy1003; if (yych <= '/') goto yy669; if (yych <= '5') goto yy1005; goto yy680; } } else { if (yych <= 'q') { if (yych <= ':') goto yy1004; if (yych == 'n') goto yy409; goto yy993; } else { if (yych <= 'r') goto yy410; if (yych <= 's') goto yy403; if (yych <= 't') goto yy407; goto yy993; } } yy1003: YYDEBUG(1003, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '1') { if (yych <= '/') goto yy517; if (yych <= '0') goto yy1027; goto yy1028; } else { if (yych <= '5') goto yy1029; if (yych <= '9') goto yy1030; goto yy517; } yy1004: YYDEBUG(1004, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '5') goto yy1022; if (yych <= '9') goto yy1023; goto yy56; yy1005: YYDEBUG(1005, *YYCURSOR); yych = *++YYCURSOR; if (yych == '-') goto yy724; if (yych <= '/') goto yy60; if (yych >= ':') goto yy60; YYDEBUG(1006, *YYCURSOR); yyaccept = 23; yych = *(YYMARKER = ++YYCURSOR); switch (yych) { case '\t': case ' ': case 'A': case 'D': case 'F': case 'H': case 'I': case 'J': case 'M': case 'N': case 'O': case 'S': case 'T': case 'V': case 'X': case 'Y': case 'a': case 'd': case 'f': case 'h': case 'j': case 'm': case 'n': case 'o': case 's': case 't': case 'w': case 'y': goto yy730; case '-': goto yy727; case '.': goto yy731; case '/': goto yy728; case '0': goto yy1008; case '1': goto yy1009; case '2': goto yy1010; case '3': goto yy1011; case '4': case '5': goto yy1012; case '6': goto yy1013; case '7': case '8': case '9': goto yy54; case ':': goto yy746; case 'W': goto yy749; default: goto yy1007; } yy1007: YYDEBUG(1007, *YYCURSOR); { DEBUG_OUTPUT("gnunocolon"); TIMELIB_INIT; switch (s->time->have_time) { case 0: s->time->h = timelib_get_nr((char **) &ptr, 2); s->time->i = timelib_get_nr((char **) &ptr, 2); s->time->s = 0; break; case 1: s->time->y = timelib_get_nr((char **) &ptr, 4); break; default: TIMELIB_DEINIT; add_error(s, "Double time specification"); return TIMELIB_ERROR; } s->time->have_time++; TIMELIB_DEINIT; return TIMELIB_GNU_NOCOLON; } yy1008: YYDEBUG(1008, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy60; if (yych <= '0') goto yy1020; if (yych <= '9') goto yy1021; goto yy60; yy1009: YYDEBUG(1009, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy60; if (yych <= '2') goto yy1019; if (yych <= '9') goto yy1018; goto yy60; yy1010: YYDEBUG(1010, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy60; if (yych <= '9') goto yy1018; goto yy60; yy1011: YYDEBUG(1011, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy60; if (yych <= '5') goto yy1016; if (yych <= '6') goto yy1017; if (yych <= '9') goto yy1014; goto yy60; yy1012: YYDEBUG(1012, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy60; if (yych <= '9') goto yy1014; goto yy60; yy1013: YYDEBUG(1013, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy60; if (yych <= '0') goto yy1014; if (yych <= '9') goto yy54; goto yy60; yy1014: YYDEBUG(1014, *YYCURSOR); yyaccept = 24; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 2) { goto yy54; } if (yych <= 'W') { if (yych <= 'F') { if (yych <= ' ') { if (yych == '\t') goto yy60; if (yych >= ' ') goto yy60; } else { if (yych == 'D') goto yy60; if (yych >= 'F') goto yy60; } } else { if (yych <= 'M') { if (yych == 'H') goto yy60; if (yych >= 'M') goto yy60; } else { if (yych <= 'R') goto yy1015; if (yych <= 'T') goto yy60; if (yych >= 'W') goto yy60; } } } else { if (yych <= 'h') { if (yych <= 'd') { if (yych == 'Y') goto yy60; if (yych >= 'd') goto yy60; } else { if (yych == 'f') goto yy60; if (yych >= 'h') goto yy60; } } else { if (yych <= 't') { if (yych == 'm') goto yy60; if (yych >= 's') goto yy60; } else { if (yych <= 'w') { if (yych >= 'w') goto yy60; } else { if (yych == 'y') goto yy60; } } } } yy1015: YYDEBUG(1015, *YYCURSOR); { int tz_not_found; DEBUG_OUTPUT("iso8601nocolon"); TIMELIB_INIT; TIMELIB_HAVE_TIME(); s->time->h = timelib_get_nr((char **) &ptr, 2); s->time->i = timelib_get_nr((char **) &ptr, 2); s->time->s = timelib_get_nr((char **) &ptr, 2); if (*ptr != '\0') { s->time->z = timelib_parse_zone((char **) &ptr, &s->time->dst, s->time, &tz_not_found, s->tzdb, tz_get_wrapper); if (tz_not_found) { add_error(s, "The timezone could not be found in the database"); } } TIMELIB_DEINIT; return TIMELIB_ISO_NOCOLON; } yy1016: YYDEBUG(1016, *YYCURSOR); yyaccept = 24; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'V') { if (yych <= 'D') { if (yych <= ' ') { if (yych == '\t') goto yy60; if (yych <= 0x1F) goto yy1015; goto yy60; } else { if (yych <= '/') goto yy1015; if (yych <= '9') goto yy760; if (yych <= 'C') goto yy1015; goto yy60; } } else { if (yych <= 'H') { if (yych == 'F') goto yy60; if (yych <= 'G') goto yy1015; goto yy60; } else { if (yych <= 'M') { if (yych <= 'L') goto yy1015; goto yy60; } else { if (yych <= 'R') goto yy1015; if (yych <= 'T') goto yy60; goto yy1015; } } } } else { if (yych <= 'h') { if (yych <= 'c') { if (yych == 'X') goto yy1015; if (yych <= 'Y') goto yy60; goto yy1015; } else { if (yych <= 'e') { if (yych <= 'd') goto yy60; goto yy1015; } else { if (yych == 'g') goto yy1015; goto yy60; } } } else { if (yych <= 't') { if (yych == 'm') goto yy60; if (yych <= 'r') goto yy1015; goto yy60; } else { if (yych <= 'w') { if (yych <= 'v') goto yy1015; goto yy60; } else { if (yych == 'y') goto yy60; goto yy1015; } } } } yy1017: YYDEBUG(1017, *YYCURSOR); yyaccept = 24; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'V') { if (yych <= 'D') { if (yych <= ' ') { if (yych == '\t') goto yy60; if (yych <= 0x1F) goto yy1015; goto yy60; } else { if (yych <= '6') { if (yych <= '/') goto yy1015; goto yy760; } else { if (yych <= '9') goto yy54; if (yych <= 'C') goto yy1015; goto yy60; } } } else { if (yych <= 'H') { if (yych == 'F') goto yy60; if (yych <= 'G') goto yy1015; goto yy60; } else { if (yych <= 'M') { if (yych <= 'L') goto yy1015; goto yy60; } else { if (yych <= 'R') goto yy1015; if (yych <= 'T') goto yy60; goto yy1015; } } } } else { if (yych <= 'h') { if (yych <= 'c') { if (yych == 'X') goto yy1015; if (yych <= 'Y') goto yy60; goto yy1015; } else { if (yych <= 'e') { if (yych <= 'd') goto yy60; goto yy1015; } else { if (yych == 'g') goto yy1015; goto yy60; } } } else { if (yych <= 't') { if (yych == 'm') goto yy60; if (yych <= 'r') goto yy1015; goto yy60; } else { if (yych <= 'w') { if (yych <= 'v') goto yy1015; goto yy60; } else { if (yych == 'y') goto yy60; goto yy1015; } } } } yy1018: YYDEBUG(1018, *YYCURSOR); yyaccept = 24; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'V') { if (yych <= 'D') { if (yych <= ' ') { if (yych == '\t') goto yy60; if (yych <= 0x1F) goto yy1015; goto yy60; } else { if (yych <= '/') goto yy1015; if (yych <= '9') goto yy760; if (yych <= 'C') goto yy1015; goto yy60; } } else { if (yych <= 'H') { if (yych == 'F') goto yy60; if (yych <= 'G') goto yy1015; goto yy60; } else { if (yych <= 'M') { if (yych <= 'L') goto yy1015; goto yy60; } else { if (yych <= 'R') goto yy1015; if (yych <= 'T') goto yy60; goto yy1015; } } } } else { if (yych <= 'h') { if (yych <= 'c') { if (yych == 'X') goto yy1015; if (yych <= 'Y') goto yy60; goto yy1015; } else { if (yych <= 'e') { if (yych <= 'd') goto yy60; goto yy1015; } else { if (yych == 'g') goto yy1015; goto yy60; } } } else { if (yych <= 't') { if (yych == 'm') goto yy60; if (yych <= 'r') goto yy1015; goto yy60; } else { if (yych <= 'w') { if (yych <= 'v') goto yy1015; goto yy60; } else { if (yych == 'y') goto yy60; goto yy1015; } } } } yy1019: YYDEBUG(1019, *YYCURSOR); yyaccept = 24; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'T') { if (yych <= '9') { if (yych <= ' ') { if (yych == '\t') goto yy60; if (yych <= 0x1F) goto yy1015; goto yy60; } else { if (yych <= '0') { if (yych <= '/') goto yy1015; goto yy784; } else { if (yych <= '2') goto yy785; if (yych <= '3') goto yy786; goto yy760; } } } else { if (yych <= 'G') { if (yych <= 'D') { if (yych <= 'C') goto yy1015; goto yy60; } else { if (yych == 'F') goto yy60; goto yy1015; } } else { if (yych <= 'L') { if (yych <= 'H') goto yy60; goto yy1015; } else { if (yych <= 'M') goto yy60; if (yych <= 'R') goto yy1015; goto yy60; } } } } else { if (yych <= 'g') { if (yych <= 'Y') { if (yych == 'W') goto yy60; if (yych <= 'X') goto yy1015; goto yy60; } else { if (yych <= 'd') { if (yych <= 'c') goto yy1015; goto yy60; } else { if (yych == 'f') goto yy60; goto yy1015; } } } else { if (yych <= 't') { if (yych <= 'l') { if (yych <= 'h') goto yy60; goto yy1015; } else { if (yych <= 'm') goto yy60; if (yych <= 'r') goto yy1015; goto yy60; } } else { if (yych <= 'w') { if (yych <= 'v') goto yy1015; goto yy60; } else { if (yych == 'y') goto yy60; goto yy1015; } } } } yy1020: YYDEBUG(1020, *YYCURSOR); yyaccept = 24; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'T') { if (yych <= '9') { if (yych <= ' ') { if (yych == '\t') goto yy60; if (yych <= 0x1F) goto yy1015; goto yy60; } else { if (yych <= '0') { if (yych <= '/') goto yy1015; goto yy816; } else { if (yych <= '2') goto yy785; if (yych <= '3') goto yy786; goto yy760; } } } else { if (yych <= 'G') { if (yych <= 'D') { if (yych <= 'C') goto yy1015; goto yy60; } else { if (yych == 'F') goto yy60; goto yy1015; } } else { if (yych <= 'L') { if (yych <= 'H') goto yy60; goto yy1015; } else { if (yych <= 'M') goto yy60; if (yych <= 'R') goto yy1015; goto yy60; } } } } else { if (yych <= 'g') { if (yych <= 'Y') { if (yych == 'W') goto yy60; if (yych <= 'X') goto yy1015; goto yy60; } else { if (yych <= 'd') { if (yych <= 'c') goto yy1015; goto yy60; } else { if (yych == 'f') goto yy60; goto yy1015; } } } else { if (yych <= 't') { if (yych <= 'l') { if (yych <= 'h') goto yy60; goto yy1015; } else { if (yych <= 'm') goto yy60; if (yych <= 'r') goto yy1015; goto yy60; } } else { if (yych <= 'w') { if (yych <= 'v') goto yy1015; goto yy60; } else { if (yych == 'y') goto yy60; goto yy1015; } } } } yy1021: YYDEBUG(1021, *YYCURSOR); yyaccept = 24; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'T') { if (yych <= '9') { if (yych <= ' ') { if (yych == '\t') goto yy60; if (yych <= 0x1F) goto yy1015; goto yy60; } else { if (yych <= '0') { if (yych <= '/') goto yy1015; goto yy784; } else { if (yych <= '2') goto yy785; if (yych <= '3') goto yy786; goto yy760; } } } else { if (yych <= 'G') { if (yych <= 'D') { if (yych <= 'C') goto yy1015; goto yy60; } else { if (yych == 'F') goto yy60; goto yy1015; } } else { if (yych <= 'L') { if (yych <= 'H') goto yy60; goto yy1015; } else { if (yych <= 'M') goto yy60; if (yych <= 'R') goto yy1015; goto yy60; } } } } else { if (yych <= 'g') { if (yych <= 'Y') { if (yych == 'W') goto yy60; if (yych <= 'X') goto yy1015; goto yy60; } else { if (yych <= 'd') { if (yych <= 'c') goto yy1015; goto yy60; } else { if (yych == 'f') goto yy60; goto yy1015; } } } else { if (yych <= 't') { if (yych <= 'l') { if (yych <= 'h') goto yy60; goto yy1015; } else { if (yych <= 'm') goto yy60; if (yych <= 'r') goto yy1015; goto yy60; } } else { if (yych <= 'w') { if (yych <= 'v') goto yy1015; goto yy60; } else { if (yych == 'y') goto yy60; goto yy1015; } } } } yy1022: YYDEBUG(1022, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych == '.') goto yy1024; goto yy430; } else { if (yych <= '9') goto yy1023; if (yych <= ':') goto yy1024; goto yy430; } yy1023: YYDEBUG(1023, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych == '.') goto yy1024; if (yych != ':') goto yy430; yy1024: YYDEBUG(1024, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '5') goto yy1025; if (yych <= '6') goto yy1026; if (yych <= '9') goto yy435; goto yy56; yy1025: YYDEBUG(1025, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych == '.') goto yy436; if (yych <= '/') goto yy430; if (yych <= '9') goto yy435; goto yy430; yy1026: YYDEBUG(1026, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych == '.') goto yy436; if (yych == '0') goto yy435; goto yy430; yy1027: YYDEBUG(1027, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= ',') goto yy430; if (yych <= '-') goto yy541; goto yy1031; } else { if (yych <= '/') goto yy430; if (yych <= '9') goto yy1030; if (yych <= ':') goto yy1024; goto yy430; } yy1028: YYDEBUG(1028, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= ',') goto yy430; if (yych <= '-') goto yy541; if (yych <= '.') goto yy1031; goto yy430; } else { if (yych <= '2') goto yy1030; if (yych <= '9') goto yy1023; if (yych <= ':') goto yy1024; goto yy430; } yy1029: YYDEBUG(1029, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= ',') goto yy430; if (yych <= '-') goto yy541; goto yy1031; } else { if (yych <= '/') goto yy430; if (yych <= '9') goto yy1023; if (yych <= ':') goto yy1024; goto yy430; } yy1030: YYDEBUG(1030, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= ',') goto yy430; if (yych <= '-') goto yy541; } else { if (yych == ':') goto yy1024; goto yy430; } yy1031: YYDEBUG(1031, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '5') goto yy1032; if (yych <= '6') goto yy1033; if (yych <= '9') goto yy549; goto yy56; yy1032: YYDEBUG(1032, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych == '.') goto yy436; if (yych <= '/') goto yy430; if (yych <= '9') goto yy1034; goto yy430; yy1033: YYDEBUG(1033, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych == '.') goto yy436; goto yy430; } else { if (yych <= '0') goto yy1034; if (yych <= '9') goto yy550; goto yy430; } yy1034: YYDEBUG(1034, *YYCURSOR); yyaccept = 10; yych = *(YYMARKER = ++YYCURSOR); if (yych == '.') goto yy436; if (yych <= '/') goto yy430; if (yych <= '9') goto yy544; goto yy430; yy1035: YYDEBUG(1035, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '9') { if (yych <= '-') { if (yych == '\t') goto yy399; if (yych <= ',') goto yy401; goto yy990; } else { if (yych <= '.') goto yy413; if (yych <= '/') goto yy411; if (yych <= '5') goto yy1005; goto yy680; } } else { if (yych <= 'q') { if (yych <= ':') goto yy422; if (yych == 'n') goto yy409; goto yy401; } else { if (yych <= 'r') goto yy410; if (yych <= 's') goto yy403; if (yych <= 't') goto yy407; goto yy401; } } yy1036: YYDEBUG(1036, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '9') { if (yych <= '-') { if (yych == '\t') goto yy991; if (yych <= ',') goto yy993; goto yy990; } else { if (yych <= '.') goto yy1003; if (yych <= '/') goto yy411; if (yych <= '5') goto yy1005; goto yy680; } } else { if (yych <= 'q') { if (yych <= ':') goto yy1004; if (yych == 'n') goto yy409; goto yy993; } else { if (yych <= 'r') goto yy410; if (yych <= 's') goto yy403; if (yych <= 't') goto yy407; goto yy993; } } yy1037: YYDEBUG(1037, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'E') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'D') goto yy141; } } else { if (yych <= 'd') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; goto yy141; } else { if (yych <= 'e') goto yy1038; if (yych <= 'z') goto yy141; goto yy3; } } yy1038: YYDEBUG(1038, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'V') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'U') goto yy142; } } else { if (yych <= 'u') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy3; goto yy142; } else { if (yych <= 'v') goto yy1039; if (yych <= 'z') goto yy142; goto yy3; } } yy1039: YYDEBUG(1039, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'I') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'H') goto yy143; } } else { if (yych <= 'h') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 'i') goto yy1040; if (yych <= 'z') goto yy143; goto yy3; } } yy1040: YYDEBUG(1040, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'O') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'N') goto yy144; } } else { if (yych <= 'n') { if (yych <= 'Z') goto yy144; if (yych <= '`') goto yy3; goto yy144; } else { if (yych <= 'o') goto yy1041; if (yych <= 'z') goto yy144; goto yy3; } } yy1041: YYDEBUG(1041, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'T') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'U') goto yy1042; if (yych != 'u') goto yy3; } yy1042: YYDEBUG(1042, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'S') goto yy1043; if (yych != 's') goto yy56; yy1043: YYDEBUG(1043, *YYCURSOR); yych = *++YYCURSOR; if (yych == '\t') goto yy1044; if (yych != ' ') goto yy56; yy1044: YYDEBUG(1044, *YYCURSOR); ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 11) YYFILL(11); yych = *YYCURSOR; yy1045: YYDEBUG(1045, *YYCURSOR); if (yych <= 'W') { if (yych <= 'F') { if (yych <= ' ') { if (yych == '\t') goto yy1044; if (yych <= 0x1F) goto yy56; goto yy1044; } else { if (yych == 'D') goto yy1049; if (yych <= 'E') goto yy56; goto yy1050; } } else { if (yych <= 'M') { if (yych == 'H') goto yy1048; if (yych <= 'L') goto yy56; goto yy1047; } else { if (yych <= 'S') { if (yych <= 'R') goto yy56; } else { if (yych <= 'T') goto yy1053; if (yych <= 'V') goto yy56; goto yy1052; } } } } else { if (yych <= 'l') { if (yych <= 'd') { if (yych == 'Y') goto yy1051; if (yych <= 'c') goto yy56; goto yy1049; } else { if (yych <= 'f') { if (yych <= 'e') goto yy56; goto yy1050; } else { if (yych == 'h') goto yy1048; goto yy56; } } } else { if (yych <= 't') { if (yych <= 'm') goto yy1047; if (yych <= 'r') goto yy56; if (yych >= 't') goto yy1053; } else { if (yych <= 'w') { if (yych <= 'v') goto yy56; goto yy1052; } else { if (yych == 'y') goto yy1051; goto yy56; } } } } yy1046: YYDEBUG(1046, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych <= 'D') { if (yych == 'A') goto yy1118; goto yy56; } else { if (yych <= 'E') goto yy1119; if (yych <= 'T') goto yy56; goto yy1117; } } else { if (yych <= 'd') { if (yych == 'a') goto yy1118; goto yy56; } else { if (yych <= 'e') goto yy1119; if (yych == 'u') goto yy1117; goto yy56; } } yy1047: YYDEBUG(1047, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'O') { if (yych == 'I') goto yy1109; if (yych <= 'N') goto yy56; goto yy1108; } else { if (yych <= 'i') { if (yych <= 'h') goto yy56; goto yy1109; } else { if (yych == 'o') goto yy1108; goto yy56; } } yy1048: YYDEBUG(1048, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'O') goto yy1106; if (yych == 'o') goto yy1106; goto yy56; yy1049: YYDEBUG(1049, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy1105; if (yych == 'a') goto yy1105; goto yy56; yy1050: YYDEBUG(1050, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'R') { if (yych == 'O') goto yy1090; if (yych <= 'Q') goto yy56; goto yy1089; } else { if (yych <= 'o') { if (yych <= 'n') goto yy56; goto yy1090; } else { if (yych == 'r') goto yy1089; goto yy56; } } yy1051: YYDEBUG(1051, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy1086; if (yych == 'e') goto yy1086; goto yy56; yy1052: YYDEBUG(1052, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy1072; if (yych == 'e') goto yy1072; goto yy56; yy1053: YYDEBUG(1053, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych == 'H') goto yy1054; if (yych <= 'T') goto yy56; goto yy1055; } else { if (yych <= 'h') { if (yych <= 'g') goto yy56; } else { if (yych == 'u') goto yy1055; goto yy56; } } yy1054: YYDEBUG(1054, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'U') goto yy1067; if (yych == 'u') goto yy1067; goto yy56; yy1055: YYDEBUG(1055, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy1056; if (yych != 'e') goto yy56; yy1056: YYDEBUG(1056, *YYCURSOR); yyaccept = 25; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ' ') { if (yych == '\t') goto yy1058; if (yych >= ' ') goto yy1058; } else { if (yych <= 'S') { if (yych >= 'S') goto yy1060; } else { if (yych == 's') goto yy1060; } } yy1057: YYDEBUG(1057, *YYCURSOR); { timelib_sll i; int behavior = 0; DEBUG_OUTPUT("relativetext"); TIMELIB_INIT; TIMELIB_HAVE_RELATIVE(); while(*ptr) { i = timelib_get_relative_text((char **) &ptr, &behavior); timelib_eat_spaces((char **) &ptr); timelib_set_relative((char **) &ptr, i, behavior, s); } TIMELIB_DEINIT; return TIMELIB_RELATIVE; } yy1058: YYDEBUG(1058, *YYCURSOR); ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; YYDEBUG(1059, *YYCURSOR); if (yych <= ' ') { if (yych == '\t') goto yy1058; if (yych <= 0x1F) goto yy56; goto yy1058; } else { if (yych <= 'O') { if (yych <= 'N') goto yy56; goto yy1064; } else { if (yych == 'o') goto yy1064; goto yy56; } } yy1060: YYDEBUG(1060, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'D') goto yy1061; if (yych != 'd') goto yy56; yy1061: YYDEBUG(1061, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy1062; if (yych != 'a') goto yy56; yy1062: YYDEBUG(1062, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy1063; if (yych != 'y') goto yy56; yy1063: YYDEBUG(1063, *YYCURSOR); yyaccept = 25; yych = *(YYMARKER = ++YYCURSOR); if (yych == '\t') goto yy1058; if (yych == ' ') goto yy1058; goto yy1057; yy1064: YYDEBUG(1064, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'F') goto yy1065; if (yych != 'f') goto yy56; yy1065: YYDEBUG(1065, *YYCURSOR); ++YYCURSOR; YYDEBUG(1066, *YYCURSOR); { timelib_sll i; int behavior = 0; DEBUG_OUTPUT("weekdayof"); TIMELIB_INIT; TIMELIB_HAVE_RELATIVE(); TIMELIB_HAVE_SPECIAL_RELATIVE(); i = timelib_get_relative_text((char **) &ptr, &behavior); timelib_eat_spaces((char **) &ptr); if (i > 0) { /* first, second... etc */ s->time->relative.special.type = TIMELIB_SPECIAL_DAY_OF_WEEK_IN_MONTH; timelib_set_relative((char **) &ptr, i, 1, s); } else { /* last */ s->time->relative.special.type = TIMELIB_SPECIAL_LAST_DAY_OF_WEEK_IN_MONTH; timelib_set_relative((char **) &ptr, i, behavior, s); } TIMELIB_DEINIT; return TIMELIB_WEEK_DAY_OF_MONTH; } yy1067: YYDEBUG(1067, *YYCURSOR); yyaccept = 25; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ' ') { if (yych == '\t') goto yy1058; if (yych <= 0x1F) goto yy1057; goto yy1058; } else { if (yych <= 'R') { if (yych <= 'Q') goto yy1057; } else { if (yych != 'r') goto yy1057; } } YYDEBUG(1068, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'S') goto yy1069; if (yych != 's') goto yy56; yy1069: YYDEBUG(1069, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'D') goto yy1070; if (yych != 'd') goto yy56; yy1070: YYDEBUG(1070, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy1071; if (yych != 'a') goto yy56; yy1071: YYDEBUG(1071, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy1063; if (yych == 'y') goto yy1063; goto yy56; yy1072: YYDEBUG(1072, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'E') { if (yych <= 'C') goto yy56; if (yych <= 'D') goto yy1074; } else { if (yych <= 'c') goto yy56; if (yych <= 'd') goto yy1074; if (yych >= 'f') goto yy56; } YYDEBUG(1073, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'K') goto yy1080; if (yych == 'k') goto yy1080; goto yy56; yy1074: YYDEBUG(1074, *YYCURSOR); yyaccept = 25; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ' ') { if (yych == '\t') goto yy1058; if (yych <= 0x1F) goto yy1057; goto yy1058; } else { if (yych <= 'N') { if (yych <= 'M') goto yy1057; } else { if (yych != 'n') goto yy1057; } } YYDEBUG(1075, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy1076; if (yych != 'e') goto yy56; yy1076: YYDEBUG(1076, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'S') goto yy1077; if (yych != 's') goto yy56; yy1077: YYDEBUG(1077, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'D') goto yy1078; if (yych != 'd') goto yy56; yy1078: YYDEBUG(1078, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy1079; if (yych != 'a') goto yy56; yy1079: YYDEBUG(1079, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy1063; if (yych == 'y') goto yy1063; goto yy56; yy1080: YYDEBUG(1080, *YYCURSOR); yyaccept = 26; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { if (yych == 'D') goto yy1083; if (yych >= 'S') goto yy1082; } else { if (yych <= 'd') { if (yych >= 'd') goto yy1083; } else { if (yych == 's') goto yy1082; } } yy1081: YYDEBUG(1081, *YYCURSOR); { timelib_sll i; int behavior = 0; DEBUG_OUTPUT("relativetextweek"); TIMELIB_INIT; TIMELIB_HAVE_RELATIVE(); while(*ptr) { i = timelib_get_relative_text((char **) &ptr, &behavior); timelib_eat_spaces((char **) &ptr); timelib_set_relative((char **) &ptr, i, behavior, s); s->time->relative.weekday_behavior = 2; /* to handle the format weekday + last/this/next week */ if (s->time->relative.have_weekday_relative == 0) { TIMELIB_HAVE_WEEKDAY_RELATIVE(); s->time->relative.weekday = 1; } } TIMELIB_DEINIT; return TIMELIB_RELATIVE; } yy1082: YYDEBUG(1082, *YYCURSOR); yych = *++YYCURSOR; goto yy1057; yy1083: YYDEBUG(1083, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy1084; if (yych != 'a') goto yy56; yy1084: YYDEBUG(1084, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy1085; if (yych != 'y') goto yy56; yy1085: YYDEBUG(1085, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'S') goto yy1082; if (yych == 's') goto yy1082; goto yy1057; yy1086: YYDEBUG(1086, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy1087; if (yych != 'a') goto yy56; yy1087: YYDEBUG(1087, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy1088; if (yych != 'r') goto yy56; yy1088: YYDEBUG(1088, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'S') goto yy1082; if (yych == 's') goto yy1082; goto yy1057; yy1089: YYDEBUG(1089, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'I') goto yy1102; if (yych == 'i') goto yy1102; goto yy56; yy1090: YYDEBUG(1090, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy1091; if (yych != 'r') goto yy56; yy1091: YYDEBUG(1091, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'T') goto yy1092; if (yych != 't') goto yy56; yy1092: YYDEBUG(1092, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'N') { if (yych == 'H') goto yy1094; if (yych <= 'M') goto yy56; } else { if (yych <= 'h') { if (yych <= 'g') goto yy56; goto yy1094; } else { if (yych != 'n') goto yy56; } } YYDEBUG(1093, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'I') goto yy1099; if (yych == 'i') goto yy1099; goto yy56; yy1094: YYDEBUG(1094, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'N') goto yy1095; if (yych != 'n') goto yy56; yy1095: YYDEBUG(1095, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'I') goto yy1096; if (yych != 'i') goto yy56; yy1096: YYDEBUG(1096, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'G') goto yy1097; if (yych != 'g') goto yy56; yy1097: YYDEBUG(1097, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'H') goto yy1098; if (yych != 'h') goto yy56; yy1098: YYDEBUG(1098, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'T') goto yy1088; if (yych == 't') goto yy1088; goto yy56; yy1099: YYDEBUG(1099, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'G') goto yy1100; if (yych != 'g') goto yy56; yy1100: YYDEBUG(1100, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'H') goto yy1101; if (yych != 'h') goto yy56; yy1101: YYDEBUG(1101, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'T') goto yy1088; if (yych == 't') goto yy1088; goto yy56; yy1102: YYDEBUG(1102, *YYCURSOR); yyaccept = 25; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ' ') { if (yych == '\t') goto yy1058; if (yych <= 0x1F) goto yy1057; goto yy1058; } else { if (yych <= 'D') { if (yych <= 'C') goto yy1057; } else { if (yych != 'd') goto yy1057; } } YYDEBUG(1103, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy1104; if (yych != 'a') goto yy56; yy1104: YYDEBUG(1104, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy1063; if (yych == 'y') goto yy1063; goto yy56; yy1105: YYDEBUG(1105, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy1088; if (yych == 'y') goto yy1088; goto yy56; yy1106: YYDEBUG(1106, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'U') goto yy1107; if (yych != 'u') goto yy56; yy1107: YYDEBUG(1107, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy1088; if (yych == 'r') goto yy1088; goto yy56; yy1108: YYDEBUG(1108, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'N') goto yy1113; if (yych == 'n') goto yy1113; goto yy56; yy1109: YYDEBUG(1109, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'N') goto yy1110; if (yych != 'n') goto yy56; yy1110: YYDEBUG(1110, *YYCURSOR); yyaccept = 25; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'U') { if (yych == 'S') goto yy1082; if (yych <= 'T') goto yy1057; } else { if (yych <= 's') { if (yych <= 'r') goto yy1057; goto yy1082; } else { if (yych != 'u') goto yy1057; } } YYDEBUG(1111, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'T') goto yy1112; if (yych != 't') goto yy56; yy1112: YYDEBUG(1112, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy1088; if (yych == 'e') goto yy1088; goto yy56; yy1113: YYDEBUG(1113, *YYCURSOR); yyaccept = 25; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'D') { if (yych <= 0x1F) { if (yych == '\t') goto yy1058; goto yy1057; } else { if (yych <= ' ') goto yy1058; if (yych <= 'C') goto yy1057; } } else { if (yych <= 'c') { if (yych == 'T') goto yy1115; goto yy1057; } else { if (yych <= 'd') goto yy1114; if (yych == 't') goto yy1115; goto yy1057; } } yy1114: YYDEBUG(1114, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy1116; if (yych == 'a') goto yy1116; goto yy56; yy1115: YYDEBUG(1115, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'H') goto yy1088; if (yych == 'h') goto yy1088; goto yy56; yy1116: YYDEBUG(1116, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy1063; if (yych == 'y') goto yy1063; goto yy56; yy1117: YYDEBUG(1117, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'N') goto yy1128; if (yych == 'n') goto yy1128; goto yy56; yy1118: YYDEBUG(1118, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'T') goto yy1123; if (yych == 't') goto yy1123; goto yy56; yy1119: YYDEBUG(1119, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'C') goto yy1120; if (yych != 'c') goto yy56; yy1120: YYDEBUG(1120, *YYCURSOR); yyaccept = 25; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { if (yych == 'O') goto yy1121; if (yych <= 'R') goto yy1057; goto yy1082; } else { if (yych <= 'o') { if (yych <= 'n') goto yy1057; } else { if (yych == 's') goto yy1082; goto yy1057; } } yy1121: YYDEBUG(1121, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'N') goto yy1122; if (yych != 'n') goto yy56; yy1122: YYDEBUG(1122, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'D') goto yy1088; if (yych == 'd') goto yy1088; goto yy56; yy1123: YYDEBUG(1123, *YYCURSOR); yyaccept = 25; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ' ') { if (yych == '\t') goto yy1058; if (yych <= 0x1F) goto yy1057; goto yy1058; } else { if (yych <= 'U') { if (yych <= 'T') goto yy1057; } else { if (yych != 'u') goto yy1057; } } YYDEBUG(1124, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy1125; if (yych != 'r') goto yy56; yy1125: YYDEBUG(1125, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'D') goto yy1126; if (yych != 'd') goto yy56; yy1126: YYDEBUG(1126, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy1127; if (yych != 'a') goto yy56; yy1127: YYDEBUG(1127, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy1063; if (yych == 'y') goto yy1063; goto yy56; yy1128: YYDEBUG(1128, *YYCURSOR); yyaccept = 25; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ' ') { if (yych == '\t') goto yy1058; if (yych <= 0x1F) goto yy1057; goto yy1058; } else { if (yych <= 'D') { if (yych <= 'C') goto yy1057; } else { if (yych != 'd') goto yy1057; } } YYDEBUG(1129, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy1130; if (yych != 'a') goto yy56; yy1130: YYDEBUG(1130, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy1063; if (yych == 'y') goto yy1063; goto yy56; yy1131: YYDEBUG(1131, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'D') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy141; } } else { if (yych <= '_') { if (yych <= 'E') goto yy1038; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'd') { if (yych <= '`') goto yy3; goto yy146; } else { if (yych <= 'e') goto yy1132; if (yych <= 'z') goto yy146; goto yy3; } } } yy1132: YYDEBUG(1132, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'U') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy142; } } else { if (yych <= '_') { if (yych <= 'V') goto yy1039; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'u') { if (yych <= '`') goto yy3; goto yy150; } else { if (yych <= 'v') goto yy1133; if (yych <= 'z') goto yy150; goto yy3; } } } yy1133: YYDEBUG(1133, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'H') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'I') goto yy1040; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'h') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 'i') goto yy1134; if (yych <= 'z') goto yy151; goto yy3; } } } yy1134: YYDEBUG(1134, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'N') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy144; } } else { if (yych <= '_') { if (yych <= 'O') goto yy1041; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'n') { if (yych <= '`') goto yy3; goto yy152; } else { if (yych <= 'o') goto yy1135; if (yych <= 'z') goto yy152; goto yy3; } } } yy1135: YYDEBUG(1135, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'T') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; if (yych <= '/') goto yy147; goto yy3; } } else { if (yych <= '`') { if (yych <= 'U') goto yy1042; if (yych == '_') goto yy147; goto yy3; } else { if (yych == 'u') goto yy1136; if (yych <= 'z') goto yy153; goto yy3; } } yy1136: YYDEBUG(1136, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'S') goto yy1043; if (yych != 's') goto yy154; YYDEBUG(1137, *YYCURSOR); yych = *++YYCURSOR; if (yybm[0+yych] & 16) { goto yy153; } if (yych <= ',') { if (yych <= '\t') { if (yych <= 0x08) goto yy56; goto yy1044; } else { if (yych == ' ') goto yy1044; goto yy56; } } else { if (yych <= '/') { if (yych == '.') goto yy56; goto yy147; } else { if (yych == '_') goto yy147; goto yy56; } } yy1138: YYDEBUG(1138, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'G') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'F') goto yy141; goto yy1152; } } else { if (yych <= 'f') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; goto yy141; } else { if (yych <= 'g') goto yy1152; if (yych <= 'z') goto yy141; goto yy3; } } yy1139: YYDEBUG(1139, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'E') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'D') goto yy141; } } else { if (yych <= 'd') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; goto yy141; } else { if (yych <= 'e') goto yy1140; if (yych <= 'z') goto yy141; goto yy3; } } yy1140: YYDEBUG(1140, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'V') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'U') goto yy142; } } else { if (yych <= 'u') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy3; goto yy142; } else { if (yych <= 'v') goto yy1141; if (yych <= 'z') goto yy142; goto yy3; } } yy1141: YYDEBUG(1141, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'E') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'D') goto yy143; } } else { if (yych <= 'd') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 'e') goto yy1142; if (yych <= 'z') goto yy143; goto yy3; } } yy1142: YYDEBUG(1142, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'N') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'M') goto yy144; } } else { if (yych <= 'm') { if (yych <= 'Z') goto yy144; if (yych <= '`') goto yy3; goto yy144; } else { if (yych <= 'n') goto yy1143; if (yych <= 'z') goto yy144; goto yy3; } } yy1143: YYDEBUG(1143, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'T') goto yy1144; if (yych != 't') goto yy3; } yy1144: YYDEBUG(1144, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'H') goto yy1145; if (yych != 'h') goto yy56; yy1145: YYDEBUG(1145, *YYCURSOR); yych = *++YYCURSOR; if (yych == '\t') goto yy1146; if (yych != ' ') goto yy56; yy1146: YYDEBUG(1146, *YYCURSOR); ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 11) YYFILL(11); yych = *YYCURSOR; yy1147: YYDEBUG(1147, *YYCURSOR); if (yych <= 'W') { if (yych <= 'F') { if (yych <= ' ') { if (yych == '\t') goto yy1146; if (yych <= 0x1F) goto yy56; goto yy1146; } else { if (yych == 'D') goto yy1049; if (yych <= 'E') goto yy56; goto yy1050; } } else { if (yych <= 'M') { if (yych == 'H') goto yy1048; if (yych <= 'L') goto yy56; goto yy1047; } else { if (yych <= 'S') { if (yych <= 'R') goto yy56; goto yy1046; } else { if (yych <= 'T') goto yy1053; if (yych <= 'V') goto yy56; } } } } else { if (yych <= 'l') { if (yych <= 'd') { if (yych == 'Y') goto yy1051; if (yych <= 'c') goto yy56; goto yy1049; } else { if (yych <= 'f') { if (yych <= 'e') goto yy56; goto yy1050; } else { if (yych == 'h') goto yy1048; goto yy56; } } } else { if (yych <= 't') { if (yych <= 'm') goto yy1047; if (yych <= 'r') goto yy56; if (yych <= 's') goto yy1046; goto yy1053; } else { if (yych <= 'w') { if (yych <= 'v') goto yy56; } else { if (yych == 'y') goto yy1051; goto yy56; } } } } YYDEBUG(1148, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy1149; if (yych != 'e') goto yy56; yy1149: YYDEBUG(1149, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'E') { if (yych <= 'C') goto yy56; if (yych <= 'D') goto yy1074; } else { if (yych <= 'c') goto yy56; if (yych <= 'd') goto yy1074; if (yych >= 'f') goto yy56; } YYDEBUG(1150, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'K') goto yy1151; if (yych != 'k') goto yy56; yy1151: YYDEBUG(1151, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'S') { if (yych == 'D') goto yy1083; if (yych <= 'R') goto yy56; goto yy1082; } else { if (yych <= 'd') { if (yych <= 'c') goto yy56; goto yy1083; } else { if (yych == 's') goto yy1082; goto yy56; } } yy1152: YYDEBUG(1152, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'H') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'G') goto yy142; } } else { if (yych <= 'g') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy3; goto yy142; } else { if (yych <= 'h') goto yy1153; if (yych <= 'z') goto yy142; goto yy3; } } yy1153: YYDEBUG(1153, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'S') goto yy143; } } else { if (yych <= 's') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 't') goto yy1154; if (yych <= 'z') goto yy143; goto yy3; } } yy1154: YYDEBUG(1154, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '@') { if (yych <= 0x1F) { if (yych == '\t') goto yy1146; goto yy3; } else { if (yych <= ' ') goto yy1146; if (yych == ')') goto yy139; goto yy3; } } else { if (yych <= '`') { if (yych == 'H') goto yy1155; if (yych <= 'Z') goto yy144; goto yy3; } else { if (yych == 'h') goto yy1155; if (yych <= 'z') goto yy144; goto yy3; } } yy1155: YYDEBUG(1155, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 0x1F) { if (yych == '\t') goto yy1146; goto yy3; } else { if (yych <= ' ') goto yy1146; if (yych == ')') goto yy139; goto yy3; } yy1156: YYDEBUG(1156, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'F') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy141; } } else { if (yych <= '_') { if (yych <= 'G') goto yy1152; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'f') { if (yych <= '`') goto yy3; goto yy146; } else { if (yych <= 'g') goto yy1164; if (yych <= 'z') goto yy146; goto yy3; } } } yy1157: YYDEBUG(1157, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'D') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy141; } } else { if (yych <= '_') { if (yych <= 'E') goto yy1140; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'd') { if (yych <= '`') goto yy3; goto yy146; } else { if (yych <= 'e') goto yy1158; if (yych <= 'z') goto yy146; goto yy3; } } } yy1158: YYDEBUG(1158, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'U') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy142; } } else { if (yych <= '_') { if (yych <= 'V') goto yy1141; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'u') { if (yych <= '`') goto yy3; goto yy150; } else { if (yych <= 'v') goto yy1159; if (yych <= 'z') goto yy150; goto yy3; } } } yy1159: YYDEBUG(1159, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'D') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'E') goto yy1142; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'd') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 'e') goto yy1160; if (yych <= 'z') goto yy151; goto yy3; } } } yy1160: YYDEBUG(1160, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'M') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy144; } } else { if (yych <= '_') { if (yych <= 'N') goto yy1143; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'm') { if (yych <= '`') goto yy3; goto yy152; } else { if (yych <= 'n') goto yy1161; if (yych <= 'z') goto yy152; goto yy3; } } } yy1161: YYDEBUG(1161, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; if (yych <= '/') goto yy147; goto yy3; } } else { if (yych <= '`') { if (yych <= 'T') goto yy1144; if (yych == '_') goto yy147; goto yy3; } else { if (yych == 't') goto yy1162; if (yych <= 'z') goto yy153; goto yy3; } } yy1162: YYDEBUG(1162, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'H') goto yy1145; if (yych != 'h') goto yy154; yy1163: YYDEBUG(1163, *YYCURSOR); yych = *++YYCURSOR; if (yybm[0+yych] & 16) { goto yy153; } if (yych <= ',') { if (yych <= '\t') { if (yych <= 0x08) goto yy56; goto yy1146; } else { if (yych == ' ') goto yy1146; goto yy56; } } else { if (yych <= '/') { if (yych == '.') goto yy56; goto yy147; } else { if (yych == '_') goto yy147; goto yy56; } } yy1164: YYDEBUG(1164, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'G') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy142; } } else { if (yych <= '_') { if (yych <= 'H') goto yy1153; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'g') { if (yych <= '`') goto yy3; goto yy150; } else { if (yych <= 'h') goto yy1165; if (yych <= 'z') goto yy150; goto yy3; } } } yy1165: YYDEBUG(1165, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'T') goto yy1154; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 's') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 't') goto yy1166; if (yych <= 'z') goto yy151; goto yy3; } } } yy1166: YYDEBUG(1166, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy3; goto yy1146; } else { if (yych == ' ') goto yy1146; goto yy3; } } else { if (yych <= ',') { if (yych <= ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; goto yy147; } } } else { if (yych <= '^') { if (yych <= 'G') { if (yych <= '@') goto yy3; goto yy144; } else { if (yych <= 'H') goto yy1155; if (yych <= 'Z') goto yy144; goto yy3; } } else { if (yych <= 'g') { if (yych <= '_') goto yy147; if (yych <= '`') goto yy3; goto yy152; } else { if (yych <= 'h') goto yy1167; if (yych <= 'z') goto yy152; goto yy3; } } } yy1167: YYDEBUG(1167, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 16) { goto yy153; } if (yych <= ')') { if (yych <= 0x1F) { if (yych == '\t') goto yy1146; goto yy3; } else { if (yych <= ' ') goto yy1146; if (yych <= '(') goto yy3; goto yy139; } } else { if (yych <= '.') { if (yych == '-') goto yy147; goto yy3; } else { if (yych <= '/') goto yy147; if (yych == '_') goto yy147; goto yy3; } } yy1168: YYDEBUG(1168, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'V') { if (yych <= 'B') { if (yych == ')') goto yy139; if (yych <= '@') goto yy3; goto yy141; } else { if (yych <= 'O') { if (yych <= 'C') goto yy1184; goto yy141; } else { if (yych <= 'P') goto yy1186; if (yych <= 'U') goto yy141; goto yy1185; } } } else { if (yych <= 'o') { if (yych <= '`') { if (yych <= 'Z') goto yy141; goto yy3; } else { if (yych == 'c') goto yy1184; goto yy141; } } else { if (yych <= 'u') { if (yych <= 'p') goto yy1186; goto yy141; } else { if (yych <= 'v') goto yy1185; if (yych <= 'z') goto yy141; goto yy3; } } } yy1169: YYDEBUG(1169, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'S') goto yy141; goto yy1179; } } else { if (yych <= 's') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; goto yy141; } else { if (yych <= 't') goto yy1179; if (yych <= 'z') goto yy141; goto yy3; } } yy1170: YYDEBUG(1170, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'X') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'W') goto yy141; goto yy1176; } } else { if (yych <= 'w') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; goto yy141; } else { if (yych <= 'x') goto yy1176; if (yych <= 'z') goto yy141; goto yy3; } } yy1171: YYDEBUG(1171, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'N') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'M') goto yy141; } } else { if (yych <= 'm') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; goto yy141; } else { if (yych <= 'n') goto yy1172; if (yych <= 'z') goto yy141; goto yy3; } } yy1172: YYDEBUG(1172, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'D') { if (yych <= ')') { if (yych <= '(') goto yy166; goto yy139; } else { if (yych <= '@') goto yy166; if (yych <= 'C') goto yy142; } } else { if (yych <= 'c') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy166; goto yy142; } else { if (yych <= 'd') goto yy1173; if (yych <= 'z') goto yy142; goto yy166; } } yy1173: YYDEBUG(1173, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'A') { if (yych == ')') goto yy139; if (yych <= '@') goto yy3; } else { if (yych <= '`') { if (yych <= 'Z') goto yy143; goto yy3; } else { if (yych <= 'a') goto yy1174; if (yych <= 'z') goto yy143; goto yy3; } } yy1174: YYDEBUG(1174, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'Y') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'X') goto yy144; } } else { if (yych <= 'x') { if (yych <= 'Z') goto yy144; if (yych <= '`') goto yy3; goto yy144; } else { if (yych <= 'y') goto yy1175; if (yych <= 'z') goto yy144; goto yy3; } } yy1175: YYDEBUG(1175, *YYCURSOR); yych = *++YYCURSOR; if (yych == ')') goto yy139; goto yy166; yy1176: YYDEBUG(1176, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'S') goto yy142; } } else { if (yych <= 's') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy3; goto yy142; } else { if (yych <= 't') goto yy1177; if (yych <= 'z') goto yy142; goto yy3; } } yy1177: YYDEBUG(1177, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'H') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'G') goto yy143; } } else { if (yych <= 'g') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 'h') goto yy1178; if (yych <= 'z') goto yy143; goto yy3; } } yy1178: YYDEBUG(1178, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy3; goto yy1146; } else { if (yych == ' ') goto yy1146; goto yy3; } } else { if (yych <= 'Z') { if (yych <= ')') goto yy139; if (yych <= '@') goto yy3; goto yy144; } else { if (yych <= '`') goto yy3; if (yych <= 'z') goto yy144; goto yy3; } } yy1179: YYDEBUG(1179, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych <= ')') { if (yych <= '(') goto yy166; goto yy139; } else { if (yych <= '@') goto yy166; if (yych <= 'T') goto yy142; } } else { if (yych <= 't') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy166; goto yy142; } else { if (yych <= 'u') goto yy1180; if (yych <= 'z') goto yy142; goto yy166; } } yy1180: YYDEBUG(1180, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'R') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'Q') goto yy143; } } else { if (yych <= 'q') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 'r') goto yy1181; if (yych <= 'z') goto yy143; goto yy3; } } yy1181: YYDEBUG(1181, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'D') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'C') goto yy144; } } else { if (yych <= 'c') { if (yych <= 'Z') goto yy144; if (yych <= '`') goto yy3; goto yy144; } else { if (yych <= 'd') goto yy1182; if (yych <= 'z') goto yy144; goto yy3; } } yy1182: YYDEBUG(1182, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '@') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'A') goto yy1183; if (yych != 'a') goto yy3; } yy1183: YYDEBUG(1183, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy172; if (yych == 'y') goto yy172; goto yy56; yy1184: YYDEBUG(1184, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'O') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'N') goto yy142; goto yy1195; } } else { if (yych <= 'n') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy3; goto yy142; } else { if (yych <= 'o') goto yy1195; if (yych <= 'z') goto yy142; goto yy3; } } yy1185: YYDEBUG(1185, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'E') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'D') goto yy142; goto yy1192; } } else { if (yych <= 'd') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy3; goto yy142; } else { if (yych <= 'e') goto yy1192; if (yych <= 'z') goto yy142; goto yy3; } } yy1186: YYDEBUG(1186, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy193; goto yy195; } else { if (yych == ' ') goto yy195; goto yy193; } } else { if (yych <= ',') { if (yych <= ')') goto yy139; goto yy193; } else { if (yych <= '-') goto yy196; if (yych <= '.') goto yy195; goto yy193; } } } else { if (yych <= 'Z') { if (yych <= '@') { if (yych <= '9') goto yy195; goto yy193; } else { if (yych != 'T') goto yy142; } } else { if (yych <= 's') { if (yych <= '`') goto yy193; goto yy142; } else { if (yych <= 't') goto yy1187; if (yych <= 'z') goto yy142; goto yy193; } } } yy1187: YYDEBUG(1187, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy193; goto yy195; } else { if (yych == ' ') goto yy195; goto yy193; } } else { if (yych <= ',') { if (yych <= ')') goto yy139; goto yy193; } else { if (yych <= '-') goto yy196; if (yych <= '.') goto yy195; goto yy193; } } } else { if (yych <= 'Z') { if (yych <= '@') { if (yych <= '9') goto yy195; goto yy193; } else { if (yych != 'E') goto yy143; } } else { if (yych <= 'd') { if (yych <= '`') goto yy193; goto yy143; } else { if (yych <= 'e') goto yy1188; if (yych <= 'z') goto yy143; goto yy193; } } } yy1188: YYDEBUG(1188, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'M') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'L') goto yy144; } } else { if (yych <= 'l') { if (yych <= 'Z') goto yy144; if (yych <= '`') goto yy3; goto yy144; } else { if (yych <= 'm') goto yy1189; if (yych <= 'z') goto yy144; goto yy3; } } yy1189: YYDEBUG(1189, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'A') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'B') goto yy1190; if (yych != 'b') goto yy3; } yy1190: YYDEBUG(1190, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy1191; if (yych != 'e') goto yy56; yy1191: YYDEBUG(1191, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy204; if (yych == 'r') goto yy204; goto yy56; yy1192: YYDEBUG(1192, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'N') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'M') goto yy143; } } else { if (yych <= 'm') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 'n') goto yy1193; if (yych <= 'z') goto yy143; goto yy3; } } yy1193: YYDEBUG(1193, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'S') goto yy144; } } else { if (yych <= 's') { if (yych <= 'Z') goto yy144; if (yych <= '`') goto yy3; goto yy144; } else { if (yych <= 't') goto yy1194; if (yych <= 'z') goto yy144; goto yy3; } } yy1194: YYDEBUG(1194, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'G') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'H') goto yy1145; if (yych == 'h') goto yy1145; goto yy3; } yy1195: YYDEBUG(1195, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'N') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'M') goto yy143; } } else { if (yych <= 'm') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 'n') goto yy1196; if (yych <= 'z') goto yy143; goto yy3; } } yy1196: YYDEBUG(1196, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'D') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'C') goto yy144; goto yy1155; } } else { if (yych <= 'c') { if (yych <= 'Z') goto yy144; if (yych <= '`') goto yy3; goto yy144; } else { if (yych <= 'd') goto yy1155; if (yych <= 'z') goto yy144; goto yy3; } } yy1197: YYDEBUG(1197, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'U') { if (yych <= '/') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; goto yy147; } } else { if (yych <= 'C') { if (yych <= '@') goto yy3; if (yych <= 'B') goto yy141; goto yy1184; } else { if (yych == 'P') goto yy1186; goto yy141; } } } else { if (yych <= 'b') { if (yych <= '^') { if (yych <= 'V') goto yy1185; if (yych <= 'Z') goto yy141; goto yy3; } else { if (yych <= '_') goto yy147; if (yych <= '`') goto yy3; goto yy146; } } else { if (yych <= 'p') { if (yych <= 'c') goto yy1213; if (yych <= 'o') goto yy146; goto yy1215; } else { if (yych == 'v') goto yy1214; if (yych <= 'z') goto yy146; goto yy3; } } } yy1198: YYDEBUG(1198, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy141; } } else { if (yych <= '_') { if (yych <= 'T') goto yy1179; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 's') { if (yych <= '`') goto yy3; goto yy146; } else { if (yych <= 't') goto yy1208; if (yych <= 'z') goto yy146; goto yy3; } } } yy1199: YYDEBUG(1199, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'W') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy141; } } else { if (yych <= '_') { if (yych <= 'X') goto yy1176; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'w') { if (yych <= '`') goto yy3; goto yy146; } else { if (yych <= 'x') goto yy1205; if (yych <= 'z') goto yy146; goto yy3; } } } yy1200: YYDEBUG(1200, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'M') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy141; } } else { if (yych <= '_') { if (yych <= 'N') goto yy1172; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'm') { if (yych <= '`') goto yy3; goto yy146; } else { if (yych <= 'n') goto yy1201; if (yych <= 'z') goto yy146; goto yy3; } } } yy1201: YYDEBUG(1201, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'C') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy166; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy166; goto yy142; } } else { if (yych <= '_') { if (yych <= 'D') goto yy1173; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy166; goto yy147; } else { if (yych <= 'c') { if (yych <= '`') goto yy166; goto yy150; } else { if (yych <= 'd') goto yy1202; if (yych <= 'z') goto yy150; goto yy166; } } } yy1202: YYDEBUG(1202, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '@') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; if (yych <= '/') goto yy147; goto yy3; } } else { if (yych <= '_') { if (yych <= 'A') goto yy1174; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= '`') goto yy3; if (yych <= 'a') goto yy1203; if (yych <= 'z') goto yy151; goto yy3; } } yy1203: YYDEBUG(1203, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'X') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy144; } } else { if (yych <= '_') { if (yych <= 'Y') goto yy1175; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'x') { if (yych <= '`') goto yy3; goto yy152; } else { if (yych <= 'y') goto yy1204; if (yych <= 'z') goto yy152; goto yy3; } } } yy1204: YYDEBUG(1204, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 16) { goto yy153; } if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy166; goto yy147; } else { if (yych <= '/') { if (yych <= '.') goto yy166; goto yy147; } else { if (yych == '_') goto yy147; goto yy166; } } yy1205: YYDEBUG(1205, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy142; } } else { if (yych <= '_') { if (yych <= 'T') goto yy1177; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 's') { if (yych <= '`') goto yy3; goto yy150; } else { if (yych <= 't') goto yy1206; if (yych <= 'z') goto yy150; goto yy3; } } } yy1206: YYDEBUG(1206, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'G') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'H') goto yy1178; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'g') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 'h') goto yy1207; if (yych <= 'z') goto yy151; goto yy3; } } } yy1207: YYDEBUG(1207, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '-') { if (yych <= ' ') { if (yych == '\t') goto yy1146; if (yych <= 0x1F) goto yy3; goto yy1146; } else { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } } else { if (yych <= 'Z') { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy144; } else { if (yych <= '_') { if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= '`') goto yy3; if (yych <= 'z') goto yy152; goto yy3; } } } yy1208: YYDEBUG(1208, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'T') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy166; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy166; goto yy142; } } else { if (yych <= '_') { if (yych <= 'U') goto yy1180; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy166; goto yy147; } else { if (yych <= 't') { if (yych <= '`') goto yy166; goto yy150; } else { if (yych <= 'u') goto yy1209; if (yych <= 'z') goto yy150; goto yy166; } } } yy1209: YYDEBUG(1209, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'Q') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'R') goto yy1181; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'q') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 'r') goto yy1210; if (yych <= 'z') goto yy151; goto yy3; } } } yy1210: YYDEBUG(1210, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'C') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy144; } } else { if (yych <= '_') { if (yych <= 'D') goto yy1182; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'c') { if (yych <= '`') goto yy3; goto yy152; } else { if (yych <= 'd') goto yy1211; if (yych <= 'z') goto yy152; goto yy3; } } } yy1211: YYDEBUG(1211, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '@') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; if (yych <= '/') goto yy147; goto yy3; } } else { if (yych <= '_') { if (yych <= 'A') goto yy1183; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= '`') goto yy3; if (yych <= 'a') goto yy1212; if (yych <= 'z') goto yy153; goto yy3; } } yy1212: YYDEBUG(1212, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy172; if (yych == 'y') goto yy185; goto yy154; yy1213: YYDEBUG(1213, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'N') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy142; } } else { if (yych <= '_') { if (yych <= 'O') goto yy1195; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'n') { if (yych <= '`') goto yy3; goto yy150; } else { if (yych <= 'o') goto yy1224; if (yych <= 'z') goto yy150; goto yy3; } } } yy1214: YYDEBUG(1214, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'D') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy142; } } else { if (yych <= '_') { if (yych <= 'E') goto yy1192; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'd') { if (yych <= '`') goto yy3; goto yy150; } else { if (yych <= 'e') goto yy1221; if (yych <= 'z') goto yy150; goto yy3; } } } yy1215: YYDEBUG(1215, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '9') { if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy193; goto yy195; } else { if (yych == ' ') goto yy195; goto yy193; } } else { if (yych <= '-') { if (yych <= ')') goto yy139; if (yych <= ',') goto yy193; goto yy311; } else { if (yych == '/') goto yy147; goto yy195; } } } else { if (yych <= '^') { if (yych <= 'S') { if (yych <= '@') goto yy193; goto yy142; } else { if (yych <= 'T') goto yy1187; if (yych <= 'Z') goto yy142; goto yy193; } } else { if (yych <= 's') { if (yych <= '_') goto yy147; if (yych <= '`') goto yy193; goto yy150; } else { if (yych <= 't') goto yy1216; if (yych <= 'z') goto yy150; goto yy193; } } } yy1216: YYDEBUG(1216, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '9') { if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy193; goto yy195; } else { if (yych == ' ') goto yy195; goto yy193; } } else { if (yych <= '-') { if (yych <= ')') goto yy139; if (yych <= ',') goto yy193; goto yy311; } else { if (yych == '/') goto yy147; goto yy195; } } } else { if (yych <= '^') { if (yych <= 'D') { if (yych <= '@') goto yy193; goto yy143; } else { if (yych <= 'E') goto yy1188; if (yych <= 'Z') goto yy143; goto yy193; } } else { if (yych <= 'd') { if (yych <= '_') goto yy147; if (yych <= '`') goto yy193; goto yy151; } else { if (yych <= 'e') goto yy1217; if (yych <= 'z') goto yy151; goto yy193; } } } yy1217: YYDEBUG(1217, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'L') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy144; } } else { if (yych <= '_') { if (yych <= 'M') goto yy1189; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'l') { if (yych <= '`') goto yy3; goto yy152; } else { if (yych <= 'm') goto yy1218; if (yych <= 'z') goto yy152; goto yy3; } } } yy1218: YYDEBUG(1218, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'A') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; if (yych <= '/') goto yy147; goto yy3; } } else { if (yych <= '`') { if (yych <= 'B') goto yy1190; if (yych == '_') goto yy147; goto yy3; } else { if (yych == 'b') goto yy1219; if (yych <= 'z') goto yy153; goto yy3; } } yy1219: YYDEBUG(1219, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'E') goto yy1191; if (yych != 'e') goto yy154; YYDEBUG(1220, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy204; if (yych == 'r') goto yy316; goto yy154; yy1221: YYDEBUG(1221, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'M') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'N') goto yy1193; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'm') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 'n') goto yy1222; if (yych <= 'z') goto yy151; goto yy3; } } } yy1222: YYDEBUG(1222, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy144; } } else { if (yych <= '_') { if (yych <= 'T') goto yy1194; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 's') { if (yych <= '`') goto yy3; goto yy152; } else { if (yych <= 't') goto yy1223; if (yych <= 'z') goto yy152; goto yy3; } } } yy1223: YYDEBUG(1223, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'G') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; if (yych <= '/') goto yy147; goto yy3; } } else { if (yych <= '`') { if (yych <= 'H') goto yy1145; if (yych == '_') goto yy147; goto yy3; } else { if (yych == 'h') goto yy1163; if (yych <= 'z') goto yy153; goto yy3; } } yy1224: YYDEBUG(1224, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'M') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'N') goto yy1196; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'm') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 'n') goto yy1225; if (yych <= 'z') goto yy151; goto yy3; } } } yy1225: YYDEBUG(1225, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'C') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy144; } } else { if (yych <= '_') { if (yych <= 'D') goto yy1155; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'c') { if (yych <= '`') goto yy3; goto yy152; } else { if (yych <= 'd') goto yy1167; if (yych <= 'z') goto yy152; goto yy3; } } } yy1226: YYDEBUG(1226, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'C') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'B') goto yy141; } } else { if (yych <= 'b') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; goto yy141; } else { if (yych <= 'c') goto yy1227; if (yych <= 'z') goto yy141; goto yy3; } } yy1227: YYDEBUG(1227, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'K') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'J') goto yy142; } } else { if (yych <= 'j') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy3; goto yy142; } else { if (yych <= 'k') goto yy1228; if (yych <= 'z') goto yy142; goto yy3; } } yy1228: YYDEBUG(1228, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ')') { if (yych == ' ') goto yy1229; if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= 'Z') { if (yych <= '@') goto yy3; goto yy143; } else { if (yych <= '`') goto yy3; if (yych <= 'z') goto yy143; goto yy3; } } yy1229: YYDEBUG(1229, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'O') goto yy1230; if (yych != 'o') goto yy56; yy1230: YYDEBUG(1230, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'F') goto yy1231; if (yych != 'f') goto yy56; yy1231: YYDEBUG(1231, *YYCURSOR); yych = *++YYCURSOR; if (yych != ' ') goto yy56; YYDEBUG(1232, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '1') goto yy1233; if (yych <= '2') goto yy1235; if (yych <= '9') goto yy1236; goto yy56; yy1233: YYDEBUG(1233, *YYCURSOR); yyaccept = 27; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '@') { if (yych <= 0x1F) { if (yych == '\t') goto yy1237; } else { if (yych <= ' ') goto yy1237; if (yych <= '/') goto yy1234; if (yych <= '9') goto yy1236; } } else { if (yych <= '`') { if (yych <= 'A') goto yy1239; if (yych == 'P') goto yy1239; } else { if (yych <= 'a') goto yy1239; if (yych == 'p') goto yy1239; } } yy1234: YYDEBUG(1234, *YYCURSOR); { DEBUG_OUTPUT("backof | frontof"); TIMELIB_INIT; TIMELIB_UNHAVE_TIME(); TIMELIB_HAVE_TIME(); if (*ptr == 'b') { s->time->h = timelib_get_nr((char **) &ptr, 2); s->time->i = 15; } else { s->time->h = timelib_get_nr((char **) &ptr, 2) - 1; s->time->i = 45; } if (*ptr != '\0' ) { timelib_eat_spaces((char **) &ptr); s->time->h += timelib_meridian((char **) &ptr, s->time->h); } TIMELIB_DEINIT; return TIMELIB_LF_DAY_OF_MONTH; } yy1235: YYDEBUG(1235, *YYCURSOR); yyaccept = 27; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '@') { if (yych <= 0x1F) { if (yych == '\t') goto yy1237; goto yy1234; } else { if (yych <= ' ') goto yy1237; if (yych <= '/') goto yy1234; if (yych >= '5') goto yy1234; } } else { if (yych <= '`') { if (yych <= 'A') goto yy1239; if (yych == 'P') goto yy1239; goto yy1234; } else { if (yych <= 'a') goto yy1239; if (yych == 'p') goto yy1239; goto yy1234; } } yy1236: YYDEBUG(1236, *YYCURSOR); yyaccept = 27; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'A') { if (yych <= 0x1F) { if (yych != '\t') goto yy1234; } else { if (yych <= ' ') goto yy1237; if (yych <= '@') goto yy1234; goto yy1239; } } else { if (yych <= '`') { if (yych == 'P') goto yy1239; goto yy1234; } else { if (yych <= 'a') goto yy1239; if (yych == 'p') goto yy1239; goto yy1234; } } yy1237: YYDEBUG(1237, *YYCURSOR); ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5); yych = *YYCURSOR; YYDEBUG(1238, *YYCURSOR); if (yych <= 'A') { if (yych <= 0x1F) { if (yych == '\t') goto yy1237; goto yy56; } else { if (yych <= ' ') goto yy1237; if (yych <= '@') goto yy56; } } else { if (yych <= '`') { if (yych != 'P') goto yy56; } else { if (yych <= 'a') goto yy1239; if (yych != 'p') goto yy56; } } yy1239: YYDEBUG(1239, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'L') { if (yych != '.') goto yy56; } else { if (yych <= 'M') goto yy1241; if (yych == 'm') goto yy1241; goto yy56; } YYDEBUG(1240, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'M') goto yy1241; if (yych != 'm') goto yy56; yy1241: YYDEBUG(1241, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 0x1F) { if (yych <= 0x00) goto yy1243; if (yych == '\t') goto yy1243; goto yy56; } else { if (yych <= ' ') goto yy1243; if (yych != '.') goto yy56; } YYDEBUG(1242, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '\t') { if (yych <= 0x00) goto yy1243; if (yych <= 0x08) goto yy56; } else { if (yych != ' ') goto yy56; } yy1243: YYDEBUG(1243, *YYCURSOR); yych = *++YYCURSOR; goto yy1234; yy1244: YYDEBUG(1244, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'B') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy141; } } else { if (yych <= '_') { if (yych <= 'C') goto yy1227; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'b') { if (yych <= '`') goto yy3; goto yy146; } else { if (yych <= 'c') goto yy1245; if (yych <= 'z') goto yy146; goto yy3; } } } yy1245: YYDEBUG(1245, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'J') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy142; } } else { if (yych <= '_') { if (yych <= 'K') goto yy1228; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'j') { if (yych <= '`') goto yy3; goto yy150; } else { if (yych <= 'k') goto yy1246; if (yych <= 'z') goto yy150; goto yy3; } } } yy1246: YYDEBUG(1246, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= '(') { if (yych == ' ') goto yy1229; goto yy3; } else { if (yych <= ')') goto yy139; if (yych == '-') goto yy147; goto yy3; } } else { if (yych <= '^') { if (yych <= '/') goto yy147; if (yych <= '@') goto yy3; if (yych <= 'Z') goto yy143; goto yy3; } else { if (yych <= '_') goto yy147; if (yych <= '`') goto yy3; if (yych <= 'z') goto yy151; goto yy3; } } yy1247: YYDEBUG(1247, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'S') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'R') goto yy141; } } else { if (yych <= 'r') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; goto yy141; } else { if (yych <= 's') goto yy1248; if (yych <= 'z') goto yy141; goto yy3; } } yy1248: YYDEBUG(1248, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'S') goto yy142; } } else { if (yych <= 's') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy3; goto yy142; } else { if (yych <= 't') goto yy1249; if (yych <= 'z') goto yy142; goto yy3; } } yy1249: YYDEBUG(1249, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy3; goto yy1044; } else { if (yych != ' ') goto yy3; } } else { if (yych <= 'Z') { if (yych <= ')') goto yy139; if (yych <= '@') goto yy3; goto yy143; } else { if (yych <= '`') goto yy3; if (yych <= 'z') goto yy143; goto yy3; } } yy1250: YYDEBUG(1250, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'D') goto yy1251; if (yych != 'd') goto yy1045; yy1251: YYDEBUG(1251, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy1252; if (yych != 'a') goto yy56; yy1252: YYDEBUG(1252, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy1253; if (yych != 'y') goto yy56; yy1253: YYDEBUG(1253, *YYCURSOR); yyaccept = 25; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'R') { if (yych != ' ') goto yy1057; } else { if (yych <= 'S') goto yy1082; if (yych == 's') goto yy1082; goto yy1057; } YYDEBUG(1254, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'O') goto yy1255; if (yych != 'o') goto yy56; yy1255: YYDEBUG(1255, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'F') goto yy1256; if (yych != 'f') goto yy56; yy1256: YYDEBUG(1256, *YYCURSOR); ++YYCURSOR; YYDEBUG(1257, *YYCURSOR); { DEBUG_OUTPUT("firstdayof | lastdayof"); TIMELIB_INIT; TIMELIB_HAVE_RELATIVE(); /* skip "last day of" or "first day of" */ if (*ptr == 'l' || *ptr == 'L') { s->time->relative.first_last_day_of = TIMELIB_SPECIAL_LAST_DAY_OF_MONTH; } else { s->time->relative.first_last_day_of = TIMELIB_SPECIAL_FIRST_DAY_OF_MONTH; } TIMELIB_DEINIT; return TIMELIB_LF_DAY_OF_MONTH; } yy1258: YYDEBUG(1258, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'R') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy141; } } else { if (yych <= '_') { if (yych <= 'S') goto yy1248; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'r') { if (yych <= '`') goto yy3; goto yy146; } else { if (yych <= 's') goto yy1259; if (yych <= 'z') goto yy146; goto yy3; } } } yy1259: YYDEBUG(1259, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy142; } } else { if (yych <= '_') { if (yych <= 'T') goto yy1249; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 's') { if (yych <= '`') goto yy3; goto yy150; } else { if (yych <= 't') goto yy1260; if (yych <= 'z') goto yy150; goto yy3; } } } yy1260: YYDEBUG(1260, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '-') { if (yych <= ' ') { if (yych == '\t') goto yy1044; if (yych <= 0x1F) goto yy3; goto yy1250; } else { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } } else { if (yych <= 'Z') { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } else { if (yych <= '_') { if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= '`') goto yy3; if (yych <= 'z') goto yy151; goto yy3; } } } yy1261: YYDEBUG(1261, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'B') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'A') goto yy141; goto yy1298; } } else { if (yych <= 'a') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; goto yy141; } else { if (yych <= 'b') goto yy1298; if (yych <= 'z') goto yy141; goto yy3; } } yy1262: YYDEBUG(1262, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'R') { if (yych <= '@') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == 'F') goto yy1288; if (yych <= 'Q') goto yy141; goto yy1287; } } else { if (yych <= 'f') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; if (yych <= 'e') goto yy141; goto yy1288; } else { if (yych == 'r') goto yy1287; if (yych <= 'z') goto yy141; goto yy3; } } yy1263: YYDEBUG(1263, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'T') goto yy141; goto yy1284; } } else { if (yych <= 't') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; goto yy141; } else { if (yych <= 'u') goto yy1284; if (yych <= 'z') goto yy141; goto yy3; } } yy1264: YYDEBUG(1264, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'O') { if (yych <= '@') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == 'I') goto yy1266; if (yych <= 'N') goto yy141; } } else { if (yych <= 'i') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; if (yych <= 'h') goto yy141; goto yy1266; } else { if (yych == 'o') goto yy1265; if (yych <= 'z') goto yy141; goto yy3; } } yy1265: YYDEBUG(1265, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'N') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'M') goto yy142; goto yy1269; } } else { if (yych <= 'm') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy3; goto yy142; } else { if (yych <= 'n') goto yy1269; if (yych <= 'z') goto yy142; goto yy3; } } yy1266: YYDEBUG(1266, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'D') { if (yych <= ')') { if (yych <= '(') goto yy166; goto yy139; } else { if (yych <= '@') goto yy166; if (yych <= 'C') goto yy142; } } else { if (yych <= 'c') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy166; goto yy142; } else { if (yych <= 'd') goto yy1267; if (yych <= 'z') goto yy142; goto yy166; } } yy1267: YYDEBUG(1267, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'A') { if (yych == ')') goto yy139; if (yych <= '@') goto yy3; } else { if (yych <= '`') { if (yych <= 'Z') goto yy143; goto yy3; } else { if (yych <= 'a') goto yy1268; if (yych <= 'z') goto yy143; goto yy3; } } yy1268: YYDEBUG(1268, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'Y') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'X') goto yy144; goto yy1175; } } else { if (yych <= 'x') { if (yych <= 'Z') goto yy144; if (yych <= '`') goto yy3; goto yy144; } else { if (yych <= 'y') goto yy1175; if (yych <= 'z') goto yy144; goto yy3; } } yy1269: YYDEBUG(1269, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'S') goto yy143; } } else { if (yych <= 's') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 't') goto yy1270; if (yych <= 'z') goto yy143; goto yy3; } } yy1270: YYDEBUG(1270, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ')') { if (yych == ' ') goto yy1271; if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= 'Z') { if (yych <= '@') goto yy3; goto yy144; } else { if (yych <= '`') goto yy3; if (yych <= 'z') goto yy144; goto yy3; } } yy1271: YYDEBUG(1271, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'O') goto yy1272; if (yych != 'o') goto yy56; yy1272: YYDEBUG(1272, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'F') goto yy1273; if (yych != 'f') goto yy56; yy1273: YYDEBUG(1273, *YYCURSOR); yych = *++YYCURSOR; if (yych != ' ') goto yy56; YYDEBUG(1274, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '1') goto yy1275; if (yych <= '2') goto yy1276; if (yych <= '9') goto yy1277; goto yy56; yy1275: YYDEBUG(1275, *YYCURSOR); yyaccept = 27; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '@') { if (yych <= 0x1F) { if (yych == '\t') goto yy1278; goto yy1234; } else { if (yych <= ' ') goto yy1278; if (yych <= '/') goto yy1234; if (yych <= '9') goto yy1277; goto yy1234; } } else { if (yych <= '`') { if (yych <= 'A') goto yy1280; if (yych == 'P') goto yy1280; goto yy1234; } else { if (yych <= 'a') goto yy1280; if (yych == 'p') goto yy1280; goto yy1234; } } yy1276: YYDEBUG(1276, *YYCURSOR); yyaccept = 27; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '@') { if (yych <= 0x1F) { if (yych == '\t') goto yy1278; goto yy1234; } else { if (yych <= ' ') goto yy1278; if (yych <= '/') goto yy1234; if (yych >= '5') goto yy1234; } } else { if (yych <= '`') { if (yych <= 'A') goto yy1280; if (yych == 'P') goto yy1280; goto yy1234; } else { if (yych <= 'a') goto yy1280; if (yych == 'p') goto yy1280; goto yy1234; } } yy1277: YYDEBUG(1277, *YYCURSOR); yyaccept = 27; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'A') { if (yych <= 0x1F) { if (yych != '\t') goto yy1234; } else { if (yych <= ' ') goto yy1278; if (yych <= '@') goto yy1234; goto yy1280; } } else { if (yych <= '`') { if (yych == 'P') goto yy1280; goto yy1234; } else { if (yych <= 'a') goto yy1280; if (yych == 'p') goto yy1280; goto yy1234; } } yy1278: YYDEBUG(1278, *YYCURSOR); ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5); yych = *YYCURSOR; YYDEBUG(1279, *YYCURSOR); if (yych <= 'A') { if (yych <= 0x1F) { if (yych == '\t') goto yy1278; goto yy56; } else { if (yych <= ' ') goto yy1278; if (yych <= '@') goto yy56; } } else { if (yych <= '`') { if (yych != 'P') goto yy56; } else { if (yych <= 'a') goto yy1280; if (yych != 'p') goto yy56; } } yy1280: YYDEBUG(1280, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'L') { if (yych != '.') goto yy56; } else { if (yych <= 'M') goto yy1282; if (yych == 'm') goto yy1282; goto yy56; } YYDEBUG(1281, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'M') goto yy1282; if (yych != 'm') goto yy56; yy1282: YYDEBUG(1282, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 0x1F) { if (yych <= 0x00) goto yy1243; if (yych == '\t') goto yy1243; goto yy56; } else { if (yych <= ' ') goto yy1243; if (yych != '.') goto yy56; } YYDEBUG(1283, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '\t') { if (yych <= 0x00) goto yy1243; if (yych <= 0x08) goto yy56; goto yy1243; } else { if (yych == ' ') goto yy1243; goto yy56; } yy1284: YYDEBUG(1284, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'R') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'Q') goto yy142; } } else { if (yych <= 'q') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy3; goto yy142; } else { if (yych <= 'r') goto yy1285; if (yych <= 'z') goto yy142; goto yy3; } } yy1285: YYDEBUG(1285, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'S') goto yy143; } } else { if (yych <= 's') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 't') goto yy1286; if (yych <= 'z') goto yy143; goto yy3; } } yy1286: YYDEBUG(1286, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'H') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'G') goto yy144; goto yy1155; } } else { if (yych <= 'g') { if (yych <= 'Z') goto yy144; if (yych <= '`') goto yy3; goto yy144; } else { if (yych <= 'h') goto yy1155; if (yych <= 'z') goto yy144; goto yy3; } } yy1287: YYDEBUG(1287, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'S') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'R') goto yy142; goto yy1290; } } else { if (yych <= 'r') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy3; goto yy142; } else { if (yych <= 's') goto yy1290; if (yych <= 'z') goto yy142; goto yy3; } } yy1288: YYDEBUG(1288, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'S') goto yy142; } } else { if (yych <= 's') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy3; goto yy142; } else { if (yych <= 't') goto yy1289; if (yych <= 'z') goto yy142; goto yy3; } } yy1289: YYDEBUG(1289, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'H') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'G') goto yy143; goto yy1178; } } else { if (yych <= 'g') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 'h') goto yy1178; if (yych <= 'z') goto yy143; goto yy3; } } yy1290: YYDEBUG(1290, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'S') goto yy143; } } else { if (yych <= 's') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 't') goto yy1291; if (yych <= 'z') goto yy143; goto yy3; } } yy1291: YYDEBUG(1291, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy3; goto yy1146; } else { if (yych != ' ') goto yy3; } } else { if (yych <= 'Z') { if (yych <= ')') goto yy139; if (yych <= '@') goto yy3; goto yy144; } else { if (yych <= '`') goto yy3; if (yych <= 'z') goto yy144; goto yy3; } } yy1292: YYDEBUG(1292, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'D') goto yy1293; if (yych != 'd') goto yy1147; yy1293: YYDEBUG(1293, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy1294; if (yych != 'a') goto yy56; yy1294: YYDEBUG(1294, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy1295; if (yych != 'y') goto yy56; yy1295: YYDEBUG(1295, *YYCURSOR); yyaccept = 25; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'R') { if (yych != ' ') goto yy1057; } else { if (yych <= 'S') goto yy1082; if (yych == 's') goto yy1082; goto yy1057; } YYDEBUG(1296, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'O') goto yy1297; if (yych != 'o') goto yy56; yy1297: YYDEBUG(1297, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'F') goto yy1256; if (yych == 'f') goto yy1256; goto yy56; yy1298: YYDEBUG(1298, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy193; goto yy195; } else { if (yych == ' ') goto yy195; goto yy193; } } else { if (yych <= ',') { if (yych <= ')') goto yy139; goto yy193; } else { if (yych <= '-') goto yy196; if (yych <= '.') goto yy195; goto yy193; } } } else { if (yych <= 'Z') { if (yych <= '@') { if (yych <= '9') goto yy195; goto yy193; } else { if (yych != 'R') goto yy142; } } else { if (yych <= 'q') { if (yych <= '`') goto yy193; goto yy142; } else { if (yych <= 'r') goto yy1299; if (yych <= 'z') goto yy142; goto yy193; } } } yy1299: YYDEBUG(1299, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'T') goto yy143; } } else { if (yych <= 't') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 'u') goto yy1300; if (yych <= 'z') goto yy143; goto yy3; } } yy1300: YYDEBUG(1300, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'A') { if (yych == ')') goto yy139; if (yych <= '@') goto yy3; } else { if (yych <= '`') { if (yych <= 'Z') goto yy144; goto yy3; } else { if (yych <= 'a') goto yy1301; if (yych <= 'z') goto yy144; goto yy3; } } yy1301: YYDEBUG(1301, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'Q') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'R') goto yy1302; if (yych != 'r') goto yy3; } yy1302: YYDEBUG(1302, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy204; if (yych == 'y') goto yy204; goto yy56; yy1303: YYDEBUG(1303, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'A') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy141; } } else { if (yych <= '_') { if (yych <= 'B') goto yy1298; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'a') { if (yych <= '`') goto yy3; goto yy146; } else { if (yych <= 'b') goto yy1321; if (yych <= 'z') goto yy146; goto yy3; } } } yy1304: YYDEBUG(1304, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'Q') { if (yych <= '.') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych == '-') goto yy147; goto yy3; } } else { if (yych <= '@') { if (yych <= '/') goto yy147; goto yy3; } else { if (yych == 'F') goto yy1288; goto yy141; } } } else { if (yych <= '`') { if (yych <= 'Z') { if (yych <= 'R') goto yy1287; goto yy141; } else { if (yych == '_') goto yy147; goto yy3; } } else { if (yych <= 'q') { if (yych == 'f') goto yy1317; goto yy146; } else { if (yych <= 'r') goto yy1316; if (yych <= 'z') goto yy146; goto yy3; } } } yy1305: YYDEBUG(1305, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'T') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy141; } } else { if (yych <= '_') { if (yych <= 'U') goto yy1284; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 't') { if (yych <= '`') goto yy3; goto yy146; } else { if (yych <= 'u') goto yy1313; if (yych <= 'z') goto yy146; goto yy3; } } } yy1306: YYDEBUG(1306, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'N') { if (yych <= '.') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych == '-') goto yy147; goto yy3; } } else { if (yych <= '@') { if (yych <= '/') goto yy147; goto yy3; } else { if (yych == 'I') goto yy1266; goto yy141; } } } else { if (yych <= '`') { if (yych <= 'Z') { if (yych <= 'O') goto yy1265; goto yy141; } else { if (yych == '_') goto yy147; goto yy3; } } else { if (yych <= 'n') { if (yych == 'i') goto yy1308; goto yy146; } else { if (yych <= 'o') goto yy1307; if (yych <= 'z') goto yy146; goto yy3; } } } yy1307: YYDEBUG(1307, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'M') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy142; } } else { if (yych <= '_') { if (yych <= 'N') goto yy1269; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'm') { if (yych <= '`') goto yy3; goto yy150; } else { if (yych <= 'n') goto yy1311; if (yych <= 'z') goto yy150; goto yy3; } } } yy1308: YYDEBUG(1308, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'C') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy166; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy166; goto yy142; } } else { if (yych <= '_') { if (yych <= 'D') goto yy1267; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy166; goto yy147; } else { if (yych <= 'c') { if (yych <= '`') goto yy166; goto yy150; } else { if (yych <= 'd') goto yy1309; if (yych <= 'z') goto yy150; goto yy166; } } } yy1309: YYDEBUG(1309, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '@') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; if (yych <= '/') goto yy147; goto yy3; } } else { if (yych <= '_') { if (yych <= 'A') goto yy1268; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= '`') goto yy3; if (yych <= 'a') goto yy1310; if (yych <= 'z') goto yy151; goto yy3; } } yy1310: YYDEBUG(1310, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'X') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy144; } } else { if (yych <= '_') { if (yych <= 'Y') goto yy1175; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'x') { if (yych <= '`') goto yy3; goto yy152; } else { if (yych <= 'y') goto yy1204; if (yych <= 'z') goto yy152; goto yy3; } } } yy1311: YYDEBUG(1311, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'T') goto yy1270; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 's') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 't') goto yy1312; if (yych <= 'z') goto yy151; goto yy3; } } } yy1312: YYDEBUG(1312, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= '(') { if (yych == ' ') goto yy1271; goto yy3; } else { if (yych <= ')') goto yy139; if (yych == '-') goto yy147; goto yy3; } } else { if (yych <= '^') { if (yych <= '/') goto yy147; if (yych <= '@') goto yy3; if (yych <= 'Z') goto yy144; goto yy3; } else { if (yych <= '_') goto yy147; if (yych <= '`') goto yy3; if (yych <= 'z') goto yy152; goto yy3; } } yy1313: YYDEBUG(1313, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'Q') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy142; } } else { if (yych <= '_') { if (yych <= 'R') goto yy1285; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'q') { if (yych <= '`') goto yy3; goto yy150; } else { if (yych <= 'r') goto yy1314; if (yych <= 'z') goto yy150; goto yy3; } } } yy1314: YYDEBUG(1314, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'T') goto yy1286; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 's') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 't') goto yy1315; if (yych <= 'z') goto yy151; goto yy3; } } } yy1315: YYDEBUG(1315, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'G') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy144; } } else { if (yych <= '_') { if (yych <= 'H') goto yy1155; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'g') { if (yych <= '`') goto yy3; goto yy152; } else { if (yych <= 'h') goto yy1167; if (yych <= 'z') goto yy152; goto yy3; } } } yy1316: YYDEBUG(1316, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'R') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy142; } } else { if (yych <= '_') { if (yych <= 'S') goto yy1290; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'r') { if (yych <= '`') goto yy3; goto yy150; } else { if (yych <= 's') goto yy1319; if (yych <= 'z') goto yy150; goto yy3; } } } yy1317: YYDEBUG(1317, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy142; } } else { if (yych <= '_') { if (yych <= 'T') goto yy1289; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 's') { if (yych <= '`') goto yy3; goto yy150; } else { if (yych <= 't') goto yy1318; if (yych <= 'z') goto yy150; goto yy3; } } } yy1318: YYDEBUG(1318, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'G') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'H') goto yy1178; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'g') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 'h') goto yy1207; if (yych <= 'z') goto yy151; goto yy3; } } } yy1319: YYDEBUG(1319, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'T') goto yy1291; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 's') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 't') goto yy1320; if (yych <= 'z') goto yy151; goto yy3; } } } yy1320: YYDEBUG(1320, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '-') { if (yych <= ' ') { if (yych == '\t') goto yy1146; if (yych <= 0x1F) goto yy3; goto yy1292; } else { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } } else { if (yych <= 'Z') { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy144; } else { if (yych <= '_') { if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= '`') goto yy3; if (yych <= 'z') goto yy152; goto yy3; } } } yy1321: YYDEBUG(1321, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '9') { if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy193; goto yy195; } else { if (yych == ' ') goto yy195; goto yy193; } } else { if (yych <= '-') { if (yych <= ')') goto yy139; if (yych <= ',') goto yy193; goto yy311; } else { if (yych == '/') goto yy147; goto yy195; } } } else { if (yych <= '^') { if (yych <= 'Q') { if (yych <= '@') goto yy193; goto yy142; } else { if (yych <= 'R') goto yy1299; if (yych <= 'Z') goto yy142; goto yy193; } } else { if (yych <= 'q') { if (yych <= '_') goto yy147; if (yych <= '`') goto yy193; goto yy150; } else { if (yych <= 'r') goto yy1322; if (yych <= 'z') goto yy150; goto yy193; } } } yy1322: YYDEBUG(1322, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'T') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'U') goto yy1300; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 't') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 'u') goto yy1323; if (yych <= 'z') goto yy151; goto yy3; } } } yy1323: YYDEBUG(1323, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '@') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; if (yych <= '/') goto yy147; goto yy3; } } else { if (yych <= '_') { if (yych <= 'A') goto yy1301; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= '`') goto yy3; if (yych <= 'a') goto yy1324; if (yych <= 'z') goto yy152; goto yy3; } } yy1324: YYDEBUG(1324, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'Q') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; if (yych <= '/') goto yy147; goto yy3; } } else { if (yych <= '`') { if (yych <= 'R') goto yy1302; if (yych == '_') goto yy147; goto yy3; } else { if (yych == 'r') goto yy1325; if (yych <= 'z') goto yy153; goto yy3; } } yy1325: YYDEBUG(1325, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy204; if (yych == 'y') goto yy316; goto yy154; yy1326: YYDEBUG(1326, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= ':') goto yy56; yy1327: YYDEBUG(1327, *YYCURSOR); ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; YYDEBUG(1328, *YYCURSOR); if (yych <= '/') goto yy1329; if (yych <= '9') goto yy1327; yy1329: YYDEBUG(1329, *YYCURSOR); { timelib_ull i; TIMELIB_INIT; TIMELIB_HAVE_RELATIVE(); TIMELIB_UNHAVE_DATE(); TIMELIB_UNHAVE_TIME(); TIMELIB_HAVE_TZ(); i = timelib_get_unsigned_nr((char **) &ptr, 24); s->time->y = 1970; s->time->m = 1; s->time->d = 1; s->time->h = s->time->i = s->time->s = 0; s->time->f = 0.0; s->time->relative.s += i; s->time->is_localtime = 1; s->time->zone_type = TIMELIB_ZONETYPE_OFFSET; s->time->z = 0; s->time->dst = 0; TIMELIB_DEINIT; return TIMELIB_RELATIVE; } yy1330: YYDEBUG(1330, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'N') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'M') goto yy141; goto yy1371; } } else { if (yych <= 'm') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; goto yy141; } else { if (yych <= 'n') goto yy1371; if (yych <= 'z') goto yy141; goto yy3; } } yy1331: YYDEBUG(1331, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { if (yych <= '@') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == 'I') goto yy1363; if (yych <= 'T') goto yy141; goto yy1364; } } else { if (yych <= 'i') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; if (yych <= 'h') goto yy141; goto yy1363; } else { if (yych == 'u') goto yy1364; if (yych <= 'z') goto yy141; goto yy3; } } yy1332: YYDEBUG(1332, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'M') { if (yych <= '@') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == 'D') goto yy1352; if (yych <= 'L') goto yy141; goto yy1353; } } else { if (yych <= 'd') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; if (yych <= 'c') goto yy141; goto yy1352; } else { if (yych == 'm') goto yy1353; if (yych <= 'z') goto yy141; goto yy3; } } yy1333: YYDEBUG(1333, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'E') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'D') goto yy141; goto yy1348; } } else { if (yych <= 'd') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; goto yy141; } else { if (yych <= 'e') goto yy1348; if (yych <= 'z') goto yy141; goto yy3; } } yy1334: YYDEBUG(1334, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'E') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'D') goto yy141; goto yy1344; } } else { if (yych <= 'd') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; goto yy141; } else { if (yych <= 'e') goto yy1344; if (yych <= 'z') goto yy141; goto yy3; } } yy1335: YYDEBUG(1335, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') { if (yych == '.') goto yy1004; goto yy56; } else { if (yych <= '9') goto yy1338; if (yych <= ':') goto yy1004; goto yy56; } yy1336: YYDEBUG(1336, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') { if (yych == '.') goto yy1004; goto yy56; } else { if (yych <= '4') goto yy1338; if (yych == ':') goto yy1004; goto yy56; } yy1337: YYDEBUG(1337, *YYCURSOR); yych = *++YYCURSOR; if (yych == '.') goto yy1004; if (yych == ':') goto yy1004; goto yy56; yy1338: YYDEBUG(1338, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') { if (yych == '.') goto yy1004; goto yy56; } else { if (yych <= '5') goto yy1339; if (yych == ':') goto yy1004; goto yy56; } yy1339: YYDEBUG(1339, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych >= ':') goto yy56; YYDEBUG(1340, *YYCURSOR); yyaccept = 23; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') goto yy1007; if (yych <= '5') goto yy1341; if (yych <= '6') goto yy1342; goto yy1007; yy1341: YYDEBUG(1341, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '/') goto yy56; if (yych <= '9') goto yy1343; goto yy56; yy1342: YYDEBUG(1342, *YYCURSOR); yych = *++YYCURSOR; if (yych != '0') goto yy56; yy1343: YYDEBUG(1343, *YYCURSOR); yych = *++YYCURSOR; goto yy1015; yy1344: YYDEBUG(1344, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'L') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'K') goto yy142; } } else { if (yych <= 'k') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy3; goto yy142; } else { if (yych <= 'l') goto yy1345; if (yych <= 'z') goto yy142; goto yy3; } } yy1345: YYDEBUG(1345, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'F') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'E') goto yy143; } } else { if (yych <= 'e') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 'f') goto yy1346; if (yych <= 'z') goto yy143; goto yy3; } } yy1346: YYDEBUG(1346, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'S') goto yy144; } } else { if (yych <= 's') { if (yych <= 'Z') goto yy144; if (yych <= '`') goto yy3; goto yy144; } else { if (yych <= 't') goto yy1347; if (yych <= 'z') goto yy144; goto yy3; } } yy1347: YYDEBUG(1347, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'G') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'H') goto yy1145; if (yych == 'h') goto yy1145; goto yy3; } yy1348: YYDEBUG(1348, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'S') { if (yych <= ')') { if (yych <= '(') goto yy166; goto yy139; } else { if (yych <= '@') goto yy166; if (yych <= 'R') goto yy142; } } else { if (yych <= 'r') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy166; goto yy142; } else { if (yych <= 's') goto yy1349; if (yych <= 'z') goto yy142; goto yy166; } } yy1349: YYDEBUG(1349, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'D') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'C') goto yy143; } } else { if (yych <= 'c') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 'd') goto yy1350; if (yych <= 'z') goto yy143; goto yy3; } } yy1350: YYDEBUG(1350, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'A') { if (yych == ')') goto yy139; if (yych <= '@') goto yy3; } else { if (yych <= '`') { if (yych <= 'Z') goto yy144; goto yy3; } else { if (yych <= 'a') goto yy1351; if (yych <= 'z') goto yy144; goto yy3; } } yy1351: YYDEBUG(1351, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'X') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'Y') goto yy172; if (yych == 'y') goto yy172; goto yy3; } yy1352: YYDEBUG(1352, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'A') { if (yych == ')') goto yy139; if (yych <= '@') goto yy3; goto yy1360; } else { if (yych <= '`') { if (yych <= 'Z') goto yy142; goto yy3; } else { if (yych <= 'a') goto yy1360; if (yych <= 'z') goto yy142; goto yy3; } } yy1353: YYDEBUG(1353, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'O') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'N') goto yy142; } } else { if (yych <= 'n') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy3; goto yy142; } else { if (yych <= 'o') goto yy1354; if (yych <= 'z') goto yy142; goto yy3; } } yy1354: YYDEBUG(1354, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'R') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'Q') goto yy143; } } else { if (yych <= 'q') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 'r') goto yy1355; if (yych <= 'z') goto yy143; goto yy3; } } yy1355: YYDEBUG(1355, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'R') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'Q') goto yy144; } } else { if (yych <= 'q') { if (yych <= 'Z') goto yy144; if (yych <= '`') goto yy3; goto yy144; } else { if (yych <= 'r') goto yy1356; if (yych <= 'z') goto yy144; goto yy3; } } yy1356: YYDEBUG(1356, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'N') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'O') goto yy1357; if (yych != 'o') goto yy3; } yy1357: YYDEBUG(1357, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'W') goto yy1358; if (yych != 'w') goto yy56; yy1358: YYDEBUG(1358, *YYCURSOR); ++YYCURSOR; yy1359: YYDEBUG(1359, *YYCURSOR); { DEBUG_OUTPUT("tomorrow"); TIMELIB_INIT; TIMELIB_HAVE_RELATIVE(); TIMELIB_UNHAVE_TIME(); s->time->relative.d = 1; TIMELIB_DEINIT; return TIMELIB_RELATIVE; } yy1360: YYDEBUG(1360, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'Y') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'X') goto yy143; } } else { if (yych <= 'x') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 'y') goto yy1361; if (yych <= 'z') goto yy143; goto yy3; } } yy1361: YYDEBUG(1361, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '@') { if (yych == ')') goto yy139; } else { if (yych <= 'Z') goto yy144; if (yych <= '`') goto yy1362; if (yych <= 'z') goto yy144; } yy1362: YYDEBUG(1362, *YYCURSOR); { DEBUG_OUTPUT("midnight | today"); TIMELIB_INIT; TIMELIB_UNHAVE_TIME(); TIMELIB_DEINIT; return TIMELIB_RELATIVE; } yy1363: YYDEBUG(1363, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'S') { if (yych <= '@') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'Q') goto yy142; if (yych <= 'R') goto yy1369; goto yy1370; } } else { if (yych <= 'q') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy3; goto yy142; } else { if (yych <= 'r') goto yy1369; if (yych <= 's') goto yy1370; if (yych <= 'z') goto yy142; goto yy3; } } yy1364: YYDEBUG(1364, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'R') { if (yych <= ')') { if (yych <= '(') goto yy166; goto yy139; } else { if (yych <= '@') goto yy166; if (yych <= 'Q') goto yy142; } } else { if (yych <= 'q') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy166; goto yy142; } else { if (yych <= 'r') goto yy1365; if (yych <= 'z') goto yy142; goto yy166; } } yy1365: YYDEBUG(1365, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'S') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'R') goto yy143; } } else { if (yych <= 'r') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 's') goto yy1366; if (yych <= 'z') goto yy143; goto yy3; } } yy1366: YYDEBUG(1366, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'D') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'C') goto yy144; } } else { if (yych <= 'c') { if (yych <= 'Z') goto yy144; if (yych <= '`') goto yy3; goto yy144; } else { if (yych <= 'd') goto yy1367; if (yych <= 'z') goto yy144; goto yy3; } } yy1367: YYDEBUG(1367, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '@') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'A') goto yy1368; if (yych != 'a') goto yy3; } yy1368: YYDEBUG(1368, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy172; if (yych == 'y') goto yy172; goto yy56; yy1369: YYDEBUG(1369, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'D') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'C') goto yy143; goto yy1178; } } else { if (yych <= 'c') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 'd') goto yy1178; if (yych <= 'z') goto yy143; goto yy3; } } yy1370: YYDEBUG(1370, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy3; goto yy1044; } else { if (yych == ' ') goto yy1044; goto yy3; } } else { if (yych <= 'Z') { if (yych <= ')') goto yy139; if (yych <= '@') goto yy3; goto yy143; } else { if (yych <= '`') goto yy3; if (yych <= 'z') goto yy143; goto yy3; } } yy1371: YYDEBUG(1371, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'S') goto yy142; } } else { if (yych <= 's') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy3; goto yy142; } else { if (yych <= 't') goto yy1372; if (yych <= 'z') goto yy142; goto yy3; } } yy1372: YYDEBUG(1372, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'H') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'G') goto yy143; goto yy1178; } } else { if (yych <= 'g') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 'h') goto yy1178; if (yych <= 'z') goto yy143; goto yy3; } } yy1373: YYDEBUG(1373, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'M') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy141; } } else { if (yych <= '_') { if (yych <= 'N') goto yy1371; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'm') { if (yych <= '`') goto yy3; goto yy146; } else { if (yych <= 'n') goto yy1403; if (yych <= 'z') goto yy146; goto yy3; } } } yy1374: YYDEBUG(1374, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'T') { if (yych <= '.') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych == '-') goto yy147; goto yy3; } } else { if (yych <= '@') { if (yych <= '/') goto yy147; goto yy3; } else { if (yych == 'I') goto yy1363; goto yy141; } } } else { if (yych <= '`') { if (yych <= 'Z') { if (yych <= 'U') goto yy1364; goto yy141; } else { if (yych == '_') goto yy147; goto yy3; } } else { if (yych <= 't') { if (yych == 'i') goto yy1395; goto yy146; } else { if (yych <= 'u') goto yy1396; if (yych <= 'z') goto yy146; goto yy3; } } } yy1375: YYDEBUG(1375, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'L') { if (yych <= '.') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych == '-') goto yy147; goto yy3; } } else { if (yych <= '@') { if (yych <= '/') goto yy147; goto yy3; } else { if (yych == 'D') goto yy1352; goto yy141; } } } else { if (yych <= '`') { if (yych <= 'Z') { if (yych <= 'M') goto yy1353; goto yy141; } else { if (yych == '_') goto yy147; goto yy3; } } else { if (yych <= 'l') { if (yych == 'd') goto yy1386; goto yy146; } else { if (yych <= 'm') goto yy1387; if (yych <= 'z') goto yy146; goto yy3; } } } yy1376: YYDEBUG(1376, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'D') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy141; } } else { if (yych <= '_') { if (yych <= 'E') goto yy1348; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'd') { if (yych <= '`') goto yy3; goto yy146; } else { if (yych <= 'e') goto yy1382; if (yych <= 'z') goto yy146; goto yy3; } } } yy1377: YYDEBUG(1377, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'D') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy141; } } else { if (yych <= '_') { if (yych <= 'E') goto yy1344; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'd') { if (yych <= '`') goto yy3; goto yy146; } else { if (yych <= 'e') goto yy1378; if (yych <= 'z') goto yy146; goto yy3; } } } yy1378: YYDEBUG(1378, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'K') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy142; } } else { if (yych <= '_') { if (yych <= 'L') goto yy1345; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'k') { if (yych <= '`') goto yy3; goto yy150; } else { if (yych <= 'l') goto yy1379; if (yych <= 'z') goto yy150; goto yy3; } } } yy1379: YYDEBUG(1379, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'E') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'F') goto yy1346; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'e') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 'f') goto yy1380; if (yych <= 'z') goto yy151; goto yy3; } } } yy1380: YYDEBUG(1380, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy144; } } else { if (yych <= '_') { if (yych <= 'T') goto yy1347; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 's') { if (yych <= '`') goto yy3; goto yy152; } else { if (yych <= 't') goto yy1381; if (yych <= 'z') goto yy152; goto yy3; } } } yy1381: YYDEBUG(1381, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'G') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; if (yych <= '/') goto yy147; goto yy3; } } else { if (yych <= '`') { if (yych <= 'H') goto yy1145; if (yych == '_') goto yy147; goto yy3; } else { if (yych == 'h') goto yy1163; if (yych <= 'z') goto yy153; goto yy3; } } yy1382: YYDEBUG(1382, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'R') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy166; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy166; goto yy142; } } else { if (yych <= '_') { if (yych <= 'S') goto yy1349; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy166; goto yy147; } else { if (yych <= 'r') { if (yych <= '`') goto yy166; goto yy150; } else { if (yych <= 's') goto yy1383; if (yych <= 'z') goto yy150; goto yy166; } } } yy1383: YYDEBUG(1383, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'C') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'D') goto yy1350; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'c') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 'd') goto yy1384; if (yych <= 'z') goto yy151; goto yy3; } } } yy1384: YYDEBUG(1384, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '@') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; if (yych <= '/') goto yy147; goto yy3; } } else { if (yych <= '_') { if (yych <= 'A') goto yy1351; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= '`') goto yy3; if (yych <= 'a') goto yy1385; if (yych <= 'z') goto yy152; goto yy3; } } yy1385: YYDEBUG(1385, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'X') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; if (yych <= '/') goto yy147; goto yy3; } } else { if (yych <= '`') { if (yych <= 'Y') goto yy172; if (yych == '_') goto yy147; goto yy3; } else { if (yych == 'y') goto yy185; if (yych <= 'z') goto yy153; goto yy3; } } yy1386: YYDEBUG(1386, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '@') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; if (yych <= '/') goto yy147; goto yy3; } } else { if (yych <= '_') { if (yych <= 'A') goto yy1360; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= '`') goto yy3; if (yych <= 'a') goto yy1393; if (yych <= 'z') goto yy150; goto yy3; } } yy1387: YYDEBUG(1387, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'N') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy142; } } else { if (yych <= '_') { if (yych <= 'O') goto yy1354; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'n') { if (yych <= '`') goto yy3; goto yy150; } else { if (yych <= 'o') goto yy1388; if (yych <= 'z') goto yy150; goto yy3; } } } yy1388: YYDEBUG(1388, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'Q') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'R') goto yy1355; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'q') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 'r') goto yy1389; if (yych <= 'z') goto yy151; goto yy3; } } } yy1389: YYDEBUG(1389, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'Q') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy144; } } else { if (yych <= '_') { if (yych <= 'R') goto yy1356; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'q') { if (yych <= '`') goto yy3; goto yy152; } else { if (yych <= 'r') goto yy1390; if (yych <= 'z') goto yy152; goto yy3; } } } yy1390: YYDEBUG(1390, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'N') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; if (yych <= '/') goto yy147; goto yy3; } } else { if (yych <= '`') { if (yych <= 'O') goto yy1357; if (yych == '_') goto yy147; goto yy3; } else { if (yych == 'o') goto yy1391; if (yych <= 'z') goto yy153; goto yy3; } } yy1391: YYDEBUG(1391, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'W') goto yy1358; if (yych != 'w') goto yy154; YYDEBUG(1392, *YYCURSOR); yyaccept = 28; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 16) { goto yy153; } if (yych <= '.') { if (yych == '-') goto yy147; goto yy1359; } else { if (yych <= '/') goto yy147; if (yych == '_') goto yy147; goto yy1359; } yy1393: YYDEBUG(1393, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'X') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'Y') goto yy1361; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'x') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 'y') goto yy1394; if (yych <= 'z') goto yy151; goto yy3; } } } yy1394: YYDEBUG(1394, *YYCURSOR); yyaccept = 29; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy1362; } else { if (yych == '.') goto yy1362; goto yy147; } } else { if (yych <= '^') { if (yych <= '@') goto yy1362; if (yych <= 'Z') goto yy144; goto yy1362; } else { if (yych <= '_') goto yy147; if (yych <= '`') goto yy1362; if (yych <= 'z') goto yy152; goto yy1362; } } yy1395: YYDEBUG(1395, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'R') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych <= '/') { if (yych <= '.') goto yy3; goto yy147; } else { if (yych <= '@') goto yy3; if (yych <= 'Q') goto yy142; goto yy1369; } } } else { if (yych <= '`') { if (yych <= 'Z') { if (yych <= 'S') goto yy1370; goto yy142; } else { if (yych == '_') goto yy147; goto yy3; } } else { if (yych <= 'r') { if (yych <= 'q') goto yy150; goto yy1401; } else { if (yych <= 's') goto yy1402; if (yych <= 'z') goto yy150; goto yy3; } } } yy1396: YYDEBUG(1396, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'Q') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy166; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy166; goto yy142; } } else { if (yych <= '_') { if (yych <= 'R') goto yy1365; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy166; goto yy147; } else { if (yych <= 'q') { if (yych <= '`') goto yy166; goto yy150; } else { if (yych <= 'r') goto yy1397; if (yych <= 'z') goto yy150; goto yy166; } } } yy1397: YYDEBUG(1397, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'R') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'S') goto yy1366; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'r') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 's') goto yy1398; if (yych <= 'z') goto yy151; goto yy3; } } } yy1398: YYDEBUG(1398, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'C') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy144; } } else { if (yych <= '_') { if (yych <= 'D') goto yy1367; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'c') { if (yych <= '`') goto yy3; goto yy152; } else { if (yych <= 'd') goto yy1399; if (yych <= 'z') goto yy152; goto yy3; } } } yy1399: YYDEBUG(1399, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '@') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; if (yych <= '/') goto yy147; goto yy3; } } else { if (yych <= '_') { if (yych <= 'A') goto yy1368; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= '`') goto yy3; if (yych <= 'a') goto yy1400; if (yych <= 'z') goto yy153; goto yy3; } } yy1400: YYDEBUG(1400, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy172; if (yych == 'y') goto yy185; goto yy154; yy1401: YYDEBUG(1401, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'C') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'D') goto yy1178; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'c') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 'd') goto yy1207; if (yych <= 'z') goto yy151; goto yy3; } } } yy1402: YYDEBUG(1402, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '-') { if (yych <= ' ') { if (yych == '\t') goto yy1044; if (yych <= 0x1F) goto yy3; goto yy1044; } else { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } } else { if (yych <= 'Z') { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } else { if (yych <= '_') { if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= '`') goto yy3; if (yych <= 'z') goto yy151; goto yy3; } } } yy1403: YYDEBUG(1403, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy142; } } else { if (yych <= '_') { if (yych <= 'T') goto yy1372; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 's') { if (yych <= '`') goto yy3; goto yy150; } else { if (yych <= 't') goto yy1404; if (yych <= 'z') goto yy150; goto yy3; } } } yy1404: YYDEBUG(1404, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'G') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'H') goto yy1178; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'g') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 'h') goto yy1207; if (yych <= 'z') goto yy151; goto yy3; } } } yy1405: YYDEBUG(1405, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'Y') { if (yych <= '@') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == 'R') goto yy1417; if (yych <= 'X') goto yy141; goto yy1418; } } else { if (yych <= 'r') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; if (yych <= 'q') goto yy141; goto yy1417; } else { if (yych == 'y') goto yy1418; if (yych <= 'z') goto yy141; goto yy3; } } yy1406: YYDEBUG(1406, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'D') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'C') goto yy141; goto yy1411; } } else { if (yych <= 'c') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; goto yy141; } else { if (yych <= 'd') goto yy1411; if (yych <= 'z') goto yy141; goto yy3; } } yy1407: YYDEBUG(1407, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'N') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'M') goto yy141; } } else { if (yych <= 'm') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; goto yy141; } else { if (yych <= 'n') goto yy1408; if (yych <= 'z') goto yy141; goto yy3; } } yy1408: YYDEBUG(1408, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'D') { if (yych <= ')') { if (yych <= '(') goto yy166; goto yy139; } else { if (yych <= '@') goto yy166; if (yych <= 'C') goto yy142; } } else { if (yych <= 'c') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy166; goto yy142; } else { if (yych <= 'd') goto yy1409; if (yych <= 'z') goto yy142; goto yy166; } } yy1409: YYDEBUG(1409, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'A') { if (yych == ')') goto yy139; if (yych <= '@') goto yy3; } else { if (yych <= '`') { if (yych <= 'Z') goto yy143; goto yy3; } else { if (yych <= 'a') goto yy1410; if (yych <= 'z') goto yy143; goto yy3; } } yy1410: YYDEBUG(1410, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'Y') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'X') goto yy144; goto yy1175; } } else { if (yych <= 'x') { if (yych <= 'Z') goto yy144; if (yych <= '`') goto yy3; goto yy144; } else { if (yych <= 'y') goto yy1175; if (yych <= 'z') goto yy144; goto yy3; } } yy1411: YYDEBUG(1411, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'N') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'M') goto yy142; } } else { if (yych <= 'm') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy3; goto yy142; } else { if (yych <= 'n') goto yy1412; if (yych <= 'z') goto yy142; goto yy3; } } yy1412: YYDEBUG(1412, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'I') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'H') goto yy143; } } else { if (yych <= 'h') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 'i') goto yy1413; if (yych <= 'z') goto yy143; goto yy3; } } yy1413: YYDEBUG(1413, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'G') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'F') goto yy144; } } else { if (yych <= 'f') { if (yych <= 'Z') goto yy144; if (yych <= '`') goto yy3; goto yy144; } else { if (yych <= 'g') goto yy1414; if (yych <= 'z') goto yy144; goto yy3; } } yy1414: YYDEBUG(1414, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'G') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'H') goto yy1415; if (yych != 'h') goto yy3; } yy1415: YYDEBUG(1415, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'T') goto yy1416; if (yych != 't') goto yy56; yy1416: YYDEBUG(1416, *YYCURSOR); yych = *++YYCURSOR; goto yy1362; yy1417: YYDEBUG(1417, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy193; goto yy195; } else { if (yych == ' ') goto yy195; goto yy193; } } else { if (yych <= ',') { if (yych <= ')') goto yy139; goto yy193; } else { if (yych <= '-') goto yy196; if (yych <= '.') goto yy195; goto yy193; } } } else { if (yych <= 'Z') { if (yych <= '@') { if (yych <= '9') goto yy195; goto yy193; } else { if (yych == 'C') goto yy1419; goto yy142; } } else { if (yych <= 'b') { if (yych <= '`') goto yy193; goto yy142; } else { if (yych <= 'c') goto yy1419; if (yych <= 'z') goto yy142; goto yy193; } } } yy1418: YYDEBUG(1418, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '-') { if (yych <= ' ') { if (yych == '\t') goto yy195; if (yych <= 0x1F) goto yy193; goto yy195; } else { if (yych == ')') goto yy139; if (yych <= ',') goto yy193; goto yy196; } } else { if (yych <= '@') { if (yych == '/') goto yy193; if (yych <= '9') goto yy195; goto yy193; } else { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy193; if (yych <= 'z') goto yy142; goto yy193; } } yy1419: YYDEBUG(1419, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'H') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'G') goto yy143; goto yy335; } } else { if (yych <= 'g') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 'h') goto yy335; if (yych <= 'z') goto yy143; goto yy3; } } yy1420: YYDEBUG(1420, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'X') { if (yych <= '.') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych == '-') goto yy147; goto yy3; } } else { if (yych <= '@') { if (yych <= '/') goto yy147; goto yy3; } else { if (yych == 'R') goto yy1417; goto yy141; } } } else { if (yych <= '`') { if (yych <= 'Z') { if (yych <= 'Y') goto yy1418; goto yy141; } else { if (yych == '_') goto yy147; goto yy3; } } else { if (yych <= 'x') { if (yych == 'r') goto yy1432; goto yy146; } else { if (yych <= 'y') goto yy1433; if (yych <= 'z') goto yy146; goto yy3; } } } yy1421: YYDEBUG(1421, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'C') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy141; } } else { if (yych <= '_') { if (yych <= 'D') goto yy1411; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'c') { if (yych <= '`') goto yy3; goto yy146; } else { if (yych <= 'd') goto yy1426; if (yych <= 'z') goto yy146; goto yy3; } } } yy1422: YYDEBUG(1422, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'M') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy141; } } else { if (yych <= '_') { if (yych <= 'N') goto yy1408; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'm') { if (yych <= '`') goto yy3; goto yy146; } else { if (yych <= 'n') goto yy1423; if (yych <= 'z') goto yy146; goto yy3; } } } yy1423: YYDEBUG(1423, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'C') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy166; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy166; goto yy142; } } else { if (yych <= '_') { if (yych <= 'D') goto yy1409; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy166; goto yy147; } else { if (yych <= 'c') { if (yych <= '`') goto yy166; goto yy150; } else { if (yych <= 'd') goto yy1424; if (yych <= 'z') goto yy150; goto yy166; } } } yy1424: YYDEBUG(1424, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '@') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; if (yych <= '/') goto yy147; goto yy3; } } else { if (yych <= '_') { if (yych <= 'A') goto yy1410; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= '`') goto yy3; if (yych <= 'a') goto yy1425; if (yych <= 'z') goto yy151; goto yy3; } } yy1425: YYDEBUG(1425, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'X') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy144; } } else { if (yych <= '_') { if (yych <= 'Y') goto yy1175; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'x') { if (yych <= '`') goto yy3; goto yy152; } else { if (yych <= 'y') goto yy1204; if (yych <= 'z') goto yy152; goto yy3; } } } yy1426: YYDEBUG(1426, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'M') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy142; } } else { if (yych <= '_') { if (yych <= 'N') goto yy1412; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'm') { if (yych <= '`') goto yy3; goto yy150; } else { if (yych <= 'n') goto yy1427; if (yych <= 'z') goto yy150; goto yy3; } } } yy1427: YYDEBUG(1427, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'H') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'I') goto yy1413; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'h') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 'i') goto yy1428; if (yych <= 'z') goto yy151; goto yy3; } } } yy1428: YYDEBUG(1428, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'F') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy144; } } else { if (yych <= '_') { if (yych <= 'G') goto yy1414; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'f') { if (yych <= '`') goto yy3; goto yy152; } else { if (yych <= 'g') goto yy1429; if (yych <= 'z') goto yy152; goto yy3; } } } yy1429: YYDEBUG(1429, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'G') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; if (yych <= '/') goto yy147; goto yy3; } } else { if (yych <= '`') { if (yych <= 'H') goto yy1415; if (yych == '_') goto yy147; goto yy3; } else { if (yych == 'h') goto yy1430; if (yych <= 'z') goto yy153; goto yy3; } } yy1430: YYDEBUG(1430, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'T') goto yy1416; if (yych != 't') goto yy154; YYDEBUG(1431, *YYCURSOR); yyaccept = 29; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 16) { goto yy153; } if (yych <= '.') { if (yych == '-') goto yy147; goto yy1362; } else { if (yych <= '/') goto yy147; if (yych == '_') goto yy147; goto yy1362; } yy1432: YYDEBUG(1432, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '9') { if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy193; goto yy195; } else { if (yych == ' ') goto yy195; goto yy193; } } else { if (yych <= '-') { if (yych <= ')') goto yy139; if (yych <= ',') goto yy193; goto yy311; } else { if (yych == '/') goto yy147; goto yy195; } } } else { if (yych <= '^') { if (yych <= 'B') { if (yych <= '@') goto yy193; goto yy142; } else { if (yych <= 'C') goto yy1419; if (yych <= 'Z') goto yy142; goto yy193; } } else { if (yych <= 'b') { if (yych <= '_') goto yy147; if (yych <= '`') goto yy193; goto yy150; } else { if (yych <= 'c') goto yy1434; if (yych <= 'z') goto yy150; goto yy193; } } } yy1433: YYDEBUG(1433, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '.') { if (yych <= ' ') { if (yych == '\t') goto yy195; if (yych <= 0x1F) goto yy193; goto yy195; } else { if (yych <= ')') { if (yych <= '(') goto yy193; goto yy139; } else { if (yych <= ',') goto yy193; if (yych <= '-') goto yy311; goto yy195; } } } else { if (yych <= 'Z') { if (yych <= '/') goto yy147; if (yych <= '9') goto yy195; if (yych <= '@') goto yy193; goto yy142; } else { if (yych <= '_') { if (yych <= '^') goto yy193; goto yy147; } else { if (yych <= '`') goto yy193; if (yych <= 'z') goto yy150; goto yy193; } } } yy1434: YYDEBUG(1434, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'G') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'H') goto yy335; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'g') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 'h') goto yy346; if (yych <= 'z') goto yy151; goto yy3; } } } yy1435: YYDEBUG(1435, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'W') { if (yych <= 'N') { if (yych == ')') goto yy139; if (yych <= '@') goto yy3; goto yy141; } else { if (yych <= 'O') goto yy1443; if (yych <= 'U') goto yy141; if (yych <= 'V') goto yy1444; goto yy1441; } } else { if (yych <= 'o') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; if (yych <= 'n') goto yy141; goto yy1443; } else { if (yych <= 'v') { if (yych <= 'u') goto yy141; goto yy1444; } else { if (yych <= 'w') goto yy1441; if (yych <= 'z') goto yy141; goto yy3; } } } yy1436: YYDEBUG(1436, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'X') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'W') goto yy141; goto yy1440; } } else { if (yych <= 'w') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; goto yy141; } else { if (yych <= 'x') goto yy1440; if (yych <= 'z') goto yy141; goto yy3; } } yy1437: YYDEBUG(1437, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'N') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'M') goto yy141; } } else { if (yych <= 'm') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; goto yy141; } else { if (yych <= 'n') goto yy1438; if (yych <= 'z') goto yy141; goto yy3; } } yy1438: YYDEBUG(1438, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'S') goto yy142; } } else { if (yych <= 's') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy3; goto yy142; } else { if (yych <= 't') goto yy1439; if (yych <= 'z') goto yy142; goto yy3; } } yy1439: YYDEBUG(1439, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'H') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'G') goto yy143; goto yy1178; } } else { if (yych <= 'g') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 'h') goto yy1178; if (yych <= 'z') goto yy143; goto yy3; } } yy1440: YYDEBUG(1440, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'S') goto yy142; goto yy1370; } } else { if (yych <= 's') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy3; goto yy142; } else { if (yych <= 't') goto yy1370; if (yych <= 'z') goto yy142; goto yy3; } } yy1441: YYDEBUG(1441, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '@') { if (yych == ')') goto yy139; } else { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy1442; if (yych <= 'z') goto yy142; } yy1442: YYDEBUG(1442, *YYCURSOR); { DEBUG_OUTPUT("now"); TIMELIB_INIT; TIMELIB_DEINIT; return TIMELIB_RELATIVE; } yy1443: YYDEBUG(1443, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'N') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'M') goto yy142; goto yy1449; } } else { if (yych <= 'm') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy3; goto yy142; } else { if (yych <= 'n') goto yy1449; if (yych <= 'z') goto yy142; goto yy3; } } yy1444: YYDEBUG(1444, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy193; goto yy195; } else { if (yych == ' ') goto yy195; goto yy193; } } else { if (yych <= ',') { if (yych <= ')') goto yy139; goto yy193; } else { if (yych <= '-') goto yy196; if (yych <= '.') goto yy195; goto yy193; } } } else { if (yych <= 'Z') { if (yych <= '@') { if (yych <= '9') goto yy195; goto yy193; } else { if (yych != 'E') goto yy142; } } else { if (yych <= 'd') { if (yych <= '`') goto yy193; goto yy142; } else { if (yych <= 'e') goto yy1445; if (yych <= 'z') goto yy142; goto yy193; } } } yy1445: YYDEBUG(1445, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'M') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'L') goto yy143; } } else { if (yych <= 'l') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 'm') goto yy1446; if (yych <= 'z') goto yy143; goto yy3; } } yy1446: YYDEBUG(1446, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'B') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'A') goto yy144; } } else { if (yych <= 'a') { if (yych <= 'Z') goto yy144; if (yych <= '`') goto yy3; goto yy144; } else { if (yych <= 'b') goto yy1447; if (yych <= 'z') goto yy144; goto yy3; } } yy1447: YYDEBUG(1447, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'D') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'E') goto yy1448; if (yych != 'e') goto yy3; } yy1448: YYDEBUG(1448, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy204; if (yych == 'r') goto yy204; goto yy56; yy1449: YYDEBUG(1449, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '@') { if (yych == ')') goto yy139; } else { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy1450; if (yych <= 'z') goto yy143; } yy1450: YYDEBUG(1450, *YYCURSOR); { DEBUG_OUTPUT("noon"); TIMELIB_INIT; TIMELIB_UNHAVE_TIME(); TIMELIB_HAVE_TIME(); s->time->h = 12; TIMELIB_DEINIT; return TIMELIB_RELATIVE; } yy1451: YYDEBUG(1451, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'V') { if (yych <= '.') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych == '-') goto yy147; goto yy3; } } else { if (yych <= 'N') { if (yych <= '/') goto yy147; if (yych <= '@') goto yy3; goto yy141; } else { if (yych <= 'O') goto yy1443; if (yych <= 'U') goto yy141; goto yy1444; } } } else { if (yych <= 'n') { if (yych <= '^') { if (yych <= 'W') goto yy1441; if (yych <= 'Z') goto yy141; goto yy3; } else { if (yych <= '_') goto yy147; if (yych <= '`') goto yy3; goto yy146; } } else { if (yych <= 'v') { if (yych <= 'o') goto yy1458; if (yych <= 'u') goto yy146; goto yy1459; } else { if (yych <= 'w') goto yy1457; if (yych <= 'z') goto yy146; goto yy3; } } } yy1452: YYDEBUG(1452, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'W') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy141; } } else { if (yych <= '_') { if (yych <= 'X') goto yy1440; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'w') { if (yych <= '`') goto yy3; goto yy146; } else { if (yych <= 'x') goto yy1456; if (yych <= 'z') goto yy146; goto yy3; } } } yy1453: YYDEBUG(1453, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'M') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy141; } } else { if (yych <= '_') { if (yych <= 'N') goto yy1438; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'm') { if (yych <= '`') goto yy3; goto yy146; } else { if (yych <= 'n') goto yy1454; if (yych <= 'z') goto yy146; goto yy3; } } } yy1454: YYDEBUG(1454, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy142; } } else { if (yych <= '_') { if (yych <= 'T') goto yy1439; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 's') { if (yych <= '`') goto yy3; goto yy150; } else { if (yych <= 't') goto yy1455; if (yych <= 'z') goto yy150; goto yy3; } } } yy1455: YYDEBUG(1455, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'G') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'H') goto yy1178; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'g') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 'h') goto yy1207; if (yych <= 'z') goto yy151; goto yy3; } } } yy1456: YYDEBUG(1456, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy142; } } else { if (yych <= '_') { if (yych <= 'T') goto yy1370; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 's') { if (yych <= '`') goto yy3; goto yy150; } else { if (yych <= 't') goto yy1402; if (yych <= 'z') goto yy150; goto yy3; } } } yy1457: YYDEBUG(1457, *YYCURSOR); yyaccept = 30; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy1442; } else { if (yych == '.') goto yy1442; goto yy147; } } else { if (yych <= '^') { if (yych <= '@') goto yy1442; if (yych <= 'Z') goto yy142; goto yy1442; } else { if (yych <= '_') goto yy147; if (yych <= '`') goto yy1442; if (yych <= 'z') goto yy150; goto yy1442; } } yy1458: YYDEBUG(1458, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'M') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy142; } } else { if (yych <= '_') { if (yych <= 'N') goto yy1449; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'm') { if (yych <= '`') goto yy3; goto yy150; } else { if (yych <= 'n') goto yy1464; if (yych <= 'z') goto yy150; goto yy3; } } } yy1459: YYDEBUG(1459, *YYCURSOR); yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '9') { if (yych <= '(') { if (yych <= '\t') { if (yych <= 0x08) goto yy193; goto yy195; } else { if (yych == ' ') goto yy195; goto yy193; } } else { if (yych <= '-') { if (yych <= ')') goto yy139; if (yych <= ',') goto yy193; goto yy311; } else { if (yych == '/') goto yy147; goto yy195; } } } else { if (yych <= '^') { if (yych <= 'D') { if (yych <= '@') goto yy193; goto yy142; } else { if (yych <= 'E') goto yy1445; if (yych <= 'Z') goto yy142; goto yy193; } } else { if (yych <= 'd') { if (yych <= '_') goto yy147; if (yych <= '`') goto yy193; goto yy150; } else { if (yych <= 'e') goto yy1460; if (yych <= 'z') goto yy150; goto yy193; } } } yy1460: YYDEBUG(1460, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'L') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'M') goto yy1446; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'l') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 'm') goto yy1461; if (yych <= 'z') goto yy151; goto yy3; } } } yy1461: YYDEBUG(1461, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'A') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy144; } } else { if (yych <= '_') { if (yych <= 'B') goto yy1447; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'a') { if (yych <= '`') goto yy3; goto yy152; } else { if (yych <= 'b') goto yy1462; if (yych <= 'z') goto yy152; goto yy3; } } } yy1462: YYDEBUG(1462, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'D') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; if (yych <= '/') goto yy147; goto yy3; } } else { if (yych <= '`') { if (yych <= 'E') goto yy1448; if (yych == '_') goto yy147; goto yy3; } else { if (yych == 'e') goto yy1463; if (yych <= 'z') goto yy153; goto yy3; } } yy1463: YYDEBUG(1463, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'R') goto yy204; if (yych == 'r') goto yy316; goto yy154; yy1464: YYDEBUG(1464, *YYCURSOR); yyaccept = 31; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy1450; } else { if (yych == '.') goto yy1450; goto yy147; } } else { if (yych <= '^') { if (yych <= '@') goto yy1450; if (yych <= 'Z') goto yy143; goto yy1450; } else { if (yych <= '_') goto yy147; if (yych <= '`') goto yy1450; if (yych <= 'z') goto yy151; goto yy1450; } } yy1465: YYDEBUG(1465, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'S') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'R') goto yy141; } } else { if (yych <= 'r') { if (yych <= 'Z') goto yy141; if (yych <= '`') goto yy3; goto yy141; } else { if (yych <= 's') goto yy1466; if (yych <= 'z') goto yy141; goto yy3; } } yy1466: YYDEBUG(1466, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'S') goto yy142; } } else { if (yych <= 's') { if (yych <= 'Z') goto yy142; if (yych <= '`') goto yy3; goto yy142; } else { if (yych <= 't') goto yy1467; if (yych <= 'z') goto yy142; goto yy3; } } yy1467: YYDEBUG(1467, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'E') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'D') goto yy143; } } else { if (yych <= 'd') { if (yych <= 'Z') goto yy143; if (yych <= '`') goto yy3; goto yy143; } else { if (yych <= 'e') goto yy1468; if (yych <= 'z') goto yy143; goto yy3; } } yy1468: YYDEBUG(1468, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'R') { if (yych <= ')') { if (yych <= '(') goto yy3; goto yy139; } else { if (yych <= '@') goto yy3; if (yych <= 'Q') goto yy144; } } else { if (yych <= 'q') { if (yych <= 'Z') goto yy144; if (yych <= '`') goto yy3; goto yy144; } else { if (yych <= 'r') goto yy1469; if (yych <= 'z') goto yy144; goto yy3; } } yy1469: YYDEBUG(1469, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'C') { if (yych == ')') goto yy139; goto yy3; } else { if (yych <= 'D') goto yy1470; if (yych != 'd') goto yy3; } yy1470: YYDEBUG(1470, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy1471; if (yych != 'a') goto yy56; yy1471: YYDEBUG(1471, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy1472; if (yych != 'y') goto yy56; yy1472: YYDEBUG(1472, *YYCURSOR); ++YYCURSOR; yy1473: YYDEBUG(1473, *YYCURSOR); { DEBUG_OUTPUT("yesterday"); TIMELIB_INIT; TIMELIB_HAVE_RELATIVE(); TIMELIB_UNHAVE_TIME(); s->time->relative.d = -1; TIMELIB_DEINIT; return TIMELIB_RELATIVE; } yy1474: YYDEBUG(1474, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'R') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy141; } } else { if (yych <= '_') { if (yych <= 'S') goto yy1466; if (yych <= 'Z') goto yy141; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'r') { if (yych <= '`') goto yy3; goto yy146; } else { if (yych <= 's') goto yy1475; if (yych <= 'z') goto yy146; goto yy3; } } } yy1475: YYDEBUG(1475, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'S') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy142; } } else { if (yych <= '_') { if (yych <= 'T') goto yy1467; if (yych <= 'Z') goto yy142; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 's') { if (yych <= '`') goto yy3; goto yy150; } else { if (yych <= 't') goto yy1476; if (yych <= 'z') goto yy150; goto yy3; } } } yy1476: YYDEBUG(1476, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'D') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy143; } } else { if (yych <= '_') { if (yych <= 'E') goto yy1468; if (yych <= 'Z') goto yy143; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'd') { if (yych <= '`') goto yy3; goto yy151; } else { if (yych <= 'e') goto yy1477; if (yych <= 'z') goto yy151; goto yy3; } } } yy1477: YYDEBUG(1477, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'Q') { if (yych <= '-') { if (yych == ')') goto yy139; if (yych <= ',') goto yy3; goto yy147; } else { if (yych == '/') goto yy147; if (yych <= '@') goto yy3; goto yy144; } } else { if (yych <= '_') { if (yych <= 'R') goto yy1469; if (yych <= 'Z') goto yy144; if (yych <= '^') goto yy3; goto yy147; } else { if (yych <= 'q') { if (yych <= '`') goto yy3; goto yy152; } else { if (yych <= 'r') goto yy1478; if (yych <= 'z') goto yy152; goto yy3; } } } yy1478: YYDEBUG(1478, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'C') { if (yych <= ',') { if (yych == ')') goto yy139; goto yy3; } else { if (yych == '.') goto yy3; if (yych <= '/') goto yy147; goto yy3; } } else { if (yych <= '`') { if (yych <= 'D') goto yy1470; if (yych == '_') goto yy147; goto yy3; } else { if (yych == 'd') goto yy1479; if (yych <= 'z') goto yy153; goto yy3; } } yy1479: YYDEBUG(1479, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'A') goto yy1471; if (yych != 'a') goto yy154; YYDEBUG(1480, *YYCURSOR); yych = *++YYCURSOR; if (yych == 'Y') goto yy1472; if (yych != 'y') goto yy154; YYDEBUG(1481, *YYCURSOR); yyaccept = 32; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 16) { goto yy153; } if (yych <= '.') { if (yych == '-') goto yy147; goto yy1473; } else { if (yych <= '/') goto yy147; if (yych == '_') goto yy147; goto yy1473; } } } #define YYMAXFILL 33 timelib_time* timelib_strtotime(char *s, size_t len, struct timelib_error_container **errors, const timelib_tzdb *tzdb, timelib_tz_get_wrapper tz_get_wrapper) { Scanner in; int t; char *e = s + len - 1; memset(&in, 0, sizeof(in)); in.errors = timelib_malloc(sizeof(struct timelib_error_container)); in.errors->warning_count = 0; in.errors->warning_messages = NULL; in.errors->error_count = 0; in.errors->error_messages = NULL; if (len > 0) { while (isspace(*s) && s < e) { s++; } while (isspace(*e) && e > s) { e--; } } if (e - s < 0) { in.time = timelib_time_ctor(); add_error(&in, "Empty string"); if (errors) { *errors = in.errors; } else { timelib_error_container_dtor(in.errors); } in.time->y = in.time->d = in.time->m = in.time->h = in.time->i = in.time->s = in.time->f = in.time->dst = in.time->z = TIMELIB_UNSET; in.time->is_localtime = in.time->zone_type = 0; return in.time; } e++; in.str = timelib_malloc((e - s) + YYMAXFILL); memset(in.str, 0, (e - s) + YYMAXFILL); memcpy(in.str, s, (e - s)); in.lim = in.str + (e - s) + YYMAXFILL; in.cur = in.str; in.time = timelib_time_ctor(); in.time->y = TIMELIB_UNSET; in.time->d = TIMELIB_UNSET; in.time->m = TIMELIB_UNSET; in.time->h = TIMELIB_UNSET; in.time->i = TIMELIB_UNSET; in.time->s = TIMELIB_UNSET; in.time->f = TIMELIB_UNSET; in.time->z = TIMELIB_UNSET; in.time->dst = TIMELIB_UNSET; in.tzdb = tzdb; in.time->is_localtime = 0; in.time->zone_type = 0; in.time->relative.days = TIMELIB_UNSET; do { t = scan(&in, tz_get_wrapper); #ifdef DEBUG_PARSER printf("%d\n", t); #endif } while(t != EOI); /* do funky checking whether the parsed time was valid time */ if (in.time->have_time && !timelib_valid_time( in.time->h, in.time->i, in.time->s)) { add_warning(&in, "The parsed time was invalid"); } /* do funky checking whether the parsed date was valid date */ if (in.time->have_date && !timelib_valid_date( in.time->y, in.time->m, in.time->d)) { add_warning(&in, "The parsed date was invalid"); } timelib_free(in.str); if (errors) { *errors = in.errors; } else { timelib_error_container_dtor(in.errors); } return in.time; } #define TIMELIB_CHECK_NUMBER \ if (strchr("0123456789", *ptr) == NULL) \ { \ add_pbf_error(s, "Unexpected data found.", string, begin); \ } #define TIMELIB_CHECK_SIGNED_NUMBER \ if (strchr("-0123456789", *ptr) == NULL) \ { \ add_pbf_error(s, "Unexpected data found.", string, begin); \ } static void timelib_time_reset_fields(timelib_time *time) { assert(time != NULL); time->y = 1970; time->m = 1; time->d = 1; time->h = time->i = time->s = 0; time->f = 0.0; time->tz_info = NULL; } static void timelib_time_reset_unset_fields(timelib_time *time) { assert(time != NULL); if (time->y == TIMELIB_UNSET ) time->y = 1970; if (time->m == TIMELIB_UNSET ) time->m = 1; if (time->d == TIMELIB_UNSET ) time->d = 1; if (time->h == TIMELIB_UNSET ) time->h = 0; if (time->i == TIMELIB_UNSET ) time->i = 0; if (time->s == TIMELIB_UNSET ) time->s = 0; if (time->f == TIMELIB_UNSET ) time->f = 0.0; } timelib_time *timelib_parse_from_format(char *format, char *string, size_t len, timelib_error_container **errors, const timelib_tzdb *tzdb, timelib_tz_get_wrapper tz_get_wrapper) { char *fptr = format; char *ptr = string; char *begin; timelib_sll tmp; Scanner in; Scanner *s = ∈ int allow_extra = 0; memset(&in, 0, sizeof(in)); in.errors = timelib_malloc(sizeof(struct timelib_error_container)); in.errors->warning_count = 0; in.errors->warning_messages = NULL; in.errors->error_count = 0; in.errors->error_messages = NULL; in.time = timelib_time_ctor(); in.time->y = TIMELIB_UNSET; in.time->d = TIMELIB_UNSET; in.time->m = TIMELIB_UNSET; in.time->h = TIMELIB_UNSET; in.time->i = TIMELIB_UNSET; in.time->s = TIMELIB_UNSET; in.time->f = TIMELIB_UNSET; in.time->z = TIMELIB_UNSET; in.time->dst = TIMELIB_UNSET; in.tzdb = tzdb; in.time->is_localtime = 0; in.time->zone_type = 0; /* Loop over the format string */ while (*fptr && *ptr) { begin = ptr; switch (*fptr) { case 'D': /* three letter day */ case 'l': /* full day */ { const timelib_relunit* tmprel = 0; tmprel = timelib_lookup_relunit((char **) &ptr); if (!tmprel) { add_pbf_error(s, "A textual day could not be found", string, begin); break; } else { in.time->have_relative = 1; in.time->relative.have_weekday_relative = 1; in.time->relative.weekday = tmprel->multiplier; in.time->relative.weekday_behavior = 1; } } break; case 'd': /* two digit day, with leading zero */ case 'j': /* two digit day, without leading zero */ TIMELIB_CHECK_NUMBER; if ((s->time->d = timelib_get_nr((char **) &ptr, 2)) == TIMELIB_UNSET) { add_pbf_error(s, "A two digit day could not be found", string, begin); } break; case 'S': /* day suffix, ignored, nor checked */ timelib_skip_day_suffix((char **) &ptr); break; case 'z': /* day of year - resets month (0 based) - also initializes everything else to !TIMELIB_UNSET */ TIMELIB_CHECK_NUMBER; if ((tmp = timelib_get_nr((char **) &ptr, 3)) == TIMELIB_UNSET) { add_pbf_error(s, "A three digit day-of-year could not be found", string, begin); } else { s->time->m = 1; s->time->d = tmp + 1; timelib_do_normalize(s->time); } break; case 'm': /* two digit month, with leading zero */ case 'n': /* two digit month, without leading zero */ TIMELIB_CHECK_NUMBER; if ((s->time->m = timelib_get_nr((char **) &ptr, 2)) == TIMELIB_UNSET) { add_pbf_error(s, "A two digit month could not be found", string, begin); } break; case 'M': /* three letter month */ case 'F': /* full month */ tmp = timelib_lookup_month((char **) &ptr); if (!tmp) { add_pbf_error(s, "A textual month could not be found", string, begin); } else { s->time->m = tmp; } break; case 'y': /* two digit year */ { int length = 0; TIMELIB_CHECK_NUMBER; if ((s->time->y = timelib_get_nr_ex((char **) &ptr, 2, &length)) == TIMELIB_UNSET) { add_pbf_error(s, "A two digit year could not be found", string, begin); } TIMELIB_PROCESS_YEAR(s->time->y, length); } break; case 'Y': /* four digit year */ TIMELIB_CHECK_NUMBER; if ((s->time->y = timelib_get_nr((char **) &ptr, 4)) == TIMELIB_UNSET) { add_pbf_error(s, "A four digit year could not be found", string, begin); } break; case 'g': /* two digit hour, with leading zero */ case 'h': /* two digit hour, without leading zero */ TIMELIB_CHECK_NUMBER; if ((s->time->h = timelib_get_nr((char **) &ptr, 2)) == TIMELIB_UNSET) { add_pbf_error(s, "A two digit hour could not be found", string, begin); } if (s->time->h > 12) { add_pbf_error(s, "Hour can not be higher than 12", string, begin); } break; case 'G': /* two digit hour, with leading zero */ case 'H': /* two digit hour, without leading zero */ TIMELIB_CHECK_NUMBER; if ((s->time->h = timelib_get_nr((char **) &ptr, 2)) == TIMELIB_UNSET) { add_pbf_error(s, "A two digit hour could not be found", string, begin); } break; case 'a': /* am/pm/a.m./p.m. */ case 'A': /* AM/PM/A.M./P.M. */ if (s->time->h == TIMELIB_UNSET) { add_pbf_error(s, "Meridian can only come after an hour has been found", string, begin); } else if ((tmp = timelib_meridian_with_check((char **) &ptr, s->time->h)) == TIMELIB_UNSET) { add_pbf_error(s, "A meridian could not be found", string, begin); } else { s->time->h += tmp; } break; case 'i': /* two digit minute, with leading zero */ { int length; timelib_sll min; TIMELIB_CHECK_NUMBER; min = timelib_get_nr_ex((char **) &ptr, 2, &length); if (min == TIMELIB_UNSET || length != 2) { add_pbf_error(s, "A two digit minute could not be found", string, begin); } else { s->time->i = min; } } break; case 's': /* two digit second, with leading zero */ { int length; timelib_sll sec; TIMELIB_CHECK_NUMBER; sec = timelib_get_nr_ex((char **) &ptr, 2, &length); if (sec == TIMELIB_UNSET || length != 2) { add_pbf_error(s, "A two digit second could not be found", string, begin); } else { s->time->s = sec; } } break; case 'u': /* up to six digit millisecond */ { double f; char *tptr; TIMELIB_CHECK_NUMBER; tptr = ptr; if ((f = timelib_get_nr((char **) &ptr, 6)) == TIMELIB_UNSET || (ptr - tptr < 1)) { add_pbf_error(s, "A six digit millisecond could not be found", string, begin); } else { s->time->f = (f / pow(10, (ptr - tptr))); } } break; case ' ': /* any sort of whitespace (' ' and \t) */ timelib_eat_spaces((char **) &ptr); break; case 'U': /* epoch seconds */ TIMELIB_CHECK_SIGNED_NUMBER; TIMELIB_HAVE_RELATIVE(); tmp = timelib_get_unsigned_nr((char **) &ptr, 24); s->time->y = 1970; s->time->m = 1; s->time->d = 1; s->time->h = s->time->i = s->time->s = 0; s->time->f = 0.0; s->time->relative.s += tmp; s->time->is_localtime = 1; s->time->zone_type = TIMELIB_ZONETYPE_OFFSET; s->time->z = 0; s->time->dst = 0; break; case 'e': /* timezone */ case 'P': /* timezone */ case 'T': /* timezone */ case 'O': /* timezone */ { int tz_not_found; s->time->z = timelib_parse_zone((char **) &ptr, &s->time->dst, s->time, &tz_not_found, s->tzdb, tz_get_wrapper); if (tz_not_found) { add_pbf_error(s, "The timezone could not be found in the database", string, begin); } } break; case '#': /* separation symbol */ if (*ptr == ';' || *ptr == ':' || *ptr == '/' || *ptr == '.' || *ptr == ',' || *ptr == '-' || *ptr == '(' || *ptr == ')') { ++ptr; } else { add_pbf_error(s, "The separation symbol ([;:/.,-]) could not be found", string, begin); } break; case ';': case ':': case '/': case '.': case ',': case '-': case '(': case ')': if (*ptr == *fptr) { ++ptr; } else { add_pbf_error(s, "The separation symbol could not be found", string, begin); } break; case '!': /* reset all fields to default */ timelib_time_reset_fields(s->time); break; /* break intentionally not missing */ case '|': /* reset all fields to default when not set */ timelib_time_reset_unset_fields(s->time); break; /* break intentionally not missing */ case '?': /* random char */ ++ptr; break; case '\\': /* escaped char */ if(!fptr[1]) { add_pbf_error(s, "Escaped character expected", string, begin); break; } fptr++; if (*ptr == *fptr) { ++ptr; } else { add_pbf_error(s, "The escaped character could not be found", string, begin); } break; case '*': /* random chars until a separator or number ([ \t.,:;/-0123456789]) */ timelib_eat_until_separator((char **) &ptr); break; case '+': /* allow extra chars in the format */ allow_extra = 1; break; default: if (*fptr != *ptr) { add_pbf_error(s, "The format separator does not match", string, begin); } ptr++; } fptr++; } if (*ptr) { if (allow_extra) { add_pbf_warning(s, "Trailing data", string, ptr); } else { add_pbf_error(s, "Trailing data", string, ptr); } } /* ignore trailing +'s */ while (*fptr == '+') { fptr++; } if (*fptr) { /* Trailing | and ! specifiers are valid. */ int done = 0; while (*fptr && !done) { switch (*fptr++) { case '!': /* reset all fields to default */ timelib_time_reset_fields(s->time); break; case '|': /* reset all fields to default when not set */ timelib_time_reset_unset_fields(s->time); break; default: add_pbf_error(s, "Data missing", string, ptr); done = 1; } } } /* clean up a bit */ if (s->time->h != TIMELIB_UNSET || s->time->i != TIMELIB_UNSET || s->time->s != TIMELIB_UNSET) { if (s->time->h == TIMELIB_UNSET ) { s->time->h = 0; } if (s->time->i == TIMELIB_UNSET ) { s->time->i = 0; } if (s->time->s == TIMELIB_UNSET ) { s->time->s = 0; } } /* do funky checking whether the parsed time was valid time */ if (s->time->h != TIMELIB_UNSET && s->time->i != TIMELIB_UNSET && s->time->s != TIMELIB_UNSET && !timelib_valid_time( s->time->h, s->time->i, s->time->s)) { add_pbf_warning(s, "The parsed time was invalid", string, ptr); } /* do funky checking whether the parsed date was valid date */ if (s->time->y != TIMELIB_UNSET && s->time->m != TIMELIB_UNSET && s->time->d != TIMELIB_UNSET && !timelib_valid_date( s->time->y, s->time->m, s->time->d)) { add_pbf_warning(s, "The parsed date was invalid", string, ptr); } if (errors) { *errors = in.errors; } else { timelib_error_container_dtor(in.errors); } return in.time; } void timelib_fill_holes(timelib_time *parsed, timelib_time *now, int options) { if (!(options & TIMELIB_OVERRIDE_TIME) && parsed->have_date && !parsed->have_time) { parsed->h = 0; parsed->i = 0; parsed->s = 0; parsed->f = 0; } if (parsed->y == TIMELIB_UNSET) parsed->y = now->y != TIMELIB_UNSET ? now->y : 0; if (parsed->d == TIMELIB_UNSET) parsed->d = now->d != TIMELIB_UNSET ? now->d : 0; if (parsed->m == TIMELIB_UNSET) parsed->m = now->m != TIMELIB_UNSET ? now->m : 0; if (parsed->h == TIMELIB_UNSET) parsed->h = now->h != TIMELIB_UNSET ? now->h : 0; if (parsed->i == TIMELIB_UNSET) parsed->i = now->i != TIMELIB_UNSET ? now->i : 0; if (parsed->s == TIMELIB_UNSET) parsed->s = now->s != TIMELIB_UNSET ? now->s : 0; if (parsed->f == TIMELIB_UNSET) parsed->f = now->f != TIMELIB_UNSET ? now->f : 0; if (parsed->z == TIMELIB_UNSET) parsed->z = now->z != TIMELIB_UNSET ? now->z : 0; if (parsed->dst == TIMELIB_UNSET) parsed->dst = now->dst != TIMELIB_UNSET ? now->dst : 0; if (!parsed->tz_abbr) { parsed->tz_abbr = now->tz_abbr ? timelib_strdup(now->tz_abbr) : NULL; } if (!parsed->tz_info) { parsed->tz_info = now->tz_info ? (!(options & TIMELIB_NO_CLONE) ? timelib_tzinfo_clone(now->tz_info) : now->tz_info) : NULL; } if (parsed->zone_type == 0 && now->zone_type != 0) { parsed->zone_type = now->zone_type; /* parsed->tz_abbr = now->tz_abbr ? timelib_strdup(now->tz_abbr) : NULL; parsed->tz_info = now->tz_info ? timelib_tzinfo_clone(now->tz_info) : NULL; */ parsed->is_localtime = 1; } /* timelib_dump_date(parsed, 2); timelib_dump_date(now, 2); */ } char *timelib_timezone_id_from_abbr(const char *abbr, timelib_long gmtoffset, int isdst) { const timelib_tz_lookup_table *tp; tp = abbr_search(abbr, gmtoffset, isdst); if (tp) { return (tp->full_tz_name); } else { return NULL; } } const timelib_tz_lookup_table *timelib_timezone_abbreviations_list(void) { return timelib_timezone_lookup; } #ifdef DEBUG_PARSER_STUB int main(void) { timelib_time time = timelib_strtotime("May 12"); printf ("%04d-%02d-%02d %02d:%02d:%02d.%-5d %+04d %1d", time.y, time.m, time.d, time.h, time.i, time.s, time.f, time.z, time.dst); if (time.have_relative) { printf ("%3dY %3dM %3dD / %3dH %3dM %3dS", time.relative.y, time.relative.m, time.relative.d, time.relative.h, time.relative.i, time.relative.s); } if (time.have_weekday_relative) { printf (" / %d", time.relative.weekday); } if (time.have_weeknr_day) { printf(" / %dW%d", time.relative.weeknr_day.weeknr, time.relative.weeknr_day.dayofweek); } return 0; } #endif /* * vim: syntax=c */