Skip to content

Commit

Permalink
Fixed the big while loop condition. Simplified the temporary AL flag …
Browse files Browse the repository at this point in the history
…usages. (Merged into 1 variable since I realized the two don't overlap.)
  • Loading branch information
Brolijah committed May 1, 2019
1 parent 8eed80f commit 1f9d7ce
Showing 1 changed file with 34 additions and 32 deletions.
66 changes: 34 additions & 32 deletions main.c
Original file line number Diff line number Diff line change
Expand Up @@ -173,8 +173,7 @@ size_t ALLZ_Decode(u8** ptr_dst, u8* src, size_t srcSize)
s32 local_var1 = 0; /// Used during ALLZ FLAG 2 decode. Used to copy unencoded bytes.
s32 local_var3 = 0; /// Used during ALLZ FLAG 1 decode. Gets assigned to disp_offset.
s32 local_var5 = 0; /// Used during ALAR FLAG 2 decode. Gets assigned to disp_length.
u8 tempAllzFlag; /// Temporary ALLZ Flag for decoding.
u8 tempAlarFlag; /// Temporary ALAR Flag for decoding.
u8 tempAlFlag; /// Temporary Aqualead Flag for decoding.
s32 tempEncFlag; /// Temporary copy of lzssFlags[0] used to escape loops.
u8* src_temp; /// Temporary copy of encoded_src used to copy duplicate unencoded bytes.

Expand Down Expand Up @@ -222,24 +221,23 @@ size_t ALLZ_Decode(u8** ptr_dst, u8* src, size_t srcSize)

if(encoded_src <= encoded_eof)
{
while((dst + disp_length) <= decoded_eof)
while((dst + disp_length) < decoded_eof)
{
while(lzssFlags[1] == 0)
{
lzssFlags[0] |= *encoded_src++ << lzssFlags[1];
lzssFlags[1] += 8;
}

tempAllzFlag = 0;
tempAlarFlag = 0;
tempAlFlag = 0;
tempEncFlag = lzssFlags[0];
lzssFlags[0] >>= 1;
lzssFlags[1] -= 1;

if( !(tempEncFlag & 0x01) )
{
// DECODE WITH ALLZ FLAG 2
tempAllzFlag = allzFlag2;
tempAlFlag = allzFlag2;
while(1)
{
while(lzssFlags[1] == 0)
Expand All @@ -251,12 +249,12 @@ size_t ALLZ_Decode(u8** ptr_dst, u8* src, size_t srcSize)
lzssFlags[0] >>= 1;
lzssFlags[1] -= 1;
if ( !(tempEncFlag & 0x01) ) break;
++tempAllzFlag;
++tempAlFlag;
}
local_var1 = ALLZ_AnalyzeBlock((s32*)lzssFlags, tempAllzFlag, &encoded_src);
if(tempAllzFlag > allzFlag2)
local_var1 = ALLZ_AnalyzeBlock((s32*)lzssFlags, tempAlFlag, &encoded_src);
if(tempAlFlag > allzFlag2)
{
local_var1 += ((1 << (tempAllzFlag - allzFlag2)) - 1) << allzFlag2;
local_var1 += ((1 << (tempAlFlag - allzFlag2)) - 1) << allzFlag2;
}
++local_var1;
if((dst + disp_length + local_var1) >= decoded_eof) // finish copying bytes and return
Expand All @@ -269,7 +267,7 @@ size_t ALLZ_Decode(u8** ptr_dst, u8* src, size_t srcSize)
} while(--disp_length != 0);
}

if(local_var1) // This is the only copy-to-dst I am uncertain about
if(local_var1)
{
do {
*dst++ = *encoded_src++;
Expand All @@ -281,7 +279,7 @@ size_t ALLZ_Decode(u8** ptr_dst, u8* src, size_t srcSize)

// DECODE WITH ALLZ FLAG 1
src_temp = encoded_src;
tempAllzFlag = allzFlag1;
tempAlFlag = allzFlag1;
encoded_src += local_var1;
while(1)
{
Expand All @@ -294,15 +292,15 @@ size_t ALLZ_Decode(u8** ptr_dst, u8* src, size_t srcSize)
lzssFlags[0] >>= 1;
lzssFlags[1] -= 1;
if ( !(tempEncFlag & 0x01) ) break;
++tempAllzFlag;
++tempAlFlag;
}
local_var3 = ALLZ_AnalyzeBlock((s32*)lzssFlags, tempAllzFlag, &encoded_src);
if(tempAllzFlag > allzFlag1)
local_var3 = ALLZ_AnalyzeBlock((s32*)lzssFlags, tempAlFlag, &encoded_src);
if(tempAlFlag > allzFlag1)
{
local_var3 += (((1 << (tempAllzFlag - allzFlag1)) - 1) << allzFlag1);
local_var3 += (((1 << (tempAlFlag - allzFlag1)) - 1) << allzFlag1);
}
// DECODE WITH ALAR FLAG 2
tempAlarFlag = alarFlag2;
tempAlFlag = alarFlag2;
while(1)
{
while(lzssFlags[1] == 0)
Expand All @@ -314,12 +312,12 @@ size_t ALLZ_Decode(u8** ptr_dst, u8* src, size_t srcSize)
lzssFlags[0] >>= 1;
lzssFlags[1] -= 1;
if ( !(tempEncFlag & 0x01) ) break;
++tempAlarFlag;
++tempAlFlag;
}
local_var5 = ALLZ_AnalyzeBlock((s32*)lzssFlags, tempAlarFlag, &encoded_src);
if(tempAlarFlag > alarFlag2)
local_var5 = ALLZ_AnalyzeBlock((s32*)lzssFlags, tempAlFlag, &encoded_src);
if(tempAlFlag > alarFlag2)
{
local_var5 += (((1 << (tempAlarFlag - alarFlag2)) - 1) << alarFlag2);
local_var5 += (((1 << (tempAlFlag - alarFlag2)) - 1) << alarFlag2);
}
// COPY OVER DECODED BYTES
if(disp_length)
Expand All @@ -339,7 +337,7 @@ size_t ALLZ_Decode(u8** ptr_dst, u8* src, size_t srcSize)

} else {
// DECODE WITH ALLZ FLAG 1
tempAllzFlag = allzFlag1;
tempAlFlag = allzFlag1;
while(1)
{
while(lzssFlags[1] == 0)
Expand All @@ -351,15 +349,15 @@ size_t ALLZ_Decode(u8** ptr_dst, u8* src, size_t srcSize)
lzssFlags[0] >>= 1;
lzssFlags[1] -= 1;
if ( !(tempEncFlag & 0x01) ) break;
++tempAllzFlag;
++tempAlFlag;
}
local_var3 = ALLZ_AnalyzeBlock((s32*)lzssFlags, tempAllzFlag, &encoded_src);
if(tempAllzFlag > allzFlag1)
local_var3 = ALLZ_AnalyzeBlock((s32*)lzssFlags, tempAlFlag, &encoded_src);
if(tempAlFlag > allzFlag1)
{
local_var3 += (((1 << (tempAllzFlag - allzFlag1)) - 1) << allzFlag1);
local_var3 += (((1 << (tempAlFlag - allzFlag1)) - 1) << allzFlag1);
}
// DECODE WITH ALAR FLAG 2
tempAlarFlag = alarFlag2;
tempAlFlag = alarFlag2;
while(1)
{
while(lzssFlags[1] == 0)
Expand All @@ -371,12 +369,12 @@ size_t ALLZ_Decode(u8** ptr_dst, u8* src, size_t srcSize)
lzssFlags[0] >>= 1;
lzssFlags[1] -= 1;
if( !(tempEncFlag & 0x01) ) break;
++tempAlarFlag;
++tempAlFlag;
}
local_var5 = ALLZ_AnalyzeBlock((s32*)lzssFlags, tempAlarFlag, &encoded_src);
if(tempAlarFlag > alarFlag2)
local_var5 = ALLZ_AnalyzeBlock((s32*)lzssFlags, tempAlFlag, &encoded_src);
if(tempAlFlag > alarFlag2)
{
local_var5 += (((1 << (tempAlarFlag - alarFlag2)) - 1) << alarFlag2);
local_var5 += (((1 << (tempAlFlag - alarFlag2)) - 1) << alarFlag2);
}
// COPY OVER DECODED BYTES
if(disp_length)
Expand Down Expand Up @@ -406,7 +404,11 @@ size_t ALLZ_Decode(u8** ptr_dst, u8* src, size_t srcSize)
}
}

return ((dst == decoded_eof) || (dst == (decoded_eof+1))) ? fullSize : 0;
/* printf("DEBUG:\n"
" decoded_dst = 0x%08X\n"
" decoded_eof = 0x%08X\n\n", dst, decoded_eof); */

return (dst == decoded_eof) ? fullSize : 0;
}

s32 ALLZ_AnalyzeBlock(s32* encFlags, u8 alFlag, u8** ptr_encoded_data)
Expand Down

0 comments on commit 1f9d7ce

Please sign in to comment.