Ignore:
Timestamp:
03/02/10 08:03:19 (15 years ago)
Author:
Nicholas Riley
Message:

Update to Date::Manip 5.55 (with a fix to require Perl 5.8 rather than 5.10 in DM5abbrevs.pm).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Cocoa/Pester/Source/Manip.pm

    r617 r618  
    11package Date::Manip;
    2 # Copyright (c) 1995-2007 Sullivan Beck.  All rights reserved.
     2# Copyright (c) 1995-2010 Sullivan Beck.  All rights reserved.
    33# This program is free software; you can redistribute it and/or modify it
    44# under the same terms as Perl itself.
     
    66###########################################################################
    77###########################################################################
     8
     9use warnings;
    810
    911use vars qw($OS %Lang %Holiday %Events %Curr %Cnf %Zone $VERSION @ISA @EXPORT);
     
    3739
    3840# Determine if we're doing taint checking
    39 $Date::Manip::NoTaint = eval { local $^W=0; eval("#" . substr($^X, 0, 0)); 1 };
     41#if ($] < 5.0080) {
     42  $Date::Manip::NoTaint = eval { local $^W=0; eval("#" . substr($^X, 0, 0)); 1 };
     43#} else {
     44#  $Date::Manip::NoTaint = (${^TAINT} == 0 ? 1 : 0);
     45#}
    4046
    4147###########################################################################
     
    212218use IO::File;
    213219
    214 $VERSION="5.47";
     220use vars qw($Abbrevs);
     221use Date::Manip::DM5abbrevs;
     222
     223$VERSION="5.55";
    215224
    216225########################################################################
     
    242251no strict "vars";
    243252# This sorts from longest to shortest element
    244 sub sortByLength {
     253sub _sortByLength {
    245254  return (length $b <=> length $a);
    246255}
     
    276285      if ($val) {
    277286        $Curr{"InitFilesRead"}=0;
    278         &EraseHolidays();
     287        EraseHolidays();
    279288      }
    280289    } elsif ($var =~ /^PathSep$/i) {
     
    290299      $Cnf{"IgnoreGlobalCnf"}=1;
    291300    } elsif ($var =~ /^EraseHolidays$/i) {
    292       &EraseHolidays();
     301      EraseHolidays();
    293302    } else {
    294303      push(@tmp,$_);
     
    302311
    303312    if ($Cnf{"GlobalCnf"}) {
    304       $file=&ExpandTilde($Cnf{"GlobalCnf"});
    305       &Date_InitFile($file)  if ($file);
     313      $file=_ExpandTilde($Cnf{"GlobalCnf"});
     314      _Date_InitFile($file)  if ($file);
    306315    }
    307316  }
     
    312321
    313322    if ($Cnf{"PersonalCnf"}  and  $Cnf{"PersonalCnfPath"}) {
    314       $file=&SearchPath($Cnf{"PersonalCnf"},$Cnf{"PersonalCnfPath"},"r");
    315       &Date_InitFile($file)  if ($file);
     323      $file=_SearchPath($Cnf{"PersonalCnf"},$Cnf{"PersonalCnfPath"},"r");
     324      _Date_InitFile($file)  if ($file);
    316325    }
    317326  }
     
    323332    ($var,$val)=($1,$2);
    324333    $val=""  if (! defined $val);
    325     &Date_SetConfigVariable($var,$val);
     334    _Date_SetConfigVariable($var,$val);
    326335  }
    327336
    328337  confess "ERROR: Unknown FirstDay in Date::Manip.\n"
    329     if (! &IsInt($Cnf{"FirstDay"},1,7));
     338    if (! _IsInt($Cnf{"FirstDay"},1,7));
    330339  confess "ERROR: Unknown WorkWeekBeg in Date::Manip.\n"
    331     if (! &IsInt($Cnf{"WorkWeekBeg"},1,7));
     340    if (! _IsInt($Cnf{"WorkWeekBeg"},1,7));
    332341  confess "ERROR: Unknown WorkWeekEnd in Date::Manip.\n"
    333     if (! &IsInt($Cnf{"WorkWeekEnd"},1,7));
     342    if (! _IsInt($Cnf{"WorkWeekEnd"},1,7));
    334343  confess "ERROR: Invalid WorkWeek in Date::Manip.\n"
    335344    if ($Cnf{"WorkWeekEnd"} <= $Cnf{"WorkWeekBeg"});
     
    338347     $tmp,%tmp,$tmp2,@tmp2,
    339348     $i,$j,@tmp3,
    340      $zonesrfc,@zones)=();
     349     @zones)=();
    341350
    342351  my($L)=$Cnf{"Language"};
     
    346355
    347356    if ($L eq "English") {
    348       &Date_Init_English(\%lang);
     357      _Date_Init_English(\%lang);
    349358
    350359    } elsif ($L eq "French") {
    351       &Date_Init_French(\%lang);
     360      _Date_Init_French(\%lang);
    352361
    353362    } elsif ($L eq "Swedish") {
    354       &Date_Init_Swedish(\%lang);
     363      _Date_Init_Swedish(\%lang);
    355364
    356365    } elsif ($L eq "German") {
    357       &Date_Init_German(\%lang);
     366      _Date_Init_German(\%lang);
    358367
    359368    } elsif ($L eq "Polish") {
    360       &Date_Init_Polish(\%lang);
     369      _Date_Init_Polish(\%lang);
    361370
    362371    } elsif ($L eq "Dutch"  ||
    363372             $L eq "Nederlands") {
    364       &Date_Init_Dutch(\%lang);
     373      _Date_Init_Dutch(\%lang);
    365374
    366375    } elsif ($L eq "Spanish") {
    367       &Date_Init_Spanish(\%lang);
     376      _Date_Init_Spanish(\%lang);
    368377
    369378    } elsif ($L eq "Portuguese") {
    370       &Date_Init_Portuguese(\%lang);
     379      _Date_Init_Portuguese(\%lang);
    371380
    372381    } elsif ($L eq "Romanian") {
    373       &Date_Init_Romanian(\%lang);
     382      _Date_Init_Romanian(\%lang);
    374383
    375384    } elsif ($L eq "Italian") {
    376       &Date_Init_Italian(\%lang);
     385      _Date_Init_Italian(\%lang);
    377386
    378387    } elsif ($L eq "Russian") {
    379       &Date_Init_Russian(\%lang);
     388      _Date_Init_Russian(\%lang);
    380389
    381390    } elsif ($L eq "Turkish") {
    382       &Date_Init_Turkish(\%lang);
     391      _Date_Init_Turkish(\%lang);
    383392
    384393    } elsif ($L eq "Danish") {
    385       &Date_Init_Danish(\%lang);
     394      _Date_Init_Danish(\%lang);
    386395
    387396    } elsif ($L eq "Catalan") {
    388       &Date_Init_Catalan(\%lang);
     397      _Date_Init_Catalan(\%lang);
    389398
    390399    } else {
     
    401410    $Lang{$L}{"MonthL"}=[];
    402411    $Lang{$L}{"MonL"}=[];
    403     &Date_InitLists([$lang{"month_name"},
     412    _Date_InitLists([$lang{"month_name"},
    404413                     $lang{"month_abb"}],
    405414                    \$Lang{$L}{"Month"},"lc,sort,back",
     
    419428    $Lang{$L}{"WkL"}=[];
    420429    $Lang{$L}{"WL"}=[];
    421     &Date_InitLists([$lang{"day_name"},
     430    _Date_InitLists([$lang{"day_name"},
    422431                     $lang{"day_abb"}],
    423432                    \$Lang{$L}{"Week"},"lc,sort,back",
     
    425434                     $Lang{$L}{"WkL"}],
    426435                    [$Lang{$L}{"WeekH"},1]);
    427     &Date_InitLists([$lang{"day_char"}],
     436    _Date_InitLists([$lang{"day_char"}],
    428437                    "","lc",
    429438                    [$Lang{$L}{"WL"}],
     
    446455
    447456    $Lang{$L}{"LastL"}=$lang{"last"};
    448     &Date_InitStrings($lang{"last"},
     457    _Date_InitStrings($lang{"last"},
    449458                      \$Lang{$L}{"Last"},"lc,sort");
    450459
    451460    $Lang{$L}{"EachL"}=$lang{"each"};
    452     &Date_InitStrings($lang{"each"},
     461    _Date_InitStrings($lang{"each"},
    453462                      \$Lang{$L}{"Each"},"lc,sort");
    454463
    455464    $Lang{$L}{"DoMH"}={};
    456465    $Lang{$L}{"DoML"}=[];
    457     &Date_InitLists([$lang{"num_suff"},
     466    _Date_InitLists([$lang{"num_suff"},
    458467                     $lang{"num_word"}],
    459468                    \$Lang{$L}{"DoM"},"lc,sort,back,escape",
     
    474483      push(@tmp,$tmp);
    475484    }
    476     &Date_InitStrings(\@tmp,\$Lang{$L}{"WoM"},
     485    _Date_InitStrings(\@tmp,\$Lang{$L}{"WoM"},
    477486                      "lc,sort,back,escape");
    478487
     
    484493    #   PMstr   = "PM"
    485494
    486     &Date_InitStrings($lang{"am"},\$Lang{$L}{"AM"},"lc,sort,escape");
    487     &Date_InitStrings($lang{"pm"},\$Lang{$L}{"PM"},"lc,sort,escape");
    488     &Date_InitStrings([ @{$lang{"am"}},@{$lang{"pm"}} ],\$Lang{$L}{"AmPm"},
     495    _Date_InitStrings($lang{"am"},\$Lang{$L}{"AM"},"lc,sort,escape");
     496    _Date_InitStrings($lang{"pm"},\$Lang{$L}{"PM"},"lc,sort,escape");
     497    _Date_InitStrings([ @{$lang{"am"}},@{$lang{"pm"}} ],\$Lang{$L}{"AmPm"},
    489498                      "lc,back,sort,escape");
    490499    $Lang{$L}{"AMstr"}=$lang{"am"}[0];
     
    506515    # (so there is no confusion between Mn and Month).
    507516
    508     &Date_InitStrings($lang{"years"}  ,\$Lang{$L}{"Yabb"}, "lc,sort");
    509     &Date_InitStrings($lang{"months"} ,\$Lang{$L}{"Mabb"}, "lc,sort");
    510     &Date_InitStrings($lang{"weeks"}  ,\$Lang{$L}{"Wabb"}, "lc,sort");
    511     &Date_InitStrings($lang{"days"}   ,\$Lang{$L}{"Dabb"}, "lc,sort");
    512     &Date_InitStrings($lang{"hours"}  ,\$Lang{$L}{"Habb"}, "lc,sort");
    513     &Date_InitStrings($lang{"minutes"},\$Lang{$L}{"MNabb"},"lc,sort");
    514     &Date_InitStrings($lang{"seconds"},\$Lang{$L}{"Sabb"}, "lc,sort");
     517    _Date_InitStrings($lang{"years"}  ,\$Lang{$L}{"Yabb"}, "lc,sort");
     518    _Date_InitStrings($lang{"months"} ,\$Lang{$L}{"Mabb"}, "lc,sort");
     519    _Date_InitStrings($lang{"weeks"}  ,\$Lang{$L}{"Wabb"}, "lc,sort");
     520    _Date_InitStrings($lang{"days"}   ,\$Lang{$L}{"Dabb"}, "lc,sort");
     521    _Date_InitStrings($lang{"hours"}  ,\$Lang{$L}{"Habb"}, "lc,sort");
     522    _Date_InitStrings($lang{"minutes"},\$Lang{$L}{"MNabb"},"lc,sort");
     523    _Date_InitStrings($lang{"seconds"},\$Lang{$L}{"Sabb"}, "lc,sort");
    515524    $Lang{$L}{"Repl"}={};
    516     &Date_InitHash($lang{"replace"},undef,"lc",$Lang{$L}{"Repl"});
     525    _Date_InitHash($lang{"replace"},undef,"lc",$Lang{$L}{"Repl"});
    517526
    518527    #  variables for special dates that are offsets from now
     
    528537
    529538    $Lang{$L}{"TimesH"}={};
    530     &Date_InitHash($lang{"times"},
     539    _Date_InitHash($lang{"times"},
    531540                   \$Lang{$L}{"Times"},"lc,sort,back",
    532541                   $Lang{$L}{"TimesH"});
    533     &Date_InitStrings($lang{"now"},\$Lang{$L}{"Now"},"lc,sort");
    534     &Date_InitStrings($lang{"today"},\$Lang{$L}{"Today"},"lc,sort");
     542    _Date_InitStrings($lang{"now"},\$Lang{$L}{"Now"},"lc,sort");
     543    _Date_InitStrings($lang{"today"},\$Lang{$L}{"Today"},"lc,sort");
    535544    $Lang{$L}{"OffsetH"}={};
    536     &Date_InitHash($lang{"offset"},
     545    _Date_InitHash($lang{"offset"},
    537546                   \$Lang{$L}{"Offset"},"lc,sort,back",
    538547                   $Lang{$L}{"OffsetH"});
     
    547556    #    tz2z       = hash of all tzdata timezones to full timezone (EST#EDT)
    548557
    549     $zonesrfc=
    550       "idlw   -1200 ".  # International Date Line West
    551       "nt     -1100 ".  # Nome
    552       "hst    -1000 ".  # Hawaii Standard
    553       "cat    -1000 ".  # Central Alaska
    554       "ahst   -1000 ".  # Alaska-Hawaii Standard
    555       "akst   -0900 ".  # Alaska Standard
    556       "yst    -0900 ".  # Yukon Standard
    557       "hdt    -0900 ".  # Hawaii Daylight
    558       "akdt   -0800 ".  # Alaska Daylight
    559       "ydt    -0800 ".  # Yukon Daylight
    560       "pst    -0800 ".  # Pacific Standard
    561       "pdt    -0700 ".  # Pacific Daylight
    562       "mst    -0700 ".  # Mountain Standard
    563       "mdt    -0600 ".  # Mountain Daylight
    564       "cst    -0600 ".  # Central Standard
    565       "cdt    -0500 ".  # Central Daylight
    566       "est    -0500 ".  # Eastern Standard
    567       "act    -0500 ".  # Brazil, Acre
    568       "pet    -0500 ".  # Peruvian time
    569       "sat    -0400 ".  # Chile
    570       "clt    -0400 ".  # Chile
    571       "clst   -0400 ".  # Chile Standard
    572       "bot    -0400 ".  # Bolivia
    573       "amt    -0400 ".  # Brazil, Amazon
    574       "acst   -0400 ".  # Brazil, Acre Daylight
    575       "edt    -0400 ".  # Eastern Daylight
    576       "ast    -0400 ".  # Atlantic Standard
    577       #"nst   -0330 ".  # Newfoundland Standard      nst=North Sumatra    +0630
    578       "nft    -0330 ".  # Newfoundland
    579       #"gst   -0300 ".  # Greenland Standard         gst=Guam Standard    +1000
    580       "cldt   -0300 ".  # Chile Daylight
    581       #"bst   -0300 ".  # Brazil Standard            bst=British Summer   +0100
    582       "brt    -0300 ".  # Brazil Standard (official time)
    583       #"brst   -0300 ".  # Brazil Standard
    584       "adt    -0300 ".  # Atlantic Daylight
    585       "art    -0300 ".  # Argentina
    586       "amst   -0300 ".  # Brazil, Amazon Daylight
    587       "uyt    -0300 ".  # Uruguay
    588       "ndt    -0230 ".  # Newfoundland Daylight
    589       "brst   -0200 ".  # Brazil Daylight (official time)
    590       "fnt    -0200 ".  # Brazil, Fernando de Noronha
    591       "at     -0200 ".  # Azores
    592       "yust   -0200 ".  # Uruguay
    593       "wat    -0100 ".  # West Africa
    594       "fnst   -0100 ".  # Brazil, Fernando de Noronha Daylight
    595       "gmt    +0000 ".  # Greenwich Mean
    596       "ut     +0000 ".  # Universal
    597       "utc    +0000 ".  # Universal (Coordinated)
    598       "wet    +0000 ".  # Western European
    599       "cet    +0100 ".  # Central European
    600       "fwt    +0100 ".  # French Winter
    601       "met    +0100 ".  # Middle European
    602       "mez    +0100 ".  # Middle European
    603       "mewt   +0100 ".  # Middle European Winter
    604       "swt    +0100 ".  # Swedish Winter
    605       "bst    +0100 ".  # British Summer             bst=Brazil standard  -0300
    606       "gb     +0100 ".  # GMT with daylight savings
    607       "west   +0100 ".  # Western European Daylight
    608       "eet    +0200 ".  # Eastern Europe, USSR Zone 1
    609       "cest   +0200 ".  # Central European Summer
    610       "fst    +0200 ".  # French Summer
    611       "ist    +0200 ".  # Israel standard
    612       "mest   +0200 ".  # Middle European Summer
    613       "mesz   +0200 ".  # Middle European Summer
    614       "metdst +0200 ".  # An alias for mest used by HP-UX
    615       "sast   +0200 ".  # South African Standard
    616       "sst    +0200 ".  # Swedish Summer             sst=South Sumatra    +0700
    617       "bt     +0300 ".  # Baghdad, USSR Zone 2
    618       "eest   +0300 ".  # Eastern Europe Summer
    619       "eetdst +0300 ".  # An alias for eest used by HP-UX
    620       "eetedt +0300 ".  # Eastern Europe, USSR Zone 1
    621       "idt    +0300 ".  # Israel Daylight
    622       "msk    +0300 ".  # Moscow
    623       "eat    +0300 ".  # East Africa
    624       "it     +0330 ".  # Iran
    625       "zp4    +0400 ".  # USSR Zone 3
    626       "msd    +0400 ".  # Moscow Daylight
    627       "zp5    +0500 ".  # USSR Zone 4
    628       "ist    +0530 ".  # Indian Standard
    629       "zp6    +0600 ".  # USSR Zone 5
    630       "novt   +0600 ".  # Novosibirsk winter time zone, Russia
    631       "nst    +0630 ".  # North Sumatra              nst=Newfoundland Std -0330
    632       #"sst   +0700 ".  # South Sumatra, USSR Zone 6 sst=Swedish Summer   +0200
    633       "javt   +0700 ".  # Java
    634       "ict    +0700 ".  # Indo China Time
    635       "novst  +0700 ".  # Novosibirsk summer time zone, Russia
    636       "krat   +0700 ".  # Krasnoyarsk, Russia
    637       "myt    +0800 ".  # Malaysia
    638       "hkt    +0800 ".  # Hong Kong
    639       "sgt    +0800 ".  # Singapore
    640       "cct    +0800 ".  # China Coast, USSR Zone 7
    641       "krast  +0800 ".  # Krasnoyarsk, Russia Daylight
    642       "awst   +0800 ".  # Australian Western Standard
    643       "wst    +0800 ".  # West Australian Standard
    644       "pht    +0800 ".  # Asia Manila
    645       "kst    +0900 ".  # Republic of Korea
    646       "jst    +0900 ".  # Japan Standard, USSR Zone 8
    647       "rok    +0900 ".  # Republic of Korea
    648       "acst   +0930 ".  # Australian Central Standard
    649       "cast   +0930 ".  # Central Australian Standard
    650       "aest   +1000 ".  # Australian Eastern Standard
    651       "east   +1000 ".  # Eastern Australian Standard
    652       "gst    +1000 ".  # Guam Standard, USSR Zone 9 gst=Greenland Std    -0300
    653       "chst   +1000 ".  # Guam Standard, USSR Zone 9 gst=Greenland Std    -0300
    654       "acdt   +1030 ".  # Australian Central Daylight
    655       "cadt   +1030 ".  # Central Australian Daylight
    656       "aedt   +1100 ".  # Australian Eastern Daylight
    657       "eadt   +1100 ".  # Eastern Australian Daylight
    658       "idle   +1200 ".  # International Date Line East
    659       "nzst   +1200 ".  # New Zealand Standard
    660       "nzt    +1200 ".  # New Zealand
    661       "nzdt   +1300 ".  # New Zealand Daylight
    662       "z +0000 ".
    663       "a +0100 b +0200 c +0300 d +0400 e +0500 f +0600 g +0700 h +0800 ".
    664       "i +0900 k +1000 l +1100 m +1200 ".
    665       "n -0100 o -0200 p -0300 q -0400 r -0500 s -0600 t -0700 u -0800 ".
    666       "v -0900 w -1000 x -1100 y -1200";
    667 
    668558    $Zone{"n2o"} = {};
    669559    ($Zone{"zones"},%{ $Zone{"n2o"} })=
    670       &Date_Regexp($zonesrfc,"sort,lc,under,back",
     560      _Date_Regexp($Abbrevs,"sort,lc,under,back",
    671561                   "keys");
    672562
     
    683573    $Zone{"tz2z"} = {};
    684574    ($Zone{"tzones"},%{ $Zone{"tz2z"} })=
    685       &Date_Regexp($tmp,"lc,under,back","keys");
    686     $Cnf{"TZ"}=&Date_TimeZone;
     575      _Date_Regexp($tmp,"lc,under,back","keys");
     576    $Cnf{"TZ"}=Date_TimeZone();
    687577
    688578    #  misc. variables
     
    696586    #    Prev   = "(?:last|previous)"
    697587
    698     &Date_InitStrings($lang{"at"},    \$Lang{$L}{"At"},     "lc,sort");
    699     &Date_InitStrings($lang{"on"},    \$Lang{$L}{"On"},     "lc,sort");
    700     &Date_InitStrings($lang{"future"},\$Lang{$L}{"Future"}, "lc,sort");
    701     &Date_InitStrings($lang{"later"}, \$Lang{$L}{"Later"},  "lc,sort");
    702     &Date_InitStrings($lang{"past"},  \$Lang{$L}{"Past"},   "lc,sort");
    703     &Date_InitStrings($lang{"next"},  \$Lang{$L}{"Next"},   "lc,sort");
    704     &Date_InitStrings($lang{"prev"},  \$Lang{$L}{"Prev"},   "lc,sort");
    705     &Date_InitStrings($lang{"of"},    \$Lang{$L}{"Of"},     "lc,sort");
     588    _Date_InitStrings($lang{"at"},    \$Lang{$L}{"At"},     "lc,sort");
     589    _Date_InitStrings($lang{"on"},    \$Lang{$L}{"On"},     "lc,sort");
     590    _Date_InitStrings($lang{"future"},\$Lang{$L}{"Future"}, "lc,sort");
     591    _Date_InitStrings($lang{"later"}, \$Lang{$L}{"Later"},  "lc,sort");
     592    _Date_InitStrings($lang{"past"},  \$Lang{$L}{"Past"},   "lc,sort");
     593    _Date_InitStrings($lang{"next"},  \$Lang{$L}{"Next"},   "lc,sort");
     594    _Date_InitStrings($lang{"prev"},  \$Lang{$L}{"Prev"},   "lc,sort");
     595    _Date_InitStrings($lang{"of"},    \$Lang{$L}{"Of"},     "lc,sort");
    706596
    707597    #  calc mode variables
     
    710600    #    Business = "(?:business)"
    711601
    712     &Date_InitStrings($lang{"exact"},   \$Lang{$L}{"Exact"},   "lc,sort");
    713     &Date_InitStrings($lang{"approx"},  \$Lang{$L}{"Approx"},  "lc,sort");
    714     &Date_InitStrings($lang{"business"},\$Lang{$L}{"Business"},"lc,sort");
     602    _Date_InitStrings($lang{"exact"},   \$Lang{$L}{"Exact"},   "lc,sort");
     603    _Date_InitStrings($lang{"approx"},  \$Lang{$L}{"Approx"},  "lc,sort");
     604    _Date_InitStrings($lang{"business"},\$Lang{$L}{"Business"},"lc,sort");
    715605
    716606    ############### END OF LANGUAGE INITIALIZATION
     
    728618    } else {
    729619      confess "ERROR: Invalid WorkDayBeg in Date::Manip.\n"
    730         if (! (($h1,$m1)=&CheckTime($Cnf{"WorkDayBeg"})));
     620        if (! (($h1,$m1)=_CheckTime($Cnf{"WorkDayBeg"})));
    731621      $Cnf{"WorkDayBeg"}="$h1:$m1";
    732622      confess "ERROR: Invalid WorkDayEnd in Date::Manip.\n"
    733         if (! (($h2,$m2)=&CheckTime($Cnf{"WorkDayEnd"})));
     623        if (! (($h2,$m2)=_CheckTime($Cnf{"WorkDayEnd"})));
    734624      $Cnf{"WorkDayEnd"}="$h2:$m2";
    735625
     
    759649    $m++;
    760650  }
    761   &Date_DateCheck(\$y,\$m,\$d,\$h,\$mn,\$s,\$ampm,\$wk);
     651  _Date_DateCheck(\$y,\$m,\$d,\$h,\$mn,\$s,\$ampm,\$wk);
    762652  $Curr{"Y"}=$y;
    763653  $Curr{"M"}=$m;
     
    767657  $Curr{"S"}=$s;
    768658  $Curr{"AmPm"}=$ampm;
    769   $Curr{"Now"}=&Date_Join($y,$m,$d,$h,$mn,$s);
     659  $Curr{"Now"}=_Date_Join($y,$m,$d,$h,$mn,$s);
    770660  if ($Cnf{"TodayIsMidnight"}) {
    771     $Curr{"Today"}=&Date_Join($y,$m,$d,0,0,0);
     661    $Curr{"Today"}=_Date_Join($y,$m,$d,0,0,0);
    772662  } else {
    773663    $Curr{"Today"}=$Curr{"Now"};
     
    807697
    808698  # We only need to reinitialize if we have to determine what NOW is.
    809   &Date_Init()  if (! $Curr{"InitDone"}  or  $Cnf{"UpdateCurrTZ"});
     699  Date_Init()  if (! $Curr{"InitDone"}  or  $Cnf{"UpdateCurrTZ"});
    810700
    811701  my($L)=$Cnf{"Language"};
     
    849739
    850740  $delta="";
    851   $delta=&ParseDateDelta($_)  if (/[^:0-9]/);
     741  $delta=ParseDateDelta($_)  if (/[^:0-9]/);
    852742
    853743  # Put parse in a simple loop for an easy exit.
    854744 PARSE: {
    855     my(@tmp)=&Date_Split($_);
     745    my(@tmp)=_Date_Split($_);
    856746    if (@tmp) {
    857747      ($y,$m,$d,$h,$mn,$s)=@tmp;
     
    894784    # Other regular expressions
    895785
    896     my($D4)='(\d{4})';            # 4 digits      (yr)
    897     my($YY)='(\d{4}|\d{2})';      # 2 or 4 digits (yr)
    898     my($DD)='(\d{2})';            # 2 digits      (mon/day/hr/min/sec)
    899     my($D) ='(\d{1,2})';          # 1 or 2 digit  (mon/day/hr)
    900     my($FS)="(?:$ss\\d+)?";       # fractional secs
    901     my($sep)='[\/.-]';            # non-ISO8601 m/d/yy separators
     786    my($D4)='(\d{4})';                      # 4 digits      (yr)
     787    my($YY)='(\d{4}|\d{2})';                # 2 or 4 digits (yr)
     788    my($DD)='(\d{2})';                      # 2 digits      (mon/day/hr/min/sec)
     789    my($D) ='(\d{1,2})';                    # 1 or 2 digit  (mon/day/hr)
     790    my($FS)="(?:$ss\\d+)?";                 # fractional secs
     791    my($sep)='[\/.-]';                      # non-ISO8601 m/d/yy separators
    902792    # absolute time zone     +0700 (GMT)
    903     my($hzone)='(?:[0-1][0-9]|2[0-3])';                    # 00 - 23
    904     my($mzone)='(?:[0-5][0-9])';                           # 00 - 59
     793    my($hzone)='(?:[0-1][0-9]|2[0-3])';     # 00 - 23
     794    my($mzone)='(?:[0-5][0-9])';            # 00 - 59
    905795    my($zone2)='(?:\s*([+-](?:'."$hzone$mzone|$hzone:$mzone|$hzone))".
    906                                                            # +0700 +07:00 -07
    907       '(?:\s*\([^)]+\))?)';                                # (GMT)
     796                                            # +0700 +07:00 -07
     797      '(?:\s*\([^)]+\))?)';                 # (GMT)
    908798
    909799    # A regular expression for the time EXCEPT for the hour part
     
    980870        }
    981871        $time=1;
    982         &Date_TimeCheck(\$h,\$mn,\$s,\$ampm);
     872        _Date_TimeCheck(\$h,\$mn,\$s,\$ampm);
    983873        $y=$m=$d="";
    984874        # We're going to be calling TimeCheck again below (when we check the
     
    987877        $ampm="";
    988878        if (/^\s*$/) {
    989           &Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
     879          Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
    990880          last PARSE;
    991881        }
     
    1070960        # YY-W##-D
    1071961        ($y,$wofm,$dofw)=($1,$2,$3);
    1072         ($y,$m,$d)=&Date_NthWeekOfYear($y,$wofm,$dofw);
     962        ($y,$m,$d)=_Date_NthWeekOfYear($y,$wofm,$dofw);
    1073963        last PARSE;
    1074964
     
    1077967        # YYDOY
    1078968        ($y,$which)=($1,$2);
    1079         ($y,$m,$d)=&Date_NthDayOfYear($y,$which);
     969        ($y,$m,$d)=Date_NthDayOfYear($y,$which);
    1080970        last PARSE;
    1081971
     
    1093983    return ""  if ($Curr{"InCalc"}  &&  $delta);
    1094984    if ($delta) {
    1095       &Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
    1096       return &DateCalc_DateDelta($Curr{"Now"},$delta);
     985      Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
     986      return _DateCalc_DateDelta($Curr{"Now"},$delta);
    1097987    }
    1098988
     
    11101000        ($wofm,$dofw,$m,$y)=($1,$2,$3,$4);
    11111001        # fix $m, $y
    1112         return ""  if (&Date_DateCheck(\$y,\$m,\$d,\$h,\$mn,\$s,\$ampm,\$wk));
     1002        return ""  if (_Date_DateCheck(\$y,\$m,\$d,\$h,\$mn,\$s,\$ampm,\$wk));
    11131003        $dofw=$week{lc($dofw)};
    11141004        $wofm=$wom{lc($wofm)};
    11151005        # Get the first day of the month
    1116         $date=&Date_Join($y,$m,1,$h,$mn,$s);
     1006        $date=_Date_Join($y,$m,1,$h,$mn,$s);
    11171007        if ($wofm==-1) {
    1118           $date=&DateCalc_DateDelta($date,"+0:1:0:0:0:0:0",\$err,0);
    1119           $date=&Date_GetPrev($date,$dofw,0);
     1008          $date=_DateCalc_DateDelta($date,"+0:1:0:0:0:0:0",\$err,0);
     1009          $date=Date_GetPrev($date,$dofw,0);
    11201010        } else {
    11211011          for ($i=0; $i<$wofm; $i++) {
    11221012            if ($i==0) {
    1123               $date=&Date_GetNext($date,$dofw,1);
     1013              $date=Date_GetNext($date,$dofw,1);
    11241014            } else {
    1125               $date=&Date_GetNext($date,$dofw,0);
     1015              $date=Date_GetNext($date,$dofw,0);
    11261016            }
    11271017          }
     
    11321022        # last day in month
    11331023        ($m,$y)=($1,$2);
    1134         &Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
    1135         $y=&Date_FixYear($y)  if (! defined $y  or  length($y)<4);
     1024        Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
     1025        $y=_Date_FixYear($y)  if (! defined $y  or  length($y)<4);
    11361026        $m=$month{lc($m)};
    1137         $d=&Date_DaysInMonth($m,$y);
     1027        $d=Date_DaysInMonth($m,$y);
    11381028        last PARSE;
    11391029
     
    11411031        # friday
    11421032        ($dofw)=($1);
    1143         &Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
    1144         $date=&Date_GetPrev($Curr{"Now"},$Cnf{"FirstDay"},1);
    1145         $date=&Date_GetNext($date,$dofw,1,$h,$mn,$s);
     1033        Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
     1034        $date=Date_GetPrev($Curr{"Now"},$Cnf{"FirstDay"},1);
     1035        $date=Date_GetNext($date,$dofw,1,$h,$mn,$s);
    11461036        last PARSE;
    11471037
     
    11491039        # next friday
    11501040        ($dofw)=($1);
    1151         &Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
    1152         $date=&Date_GetNext($Curr{"Now"},$dofw,0,$h,$mn,$s);
     1041        Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
     1042        $date=Date_GetNext($Curr{"Now"},$dofw,0,$h,$mn,$s);
    11531043        last PARSE;
    11541044
     
    11561046        # last friday
    11571047        ($dofw)=($1);
    1158         &Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
    1159         $date=&Date_GetPrev($Curr{"Now"},$dofw,0,$h,$mn,$s);
     1048        Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
     1049        $date=Date_GetPrev($Curr{"Now"},$dofw,0,$h,$mn,$s);
    11601050        last PARSE;
    11611051
    11621052      } elsif (/^$next$wkabb$/i) {
    11631053        # next week
    1164         &Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
    1165         $date=&DateCalc_DateDelta($Curr{"Now"},"+0:0:1:0:0:0:0",\$err,0);
    1166         $date=&Date_SetTime($date,$h,$mn,$s)  if (defined $h);
     1054        Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
     1055        $date=_DateCalc_DateDelta($Curr{"Now"},"+0:0:1:0:0:0:0",\$err,0);
     1056        $date=Date_SetTime($date,$h,$mn,$s)  if (defined $h);
    11671057        last PARSE;
    11681058      } elsif (/^$prev$wkabb$/i) {
    11691059        # last week
    1170         &Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
    1171         $date=&DateCalc_DateDelta($Curr{"Now"},"-0:0:1:0:0:0:0",\$err,0);
    1172         $date=&Date_SetTime($date,$h,$mn,$s)  if (defined $h);
     1060        Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
     1061        $date=_DateCalc_DateDelta($Curr{"Now"},"-0:0:1:0:0:0:0",\$err,0);
     1062        $date=Date_SetTime($date,$h,$mn,$s)  if (defined $h);
    11731063        last PARSE;
    11741064
    11751065      } elsif (/^$next$mabb$/i) {
    11761066        # next month
    1177         &Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
    1178         $date=&DateCalc_DateDelta($Curr{"Now"},"+0:1:0:0:0:0:0",\$err,0);
    1179         $date=&Date_SetTime($date,$h,$mn,$s)  if (defined $h);
     1067        Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
     1068        $date=_DateCalc_DateDelta($Curr{"Now"},"+0:1:0:0:0:0:0",\$err,0);
     1069        $date=Date_SetTime($date,$h,$mn,$s)  if (defined $h);
    11801070        last PARSE;
    11811071      } elsif (/^$prev$mabb$/i) {
    11821072        # last month
    1183         &Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
    1184         $date=&DateCalc_DateDelta($Curr{"Now"},"-0:1:0:0:0:0:0",\$err,0);
    1185         $date=&Date_SetTime($date,$h,$mn,$s)  if (defined $h);
     1073        Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
     1074        $date=_DateCalc_DateDelta($Curr{"Now"},"-0:1:0:0:0:0:0",\$err,0);
     1075        $date=Date_SetTime($date,$h,$mn,$s)  if (defined $h);
    11861076        last PARSE;
    11871077
     
    11911081        # 2 days later
    11921082        ($num)=($1);
    1193         &Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
    1194         $date=&DateCalc_DateDelta($Curr{"Now"},"+0:0:0:$num:0:0:0",
     1083        Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
     1084        $date=_DateCalc_DateDelta($Curr{"Now"},"+0:0:0:$num:0:0:0",
    11951085                                  \$err,0);
    1196         $date=&Date_SetTime($date,$h,$mn,$s)  if (defined $h);
     1086        $date=Date_SetTime($date,$h,$mn,$s)  if (defined $h);
    11971087        last PARSE;
    11981088      } elsif (/^(\d+)$day$past$/i) {
    11991089        # 2 days ago
    12001090        ($num)=($1);
    1201         &Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
    1202         $date=&DateCalc_DateDelta($Curr{"Now"},"-0:0:0:$num:0:0:0",
     1091        Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
     1092        $date=_DateCalc_DateDelta($Curr{"Now"},"-0:0:0:$num:0:0:0",
    12031093                                 \$err,0);
    1204         $date=&Date_SetTime($date,$h,$mn,$s)  if (defined $h);
     1094        $date=Date_SetTime($date,$h,$mn,$s)  if (defined $h);
    12051095        last PARSE;
    12061096
     
    12101100        # 2 weeks later
    12111101        ($num)=($1);
    1212         &Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
    1213         $date=&DateCalc_DateDelta($Curr{"Now"},"+0:0:$num:0:0:0:0",
     1102        Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
     1103        $date=_DateCalc_DateDelta($Curr{"Now"},"+0:0:$num:0:0:0:0",
    12141104                                  \$err,0);
    1215         $date=&Date_SetTime($date,$h,$mn,$s)  if (defined $h);
     1105        $date=Date_SetTime($date,$h,$mn,$s)  if (defined $h);
    12161106        last PARSE;
    12171107      } elsif (/^(\d+)$wkabb$past$/i) {
    12181108        # 2 weeks ago
    12191109        ($num)=($1);
    1220         &Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
    1221         $date=&DateCalc_DateDelta($Curr{"Now"},"-0:0:$num:0:0:0:0",
     1110        Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
     1111        $date=_DateCalc_DateDelta($Curr{"Now"},"-0:0:$num:0:0:0:0",
    12221112                                 \$err,0);
    1223         $date=&Date_SetTime($date,$h,$mn,$s)  if (defined $h);
     1113        $date=Date_SetTime($date,$h,$mn,$s)  if (defined $h);
    12241114        last PARSE;
    12251115
     
    12291119        # 2 months later
    12301120        ($num)=($1);
    1231         &Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
    1232         $date=&DateCalc_DateDelta($Curr{"Now"},"+0:$num:0:0:0:0:0",
     1121        Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
     1122        $date=_DateCalc_DateDelta($Curr{"Now"},"+0:$num:0:0:0:0:0",
    12331123                                  \$err,0);
    1234         $date=&Date_SetTime($date,$h,$mn,$s)  if (defined $h);
     1124        $date=Date_SetTime($date,$h,$mn,$s)  if (defined $h);
    12351125        last PARSE;
    12361126      } elsif (/^(\d+)$mabb$past$/i) {
    12371127        # 2 months ago
    12381128        ($num)=($1);
    1239         &Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
    1240         $date=&DateCalc_DateDelta($Curr{"Now"},"-0:$num:0:0:0:0:0",
     1129        Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
     1130        $date=_DateCalc_DateDelta($Curr{"Now"},"-0:$num:0:0:0:0:0",
    12411131                                  \$err,0);
    1242         $date=&Date_SetTime($date,$h,$mn,$s)  if (defined $h);
     1132        $date=Date_SetTime($date,$h,$mn,$s)  if (defined $h);
    12431133        last PARSE;
    12441134
     
    12721162        # now week     (British date: 1 week from now)
    12731163        # today week   (British date: 1 week from today)
    1274         &Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
    1275         $date=&DateCalc_DateDelta($Curr{$tmp},"+0:0:1:0:0:0:0",\$err,0);
    1276         $date=&Date_SetTime($date,$h,$mn,$s)  if ($time);
     1164        Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
     1165        $date=_DateCalc_DateDelta($Curr{$tmp},"+0:0:1:0:0:0:0",\$err,0);
     1166        $date=Date_SetTime($date,$h,$mn,$s)  if ($time);
    12771167        last PARSE;
    12781168      } elsif (/^$offset\s*$wkabb$/i) {
    12791169        # tomorrow week  (British date: 1 week from tomorrow)
    12801170        ($offset)=($1);
    1281         &Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
     1171        Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
    12821172        $offset=$Lang{$L}{"OffsetH"}{lc($offset)};
    1283         $date=&DateCalc_DateDelta($Curr{"Now"},$offset,\$err,0);
    1284         $date=&DateCalc_DateDelta($date,"+0:0:1:0:0:0:0",\$err,0);
     1173        $date=_DateCalc_DateDelta($Curr{"Now"},$offset,\$err,0);
     1174        $date=_DateCalc_DateDelta($date,"+0:0:1:0:0:0:0",\$err,0);
    12851175        if ($time) {
    12861176          return ""
    1287             if (&Date_DateCheck(\$y,\$m,\$d,\$h,\$mn,\$s,\$ampm,\$wk));
    1288           $date=&Date_SetTime($date,$h,$mn,$s);
     1177            if (_Date_DateCheck(\$y,\$m,\$d,\$h,\$mn,\$s,\$ampm,\$wk));
     1178          $date=Date_SetTime($date,$h,$mn,$s);
    12891179        }
    12901180        last PARSE;
     
    12921182
    12931183      if ($tmp) {
    1294         &Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
    1295         $date=&DateCalc_DateDelta($Curr{"Now"},
     1184        Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
     1185        $date=_DateCalc_DateDelta($Curr{"Now"},
    12961186                                  $tmp . "0:0:$num:0:0:0:0",\$err,0);
    1297         $date=&Date_GetPrev($date,$Cnf{"FirstDay"},1);
    1298         $date=&Date_GetNext($date,$dofw,1,$h,$mn,$s);
     1187        $date=Date_GetPrev($date,$Cnf{"FirstDay"},1);
     1188        $date=Date_GetNext($date,$dofw,1,$h,$mn,$s);
    12991189        last PARSE;
    13001190      }
     
    13231213      $y=$Curr{"Y"}  if (! $y);
    13241214      $y--; # previous year
    1325       $tmp=&Date_GetNext("$y-12-31",$dofw,0);
     1215      $tmp=Date_GetNext("$y-12-31",$dofw,0);
    13261216      if ($which>1) {
    1327         $tmp=&DateCalc_DateDelta($tmp,"+0:0:".($which-1).":0:0:0:0",\$err,0);
     1217        $tmp=_DateCalc_DateDelta($tmp,"+0:0:".($which-1).":0:0:0:0",\$err,0);
    13281218      }
    1329       ($y,$m,$d)=(&Date_Split($tmp, 1))[0..2];
     1219      ($y,$m,$d)=(_Date_Split($tmp, 1))[0..2];
    13301220      last PARSE;
    13311221    } elsif (/^$week$wkabb\s*$D(?:$of?\s*$YY)?$/i  ||
     
    13341224      # sunday 22nd week in 1996
    13351225      ($dofw,$which,$y)=($1,$2,$3);
    1336       ($y,$m,$d)=&Date_NthWeekOfYear($y,$which,$dofw);
     1226      ($y,$m,$d)=_Date_NthWeekOfYear($y,$which,$dofw);
    13371227      last PARSE;
    13381228    }
     
    14051295      } elsif (/^epochNEGATIVE (\d+)$/) {
    14061296        $s=$1;
    1407         $date=&DateCalc("1970-01-01 00:00 GMT","-0:0:$s");
     1297        $date=DateCalc("1970-01-01 00:00 GMT","-0:0:$s");
    14081298      } elsif (/^epoch\s*(\d+)$/i) {
    14091299        $s=$1;
    1410         $date=&DateCalc("1970-01-01 00:00 GMT","+0:0:$s");
     1300        $date=DateCalc("1970-01-01 00:00 GMT","+0:0:$s");
    14111301
    14121302      } elsif ( (/^$now$/i   &&  ($tmp="Now"))  ||
    14131303                (/^$today$/i &&  ($tmp="Today")) ) {
    14141304        # now, today
    1415         &Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
     1305        Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
    14161306        $date=$Curr{$tmp};
    14171307        if ($time) {
    14181308          return ""
    1419             if (&Date_DateCheck(\$y,\$m,\$d,\$h,\$mn,\$s,\$ampm,\$wk));
    1420           $date=&Date_SetTime($date,$h,$mn,$s);
     1309            if (_Date_DateCheck(\$y,\$m,\$d,\$h,\$mn,\$s,\$ampm,\$wk));
     1310          $date=Date_SetTime($date,$h,$mn,$s);
    14211311        }
    14221312        last PARSE;
     
    14251315        # yesterday, tomorrow
    14261316        ($offset)=($1);
    1427         &Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
     1317        Date_Init()  if (! $Cnf{"UpdateCurrTZ"});
    14281318        $offset=$Lang{$L}{"OffsetH"}{lc($offset)};
    1429         $date=&DateCalc_DateDelta($Curr{"Now"},$offset,\$err,0);
     1319        $date=_DateCalc_DateDelta($Curr{"Now"},$offset,\$err,0);
    14301320        if ($time) {
    14311321          return ""
    1432             if (&Date_DateCheck(\$y,\$m,\$d,\$h,\$mn,\$s,\$ampm,\$wk));
    1433           $date=&Date_SetTime($date,$h,$mn,$s);
     1322            if (_Date_DateCheck(\$y,\$m,\$d,\$h,\$mn,\$s,\$ampm,\$wk));
     1323          $date=Date_SetTime($date,$h,$mn,$s);
    14341324        }
    14351325        last PARSE;
     
    14421332
    14431333  if (! $date) {
    1444     return ""  if (&Date_DateCheck(\$y,\$m,\$d,\$h,\$mn,\$s,\$ampm,\$wk));
    1445     $date=&Date_Join($y,$m,$d,$h,$mn,$s);
    1446   }
    1447   $date=&Date_ConvTZ($date,$z);
     1334    return ""  if (_Date_DateCheck(\$y,\$m,\$d,\$h,\$mn,\$s,\$ampm,\$wk));
     1335    $date=_Date_Join($y,$m,$d,$h,$mn,$s);
     1336  }
     1337  $date=Date_ConvTZ($date,$z);
    14481338  if ($midnight) {
    1449     $date=&DateCalc_DateDelta($date,"+0:0:0:1:0:0:0");
     1339    $date=_DateCalc_DateDelta($date,"+0:0:0:1:0:0:0");
    14501340  }
    14511341  return $date;
     
    14541344sub ParseDate {
    14551345  print "DEBUG: ParseDate\n"  if ($Curr{"Debug"} =~ /trace/);
    1456   &Date_Init()  if (! $Curr{"InitDone"});
     1346  Date_Init()  if (! $Curr{"InitDone"});
    14571347  my($args,@args,@a,$ref,$date)=();
    14581348  @a=@_;
     
    14691359  $ref=ref $args;
    14701360  if (! $ref) {
    1471     return $args  if (&Date_Split($args));
     1361    return $args  if (_Date_Split($args));
    14721362    @args=($args);
    14731363  } elsif ($ref eq "ARRAY") {
    14741364    @args=@$args;
    14751365  } elsif ($ref eq "SCALAR") {
    1476     return $$args  if (&Date_Split($$args));
     1366    return $$args  if (_Date_Split($$args));
    14771367    @args=($$args);
    14781368  } else {
     
    14901380 PARSE: while($#a>=0) {
    14911381    $date=join(" ",@a);
    1492     $date=&ParseDateString($date);
     1382    $date=ParseDateString($date);
    14931383    last  if ($date);
    14941384    pop(@a);
     
    15021392sub Date_Cmp {
    15031393  my($D1,$D2)=@_;
    1504   my($date1)=&ParseDateString($D1);
    1505   my($date2)=&ParseDateString($D2);
     1394  my($date1)=ParseDateString($D1);
     1395  my($date2)=ParseDateString($D2);
    15061396  return $date1 cmp $date2;
    15071397}
     
    15481438  $Curr{"InCalc"}=1;
    15491439
    1550   if ($tmp=&ParseDateString($D1)) {
     1440  if ($tmp=ParseDateString($D1)) {
    15511441    # If we've already parsed the date, we don't want to do it a second
    15521442    # time (so we don't convert timezones twice).
    1553     if (&Date_Split($D1)) {
     1443    if (_Date_Split($D1)) {
    15541444      push(@date,$D1);
    15551445    } else {
    15561446      push(@date,$tmp);
    15571447    }
    1558   } elsif ($tmp=&ParseDateDelta($D1)) {
     1448  } elsif ($tmp=ParseDateDelta($D1)) {
    15591449    push(@delta,$tmp);
    15601450  } else {
     
    15651455  }
    15661456
    1567   if ($tmp=&ParseDateString($D2)) {
    1568     if (&Date_Split($D2)) {
     1457  if ($tmp=ParseDateString($D2)) {
     1458    if (_Date_Split($D2)) {
    15691459      push(@date,$D2);
    15701460    } else {
    15711461      push(@date,$tmp);
    15721462    }
    1573   } elsif ($tmp=&ParseDateDelta($D2)) {
     1463  } elsif ($tmp=ParseDateDelta($D2)) {
    15741464    push(@delta,$tmp);
    15751465    $mode = $Curr{"Mode"};
     
    15851475
    15861476  if ($#date==1) {
    1587     $ret=&DateCalc_DateDate(@date,$mode);
     1477    $ret=_DateCalc_DateDate(@date,$mode);
    15881478  } elsif ($#date==0) {
    1589     $ret=&DateCalc_DateDelta(@date,@delta,\$err,$mode);
     1479    $ret=_DateCalc_DateDelta(@date,@delta,\$err,$mode);
    15901480    $$errref=$err  if ($ref);
    15911481  } else {
    1592     $ret=&DateCalc_DeltaDelta(@delta,$mode);
     1482    $ret=_DateCalc_DeltaDelta(@delta,$mode);
    15931483  }
    15941484  $ret;
     
    16341524  my($workweek)=$Cnf{"WorkWeekEnd"}-$Cnf{"WorkWeekBeg"}+1;
    16351525
    1636   &Date_Init()  if (! $Curr{"InitDone"});
     1526  Date_Init()  if (! $Curr{"InitDone"});
    16371527  # A sign can be a sequence of zero or more + and - signs, this
    16381528  # allows for deltas like '+ -2 days'.
     
    17901680  }
    17911681
    1792   $delta=&Delta_Normalize($delta,$Curr{"Mode"});
     1682  $delta=_Delta_Normalize($delta,$Curr{"Mode"});
    17931683  return $delta;
    17941684}
     
    18001690  my($format,%f,$out,@out,$c,$date1,$date2,$tmp)=();
    18011691  my($scalar)=();
    1802   $date=&ParseDateString($date);
     1692  $date=ParseDateString($date);
    18031693  return  if (! $date);
    18041694
    18051695  my($y,$m,$d,$h,$mn,$s)=($f{"Y"},$f{"m"},$f{"d"},$f{"H"},$f{"M"},$f{"S"})=
    1806     &Date_Split($date, 1);
     1696    _Date_Split($date, 1);
    18071697  $f{"y"}=substr $f{"Y"},2;
    1808   &Date_Init()  if (! $Curr{"InitDone"});
     1698  Date_Init()  if (! $Curr{"InitDone"});
    18091699
    18101700  if (! wantarray) {
     
    18221712  s/^0/ /;
    18231713  $f{"f"}=$_;
    1824   $f{"U"}=&Date_WeekOfYear($m,$d,$y,7);
    1825   $f{"W"}=&Date_WeekOfYear($m,$d,$y,1);
     1714  $f{"U"}=Date_WeekOfYear($m,$d,$y,7);
     1715  $f{"W"}=Date_WeekOfYear($m,$d,$y,1);
    18261716
    18271717  # check week 52,53 and 0
     
    18341724      $mm=1;
    18351725      $yy++;
    1836       if (&Date_WeekOfYear($mm,$dd,$yy,1)==2) {
     1726      if (Date_WeekOfYear($mm,$dd,$yy,1)==2) {
    18371727        $f{"G"}=$yy;
    18381728        $f{"W"}=1;
    18391729      }
    1840       if (&Date_WeekOfYear($mm,$dd,$yy,7)==2) {
     1730      if (Date_WeekOfYear($mm,$dd,$yy,7)==2) {
    18411731        $f{"L"}=$yy;
    18421732        $f{"U"}=1;
     
    18511741    $mm=12;
    18521742    $f{"G"}=$yy;
    1853     $f{"W"}=&Date_WeekOfYear($mm,$dd,$yy,1)+1;
     1743    $f{"W"}=Date_WeekOfYear($mm,$dd,$yy,1)+1;
    18541744  }
    18551745  if ($f{"U"}==0) {
     
    18601750    $mm=12;
    18611751    $f{"L"}=$yy;
    1862     $f{"U"}=&Date_WeekOfYear($mm,$dd,$yy,7)+1;
     1752    $f{"U"}=Date_WeekOfYear($mm,$dd,$yy,7)+1;
    18631753  }
    18641754
     
    18671757
    18681758  # day
    1869   $f{"j"}=&Date_DayOfYear($m,$d,$y);
     1759  $f{"j"}=Date_DayOfYear($m,$d,$y);
    18701760  $f{"j"} = "0" . $f{"j"}   while (length($f{"j"})<3);
    18711761  $_=$d;
    18721762  s/^0/ /;
    18731763  $f{"e"}=$_;
    1874   $f{"w"}=&Date_DayOfWeek($m,$d,$y);
     1764  $f{"w"}=Date_DayOfWeek($m,$d,$y);
    18751765  $f{"v"}=$Lang{$Cnf{"Language"}}{"WL"}[$f{"w"}-1];
    18761766  $f{"v"}=" ".$f{"v"}  if (length $f{"v"} < 2);
    18771767  $f{"a"}=$Lang{$Cnf{"Language"}}{"WkL"}[$f{"w"}-1];
    18781768  $f{"A"}=$Lang{$Cnf{"Language"}}{"WeekL"}[$f{"w"}-1];
    1879   $f{"E"}=&Date_DaySuffix($f{"e"});
     1769  $f{"E"}=Date_DaySuffix($f{"e"});
    18801770
    18811771  # hour
     
    18951785
    18961786  # minute, second, timezone
    1897   $f{"o"}=&Date_SecsSince1970($m,$d,$y,$h,$mn,$s);
    1898   $f{"s"}=&Date_SecsSince1970GMT($m,$d,$y,$h,$mn,$s);
     1787  $f{"o"}=Date_SecsSince1970($m,$d,$y,$h,$mn,$s);
     1788  $f{"s"}=Date_SecsSince1970GMT($m,$d,$y,$h,$mn,$s);
    18991789  $f{"Z"}=($Cnf{"ConvTZ"} eq "IGNORE" or $Cnf{"ConvTZ"} eq "") ?
    19001790           $Cnf{"TZ"} : $Cnf{"ConvTZ"};
     
    19191809  if ($f{"W"}==0) {
    19201810    $y--;
    1921     $tmp=&Date_WeekOfYear(12,31,$y,1);
     1811    $tmp=Date_WeekOfYear(12,31,$y,1);
    19221812    $tmp="0$tmp"  if (length($tmp) < 2);
    19231813    $f{"J"}=qq|$y-W$tmp-$f{"w"}|;
     
    19451835        $c=chop($format);
    19461836        if ($c eq "l") {
    1947           &Date_Init();
    1948           $date1=&DateCalc_DateDelta($Curr{"Now"},"-0:6:0:0:0:0:0");
    1949           $date2=&DateCalc_DateDelta($Curr{"Now"},"+0:6:0:0:0:0:0");
    1950           if (&Date_Cmp($date,$date1)>=0  &&  &Date_Cmp($date,$date2)<=0) {
     1837          Date_Init();
     1838          $date1=_DateCalc_DateDelta($Curr{"Now"},"-0:6:0:0:0:0:0");
     1839          $date2=_DateCalc_DateDelta($Curr{"Now"},"+0:6:0:0:0:0:0");
     1840          if (Date_Cmp($date,$date1)>=0  &&  Date_Cmp($date,$date2)<=0) {
    19511841            $f{"l"}=qq|$f{"b"} $f{"e"} $h:$mn|;
    19521842          } else {
     
    19861876  my($dec,@format) = @arg;
    19871877
    1988   $delta=&ParseDateDelta($delta);
     1878  $delta=ParseDateDelta($delta);
    19891879  return ""  if (! $delta);
    19901880  my(@out,%f,$out,$c1,$c2,$scalar,$format)=();
    19911881  local($_)=$delta;
    1992   my($y,$M,$w,$d,$h,$m,$s)=&Delta_Split($delta);
     1882  my($y,$M,$w,$d,$h,$m,$s)=_Delta_Split($delta);
    19931883  # Get rid of positive signs.
    19941884  ($y,$M,$w,$d,$h,$m,$s)=map { 1*$_; }($y,$M,$w,$d,$h,$m,$s);
     
    21192009sub ParseRecur {
    21202010  print "DEBUG: ParseRecur\n"  if ($Curr{"Debug"} =~ /trace/);
    2121   &Date_Init()  if (! $Curr{"InitDone"});
     2011  Date_Init()  if (! $Curr{"InitDone"});
    21222012
    21232013  my($recur,$dateb,$date0,$date1,$flag)=@_;
     
    21572047
    21582048  if ($dateb) {
    2159     $dateb=&ParseDateString($dateb);
     2049    $dateb=ParseDateString($dateb);
    21602050    return ""  if (! $dateb);
    21612051  }
    21622052  if ($date0) {
    2163     $date0=&ParseDateString($date0);
     2053    $date0=ParseDateString($date0);
    21642054    return ""  if (! $date0);
    21652055  }
    21662056  if ($date1) {
    2167     $date1=&ParseDateString($date1);
     2057    $date1=ParseDateString($date1);
    21682058    return ""  if (! $date1);
    21692059  }
     
    21742064  #
    21752065
    2176   @tmp=&Recur_Split($_);
     2066  @tmp=_Recur_Split($_);
    21772067
    21782068  if (@tmp) {
     
    21902080
    21912081    if ($date_b) {
    2192       $date_b=&ParseDateString($date_b);
     2082      $date_b=ParseDateString($date_b);
    21932083      return ""  if (! $date_b);
    21942084    }
    21952085    if ($date_0) {
    2196       $date_0=&ParseDateString($date_0);
     2086      $date_0=ParseDateString($date_0);
    21972087      return ""  if (! $date_0);
    21982088    }
    21992089    if ($date_1) {
    2200       $date_1=&ParseDateString($date_1);
     2090      $date_1=ParseDateString($date_1);
    22012091      return ""  if (! $date_1);
    22022092    }
     
    22512141        if ($m) {
    22522142          $m=$mmm{lc($m)};
    2253           $date_0=&Date_Join($y,$m,1,0,0,0);
    2254           $date_1=&DateCalc_DateDelta($date_0,"+0:1:0:0:0:0:0",0);
     2143          $date_0=_Date_Join($y,$m,1,0,0,0);
     2144          $date_1=_DateCalc_DateDelta($date_0,"+0:1:0:0:0:0:0",0);
    22552145        } else {
    2256           $date_0=&Date_Join($y,  1,1,0,0,0);
    2257           $date_1=&Date_Join($y+1,1,1,0,0,0);
     2146          $date_0=_Date_Join($y,  1,1,0,0,0);
     2147          $date_1=_Date_Join($y+1,1,1,0,0,0);
    22582148        }
    2259         $date_b=&DateCalc($date_0,"-0:0:0:1:0:0:0",0);
     2149        $date_b=DateCalc($date_0,"-0:0:0:1:0:0:0",0);
    22602150        @recur0=(0,0,0,$num,0,0,0);
    22612151        @recur1=();
     
    22662156        $y=$Curr{"Y"}  if (! $y);
    22672157
    2268         $date_0=&Date_Join($y,  1,1,0,0,0);
    2269         $date_1=&Date_Join($y+1,1,1,0,0,0);
     2158        $date_0=_Date_Join($y,  1,1,0,0,0);
     2159        $date_1=_Date_Join($y+1,1,1,0,0,0);
    22702160        $date_b=$date_0;
    22712161
     
    22822172        $num=-1  if ($num !~ /^$D$/);
    22832173
    2284         $date_0=&Date_Join($y,1,1,0,0,0);
    2285         $date_1=&Date_Join($y+1,1,1,0,0,0);
     2174        $date_0=_Date_Join($y,1,1,0,0,0);
     2175        $date_1=_Date_Join($y+1,1,1,0,0,0);
    22862176        $date_b=$date_0;
    22872177
     
    23012191        if ($m) {
    23022192          $m=$mmm{lc($m)};
    2303           $date_0=&Date_Join($y,$m,1,0,0,0);
    2304           $date_1=&DateCalc_DateDelta($date_0,"+0:1:0:0:0:0:0",0);
     2193          $date_0=_Date_Join($y,$m,1,0,0,0);
     2194          $date_1=_DateCalc_DateDelta($date_0,"+0:1:0:0:0:0:0",0);
    23052195        } else {
    2306           $date_0=&Date_Join($y,1,1,0,0,0);
    2307           $date_1=&Date_Join($y+1,1,1,0,0,0);
     2196          $date_0=_Date_Join($y,1,1,0,0,0);
     2197          $date_1=_Date_Join($y+1,1,1,0,0,0);
    23082198        }
    2309         $date_b=&DateCalc($date_0,"-0:0:0:1:0:0:0",0);
     2199        $date_b=DateCalc($date_0,"-0:0:0:1:0:0:0",0);
    23102200
    23112201        @recur0=(0,0,$num);
     
    23952285      # Y-M-W-D-H-MN-S
    23962286
    2397       @y=&ReturnList($y);
     2287      @y=_ReturnList($y);
    23982288      foreach $y (@y) {
    2399         $y=&Date_FixYear($y)  if (length($y)==2);
    2400         return ()  if (length($y)!=4  ||  ! &IsInt($y));
     2289        $y=_Date_FixYear($y)  if (length($y)==2);
     2290        return ()  if (length($y)!=4  ||  ! _IsInt($y));
    24012291      }
    24022292
    2403       $date0=&ParseDate("0000-01-01")          if (! $date0);
    2404       $date1=&ParseDate("9999-12-31 23:59:59") if (! $date1);
     2293      $date0=ParseDate("0000-01-01")          if (! $date0);
     2294      $date1=ParseDate("9999-12-31 23:59:59") if (! $date1);
    24052295
    24062296      if ($m eq "0"  and  $w eq "0") {
     
    24122302          @d=(1);
    24132303        } else {
    2414           @d=&ReturnList($d);
     2304          @d=_ReturnList($d);
    24152305          return ()  if (! @d);
    24162306          foreach $d (@d) {
    2417             return ()  if (! &IsInt($d,-366,366)  ||  $d==0);
     2307            return ()  if (! _IsInt($d,-366,366)  ||  $d==0);
    24182308          }
    24192309        }
     
    24212311        @date=();
    24222312        foreach $yy (@y) {
    2423           my $diy = &Date_DaysInYear($yy);
     2313          my $diy = Date_DaysInYear($yy);
    24242314          foreach $d (@d) {
    24252315            my $tmpd = $d;
    24262316            $tmpd += ($diy+1)  if ($tmpd < 0);
    2427             next  if (! &IsInt($tmpd,1,$diy));
    2428             ($y,$m,$dd)=&Date_NthDayOfYear($yy,$tmpd);
    2429             push(@date, &Date_Join($y,$m,$dd,0,0,0));
     2317            next  if (! _IsInt($tmpd,1,$diy));
     2318            ($y,$m,$dd)=Date_NthDayOfYear($yy,$tmpd);
     2319            push(@date, _Date_Join($y,$m,$dd,0,0,0));
    24302320          }
    24312321        }
     
    24372327        # * Y-M-0-DOM-H-MN-S
    24382328
    2439         @m=&ReturnList($m);
     2329        @m=_ReturnList($m);
    24402330        return ()  if (! @m);
    24412331        foreach $m (@m) {
    2442           return ()  if (! &IsInt($m,1,12));
     2332          return ()  if (! _IsInt($m,1,12));
    24432333        }
    24442334
     
    24462336          @d=(1);
    24472337        } else {
    2448           @d=&ReturnList($d);
     2338          @d=_ReturnList($d);
    24492339          return ()  if (! @d);
    24502340          foreach $d (@d) {
    2451             return ()  if (! &IsInt($d,-31,31)  ||  $d==0);
     2341            return ()  if (! _IsInt($d,-31,31)  ||  $d==0);
    24522342          }
    24532343        }
     
    24562346        foreach $y (@y) {
    24572347          foreach $m (@m) {
    2458             my $dim = &Date_DaysInMonth($m,$y);
     2348            my $dim = Date_DaysInMonth($m,$y);
    24592349            foreach $d (@d) {
    24602350              my $tmpd = $d;
    24612351              $tmpd += ($dim+1)  if ($d<0);
    2462               next  if (! &IsInt($tmpd,1,$dim));
    2463               $date=&Date_Join($y,$m,$tmpd,0,0,0);
     2352              next  if (! _IsInt($tmpd,1,$dim));
     2353              $date=_Date_Join($y,$m,$tmpd,0,0,0);
    24642354              push(@date,$date);
    24652355            }
     
    24732363        # * Y-0-WOY-0-H-MN-S
    24742364
    2475         @w=&ReturnList($w);
     2365        @w=_ReturnList($w);
    24762366        return ()  if (! @w);
    24772367        foreach $w (@w) {
    2478           return ()  if (! &IsInt($w,-53,53)  ||  $w==0);
     2368          return ()  if (! _IsInt($w,-53,53)  ||  $w==0);
    24792369        }
    24802370
     
    24822372          @d=(1);
    24832373        } else {
    2484           @d=&ReturnList($d);
     2374          @d=_ReturnList($d);
    24852375          return ()  if (! @d);
    24862376          foreach $d (@d) {
    24872377            $d += 8  if ($d<0);
    2488             return ()  if (! &IsInt($d,1,7));
     2378            return ()  if (! _IsInt($d,1,7));
    24892379          }
    24902380        }
     
    25062396                $date=Date_GetNext($date,$d,1);
    25072397              }
    2508               $date=&DateCalc_DateDelta($date,$del);
    2509               push(@date,$date)  if ( (&Date_Split($date))[0] == $y);
     2398              $date=_DateCalc_DateDelta($date,$del);
     2399              push(@date,$date)  if ( (_Date_Split($date))[0] == $y);
    25102400            }
    25112401          }
     
    25182408        # * Y-M-WOM-0-H-MN-S
    25192409
    2520         @m=&ReturnList($m);
     2410        @m=_ReturnList($m);
    25212411        return ()  if (! @m);
    2522         @w=&ReturnList($w);
     2412        @w=_ReturnList($w);
    25232413        return ()  if (! @w);
    25242414        if ($d eq "0") {
    25252415          @d=(1);
    25262416        } else {
    2527           @d=&ReturnList($d);
     2417          @d=_ReturnList($d);
    25282418        }
    25292419
    2530         @date=&Date_Recur_WoM(\@y,\@m,\@w,\@d);
     2420        @date=_Date_Recur_WoM(\@y,\@m,\@w,\@d);
    25312421        last RECUR;
    25322422      }
     
    25502440        return ()  if (! $dateb  &&  $y != 1);
    25512441
    2552         @m=&ReturnList($m);
     2442        @m=_ReturnList($m);
    25532443        return ()  if (! @m);
    25542444        foreach $m (@m) {
    2555           return ()  if (! &IsInt($m,1,12));
     2445          return ()  if (! _IsInt($m,1,12));
    25562446        }
    25572447
     
    25592449          @d = (1);
    25602450        } else {
    2561           @d=&ReturnList($d);
     2451          @d=_ReturnList($d);
    25622452          return ()  if (! @d);
    25632453          foreach $d (@d) {
    2564             return ()  if (! &IsInt($d,-31,31)  ||  $d==0);
     2454            return ()  if (! _IsInt($d,-31,31)  ||  $d==0);
    25652455          }
    25662456        }
    25672457
    25682458        # We need to find years that are a multiple of $n from $y(base)
    2569         ($y0)=( &Date_Split($date0, 1) )[0];
    2570         ($y1)=( &Date_Split($date1, 1) )[0];
     2459        ($y0)=( _Date_Split($date0, 1) )[0];
     2460        ($y1)=( _Date_Split($date1, 1) )[0];
    25712461        if ($dateb) {
    2572           ($yb)=( &Date_Split($dateb, 1) )[0];
     2462          ($yb)=( _Date_Split($dateb, 1) )[0];
    25732463        } else {
    25742464          # If $y=1, there is no base year
     
    25812471            foreach $m (@m) {
    25822472              foreach $d (@d) {
    2583                 my $dim  = &Date_DaysInMonth($m,$yy);
     2473                my $dim  = Date_DaysInMonth($m,$yy);
    25842474                my $tmpd = $d;
    25852475                if ($tmpd < 0) {
    25862476                  $tmpd += ($dim+1);
    25872477                }
    2588                 next  if (! &IsInt($tmpd,1,$dim));
    2589                 $date=&Date_Join($yy,$m,$tmpd,0,0,0);
     2478                next  if (! _IsInt($tmpd,1,$dim));
     2479                $date=_Date_Join($yy,$m,$tmpd,0,0,0);
    25902480                push(@date,$date);
    25912481              }
     
    26012491        return ()  if (! $dateb  &&  $y != 1);
    26022492
    2603         @m=&ReturnList($m);
     2493        @m=_ReturnList($m);
    26042494        return ()  if (! @m);
    2605         @w=&ReturnList($w);
     2495        @w=_ReturnList($w);
    26062496        return ()  if (! @w);
    26072497
     
    26092499          @d=(1);
    26102500        } else {
    2611           @d=&ReturnList($d);
     2501          @d=_ReturnList($d);
    26122502        }
    26132503
    2614         ($y0)=( &Date_Split($date0, 1) )[0];
    2615         ($y1)=( &Date_Split($date1, 1) )[0];
     2504        ($y0)=( _Date_Split($date0, 1) )[0];
     2505        ($y1)=( _Date_Split($date1, 1) )[0];
    26162506        if ($dateb) {
    2617           ($yb)=( &Date_Split($dateb, 1) )[0];
     2507          ($yb)=( _Date_Split($dateb, 1) )[0];
    26182508        } else {
    26192509          # If $y=1, there is no base year
     
    26272517        }
    26282518
    2629         @date=&Date_Recur_WoM(\@y,\@m,\@w,\@d);
     2519        @date=_Date_Recur_WoM(\@y,\@m,\@w,\@d);
    26302520        last RECUR;
    26312521      }
     
    26492539        $n=1  if ($n==0);
    26502540
    2651         @w=&ReturnList($w);
     2541        @w=_ReturnList($w);
    26522542        return ()  if (! @w);
    26532543        foreach $w (@w) {
    2654           return ()  if ($w==0  ||  ! &IsInt($w,-53,53));
     2544          return ()  if ($w==0  ||  ! _IsInt($w,-53,53));
    26552545        }
    26562546
     
    26582548          @d=(1);
    26592549        } else {
    2660           @d=&ReturnList($d);
     2550          @d=_ReturnList($d);
    26612551          return ()  if (! @d);
    26622552          foreach $d (@d) {
    26632553            $d += 8  if ($d<0);
    2664             return ()  if (! &IsInt($d,1,7));
     2554            return ()  if (! _IsInt($d,1,7));
    26652555          }
    26662556        }
    26672557
    26682558        # We need to find years that are a multiple of $n from $y(base)
    2669         ($y0)=( &Date_Split($date0, 1) )[0];
    2670         ($y1)=( &Date_Split($date1, 1) )[0];
     2559        ($y0)=( _Date_Split($date0, 1) )[0];
     2560        ($y1)=( _Date_Split($date1, 1) )[0];
    26712561        if ($dateb) {
    2672           ($yb)=( &Date_Split($dateb, 1) )[0];
     2562          ($yb)=( _Date_Split($dateb, 1) )[0];
    26732563        } else {
    26742564          # If $y=1, there is no base year
     
    26932583                  $date=Date_GetNext($date,$d,1);
    26942584                }
    2695                 $date=&DateCalc($date,$del);
    2696                 next  if ((&Date_Split($date))[0] != $yy);
     2585                $date=DateCalc($date,$del);
     2586                next  if ((_Date_Split($date))[0] != $yy);
    26972587                push(@date,$date);
    26982588              }
     
    27062596        # Y-M * WOM-0-H-MN-S
    27072597        # Y-M * WOM-DOW-H-MN-S
    2708         return ()  if (! $dateb);
     2598        return ()  if (! $dateb  &&  ($y != 0  ||  $m != 1));
    27092599        @tmp=(@recur0);
    27102600        push(@tmp,0)  while ($#tmp<6);
    27112601        $delta=join(":",@tmp);
    2712         @tmp=&Date_Recur($date0,$date1,$dateb,$delta);
    2713 
    2714         @w=&ReturnList($w);
     2602        $dateb=$date0  if (! $dateb);
     2603        @tmp=_Date_Recur($date0,$date1,$dateb,$delta);
     2604
     2605        @w=_ReturnList($w);
    27152606        @m=();
    27162607        if ($d eq "0") {
    27172608          @d=(1);
    27182609        } else {
    2719           @d=&ReturnList($d);
     2610          @d=_ReturnList($d);
    27202611        }
    27212612
    2722         @date=&Date_Recur_WoM(\@tmp,\@m,\@w,\@d);
     2613        @date=_Date_Recur_WoM(\@tmp,\@m,\@w,\@d);
    27232614        last RECUR;
    27242615      }
     
    27342625        $y=1  if ($y==0 && $m==0 && $w==0);
    27352626        $delta="$y:$m:$w:0:0:0:0";
    2736         @date=&Date_Recur($date0,$date1,$dateb,$delta);
     2627        @date=_Date_Recur($date0,$date1,$dateb,$delta);
    27372628        last RECUR;
    27382629
     
    27442635        return ()  if (! $dateb  &&  $y!=1);
    27452636
    2746         @d=&ReturnList($d);
     2637        @d=_ReturnList($d);
    27472638        return ()  if (! @d);
    27482639        foreach $d (@d) {
    2749           return ()  if (! &IsInt($d,-366,366)  ||  $d==0);
     2640          return ()  if (! _IsInt($d,-366,366)  ||  $d==0);
    27502641        }
    27512642
    27522643        # We need to find years that are a multiple of $n from $y(base)
    2753         ($y0)=( &Date_Split($date0, 1) )[0];
    2754         ($y1)=( &Date_Split($date1, 1) )[0];
     2644        ($y0)=( _Date_Split($date0, 1) )[0];
     2645        ($y1)=( _Date_Split($date1, 1) )[0];
    27552646        if ($dateb) {
    2756           ($yb)=( &Date_Split($dateb, 1) )[0];
     2647          ($yb)=( _Date_Split($dateb, 1) )[0];
    27572648        } else {
    27582649          # If $y=1, there is no base year
     
    27612652        @date=();
    27622653        for ($yy=$y0; $yy<=$y1; $yy++) {
    2763           my $diy = &Date_DaysInYear($yy);
     2654          my $diy = Date_DaysInYear($yy);
    27642655          if (($yy-$yb)%$n == 0) {
    27652656            foreach $d (@d) {
    27662657              my $tmpd = $d;
    27672658              $tmpd += ($diy+1)  if ($tmpd<0);
    2768               next  if (! &IsInt($tmpd,1,$diy));
    2769               ($y,$m,$dd)=&Date_NthDayOfYear($yy,$tmpd);
    2770               push(@date, &Date_Join($y,$m,$dd,0,0,0));
     2659              next  if (! _IsInt($tmpd,1,$diy));
     2660              ($y,$m,$dd)=Date_NthDayOfYear($yy,$tmpd);
     2661              push(@date, _Date_Join($y,$m,$dd,0,0,0));
    27712662            }
    27722663          }
     
    27772668
    27782669        # Y-M-W * DOW-H-MN-S
    2779         return ()  if (! $dateb);
     2670        return ()  if (! $dateb  &&  ($y != 0  &&  $m != 0  &&  $w != 1));
    27802671        @tmp=(@recur0);
    27812672        push(@tmp,0)  while ($#tmp<6);
    27822673        $delta=join(":",@tmp);
    27832674
    2784         @d=&ReturnList($d);
     2675        @d=_ReturnList($d);
    27852676        return ()  if (! @d);
    27862677        foreach $d (@d) {
    27872678          $d += 8  if ($d<0);
    2788           return ()  if (! &IsInt($d,1,7));
     2679          return ()  if (! _IsInt($d,1,7));
    27892680        }
    27902681
    27912682        # Find out what DofW the basedate is.
    2792         @tmp2=&Date_Split($dateb, 1);
    2793         $tmp=&Date_DayOfWeek($tmp2[1],$tmp2[2],$tmp2[0]);
     2683        $dateb = $date0  if (! $dateb);
     2684        @tmp2=_Date_Split($dateb, 1);
     2685        $tmp=Date_DayOfWeek($tmp2[1],$tmp2[2],$tmp2[0]);
    27942686
    27952687        @date=();
     
    28012693                ($tmp>=$Cnf{"FirstDay"} && $d>$tmp) ||
    28022694                ($tmp<$d && $d<$Cnf{"FirstDay"})) {
    2803               $date_b=&Date_GetNext($date_b,$d);
     2695              $date_b=Date_GetNext($date_b,$d);
    28042696            } else {
    2805               $date_b=&Date_GetPrev($date_b,$d);
     2697              $date_b=Date_GetPrev($date_b,$d);
    28062698            }
    28072699          }
    2808           push(@date,&Date_Recur($date0,$date1,$date_b,$delta));
     2700          push(@date,_Date_Recur($date0,$date1,$date_b,$delta));
    28092701        }
    28102702        last RECUR;
     
    28132705
    28142706        # Y-M-0 * DOM-H-MN-S
    2815         return ()  if (! $dateb);
     2707        return ()  if (! $dateb  &&  ($y != 0  &&  $m != 1));
    28162708        @tmp=(@recur0);
    28172709        push(@tmp,0)  while ($#tmp<6);
    28182710        $delta=join(":",@tmp);
    28192711
    2820         @d=&ReturnList($d);
     2712        @d=_ReturnList($d);
    28212713        return ()  if (! @d);
    28222714        foreach $d (@d) {
    2823           return ()  if ($d==0  ||  ! &IsInt($d,-31,31));
     2715          return ()  if ($d==0  ||  ! _IsInt($d,-31,31));
    28242716        }
    2825 
    2826         @tmp2=&Date_Recur($date0,$date1,$dateb,$delta);
     2717        $dateb = $date0  if (! $dateb);
     2718
     2719        @tmp2=_Date_Recur($date0,$date1,$dateb,$delta);
    28272720        @date=();
    28282721        foreach $date (@tmp2) {
    2829           ($y,$m)=( &Date_Split($date, 1) )[0..1];
    2830           my $dim=&Date_DaysInMonth($m,$y);
     2722          ($y,$m)=( _Date_Split($date, 1) )[0..1];
     2723          my $dim=Date_DaysInMonth($m,$y);
    28312724          foreach $d (@d) {
    28322725            my $tmpd = $d;
    28332726            $tmpd += ($dim+1)  if ($tmpd<0);
    2834             next  if (! &IsInt($tmpd,1,$dim));
    2835             push(@date,&Date_Join($y,$m,$tmpd,0,0,0));
     2727            next  if (! _IsInt($tmpd,1,$dim));
     2728            push(@date,_Date_Join($y,$m,$tmpd,0,0,0));
    28362729          }
    28372730        }
     
    28492742      # Y-M-W-D-H-MN * S
    28502743      # Y-M-W-D-H-S
     2744      if (($#recur0 == 3  &&
     2745           ($y == 0  &&  $m == 0  &&  $w == 0  &&  $d == 1)) ||
     2746          ($#recur0 == 4  &&
     2747           ($y == 0  &&  $m == 0  &&  $w == 0  &&  $d == 0  &&  $h == 1)) ||
     2748          ($#recur0 == 5  &&
     2749           ($y == 0  &&  $m == 0  &&  $w == 0  &&  $d == 0  &&  $h == 0  &&
     2750            $mn == 1))) {
     2751         $dateb = $date0;
     2752      }
    28512753      return ()  if (! $dateb);
    28522754      @tmp=(@recur0);
     
    28542756      $delta=join(":",@tmp);
    28552757      return ()  if ($delta !~ /[1-9]/); # return if "0:0:0:0:0:0:0"
    2856       @date=&Date_Recur($date0,$date1,$dateb,$delta);
     2758      @date=_Date_Recur($date0,$date1,$dateb,$delta);
    28572759      if (@recur1) {
    28582760        unshift(@recur1,-1)  while ($#recur1<2);
     
    28672769    last RECUR;
    28682770  }
    2869   @date=&Date_RecurSetTime($date0,$date1,\@date,@time)  if (@time);
     2771  @date=_Date_RecurSetTime($date0,$date1,\@date,@time)  if (@time);
    28702772
    28712773  #
     
    28862788        foreach $date (@date) {
    28872789          if ($forw) {
    2888             push(@tmp, &Date_GetNext($date,$d,$today));
     2790            push(@tmp, Date_GetNext($date,$d,$today));
    28892791          } else {
    2890             push(@tmp, &Date_GetPrev($date,$d,$today));
     2792            push(@tmp, Date_GetPrev($date,$d,$today));
    28912793          }
    28922794        }
     
    29092811          for ($i=1; $i<=$n; $i++) {
    29102812            while (1) {
    2911               $date=&DateCalc($date,"${sign}0:0:0:1:0:0:0");
    2912               last if (! $work  ||  &Date_IsWorkDay($date,0));
     2813              $date=DateCalc($date,"${sign}0:0:0:1:0:0:0");
     2814              last if (! $work  ||  Date_IsWorkDay($date,0));
    29132815            }
    29142816          }
     
    29312833      DATE: foreach $date (@date) {
    29322834          $df=$db=$date;
    2933           if (&Date_IsWorkDay($date)) {
     2835          if (Date_IsWorkDay($date)) {
    29342836            push(@tmp,$date);
    29352837            next DATE;
     
    29372839          while (1) {
    29382840            if ($forw) {
    2939               $d=$df=&DateCalc($df,"+0:0:0:1:0:0:0");
     2841              $d=$df=DateCalc($df,"+0:0:0:1:0:0:0");
    29402842            } else {
    2941               $d=$db=&DateCalc($db,"-0:0:0:1:0:0:0");
     2843              $d=$db=DateCalc($db,"-0:0:0:1:0:0:0");
    29422844            }
    2943             if (&Date_IsWorkDay($d)) {
     2845            if (Date_IsWorkDay($d)) {
    29442846              push(@tmp,$d);
    29452847              next DATE;
     
    29552857        @tmp=();
    29562858        foreach $date (@date) {
    2957           ($y,$m,$d,$h,$mn,$s)=&Date_Split($date, 1);
    2958           ($m,$d)=&Date_Easter($y);
    2959           $date=&Date_Join($y,$m,$d,$h,$mn,$s);
    2960           next  if (&Date_Cmp($date,$date0)<0  ||
    2961                     &Date_Cmp($date,$date1)>0);
     2859          ($y,$m,$d,$h,$mn,$s)=_Date_Split($date, 1);
     2860          ($m,$d)=_Date_Easter($y);
     2861          $date=_Date_Join($y,$m,$d,$h,$mn,$s);
     2862          next  if (Date_Cmp($date,$date0)<0  ||
     2863                    Date_Cmp($date,$date1)>0);
    29622864          push(@tmp,$date);
    29632865        }
     
    29742876  print "DEBUG: Date_GetPrev\n"  if ($Curr{"Debug"} =~ /trace/);
    29752877  my($date,$dow,$today,$hr,$min,$sec)=@_;
    2976   &Date_Init()  if (! $Curr{"InitDone"});
     2878  Date_Init()  if (! $Curr{"InitDone"});
    29772879  my($y,$m,$d,$h,$mn,$s,$err,$curr_dow,%dow,$num,$delta,$th,$tm,$ts,
    29782880     $adjust,$curr)=();
     
    29812883  $sec="00"  if (defined $sec  &&  $sec eq "0");
    29822884
    2983   if (! &Date_Split($date)) {
    2984     $date=&ParseDateString($date);
     2885  if (! _Date_Split($date)) {
     2886    $date=ParseDateString($date);
    29852887    return ""  if (! $date);
    29862888  }
    29872889  $curr=$date;
    2988   ($y,$m,$d)=( &Date_Split($date, 1) )[0..2];
     2890  ($y,$m,$d)=( _Date_Split($date, 1) )[0..2];
    29892891
    29902892  if ($dow) {
    2991     $curr_dow=&Date_DayOfWeek($m,$d,$y);
     2893    $curr_dow=Date_DayOfWeek($m,$d,$y);
    29922894    %dow=%{ $Lang{$Cnf{"Language"}}{"WeekH"} };
    2993     if (&IsInt($dow)) {
     2895    if (_IsInt($dow)) {
    29942896      return ""  if ($dow<1  ||  $dow>7);
    29952897    } else {
     
    29982900    }
    29992901    if ($dow == $curr_dow) {
    3000       $date=&DateCalc_DateDelta($date,"-0:0:1:0:0:0:0",\$err,0)  if (! $today);
     2902      $date=_DateCalc_DateDelta($date,"-0:0:1:0:0:0:0",\$err,0)  if (! $today);
    30012903      $adjust=1  if ($today==2);
    30022904    } else {
    30032905      $dow -= 7  if ($dow>$curr_dow); # make sure previous day is less
    30042906      $num = $curr_dow - $dow;
    3005       $date=&DateCalc_DateDelta($date,"-0:0:0:$num:0:0:0",\$err,0);
    3006     }
    3007     $date=&Date_SetTime($date,$hr,$min,$sec)  if (defined $hr);
    3008     $date=&DateCalc_DateDelta($date,"-0:0:1:0:0:0:0",\$err,0)
    3009       if ($adjust  &&  &Date_Cmp($date,$curr)>0);
     2907      $date=_DateCalc_DateDelta($date,"-0:0:0:$num:0:0:0",\$err,0);
     2908    }
     2909    $date=Date_SetTime($date,$hr,$min,$sec)  if (defined $hr);
     2910    $date=_DateCalc_DateDelta($date,"-0:0:1:0:0:0:0",\$err,0)
     2911      if ($adjust  &&  Date_Cmp($date,$curr)>0);
    30102912
    30112913  } else {
    3012     ($h,$mn,$s)=( &Date_Split($date, 1) )[3..5];
    3013     ($th,$tm,$ts)=&Date_ParseTime($hr,$min,$sec);
     2914    ($h,$mn,$s)=( _Date_Split($date, 1) )[3..5];
     2915    ($th,$tm,$ts)=_Date_ParseTime($hr,$min,$sec);
    30142916    if ($hr) {
    30152917      ($hr,$min,$sec)=($th,$tm,$ts);
     
    30252927    }
    30262928
    3027     $d=&Date_SetTime($date,$hr,$min,$sec);
     2929    $d=Date_SetTime($date,$hr,$min,$sec);
    30282930    if ($today) {
    3029       $d=&DateCalc_DateDelta($d,$delta,\$err,0)  if (&Date_Cmp($d,$date)>0);
     2931      $d=_DateCalc_DateDelta($d,$delta,\$err,0)  if (Date_Cmp($d,$date)>0);
    30302932    } else {
    3031       $d=&DateCalc_DateDelta($d,$delta,\$err,0)  if (&Date_Cmp($d,$date)>=0);
     2933      $d=_DateCalc_DateDelta($d,$delta,\$err,0)  if (Date_Cmp($d,$date)>=0);
    30322934    }
    30332935    $date=$d;
     
    30392941  print "DEBUG: Date_GetNext\n"  if ($Curr{"Debug"} =~ /trace/);
    30402942  my($date,$dow,$today,$hr,$min,$sec)=@_;
    3041   &Date_Init()  if (! $Curr{"InitDone"});
     2943  Date_Init()  if (! $Curr{"InitDone"});
    30422944  my($y,$m,$d,$h,$mn,$s,$err,$curr_dow,%dow,$num,$delta,$th,$tm,$ts,
    30432945     $adjust,$curr)=();
     
    30462948  $sec="00"  if (defined $sec  &&  $sec eq "0");
    30472949
    3048   if (! &Date_Split($date)) {
    3049     $date=&ParseDateString($date);
     2950  if (! _Date_Split($date)) {
     2951    $date=ParseDateString($date);
    30502952    return ""  if (! $date);
    30512953  }
    30522954  $curr=$date;
    3053   ($y,$m,$d)=( &Date_Split($date, 1) )[0..2];
     2955  ($y,$m,$d)=( _Date_Split($date, 1) )[0..2];
    30542956
    30552957  if ($dow) {
    3056     $curr_dow=&Date_DayOfWeek($m,$d,$y);
     2958    $curr_dow=Date_DayOfWeek($m,$d,$y);
    30572959    %dow=%{ $Lang{$Cnf{"Language"}}{"WeekH"} };
    3058     if (&IsInt($dow)) {
     2960    if (_IsInt($dow)) {
    30592961      return ""  if ($dow<1  ||  $dow>7);
    30602962    } else {
     
    30632965    }
    30642966    if ($dow == $curr_dow) {
    3065       $date=&DateCalc_DateDelta($date,"+0:0:1:0:0:0:0",\$err,0)  if (! $today);
     2967      $date=_DateCalc_DateDelta($date,"+0:0:1:0:0:0:0",\$err,0)  if (! $today);
    30662968      $adjust=1  if ($today==2);
    30672969    } else {
    30682970      $curr_dow -= 7  if ($curr_dow>$dow); # make sure next date is greater
    30692971      $num = $dow - $curr_dow;
    3070       $date=&DateCalc_DateDelta($date,"+0:0:0:$num:0:0:0",\$err,0);
    3071     }
    3072     $date=&Date_SetTime($date,$hr,$min,$sec)  if (defined $hr);
    3073     $date=&DateCalc_DateDelta($date,"+0:0:1:0:0:0:0",\$err,0)
    3074       if ($adjust  &&  &Date_Cmp($date,$curr)<0);
     2972      $date=_DateCalc_DateDelta($date,"+0:0:0:$num:0:0:0",\$err,0);
     2973    }
     2974    $date=Date_SetTime($date,$hr,$min,$sec)  if (defined $hr);
     2975    $date=_DateCalc_DateDelta($date,"+0:0:1:0:0:0:0",\$err,0)
     2976      if ($adjust  &&  Date_Cmp($date,$curr)<0);
    30752977
    30762978  } else {
    3077     ($h,$mn,$s)=( &Date_Split($date, 1) )[3..5];
    3078     ($th,$tm,$ts)=&Date_ParseTime($hr,$min,$sec);
     2979    ($h,$mn,$s)=( _Date_Split($date, 1) )[3..5];
     2980    ($th,$tm,$ts)=_Date_ParseTime($hr,$min,$sec);
    30792981    if ($hr) {
    30802982      ($hr,$min,$sec)=($th,$tm,$ts);
     
    30902992    }
    30912993
    3092     $d=&Date_SetTime($date,$hr,$min,$sec);
     2994    $d=Date_SetTime($date,$hr,$min,$sec);
    30932995    if ($today) {
    3094       $d=&DateCalc_DateDelta($d,$delta,\$err,0)  if (&Date_Cmp($d,$date)<0);
     2996      $d=_DateCalc_DateDelta($d,$delta,\$err,0)  if (Date_Cmp($d,$date)<0);
    30952997    } else {
    3096       $d=&DateCalc_DateDelta($d,$delta,\$err,0)  if (&Date_Cmp($d,$date)<1);
     2998      $d=_DateCalc_DateDelta($d,$delta,\$err,0)  if (Date_Cmp($d,$date)<1);
    30972999    }
    30983000    $date=$d;
     
    31053007  print "DEBUG: Date_IsHoliday\n"  if ($Curr{"Debug"} =~ /trace/);
    31063008  my($date)=@_;
    3107   &Date_Init()  if (! $Curr{"InitDone"});
    3108   $date=&ParseDateString($date);
     3009  Date_Init()  if (! $Curr{"InitDone"});
     3010  $date=ParseDateString($date);
    31093011  return undef  if (! $date);
    3110   $date=&Date_SetTime($date,0,0,0);
    3111   my($y)=(&Date_Split($date, 1))[0];
    3112   &Date_UpdateHolidays($y)  if (! exists $Holiday{"dates"}{$y});
     3012  $date=Date_SetTime($date,0,0,0);
     3013  my($y)=(_Date_Split($date, 1))[0];
     3014  _Date_UpdateHolidays($y)  if (! exists $Holiday{"dates"}{$y});
    31133015  return undef  if (! exists $Holiday{"dates"}{$y}{$date});
    31143016  my($name)=$Holiday{"dates"}{$y}{$date};
     
    31203022  print "DEBUG: Events_List\n"  if ($Curr{"Debug"} =~ /trace/);
    31213023  my(@args)=@_;
    3122   &Date_Init()  if (! $Curr{"InitDone"});
    3123   &Events_ParseRaw();
     3024  Date_Init()  if (! $Curr{"InitDone"});
     3025  _Events_ParseRaw();
    31243026
    31253027  my($tmp,$date0,$date1,$flag);
    3126   $date0=&ParseDateString($args[0]);
     3028  $date0=ParseDateString($args[0]);
    31273029  warn "Invalid date $args[0]", return undef  if (! $date0);
    31283030
    31293031  if ($#args == 0) {
    3130     return &Events_Calc($date0);
     3032    return _Events_Calc($date0);
    31313033  }
    31323034
    31333035  if ($args[1]) {
    3134     $date1=&ParseDateString($args[1]);
     3036    $date1=ParseDateString($args[1]);
    31353037    warn "Invalid date $args[1]\n", return undef  if (! $date1);
    3136     if (&Date_Cmp($date0,$date1)>0) {
     3038    if (Date_Cmp($date0,$date1)>0) {
    31373039      $tmp=$date1;
    31383040      $date1=$date0;
     
    31403042    }
    31413043  } else {
    3142     $date0=&Date_SetTime($date0,"00:00:00");
    3143     $date1=&DateCalc_DateDelta($date0,"+0:0:0:1:0:0:0");
    3144   }
    3145 
    3146   $tmp=&Events_Calc($date0,$date1);
     3044    $date0=Date_SetTime($date0,"00:00:00");
     3045    $date1=_DateCalc_DateDelta($date0,"+0:0:0:1:0:0:0");
     3046  }
     3047
     3048  $tmp=_Events_Calc($date0,$date1);
    31473049
    31483050  $flag=$args[2];
     
    31573059      ($date0,$tmp)=splice(@tmp,0,2);
    31583060      $date1=$tmp[0];
    3159       $delta=&DateCalc_DateDate($date0,$date1);
     3061      $delta=_DateCalc_DateDate($date0,$date1);
    31603062      foreach $flag (@$tmp) {
    31613063        if (exists $ret{$flag}) {
    3162           $ret{$flag}=&DateCalc_DeltaDelta($ret{$flag},$delta);
     3064          $ret{$flag}=_DateCalc_DeltaDelta($ret{$flag},$delta);
    31633065        } else {
    31643066          $ret{$flag}=$delta;
     
    31723074      ($date0,$tmp)=splice(@tmp,0,2);
    31733075      $date1=$tmp[0];
    3174       $delta=&DateCalc_DateDate($date0,$date1);
     3076      $delta=_DateCalc_DateDate($date0,$date1);
    31753077      $flag=join("+",sort { Date_Cmp($a,$b) } @$tmp);
    31763078      next  if (! $flag);
    31773079      if (exists $ret{$flag}) {
    3178         $ret{$flag}=&DateCalc_DeltaDelta($ret{$flag},$delta);
     3080        $ret{$flag}=_DateCalc_DeltaDelta($ret{$flag},$delta);
    31793081      } else {
    31803082        $ret{$flag}=$delta;
     
    31953097  print "DEBUG: Date_SetTime\n"  if ($Curr{"Debug"} =~ /trace/);
    31963098  my($date,$h,$mn,$s)=@_;
    3197   &Date_Init()  if (! $Curr{"InitDone"});
     3099  Date_Init()  if (! $Curr{"InitDone"});
    31983100  my($y,$m,$d)=();
    31993101
    3200   if (! &Date_Split($date)) {
    3201     $date=&ParseDateString($date);
     3102  if (! _Date_Split($date)) {
     3103    $date=ParseDateString($date);
    32023104    return ""  if (! $date);
    32033105  }
    32043106
    3205   ($y,$m,$d)=( &Date_Split($date, 1) )[0..2];
    3206   ($h,$mn,$s)=&Date_ParseTime($h,$mn,$s);
     3107  ($y,$m,$d)=( _Date_Split($date, 1) )[0..2];
     3108  ($h,$mn,$s)=_Date_ParseTime($h,$mn,$s);
    32073109
    32083110  my($ampm,$wk);
    3209   return ""  if (&Date_DateCheck(\$y,\$m,\$d,\$h,\$mn,\$s,\$ampm,\$wk));
    3210   &Date_Join($y,$m,$d,$h,$mn,$s);
     3111  return ""  if (_Date_DateCheck(\$y,\$m,\$d,\$h,\$mn,\$s,\$ampm,\$wk));
     3112  _Date_Join($y,$m,$d,$h,$mn,$s);
    32113113}
    32123114
     
    32173119  $nocheck=0  if (! defined $nocheck);
    32183120
    3219   ($y,$m,$d,$h,$mn,$s)=&Date_Split($date);
     3121  ($y,$m,$d,$h,$mn,$s)=_Date_Split($date);
    32203122
    32213123  if (! $y) {
    3222     $date=&ParseDateString($date);
     3124    $date=ParseDateString($date);
    32233125    return "" if (! $date);
    3224     ($y,$m,$d,$h,$mn,$s)=&Date_Split($date, 1);
     3126    ($y,$m,$d,$h,$mn,$s)=_Date_Split($date, 1);
    32253127  }
    32263128
     
    32413143  }
    32423144
    3243   $date=&Date_Join($y,$m,$d,$h,$mn,$s);
    3244   return $date  if ($nocheck  ||  &Date_Split($date));
     3145  $date=_Date_Join($y,$m,$d,$h,$mn,$s);
     3146  return $date  if ($nocheck  ||  _Date_Split($date));
    32453147  return "";
    32463148}
     
    32613163  print "DEBUG: Date_DaysInMonth\n"  if ($Curr{"Debug"} =~ /trace/);
    32623164  my($m,$y)=@_;
    3263   $y=&Date_FixYear($y)  if (length($y)!=4);
     3165  $y=_Date_FixYear($y)  if (length($y)!=4);
    32643166  my(@d_in_m)=(0,31,28,31,30,31,30,31,31,30,31,30,31);
    3265   $d_in_m[2]=29  if (&Date_LeapYear($y));
     3167  $d_in_m[2]=29  if (Date_LeapYear($y));
    32663168  return $d_in_m[$m];
    32673169}
     
    32703172  print "DEBUG: Date_DayOfWeek\n"  if ($Curr{"Debug"} =~ /trace/);
    32713173  my($m,$d,$y)=@_;
    3272   $y=&Date_FixYear($y)  if (length($y)!=4);
     3174  $y=_Date_FixYear($y)  if (length($y)!=4);
    32733175  my($dayofweek,$dec31)=();
    32743176
    32753177  $dec31=5;                     # Dec 31, 1BC was Friday
    3276   $dayofweek=(&Date_DaysSince1BC($m,$d,$y)+$dec31) % 7;
     3178  $dayofweek=(Date_DaysSince1BC($m,$d,$y)+$dec31) % 7;
    32773179  $dayofweek=7  if ($dayofweek==0);
    32783180  return $dayofweek;
     
    32843186  print "DEBUG: Date_SecsSince1970\n"  if ($Curr{"Debug"} =~ /trace/);
    32853187  my($m,$d,$y,$h,$mn,$s)=@_;
    3286   $y=&Date_FixYear($y)  if (length($y)!=4);
     3188  $y=_Date_FixYear($y)  if (length($y)!=4);
    32873189  my($sec_now,$sec_70)=();
    3288   $sec_now=(&Date_DaysSince1BC($m,$d,$y)-1)*24*3600 + $h*3600 + $mn*60 + $s;
    3289 # $sec_70 =(&Date_DaysSince1BC(1,1,1970)-1)*24*3600;
     3190  $sec_now=(Date_DaysSince1BC($m,$d,$y)-1)*24*3600 + $h*3600 + $mn*60 + $s;
     3191# $sec_70 =(Date_DaysSince1BC(1,1,1970)-1)*24*3600;
    32903192  $sec_70 =62167219200;
    32913193  return ($sec_now-$sec_70);
     
    32953197  print "DEBUG: Date_SecsSince1970GMT\n"  if ($Curr{"Debug"} =~ /trace/);
    32963198  my($m,$d,$y,$h,$mn,$s)=@_;
    3297   &Date_Init()  if (! $Curr{"InitDone"});
    3298   $y=&Date_FixYear($y)  if (length($y)!=4);
    3299 
    3300   my($sec)=&Date_SecsSince1970($m,$d,$y,$h,$mn,$s);
     3199  Date_Init()  if (! $Curr{"InitDone"});
     3200  $y=_Date_FixYear($y)  if (length($y)!=4);
     3201
     3202  my($sec)=Date_SecsSince1970($m,$d,$y,$h,$mn,$s);
    33013203  return $sec   if ($Cnf{"ConvTZ"} eq "IGNORE");
    33023204
     
    33163218  print "DEBUG: Date_DaysSince1BC\n"  if ($Curr{"Debug"} =~ /trace/);
    33173219  my($m,$d,$y)=@_;
    3318   $y=&Date_FixYear($y)  if (length($y)!=4);
     3220  $y=_Date_FixYear($y)  if (length($y)!=4);
    33193221  my($Ny,$N4,$N100,$N400,$dayofyear,$days)=();
    33203222  my($cc,$yy)=();
     
    33393241  $N400=0       if ($y==0);
    33403242
    3341   $dayofyear=&Date_DayOfYear($m,$d,$y);
     3243  $dayofyear=Date_DayOfYear($m,$d,$y);
    33423244  $days= $Ny*365 + $N4 - $N100 + $N400 + $dayofyear;
    33433245
     
    33483250  print "DEBUG: Date_DayOfYear\n"  if ($Curr{"Debug"} =~ /trace/);
    33493251  my($m,$d,$y)=@_;
    3350   $y=&Date_FixYear($y)  if (length($y)!=4);
     3252  $y=_Date_FixYear($y)  if (length($y)!=4);
    33513253  # DinM    = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
    33523254  my(@days) = ( 0, 31, 59, 90,120,151,181,212,243,273,304,334,365);
    33533255  my($ly)=0;
    3354   $ly=1  if ($m>2 && &Date_LeapYear($y));
     3256  $ly=1  if ($m>2 && Date_LeapYear($y));
    33553257  return ($days[$m-1]+$d+$ly);
    33563258}
     
    33593261  print "DEBUG: Date_DaysInYear\n"  if ($Curr{"Debug"} =~ /trace/);
    33603262  my($y)=@_;
    3361   $y=&Date_FixYear($y)  if (length($y)!=4);
    3362   return 366  if (&Date_LeapYear($y));
     3263  $y=_Date_FixYear($y)  if (length($y)!=4);
     3264  return 366  if (Date_LeapYear($y));
    33633265  return 365;
    33643266}
     
    33673269  print "DEBUG: Date_WeekOfYear\n"  if ($Curr{"Debug"} =~ /trace/);
    33683270  my($m,$d,$y,$f)=@_;
    3369   &Date_Init()  if (! $Curr{"InitDone"});
    3370   $y=&Date_FixYear($y)  if (length($y)!=4);
     3271  Date_Init()  if (! $Curr{"InitDone"});
     3272  $y=_Date_FixYear($y)  if (length($y)!=4);
    33713273
    33723274  my($day,$dow,$doy)=();
    3373   $doy=&Date_DayOfYear($m,$d,$y);
     3275  $doy=Date_DayOfYear($m,$d,$y);
    33743276
    33753277  # The current DayOfYear and DayOfWeek
     
    33793281    $day=4;
    33803282  }
    3381   $dow=&Date_DayOfWeek(1,$day,$y);
     3283  $dow=Date_DayOfWeek(1,$day,$y);
    33823284
    33833285  # Move back to the first day of week 1.
     
    33923294  print "DEBUG: Date_LeapYear\n"  if ($Curr{"Debug"} =~ /trace/);
    33933295  my($y)=@_;
    3394   $y=&Date_FixYear($y)  if (length($y)!=4);
     3296  $y=_Date_FixYear($y)  if (length($y)!=4);
    33953297  return 0 unless $y % 4 == 0;
    33963298  return 1 unless $y % 100 == 0;
     
    34023304  print "DEBUG: Date_DaySuffix\n"  if ($Curr{"Debug"} =~ /trace/);
    34033305  my($d)=@_;
    3404   &Date_Init()  if (! $Curr{"InitDone"});
     3306  Date_Init()  if (! $Curr{"InitDone"});
    34053307  return $Lang{$Cnf{"Language"}}{"DoML"}[$d-1];
    34063308}
     
    34093311  print "DEBUG: Date_ConvTZ\n"  if ($Curr{"Debug"} =~ /trace/);
    34103312  my($date,$from,$to,$level)=@_;
    3411   if (not Date_Split($date)) {
     3313  if (not _Date_Split($date)) {
    34123314    my $err = "date passed in ('$date') is not a Date::Manip object";
    34133315    if (! $level) {
     
    34193321  }
    34203322
    3421   &Date_Init()  if (! $Curr{"InitDone"});
     3323  Date_Init()  if (! $Curr{"InitDone"});
    34223324  my($gmt)=();
    34233325
     
    34603362  my($s1,$h1,$m1,$s2,$h2,$m2,$d,$h,$m,$sign,$delta,$err,$yr,$mon,$sec)=();
    34613363  # We're going to try to do the calculation without calling DateCalc.
    3462   ($yr,$mon,$d,$h,$m,$sec)=&Date_Split($date, 1);
     3364  ($yr,$mon,$d,$h,$m,$sec)=_Date_Split($date, 1);
    34633365
    34643366  # Convert $date from $from to GMT
     
    34943396    $h -= $delta*24;
    34953397    if (($d + $delta) > 28) {
    3496       $date=&Date_Join($yr,$mon,$d,$h,$m,$sec);
    3497       return &DateCalc_DateDelta($date,"+0:0:0:$delta:0:0:0",\$err,0);
     3398      $date=_Date_Join($yr,$mon,$d,$h,$m,$sec);
     3399      return _DateCalc_DateDelta($date,"+0:0:0:$delta:0:0:0",\$err,0);
    34983400    }
    34993401    $d+= $delta;
     
    35023404    $h += $delta*24;
    35033405    if (($d - $delta) < 1) {
    3504       $date=&Date_Join($yr,$mon,$d,$h,$m,$sec);
    3505       return &DateCalc_DateDelta($date,"-0:0:0:$delta:0:0:0",\$err,0);
     3406      $date=_Date_Join($yr,$mon,$d,$h,$m,$sec);
     3407      return _DateCalc_DateDelta($date,"-0:0:0:$delta:0:0:0",\$err,0);
    35063408    }
    35073409    $d-= $delta;
    35083410  }
    3509   return &Date_Join($yr,$mon,$d,$h,$m,$sec);
     3411  return _Date_Join($yr,$mon,$d,$h,$m,$sec);
    35103412}
    35113413
     
    35133415  print "DEBUG: Date_TimeZone\n"  if ($Curr{"Debug"} =~ /trace/);
    35143416  my($null,$tz,@tz,$std,$dst,$time,$isdst,$tmp,$in)=();
    3515   &Date_Init()  if (! $Curr{"InitDone"});
     3417  Date_Init()  if (! $Curr{"InitDone"});
    35163418
    35173419  # Get timezones from all of the relevant places
     
    35603462        }
    35613463      }
    3562       push(@tz,$tz);
     3464      push(@tz,$tz)  if (defined $tz);
    35633465    } else {
    35643466      # We need to satisfy taint checking, but also look in all the
     
    35743476        $tz=(split(/\s+/,$tz))[4];
    35753477      }
    3576       push(@tz,$tz);
     3478      push(@tz,$tz)  if (defined $tz);
    35773479    }
    35783480  }
     
    36073509    $in->close;
    36083510  }
     3511 
     3512  print STDERR "Found time zones: @tz\n";
    36093513
    36103514  # Now parse each one to find the first valid one.
     
    36453549  }
    36463550
    3647   confess "ERROR: Date::Manip unable to determine Time Zone from @tz.\n";
     3551  confess "ERROR: Date::Manip unable to determine Time Zone.\n";
    36483552}
    36493553
     
    36543558  print "DEBUG: Date_IsWorkDay\n"  if ($Curr{"Debug"} =~ /trace/);
    36553559  my($date,$time)=@_;
    3656   &Date_Init()  if (! $Curr{"InitDone"});
    3657   $date=&ParseDateString($date);
     3560  Date_Init()  if (! $Curr{"InitDone"});
     3561  $date=ParseDateString($date);
    36583562  return ""  if (! $date);
    36593563  my($d)=$date;
    3660   $d=&Date_SetTime($date,$Cnf{"WorkDayBeg"})  if (! $time);
     3564  $d=Date_SetTime($date,$Cnf{"WorkDayBeg"})  if (! $time);
    36613565
    36623566  my($y,$mon,$day,$h,$m,$s,$dow)=();
    3663   ($y,$mon,$day,$h,$m,$s)=&Date_Split($d, 1);
    3664   $dow=&Date_DayOfWeek($mon,$day,$y);
     3567  ($y,$mon,$day,$h,$m,$s)=_Date_Split($d, 1);
     3568  $dow=Date_DayOfWeek($mon,$day,$y);
    36653569
    36663570  return 0  if ($dow<$Cnf{"WorkWeekBeg"} or
     
    36723576    # There will be recursion problems if we ever end up here twice.
    36733577    $Holiday{"dates"}{$y}={};
    3674     &Date_UpdateHolidays($y)
    3675   }
    3676   $d=&Date_SetTime($date,"00:00:00");
     3578    _Date_UpdateHolidays($y)
     3579  }
     3580  $d=Date_SetTime($date,"00:00:00");
    36773581  return 0  if (exists $Holiday{"dates"}{$y}{$d});
    36783582  1;
     
    36903594  print "DEBUG: Date_NextWorkDay\n"  if ($Curr{"Debug"} =~ /trace/);
    36913595  my($date,$off,$time)=@_;
    3692   &Date_Init()  if (! $Curr{"InitDone"});
    3693   $date=&ParseDateString($date);
     3596  Date_Init()  if (! $Curr{"InitDone"});
     3597  $date=ParseDateString($date);
    36943598  my($err)=();
    36953599
    3696   if (! &Date_IsWorkDay($date,$time)) {
     3600  if (! Date_IsWorkDay($date,$time)) {
    36973601    if ($time) {
    36983602      while (1) {
    3699         $date=&Date_GetNext($date,undef,0,$Cnf{"WorkDayBeg"});
    3700         last  if (&Date_IsWorkDay($date,$time));
     3603        $date=Date_GetNext($date,undef,0,$Cnf{"WorkDayBeg"});
     3604        last  if (Date_IsWorkDay($date,$time));
    37013605      }
    37023606    } else {
    37033607      while (1) {
    3704         $date=&DateCalc_DateDelta($date,"+0:0:0:1:0:0:0",\$err,0);
    3705         last  if (&Date_IsWorkDay($date,$time));
     3608        $date=_DateCalc_DateDelta($date,"+0:0:0:1:0:0:0",\$err,0);
     3609        last  if (Date_IsWorkDay($date,$time));
    37063610      }
    37073611    }
     
    37103614  while ($off>0) {
    37113615    while (1) {
    3712       $date=&DateCalc_DateDelta($date,"+0:0:0:1:0:0:0",\$err,0);
    3713       last  if (&Date_IsWorkDay($date,$time));
     3616      $date=_DateCalc_DateDelta($date,"+0:0:0:1:0:0:0",\$err,0);
     3617      last  if (Date_IsWorkDay($date,$time));
    37143618    }
    37153619    $off--;
     
    37323636  print "DEBUG: Date_PrevWorkDay\n"  if ($Curr{"Debug"} =~ /trace/);
    37333637  my($date,$off,$time)=@_;
    3734   &Date_Init()  if (! $Curr{"InitDone"});
    3735   $date=&ParseDateString($date);
     3638  Date_Init()  if (! $Curr{"InitDone"});
     3639  $date=ParseDateString($date);
    37363640  my($err)=();
    37373641
    3738   if (! &Date_IsWorkDay($date,$time)) {
     3642  if (! Date_IsWorkDay($date,$time)) {
    37393643    if ($time) {
    37403644      while (1) {
    3741         $date=&Date_GetPrev($date,undef,0,$Cnf{"WorkDayEnd"});
    3742         last  if (&Date_IsWorkDay($date,$time));
     3645        $date=Date_GetPrev($date,undef,0,$Cnf{"WorkDayEnd"});
     3646        last  if (Date_IsWorkDay($date,$time));
    37433647      }
    37443648      while (1) {
    3745         $date=&Date_GetNext($date,undef,0,$Cnf{"WorkDayBeg"});
    3746         last  if (&Date_IsWorkDay($date,$time));
     3649        $date=Date_GetNext($date,undef,0,$Cnf{"WorkDayBeg"});
     3650        last  if (Date_IsWorkDay($date,$time));
    37473651      }
    37483652    } else {
    37493653      while (1) {
    3750         $date=&DateCalc_DateDelta($date,"-0:0:0:1:0:0:0",\$err,0);
    3751         last  if (&Date_IsWorkDay($date,$time));
     3654        $date=_DateCalc_DateDelta($date,"-0:0:0:1:0:0:0",\$err,0);
     3655        last  if (Date_IsWorkDay($date,$time));
    37523656      }
    37533657    }
     
    37563660  while ($off>0) {
    37573661    while (1) {
    3758       $date=&DateCalc_DateDelta($date,"-0:0:0:1:0:0:0",\$err,0);
    3759       last  if (&Date_IsWorkDay($date,$time));
     3662      $date=_DateCalc_DateDelta($date,"-0:0:0:1:0:0:0",\$err,0);
     3663      last  if (Date_IsWorkDay($date,$time));
    37603664    }
    37613665    $off--;
     
    37703674  print "DEBUG: Date_NearestWorkDay\n"  if ($Curr{"Debug"} =~ /trace/);
    37713675  my($date,$tomorrow)=@_;
    3772   &Date_Init()  if (! $Curr{"InitDone"});
    3773   $date=&ParseDateString($date);
     3676  Date_Init()  if (! $Curr{"InitDone"});
     3677  $date=ParseDateString($date);
    37743678  my($a,$b,$dela,$delb,$err)=();
    37753679  $tomorrow=$Cnf{"TomorrowFirst"}  if (! defined $tomorrow);
    37763680
    3777   return $date  if (&Date_IsWorkDay($date));
     3681  return $date  if (Date_IsWorkDay($date));
    37783682
    37793683  # Find the nearest one.
     
    37883692
    37893693  while (1) {
    3790     $a=&DateCalc_DateDelta($a,$dela,\$err);
    3791     return $a  if (&Date_IsWorkDay($a));
    3792     $b=&DateCalc_DateDelta($b,$delb,\$err);
    3793     return $b  if (&Date_IsWorkDay($b));
    3794   }
    3795 }
    3796 
    3797 # &Date_NthDayOfYear($y,$n);
     3694    $a=_DateCalc_DateDelta($a,$dela,\$err);
     3695    return $a  if (Date_IsWorkDay($a));
     3696    $b=_DateCalc_DateDelta($b,$delb,\$err);
     3697    return $b  if (Date_IsWorkDay($b));
     3698  }
     3699}
     3700
     3701# Date_NthDayOfYear($y,$n);
    37983702#   Returns a list of (YYYY,MM,DD,HH,MM,SS) for the Nth day of the year.
    37993703sub Date_NthDayOfYear {
     
    38043708  $n=1       if (! defined $n  or  $n eq "");
    38053709  $n+=0;     # to turn 023 into 23
    3806   $y=&Date_FixYear($y)  if (length($y)<4);
    3807   my $leap=&Date_LeapYear($y);
     3710  $y=_Date_FixYear($y)  if (length($y)<4);
     3711  my $leap=Date_LeapYear($y);
    38083712  return ()  if ($n<1);
    38093713  return ()  if ($n >= ($leap ? 367 : 366));
     
    38563760#   $hash   = { key1=>val1 key2=>val2 ... }
    38573761
    3858 sub Date_InitHash {
    3859   print "DEBUG: Date_InitHash\n"  if ($Curr{"Debug"} =~ /trace/);
     3762sub _Date_InitHash {
     3763  print "DEBUG: _Date_InitHash\n"  if ($Curr{"Debug"} =~ /trace/);
    38603764  my($data,$regexp,$opts,$hash)=@_;
    38613765  my(@data)=@$data;
     
    38793783  if ($regexp) {
    38803784    @list=keys(%$hash);
    3881     @list=sort sortByLength(@list)  if ($sort);
     3785    @list=sort _sortByLength(@list)  if ($sort);
    38823786    if ($escape) {
    38833787      foreach $val (@list) {
     
    39183822#   $hash
    39193823
    3920 sub Date_InitLists {
    3921   print "DEBUG: Date_InitLists\n"  if ($Curr{"Debug"} =~ /trace/);
     3824sub _Date_InitLists {
     3825  print "DEBUG: _Date_InitLists\n"  if ($Curr{"Debug"} =~ /trace/);
    39223826  my($data,$regexp,$opts,$lists,$hash)=@_;
    39233827  my(@data)=@$data;
     
    39343838  # Set each of the lists
    39353839  if (@lists) {
    3936     confess "ERROR: Date_InitLists: lists must be 1 per data\n"
     3840    confess "ERROR: _Date_InitLists: lists must be 1 per data\n"
    39373841      if ($#lists != $#data);
    39383842    for ($i=0; $i<=$#data; $i++) {
     
    39723876  if ($regexp) {
    39733877    @list=keys(%hash);
    3974     @list=sort sortByLength(@list)  if ($sort);
     3878    @list=sort _sortByLength(@list)  if ($sort);
    39753879    if ($escape) {
    39763880      foreach $ele (@list) {
     
    40003904#   $regexp = '(string1|string2|...)'
    40013905
    4002 sub Date_InitStrings {
    4003   print "DEBUG: Date_InitStrings\n"  if ($Curr{"Debug"} =~ /trace/);
     3906sub _Date_InitStrings {
     3907  print "DEBUG: _Date_InitStrings\n"  if ($Curr{"Debug"} =~ /trace/);
    40043908  my($data,$regexp,$opts)=@_;
    40053909  my(@list)=@{ $data };
     
    40143918  # Create the regular expression
    40153919  my($ele)=();
    4016   @list=sort sortByLength(@list)  if ($sort);
     3920  @list=sort _sortByLength(@list)  if ($sort);
    40173921  if ($escape) {
    40183922    foreach $ele (@list) {
     
    40623966#   val1     : treat the list as the keys of a hash with values 1 .. N
    40633967
    4064 #    &Date_InitLists([$lang{"month_name"},$lang{"month_abb"}],
     3968#    _Date_InitLists([$lang{"month_name"},$lang{"month_abb"}],
    40653969#             [\$Month,"lc,sort,back"],
    40663970#             [\@Month,\@Mon],
     
    41014005#   val0     : treat the list as the keys of a hash with values 0 .. N-1
    41024006#   val1     : treat the list as the keys of a hash with values 1 .. N
    4103 sub Date_Regexp {
    4104   print "DEBUG: Date_Regexp\n"  if ($Curr{"Debug"} =~ /trace/);
     4007sub _Date_Regexp {
     4008  print "DEBUG: _Date_Regexp\n"  if ($Curr{"Debug"} =~ /trace/);
    41054009  my($list,$options,$array)=@_;
    41064010  my(@list,$ret,%hash,$i)=();
     
    41414045    $list = join("&&&",@$list);
    41424046  } else {
    4143     confess "ERROR: Date_Regexp.\n";
     4047    confess "ERROR: _Date_Regexp.\n";
    41444048  }
    41454049
     
    41674071    }
    41684072  }
    4169   @list=sort sortByLength(@list)  if ($sort);
     4073  @list=sort _sortByLength(@list)  if ($sort);
    41704074
    41714075  $ret="($back" . join("|",@list) . ")";
     
    41874091# the day), but if appropriate, signs will be in front of all elements.
    41884092# Also, as many of the signs will be equivalent as possible.
    4189 sub Delta_Normalize {
    4190   print "DEBUG: Delta_Normalize\n"  if ($Curr{"Debug"} =~ /trace/);
     4093sub _Delta_Normalize {
     4094  print "DEBUG: _Delta_Normalize\n"  if ($Curr{"Debug"} =~ /trace/);
    41914095  my($delta,$mode)=@_;
    41924096  return "" if (! $delta);
     
    42054109  # be a negative delta).
    42064110
    4207   my($y,$mon,$w,$d,$h,$m,$s)=&Delta_Split($delta);
     4111  my($y,$mon,$w,$d,$h,$m,$s)=_Delta_Split($delta);
    42084112
    42094113  # We need to make sure that the signs of all parts of a delta are the
     
    42834187# specifies the default sign.  Blank elements are set to 0.  If the
    42844188# third element is non-nil, exactly 7 elements must be included.
    4285 sub Delta_Split {
    4286   print "DEBUG: Delta_Split\n"  if ($Curr{"Debug"} =~ /trace/);
     4189sub _Delta_Split {
     4190  print "DEBUG: _Delta_Split\n"  if ($Curr{"Debug"} =~ /trace/);
    42874191  my($delta,$sign,$exact)=@_;
    42884192  my(@delta)=split(/:/,$delta);
     
    43014205# Reads up to 3 arguments.  $h may contain the time in any international
    43024206# format.  Any empty elements are set to 0.
    4303 sub Date_ParseTime {
    4304   print "DEBUG: Date_ParseTime\n"  if ($Curr{"Debug"} =~ /trace/);
     4207sub _Date_ParseTime {
     4208  print "DEBUG: _Date_ParseTime\n"  if ($Curr{"Debug"} =~ /trace/);
    43054209  my($h,$m,$s)=@_;
    4306   my($t)=&CheckTime("one");
     4210  my($t)=_CheckTime("one");
    43074211
    43084212  if (defined $h  and  $h =~ /$t/) {
     
    43204224# Forms a date with the 6 elements passed in (all of which must be defined).
    43214225# No check as to validity is made.
    4322 sub Date_Join {
    4323   print "DEBUG: Date_Join\n"  if ($Curr{"Debug"} =~ /trace/);
     4226sub _Date_Join {
     4227  print "DEBUG: _Date_Join\n"  if ($Curr{"Debug"} =~ /trace/);
    43244228  foreach (0 .. $#_) {
    4325       croak "undefined arg $_ to Date_Join()" if not defined $_[$_];
     4229      croak "undefined arg $_ to _Date_Join()" if not defined $_[$_];
    43264230  }
    43274231  my($y,$m,$d,$h,$mn,$s)=@_;
     
    43414245
    43424246  } else {
    4343     confess "ERROR: Invalid internal format in Date_Join.\n";
     4247    confess "ERROR: Invalid internal format in _Date_Join.\n";
    43444248  }
    43454249  $m="0$m"    if (length($m)==1);
     
    43544258# If "one" or "two" is passed in, a regexp with 1/2 or 2 digit hours is
    43554259# returned.
    4356 sub CheckTime {
    4357   print "DEBUG: CheckTime\n"  if ($Curr{"Debug"} =~ /trace/);
     4260sub _CheckTime {
     4261  print "DEBUG: _CheckTime\n"  if ($Curr{"Debug"} =~ /trace/);
    43584262  my($time)=@_;
    43594263  my($h)='(?:0?[0-9]|1[0-9]|2[0-3])';
     
    43854289# This checks a recurrence.  If it is valid, it splits it and returns the
    43864290# elements.  Otherwise, it returns an empty list.
    4387 #    ($recur0,$recur1,$flags,$dateb,$date0,$date1)=&Recur_Split($recur);
    4388 sub Recur_Split {
    4389   print "DEBUG: Recur_Split\n"  if ($Curr{"Debug"} =~ /trace/);
     4291#    ($recur0,$recur1,$flags,$dateb,$date0,$date1)=_Recur_Split($recur);
     4292sub _Recur_Split {
     4293  print "DEBUG: _Recur_Split\n"  if ($Curr{"Debug"} =~ /trace/);
    43904294  my($recur)=@_;
    43914295  my(@ret,@tmp);
     
    44144318# still not valid, () is returned.
    44154319#
    4416 sub Date_Split {
    4417   print "DEBUG: Date_Split\n"  if ($Curr{"Debug"} =~ /trace/);
     4320sub _Date_Split {
     4321  print "DEBUG: _Date_Split\n"  if ($Curr{"Debug"} =~ /trace/);
    44184322  my($date, $definitely_valid)=@_;
    44194323  $definitely_valid = 0 if not defined $definitely_valid;
     
    44394343
    44404344  } else {
    4441     confess "ERROR: Invalid internal format in Date_Split.\n";
     4345    confess "ERROR: Invalid internal format in _Date_Split.\n";
    44424346  }
    44434347
     
    44554359    ($y,$m,$d,$h,$mn,$s)=($1,$2,$3,$4,$5,$6);
    44564360    my(@d_in_m)=(0,31,28,31,30,31,30,31,31,30,31,30,31);
    4457     $d_in_m[2]=29  if (&Date_LeapYear($y));
     4361    $d_in_m[2]=29  if (Date_LeapYear($y));
    44584362    if ($d>$d_in_m[$m]) {
    44594363        my $msg = "invalid date $date: day $d of month $m, but only $d_in_m[$m] days in that month";
     
    44774381# This returns the date easter occurs on for a given year as ($month,$day).
    44784382# This is from the Calendar FAQ.
    4479 sub Date_Easter {
     4383sub _Date_Easter {
    44804384  my($y)=@_;
    4481   $y=&Date_FixYear($y)  if (length($y)==2);
     4385  $y=_Date_FixYear($y)  if (length($y)==2);
    44824386
    44834387  my($c) = $y/100;
     
    44974401# the 1st argument (with the 2nd argument the null list) and the year/month
    44984402# of these will be used.
    4499 sub Date_Recur_WoM {
     4403sub _Date_Recur_WoM {
    45004404  my($y,$m,$w,$d)=@_;
    45014405  my(@y)=@$y;
     
    45074411  if (@m) {
    45084412    foreach $m (@m) {
    4509       return ()  if (! &IsInt($m,1,12));
     4413      return ()  if (! _IsInt($m,1,12));
    45104414    }
    45114415
     
    45234427  } else {
    45244428    foreach $d0 (@y) {
    4525       @tmp=&Date_Split($d0);
     4429      @tmp=_Date_Split($d0);
    45264430      return ()  if (! @tmp);
    45274431      push(@tmp2,$tmp[0]);
     
    45334437  return ()  if (! @w);
    45344438  foreach $w (@w) {
    4535     return ()  if ($w==0  ||  ! &IsInt($w,-5,5));
     4439    return ()  if ($w==0  ||  ! _IsInt($w,-5,5));
    45364440  }
    45374441
    45384442  if (@d) {
    45394443    foreach $d (@d) {
    4540       return ()  if ($d==0  ||  ! &IsInt($d,-7,7));
     4444      return ()  if ($d==0  ||  ! _IsInt($d,-7,7));
    45414445      $d += 8  if ($d < 0);
    45424446    }
     
    45484452
    45494453    # Find 1st day of this month and next month
    4550     $date0=&Date_Join($y,$m,1,0,0,0);
    4551     $date1=&DateCalc_DateDelta($date0,"+0:1:0:0:0:0:0");
     4454    $date0=_Date_Join($y,$m,1,0,0,0);
     4455    $date1=_DateCalc_DateDelta($date0,"+0:1:0:0:0:0:0");
    45524456
    45534457    foreach $d (@d) {
    45544458      # Find 1st occurence of DOW (in both months)
    4555       $d0=&Date_GetNext($date0,$d,1);
    4556       $d1=&Date_GetNext($date1,$d,1);
     4459      $d0=Date_GetNext($date0,$d,1);
     4460      $d1=Date_GetNext($date1,$d,1);
    45574461
    45584462      @tmp=();
    4559       while (&Date_Cmp($d0,$d1)<0) {
     4463      while (Date_Cmp($d0,$d1)<0) {
    45604464        push(@tmp,$d0);
    4561         $d0=&DateCalc_DateDelta($d0,"+0:0:1:0:0:0:0");
     4465        $d0=_DateCalc_DateDelta($d0,"+0:0:1:0:0:0:0");
    45624466      }
    45634467
     
    45854489# list is the first date>=$date1 (because sometimes the set part will
    45864490# move the date back into the range).
    4587 sub Date_Recur {
     4491sub _Date_Recur {
    45884492  my($date0,$date1,$dateb,$delta)=@_;
    45894493  my(@ret,$d)=();
    45904494
    4591   while (&Date_Cmp($dateb,$date0)<0) {
    4592     $dateb=&DateCalc_DateDelta($dateb,$delta);
    4593   }
    4594   while (&Date_Cmp($dateb,$date1)>=0) {
    4595     $dateb=&DateCalc_DateDelta($dateb,"-$delta");
     4495  while (Date_Cmp($dateb,$date0)<0) {
     4496    $dateb=_DateCalc_DateDelta($dateb,$delta);
     4497  }
     4498  while (Date_Cmp($dateb,$date1)>=0) {
     4499    $dateb=_DateCalc_DateDelta($dateb,"-$delta");
    45964500  }
    45974501
    45984502  # Add the dates $date0..$dateb
    45994503  $d=$dateb;
    4600   while (&Date_Cmp($d,$date0)>=0) {
     4504  while (Date_Cmp($d,$date0)>=0) {
    46014505    unshift(@ret,$d);
    4602     $d=&DateCalc_DateDelta($d,"-$delta");
     4506    $d=_DateCalc_DateDelta($d,"-$delta");
    46034507  }
    46044508  # Add the first date earler than the range
     
    46064510
    46074511  # Add the dates $dateb..$date1
    4608   $d=&DateCalc_DateDelta($dateb,$delta);
    4609   while (&Date_Cmp($d,$date1)<0) {
     4512  $d=_DateCalc_DateDelta($dateb,$delta);
     4513  while (Date_Cmp($d,$date1)<0) {
    46104514    push(@ret,$d);
    4611     $d=&DateCalc_DateDelta($d,$delta);
     4515    $d=_DateCalc_DateDelta($d,$delta);
    46124516  }
    46134517  # Add the first date later than the range
     
    46214525# $h,$m,$s can each be values or lists "1-2,4".  If any are equal to "-1",
    46224526# they are not set (and none of the larger elements are set).
    4623 sub Date_RecurSetTime {
     4527sub _Date_RecurSetTime {
    46244528  my($date0,$date1,$dates,$h,$m,$s)=@_;
    46254529  my(@dates)=@$dates;
     
    46304534
    46314535  if ($h ne "-1") {
    4632     @h=&ReturnList($h);
     4536    @h=_ReturnList($h);
    46334537    return ()  if ! (@h);
    46344538    @h=sort { $a<=>$b } (@h);
     
    46374541    foreach $date (@dates) {
    46384542      foreach $h (@h) {
    4639         push(@tmp,&Date_SetDateField($date,"h",$h,1));
     4543        push(@tmp,Date_SetDateField($date,"h",$h,1));
    46404544      }
    46414545    }
     
    46444548
    46454549  if ($m ne "-1") {
    4646     @m=&ReturnList($m);
     4550    @m=_ReturnList($m);
    46474551    return ()  if ! (@m);
    46484552    @m=sort { $a<=>$b } (@m);
     
    46514555    foreach $date (@dates) {
    46524556      foreach $m (@m) {
    4653         push(@tmp,&Date_SetDateField($date,"mn",$m,1));
     4557        push(@tmp,Date_SetDateField($date,"mn",$m,1));
    46544558      }
    46554559    }
     
    46584562
    46594563  if ($s ne "-1") {
    4660     @s=&ReturnList($s);
     4564    @s=_ReturnList($s);
    46614565    return ()  if ! (@s);
    46624566    @s=sort { $a<=>$b } (@s);
     
    46654569    foreach $date (@dates) {
    46664570      foreach $s (@s) {
    4667         push(@tmp,&Date_SetDateField($date,"s",$s,1));
     4571        push(@tmp,Date_SetDateField($date,"s",$s,1));
    46684572      }
    46694573    }
     
    46734577  @tmp=();
    46744578  foreach $date (@dates) {
    4675     push(@tmp,$date)  if (&Date_Cmp($date,$date0)>=0  &&
    4676                           &Date_Cmp($date,$date1)<0  &&
    4677                           &Date_Split($date));
     4579    push(@tmp,$date)  if (Date_Cmp($date,$date0)>=0  &&
     4580                          Date_Cmp($date,$date1)<0  &&
     4581                          _Date_Split($date));
    46784582  }
    46794583
     
    46814585}
    46824586
    4683 sub DateCalc_DateDate {
    4684   print "DEBUG: DateCalc_DateDate\n"  if ($Curr{"Debug"} =~ /trace/);
     4587sub _DateCalc_DateDate {
     4588  print "DEBUG: _DateCalc_DateDate\n"  if ($Curr{"Debug"} =~ /trace/);
    46854589  my($D1,$D2,$mode)=@_;
    46864590  my(@d_in_m)=(0,31,28,31,30,31,30,31,31,30,31,30,31);
     
    46894593  # Exact mode
    46904594  if ($mode==0) {
    4691     my($y1,$m1,$d1,$h1,$mn1,$s1)=&Date_Split($D1, 1);
    4692     my($y2,$m2,$d2,$h2,$mn2,$s2)=&Date_Split($D2, 1);
     4595    my($y1,$m1,$d1,$h1,$mn1,$s1)=_Date_Split($D1, 1);
     4596    my($y2,$m2,$d2,$h2,$mn2,$s2)=_Date_Split($D2, 1);
    46934597    my($i,@delta,$d,$delta,$y)=();
    46944598
     
    47024606    $d=0;
    47034607    if ($y2>$y1) {
    4704       $d=&Date_DaysInYear($y1) - &Date_DayOfYear($m1,$d1,$y1);
    4705       $d+=&Date_DayOfYear($m2,$d2,$y2);
     4608      $d=Date_DaysInYear($y1) - Date_DayOfYear($m1,$d1,$y1);
     4609      $d+=Date_DayOfYear($m2,$d2,$y2);
    47064610      for ($y=$y1+1; $y<$y2; $y++) {
    4707         $d+= &Date_DaysInYear($y);
     4611        $d+= Date_DaysInYear($y);
    47084612      }
    47094613    } elsif ($y2<$y1) {
    4710       $d=&Date_DaysInYear($y2) - &Date_DayOfYear($m2,$d2,$y2);
    4711       $d+=&Date_DayOfYear($m1,$d1,$y1);
     4614      $d=Date_DaysInYear($y2) - Date_DayOfYear($m2,$d2,$y2);
     4615      $d+=Date_DayOfYear($m1,$d1,$y1);
    47124616      for ($y=$y2+1; $y<$y1; $y++) {
    4713         $d+= &Date_DaysInYear($y);
     4617        $d+= Date_DaysInYear($y);
    47144618      }
    47154619      $d *= -1;
    47164620    } else {
    4717       $d=&Date_DayOfYear($m2,$d2,$y2) - &Date_DayOfYear($m1,$d1,$y1);
     4621      $d=Date_DayOfYear($m2,$d2,$y2) - Date_DayOfYear($m1,$d1,$y1);
    47184622    }
    47194623    $delta[2]=0;
     
    47254629
    47264630    $delta=join(":",@delta);
    4727     $delta=&Delta_Normalize($delta,0);
     4631    $delta=_Delta_Normalize($delta,0);
    47284632    return $delta;
    47294633  }
     
    47344638  # make sure both are work days
    47354639  if ($mode==2 || $mode==3) {
    4736     $date1=&Date_NextWorkDay($date1,0,1);
    4737     $date2=&Date_NextWorkDay($date2,0,1);
     4640    $date1=Date_NextWorkDay($date1,0,1);
     4641    $date2=Date_NextWorkDay($date2,0,1);
    47384642  }
    47394643
    47404644  # make sure date1 comes before date2
    4741   if (&Date_Cmp($date1,$date2)>0) {
     4645  if (Date_Cmp($date1,$date2)>0) {
    47424646    $sign="-";
    47434647    $tmp=$date1;
     
    47474651    $sign="+";
    47484652  }
    4749   if (&Date_Cmp($date1,$date2)==0) {
     4653  if (Date_Cmp($date1,$date2)==0) {
    47504654    return "+0:+0:+0:+0:+0:+0:+0"  if ($Cnf{"DeltaSigns"});
    47514655    return "+0:0:0:0:0:0:0";
    47524656  }
    47534657
    4754   my($y1,$m1,$d1,$h1,$mn1,$s1)=&Date_Split($date1, 1);
    4755   my($y2,$m2,$d2,$h2,$mn2,$s2)=&Date_Split($date2, 1);
     4658  my($y1,$m1,$d1,$h1,$mn1,$s1)=_Date_Split($date1, 1);
     4659  my($y2,$m2,$d2,$h2,$mn2,$s2)=_Date_Split($date2, 1);
    47564660  my($dy,$dm,$dw,$dd,$dh,$dmn,$ds,$ddd)=(0,0,0,0,0,0,0,0);
    47574661
     
    47624666    $dm=0;
    47634667    if ($dy>0) {
    4764       $tmp=&DateCalc_DateDelta($date1,"+$dy:0:0:0:0:0:0",\$err,0);
    4765       if (&Date_Cmp($tmp,$date2)>0) {
     4668      $tmp=_DateCalc_DateDelta($date1,"+$dy:0:0:0:0:0:0",\$err,0);
     4669      if (Date_Cmp($tmp,$date2)>0) {
    47664670        $dy--;
    47674671        $tmp=$date1;
    4768         $tmp=&DateCalc_DateDelta($date1,"+$dy:0:0:0:0:0:0",\$err,0)
     4672        $tmp=_DateCalc_DateDelta($date1,"+$dy:0:0:0:0:0:0",\$err,0)
    47694673          if ($dy>0);
    47704674        $dm=12;
     
    47764680    $dm+=$m2-$m1;
    47774681    if ($dm>0) {
    4778       $tmp=&DateCalc_DateDelta($date1,"+0:$dm:0:0:0:0:0",\$err,0);
    4779       if (&Date_Cmp($tmp,$date2)>0) {
     4682      $tmp=_DateCalc_DateDelta($date1,"+0:$dm:0:0:0:0:0",\$err,0);
     4683      if (Date_Cmp($tmp,$date2)>0) {
    47804684        $dm--;
    47814685        $tmp=$date1;
    4782         $tmp=&DateCalc_DateDelta($date1,"+0:$dm:0:0:0:0:0",\$err,0)
     4686        $tmp=_DateCalc_DateDelta($date1,"+0:$dm:0:0:0:0:0",\$err,0)
    47834687          if ($dm>0);
    47844688      }
     
    47894693    # Aug 3 (Monday) -> Sep 3 (Sunday) -> Sep 4 (Monday)  = 1 month
    47904694    if ($mode==2) {
    4791       if (! &Date_IsWorkDay($date1,0)) {
    4792         $date1=&Date_NextWorkDay($date1,0,1);
     4695      if (! Date_IsWorkDay($date1,0)) {
     4696        $date1=Date_NextWorkDay($date1,0,1);
    47934697      }
    47944698    }
     
    47994703    $dd=0;
    48004704    while (1) {
    4801       $tmp=&Date_NextWorkDay($date1,1,1);
    4802       if (&Date_Cmp($tmp,$date2)<=0) {
     4705      $tmp=Date_NextWorkDay($date1,1,1);
     4706      if (Date_Cmp($tmp,$date2)<=0) {
    48034707        $dd++;
    48044708        $date1=$tmp;
     
    48094713
    48104714  } else {
    4811     ($y1,$m1,$d1)=( &Date_Split($date1, 1) )[0..2];
     4715    ($y1,$m1,$d1)=( _Date_Split($date1, 1) )[0..2];
    48124716    $dd=0;
    48134717    # If we're jumping across months, set $d1 to the first of the next month
     
    48154719    # of this month)
    48164720    if ($m1!=$m2) {
    4817       $d_in_m[2]=29  if (&Date_LeapYear($y1));
     4721      $d_in_m[2]=29  if (Date_LeapYear($y1));
    48184722      $dd=$d_in_m[$m1]-$d1+1;
    48194723      $d1=1;
    4820       $tmp=&DateCalc_DateDelta($date1,"+0:0:0:$dd:0:0:0",\$err,0);
    4821       if (&Date_Cmp($tmp,$date2)>0) {
     4724      $tmp=_DateCalc_DateDelta($date1,"+0:0:0:$dd:0:0:0",\$err,0);
     4725      if (Date_Cmp($tmp,$date2)>0) {
    48224726        $dd--;
    48234727        $d1--;
    4824         $tmp=&DateCalc_DateDelta($date1,"+0:0:0:$dd:0:0:0",\$err,0);
     4728        $tmp=_DateCalc_DateDelta($date1,"+0:0:0:$dd:0:0:0",\$err,0);
    48254729      }
    48264730      $date1=$tmp;
     
    48304734    if ($d1<$d2) {
    48314735      $ddd=$d2-$d1;
    4832       $tmp=&DateCalc_DateDelta($date1,"+0:0:0:$ddd:0:0:0",\$err,0);
    4833       if (&Date_Cmp($tmp,$date2)>0) {
     4736      $tmp=_DateCalc_DateDelta($date1,"+0:0:0:$ddd:0:0:0",\$err,0);
     4737      if (Date_Cmp($tmp,$date2)>0) {
    48344738        $ddd--;
    4835         $tmp=&DateCalc_DateDelta($date1,"+0:0:0:$ddd:0:0:0",\$err,0);
     4739        $tmp=_DateCalc_DateDelta($date1,"+0:0:0:$ddd:0:0:0",\$err,0);
    48364740      }
    48374741      $date1=$tmp;
     
    48424746  # in business mode, make sure h1 comes before h2 (if not find delta between
    48434747  # now and end of day and move to start of next business day)
    4844   $d1=( &Date_Split($date1, 1) )[2];
     4748  $d1=( _Date_Split($date1, 1) )[2];
    48454749  $dh=$dmn=$ds=0;
    48464750  if ($mode==2 || $mode==3  and  $d1 != $d2) {
    4847     $tmp=&Date_SetTime($date1,$Cnf{"WorkDayEnd"});
    4848     $tmp=&DateCalc_DateDelta($tmp,"+0:0:0:0:0:1:0")
     4751    $tmp=Date_SetTime($date1,$Cnf{"WorkDayEnd"});
     4752    $tmp=_DateCalc_DateDelta($tmp,"+0:0:0:0:0:1:0")
    48494753      if ($Cnf{"WorkDay24Hr"});
    4850     $tmp=&DateCalc_DateDate($date1,$tmp,0);
    4851     ($tmp,$tmp,$tmp,$tmp,$dh,$dmn,$ds)=&Delta_Split($tmp);
    4852     $date1=&Date_NextWorkDay($date1,1,0);
    4853     $date1=&Date_SetTime($date1,$Cnf{"WorkDayBeg"});
    4854     $d1=( &Date_Split($date1, 1) )[2];
     4754    $tmp=_DateCalc_DateDate($date1,$tmp,0);
     4755    ($tmp,$tmp,$tmp,$tmp,$dh,$dmn,$ds)=_Delta_Split($tmp);
     4756    $date1=Date_NextWorkDay($date1,1,0);
     4757    $date1=Date_SetTime($date1,$Cnf{"WorkDayBeg"});
     4758    $d1=( _Date_Split($date1, 1) )[2];
    48554759    confess "ERROR: DateCalc DateDate Business.\n"  if ($d1 != $d2);
    48564760  }
    48574761
    48584762  # Hours, minutes, seconds
    4859   $tmp=&DateCalc_DateDate($date1,$date2,0);
    4860   @tmp=&Delta_Split($tmp);
     4763  $tmp=_DateCalc_DateDate($date1,$date2,0);
     4764  @tmp=_Delta_Split($tmp);
    48614765  $dh  += $tmp[4];
    48624766  $dmn += $tmp[5];
     
    48644768
    48654769  $tmp="$sign$dy:$dm:0:$dd:$dh:$dmn:$ds";
    4866   &Delta_Normalize($tmp,$mode);
    4867 }
    4868 
    4869 sub DateCalc_DeltaDelta {
    4870   print "DEBUG: DateCalc_DeltaDelta\n"  if ($Curr{"Debug"} =~ /trace/);
     4770  _Delta_Normalize($tmp,$mode);
     4771}
     4772
     4773sub _DateCalc_DeltaDelta {
     4774  print "DEBUG: _DateCalc_DeltaDelta\n"  if ($Curr{"Debug"} =~ /trace/);
    48714775  my($D1,$D2,$mode)=@_;
    48724776  my(@delta1,@delta2,$i,$delta,@delta)=();
    48734777  $mode=0  if (! defined $mode);
    48744778
    4875   @delta1=&Delta_Split($D1);
    4876   @delta2=&Delta_Split($D2);
     4779  @delta1=_Delta_Split($D1);
     4780  @delta2=_Delta_Split($D2);
    48774781  for ($i=0; $i<7; $i++) {
    48784782    $delta[$i]=$delta1[$i]+$delta2[$i];
     
    48814785
    48824786  $delta=join(":",@delta);
    4883   $delta=&Delta_Normalize($delta,$mode);
     4787  $delta=_Delta_Normalize($delta,$mode);
    48844788  return $delta;
    48854789}
    48864790
    4887 sub DateCalc_DateDelta {
    4888   print "DEBUG: DateCalc_DateDelta\n"  if ($Curr{"Debug"} =~ /trace/);
     4791sub _DateCalc_DateDelta {
     4792  print "DEBUG: _DateCalc_DateDelta\n"  if ($Curr{"Debug"} =~ /trace/);
    48894793  my($D1,$D2,$errref,$mode)=@_;
    48904794  my($date)=();
     
    49074811
    49084812  # Date, delta
    4909   my($y,$m,$d,$h,$mn,$s)=&Date_Split($D1, 1);
    4910   my($dy,$dm,$dw,$dd,$dh,$dmn,$ds)=&Delta_Split($D2);
     4813  my($y,$m,$d,$h,$mn,$s)=_Date_Split($D1, 1);
     4814  my($dy,$dm,$dw,$dd,$dh,$dmn,$ds)=_Delta_Split($D2);
    49114815
    49124816  # do the month/year part
     
    49154819    $y = "0$y";
    49164820  }
    4917   &ModuloAddition(-12,$dm,\$m,\$y);   # -12 means 1-12 instead of 0-11
    4918   $d_in_m[2]=29  if (&Date_LeapYear($y));
     4821  _ModuloAddition(-12,$dm,\$m,\$y);   # -12 means 1-12 instead of 0-11
     4822  $d_in_m[2]=29  if (Date_LeapYear($y));
    49194823
    49204824  # if we have gone past the last day of a month, move the date back to
     
    49284832    $dd += $dw*7;
    49294833  } else {
    4930     $date=&DateCalc_DateDelta(&Date_Join($y,$m,$d,$h,$mn,$s),
     4834    $date=_DateCalc_DateDelta(_Date_Join($y,$m,$d,$h,$mn,$s),
    49314835                              "+0:0:$dw:0:0:0:0",0);
    4932     ($y,$m,$d,$h,$mn,$s)=&Date_Split($date, 1);
     4836    ($y,$m,$d,$h,$mn,$s)=_Date_Split($date, 1);
    49334837  }
    49344838
     
    49374841  if ($mode==2 || $mode==3) {
    49384842    $d=$d_in_m[$m] if ($d>$d_in_m[$m]);
    4939     $date=&Date_NextWorkDay(&Date_Join($y,$m,$d,$h,$mn,$s),0,1);
    4940     ($y,$m,$d,$h,$mn,$s)=&Date_Split($date, 1);
     4843    $date=Date_NextWorkDay(_Date_Join($y,$m,$d,$h,$mn,$s),0,1);
     4844    ($y,$m,$d,$h,$mn,$s)=_Date_Split($date, 1);
    49414845  }
    49424846
    49434847  # seconds, minutes, hours
    4944   &ModuloAddition(60,$ds,\$s,\$mn);
     4848  _ModuloAddition(60,$ds,\$s,\$mn);
    49454849  if ($mode==2 || $mode==3) {
    49464850    while (1) {
    4947       &ModuloAddition(60,$dmn,\$mn,\$h);
     4851      _ModuloAddition(60,$dmn,\$mn,\$h);
    49484852      $h+= $dh;
    49494853
     
    49734877
    49744878  } else {
    4975     &ModuloAddition(60,$dmn,\$mn,\$h);
    4976     &ModuloAddition(24,$dh,\$h,\$d);
     4879    _ModuloAddition(60,$dmn,\$mn,\$h);
     4880    _ModuloAddition(24,$dh,\$h,\$d);
    49774881  }
    49784882
     
    49874891  if ($mode==2 || $mode==3) {
    49884892    if ($dd>=0) {
    4989       $date=&Date_NextWorkDay(&Date_Join($y,$m,$d,$h,$mn,$s),$dd,1);
     4893      $date=Date_NextWorkDay(_Date_Join($y,$m,$d,$h,$mn,$s),$dd,1);
    49904894    } else {
    4991       $date=&Date_PrevWorkDay(&Date_Join($y,$m,$d,$h,$mn,$s),-$dd,1);
    4992     }
    4993     ($y,$m,$d,$h,$mn,$s)=&Date_Split($date, 1);
     4895      $date=Date_PrevWorkDay(_Date_Join($y,$m,$d,$h,$mn,$s),-$dd,1);
     4896    }
     4897    ($y,$m,$d,$h,$mn,$s)=_Date_Split($date, 1);
    49944898
    49954899  } else {
    4996     $d_in_m[2]=29  if (&Date_LeapYear($y));
     4900    $d_in_m[2]=29  if (Date_LeapYear($y));
    49974901    $d=$d_in_m[$m]  if ($d>$d_in_m[$m]);
    49984902    $d += $dd;
     
    50024906        $m=12;
    50034907        $y--;
    5004         if (&Date_LeapYear($y)) {
     4908        if (Date_LeapYear($y)) {
    50054909          $d_in_m[2]=29;
    50064910        } else {
     
    50164920        $m=1;
    50174921        $y++;
    5018         if (&Date_LeapYear($y)) {
     4922        if (Date_LeapYear($y)) {
    50194923          $d_in_m[2]=29;
    50204924        } else {
     
    50294933    return;
    50304934  }
    5031   &Date_Join($y,$m,$d,$h,$mn,$s);
    5032 }
    5033 
    5034 sub Date_UpdateHolidays {
    5035   print "DEBUG: Date_UpdateHolidays\n"  if ($Curr{"Debug"} =~ /trace/);
     4935  _Date_Join($y,$m,$d,$h,$mn,$s);
     4936}
     4937
     4938sub _Date_UpdateHolidays {
     4939  print "DEBUG: _Date_UpdateHolidays\n"  if ($Curr{"Debug"} =~ /trace/);
    50364940  my($year)=@_;
    50374941  $Holiday{"year"}=$year;
     
    50424946
    50434947  foreach $key (keys %{ $Holiday{"desc"} }) {
    5044     @tmp=&Recur_Split($key);
     4948    @tmp=_Recur_Split($key);
    50454949    if (@tmp) {
    5046       $tmp=&ParseDateString("${year}010100:00:00");
    5047       ($date)=&ParseRecur($key,$tmp,$tmp,($year+1)."-01-01");
     4950      $tmp=ParseDateString("${year}010100:00:00");
     4951      ($date)=ParseRecur($key,$tmp,$tmp,($year+1)."-01-01");
    50484952      next  if (! $date);
    50494953
     
    50514955      # Date +/- Delta
    50524956      ($date,$delta)=($1,$2);
    5053       $tmp=&ParseDateString("$date $year");
     4957      $tmp=ParseDateString("$date $year");
    50544958      if ($tmp) {
    50554959        $date=$tmp;
    50564960      } else {
    5057         $date=&ParseDateString($date);
     4961        $date=ParseDateString($date);
    50584962        next  if ($date !~ /^$year/);
    50594963      }
    5060       $date=&DateCalc($date,$delta,\$err,0);
     4964      $date=DateCalc($date,$delta,\$err,0);
    50614965
    50624966    } else {
    50634967      # Date
    50644968      $date=$key;
    5065       $tmp=&ParseDateString("$date $year");
     4969      $tmp=ParseDateString("$date $year");
    50664970      if ($tmp) {
    50674971        $date=$tmp;
    50684972      } else {
    5069         $date=&ParseDateString($date);
     4973        $date=ParseDateString($date);
    50704974        next  if ($date !~ /^$year/);
    50714975      }
     
    50764980
    50774981# This sets a Date::Manip config variable.
    5078 sub Date_SetConfigVariable {
    5079   print "DEBUG: Date_SetConfigVariable\n"  if ($Curr{"Debug"} =~ /trace/);
     4982sub _Date_SetConfigVariable {
     4983  print "DEBUG: _Date_SetConfigVariable\n"  if ($Curr{"Debug"} =~ /trace/);
    50804984  my($var,$val)=@_;
    50814985
     
    50844988  $Cnf{"PersonalCnf"}=$val,      return  if ($var =~ /^PersonalCnf$/i);
    50854989  $Cnf{"PersonalCnfPath"}=$val,  return  if ($var =~ /^PersonalCnfPath$/i);
    5086   &EraseHolidays(),              return  if ($var =~ /^EraseHolidays$/i);
     4990  EraseHolidays(),              return  if ($var =~ /^EraseHolidays$/i);
    50874991  $Cnf{"IgnoreGlobalCnf"}=1,     return  if ($var =~ /^IgnoreGlobalCnf$/i);
    50884992  $Cnf{"GlobalCnf"}=$val,        return  if ($var =~ /^GlobalCnf$/i);
     
    51335037#
    51345038# This takes either one date or two dates as arguments.
    5135 sub Events_Calc {
    5136   print "DEBUG: Events_Calc\n"  if ($Curr{"Debug"} =~ /trace/);
     5039sub _Events_Calc {
     5040  print "DEBUG: _Events_Calc\n"  if ($Curr{"Debug"} =~ /trace/);
    51375041
    51385042  my($date0,$date1)=@_;
    51395043
    51405044  my($tmp);
    5141   $date0=&ParseDateString($date0);
     5045  $date0=ParseDateString($date0);
    51425046  return undef  if (! $date0);
    51435047  if ($date1) {
    5144     $date1=&ParseDateString($date1);
    5145     if (&Date_Cmp($date0,$date1)>0) {
     5048    $date1=ParseDateString($date1);
     5049    if (Date_Cmp($date0,$date1)>0) {
    51465050      $tmp=$date1;
    51475051      $date1=$date0;
     
    51495053    }
    51505054  } else {
    5151     $date1=&DateCalc_DateDelta($date0,"+0:0:0:0:0:0:1");
     5055    $date1=_DateCalc_DateDelta($date0,"+0:0:0:0:0:0:1");
    51525056  }
    51535057
     
    51605064 DATE: while (@tmp) {
    51615065    ($d0,$d1,$del,$name)=splice(@tmp,0,4);
    5162     $d0=&ParseDateString($d0);
    5163     $d1=&ParseDateString($d1)   if ($d1);
    5164     $del=&ParseDateDelta($del)  if ($del);
     5066    $d0=ParseDateString($d0);
     5067    $d1=ParseDateString($d1)   if ($d1);
     5068    $del=ParseDateDelta($del)  if ($del);
    51655069    if ($d1) {
    51665070      if ($del) {
    5167         $d1=&DateCalc_DateDelta($d1,$del);
     5071        $d1=_DateCalc_DateDelta($d1,$del);
    51685072      }
    51695073    } else {
    5170       $d1=&DateCalc_DateDelta($d0,$del);
    5171     }
    5172     if (&Date_Cmp($d0,$d1)>0) {
     5074      $d1=_DateCalc_DateDelta($d0,$del);
     5075    }
     5076    if (Date_Cmp($d0,$d1)>0) {
    51735077      $tmp=$d1;
    51745078      $d1=$d0;
     
    51775081    #         [ date0,date1 )
    51785082    # [ d0,d1 )      OR     [ d0,d1 )
    5179     next DATE  if (&Date_Cmp($d1,$date0)<=0  ||
    5180                    &Date_Cmp($d0,$date1)>=0);
     5083    next DATE  if (Date_Cmp($d1,$date0)<=0  ||
     5084                   Date_Cmp($d0,$date1)>=0);
    51815085    #      [ date0,date1 )
    51825086    # [ d0,d1 )
    51835087    # [ d0,                  d1 )
    5184     if (&Date_Cmp($d0,$date0)<=0) {
     5088    if (Date_Cmp($d0,$date0)<=0) {
    51855089      push @{ $ret{$date0} },$name;
    5186       push @{ $ret{$d1} },"!$name"  if (&Date_Cmp($d1,$date1)<0);
     5090      push @{ $ret{$d1} },"!$name"  if (Date_Cmp($d1,$date1)<0);
    51875091      next DATE;
    51885092    }
    51895093    #      [ date0,date1 )
    51905094    #                 [ d0,d1 )
    5191     if (&Date_Cmp($d1,$date1)>=0) {
     5095    if (Date_Cmp($d1,$date1)>=0) {
    51925096      push @{ $ret{$d0} },$name;
    51935097      next DATE;
     
    52125116  # Sort them AND take into account the "!$name" entries.
    52135117  my(%tmp,$date,@tmp2,@ret);
    5214   @d=sort { &Date_Cmp($a,$b) } keys %ret;
     5118  @d=sort { Date_Cmp($a,$b) } keys %ret;
    52155119  foreach $date (@d) {
    52165120    @tmp=@{ $ret{$date} };
     
    52375141
    52385142# This parses the raw events list
    5239 sub Events_ParseRaw {
    5240   print "DEBUG: Events_ParseRaw\n"  if ($Curr{"Debug"} =~ /trace/);
     5143sub _Events_ParseRaw {
     5144  print "DEBUG: _Events_ParseRaw\n"  if ($Curr{"Debug"} =~ /trace/);
    52415145
    52425146  # Only need to be parsed once
     
    52555159    if ($#event == 0) {
    52565160
    5257       if ($date0=&ParseDateString($event[0])) {
     5161      if ($date0=ParseDateString($event[0])) {
    52585162        #
    52595163        # date = event
    52605164        #
    5261         $tmp=&ParseDateString("$event[0] 00:00:00");
     5165        $tmp=ParseDateString("$event[0] 00:00:00");
    52625166        if ($tmp  &&  $tmp eq $date0) {
    52635167          $delta="+0:0:0:1:0:0:0";
     
    52675171        push @{ $Events{"dates"} },($date0,0,$delta,$name);
    52685172
    5269       } elsif ($recur=&ParseRecur($event[0])) {
     5173      } elsif ($recur=ParseRecur($event[0])) {
    52705174        #
    52715175        # recur = event
    52725176        #
    5273         ($recur0,$recur1)=&Recur_Split($recur);
     5177        ($recur0,$recur1)=_Recur_Split($recur);
    52745178        if ($recur0) {
    52755179          if ($recur1) {
     
    52975201    } elsif ($#event == 1) {
    52985202
    5299       if ($date0=&ParseDateString($event[0])) {
    5300 
    5301         if ($date1=&ParseDateString($event[1])) {
     5203      if ($date0=ParseDateString($event[0])) {
     5204
     5205        if ($date1=ParseDateString($event[1])) {
    53025206          #
    53035207          # date ; date = event
    53045208          #
    5305           $tmp=&ParseDateString("$event[1] 00:00:00");
     5209          $tmp=ParseDateString("$event[1] 00:00:00");
    53065210          if ($tmp  &&  $tmp eq $date1) {
    5307             $date1=&DateCalc_DateDelta($date1,"+0:0:0:1:0:0:0");
     5211            $date1=_DateCalc_DateDelta($date1,"+0:0:0:1:0:0:0");
    53085212          }
    53095213          push @{ $Events{"dates"} },($date0,$date1,0,$name);
    53105214
    5311         } elsif ($delta=&ParseDateDelta($event[1])) {
     5215        } elsif ($delta=ParseDateDelta($event[1])) {
    53125216          #
    53135217          # date ; delta = event
     
    53215225        }
    53225226
    5323       } elsif ($recur=&ParseRecur($event[0])) {
    5324 
    5325         if ($delta=&ParseDateDelta($event[1])) {
     5227      } elsif ($recur=ParseRecur($event[0])) {
     5228
     5229        if ($delta=ParseDateDelta($event[1])) {
    53265230          #
    53275231          # recur ; delta = event
     
    53525256
    53535257# This reads an init file.
    5354 sub Date_InitFile {
    5355   print "DEBUG: Date_InitFile\n"  if ($Curr{"Debug"} =~ /trace/);
     5258sub _Date_InitFile {
     5259  print "DEBUG: _Date_InitFile\n"  if ($Curr{"Debug"} =~ /trace/);
    53565260  my($file)=@_;
    53575261  my($in)=new IO::File;
     
    53695273    if (/^\*holiday/i) {
    53705274      $section="holiday";
    5371       &EraseHolidays()  if ($section =~ /holiday/i  &&  $Cnf{"EraseHolidays"});
     5275      EraseHolidays()  if ($section =~ /holiday/i  &&  $Cnf{"EraseHolidays"});
    53725276      next;
    53735277    } elsif (/^\*events/i) {
     
    53805284        if (! /(.*\S)\s*=\s*(.*)$/);
    53815285      ($var,$val)=($1,$2);
    5382       &Date_SetConfigVariable($var,$val);
     5286      _Date_SetConfigVariable($var,$val);
    53835287
    53845288    } elsif ($section =~ /holiday/i) {
     
    54045308}
    54055309
    5406 # $flag=&Date_TimeCheck(\$h,\$mn,\$s,\$ampm);
     5310# $flag=_Date_TimeCheck(\$h,\$mn,\$s,\$ampm);
    54075311#   Returns 1 if any of the fields are bad.  All fields are optional, and
    54085312#   all possible checks are done on the data.  If a field is not passed in,
    54095313#   it is set to default values.  If data is missing, appropriate defaults
    54105314#   are supplied.
    5411 sub Date_TimeCheck {
    5412   print "DEBUG: Date_TimeCheck\n"  if ($Curr{"Debug"} =~ /trace/);
     5315sub _Date_TimeCheck {
     5316  print "DEBUG: _Date_TimeCheck\n"  if ($Curr{"Debug"} =~ /trace/);
    54135317  my($h,$mn,$s,$ampm)=@_;
    54145318  my($tmp1,$tmp2,$tmp3)=();
     
    54395343    $$h="00"      if ($$h eq "");
    54405344    $$h="0$$h"    if (length($$h)==1);
    5441     return 1      if (! &IsInt($$h,0,23));
     5345    return 1      if (! _IsInt($$h,0,23));
    54425346    $tmp2="AM"    if ($$h<12);
    54435347    $tmp2="PM"    if ($$h>=12);
     
    54495353  $$mn="00"       if ($$mn eq "");
    54505354  $$mn="0$$mn"    if (length($$mn)==1);
    5451   return 1        if (! &IsInt($$mn,0,59));
     5355  return 1        if (! _IsInt($$mn,0,59));
    54525356
    54535357  # Check seconds
    54545358  $$s="00"        if ($$s eq "");
    54555359  $$s="0$$s"      if (length($$s)==1);
    5456   return 1        if (! &IsInt($$s,0,59));
     5360  return 1        if (! _IsInt($$s,0,59));
    54575361
    54585362  return 0;
    54595363}
    54605364
    5461 # $flag=&Date_DateCheck(\$y,\$m,\$d,\$h,\$mn,\$s,\$ampm,\$wk);
     5365# $flag=_Date_DateCheck(\$y,\$m,\$d,\$h,\$mn,\$s,\$ampm,\$wk);
    54625366#   Returns 1 if any of the fields are bad.  All fields are optional, and
    54635367#   all possible checks are done on the data.  If a field is not passed in,
     
    54675371#   If the flag UpdateHolidays is set, the year is set to
    54685372#   CurrHolidayYear.
    5469 sub Date_DateCheck {
    5470   print "DEBUG: Date_DateCheck\n"  if ($Curr{"Debug"} =~ /trace/);
     5373sub _Date_DateCheck {
     5374  print "DEBUG: _Date_DateCheck\n"  if ($Curr{"Debug"} =~ /trace/);
    54715375  my($y,$m,$d,$h,$mn,$s,$ampm,$wk)=@_;
    54725376  my($tmp1,$tmp2,$tmp3)=();
     
    54855389  # Check year.
    54865390  $$y=$curr_y             if ($$y eq "");
    5487   $$y=&Date_FixYear($$y)  if (length($$y)<4);
    5488   return 1                if (! &IsInt($$y,0,9999));
    5489   $d_in_m[2]=29           if (&Date_LeapYear($$y));
     5391  $$y=_Date_FixYear($$y)  if (length($$y)<4);
     5392  return 1                if (! _IsInt($$y,0,9999));
     5393  $d_in_m[2]=29           if (Date_LeapYear($$y));
    54905394
    54915395  # Check month
     
    54945398    if (exists $Lang{$Cnf{"Language"}}{"MonthH"}{lc($$m)});
    54955399  $$m="0$$m"              if (length($$m)==1);
    5496   return 1                if (! &IsInt($$m,1,12));
     5400  return 1                if (! _IsInt($$m,1,12));
    54975401
    54985402  # Check day
    54995403  $$d="01"                if ($$d eq "");
    55005404  $$d="0$$d"              if (length($$d)==1);
    5501   return 1                if (! &IsInt($$d,1,$d_in_m[$$m]));
     5405  return 1                if (! _IsInt($$d,1,$d_in_m[$$m]));
    55025406  if ($$wk) {
    5503     $tmp1=&Date_DayOfWeek($$m,$$d,$$y);
     5407    $tmp1=Date_DayOfWeek($$m,$$d,$$y);
    55045408    $tmp2=$Lang{$Cnf{"Language"}}{"WeekH"}{lc($$wk)}
    55055409      if (exists $Lang{$Cnf{"Language"}}{"WeekH"}{lc($$wk)});
     
    55075411  }
    55085412
    5509   return &Date_TimeCheck($h,$mn,$s,$ampm);
     5413  return _Date_TimeCheck($h,$mn,$s,$ampm);
    55105414}
    55115415
    55125416# Takes a year in 2 digit form and returns it in 4 digit form
    5513 sub Date_FixYear {
    5514   print "DEBUG: Date_FixYear\n"  if ($Curr{"Debug"} =~ /trace/);
     5417sub _Date_FixYear {
     5418  print "DEBUG: _Date_FixYear\n"  if ($Curr{"Debug"} =~ /trace/);
    55155419  my($y)=@_;
    55165420  my($curr_y)=$Curr{"Y"};
     
    55215425
    55225426  if (lc($Cnf{"YYtoYYYY"}) eq "c") {
    5523     $y1=substring($y,0,2);
     5427    $y1=substr($y,0,2);
    55245428    $y="$y1$y";
    55255429
     
    55475451}
    55485452
    5549 # &Date_NthWeekOfYear($y,$n);
     5453# _Date_NthWeekOfYear($y,$n);
    55505454#   Returns a list of (YYYY,MM,DD) for the 1st day of the Nth week of the
    55515455#   year.
    5552 # &Date_NthWeekOfYear($y,$n,$dow,$flag);
     5456# _Date_NthWeekOfYear($y,$n,$dow,$flag);
    55535457#   Returns a list of (YYYY,MM,DD) for the Nth DoW of the year.  If flag
    55545458#   is nil, the first DoW of the year may actually be in the previous
     
    55565460#   If flag is non-nil, the 1st DoW of the year refers to the 1st one
    55575461#   actually in the year
    5558 sub Date_NthWeekOfYear {
    5559   print "DEBUG: Date_NthWeekOfYear\n"  if ($Curr{"Debug"} =~ /trace/);
     5462sub _Date_NthWeekOfYear {
     5463  print "DEBUG: _Date_NthWeekOfYear\n"  if ($Curr{"Debug"} =~ /trace/);
    55605464  my($y,$n,$dow,$flag)=@_;
    55615465  my($m,$d,$err,$tmp,$date,%dow)=();
     
    55745478  }
    55755479
    5576   $y=&Date_FixYear($y)  if (length($y)<4);
     5480  $y=_Date_FixYear($y)  if (length($y)<4);
    55775481  if ($Cnf{"Jan1Week1"}) {
    5578     $date=&Date_Join($y,1,1,0,0,0);
     5482    $date=_Date_Join($y,1,1,0,0,0);
    55795483  } else {
    5580     $date=&Date_Join($y,1,4,0,0,0);
    5581   }
    5582   $date=&Date_GetPrev($date,$Cnf{"FirstDay"},1);
    5583   $date=&Date_GetNext($date,$dow,1)  if ($dow ne "");
     5484    $date=_Date_Join($y,1,4,0,0,0);
     5485  }
     5486  $date=Date_GetPrev($date,$Cnf{"FirstDay"},1);
     5487  $date=Date_GetNext($date,$dow,1)  if ($dow ne "");
    55845488
    55855489  if ($flag) {
    5586     ($tmp)=&Date_Split($date, 1);
     5490    ($tmp)=_Date_Split($date, 1);
    55875491    $n++  if ($tmp != $y);
    55885492  }
    55895493
    55905494  if ($n>1) {
    5591     $date=&DateCalc_DateDelta($date,"+0:0:". ($n-1) . ":0:0:0:0",\$err,0);
     5495    $date=_DateCalc_DateDelta($date,"+0:0:". ($n-1) . ":0:0:0:0",\$err,0);
    55925496  } elsif ($n==0) {
    5593     $date=&DateCalc_DateDelta($date,"-0:0:1:0:0:0:0",\$err,0);
    5594   }
    5595   ($y,$m,$d)=&Date_Split($date, 1);
     5497    $date=_DateCalc_DateDelta($date,"-0:0:1:0:0:0:0",\$err,0);
     5498  }
     5499  ($y,$m,$d)=_Date_Split($date, 1);
    55965500  ($y,$m,$d);
    55975501}
     
    56035507# 8-bit international characters can be gotten by "\xXX".  I don't know
    56045508# how to get 16-bit characters.  I've got to read up on perllocale.
    5605 sub Char_8Bit {
     5509sub _Char_8Bit {
    56065510  my($hash)=@_;
    56075511
     
    58305734}
    58315735
    5832 # $hashref = &Date_Init_LANGUAGE;
     5736# $hashref = _Date_Init_LANGUAGE;
    58335737#   This returns a hash containing all of the initialization for a
    58345738#   specific language.  The hash elements are:
     
    59125816# every language.
    59135817
    5914 sub Date_Init_English {
    5915   print "DEBUG: Date_Init_English\n"  if ($Curr{"Debug"} =~ /trace/);
     5818sub _Date_Init_English {
     5819  print "DEBUG: _Date_Init_English\n"  if ($Curr{"Debug"} =~ /trace/);
    59165820  my($d)=@_;
    59175821
     
    59645868  $$d{"business"}=["business"];
    59655869
    5966   $$d{"offset"}  =["yesterday","-0:0:0:1:0:0:0","tomorrow","+0:0:0:1:0:0:0","overmorrow","+0:0:0:2:0:0:0"];
     5870  $$d{"offset"}  =["yesterday","-0:0:0:1:0:0:0","tomorrow","+0:0:0:1:0:0:0","overmorrow","+0:0:0:2:0:0:0","ereyesterday","-0:0:0:2:0:0:0"];
    59675871  $$d{"times"}   =["noon","12:00:00","midnight","00:00:00"];
    59685872
     
    59845888}
    59855889
    5986 sub Date_Init_Italian {
    5987   print "DEBUG: Date_Init_Italian\n"  if ($Curr{"Debug"} =~ /trace/);
     5890sub _Date_Init_Italian {
     5891  print "DEBUG: _Date_Init_Italian\n"  if ($Curr{"Debug"} =~ /trace/);
    59885892  my($d)=@_;
    59895893  my(%h)=();
    5990   &Char_8Bit(\%h);
     5894  _Char_8Bit(\%h);
    59915895  my($i)=$h{"i`"};
    59925896
     
    60555959}
    60565960
    6057 sub Date_Init_French {
    6058   print "DEBUG: Date_Init_French\n"  if ($Curr{"Debug"} =~ /trace/);
     5961sub _Date_Init_French {
     5962  print "DEBUG: _Date_Init_French\n"  if ($Curr{"Debug"} =~ /trace/);
    60595963  my($d)=@_;
    60605964  my(%h)=();
    6061   &Char_8Bit(\%h);
     5965  _Char_8Bit(\%h);
    60625966  my($e)=$h{"e'"};
    60635967  my($u)=$h{"u^"};
     
    61326036}
    61336037
    6134 sub Date_Init_Romanian {
    6135   print "DEBUG: Date_Init_Romanian\n"  if ($Curr{"Debug"} =~ /trace/);
     6038sub _Date_Init_Romanian {
     6039  print "DEBUG: _Date_Init_Romanian\n"  if ($Curr{"Debug"} =~ /trace/);
    61366040  my($d)=@_;
    61376041  my(%h)=();
    6138   &Char_8Bit(\%h);
     6042  _Char_8Bit(\%h);
    61396043  my($p)=$h{"p"};
    61406044  my($i)=$h{"i^"};
     
    62496153}
    62506154
    6251 sub Date_Init_Swedish {
    6252   print "DEBUG: Date_Init_Swedish\n"  if ($Curr{"Debug"} =~ /trace/);
     6155sub _Date_Init_Swedish {
     6156  print "DEBUG: _Date_Init_Swedish\n"  if ($Curr{"Debug"} =~ /trace/);
    62536157  my($d)=@_;
    62546158  my(%h)=();
    6255   &Char_8Bit(\%h);
     6159  _Char_8Bit(\%h);
    62566160  my($ao)=$h{"ao"};
    62576161  my($o) =$h{"o:"};
     
    63336237}
    63346238
    6335 sub Date_Init_German {
    6336   print "DEBUG: Date_Init_German\n"  if ($Curr{"Debug"} =~ /trace/);
     6239sub _Date_Init_German {
     6240  print "DEBUG: _Date_Init_German\n"  if ($Curr{"Debug"} =~ /trace/);
    63376241  my($d)=@_;
    63386242  my(%h)=();
    6339   &Char_8Bit(\%h);
     6243  _Char_8Bit(\%h);
    63406244  my($a)=$h{"a:"};
    63416245  my($u)=$h{"u:"};
     
    64226326}
    64236327
    6424 sub Date_Init_Dutch {
    6425   print "DEBUG: Date_Init_Dutch\n"  if ($Curr{"Debug"} =~ /trace/);
     6328sub _Date_Init_Dutch {
     6329  print "DEBUG: _Date_Init_Dutch\n"  if ($Curr{"Debug"} =~ /trace/);
    64266330  my($d)=@_;
    64276331  my(%h)=();
    6428   &Char_8Bit(\%h);
     6332  _Char_8Bit(\%h);
    64296333
    64306334  $$d{"month_name"}=
     
    65146418}
    65156419
    6516 sub Date_Init_Polish {
    6517   print "DEBUG: Date_Init_Polish\n"  if ($Curr{"Debug"} =~ /trace/);
     6420sub _Date_Init_Polish {
     6421  print "DEBUG: _Date_Init_Polish\n"  if ($Curr{"Debug"} =~ /trace/);
    65186422  my($d)=@_;
    65196423
     
    66136517}
    66146518
    6615 sub Date_Init_Spanish {
    6616   print "DEBUG: Date_Init_Spanish\n"  if ($Curr{"Debug"} =~ /trace/);
     6519sub _Date_Init_Spanish {
     6520  print "DEBUG: _Date_Init_Spanish\n"  if ($Curr{"Debug"} =~ /trace/);
    66176521  my($d)=@_;
    66186522  my(%h)=();
    6619   &Char_8Bit(\%h);
     6523  _Char_8Bit(\%h);
    66206524
    66216525  $$d{"month_name"}=
     
    66966600}
    66976601
    6698 sub Date_Init_Portuguese {
    6699   print "DEBUG: Date_Init_Portuguese\n"  if ($Curr{"Debug"} =~ /trace/);
     6602sub _Date_Init_Portuguese {
     6603  print "DEBUG: _Date_Init_Portuguese\n"  if ($Curr{"Debug"} =~ /trace/);
    67006604  my($d)=@_;
    67016605  my(%h)=();
    6702   &Char_8Bit(\%h);
     6606  _Char_8Bit(\%h);
    67036607  my($o) = $h{"-o"};
    67046608  my($c) = $h{",c"};
     
    67926696}
    67936697
    6794 sub Date_Init_Russian {
    6795   print "DEBUG: Date_Init_Russian\n"  if ($Curr{"Debug"} =~ /trace/);
     6698sub _Date_Init_Russian {
     6699  print "DEBUG: _Date_Init_Russian\n"  if ($Curr{"Debug"} =~ /trace/);
    67966700  my($d)=@_;
    67976701  my(%h)=();
    6798   &Char_8Bit(\%h);
     6702  _Char_8Bit(\%h);
    67996703  my($a) =$h{"a:"};
    68006704
     
    69806884}
    69816885
    6982 sub Date_Init_Turkish {
    6983   print "DEBUG: Date_Init_Turkish\n"  if ($Curr{"Debug"} =~ /trace/);
     6886sub _Date_Init_Turkish {
     6887  print "DEBUG: _Date_Init_Turkish\n"  if ($Curr{"Debug"} =~ /trace/);
    69846888  my($d)=@_;
    69856889
     
    70916995}
    70926996
    7093 sub Date_Init_Danish {
    7094   print "DEBUG: Date_Init_Danish\n"  if ($Curr{"Debug"} =~ /trace/);
     6997sub _Date_Init_Danish {
     6998  print "DEBUG: _Date_Init_Danish\n"  if ($Curr{"Debug"} =~ /trace/);
    70956999  my($d)=@_;
    70967000
     
    71707074}
    71717075
    7172 sub Date_Init_Catalan {
    7173   print "DEBUG: Date_Init_Catalan\n"  if ($Curr{"Debug"} =~ /trace/);
     7076sub _Date_Init_Catalan {
     7077  print "DEBUG: _Date_Init_Catalan\n"  if ($Curr{"Debug"} =~ /trace/);
    71747078  my($d)=@_;
    71757079
     
    72667170no integer;
    72677171
    7268 # &ModuloAddition($N,$add,\$val,\$rem);
     7172# _ModuloAddition($N,$add,\$val,\$rem);
    72697173#   This calculates $val=$val+$add and forces $val to be in a certain range.
    72707174#   This is useful for adding numbers for which only a certain range is
     
    72757179#   Example:
    72767180#     To add 2 hours together (with the excess returned in days) use:
    7277 #       &ModuloAddition(60,$s1,\$s,\$day);
    7278 sub ModuloAddition {
     7181#       _ModuloAddition(60,$s1,\$s,\$day);
     7182sub _ModuloAddition {
    72797183  my($N,$add,$val,$rem)=@_;
    72807184  return  if ($N==0);
     
    73037207}
    73047208
    7305 # $Flag=&IsInt($String [,$low, $high]);
     7209# $Flag=_IsInt($String [,$low, $high]);
    73067210#    Returns 1 if $String is a valid integer, 0 otherwise.  If $low is
    73077211#    entered, $String must be >= $low.  If $high is entered, $String must
    73087212#    be <= $high.  It is valid to check only one of the bounds.
    7309 sub IsInt {
     7213sub _IsInt {
    73107214  my($N,$low,$high)=@_;
    73117215  return 0  if (! defined $N  or
     
    73167220}
    73177221
    7318 # $Pos=&SinLindex(\@List,$Str [,$offset [,$CaseInsensitive]]);
    7319 #    Searches for an exact string in a list.
    7320 #
    7321 #    This is similar to RinLindex except that it searches for elements
    7322 #    which are exactly equal to $Str (possibly case insensitive).
    7323 sub SinLindex {
    7324   my($listref,$Str,$offset,$Insensitive)=@_;
    7325   my($i,$len,$tmp)=();
    7326   $len=$#$listref;
    7327   return -2  if ($len<0 or ! $Str);
    7328   return -1  if (&Index_First(\$offset,$len));
    7329   $Str=uc($Str)  if ($Insensitive);
    7330   for ($i=$offset; $i<=$len; $i++) {
    7331     $tmp=$$listref[$i];
    7332     $tmp=uc($tmp)  if ($Insensitive);
    7333     return $i  if ($tmp eq $Str);
    7334   }
    7335   return -1;
    7336 }
    7337 
    7338 sub Index_First {
    7339   my($offsetref,$max)=@_;
    7340   $$offsetref=0  if (! $$offsetref);
    7341   if ($$offsetref < 0) {
    7342     $$offsetref += $max + 1;
    7343     $$offsetref=0  if ($$offsetref < 0);
    7344   }
    7345   return -1 if ($$offsetref > $max);
    7346   return 0;
    7347 }
    7348 
    7349 # $File=&CleanFile($file);
     7222# $File=_CleanFile($file);
    73507223#   This cleans up a path to remove the following things:
    73517224#     double slash       /a//b  -> /a/b
     
    73537226#     leading dot        ./a    -> a
    73547227#     trailing slash     a/     -> a
    7355 sub CleanFile {
     7228sub _CleanFile {
    73567229  my($file)=@_;
    73577230  $file =~ s/\s*$//;
     
    73667239}
    73677240
    7368 # $File=&ExpandTilde($file);
     7241# $File=_ExpandTilde($file);
    73697242#   This checks to see if a "~" appears as the first character in a path.
    73707243#   If it does, the "~" expansion is interpreted (if possible) and the full
     
    73747247#   This is Windows/Mac friendly.
    73757248#   This is efficient.
    7376 sub ExpandTilde {
     7249sub _ExpandTilde {
    73777250  my($file)=shift;
    73787251  my($user,$home)=();
     
    74017274}
    74027275
    7403 # $File=&FullFilePath($file);
     7276# $File=_FullFilePath($file);
    74047277#   Returns the full or relative path to $file (expanding "~" if necessary).
    74057278#   Returns an empty string if a "~" expansion cannot be interpreted.  The
    7406 #   path does not need to exist.  CleanFile is called.
    7407 sub FullFilePath {
     7279#   path does not need to exist.  _CleanFile is called.
     7280sub _FullFilePath {
    74087281  my($file)=shift;
    74097282  my($rootpat) = '^/'; #default pattern to match absolute path
    74107283  $rootpat = '^(\\|/|([A-Za-z]:[\\/]))' if ($OS eq 'Windows');
    7411   $file=&ExpandTilde($file);
     7284  $file=_ExpandTilde($file);
    74127285  return ""  if (! $file);
    7413   return &CleanFile($file);
    7414 }
    7415 
    7416 # $Flag=&CheckFilePath($file [,$mode]);
     7286  return _CleanFile($file);
     7287}
     7288
     7289# $Flag=_CheckFilePath($file [,$mode]);
    74177290#   Checks to see if $file exists, to see what type it is, and whether
    74187291#   the script can access it.  If it exists and has the correct mode, 1
     
    74297302#   All characters in $mode which do not correspond to valid tests are
    74307303#   ignored.
    7431 sub CheckFilePath {
     7304sub _CheckFilePath {
    74327305  my($file,$mode)=@_;
    74337306  my($test)=();
    7434   $file=&FullFilePath($file);
     7307  $file=_FullFilePath($file);
    74357308  $mode = ""  if (! defined $mode);
    74367309
     
    74647337#&&
    74657338
    7466 # $Path=&FixPath($path [,$full] [,$mode] [,$error]);
     7339# $Path=_FixPath($path [,$full] [,$mode] [,$error]);
    74677340#   Makes sure that every directory in $path (a colon separated list of
    74687341#   directories) appears as a full path or relative path.  All "~"
     
    74827355#
    74837356#   The corrected path is returned.
    7484 sub FixPath {
     7357sub _FixPath {
    74857358  my($path,$full,$mode,$err)=@_;
    74867359  local($_)="";
     
    75027375    # Expand path
    75037376    if ($full) {
    7504       $_=&FullFilePath($_);
     7377      $_=_FullFilePath($_);
    75057378    } else {
    7506       $_=&ExpandTilde($_);
     7379      $_=_ExpandTilde($_);
    75077380    }
    75087381    if (! $_) {
     
    75127385
    75137386    # Check mode
    7514     if (! $mode  or  &CheckFilePath($_,$mode)) {
     7387    if (! $mode  or  _CheckFilePath($_,$mode)) {
    75157388      $path .= $Cnf{"PathSep"} . $_;
    75167389    } else {
     
    75237396#&&
    75247397
    7525 # $File=&SearchPath($file,$path [,$mode] [,@suffixes]);
     7398# $File=_SearchPath($file,$path [,$mode] [,@suffixes]);
    75267399#   Searches through directories in $path for a file named $file.  The
    75277400#   full path is returned if one is found, or an empty string otherwise.
    75287401#   The file may exist with one of the @suffixes.  The mode is checked
    7529 #   similar to &CheckFilePath.
     7402#   similar to _CheckFilePath.
    75307403#
    75317404#   The first full path that matches the name and mode is returned.  If none
    75327405#   is found, an empty string is returned.
    7533 sub SearchPath {
     7406sub _SearchPath {
    75347407  my($file,$path,$mode,@suff)=@_;
    75357408  my($f,$s,$d,@dir,$fs)=();
    7536   $path=&FixPath($path,1,"r");
     7409  $path=_FixPath($path,1,"r");
    75377410  @dir=split(/$Cnf{"PathSep"}/,$path);
    75387411  foreach $d (@dir) {
    75397412    $f="$d/$file";
    75407413    $f=~ s|//|/|g;
    7541     return $f if (&CheckFilePath($f,$mode));
     7414    return $f if (_CheckFilePath($f,$mode));
    75427415    foreach $s (@suff) {
    75437416      $fs="$f.$s";
    7544       return $fs if (&CheckFilePath($fs,$mode));
     7417      return $fs if (_CheckFilePath($fs,$mode));
    75457418    }
    75467419  }
     
    75487421}
    75497422
    7550 # @list=&ReturnList($str);
     7423# @list=_ReturnList($str);
    75517424#    This takes a string which should be a comma separated list of integers
    75527425#    or ranges (5-7).  It returns a sorted list of all integers referred to
     
    75547427#
    75557428#    Negative integers are also handled.  "-2--1" is equivalent to "-2,-1".
    7556 sub ReturnList {
     7429sub _ReturnList {
    75577430  my($str)=@_;
    75587431  my(@ret,@str,$from,$to,$tmp)=();
     
    75777450
    757874511;
     7452# Local Variables:
     7453# mode: cperl
     7454# indent-tabs-mode: nil
     7455# cperl-indent-level: 3
     7456# cperl-continued-statement-offset: 2
     7457# cperl-continued-brace-offset: 0
     7458# cperl-brace-offset: 0
     7459# cperl-brace-imaginary-offset: 0
     7460# cperl-label-offset: -2
     7461# End:
Note: See TracChangeset for help on using the changeset viewer.