Subversion Repositories gelsvn

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

package WinVersionTranslator;

# ************************************************************
# Description   : Translate the version value for Windows.
#                 Windows can not handle letters in the version
#                 and truncates anything after \d+\.\d+.  We
#                 will convert letters to numbers, retain
#                 trailing numbers and everything else will be
#                 converted to a zero.
#
#                 ex. 1.4.3  => 1.403
#                     1.4a.5 => 1.4005
#                     1.4b.4 => 1.4104
#
# Author        : Chad Elliott
# Create Date   : 10/7/2004
# ************************************************************

# ************************************************************
# Pragmas
# ************************************************************

use strict;

# ************************************************************
# Subroutine Section
# ************************************************************

sub translate {
  my($version) = shift;
  if ($version =~ /^(\d+\.\d+)([^\d].*)$/) {
    $version = $1;
    my($post) = $2;
    my($length) = length($post);

    for(my $i = 0; $i < $length; ++$i) {
      my($ch) = substr($post, $i, 1);
      if ($ch =~ /[a-z]/i) {
        my($digit) = ord(lc($ch)) - ord('a');
        $version .= $digit;
      }
      elsif ($ch =~ /\d/) {
        $version .= $ch;
      }
      else {
        $version .= '0';
      }
    }

    if ($version =~ /(\d+)\.(\d+)/) {
      my($major) = $1;
      my($minor) = $2;
      $minor =~ s/^\d+\.//;
      while($minor > 65535) {
        $minor = substr($minor, 0, length($minor) - 1);
      }
      $version = $major . '.' . $minor;
    }
  }
  return $version;
}

1;