Subversion Repositories gelsvn

Rev

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

Rev Author Line No. Line
107 bj 1
package GUID;
2
 
3
# ************************************************************
4
# Description   : Generate GUID's for VC7 projects and workspaces
5
# Author        : Chad Elliott
6
# Create Date   : 5/14/2002
7
# ************************************************************
8
 
9
# ************************************************************
10
# Pragmas
11
# ************************************************************
12
 
13
use strict;
14
 
15
# ************************************************************
16
# Subroutine Section
17
# ************************************************************
18
 
19
sub new {
20
  my($class) = shift;
21
  my($self)  = bless {
22
                     }, $class;
23
  return $self;
24
}
25
 
26
 
27
sub generate {
28
  my($self)  = shift;
29
  my($out)   = shift;
30
  my($in)    = shift;
31
  my($cwd)   = shift;
32
  my($chash) = $self->hash($cwd);
33
  my($nhash) = $self->hash($out);
34
  my($ihash) = $self->hash($in);
35
  my($val)   = 0xfeca1bad;
36
 
37
  return sprintf("%08X-%04X-%04X-%04X-%04X%08X",
38
                 $nhash & 0xffffffff, ($val >> 16) & 0xffff,
39
                 ($val & 0xffff), ($ihash >> 16) & 0xffff,
40
                 $ihash & 0xffff, $chash & 0xffffffff);
41
}
42
 
43
 
44
sub hash {
45
  my($self)   = shift;
46
  my($str)    = shift;
47
  my($value)  = 0;
48
 
49
  if (defined $str) {
50
    my($length) = length($str);
51
    for(my $i = 0; $i < $length; $i++) {
52
      $value = ($value << 4) ^ ($value >> 28) ^ ord(substr($str, $i, 1));
53
    }
54
  }
55
 
56
  return $value;
57
}
58
 
59
1;