Quote from: UserLoser on July 17, 2008, 06:46 PM
that version of checkrevision isn't used no more
Where would I find one that is used?
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Show posts MenuQuote from: UserLoser on July 17, 2008, 06:46 PM
that version of checkrevision isn't used no more
int ExtractMPQNumber(char* mpqName)
{
if (((mpqName[0] == 'l') || (mpqName[0] == 'L')) && ((mpqName[1] == 'o') || (mpqName[1] == 'O')) && ((mpqName[2] == 'c') || (mpqName[2] == 'C')))
{return -1;}
if (strlen(mpqName) < 7)
{return -1;}
char Number[2];
Number[1]='\0';
if (((mpqName[0] == 'v') || (mpqName[0] == 'V')) && ((mpqName[1] == 'e') || (mpqName[1] == 'E')) && ((mpqName[2] == 'r') || (mpqName[2] == 'R')))
{
Number[0]=mpqName[9];
}
else // IX86VerX.mpq
{
Number[0]=mpqName[7];
}
return atoi(Number);
}
int DoCheckRevision(char* valueString,char* fileA,char* fileB,char* fileC,int mpqNumber)
{
printf("%d\n",mpqNumber);
unsigned int values[4] = {0};
int opValueDest[4] = {0};
int opValueSrc1[4] = {0};
char operation[4] = {0};
int opValueSrc2[4] = {0};
int currentFormula = 0;
char tokens[12][16];
int AtToken = 0;
int AtTokenChar = 0;
int AtNow = 0;
while (valueString[AtNow] != '\0')
{
if (valueString[AtNow] == ' ')
{
tokens[AtToken++][AtTokenChar++] = '\0';
AtTokenChar = 0;
}
else
{
tokens[AtToken][AtTokenChar++] = valueString[AtNow];
}
AtNow++;
}
tokens[AtToken++][AtTokenChar] = '\0';
for (int i = 0; i < AtToken; i++)
{
printf("TokenSTR %s\n",tokens[i]);
char LeftStr[16];
char RightStr[16];
bool HasEqualSign = false;
int RightStrAt=0;
for (int ii = 0; ii < 32; ii++)
{
if (tokens[i][ii]=='\0')
{break;}
else if (tokens[i][ii]=='=')
{LeftStr[ii] = '\0';HasEqualSign=true;}
else if (HasEqualSign == true)
{RightStr[RightStrAt++] = tokens[i][ii];}
else {LeftStr[ii] = tokens[i][ii];}
}
RightStr[RightStrAt++] = '\0';
printf("Left STR: %s Right STR: %s HasEqual %d\n",LeftStr,RightStr,HasEqualSign);
if (HasEqualSign == true)
{
int variable = getNum(LeftStr[0]);
if ((RightStr[0]=='a')||(RightStr[0]=='A')||(RightStr[0]=='b')||(RightStr[0]=='B')||(RightStr[0]=='c')||(RightStr[0]=='C')||(RightStr[0]=='s')||(RightStr[0]=='S'))
{
opValueDest[currentFormula] = variable;
opValueSrc1[currentFormula] = getNum(RightStr[0]);
operation[currentFormula] = RightStr[1];
opValueSrc2[currentFormula] = getNum(RightStr[2]);
currentFormula++;
}
else
{
char lastnum[2];lastnum[1]='\0';lastnum[0]=RightStr[strlen(RightStr)-1];RightStr[strlen(RightStr)-1]='\0';
values[variable] = (atoi(RightStr)*10)+atoi(lastnum);
}
}
}
printf("Var0 %u Var1 %u Var2 %u Var3 %u\n",values[0],values[1],values[2],values[3]);
// Now we actually do the hashing for each file
// Start by hashing A by the hashcode
values[0] ^= hashcodes[mpqNumber];
ifstream::pos_type size;
unsigned char * memblock[3];
int FileSize[3] = {0};
int BufferSize[3] ={0};
for (int i = 0; i < 3; i++)
{
ifstream file;
if (i==0)
{file.open(fileA, ios::in|ios::binary|ios::ate);}
if (i==1)
{file.open(fileB, ios::in|ios::binary|ios::ate);}
if (i==2)
{file.open(fileC, ios::in|ios::binary|ios::ate);}
if (file.is_open())
{
size = file.tellg();
memblock[i] = new unsigned char [(int)size+1025];
file.seekg (0, ios::beg);
file.read ((char *)memblock[i], (int)size);
FileSize[i] = (int)size;
printf("the complete file content is in memory %u\n",FileSize[i]);
}
if ((FileSize[i] % 1024) == 0)
{
BufferSize[i] = FileSize[i];
}
else
{
int paddingBytes = (1024 - (FileSize[i] % 1024));
BufferSize[i] = FileSize[i] + paddingBytes;
unsigned char currentPaddingByte = 0xff;
for (int j = FileSize[i]; j < BufferSize[i]; j++)
{
memblock[i][j] = currentPaddingByte--;
}
}
for (int j = 0; j < BufferSize[i]; j += 4)
{
values[3] = ((int)memblock[i][3+j])+(((int)memblock[i][2+j])*256)+(((int)memblock[i][1+j])*65536)+(((int)memblock[i][0+j])*16777216);
for (int k = 0; k < currentFormula; k++)
{
switch (operation[k])
{
case '+':
values[opValueDest[k]] = values[opValueSrc1[k]] + values[opValueSrc2[k]];
break;
case '-':
values[opValueDest[k]] = values[opValueSrc1[k]] - values[opValueSrc2[k]];
break;
case '^':
values[opValueDest[k]] = values[opValueSrc1[k]] ^ values[opValueSrc2[k]];
break;
case '*':
values[opValueDest[k]] = values[opValueSrc1[k]] * values[opValueSrc2[k]];
break;
case '/':
values[opValueDest[k]] = values[opValueSrc1[k]] / values[opValueSrc2[k]];
break;
}
}
}
file.close();
}
return (int)values[2];
}
int getNum(char c)
{
if (c == 'S')
{return 3;}
else
{return c - 'A';}
}
Page created in 0.287 seconds with 16 queries.