[bcn-pm] Date::Manip

Eva Perales Laguna eperalesaac.upc.edu
Dme Maig 17 05:47:53 PDT 2006


On Tue, May 16, 2006 at 09:42:02PM +0200, Xavier Noria wrote:
> 
> Sembla que les versions anteriors del modul se les han cepillat de  
> CPAN i no puc fer servir el diff de
> 
>    http://search.cpan.org/tools/DateManip
> 
> per mirar-ho. El codi es troba a l'arxiu Manip.pm, podries fer un  
> diff i enviar-lo?
> 
>    diff -u Manip-5.40.pm Manip-5.42.pm > Manip.patch
>

M'he estat mirant el resultat del diff i sembla que la cosa está en
els canvis fets a la 

Us adjunto els tres fitxers (Manip-5.40.pm, Manip-5.42.pm i Manip.patch)

--
Eva

-------------- següent part --------------
Un adjunt de no-text ha estat eliminat...
Nom: Manip-5.40.pm
Tipus: application/x-perl
volum: 209007 bytes
Desc: no disponible
Url : http://mail.pm.org/pipermail/barcelona-pm/attachments/20060517/b2b8ba97/attachment-0002.bin 
-------------- següent part --------------
Un adjunt de no-text ha estat eliminat...
Nom: Manip-5.42.pm
Tipus: application/x-perl
volum: 233596 bytes
Desc: no disponible
Url : http://mail.pm.org/pipermail/barcelona-pm/attachments/20060517/b2b8ba97/attachment-0003.bin 
-------------- següent part --------------
--- Manip-5.40.pm	Wed May 17 14:24:07 2006
+++ Manip-5.42.pm	Wed May 17 14:25:02 2006
@@ -1,13 +1,12 @@
 package Date::Manip;
-
-# Copyright (c) 1995-2001 Sullivan Beck.  All rights reserved.
+# Copyright (c) 1995-2003 Sullivan Beck.  All rights reserved.
 # This program is free software; you can redistribute it and/or modify it
 # under the same terms as Perl itself.
 
 ###########################################################################
 ###########################################################################
 
-use vars qw($OS %Lang %Holiday %Events %Curr %Cnf %Zone);
+use vars qw($OS %Lang %Holiday %Events %Curr %Cnf %Zone $VERSION @ISA @EXPORT);
 
 # Determine the type of OS...
 $OS="Unix";
@@ -19,6 +18,8 @@
                     $ENV{OS} =~ /MSWin32/i ||
                     $ENV{OS} =~ /Windows_95/i ||
                     $ENV{OS} =~ /Windows_NT/i));
+$OS="Netware"  if (defined $^O and
+                   $^O =~ /NetWare/i);
 $OS="Mac"      if ((defined $^O and
                     $^O =~ /MacOS/i) ||
                    (defined $ENV{OS} and
@@ -31,7 +32,7 @@
                    $^O =~ /VMS/i);
 
 # Determine if we're doing taint checking
-$NoTaint = eval { local $^W; unlink "$^X$^T"; 1 };
+$Date::Manip::NoTaint = eval { local $^W; unlink "$^X$^T"; 1 };
 
 ###########################################################################
 # CUSTOMIZATION
@@ -50,12 +51,17 @@
 # expansions are allowed.  This should be set in Date_Init arguments or in
 # the global config file.
 
-aDatePath=();
+aDate::Manip::DatePath=();
 if ($OS eq "Windows") {
   $Cnf{"PathSep"}         = ";";
   $Cnf{"PersonalCnf"}     = "Manip.cnf";
   $Cnf{"PersonalCnfPath"} = ".";
 
+} elsif ($OS eq "Netware") {
+  $Cnf{"PathSep"}         = ";";
+  $Cnf{"PersonalCnf"}     = "Manip.cnf";
+  $Cnf{"PersonalCnfPath"} = ".";
+
 } elsif ($OS eq "MPE") {
   $Cnf{"PathSep"}         = ":";
   $Cnf{"PersonalCnf"}     = "Manip.cnf";
@@ -73,16 +79,16 @@
 
 } elsif ($OS eq "VMS") {
   # VMS doesn't like files starting with "."
-  $Cnf{"PathSep"}         = ":";
+  $Cnf{"PathSep"}         = "\n";
   $Cnf{"PersonalCnf"}     = "Manip.cnf";
-  $Cnf{"PersonalCnfPath"} = ".:~";
+  $Cnf{"PersonalCnfPath"} = ".\n~";
 
 } else {
   # Unix
   $Cnf{"PathSep"}         = ":";
   $Cnf{"PersonalCnf"}     = ".DateManip.cnf";
   $Cnf{"PersonalCnfPath"} = ".:~";
-  @DatePath=qw(/bin /usr/bin /usr/local/bin);
+  @Date::Manip::DatePath=qw(/bin /usr/bin /usr/local/bin);
 }
 
 ### Date::Manip variables set in the global or personal config file
@@ -198,8 +204,7 @@
 
 use IO::File;
 
-use vars qw($VERSION);
-$VERSION="5.40";
+$VERSION="5.42";
 
 ########################################################################
 ########################################################################
@@ -363,6 +368,15 @@
     } elsif ($L eq "Italian") {
       &Date_Init_Italian(\%lang);
 
+    } elsif ($L eq "Russian") {
+      &Date_Init_Russian(\%lang);
+
+    } elsif ($L eq "Turkish") {
+      &Date_Init_Turkish(\%lang);
+
+    } elsif ($L eq "Danish") {
+      &Date_Init_Danish(\%lang);
+
     } else {
       confess "ERROR: Unknown language in Date::Manip.\n";
     }
@@ -538,22 +552,32 @@
       "cst    -0600 ".  # Central Standard
       "cdt    -0500 ".  # Central Daylight
       "est    -0500 ".  # Eastern Standard
+      "act    -0500 ".  # Brazil, Acre
       "sat    -0400 ".  # Chile
+      "bot    -0400 ".  # Bolivia
+      "amt    -0400 ".  # Brazil, Amazon
+      "acst   -0400 ".  # Brazil, Acre Daylight
       "edt    -0400 ".  # Eastern Daylight
       "ast    -0400 ".  # Atlantic Standard
       #"nst   -0330 ".  # Newfoundland Standard      nst=North Sumatra    +0630
       "nft    -0330 ".  # Newfoundland
       #"gst   -0300 ".  # Greenland Standard         gst=Guam Standard    +1000
       #"bst   -0300 ".  # Brazil Standard            bst=British Summer   +0100
+      "brt    -0300 ".  # Brazil Standard (official time)
+      "brst   -0300 ".  # Brazil Standard
       "adt    -0300 ".  # Atlantic Daylight
+      "art    -0300 ".  # Argentina
+      "amst   -0300 ".  # Brazil, Amazon Daylight
       "ndt    -0230 ".  # Newfoundland Daylight
+      "brst   -0200 ".  # Brazil Daylight (official time)
+      "fnt    -0200 ".  # Brazil, Fernando de Noronha
       "at     -0200 ".  # Azores
       "wat    -0100 ".  # West Africa
+      "fnst   -0100 ".  # Brazil, Fernando de Noronha Daylight
       "gmt    +0000 ".  # Greenwich Mean
       "ut     +0000 ".  # Universal
       "utc    +0000 ".  # Universal (Coordinated)
       "wet    +0000 ".  # Western European
-      "west   +0000 ".  # Alias for Western European
       "cet    +0100 ".  # Central European
       "fwt    +0100 ".  # French Winter
       "met    +0100 ".  # Middle European
@@ -562,6 +586,7 @@
       "swt    +0100 ".  # Swedish Winter
       "bst    +0100 ".  # British Summer             bst=Brazil standard  -0300
       "gb     +0100 ".  # GMT with daylight savings
+      "west   +0000 ".  # Western European Daylight
       "eet    +0200 ".  # Eastern Europe, USSR Zone 1
       "cest   +0200 ".  # Central European Summer
       "fst    +0200 ".  # French Summer
@@ -576,27 +601,34 @@
       "eetedt +0300 ".  # Eastern Europe, USSR Zone 1
       "idt    +0300 ".  # Israel Daylight
       "msk    +0300 ".  # Moscow
+      "eat    +0300 ".  # East Africa
       "it     +0330 ".  # Iran
       "zp4    +0400 ".  # USSR Zone 3
       "msd    +0400 ".  # Moscow Daylight
       "zp5    +0500 ".  # USSR Zone 4
       "ist    +0530 ".  # Indian Standard
       "zp6    +0600 ".  # USSR Zone 5
+      "novst  +0600 ".  # Novosibirsk time zone, Russia
       "nst    +0630 ".  # North Sumatra              nst=Newfoundland Std -0330
       #"sst   +0700 ".  # South Sumatra, USSR Zone 6 sst=Swedish Summer   +0200
+      "javt   +0700 ".  # Java
       "hkt    +0800 ".  # Hong Kong
       "sgt    +0800 ".  # Singapore
       "cct    +0800 ".  # China Coast, USSR Zone 7
-      "awst   +0800 ".  # West Australian Standard
+      "awst   +0800 ".  # Australian Western Standard
       "wst    +0800 ".  # West Australian Standard
       "pht    +0800 ".  # Asia Manila
       "kst    +0900 ".  # Republic of Korea
       "jst    +0900 ".  # Japan Standard, USSR Zone 8
       "rok    +0900 ".  # Republic of Korea
+      "acst   +0930 ".  # Australian Central Standard
       "cast   +0930 ".  # Central Australian Standard
+      "aest   +1000 ".  # Australian Eastern Standard
       "east   +1000 ".  # Eastern Australian Standard
       "gst    +1000 ".  # Guam Standard, USSR Zone 9 gst=Greenland Std    -0300
+      "acdt   +1030 ".  # Australian Central Daylight
       "cadt   +1030 ".  # Central Australian Daylight
+      "aedt   +1100 ".  # Australian Eastern Daylight
       "eadt   +1100 ".  # Eastern Australian Daylight
       "idle   +1200 ".  # International Date Line East
       "nzst   +1200 ".  # New Zealand Standard
@@ -881,18 +913,18 @@
       $tmp=0;
       $tmp=1  if (/$mnsec$zone2?\s*$/i);  # or /$mnsec$zone/ ??
       $tmp=0  if (/$ampmexp/i);
