rendered paste bodyint DecodeStarcraftKey( char *key) {
unsigned long /*r*/n, n2, v, v2/*, keyvalue*/;
char /*c1, */c2, c;
int bValid;
int i;
v = 3;
for (i = 0; i < 12; i++) {
c = key[i];
n = Get_Num_Value(c);
n2 = v * 2;
n ^= n2;
v += n;
}
v %= 10;
if (Get_Hex_Value(v) == key[12])
bValid = 0;
else
bValid = -1;
v = 194;
for (i = 11; /*v >= 7,*/ i >= 0; i--) {
c = key[i];
n = v / 12;
n2 = v % 12;
v -= 17;
c2 = key[n2];
key[i] = c2;
key[n2] = c;
}
v2 = 0x13AC9741;
for (i = 11; i >= 0; i--) {
c = toupper(key[i]);
key[i] = c;
if (c <= '7') {
v = v2;
c2 = v & 0xFF;
c2 &= 7;
c2 ^= c;
v >>= 3;
key[i] = c2;
v2 = v;
} else if (c < 'A') {
c2 = (unsigned char) i;
c2 &= 1;
c2 ^= c;
key[i] = c2;
}
}
return bValid;
}
char Get_Hex_Value( unsigned long v) {
v &= 0xF;
if (v < 10)
return (v + 0x30);
else
return (v + 0x37);
}
int Get_Num_Value( char c) {
c = toupper(c);
if (isdigit(c))
return (c - 0x30);
else
return (c - 0x37);
}