home *** CD-ROM | disk | FTP | other *** search
/ ftp.madoka.org / 2014.12.ftp.madoka.org.tar / ftp.madoka.org / pub / plum / plum2_33_1.lzh / support / cnvmsgfile < prev    next >
Text File  |  1999-03-24  |  2KB  |  102 lines

  1. #!/bin/perl -w
  2. # $Id: cnvmsgfile,v 2.1 1998/12/19 14:23:41 hasegawa Exp $
  3. # copyright (c)1997-1998 Yoshinori Hasegawa <hasegawa@madoka.org>
  4.  
  5. @TABLE = (1, 60, 3600, 86400, 2678400, 31536000);
  6. $MAXTRY = 20;
  7.  
  8. &main(@ARGV);
  9.  
  10. sub main {
  11.   local(@args) = @_;
  12.   local(@data, $line, $old, $n, $date, $time, $rest);
  13.   if (@args < 1) {
  14.     &usage();
  15.     exit(1);
  16.   }
  17.   foreach $file (@args) {
  18.     if (!open(FILE, $file)) {
  19.       print "$file not found\n";
  20.       next;
  21.     }
  22.     @data = ();
  23.     while (defined($line = <FILE>)) {
  24.       $line =~ tr/\r\n//d;
  25.       push(@data, $line);
  26.     }
  27.     close(FILE);
  28.     $count = 0;
  29.     foreach $line (@data) {
  30.       next if $line =~ /^\s*\#/;
  31.       ($date, $time, $rest) = split(/\s+/, $line, 3);
  32.       if ($date =~ /^\d+\/\d+\/\d+$/ && $time =~ /^\d+\:\d+\:\d+$/) {
  33.         $count++;
  34.       }
  35.     }
  36.     if ($count == 0) {
  37.       print "$file already converted\n";
  38.       next;
  39.     }
  40.     $old = $file . '.old';
  41.     if (-e $old) {
  42.       $n = 0;
  43.       while (-e $old . $n) {
  44.         $n++;
  45.       }
  46.       $old .= $n;
  47.     }
  48.     rename($file, $old);
  49.     if (open(FILE, ">$file")) {
  50.       foreach $line (@data) {
  51.         ($date, $time, $rest) = split(/\s+/, $line, 3);
  52.         if ($date =~ /^\d+\/\d+\/\d+$/ && $time =~ /^\d+\:\d+\:\d+$/) {
  53.           print FILE '', &timelocal($date, $time), ' ', $rest, "\n";
  54.         } else {
  55.           print FILE $line, "\n";
  56.         }
  57.       }
  58.       close(FILE);
  59.     }
  60.   }
  61. }
  62.  
  63. sub usage {
  64.   print 'usage: perl cnvmsgfile <file>', "\n";
  65. }
  66.  
  67. sub timelocal {
  68.   local($date, $time) = @_;
  69.   local(@time, $now, $ndate, $ntime, @time, $try);
  70.   $now = time();
  71.   $try = 0;
  72.   $ndate = '';
  73.   $ntime = '';
  74.   while (($date ne $ndate || $time ne $ntime) && $try < $MAXTRY) {
  75.     $now = &convert($date, $time, $now);
  76.     @time = localtime($now);
  77.     $time[5] += 1900;
  78.     $time[4] += 1;
  79.     $ndate = sprintf("%04d/%02d/%02d", $time[5], $time[4], $time[3]);
  80.     $ntime = sprintf("%02d:%02d:%02d", $time[2], $time[1], $time[0]);
  81.     $try++;
  82.   }
  83.   print "$date $time -> $ndate $ntime\n";
  84.   return $now;
  85. }
  86.  
  87. sub convert {
  88.   local($date, $time, $now) = @_;
  89.   local(@ntime, @time, $last, $i);
  90.   @ntime = localtime($now);
  91.   $ntime[4] += 1;
  92.   $ntime[5] += 1900;
  93.   @time = ();
  94.   push(@time, reverse(split(/\:/, $time)));
  95.   push(@time, reverse(split(/\//, $date)));
  96.   $last = $now;
  97.   for ($i = 0; $i < 6; $i++) {
  98.     $last -= ($ntime[$i] - $time[$i]) * $TABLE[$i];
  99.   }
  100.   return $last;
  101. }
  102.