-      if (s/$apachetime$zone()/$1 /i  ||
-          s/$apachetime$zone2?/$1 /i  ||
-          s/(^|[^a-z])$at\s*$D$mnsec$zone()/$1 /i  ||
-          s/(^|[^a-z])$at\s*$D$mnsec$zone2?/$1 /i  ||
-          s/(^|[^0-9])(\d)$mnsec$zone()/$1 /i ||
-          s/(^|[^0-9])(\d)$mnsec$zone2?/$1 /i ||
+      if (s/$apachetime$zone()/$1 /i                            ||
+          s/$apachetime$zone2?/$1 /i                            ||
+          s/(^|[^a-z])$at\s*$D$mnsec$zone()/$1 /i               ||
+          s/(^|[^a-z])$at\s*$D$mnsec$zone2?/$1 /i               ||
+          s/(^|[^0-9])(\d)$mnsec$zone()/$1 /i                   ||
+          s/(^|[^0-9])(\d)$mnsec$zone2?/$1 /i                   ||
           (s/(t)$D$mnsec$zone()/$1 /i and (($iso=-$tmp) || 1))  ||
           (s/(t)$D$mnsec$zone2?/$1 /i and (($iso=-$tmp) || 1))  ||
-          (s/()$DD$mnsec$zone()/ /i and (($iso=$tmp) || 1)) ||
-          (s/()$DD$mnsec$zone2?/ /i and (($iso=$tmp) || 1))  ||
-          s/(^|$at\s*|\s+)$D()()\s*$ampmexp$zone()/ /i  ||
-          s/(^|$at\s*|\s+)$D()()\s*$ampmexp$zone2?/ /i  ||
+          (s/()$DD$mnsec$zone()/ /i and (($iso=$tmp) || 1))     ||
+          (s/()$DD$mnsec$zone2?/ /i and (($iso=$tmp) || 1))     ||
+          s/(^|$at\s*|\s+)$D()()\s*$ampmexp$zone()/ /i          ||
+          s/(^|$at\s*|\s+)$D()()\s*$ampmexp$zone2?/ /i          ||
           0
          ) {
         ($h,$mn,$s,$ampm,$z,$z2)=($2,$3,$4,$5,$6,$7);
@@ -923,43 +955,40 @@
     # dateTtime ISO 8601 formats
     my($orig)=$_;
     s/t$//i  if ($iso<0);
-        
+
     # Parse ISO 8601 dates now (which may still have a zone stuck to it).
-    if ( ($iso && /^[0-9-]+(W[0-9-]+)?$zone?$/i)  ||
-         ($iso && /^[0-9-]+(W[0-9-]+)?$zone2?$/i)  ||
-         ($iso && /^[0-9-]+(T[0-9-]+)?$zone?$/i)  ||
-         ($iso && /^[0-9-]+(T[0-9-]+)?$zone2?$/i)  ||
+    if ( ($iso && /^([0-9-]+(?:W[0-9-]+)?)$zone?$/i)   ||
+         ($iso && /^([0-9-]+(?:W[0-9-]+)?)$zone2?$/i)  ||
+         ($iso && /^([0-9-]+(?:T[0-9-]+)?)$zone?$/i)   ||
+         ($iso && /^([0-9-]+(?:T[0-9-]+)?)$zone2?$/i)  ||
          0) {
 
       # ISO 8601 dates
+      ($_,$z,$z2) = ($1,$2);
       s,-, ,g;            # Change all ISO8601 seps to spaces
       s/^\s+//;
       s/\s+$//;
 
-      if (/^$D4\s*$DD\s*$DD\s*t?$DD(?:$DD(?:$DD\d*)?)?$zone2?$/i  ||
-          /^$D4\s*$DD\s*$DD\s*t?$DD(?:$DD(?:$DD\d*)?)?$zone?()$/i ||
-          /^$DD\s+$DD\s*$DD\s*t?$DD(?:$DD(?:$DD\d*)?)?$zone2?$/i  ||
-          /^$DD\s+$DD\s*$DD\s*t?$DD(?:$DD(?:$DD\d*)?)?$zone?()$/i ||
+      if (/^$D4\s*$DD\s*$DD\s*t?$DD(?:$DD(?:$DD(\d*))?)?$/i ||
+          /^$DD\s+$DD\s*$DD\s*t?$DD(?:$DD(?:$DD(\d*))?)?$/i ||
           0
          ) {
         # ISO 8601 Dates with times
-        #    YYYYMMDDHHMNSSFFFF
+        #    YYYYMMDDHHMNSSFFFF...
         #    YYYYMMDDHHMNSS
         #    YYYYMMDDHHMN
         #    YYYYMMDDHH
-        #    YY MMDDHHMNSSFFFF
+        #    YY MMDDHHMNSSFFFF...
         #    YY MMDDHHMNSS
         #    YY MMDDHHMN
         #    YY MMDDHH
-        ($y,$m,$d,$h,$mn,$s,$tmp,$z2)=($1,$2,$3,$4,$5,$6,$7,$8);
+        ($y,$m,$d,$h,$mn,$s,$tmp)=($1,$2,$3,$4,$5,$6,$7);
         if ($h==24 && (! defined $mn || $mn==0) && (! defined $s || $s==0)) {
           $h=0;
           $midnight=1;
         }
-        $z=""    if (! $h);
-        return ""  if ($tmp  and  $z);
-        $z=$tmp    if ($tmp  and  $tmp);
-        return ""  if ($time);
+        $z = ""    if (! defined $h);
+        return ""  if ($time  &&  defined $h);
         last PARSE;
 
       } elsif (/^$D4(?:\s*$DD(?:\s*$DD)?)?$/  ||
@@ -1220,9 +1249,9 @@
         $m=$Curr{"M"};
         last PARSE;
       }
-      $tmp=lc($2);
-      $tmp=$dom{"$tmp"};
-      s/(^|[^a-z])$dom($|[^a-z])/$1 $tmp $3/i;
+      my $from = $2;
+      my $to   = $dom{ lc($from) };
+      s/(^|[^a-z])$from($|[^a-z])/$1 $to $2/i;
       s/^\s+//;
       s/\s+$//;
     }
@@ -1232,11 +1261,12 @@
       # 22nd sunday in 1996
       ($which,$dofw,$y)=($1,$2,$3);
       $y=$Curr{"Y"}  if (! $y);
-      $tmp=&Date_GetNext("$y-01-01",$dofw,0);
+      $y--; # previous year
+      $tmp=&Date_GetNext("$y-12-31",$dofw,0);
       if ($which>1) {
         $tmp=&DateCalc_DateDelta($tmp,"+0:0:".($which-1).":0:0:0:0",\$err,0);
       }
-      ($y,$m,$d)=(&Date_Split($tmp))[0..2];
+      ($y,$m,$d)=(&Date_Split($tmp, 1))[0..2];
       last PARSE;
     } elsif (/^$week$wkabb\s*$D(?:$of?\s*$YY)?$/i  ||
              /^$week\s*$D$wkabb(?:$of?\s*$YY)?$/i) {
@@ -1527,7 +1557,9 @@
   my($workweek)=$Cnf{"WorkWeekEnd"}-$Cnf{"WorkWeekBeg"}+1;
 
   &Date_Init()  if (! $Curr{"InitDone"});
-  my($signexp)='([+-]?)';
+  # A sign can be a sequence of zero or more + and - signs, this
+  # allows for deltas like '+ -2 days'.
+  my($signexp)='((?:[+-]\s*)*)';
   my($numexp)='(\d+)';
   my($exp1)="(?: \\s* $signexp \\s* $numexp \\s*)";
   my($yexp,$mexp,$wexp,$dexp,$hexp,$mnexp,$sexp,$i)=();
@@ -1638,6 +1670,16 @@
         $val=$2   if ($2);
         $sign=$1  if ($1);
       }
+
+      # Collapse a sign like '+ -' into a single character like '-',
+      # by counting the occurrences of '-'.
+      #
+      $sign =~ s/\s+//g;
+      $sign =~ tr/+//d;
+      my $count = ($sign =~ tr/-//d);
+      die "bad characters in sign: $sign" if length $sign;
+      $sign = $count % 2 ? '-' : '+';
+
       push(@delta,"$sign$val");
     }
     if (! /^\s*$/) {
@@ -1684,7 +1726,7 @@
   return  if (! $date);
 
   my($y,$m,$d,$h,$mn,$s)=($f{"Y"},$f{"m"},$f{"d"},$f{"H"},$f{"M"},$f{"S"})=
-    &Date_Split($date);
+    &Date_Split($date, 1);
   $f{"y"}=substr $f{"Y"},2;
   &Date_Init()  if (! $Curr{"InitDone"});
 
@@ -1779,7 +1821,7 @@
   $f{"s"}=&Date_SecsSince1970GMT($m,$d,$y,$h,$mn,$s);
   $f{"Z"}=($Cnf{"ConvTZ"} eq "IGNORE" or $Cnf{"ConvTZ"} eq "") ?
            $Cnf{"TZ"} : $Cnf{"ConvTZ"};
-  $f{"z"}=($Zone{"n2o"}{lc $f{"Z"}} || "");
+  $f{"z"}=($f{"Z"}=~/^[+-]\d{4}/) ? $f{"Z"} : ($Zone{"n2o"}{lc $f{"Z"}} || "");
 
   # date, time
   $f{"c"}=qq|$f{"a"} $f{"b"} $f{"e"} $h:$mn:$s $y|;
@@ -1876,17 +1918,23 @@
   }
 
   # Length of each unit in seconds
-  my($sl,$ml,$hl,$dl,$wl)=();
+  my($sl,$ml,$hl,$dl,$wl,$yl)=();
   $sl = 1;
   $ml = $sl*60;
   $hl = $ml*60;
   $dl = $hl*24;
   $wl = $dl*7;
+  $yl = $dl*365.25;
 
   # The decimal amount of each unit contained in all smaller units
   my($yd,$Md,$sd,$md,$hd,$dd,$wd)=();
-  $yd = $M/12;
-  $Md = 0;
+  if ($M) {
+    $yd = $M/12;
+    $Md = 0;
+  } else {
+    $yd = ($w*$wl + $d*$dl + $h*$hl + $m*$ml + $s*$sl)/$yl;
+    $Md = 0;
+  }
 
   $wd = ($d*$dl + $h*$hl + $m*$ml + $s*$sl)/$wl;
   $dd =          ($h*$hl + $m*$ml + $s*$sl)/$dl;
@@ -1897,10 +1945,17 @@
   # The amount of each unit contained in higher units.
   my($yh,$Mh,$sh,$mh,$hh,$dh,$wh)=();
   $yh = 0;
-  $Mh = ($yh+$y)*12;
 
-  $wh = 0;
-  $dh = ($wh+$w)*7;
+  if ($M) {
+    $Mh = ($yh+$y)*12;
+    $wh = 0;
+    $dh = ($wh+$w)*7;
+  } else {
+    $Mh = 0;
+    $wh = ($yh+$y)*365.25/7;
+    $dh = ($yh+$y)*365.25 + $w*7;
+  }
+
   $hh = ($dh+$d)*24;
   $mh = ($hh+$h)*60;
   $sh = ($mh+$m)*60;
@@ -2145,8 +2200,9 @@
         @recur0=(0,1);
         @recur1=($num,$d,0,0,0);
 
-      } elsif (/^$D$wkexp(?:$of$mmm?$Y)?$/i ||
-               /^$D$wkexp(?:$of$mmm())?$/i) {
+      } elsif (/^$D?$wkexp(?:$of$mmm?$Y)?$/i ||
+               /^$D?$wkexp(?:$of$mmm())?$/i) {
+        # every tuesday in june 1997
         # every 2nd tuesday in june 1997
         ($num,$d,$m,$y)=($1,$2,$3,$4);
         $y=$Curr{"Y"}  if (! $y);
@@ -2421,9 +2477,9 @@
         @d=sort { $a<=>$b } (@d);
 
         # We need to find years that are a multiple of $n from $y(base)
-        ($y0)=( &Date_Split($date0) )[0];
-        ($y1)=( &Date_Split($date1) )[0];
-        ($yb)=( &Date_Split($dateb) )[0];
+        ($y0)=( &Date_Split($date0, 1) )[0];
+        ($y1)=( &Date_Split($date1, 1) )[0];
+        ($yb)=( &Date_Split($dateb, 1) )[0];
         @date=();
         for ($yy=$y0; $yy<=$y1; $yy++) {
           if (($yy-$yb)%$n == 0) {
@@ -2449,9 +2505,9 @@
           @d=&ReturnList($d);
         }
 
-        ($y0)=( &Date_Split($date0) )[0];
-        ($y1)=( &Date_Split($date1) )[0];
-        ($yb)=( &Date_Split($dateb) )[0];
+        ($y0)=( &Date_Split($date0, 1) )[0];
+        ($y1)=( &Date_Split($date1, 1) )[0];
+        ($yb)=( &Date_Split($dateb, 1) )[0];
         @y=();
         for ($yy=$y0; $yy<=$y1; $yy++) {
           if (($yy-$yb)%$n == 0) {
@@ -2497,9 +2553,9 @@
         }
 
         # We need to find years that are a multiple of $n from $y(base)
-        ($y0)=( &Date_Split($date0) )[0];
-        ($y1)=( &Date_Split($date1) )[0];
-        ($yb)=( &Date_Split($dateb) )[0];
+        ($y0)=( &Date_Split($date0, 1) )[0];
+        ($y1)=( &Date_Split($date1, 1) )[0];
+        ($yb)=( &Date_Split($dateb, 1) )[0];
         @date=();
         for ($yy=$y0; $yy<=$y1; $yy++) {
           if (($yy-$yb)%$n == 0) {
@@ -2561,9 +2617,9 @@
         @d=sort { $a<=>$b } (@d);
 
         # We need to find years that are a multiple of $n from $y(base)
-        ($y0)=( &Date_Split($date0) )[0];
-        ($y1)=( &Date_Split($date1) )[0];
-        ($yb)=( &Date_Split($dateb) )[0];
+        ($y0)=( &Date_Split($date0, 1) )[0];
+        ($y1)=( &Date_Split($date1, 1) )[0];
+        ($yb)=( &Date_Split($dateb, 1) )[0];
         @date=();
         for ($yy=$y0; $yy<=$y1; $yy++) {
           if (($yy-$yb)%$n == 0) {
@@ -2589,7 +2645,7 @@
         }
 
         # Find out what DofW the basedate is.
-        @tmp2=&Date_Split($dateb);
+        @tmp2=&Date_Split($dateb, 1);
         $tmp=&Date_DayOfWeek($tmp2[1],$tmp2[2],$tmp2[0]);
 
         @date=();
@@ -2627,7 +2683,7 @@
         @tmp2=&Date_Recur($date0,$date1,$dateb,$delta);
         @date=();
         foreach $date (@tmp2) {
-          ($y,$m)=( &Date_Split($date) )[0..1];
+          ($y,$m)=( &Date_Split($date, 1) )[0..1];
           $tmp2=&Date_DaysInMonth($m,$y);
           foreach $d (@d) {
             $d2=$d;
@@ -2754,7 +2810,7 @@
       if ($f eq "EASTER") {
         @tmp=();
         foreach $date (@date) {
-          ($y,$m,$d,$h,$mn,$s)=&Date_Split($date);
+          ($y,$m,$d,$h,$mn,$s)=&Date_Split($date, 1);
           ($m,$d)=&Date_Easter($y);
           $date=&Date_Join($y,$m,$d,$h,$mn,$s);
           next  if (&Date_Cmp($date,$date0)<0  ||
@@ -2784,7 +2840,7 @@
     return ""  if (! $date);
   }
   $curr=$date;
-  ($y,$m,$d)=( &Date_Split($date) )[0..2];
+  ($y,$m,$d)=( &Date_Split($date, 1) )[0..2];
 
   if ($dow) {
     $curr_dow=&Date_DayOfWeek($m,$d,$y);
@@ -2808,7 +2864,7 @@
       if ($adjust  &&  &Date_Cmp($date,$curr)>0);
 
   } else {
-    ($h,$mn,$s)=( &Date_Split($date) )[3..5];
+    ($h,$mn,$s)=( &Date_Split($date, 1) )[3..5];
     ($th,$tm,$ts)=&Date_ParseTime($hr,$min,$sec);
     if ($hr) {
       ($hr,$min,$sec)=($th,$tm,$ts);
@@ -2849,7 +2905,7 @@
     return ""  if (! $date);
   }
   $curr=$date;
-  ($y,$m,$d)=( &Date_Split($date) )[0..2];
+  ($y,$m,$d)=( &Date_Split($date, 1) )[0..2];
 
   if ($dow) {
     $curr_dow=&Date_DayOfWeek($m,$d,$y);
@@ -2873,7 +2929,7 @@
       if ($adjust  &&  &Date_Cmp($date,$curr)<0);
 
   } else {
-    ($h,$mn,$s)=( &Date_Split($date) )[3..5];
+    ($h,$mn,$s)=( &Date_Split($date, 1) )[3..5];
     ($th,$tm,$ts)=&Date_ParseTime($hr,$min,$sec);
     if ($hr) {
       ($hr,$min,$sec)=($th,$tm,$ts);
@@ -2907,7 +2963,7 @@
   $date=&ParseDateString($date);
   return undef  if (! $date);
   $date=&Date_SetTime($date,0,0,0);
-  my($y)=(&Date_Split($date))[0];
+  my($y)=(&Date_Split($date, 1))[0];
   &Date_UpdateHolidays($y)  if (! exists $Holiday{"dates"}{$y});
   return undef  if (! exists $Holiday{"dates"}{$y}{$date});
   my($name)=$Holiday{"dates"}{$y}{$date};
@@ -2941,7 +2997,7 @@
     $date0=&Date_SetTime($date0,"00:00:00");
     $date1=&DateCalc_DateDelta($date0,"+0:0:0:1:0:0:0");
   }
-    
+
   $tmp=&Events_Calc($date0,$date1);
 
   $flag=$args[2];
@@ -2965,7 +3021,7 @@
       }
     }
     return \%ret;
-    
+
   } elsif ($flag==2) {
     while ($#tmp>0) {
       ($date0,$tmp)=splice(@tmp,0,2);
@@ -3001,7 +3057,7 @@
     return ""  if (! $date);
   }
 
-  ($y,$m,$d)=( &Date_Split($date) )[0..2];
+  ($y,$m,$d)=( &Date_Split($date, 1) )[0..2];
   ($h,$mn,$s)=&Date_ParseTime($h,$mn,$s);
 
   my($ampm,$wk);
@@ -3020,7 +3076,7 @@
   if (! $y) {
     $date=&ParseDateString($date);
     return "" if (! $date);
-    ($y,$m,$d,$h,$mn,$s)=&Date_Split($date);
+    ($y,$m,$d,$h,$mn,$s)=&Date_Split($date, 1);
   }
 
   if      (lc($field) eq "y") {
@@ -3207,6 +3263,10 @@
 sub Date_ConvTZ {
   print "DEBUG: Date_ConvTZ\n"  if ($Curr{"Debug"} =~ /trace/);
   my($date,$from,$to)=@_;
+  if (not Date_Split($date)) {
+      croak "date passed in ('$date') is not a Date::Manip object";
+  }
+
   &Date_Init()  if (! $Curr{"InitDone"});
   my($gmt)=();
 
@@ -3248,7 +3308,7 @@
 
   my($s1,$h1,$m1,$s2,$h2,$m2,$d,$h,$m,$sign,$delta,$err,$yr,$mon,$sec)=();
   # We're going to try to do the calculation without calling DateCalc.
-  ($yr,$mon,$d,$h,$m,$sec)=&Date_Split($date);
+  ($yr,$mon,$d,$h,$m,$sec)=&Date_Split($date, 1);
 
   # Convert $date from $from to GMT
   $from=~/([+-])(\d{2})(\d{2})/;
@@ -3306,7 +3366,15 @@
   # Get timezones from all of the relevant places
 
   push(@tz,$Cnf{"TZ"})  if (defined $Cnf{"TZ"});  # TZ config var
-  push(@tz,$ENV{"TZ"})  if (exists $ENV{"TZ"});   # TZ environ var
+  push(@tz,$ENV{"TZ"})  if (defined $ENV{"TZ"});  # TZ environ var
+  push(@tz,$ENV{'SYS$TIMEZONE_RULE'})
+    if defined $ENV{'SYS$TIMEZONE_RULE'};         # VMS TZ environ var
+  push(@tz,$ENV{'SYS$TIMEZONE_NAME'})
+    if defined $ENV{'SYS$TIMEZONE_NAME'};         # VMS TZ name environ var
+  push(@tz,$ENV{'UCX$TZ'})
+    if defined $ENV{'UCX$TZ'};                    # VMS TZ environ var
+  push(@tz,$ENV{'TCPIP$TZ'})
+    if defined $ENV{'TCPIP$TZ'};                  # VMS TZ environ var
 
   # The `date` command... if we're doing taint checking, we need to
   # always call it with a full path... otherwise, use the user's path.
@@ -3319,28 +3387,42 @@
   # Thu Aug 31 14:57:46 EDT 2000
 
   unless (($^X =~ /perl\.exe$/i) or
-          $OS eq "Windows") {
+          ($OS eq "Windows") or
+          ($OS eq "Netware") or
+          ($OS eq "VMS")) {
     if ($Date::Manip::NoTaint) {
+      if ($OS eq "VMS") {
+        $tz=$ENV{'SYS$TIMEZONE_NAME'};
+        if (! $tz) {
+          $tz=$ENV{'MULTINET_TIMEZONE'};
+          if (! $tz) {
+            $tz=$ENV{'SYS$TIMEZONE_DIFFERENTIAL'}/3600.; # e.g. '-4' for EDT
+          }
+        }
+      } else {
+        $tz=`date +%Z 2> /dev/null`;
+        chomp($tz);
+        if (! $tz) {
+          $tz=`date 2> /dev/null`;
+          chomp($tz);
+          $tz=(split(/\s+/,$tz))[4];
+        }
+      }
+      push(@tz,$tz);
+    } else {
+      # We need to satisfy taint checking, but also look in all the
+      # directories in @DatePath.
+      #
+      local $ENV{PATH} = join(':', @Date::Manip::DatePath);
+      local $ENV{BASH_ENV} = '';
       $tz=`date +%Z 2> /dev/null`;
       chomp($tz);
       if (! $tz) {
-         $tz=`date 2> /dev/null`;
-         chomp($tz);
-         $tz=(split(/\s+/,$tz))[4];
+	$tz=`date 2> /dev/null`;
+	chomp($tz);
+	$tz=(split(/\s+/,$tz))[4];
       }
       push(@tz,$tz);
-    } else {
-      foreach my $dir (@Date::Manip::DatePath) {
-        next  if (! -x "$dir/date");
-        $tz=`$dir/date +%Z 2> /dev/null`;
-        chomp($tz);
-        if (! $tz) {
-           $tz=`$dir/date 2> /dev/null`;
-           chomp($tz);
-           $tz=(split(/\s+/,$tz))[4];
-        }
-        push(@tz,$tz);
-      }
     }
   }
 
@@ -3366,7 +3448,7 @@
       $tmp=<$in>;
       next  if ($tmp =~ /^\s*\043/);
       chomp($tmp);
-      if ($tz =~ /^\s*(.*?)\s*$/) {
+      if ($tmp =~ /^\s*(.*?)\s*$/) {
         push(@tz,$1);
         last;
       }
@@ -3376,8 +3458,20 @@
 
   # Now parse each one to find the first valid one.
   foreach $tz (@tz) {
+    $tz =~ s/\s*$//;
+    $tz =~ s/^\s*//;
+    next  if (! $tz);
+
     return uc($tz)
-      if (defined $Zone{"n2o"}{lc($tz)} or $tz=~/^[+-]\d{4}/);
+      if (defined $Zone{"n2o"}{lc($tz)});
+
+    if ($tz =~ /^[+-]\d{4}$/) {
+      return $tz;
+    } elsif ($tz =~ /^([+-]\d{2})(?::(\d{2}))?$/) {
+      my($h,$m)=($1,$2);
+      $m="00"  if (! $m);
+      return "$h$m";
+    }
 
     # Handle US/Eastern format
     if ($tz =~ /^$Zone{"tzones"}$/i) {
@@ -3414,7 +3508,7 @@
   $d=&Date_SetTime($date,$Cnf{"WorkDayBeg"})  if (! $time);
 
   my($y,$mon,$day,$tmp,$h,$m,$dow)=();
-  ($y,$mon,$day,$h,$m,$tmp)=&Date_Split($d);
+  ($y,$mon,$day,$h,$m,$tmp)=&Date_Split($d, 1);
   $dow=&Date_DayOfWeek($mon,$day,$y);
 
   return 0  if ($dow<$Cnf{"WorkWeekBeg"} or
@@ -4075,6 +4169,9 @@
 # No check as to validity is made.
 sub Date_Join {
   print "DEBUG: Date_Join\n"  if ($Curr{"Debug"} =~ /trace/);
+  foreach (0 .. $#_) {
+      croak "undefined arg $_ to Date_Join()" if not defined $_[$_];
+  }
   my($y,$m,$d,$h,$mn,$s)=@_;
   my($ym,$md,$dh,$hmn,$mns)=();
 
@@ -4158,9 +4255,15 @@
 
 # This checks a date.  If it is valid, it splits it and returns the elements.
 # If no date is passed in, it returns a regular expression for the date.
+#
+# The optional second argument says 'I really expect this to be a
+# valid Date::Manip object, please throw an exception if it is
+# not'.  Otherwise, errors are signalled by returning ().
+#
 sub Date_Split {
   print "DEBUG: Date_Split\n"  if ($Curr{"Debug"} =~ /trace/);
-  my($date)=@_;
+  my($date, $definitely_valid)=@_;
+  $definitely_valid = 0 if not defined $definitely_valid;
   my($ym,$md,$dh,$hmn,$mns)=();
   my($y)='(\d{4})';
   my($m)='(0[1-9]|1[0-2])';
@@ -4186,15 +4289,35 @@
   }
 
   my($t)="^$y$ym$m$md$d$dh$h$hmn$mn$mns$s\$";
-  return $t  if ($date eq "");
+
+  if (not defined $date or $date eq '') {
+      if ($definitely_valid) {
+	  die "bad date '$date'";
+      } else {
+	  return $t;
+      }
+  }
 
   if ($date =~ /$t/) {
     ($y,$m,$d,$h,$mn,$s)=($1,$2,$3,$4,$5,$6);
     my(@d_in_m)=(0,31,28,31,30,31,30,31,31,30,31,30,31);
     $d_in_m[2]=29  if (&Date_LeapYear($y));
-    return ()  if ($d>$d_in_m[$m]);
+    if ($d>$d_in_m[$m]) {
+	my $msg = "invalid date $date: day $d of month $m, but only $d_in_m[$m] days in that month";
+	if ($definitely_valid) {
+	    die $msg;
+	}
+	else {
+	    warn $msg;
+	    return ();
+	}
+    }
     return ($y,$m,$d,$h,$mn,$s);
   }
+
+  if ($definitely_valid) {
+      die "invalid date $date: doesn't match regexp $t";
+  }
   return ();
 }
 
@@ -4460,8 +4583,8 @@
 
   # Exact mode
   if ($mode==0) {
-    my($y1,$m1,$d1,$h1,$mn1,$s1)=&Date_Split($D1);
-    my($y2,$m2,$d2,$h2,$mn2,$s2)=&Date_Split($D2);
+    my($y1,$m1,$d1,$h1,$mn1,$s1)=&Date_Split($D1, 1);
+    my($y2,$m2,$d2,$h2,$mn2,$s2)=&Date_Split($D2, 1);
     my($i,adelta,$d,$delta,$y)=();
 
     # form the delta for hour/min/sec
@@ -4523,8 +4646,8 @@
     return "+0:0:0:0:0:0:0";
   }
 
-  my($y1,$m1,$d1,$h1,$mn1,$s1)=&Date_Split($date1);
-  my($y2,$m2,$d2,$h2,$mn2,$s2)=&Date_Split($date2);
+  my($y1,$m1,$d1,$h1,$mn1,$s1)=&Date_Split($date1, 1);
+  my($y2,$m2,$d2,$h2,$mn2,$s2)=&Date_Split($date2, 1);
   my($dy,$dm,$dw,$dd,$dh,$dmn,$ds,$ddd)=(0,0,0,0,0,0,0,0);
 
   if ($mode != 3) {
@@ -4580,7 +4703,7 @@
     }
 
   } else {
-    ($y1,$m1,$d1)=( &Date_Split($date1) )[0..2];
+    ($y1,$m1,$d1)=( &Date_Split($date1, 1) )[0..2];
     $dd=0;
     # If we're jumping across months, set $d1 to the first of the next month
     # (or possibly the 0th of next month which is equivalent to the last day
@@ -4613,7 +4736,7 @@
 
   # in business mode, make sure h1 comes before h2 (if not find delta between
   # now and end of day and move to start of next business day)
-  $d1=( &Date_Split($date1) )[2];
+  $d1=( &Date_Split($date1, 1) )[2];
   $dh=$dmn=$ds=0;
   if ($mode==2 || $mode==3  and  $d1 != $d2) {
     $tmp=&Date_SetTime($date1,$Cnf{"WorkDayEnd"});
@@ -4623,7 +4746,7 @@
     ($tmp,$tmp,$tmp,$tmp,$dh,$dmn,$ds)=&Delta_Split($tmp);
     $date1=&Date_NextWorkDay($date1,1,0);
     $date1=&Date_SetTime($date1,$Cnf{"WorkDayBeg"});
-    $d1=( &Date_Split($date1) )[2];
+    $d1=( &Date_Split($date1, 1) )[2];
     confess "ERROR: DateCalc DateDate Business.\n"  if ($d1 != $d2);
   }
 
@@ -4678,11 +4801,14 @@
   }
 
   # Date, delta
-  my($y,$m,$d,$h,$mn,$s)=&Date_Split($D1);
+  my($y,$m,$d,$h,$mn,$s)=&Date_Split($D1, 1);
   my($dy,$dm,$dw,$dd,$dh,$dmn,$ds)=&Delta_Split($D2);
 
   # do the month/year part
   $y+=$dy;
+  while (length($y)<4) {
+    $y = "0$y";
+  }
   &ModuloAddition(-12,$dm,\$m,\$y);   # -12 means 1-12 instead of 0-11
   $d_in_m[2]=29  if (&Date_LeapYear($y));
 
@@ -4698,7 +4824,7 @@
   } else {
     $date=&DateCalc_DateDelta(&Date_Join($y,$m,$d,$h,$mn,$s),
                               "+0:0:$dw:0:0:0:0",0);
-    ($y,$m,$d,$h,$mn,$s)=&Date_Split($date);
+    ($y,$m,$d,$h,$mn,$s)=&Date_Split($date, 1);
   }
 
   # in business mode, set the day to a work day at this point so the h/mn/s
@@ -4706,7 +4832,7 @@
   if ($mode==2 || $mode==3) {
     $d=$d_in_m[$m] if ($d>$d_in_m[$m]);
     $date=&Date_NextWorkDay(&Date_Join($y,$m,$d,$h,$mn,$s),0,1);
-    ($y,$m,$d,$h,$mn,$s)=&Date_Split($date);
+    ($y,$m,$d,$h,$mn,$s)=&Date_Split($date, 1);
   }
 
   # seconds, minutes, hours
@@ -4724,7 +4850,7 @@
         $dd++;
 
       } elsif ($h<$h1  or  $h==$h1 && $mn<$m1) {
-        $dh=$h1-$h;
+        $dh=$h-$h1;
         $dmn=$m1-$mn;
         $h=$h2;
         $mn=$m2;
@@ -4759,7 +4885,7 @@
     } else {
       $date=&Date_PrevWorkDay(&Date_Join($y,$m,$d,$h,$mn,$s),-$dd,1);
     }
-    ($y,$m,$d,$h,$mn,$s)=&Date_Split($date);
+    ($y,$m,$d,$h,$mn,$s)=&Date_Split($date, 1);
 
   } else {
     $d_in_m[2]=29  if (&Date_LeapYear($y));
@@ -5345,7 +5471,7 @@
   $date=&Date_GetNext($date,$dow,1)  if ($dow ne "");
 
   if ($flag) {
-    ($tmp)=&Date_Split($date);
+    ($tmp)=&Date_Split($date, 1);
     $n++  if ($tmp != $y);
   }
 
@@ -5354,7 +5480,7 @@
   } elsif ($n==0) {
     $date=&DateCalc_DateDelta($date,"-0:0:1:0:0:0:0",\$err,0);
   }
-  ($y,$m,$d)=&Date_Split($date);
+  ($y,$m,$d)=&Date_Split($date, 1);
   ($y,$m,$d);
 }
 
@@ -5375,16 +5501,17 @@
   #     U`    00d9     u`    00f9
   #     W`    1e80     w`    1e81
   #     Y`    1ef2     y`    1ef3
-  $$hash{"A`"} = "\xc0";   #   À
-  $$hash{"E`"} = "\xc8";   #   È
-  $$hash{"I`"} = "\xcc";   #   Ì
-  $$hash{"O`"} = "\xd2";   #   Ò
-  $$hash{"U`"} = "\xd9";   #   Ù
-  $$hash{"a`"} = "\xe0";   #   à
-  $$hash{"e`"} = "\xe8";   #   è
-  $$hash{"i`"} = "\xec";   #   ì
-  $$hash{"o`"} = "\xf2";   #   ò
-  $$hash{"u`"} = "\xf9";   #   ù
+
+  $$hash{"A`"} = "\xc0";   #   LATIN CAPITAL LETTER A WITH GRAVE
+  $$hash{"E`"} = "\xc8";   #   LATIN CAPITAL LETTER E WITH GRAVE
+  $$hash{"I`"} = "\xcc";   #   LATIN CAPITAL LETTER I WITH GRAVE
+  $$hash{"O`"} = "\xd2";   #   LATIN CAPITAL LETTER O WITH GRAVE
+  $$hash{"U`"} = "\xd9";   #   LATIN CAPITAL LETTER U WITH GRAVE
+  $$hash{"a`"} = "\xe0";   #   LATIN SMALL LETTER A WITH GRAVE
+  $$hash{"e`"} = "\xe8";   #   LATIN SMALL LETTER E WITH GRAVE
+  $$hash{"i`"} = "\xec";   #   LATIN SMALL LETTER I WITH GRAVE
+  $$hash{"o`"} = "\xf2";   #   LATIN SMALL LETTER O WITH GRAVE
+  $$hash{"u`"} = "\xf9";   #   LATIN SMALL LETTER U WITH GRAVE
 
   #   acute '
   #     A'    00c1     a'    00e1
@@ -5401,18 +5528,18 @@
   #     Y'    00dd     y'    00fd
   #     Z'    0179     z'    017a
 
-  $$hash{"A'"} = "\xc1";   #   Á
-  $$hash{"E'"} = "\xc9";   #   É
-  $$hash{"I'"} = "\xcd";   #   Í
-  $$hash{"O'"} = "\xd3";   #   Ó
-  $$hash{"U'"} = "\xda";   #   Ú
-  $$hash{"Y'"} = "\xdd";   #   Ý
-  $$hash{"a'"} = "\xe1";   #   á
-  $$hash{"e'"} = "\xe9";   #   é
-  $$hash{"i'"} = "\xed";   #   í
-  $$hash{"o'"} = "\xf3";   #   ó
-  $$hash{"u'"} = "\xfa";   #   ú
-  $$hash{"y'"} = "\xfd";   #   ý
+  $$hash{"A'"} = "\xc1";   #   LATIN CAPITAL LETTER A WITH ACUTE
+  $$hash{"E'"} = "\xc9";   #   LATIN CAPITAL LETTER E WITH ACUTE
+  $$hash{"I'"} = "\xcd";   #   LATIN CAPITAL LETTER I WITH ACUTE
+  $$hash{"O'"} = "\xd3";   #   LATIN CAPITAL LETTER O WITH ACUTE
+  $$hash{"U'"} = "\xda";   #   LATIN CAPITAL LETTER U WITH ACUTE
+  $$hash{"Y'"} = "\xdd";   #   LATIN CAPITAL LETTER Y WITH ACUTE
+  $$hash{"a'"} = "\xe1";   #   LATIN SMALL LETTER A WITH ACUTE
+  $$hash{"e'"} = "\xe9";   #   LATIN SMALL LETTER E WITH ACUTE
+  $$hash{"i'"} = "\xed";   #   LATIN SMALL LETTER I WITH ACUTE
+  $$hash{"o'"} = "\xf3";   #   LATIN SMALL LETTER O WITH ACUTE
+  $$hash{"u'"} = "\xfa";   #   LATIN SMALL LETTER U WITH ACUTE
+  $$hash{"y'"} = "\xfd";   #   LATIN SMALL LETTER Y WITH ACUTE
 
   #   double acute "         "
   #     O"    0150     o"    0151
@@ -5432,16 +5559,16 @@
   #     W^    0174     w^    0175
   #     Y^    0176     y^    0177
 
-  $$hash{"A^"} = "\xc2";   #   Â
-  $$hash{"E^"} = "\xca";   #   Ê
-  $$hash{"I^"} = "\xce";   #   Î
-  $$hash{"O^"} = "\xd4";   #   Ô
-  $$hash{"U^"} = "\xdb";   #   Û
-  $$hash{"a^"} = "\xe2";   #   â
-  $$hash{"e^"} = "\xea";   #   ê
-  $$hash{"i^"} = "\xee";   #   î
-  $$hash{"o^"} = "\xf4";   #   ô
-  $$hash{"u^"} = "\xfb";   #   û
+  $$hash{"A^"} = "\xc2";   #   LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+  $$hash{"E^"} = "\xca";   #   LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+  $$hash{"I^"} = "\xce";   #   LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+  $$hash{"O^"} = "\xd4";   #   LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+  $$hash{"U^"} = "\xdb";   #   LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+  $$hash{"a^"} = "\xe2";   #   LATIN SMALL LETTER A WITH CIRCUMFLEX
+  $$hash{"e^"} = "\xea";   #   LATIN SMALL LETTER E WITH CIRCUMFLEX
+  $$hash{"i^"} = "\xee";   #   LATIN SMALL LETTER I WITH CIRCUMFLEX
+  $$hash{"o^"} = "\xf4";   #   LATIN SMALL LETTER O WITH CIRCUMFLEX
+  $$hash{"u^"} = "\xfb";   #   LATIN SMALL LETTER U WITH CIRCUMFLEX
 
   #   tilde ~
   #     A~    00c3    a~    00e3
@@ -5450,12 +5577,12 @@
   #     O~    00d5    o~    00f5
   #     U~    0168    u~    0169
 
-  $$hash{"A~"} = "\xc3";   #   Ã
-  $$hash{"N~"} = "\xd1";   #   Ñ
-  $$hash{"O~"} = "\xd5";   #   Õ
-  $$hash{"a~"} = "\xe3";   #   ã
-  $$hash{"n~"} = "\xf1";   #   ñ
-  $$hash{"o~"} = "\xf5";   #   õ
+  $$hash{"A~"} = "\xc3";   #   LATIN CAPITAL LETTER A WITH TILDE
+  $$hash{"N~"} = "\xd1";   #   LATIN CAPITAL LETTER N WITH TILDE
+  $$hash{"O~"} = "\xd5";   #   LATIN CAPITAL LETTER O WITH TILDE
+  $$hash{"a~"} = "\xe3";   #   LATIN SMALL LETTER A WITH TILDE
+  $$hash{"n~"} = "\xf1";   #   LATIN SMALL LETTER N WITH TILDE
+  $$hash{"o~"} = "\xf5";   #   LATIN SMALL LETTER O WITH TILDE
 
   #   macron -
   #     A-    0100    a-    0101
@@ -5485,17 +5612,17 @@
   #     W:    1e84    w:    1e85
   #     Y:    0178    y:    00ff
 
-  $$hash{"A:"} = "\xc4";   #   Ä
-  $$hash{"E:"} = "\xcb";   #   Ë
-  $$hash{"I:"} = "\xcf";   #   Ï
-  $$hash{"O:"} = "\xd6";   #   Ö
-  $$hash{"U:"} = "\xdc";   #   Ü
-  $$hash{"a:"} = "\xe4";   #   ä
-  $$hash{"e:"} = "\xeb";   #   ë
-  $$hash{"i:"} = "\xef";   #   ï
-  $$hash{"o:"} = "\xf6";   #   ö
-  $$hash{"u:"} = "\xfc";   #   ü
-  $$hash{"y:"} = "\xff";   #   ~
+  $$hash{"A:"} = "\xc4";   #   LATIN CAPITAL LETTER A WITH DIAERESIS
+  $$hash{"E:"} = "\xcb";   #   LATIN CAPITAL LETTER E WITH DIAERESIS
+  $$hash{"I:"} = "\xcf";   #   LATIN CAPITAL LETTER I WITH DIAERESIS
+  $$hash{"O:"} = "\xd6";   #   LATIN CAPITAL LETTER O WITH DIAERESIS
+  $$hash{"U:"} = "\xdc";   #   LATIN CAPITAL LETTER U WITH DIAERESIS
+  $$hash{"a:"} = "\xe4";   #   LATIN SMALL LETTER A WITH DIAERESIS
+  $$hash{"e:"} = "\xeb";   #   LATIN SMALL LETTER E WITH DIAERESIS
+  $$hash{"i:"} = "\xef";   #   LATIN SMALL LETTER I WITH DIAERESIS
+  $$hash{"o:"} = "\xf6";   #   LATIN SMALL LETTER O WITH DIAERESIS
+  $$hash{"u:"} = "\xfc";   #   LATIN SMALL LETTER U WITH DIAERESIS
+  $$hash{"y:"} = "\xff";   #   LATIN SMALL LETTER Y WITH DIAERESIS
 
   #   ring o
   #     U0    016e    u0    016f
@@ -5510,8 +5637,8 @@
   #     ,S    015e    ,s    015f
   #     ,T    0162    ,t    0163
 
-  $$hash{",C"} = "\xc7";   #   Ç
-  $$hash{",c"} = "\xe7";   #   ç
+  $$hash{",C"} = "\xc7";   #   LATIN CAPITAL LETTER C WITH CEDILLA
+  $$hash{",c"} = "\xe7";   #   LATIN SMALL LETTER C WITH CEDILLA
 
   #   ogonek ;  [squiggle down and right below the letter]
   #     A;    0104    a;    0105
@@ -5534,61 +5661,60 @@
 
   # Other characters
 
-
   # First character is below, 2nd character is above
-  $$hash{"||"} = "\xa6";   #   ¦
-  $$hash{" :"} = "\xa8";   #   ¨
-  $$hash{"-a"} = "\xaa";   #   ª
-  #$$hash{" -"}= "\xaf";   #   ¯   (narrow bar)
-  $$hash{" -"} = "\xad";   #   ­   (wide bar)
-  $$hash{" o"} = "\xb0";   #   °
-  $$hash{"-+"} = "\xb1";   #   ±
-  $$hash{" 1"} = "\xb9";   #   ¹
-  $$hash{" 2"} = "\xb2";   #   ²
-  $$hash{" 3"} = "\xb3";   #   ³
-  $$hash{" '"} = "\xb4";   #   ´
-  $$hash{"-o"} = "\xba";   #   º
-  $$hash{" ."} = "\xb7";   #   ·
-  $$hash{", "} = "\xb8";   #   ¸
-  $$hash{"Ao"} = "\xc5";   #   Å
-  $$hash{"ao"} = "\xe5";   #   å
-  $$hash{"ox"} = "\xf0";   #   ð
+  $$hash{"||"} = "\xa6";   #   BROKEN BAR
+  $$hash{" :"} = "\xa8";   #   DIAERESIS
+  $$hash{"-a"} = "\xaa";   #   FEMININE ORDINAL INDICATOR
+  #$$hash{" -"}= "\xaf";   #   MACRON   (narrow bar)
+  $$hash{" -"} = "\xad";   #   HYPHEN   (wide bar)
+  $$hash{" o"} = "\xb0";   #   DEGREE SIGN
+  $$hash{"-+"} = "\xb1";   #   PLUS\342\200\220MINUS SIGN
+  $$hash{" 1"} = "\xb9";   #   SUPERSCRIPT ONE
+  $$hash{" 2"} = "\xb2";   #   SUPERSCRIPT TWO
+  $$hash{" 3"} = "\xb3";   #   SUPERSCRIPT THREE
+  $$hash{" '"} = "\xb4";   #   ACUTE ACCENT
+  $$hash{"-o"} = "\xba";   #   MASCULINE ORDINAL INDICATOR
+  $$hash{" ."} = "\xb7";   #   MIDDLE DOT
+  $$hash{", "} = "\xb8";   #   CEDILLA
+  $$hash{"Ao"} = "\xc5";   #   LATIN CAPITAL LETTER A WITH RING ABOVE
+  $$hash{"ao"} = "\xe5";   #   LATIN SMALL LETTER A WITH RING ABOVE
+  $$hash{"ox"} = "\xf0";   #   LATIN SMALL LETTER ETH
 
   # upside down characters
 
-  $$hash{"ud!"} = "\xa1";  #   ¡
-  $$hash{"ud?"} = "\xbf";  #   ¿
+  $$hash{"ud!"} = "\xa1";  #   INVERTED EXCLAMATION MARK
+  $$hash{"ud?"} = "\xbf";  #   INVERTED QUESTION MARK
 
   # overlay characters
 
-  $$hash{"X o"} = "\xa4";  #   ¤
-  $$hash{"Y ="} = "\xa5";  #   ¥
-  $$hash{"S o"} = "\xa7";  #   §
-  $$hash{"O c"} = "\xa9";  #   ©    Copyright
-  $$hash{"O R"} = "\xae";  #   ®
-  $$hash{"D -"} = "\xd0";  #   Ð
-  $$hash{"O /"} = "\xd8";  #   Ø
-  $$hash{"o /"} = "\xf8";  #   ø
+  $$hash{"X o"} = "\xa4";  #   CURRENCY SIGN
+  $$hash{"Y ="} = "\xa5";  #   YEN SIGN
+  $$hash{"S o"} = "\xa7";  #   SECTION SIGN
+  $$hash{"O c"} = "\xa9";  #   COPYRIGHT SIGN    Copyright
+  $$hash{"O R"} = "\xae";  #   REGISTERED SIGN
+  $$hash{"D -"} = "\xd0";  #   LATIN CAPITAL LETTER ETH
+  $$hash{"O /"} = "\xd8";  #   LATIN CAPITAL LETTER O WITH STROKE
+  $$hash{"o /"} = "\xf8";  #   LATIN SMALL LETTER O WITH STROKE
 
   # special names
 
-  $$hash{"1/4"} = "\xbc";  #   ¼
-  $$hash{"1/2"} = "\xbd";  #   ½
-  $$hash{"3/4"} = "\xbe";  #   ¾
-  $$hash{"<<"}  = "\xab";  #   «
-  $$hash{">>"}  = "\xbb";  #   »
-  $$hash{"cent"}= "\xa2";  #   ¢
-  $$hash{"lb"}  = "\xa3";  #   £
-  $$hash{"mu"}  = "\xb5";  #   µ
-  $$hash{"beta"}= "\xdf";  #   ß
-  $$hash{"para"}= "\xb6";  #   ¶
-  $$hash{"-|"}  = "\xac";  #   ¬
-  $$hash{"AE"}  = "\xc6";  #   Æ
-  $$hash{"ae"}  = "\xe6";  #   æ
-  $$hash{"x"}   = "\xd7";  #   ×
-  $$hash{"P"}   = "\xde";  #   Þ
-  $$hash{"/"}   = "\xf7";  #   ÷
-  $$hash{"p"}   = "\xfe";  #   ~
+  $$hash{"1/4"} = "\xbc";  #   VULGAR FRACTION ONE QUARTER
+  $$hash{"1/2"} = "\xbd";  #   VULGAR FRACTION ONE HALF
+  $$hash{"3/4"} = "\xbe";  #   VULGAR FRACTION THREE QUARTERS
+  $$hash{"<<"}  = "\xab";  #   LEFT POINTING DOUBLE ANGLE QUOTATION MARK
+  $$hash{">>"}  = "\xbb";  #   RIGHT POINTING DOUBLE ANGLE QUOTATION MARK
+  $$hash{"cent"}= "\xa2";  #   CENT SIGN
+  $$hash{"lb"}  = "\xa3";  #   POUND SIGN
+  $$hash{"mu"}  = "\xb5";  #   MICRO SIGN
+  $$hash{"beta"}= "\xdf";  #   LATIN SMALL LETTER SHARP S
+  $$hash{"para"}= "\xb6";  #   PILCROW SIGN
+  $$hash{"-|"}  = "\xac";  #   NOT SIGN
+  $$hash{"AE"}  = "\xc6";  #   LATIN CAPITAL LETTER AE
+  $$hash{"ae"}  = "\xe6";  #   LATIN SMALL LETTER AE
+  $$hash{"x"}   = "\xd7";  #   MULTIPLICATION SIGN
+  $$hash{"P"}   = "\xde";  #   LATIN CAPITAL LETTER THORN
+  $$hash{"/"}   = "\xf7";  #   DIVISION SIGN
+  $$hash{"p"}   = "\xfe";  #   LATIN SMALL LETTER THORN
 }
 
 # $hashref = &Date_Init_LANGUAGE;
@@ -5689,7 +5815,8 @@
   $$d{"day_name"}=
     [["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]];
   $$d{"day_abb"}=
-    [["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]];
+    [["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],
+     ["",   "Tues","",  "Thur","",  "",   ""]];
   $$d{"day_char"}=
     [["M","T","W","Th","F","Sa","S"]];
 
@@ -5745,6 +5872,9 @@
 sub Date_Init_Italian {
   print "DEBUG: Date_Init_Italian\n"  if ($Curr{"Debug"} =~ /trace/);
   my($d)=@_;
+  my(%h)=();
+  &Char_8Bit(\%h);
+  my($i)=$h{"i'"};
 
   $$d{"month_name"}=
     [[qw(Gennaio Febbraio Marzo Aprile Maggio Giugno
@@ -5755,7 +5885,7 @@
 
   $$d{"day_name"}=
     [[qw(Lunedi Martedi Mercoledi Giovedi Venerdi Sabato Domenica)],
-     [qw(Lunedí Martedí Mercoledí Giovedí Venerdí)]];
+     [qw(Luned${i} Marted${i} Mercoled${i} Gioved${i} Venerd${i})]];
   $$d{"day_abb"}=
     [[qw(Lun Mar Mer Gio Ven Sab Dom)]];
   $$d{"day_char"}=
@@ -5821,13 +5951,13 @@
   $$d{"month_name"}=
     [["janvier","fevrier","mars","avril","mai","juin",
       "juillet","aout","septembre","octobre","novembre","decembre"],
-     ["janvier","f$e"."vrier","mars","avril","mai","juin",
-      "juillet","ao$u"."t","septembre","octobre","novembre","d$e"."cembre"]];
+     ["janvier","f${e}vrier","mars","avril","mai","juin",
+      "juillet","ao${u}t","septembre","octobre","novembre","d${e}cembre"]];
   $$d{"month_abb"}=
     [["jan","fev","mar","avr","mai","juin",
       "juil","aout","sept","oct","nov","dec"],
-     ["jan","f$e"."v","mar","avr","mai","juin",
-      "juil","ao$u"."t","sept","oct","nov","d$e"."c"]];
+     ["jan","f${e}v","mar","avr","mai","juin",
+      "juil","ao${u}t","sept","oct","nov","d${e}c"]];
 
   $$d{"day_name"}=
     [["lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"]];
@@ -5853,12 +5983,12 @@
   $$d{"last"}    =["dernier"];
   $$d{"each"}    =["chaque","tous les","toutes les"];
   $$d{"of"}      =["en","de"];
-  $$d{"at"}      =["a",$a."0"];
+  $$d{"at"}      =["a","${a}0"];
   $$d{"on"}      =["sur"];
   $$d{"future"}  =["en"];
   $$d{"past"}    =["il y a"];
   $$d{"next"}    =["suivant"];
-  $$d{"prev"}    =["precedent","pr$e"."c$e"."dent"];
+  $$d{"prev"}    =["precedent","pr${e}c${e}dent"];
   $$d{"later"}   =["plus tard"];
 
   $$d{"exact"}   =["exactement"];
@@ -5868,7 +5998,7 @@
   $$d{"offset"}  =["hier","-0:0:0:1:0:0:0","demain","+0:0:0:1:0:0:0"];
   $$d{"times"}   =["midi","12:00:00","minuit","00:00:00"];
 
-  $$d{"years"}   =["an","annee","ans","annees","ann$e"."e","ann$e"."es"];
+  $$d{"years"}   =["an","annee","ans","annees","ann${e}e","ann${e}es"];
   $$d{"months"}  =["mois"];
   $$d{"weeks"}   =["sem","semaine"];
   $$d{"days"}    =["j","jour","jours"];
@@ -5888,6 +6018,12 @@
 sub Date_Init_Romanian {
   print "DEBUG: Date_Init_Romanian\n"  if ($Curr{"Debug"} =~ /trace/);
   my($d)=@_;
+  my(%h)=();
+  &Char_8Bit(\%h);
+  my($p)=$h{"p"};
+  my($i)=$h{"i^"};
+  my($a)=$h{"a~"};
+  my($o)=$h{"-o"};
 
   $$d{"month_name"}=
     [["ianuarie","februarie","martie","aprilie","mai","iunie",
@@ -5899,11 +6035,11 @@
 
   $$d{"day_name"}=
     [["luni","marti","miercuri","joi","vineri","simbata","duminica"],
-     ["luni","marþi","miercuri","joi","vineri","sîmbãtã",
-      "duminicã"]];
+     ["luni","mar${p}i","miercuri","joi","vineri","s${i}mb${a}t${a}",
+      "duminic${a}"]];
   $$d{"day_abb"}=
     [["lun","mar","mie","joi","vin","sim","dum"],
-     ["lun","mar","mie","joi","vin","sîm","dum"]];
+     ["lun","mar","mie","joi","vin","s${i}m","dum"]];
   $$d{"day_char"}=
     [["L","Ma","Mi","J","V","S","D"]];
 
@@ -5923,16 +6059,16 @@
       "a douazecisipatra","a douazecisicincea","a douazecisisasea",
       "a douazecisisaptea","a douazecisiopta","a douazecisinoua","a treizecea",
       "a treizecisiuna"],
-     ["prima","a doua","a treia","a patra","a cincea","a ºasea",
-      "a ºaptea","a opta","a noua","a zecea","a unsprezecea",
+     ["prima","a doua","a treia","a patra","a cincea","a ${o}asea",
+      "a ${o}aptea","a opta","a noua","a zecea","a unsprezecea",
       "a doisprezecea","a treisprezecea","a patrusprezecea","a cincisprezecea",
-      "a ºaiprezecea","a ºaptesprezecea","a optsprezecea",
-      "a nouãsprezecea","a douãzecea","a douãzeciºiuna",
-      "a douãzeciºidoua","a douãzeciºitreia",
-      "a douãzeciºipatra","a douãzeciºicincea",
-      "a douãzeciºiºasea","a douãzeciºiºaptea",
-      "a douãzeciºiopta","a douãzeciºinoua","a treizecea",
-      "a treizeciºiuna"],
+      "a ${o}aiprezecea","a ${o}aptesprezecea","a optsprezecea",
+      "a nou${a}sprezecea","a dou${a}zecea","a dou${a}zeci${o}iuna",
+      "a dou${a}zeci${o}idoua","a dou${a}zeci${o}itreia",
+      "a dou${a}zeci${o}ipatra","a dou${a}zeci${o}icincea",
+      "a dou${a}zeci${o}i${o}asea","a dou${a}zeci${o}i${o}aptea",
+      "a dou${a}zeci${o}iopta","a dou${a}zeci${o}inoua","a treizecea",
+      "a treizeci${o}iuna"],
      ["intii", "doi", "trei", "patru", "cinci", "sase", "sapte",
       "opt","noua","zece","unsprezece","doisprezece",
       "treisprezece","patrusprezece","cincisprezece","saiprezece",
@@ -5940,49 +6076,49 @@
       "douazecisiunu","douazecisidoi","douazecisitrei",
       "douazecisipatru","douazecisicinci","douazecisisase","douazecisisapte",
       "douazecisiopt","douazecisinoua","treizeci","treizecisiunu"],
-     ["întîi", "doi", "trei", "patru", "cinci", "ºase", "ºapte",
-      "opt","nouã","zece","unsprezece","doisprezece",
-      "treisprezece","patrusprezece","cincisprezece","ºaiprezece",
-      "ºaptesprezece","optsprezece","nouãsprezece","douãzeci",
-      "douãzeciºiunu","douãzeciºidoi","douãzeciºitrei",
-      "douãzecisipatru","douãzeciºicinci","douãzeciºiºase",
-      "douãzeciºiºapte","douãzeciºiopt",
-      "douãzeciºinouã","treizeci","treizeciºiunu"]];
+     ["${i}nt${i}i", "doi", "trei", "patru", "cinci", "${o}ase", "${o}apte",
+      "opt","nou${a}","zece","unsprezece","doisprezece",
+      "treisprezece","patrusprezece","cincisprezece","${o}aiprezece",
+      "${o}aptesprezece","optsprezece","nou${a}sprezece","dou${a}zeci",
+      "dou${a}zeci${o}iunu","dou${a}zeci${o}idoi","dou${a}zeci${o}itrei",
+      "dou${a}zecisipatru","dou${a}zeci${o}icinci","dou${a}zeci${o}i${o}ase",
+      "dou${a}zeci${o}i${o}apte","dou${a}zeci${o}iopt",
+      "dou${a}zeci${o}inou${a}","treizeci","treizeci${o}iunu"]];
 
-  $$d{"now"}     =["acum","azi","astazi","astãzi"];
+  $$d{"now"}     =["acum","azi","astazi","ast${a}zi"];
   $$d{"last"}    =["ultima"];
   $$d{"each"}    =["fiecare"];
   $$d{"of"}      =["din","in","n"];
   $$d{"at"}      =["la"];
   $$d{"on"}      =["on"];
-  $$d{"future"}  =["in","în"];
-  $$d{"past"}    =["in urma", "în urmã"];
-  $$d{"next"}    =["urmatoarea","urmãtoarea"];
+  $$d{"future"}  =["in","${i}n"];
+  $$d{"past"}    =["in urma", "${i}n urm${a}"];
+  $$d{"next"}    =["urmatoarea","urm${a}toarea"];
   $$d{"prev"}    =["precedenta","ultima"];
-  $$d{"later"}   =["mai tirziu", "mai tîrziu"];
+  $$d{"later"}   =["mai tirziu", "mai t${i}rziu"];
 
   $$d{"exact"}   =["exact"];
   $$d{"approx"}  =["aproximativ"];
-  $$d{"business"}=["de lucru","lucratoare","lucrãtoare"];
+  $$d{"business"}=["de lucru","lucratoare","lucr${a}toare"];
 
   $$d{"offset"}  =["ieri","-0:0:0:1:0:0:0",
                    "alaltaieri", "-0:0:0:2:0:0:0",
-                   "alaltãieri","-0:0:0:2:0:0:0",
+                   "alalt${a}ieri","-0:0:0:2:0:0:0",
                    "miine","+0:0:0:1:0:0:0",
-                   "mîine","+0:0:0:1:0:0:0",
+                   "m${i}ine","+0:0:0:1:0:0:0",
                    "poimiine","+0:0:0:2:0:0:0",
-                   "poimîine","+0:0:0:2:0:0:0"];
+                   "poim${i}ine","+0:0:0:2:0:0:0"];
   $$d{"times"}   =["amiaza","12:00:00",
-                   "amiazã","12:00:00",
+                   "amiaz${a}","12:00:00",
                    "miezul noptii","00:00:00",
-                   "miezul nopþii","00:00:00"];
+                   "miezul nop${p}ii","00:00:00"];
 
   $$d{"years"}   =["ani","an","a"];
-  $$d{"months"}  =["luni","luna","lunã","l"];
-  $$d{"weeks"}   =["saptamini","sãptãmîni","saptamina",
-                   "sãptãmîna","sapt","sãpt"];
+  $$d{"months"}  =["luni","luna","lun${a}","l"];
+  $$d{"weeks"}   =["saptamini","s${a}pt${a}m${i}ni","saptamina",
+                   "s${a}pt${a}m${i}na","sapt","s${a}pt"];
   $$d{"days"}    =["zile","zi","z"];
-  $$d{"hours"}   =["ore", "ora", "orã", "h"];
+  $$d{"hours"}   =["ore", "ora", "or${a}", "h"];
   $$d{"minutes"} =["minute","min","m"];
   $$d{"seconds"} =["secunde","sec",];
   $$d{"replace"} =["s","secunde"];
@@ -5998,6 +6134,11 @@
 sub Date_Init_Swedish {
   print "DEBUG: Date_Init_Swedish\n"  if ($Curr{"Debug"} =~ /trace/);
   my($d)=@_;
+  my(%h)=();
+  &Char_8Bit(\%h);
+  my($ao)=$h{"ao"};
+  my($o) =$h{"o:"};
+  my($a) =$h{"a:"};
 
   $$d{"month_name"}=
     [["Januari","Februari","Mars","April","Maj","Juni",
@@ -6008,11 +6149,11 @@
 
   $$d{"day_name"}=
     [["Mandag","Tisdag","Onsdag","Torsdag","Fredag","Lordag","Sondag"],
-     ["Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag",
-      "Söndag"]];
+     ["M${ao}ndag","Tisdag","Onsdag","Torsdag","Fredag","L${o}rdag",
+      "S${o}ndag"]];
   $$d{"day_abb"}=
     [["Man","Tis","Ons","Tor","Fre","Lor","Son"],
-     ["Mån","Tis","Ons","Tor","Fre","Lör","Sön"]];
+     ["M${ao}n","Tis","Ons","Tor","Fre","L${o}r","S${o}n"]];
   $$d{"day_char"}=
     [["M","Ti","O","To","F","L","S"]];
 
@@ -6028,36 +6169,36 @@
       "tjugoforsta","tjugoandra","tjugotredje","tjugofjarde","tjugofemte",
       "tjugosjatte","tjugosjunde","tjugoattonde","tjugonionde",
       "trettionde","trettioforsta"],
-     ["första","andra","tredje","fjärde","femte","sjätte","sjunde",
-      "åttonde","nionde","tionde","elfte","tolfte","trettonde","fjortonde",
+     ["f${o}rsta","andra","tredje","fj${a}rde","femte","sj${a}tte","sjunde",
+      "${ao}ttonde","nionde","tionde","elfte","tolfte","trettonde","fjortonde",
       "femtonde","sextonde","sjuttonde","artonde","nittonde","tjugonde",
-      "tjugoförsta","tjugoandra","tjugotredje","tjugofjärde","tjugofemte",
-      "tjugosjätte","tjugosjunde","tjugoåttonde","tjugonionde",
-      "trettionde","trettioförsta"]];
+      "tjugof${o}rsta","tjugoandra","tjugotredje","tjugofj${a}rde","tjugofemte",
+      "tjugosj${a}tte","tjugosjunde","tjugo${ao}ttonde","tjugonionde",
+      "trettionde","trettiof${o}rsta"]];
 
   $$d{"now"}     =["idag","nu"];
-  $$d{"last"}    =["forra","förra","senaste"];
+  $$d{"last"}    =["forra","f${o}rra","senaste"];
   $$d{"each"}    =["varje"];
   $$d{"of"}      =["om"];
   $$d{"at"}      =["kl","kl.","klockan"];
-  $$d{"on"}      =["pa","på"];
+  $$d{"on"}      =["pa","p${ao}"];
   $$d{"future"}  =["om"];
   $$d{"past"}    =["sedan"];
-  $$d{"next"}    =["nasta","nästa"];
-  $$d{"prev"}    =["forra","förra"];
+  $$d{"next"}    =["nasta","n${a}sta"];
+  $$d{"prev"}    =["forra","f${o}rra"];
   $$d{"later"}   =["senare"];
 
   $$d{"exact"}   =["exakt"];
-  $$d{"approx"}  =["ungefar","ungefär"];
+  $$d{"approx"}  =["ungefar","ungef${a}r"];
   $$d{"business"}=["arbetsdag","arbetsdagar"];
 
-  $$d{"offset"}  =["igår","-0:0:0:1:0:0:0","igar","-0:0:0:1:0:0:0",
+  $$d{"offset"}  =["ig${ao}r","-0:0:0:1:0:0:0","igar","-0:0:0:1:0:0:0",
                    "imorgon","+0:0:0:1:0:0:0"];
-  $$d{"times"}   =["mitt pa dagen","12:00:00","mitt på dagen","12:00:00",
+  $$d{"times"}   =["mitt pa dagen","12:00:00","mitt p${ao} dagen","12:00:00",
                    "midnatt","00:00:00"];
 
-  $$d{"years"}   =["ar","år"];
-  $$d{"months"}  =["man","manad","manader","mån","månad","månader"];
+  $$d{"years"}   =["ar","${ao}r"];
+  $$d{"months"}  =["man","manad","manader","m${ao}n","m${ao}nad","m${ao}nader"];
   $$d{"weeks"}   =["v","vecka","veckor"];
   $$d{"days"}    =["d","dag","dagar"];
   $$d{"hours"}   =["t","tim","timme","timmar"];
@@ -6086,12 +6227,12 @@
   $$d{"month_name"}=
     [["Januar","Februar","Maerz","April","Mai","Juni",
       "Juli","August","September","Oktober","November","Dezember"],
-    ["J$a"."nner","Februar","M$a"."rz","April","Mai","Juni",
+    ["J${a}nner","Februar","M${a}rz","April","Mai","Juni",
       "Juli","August","September","Oktober","November","Dezember"]];
   $$d{"month_abb"}=
     [["Jan","Feb","Mar","Apr","Mai","Jun",
       "Jul","Aug","Sep","Okt","Nov","Dez"],
-     ["J$a"."n","Feb","M$a"."r","Apr","Mai","Jun",
+     ["J${a}n","Feb","M${a}r","Apr","Mai","Jun",
       "Jul","Aug","Sep","Okt","Nov","Dez"]];
 
   $$d{"day_name"}=
@@ -6116,13 +6257,13 @@
       "vierundzwanzigste","funfundzwanzigste","sechundzwanzigste",
       "siebundzwanzigste","achtundzwanzigste","neunundzwanzigste",
       "dreibigste","einunddreibigste"],
-     ["erste","zweite","dritte","vierte","f$u"."nfte","sechste","siebente",
-      "achte","neunte","zehnte","elfte","zw$o"."lfte","dreizehnte",
-      "vierzehnte","f$u"."nfzehnte","sechzehnte","siebzehnte","achtzehnte",
+     ["erste","zweite","dritte","vierte","f${u}nfte","sechste","siebente",
+      "achte","neunte","zehnte","elfte","zw${o}lfte","dreizehnte",
+      "vierzehnte","f${u}nfzehnte","sechzehnte","siebzehnte","achtzehnte",
       "neunzehnte","zwanzigste","einundzwanzigste","zweiundzwanzigste",
-      "dreiundzwanzigste","vierundzwanzigste","f$u"."nfundzwanzigste",
+      "dreiundzwanzigste","vierundzwanzigste","f${u}nfundzwanzigste",
       "sechundzwanzigste","siebundzwanzigste","achtundzwanzigste",
-      "neunundzwanzigste","drei$b"."igste","einunddrei$b"."igste"],
+      "neunundzwanzigste","drei${b}igste","einunddrei${b}igste"],
     ["erster"]];
 
   $$d{"now"}     =["heute","jetzt"];
@@ -6133,12 +6274,12 @@
   $$d{"on"}      =["am"];
   $$d{"future"}  =["in"];
   $$d{"past"}    =["vor"];
-  $$d{"next"}    =["nachste","n$a"."chste","nachsten","n$a"."chsten"];
+  $$d{"next"}    =["nachste","n${a}chste","nachsten","n${a}chsten"];
   $$d{"prev"}    =["vorherigen","vorherige","letzte","letzten"];
-  $$d{"later"}   =["spater","sp$a"."ter"];
+  $$d{"later"}   =["spater","sp${a}ter"];
 
   $$d{"exact"}   =["genau"];
-  $$d{"approx"}  =["ungefahr","ungef$a"."hr"];
+  $$d{"approx"}  =["ungefahr","ungef${a}hr"];
   $$d{"business"}=["Arbeitstag"];
 
   $$d{"offset"}  =["gestern","-0:0:0:1:0:0:0","morgen","+0:0:0:1:0:0:0"];
@@ -6164,6 +6305,8 @@
 sub Date_Init_Dutch {
   print "DEBUG: Date_Init_Dutch\n"  if ($Curr{"Debug"} =~ /trace/);
   my($d)=@_;
+  my(%h)=();
+  &Char_8Bit(\%h);
 
   $$d{"month_name"}=
     [["januari","februari","maart","april","mei","juni","juli","augustus",
@@ -6173,12 +6316,13 @@
   $$d{"month_abb"}=
     [["jan","feb","maa","apr","mei","jun","jul",
       "aug","sep","oct","nov","dec"],
-     ["","","","","","","","","","okt"]];
+     ["","","mrt","","","","","","","okt"]];
   $$d{"day_name"}=
     [["maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag",
       "zondag"]];
   $$d{"day_abb"}=
-    [["ma","di","wo","do","vr","zat","zon"]];
+    [["ma","di","wo","do","vr","zat","zon"],
+     ["","","","","","za","zo"]];
   $$d{"day_char"}=
     [["M","D","W","D","V","Za","Zo"]];
 
@@ -6257,24 +6401,24 @@
     [["stycznia","luty","marca","kwietnia","maja","czerwca",
       "lipca","sierpnia","wrzesnia","pazdziernika","listopada","grudnia"],
      ["stycznia","luty","marca","kwietnia","maja","czerwca","lipca",
-      "sierpnia","wrzeœnia","paŸdziernika","listopada","grudnia"]];
+      "sierpnia","wrze\x9cnia","pa\x9fdziernika","listopada","grudnia"]];
   $$d{"month_abb"}=
     [["sty.","lut.","mar.","kwi.","maj","cze.",
       "lip.","sie.","wrz.","paz.","lis.","gru."],
      ["sty.","lut.","mar.","kwi.","maj","cze.",
-      "lip.","sie.","wrz.","paŸ.","lis.","gru."]];
+      "lip.","sie.","wrz.","pa\x9f.","lis.","gru."]];
 
   $$d{"day_name"}=
     [["poniedzialek","wtorek","sroda","czwartek","piatek","sobota",
       "niedziela"],
-     ["poniedzia³ek","wtorek","œroda","czwartek","pi¹tek",
+     ["poniedzia\x81\xb3ek","wtorek","\x9croda","czwartek","pi\x81\xb9tek",
       "sobota","niedziela"]];
   $$d{"day_abb"}=
     [["po.","wt.","sr.","cz.","pi.","so.","ni."],
-     ["po.","wt.","œr.","cz.","pi.","so.","ni."]];
+     ["po.","wt.","\x9cr.","cz.","pi.","so.","ni."]];
   $$d{"day_char"}=
     [["p","w","e","c","p","s","n"],
-     ["p","w","œ.","c","p","s","n"]];
+     ["p","w","\x9c.","c","p","s","n"]];
 
   $$d{"num_suff"}=
     [["1.","2.","3.","4.","5.","6.","7.","8.","9.","10.",
@@ -6292,48 +6436,48 @@
       "dwudziestego piatego","dwudziestego szostego",
       "dwudziestego siodmego","dwudziestego osmego",
       "dwudziestego dziewiatego","trzydziestego","trzydziestego pierwszego"],
-     ["pierwszego","drugiego","trzeczego","czwartego","pi¹tego",
-      "szóstego","siódmego","ósmego","dziewi¹tego",
-      "dziesi¹tego","jedenastego","dwunastego","trzynastego",
-      "czternastego","piêtnastego","szestnastego","siedemnastego",
+     ["pierwszego","drugiego","trzeczego","czwartego","pi\x81\xb9tego",
+      "sz\x81\xf3stego","si\x81\xf3dmego","\x81\xf3smego","dziewi\x81\xb9tego",
+      "dziesi\x81\xb9tego","jedenastego","dwunastego","trzynastego",
+      "czternastego","pi\x81\xeatnastego","szestnastego","siedemnastego",
       "osiemnastego","dziewietnastego","dwudziestego",
       "dwudziestego pierwszego","dwudziestego drugiego",
       "dwudziestego trzeczego","dwudziestego czwartego",
-      "dwudziestego pi¹tego","dwudziestego szóstego",
-      "dwudziestego siódmego","dwudziestego ósmego",
-      "dwudziestego dziewi¹tego","trzydziestego",
+      "dwudziestego pi\x81\xb9tego","dwudziestego sz\x81\xf3stego",
+      "dwudziestego si\x81\xf3dmego","dwudziestego \x81\xf3smego",
+      "dwudziestego dziewi\x81\xb9tego","trzydziestego",
       "trzydziestego pierwszego"]];
 
   $$d{"now"}     =["dzisaj","teraz"];
   $$d{"last"}    =["ostatni","ostatna"];
-  $$d{"each"}    =["kazdy","ka¿dy", "kazdym","ka¿dym"];
+  $$d{"each"}    =["kazdy","ka\x81\xbfdy", "kazdym","ka\x81\xbfdym"];
   $$d{"of"}      =["w","z"];
   $$d{"at"}      =["o","u"];
   $$d{"on"}      =["na"];
   $$d{"future"}  =["za"];
   $$d{"past"}    =["temu"];
-  $$d{"next"}    =["nastepny","nastêpny","nastepnym","nastêpnym",
-                   "przyszly","przysz³y","przyszlym",
-                   "przysz³ym"];
-  $$d{"prev"}    =["zeszly","zesz³y","zeszlym","zesz³ym"];
+  $$d{"next"}    =["nastepny","nast\x81\xeapny","nastepnym","nast\x81\xeapnym",
+                   "przyszly","przysz\x81\xb3y","przyszlym",
+                   "przysz\x81\xb3ym"];
+  $$d{"prev"}    =["zeszly","zesz\x81\xb3y","zeszlym","zesz\x81\xb3ym"];
   $$d{"later"}   =["later"];
 
-  $$d{"exact"}   =["doklandnie","dok³andnie"];
-  $$d{"approx"}  =["w przyblizeniu","w przybli¿eniu","mniej wiecej",
-                   "mniej wiêcej","okolo","oko³o"];
-  $$d{"business"}=["sluzbowy","s³u¿bowy","sluzbowym",
-                   "s³u¿bowym"];
+  $$d{"exact"}   =["doklandnie","dok\x81\xb3andnie"];
+  $$d{"approx"}  =["w przyblizeniu","w przybli\x81\xbfeniu","mniej wiecej",
+                   "mniej wi\x81\xeacej","okolo","oko\x81\xb3o"];
+  $$d{"business"}=["sluzbowy","s\x81\xb3u\x81\xbfbowy","sluzbowym",
+                   "s\x81\xb3u\x81\xbfbowym"];
 
-  $$d{"times"}   =["po³udnie","12:00:00",
-                   "pó³noc","00:00:00",
+  $$d{"times"}   =["po\x81\xb3udnie","12:00:00",
+                   "p\x81\xf3\x81\xb3noc","00:00:00",
                    "poludnie","12:00:00","polnoc","00:00:00"];
   $$d{"offset"}  =["wczoraj","-0:0:1:0:0:0","jutro","+0:0:1:0:0:0"];
 
   $$d{"years"}   =["rok","lat","lata","latach"];
-  $$d{"months"}  =["m.","miesiac","miesi¹c","miesiecy",
-                   "miesiêcy","miesiacu","miesi¹cu"];
-  $$d{"weeks"}   =["ty.","tydzien","tydzieñ","tygodniu"];
-  $$d{"days"}    =["d.","dzien","dzieñ","dni"];
+  $$d{"months"}  =["m.","miesiac","miesi\x81\xb9c","miesiecy",
+                   "miesi\x81\xeacy","miesiacu","miesi\x81\xb9cu"];
+  $$d{"weeks"}   =["ty.","tydzien","tydzie\x81\xf1","tygodniu"];
+  $$d{"days"}    =["d.","dzien","dzie\x81\xf1","dni"];
   $$d{"hours"}   =["g.","godzina","godziny","godzinie"];
   $$d{"minutes"} =["mn.","min.","minut","minuty"];
   $$d{"seconds"} =["s.","sekund","sekundy"];
@@ -6350,6 +6494,8 @@
 sub Date_Init_Spanish {
   print "DEBUG: Date_Init_Spanish\n"  if ($Curr{"Debug"} =~ /trace/);
   my($d)=@_;
+  my(%h)=();
+  &Char_8Bit(\%h);
 
   $$d{"month_name"}=
     [["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto",
@@ -6391,9 +6537,6 @@
       "Vigesimo Septima","Vigesimo Octava","Vigesimo Novena","Trigesima",
       "Trigesimo Primera"]];
 
-
-
-
   $$d{"now"}     =["Hoy","Ahora"];
   $$d{"last"}    =["ultimo"];
   $$d{"each"}    =["cada"];
@@ -6433,11 +6576,22 @@
 sub Date_Init_Portuguese {
   print "DEBUG: Date_Init_Portuguese\n"  if ($Curr{"Debug"} =~ /trace/);
   my($d)=@_;
+  my(%h)=();
+  &Char_8Bit(\%h);
+  my($o) = $h{"-o"};
+  my($c) = $h{",c"};
+  my($a) = $h{"a'"};
+  my($e) = $h{"e'"};
+  my($u) = $h{"u'"};
+  my($o2)= $h{"o'"};
+  my($a2)= $h{"a`"};
+  my($a3)= $h{"a~"};
+  my($e2)= $h{"e^"};
 
   $$d{"month_name"}=
     [["Janeiro","Fevereiro","Marco","Abril","Maio","Junho",
       "Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],
-     ["Janeiro","Fevereiro","Março","Abril","Maio","Junho",
+     ["Janeiro","Fevereiro","Mar${c}o","Abril","Maio","Junho",
       "Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"]];
 
   $$d{"month_abb"}=
@@ -6446,19 +6600,19 @@
 
   $$d{"day_name"}=
     [["Segunda","Terca","Quarta","Quinta","Sexta","Sabado","Domingo"],
-     ["Segunda","Terça","Quarta","Quinta","Sexta","Sábado","Domingo"]];
+     ["Segunda","Ter${c}a","Quarta","Quinta","Sexta","S${a}bado","Domingo"]];
   $$d{"day_abb"}=
     [["Seg","Ter","Qua","Qui","Sex","Sab","Dom"],
-     ["Seg","Ter","Qua","Qui","Sex","Sáb","Dom"]];
+     ["Seg","Ter","Qua","Qui","Sex","S${a}b","Dom"]];
   $$d{"day_char"}=
     [["Sg","T","Qa","Qi","Sx","Sb","D"]];
 
   $$d{"num_suff"}=
-    [["1º","2º","3º","4º","5º","6º","7º","8º",
-      "9º","10º","11º","12º","13º","14º","15º",
-      "16º","17º","18º","19º","20º","21º","22º",
-      "23º","24º","25º","26º","27º","28º","29º",
-      "30º","31º"]];
+    [["1${o}","2${o}","3${o}","4${o}","5${o}","6${o}","7${o}","8${o}",
+      "9${o}","10${o}","11${o}","12${o}","13${o}","14${o}","15${o}",
+      "16${o}","17${o}","18${o}","19${o}","20${o}","21${o}","22${o}",
+      "23${o}","24${o}","25${o}","26${o}","27${o}","28${o}","29${o}",
+      "30${o}","31${o}"]];
   $$d{"num_word"}=
     [["primeiro","segundo","terceiro","quarto","quinto","sexto","setimo",
       "oitavo","nono","decimo","decimo primeiro","decimo segundo",
@@ -6467,26 +6621,26 @@
       "vigesimo primeiro","vigesimo segundo","vigesimo terceiro",
       "vigesimo quarto","vigesimo quinto","vigesimo sexto","vigesimo setimo",
       "vigesimo oitavo","vigesimo nono","trigesimo","trigesimo primeiro"],
-     ["primeiro","segundo","terceiro","quarto","quinto","sexto","sétimo",
-      "oitavo","nono","décimo","décimo primeiro","décimo segundo",
-      "décimo terceiro","décimo quarto","décimo quinto",
-      "décimo sexto","décimo sétimo","décimo oitavo",
-      "décimo nono","vigésimo","vigésimo primeiro",
-      "vigésimo segundo","vigésimo terceiro","vigésimo quarto",
-      "vigésimo quinto","vigésimo sexto","vigésimo sétimo",
-      "vigésimo oitavo","vigésimo nono","trigésimo",
-      "trigésimo primeiro"]];
+     ["primeiro","segundo","terceiro","quarto","quinto","sexto","s${e}timo",
+      "oitavo","nono","d${e}cimo","d${e}cimo primeiro","d${e}cimo segundo",
+      "d${e}cimo terceiro","d${e}cimo quarto","d${e}cimo quinto",
+      "d${e}cimo sexto","d${e}cimo s${e}timo","d${e}cimo oitavo",
+      "d${e}cimo nono","vig${e}simo","vig${e}simo primeiro",
+      "vig${e}simo segundo","vig${e}simo terceiro","vig${e}simo quarto",
+      "vig${e}simo quinto","vig${e}simo sexto","vig${e}simo s${e}timo",
+      "vig${e}simo oitavo","vig${e}simo nono","trig${e}simo",
+      "trig${e}simo primeiro"]];
 
   $$d{"now"}     =["agora","hoje"];
-  $$d{"last"}    =["último","ultimo"];
+  $$d{"last"}    =["${u}ltimo","ultimo"];
   $$d{"each"}    =["cada"];
   $$d{"of"}      =["da","do"];
-  $$d{"at"}      =["as","às"];
+  $$d{"at"}      =["as","${a2}s"];
   $$d{"on"}      =["na","no"];
   $$d{"future"}  =["em"];
-  $$d{"past"}    =["a","à"];
-  $$d{"next"}    =["proxima","proximo","próxima","próximo"];
-  $$d{"prev"}    =["ultima","ultimo","última","último"];
+  $$d{"past"}    =["a","${a2}"];
+  $$d{"next"}    =["proxima","proximo","pr${o2}xima","pr${o2}ximo"];
+  $$d{"prev"}    =["ultima","ultimo","${u}ltima","${u}ltimo"];
   $$d{"later"}   =["passadas","passados"];
 
   $$d{"exact"}   =["exactamente"];
@@ -6494,11 +6648,11 @@
   $$d{"business"}=["util","uteis"];
 
   $$d{"offset"}  =["ontem","-0:0:0:1:0:0:0",
-                   "amanha","+0:0:0:1:0:0:0","amanhã","+0:0:0:1:0:0:0"];
+                   "amanha","+0:0:0:1:0:0:0","amanh${a3}","+0:0:0:1:0:0:0"];
   $$d{"times"}   =["meio-dia","12:00:00","meia-noite","00:00:00"];
 
   $$d{"years"}   =["anos","ano","ans","an","a"];
-  $$d{"months"}  =["meses","mês","mes","m"];
+  $$d{"months"}  =["meses","m${e2}s","mes","m"];
   $$d{"weeks"}   =["semanas","semana","sem","sems","s"];
   $$d{"days"}    =["dias","dia","d"];
   $$d{"hours"}   =["horas","hora","hr","hrs"];
@@ -6514,6 +6668,381 @@
   $$d{"pm"}      = ["PM","P.M."];
 }
 
+sub Date_Init_Russian {
+  print "DEBUG: Date_Init_Russian\n"  if ($Curr{"Debug"} =~ /trace/);
+  my($d)=@_;
+  my(%h)=();
+  &Char_8Bit(\%h);
+  my($a) =$h{"a:"};
+
+  $$d{"month_name"}=
+    [
+     ["\xd1\xce\xd7\xc1\xd2\xd1","\xc6\xc5\xd7\xd2\xc1\xcc\xd1",
+      "\xcd\xc1\xd2\xd4\xc1","\xc1\xd0\xd2\xc5\xcc\xd1","\xcd\xc1\xd1",
+      "\xc9\xc0\xce\xd1",
+      "\xc9\xc0\xcc\xd1","\xc1\xd7\xc7\xd5\xd3\xd4\xc1",
+      "\xd3\xc5\xce\xd4\xd1\xc2\xd2\xd1","\xcf\xcb\xd4\xd1\xc2\xd2\xd1",
+      "\xce\xcf\xd1\xc2\xd2\xd1","\xc4\xc5\xcb\xc1\xc2\xd2\xd1"],
+     ["\xd1\xce\xd7\xc1\xd2\xd8","\xc6\xc5\xd7\xd2\xc1\xcc\xd8",
+      "\xcd\xc1\xd2\xd4","\xc1\xd0\xd2\xc5\xcc\xd8","\xcd\xc1\xca",
+      "\xc9\xc0\xce\xd8",
+      "\xc9\xc0\xcc\xd8","\xc1\xd7\xc7\xd5\xd3\xd4",
+      "\xd3\xc5\xce\xd4\xd1\xc2\xd2\xd8","\xcf\xcb\xd4\xd1\xc2\xd2\xd8",
+      "\xce\xcf\xd1\xc2\xd2\xd8","\xc4\xc5\xcb\xc1\xc2\xd2\xd8"]
+    ];
+
+  $$d{"month_abb"}=
+    [["\xd1\xce\xd7","\xc6\xc5\xd7","\xcd\xd2\xd4","\xc1\xd0\xd2",
+      "\xcd\xc1\xca","\xc9\xc0\xce",
+      "\xc9\xc0\xcc","\xc1\xd7\xc7","\xd3\xce\xd4","\xcf\xcb\xd4",
+      "\xce\xcf\xd1\xc2","\xc4\xc5\xcb"],
+     ["","\xc6\xd7\xd2","","","\xcd\xc1\xd1","",
+      "","","\xd3\xc5\xce","\xcf\xcb\xd4","\xce\xcf\xd1",""]];
+
+  $$d{"day_name"}=
+    [["\xd0\xcf\xce\xc5\xc4\xc5\xcc\xd8\xce\xc9\xcb",
+      "\xd7\xd4\xcf\xd2\xce\xc9\xcb","\xd3\xd2\xc5\xc4\xc1",
+      "\xde\xc5\xd4\xd7\xc5\xd2\xc7","\xd0\xd1\xd4\xce\xc9\xc3\xc1",
+      "\xd3\xd5\xc2\xc2\xcf\xd4\xc1",
+      "\xd7\xcf\xd3\xcb\xd2\xc5\xd3\xc5\xce\xd8\xc5"]];
+  $$d{"day_abb"}=
+    [["\xd0\xce\xc4","\xd7\xd4\xd2","\xd3\xd2\xc4","\xde\xd4\xd7",
+      "\xd0\xd4\xce","\xd3\xd5\xc2","\xd7\xd3\xcb"],
+     ["\xd0\xcf\xce","\xd7\xd4\xcf","\xd3\xd2e","\xde\xc5\xd4",
+      "\xd0\xd1\xd4","\xd3\xd5\xc2","\xd7\xcf\xd3\xcb"]];
+  $$d{"day_char"}=
+    [["\xd0\xce","\xd7\xd4","\xd3\xd2","\xde\xd4","\xd0\xd4","\xd3\xc2",
+      "\xd7\xd3"]];
+
+  $$d{"num_suff"}=
+    [["1 ","2 ","3 ","4 ","5 ","6 ","7 ","8 ","9 ","10 ",
+      "11 ","12 ","13 ","14 ","15 ","16 ","17 ","18 ","19 ","20 ",
+      "21 ","22 ","23 ","24 ","25 ","26 ","27 ","28 ","29 ","30 ",
+      "31 "]];
+  $$d{"num_word"}=
+    [["\xd0\xc5\xd2\xd7\xd9\xca","\xd7\xd4\xcf\xd2\xcf\xca",
+      "\xd4\xd2\xc5\xd4\xc9\xca","\xde\xc5\xd4\xd7\xc5\xd2\xd4\xd9\xca",
+      "\xd0\xd1\xd4\xd9\xca","\xdb\xc5\xd3\xd4\xcf\xca",
+      "\xd3\xc5\xc4\xd8\xcd\xcf\xca","\xd7\xcf\xd3\xd8\xcd\xcf\xca",
+      "\xc4\xc5\xd7\xd1\xd4\xd9\xca","\xc4\xc5\xd3\xd1\xd4\xd9\xca",
+      "\xcf\xc4\xc9\xce\xce\xc1\xc4\xc3\xc1\xd4\xd9\xca",
+      "\xc4\xd7\xc5\xce\xc1\xc4\xde\xc1\xd4\xd9\xca",
+      "\xd4\xd2\xc5\xce\xc1\xc4\xc3\xc1\xd4\xd9\xca",
+      "\xde\xc5\xd4\xd9\xd2\xce\xc1\xc4\xc3\xc1\xd4\xd9\xca",
+      "\xd0\xd1\xd4\xce\xc1\xc4\xc3\xc1\xd4\xd9\xca",
+      "\xdb\xc5\xd3\xd4\xce\xc1\xc4\xc3\xc1\xd4\xd9\xca",
+      "\xd3\xc5\xcd\xd8\xce\xc1\xc4\xc3\xc1\xd4\xd9\xca",
+      "\xd7\xcf\xd3\xc5\xcd\xd8\xce\xc1\xc4\xc3\xc1\xd4\xd9\xca",
+      "\xc4\xc5\xd7\xd1\xd4\xce\xc1\xc4\xc3\xc1\xd4\xd9\xca",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd9\xca",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd0\xc5\xd2\xd7\xd9\xca",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd7\xd4\xcf\xd2\xcf\xca",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd4\xd2\xc5\xd4\xc9\xca",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xde\xc5\xd4\xd7\xc5\xd2\xd4\xd9\xca",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd0\xd1\xd4\xd9\xca",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xdb\xc5\xd3\xd4\xcf\xca",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd3\xc5\xc4\xd8\xcd\xcf\xca",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd7\xcf\xd3\xd8\xcd\xcf\xca",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xc4\xc5\xd7\xd1\xd4\xd9\xca",
+      "\xd4\xd2\xc9\xc4\xc3\xc1\xd4\xd9\xca",
+      "\xd4\xd2\xc9\xc4\xc3\xc1\xd4\xd8 \xd0\xc5\xd2\xd7\xd9\xca"],
+
+     ["\xd0\xc5\xd2\xd7\xcf\xc5","\xd7\xd4\xcf\xd2\xcf\xc5",
+      "\xd4\xd2\xc5\xd4\xd8\xc5","\xde\xc5\xd4\xd7\xc5\xd2\xd4\xcf\xc5",
+      "\xd0\xd1\xd4\xcf\xc5","\xdb\xc5\xd3\xd4\xcf\xc5",
+      "\xd3\xc5\xc4\xd8\xcd\xcf\xc5","\xd7\xcf\xd3\xd8\xcd\xcf\xc5",
+      "\xc4\xc5\xd7\xd1\xd4\xcf\xc5","\xc4\xc5\xd3\xd1\xd4\xcf\xc5",
+      "\xcf\xc4\xc9\xce\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc5",
+      "\xc4\xd7\xc5\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc5",
+      "\xd4\xd2\xc5\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc5",
+      "\xde\xc5\xd4\xd9\xd2\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc5",
+      "\xd0\xd1\xd4\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc5",
+      "\xdb\xc5\xd3\xd4\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc5",
+      "\xd3\xc5\xcd\xd8\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc5",
+      "\xd7\xcf\xd3\xc5\xcd\xd8\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc5",
+      "\xc4\xc5\xd7\xd1\xd4\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc5",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xcf\xc5",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd0\xc5\xd2\xd7\xcf\xc5",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd7\xd4\xcf\xd2\xcf\xc5",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd4\xd2\xc5\xd4\xd8\xc5",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xde\xc5\xd4\xd7\xc5\xd2\xd4\xcf\xc5",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd0\xd1\xd4\xcf\xc5",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xdb\xc5\xd3\xd4\xcf\xc5",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd3\xc5\xc4\xd8\xcd\xcf\xc5",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd7\xcf\xd3\xd8\xcd\xcf\xc5",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xc4\xc5\xd7\xd1\xd4\xcf\xc5",
+      "\xd4\xd2\xc9\xc4\xc3\xc1\xd4\xcf\xc5",
+      "\xd4\xd2\xc9\xc4\xc3\xc1\xd4\xd8 \xd0\xc5\xd2\xd7\xcf\xc5"],
+
+     ["\xd0\xc5\xd2\xd7\xcf\xc7\xcf","\xd7\xd4\xcf\xd2\xcf\xc7\xcf",
+      "\xd4\xd2\xc5\xd4\xd8\xc5\xc7\xcf",
+      "\xde\xc5\xd4\xd7\xc5\xd2\xd4\xcf\xc7\xcf","\xd0\xd1\xd4\xcf\xc7\xcf",
+      "\xdb\xc5\xd3\xd4\xcf\xc7\xcf","\xd3\xc5\xc4\xd8\xcd\xcf\xc7\xcf",
+      "\xd7\xcf\xd3\xd8\xcd\xcf\xc7\xcf",
+      "\xc4\xc5\xd7\xd1\xd4\xcf\xc7\xcf","\xc4\xc5\xd3\xd1\xd4\xcf\xc7\xcf",
+      "\xcf\xc4\xc9\xce\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc7\xcf",
+      "\xc4\xd7\xc5\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc7\xcf",
+      "\xd4\xd2\xc5\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc7\xcf",
+      "\xde\xc5\xd4\xd9\xd2\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc7\xcf",
+      "\xd0\xd1\xd4\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc7\xcf",
+      "\xdb\xc5\xd3\xd4\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc7\xcf",
+      "\xd3\xc5\xcd\xd8\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc7\xcf",
+      "\xd7\xcf\xd3\xc5\xcd\xd8\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc7\xcf",
+      "\xc4\xc5\xd7\xd1\xd4\xce\xc1\xc4\xc3\xc1\xd4\xcf\xc7\xcf",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xcf\xc7\xcf",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd0\xc5\xd2\xd7\xcf\xc7\xcf",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd7\xd4\xcf\xd2\xcf\xc5",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd4\xd2\xc5\xd4\xd8\xc5\xc7\xcf",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xde\xc5\xd4\xd7\xc5\xd2\xd4\xcf\xc7\xcf",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd0\xd1\xd4\xcf\xc7\xcf",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xdb\xc5\xd3\xd4\xcf\xc7\xcf",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd3\xc5\xc4\xd8\xcd\xcf\xc7\xcf",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xd7\xcf\xd3\xd8\xcd\xcf\xc7\xcf",
+      "\xc4\xd7\xc1\xc4\xc3\xc1\xd4\xd8 \xc4\xc5\xd7\xd1\xd4\xcf\xc7\xcf",
+      "\xd4\xd2\xc9\xc4\xc3\xc1\xd4\xcf\xc7\xcf",
+      "\xd4\xd2\xc9\xc4\xc3\xc1\xd4\xd8 \xd0\xc5\xd2\xd7\xcf\xc7\xcf"]];
+
+  $$d{"now"}     =["\xd3\xc5\xc7\xcf\xc4\xce\xd1","\xd3\xc5\xca\xde\xc1\xd3"];
+  $$d{"last"}    =["\xd0\xcf\xd3\xcc\xc5\xc4\xce\xc9\xca"];
+  $$d{"each"}    =["\xcb\xc1\xd6\xc4\xd9\xca"];
+  $$d{"of"}      =[" "];
+  $$d{"at"}      =["\xd7"];
+  $$d{"on"}      =["\xd7"];
+  $$d{"future"}  =["\xd7\xd0\xc5\xd2\xc5\xc4 \xce\xc1"];
+  $$d{"past"}    =["\xce\xc1\xda\xc1\xc4 \xce\xc1 "];
+  $$d{"next"}    =["\xd3\xcc\xc5\xc4\xd5\xc0\xdd\xc9\xca"];
+  $$d{"prev"}    =["\xd0\xd2\xc5\xc4\xd9\xc4\xd5\xdd\xc9\xca"];
+  $$d{"later"}   =["\xd0\xcf\xda\xd6\xc5"];
+
+  $$d{"exact"}   =["\xd4\xcf\xde\xce\xcf"];
+  $$d{"approx"}  =["\xd0\xd2\xc9\xcd\xc5\xd2\xce\xcf"];
+  $$d{"business"}=["\xd2\xc1\xc2\xcf\xde\xc9\xc8"];
+
+  $$d{"offset"}  =["\xd0\xcf\xda\xc1\xd7\xde\xc5\xd2\xc1","-0:0:0:2:0:0:0",
+                   "\xd7\xde\xc5\xd2\xc1","-0:0:0:1:0:0:0",
+                   "\xda\xc1\xd7\xd4\xd2\xc1","+0:0:0:1:0:0:0",
+                   "\xd0\xcf\xd3\xcc\xc5\xda\xc1\xd7\xd4\xd2\xc1",
+                   "+0:0:0:2:0:0:0"];
+  $$d{"times"}   =["\xd0\xcf\xcc\xc4\xc5\xce\xd8","12:00:00",
+                   "\xd0\xcf\xcc\xce\xcf\xde\xd8","00:00:00"];
+
+  $$d{"years"}   =["\xc7","\xc7\xc4","\xc7\xcf\xc4","\xcc\xc5\xd4",
+                   "\xcc\xc5\xd4","\xc7\xcf\xc4\xc1"];
+  $$d{"months"}  =["\xcd\xc5\xd3","\xcd\xc5\xd3\xd1\xc3",
+                   "\xcd\xc5\xd3\xd1\xc3\xc5\xd7"];
+  $$d{"weeks"}   =["\xce\xc5\xc4\xc5\xcc\xd1","\xce\xc5\xc4\xc5\xcc\xd8",
+                   "\xce\xc5\xc4\xc5\xcc\xc9","\xce\xc5\xc4\xc5\xcc\xc0"];
+  $$d{"days"}    =["\xc4","\xc4\xc5\xce\xd8","\xc4\xce\xc5\xca",
+                   "\xc4\xce\xd1"];
+  $$d{"hours"}   =["\xde","\xde.","\xde\xd3","\xde\xd3\xd7","\xde\xc1\xd3",
+                   "\xde\xc1\xd3\xcf\xd7","\xde\xc1\xd3\xc1"];
+  $$d{"minutes"} =["\xcd\xce","\xcd\xc9\xce","\xcd\xc9\xce\xd5\xd4\xc1",
+                   "\xcd\xc9\xce\xd5\xd4"];
+  $$d{"seconds"} =["\xd3","\xd3\xc5\xcb","\xd3\xc5\xcb\xd5\xce\xc4\xc1",
+                   "\xd3\xc5\xcb\xd5\xce\xc4"];
+  $$d{"replace"} =[];
+
+  $$d{"sephm"}   ="[:\xde]";
+  $$d{"sepms"}   ="[:\xcd]";
+  $$d{"sepss"}   ="[:.\xd3]";
+
+  $$d{"am"}      = ["\xc4\xd0","${a}\xf0","${a}.\xf0.","\xce\xcf\xde\xc9",
+                    "\xd5\xd4\xd2\xc1",
+                    "\xc4\xcf \xd0\xcf\xcc\xd5\xc4\xce\xd1"];
+  $$d{"pm"}      = ["\xd0\xd0","\xf0\xf0","\xf0.\xf0.","\xc4\xce\xd1",
+                    "\xd7\xc5\xde\xc5\xd2\xc1",
+                    "\xd0\xcf\xd3\xcc\xc5 \xd0\xcf\xcc\xd5\xc4\xce\xd1",
+                    "\xd0\xcf \xd0\xcf\xcc\xd5\xc4\xce\xc0"];
+}
+
+sub Date_Init_Turkish {
+  print "DEBUG: Date_Init_Turkish\n"  if ($Curr{"Debug"} =~ /trace/);
+  my($d)=@_;
+
+  $$d{"month_name"}=
+    [
+     ["ocak","subat","mart","nisan","mayis","haziran",
+      "temmuz","agustos","eylul","ekim","kasim","aralik"],
+     ["ocak","\xfeubat","mart","nisan","may\xfds","haziran",
+      "temmuz","a\xf0ustos","eyl\xfcl","ekim","kas\xfdm","aral\xfdk"]
+     ];
+
+  $$d{"month_abb"}=
+    [
+     ["oca","sub","mar","nis","may","haz",
+      "tem","agu","eyl","eki","kas","ara"],
+     ["oca","\xfeub","mar","nis","may","haz",
+      "tem","a\xf0u","eyl","eki","kas","ara"]
+     ];
+
+  $$d{"day_name"}=
+    [
+     ["pazartesi","sali","carsamba","persembe","cuma","cumartesi","pazar"],
+     ["pazartesi","sal\xfd","\xe7ar\xfeamba","per\xfeembe","cuma",
+      "cumartesi","pazar"],
+     ];
+
+  $$d{"day_abb"}=
+    [
+     ["pzt","sal","car","per","cum","cts","paz"],
+     ["pzt","sal","\xe7ar","per","cum","cts","paz"],
+     ];
+
+  $$d{"day_char"}=
+    [["Pt","S","Cr","Pr","C","Ct","P"],
+     ["Pt","S","\xc7","Pr","C","Ct","P"]];
+
+  $$d{"num_suff"}=
+    [[ "1.", "2.", "3.", "4.", "5.", "6.", "7.", "8.", "9.", "10.",
+       "11.", "12.", "13.", "14.", "15.", "16.", "17.", "18.", "19.", "20.",
+       "21.", "22.", "23.", "24.", "25.", "26.", "27.", "28.", "29.", "30.",
+       "31."]];
+
+  $$d{"num_word"}=
+    [
+     ["birinci","ikinci","ucuncu","dorduncu",
+      "besinci","altinci","yedinci","sekizinci",
+      "dokuzuncu","onuncu","onbirinci","onikinci",
+      "onucuncu","ondordoncu",
+      "onbesinci","onaltinci","onyedinci","onsekizinci",
+      "ondokuzuncu","yirminci","yirmibirinci","yirmikinci",
+      "yirmiucuncu","yirmidorduncu",
+      "yirmibesinci","yirmialtinci","yirmiyedinci","yirmisekizinci",
+      "yirmidokuzuncu","otuzuncu","otuzbirinci"],
+     ["birinci","ikinci","\xfc\xe7\xfcnc\xfc","d\xf6rd\xfcnc\xfc",
+      "be\xfeinci","alt\xfdnc\xfd","yedinci","sekizinci",
+      "dokuzuncu","onuncu","onbirinci","onikinci",
+      "on\xfc\xe7\xfcnc\xfc","ond\xf6rd\xfcnc\xfc",
+      "onbe\xfeinci","onalt\xfdnc\xfd","onyedinci","onsekizinci",
+      "ondokuzuncu","yirminci","yirmibirinci","yirmikinci",
+      "yirmi\xfc\xe7\xfcnc\xfc","yirmid\xf6rd\xfcnc\xfc",
+      "yirmibe\xfeinci","yirmialt\xfdnc\xfd","yirmiyedinci","yirmisekizinci",
+      "yirmidokuzuncu","otuzuncu","otuzbirinci"]
+     ];
+
+  $$d{"now"}     =["\xfeimdi", "simdi", "bugun","bug\xfcn"];
+  $$d{"last"}    =["son", "sonuncu"];
+  $$d{"each"}    =["her"];
+  $$d{"of"}      =["of"];
+  $$d{"at"}      =["saat"];
+  $$d{"on"}      =["on"];
+  $$d{"future"}  =["gelecek"];
+  $$d{"past"}    =["ge\xe7mi\xfe", "gecmis","gecen", "ge\xe7en"];
+  $$d{"next"}    =["gelecek","sonraki"];
+  $$d{"prev"}    =["onceki","\xf6nceki"];
+  $$d{"later"}   =["sonra"];
+
+  $$d{"exact"}   =["tam"];
+  $$d{"approx"}  =["yakla\xfe\xfdk", "yaklasik"];
+  $$d{"business"}=["i\xfe","\xe7al\xfd\xfema","is", "calisma"];
+
+  $$d{"offset"}  =["d\xfcn","-0:0:0:1:0:0:0",
+                   "dun", "-0:0:0:1:0:0:0",
+                   "yar\xfdn","+0:0:0:1:0:0:0",
+                   "yarin","+0:0:0:1:0:0:0"];
+
+  $$d{"times"}   =["\xf6\xf0len","12:00:00",
+                   "oglen","12:00:00",
+                   "yarim","12:300:00",
+                   "yar\xfdm","12:30:00",
+                   "gece yar\xfds\xfd","00:00:00",
+                   "gece yarisi","00:00:00"];
+
+  $$d{"years"}   =["yil","y"];
+  $$d{"months"}  =["ay","a"];
+  $$d{"weeks"}   =["hafta", "h"];
+  $$d{"days"}    =["gun","g"];
+  $$d{"hours"}   =["saat"];
+  $$d{"minutes"} =["dakika","dak","d"];
+  $$d{"seconds"} =["saniye","sn",];
+  $$d{"replace"} =["s","saat"];
+
+  $$d{"sephm"}   =':';
+  $$d{"sepms"}   =':';
+  $$d{"sepss"}   ='[.:,]';
+
+  $$d{"am"}      = ["\xf6gleden \xf6nce","ogleden once"];
+  $$d{"pm"}      = ["\xf6\xf0leden sonra","ogleden sonra"];
+}
+
+sub Date_Init_Danish {
+  print "DEBUG: Date_Init_Danish\n"  if ($Curr{"Debug"} =~ /trace/);
+  my($d)=@_;
+
+  $$d{"month_name"}=
+    [["Januar","Februar","Marts","April","Maj","Juni",
+      "Juli","August","September","Oktober","November","December"]];
+  $$d{"month_abb"}=
+    [["Jan","Feb","Mar","Apr","Maj","Jun",
+      "Jul","Aug","Sep","Okt","Nov","Dec"]];
+
+  $$d{"day_name"}=
+    [["Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lordag","Sondag"],
+     ["Mandag","Tirsdag","Onsdag","Torsdag","Fredag","L\xf8rdag","S\xf8ndag"]];
+
+  $$d{"day_abb"}=
+    [["Man","Tis","Ons","Tor","Fre","Lor","Son"],
+     ["Man","Tis","Ons","Tor","Fre","L\xf8r","S\xf8n"]];
+  $$d{"day_char"}=
+    [["M","Ti","O","To","F","L","S"]];
+
+  $$d{"num_suff"}=
+    [["1:e","2:e","3:e","4:e","5:e","6:e","7:e","8:e","9:e","10:e",
+      "11:e","12:e","13:e","14:e","15:e","16:e","17:e","18:e","19:e","20:e",
+      "21:e","22:e","23:e","24:e","25:e","26:e","27:e","28:e","29:e","30:e",
+      "31:e"]];
+  $$d{"num_word"}=
+    [["forste","anden","tredie","fjerde","femte","sjette","syvende",
+      "ottende","niende","tiende","elfte","tolvte","trettende","fjortende",
+      "femtende","sekstende","syttende","attende","nittende","tyvende",
+      "enogtyvende","toogtyvende","treogtyvende","fireogtyvende","femogtyvende",
+      "seksogtyvende","syvogtyvende","otteogtyvende","niogtyvende",
+      "tredivte","enogtredivte"],
+     ["f\xf8rste","anden","tredie","fjerde","femte","sjette","syvende",
+      "ottende","niende","tiende","elfte","tolvte","trettende","fjortende",
+      "femtende","sekstende","syttende","attende","nittende","tyvende",
+      "enogtyvende","toogtyvende","treogtyvende","fireogtyvende","femogtyvende",
+      "seksogtyvende","syvogtyvende","otteogtyvende","niogtyvende",
+      "tredivte","enogtredivte"]];
+
+  $$d{"now"}     =["idag","nu"];
+  $$d{"last"}    =["forrige","sidste","nyeste"];
+  $$d{"each"}    =["hver"];
+  $$d{"of"}      =["om"];
+  $$d{"at"}      =["kl","kl.","klokken"];
+  $$d{"on"}      =["pa","p\xe5"];
+  $$d{"future"}  =["om"];
+  $$d{"past"}    =["siden"];
+  $$d{"next"}    =["nasta","n\xe6ste"];
+  $$d{"prev"}    =["forrige"];
+  $$d{"later"}   =["senere"];
+
+  $$d{"exact"}   =["pracist","pr\xe6cist"];
+  $$d{"approx"}  =["circa"];
+  $$d{"business"}=["arbejdsdag","arbejdsdage"];
+
+  $$d{"offset"}  =["ig\xe5r","-0:0:0:1:0:0:0","igar","-0:0:0:1:0:0:0",
+                   "imorgen","+0:0:0:1:0:0:0"];
+  $$d{"times"}   =["midt pa dagen","12:00:00","midt p\xe5 dagen","12:00:00",
+                   "midnat","00:00:00"];
+
+  $$d{"years"}   =["ar","\xe5r"];
+  $$d{"months"}  =["man","maned","maneder","m\xe5n","m\xe5ned","m\xe5neder"];
+  $$d{"weeks"}   =["u","uge","uger"];
+  $$d{"days"}    =["d","dag","dage"];
+  $$d{"hours"}   =["t","tim","time","timer"];
+  $$d{"minutes"} =["min","minut","minutter"];
+  $$d{"seconds"} =["s","sek","sekund","sekunder"];
+  $$d{"replace"} =["m","minut"];
+
+  $$d{"sephm"}   ='[.:]';
+  $$d{"sepms"}   =':';
+  $$d{"sepss"}   ='[.:]';
+
+  $$d{"am"}      = ["FM"];
+  $$d{"pm"}      = ["EM"];
+}
+
 ########################################################################
 # FROM MY PERSONAL LIBRARIES
 ########################################################################
@@ -6639,6 +7168,7 @@
     # of knowing we are on one of these systems:
     return ""  if ($OS eq "Windows"  or
                    $OS eq "Mac"  or
+                   $OS eq "Netware"  or
                    $OS eq "MPE");
     $user=""  if (! defined $user);
 
@@ -6647,6 +7177,7 @@
     } else {
       $home= (getpwuid($<))[7];
     }
+    $home = VMS::Filespec::unixpath($home)  if ($OS eq "VMS");
     return ""  if (! $home);
     $file="$home/$file";
   }


Més informació de la llista de correu Barcelona-pm