Subversion Repositories gelsvn

Rev

Rev 107 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
107 bj 1
package WinVersionTranslator;
2
 
3
# ************************************************************
4
# Description   : Translate the version value for Windows.
5
#                 Windows can not handle letters in the version
6
#                 and truncates anything after \d+\.\d+.  We
7
#                 will convert letters to numbers, retain
8
#                 trailing numbers and everything else will be
9
#                 converted to a zero.
10
#
11
#                 ex. 1.4.3  => 1.403
12
#                     1.4a.5 => 1.4005
13
#                     1.4b.4 => 1.4104
14
#
15
# Author        : Chad Elliott
16
# Create Date   : 10/7/2004
17
# ************************************************************
18
 
19
# ************************************************************
20
# Pragmas
21
# ************************************************************
22
 
23
use strict;
24
 
25
# ************************************************************
26
# Subroutine Section
27
# ************************************************************
28
 
29
sub translate {
30
  my($version) = shift;
31
  if ($version =~ /^(\d+\.\d+)([^\d].*)$/) {
32
    $version = $1;
33
    my($post) = $2;
34
    my($length) = length($post);
35
 
36
    for(my $i = 0; $i < $length; ++$i) {
37
      my($ch) = substr($post, $i, 1);
38
      if ($ch =~ /[a-z]/i) {
39
        my($digit) = ord(lc($ch)) - ord('a');
40
        $version .= $digit;
41
      }
42
      elsif ($ch =~ /\d/) {
43
        $version .= $ch;
44
      }
45
      else {
46
        $version .= '0';
47
      }
48
    }
49
 
50
    if ($version =~ /(\d+)\.(\d+)/) {
51
      my($major) = $1;
52
      my($minor) = $2;
53
      $minor =~ s/^\d+\.//;
54
      while($minor > 65535) {
55
        $minor = substr($minor, 0, length($minor) - 1);
56
      }
57
      $version = $major . '.' . $minor;
58
    }
59
  }
60
  return $version;
61
}
62
 
63
1;