oscar64/include/oscar.c

89 lines
1.1 KiB
C

#include "oscar.h"
const char * oscar_expand_lzo(char * dp, const char * sp)
{
char cmd = sp[0];
do
{
const char * cp;
if (cmd & 0x80)
{
cp = dp - sp[1];
cmd &= 0x7f;
sp += 2;
}
else
{
sp += 1;
cp = sp;
sp += cmd;
}
char n = 0x00;
do {
dp[n] = cp[n];
n++;
} while (n != cmd);
dp += cmd;
cmd = sp[0];
} while (cmd);
return sp + 1;
}
const char * oscar_expand_rle(char * dp, const char * sp)
{
char cmd = sp[0];
do
{
if (cmd & 0x80)
{
char rep = (cmd & 0x70) >> 4;
char c = sp[1];
for(signed char i=rep; i>=0; i--)
dp[i] = c;
rep++;
sp += 2;
dp += rep;
cmd &= 0x0f;
for(signed char i=cmd; i>=0; i--)
dp[i] = sp[i];
cmd++;
sp += cmd;
dp += cmd;
}
else if (cmd & 0x40)
{
cmd &= 0x3f;
sp ++;
for(signed char i=cmd; i>=0; i--)
dp[i] = sp[i];
cmd++;
sp += cmd;
dp += cmd;
}
else
{
char c = sp[1];
for(signed char i=cmd; i>=0; i--)
dp[i] = c;
cmd++;
sp += 2;
dp += cmd;
}
cmd = sp[0];
} while (cmd)
return sp + 1;
}