git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Usermode/Libraries - Hacks to get SDL ver of AxWin3 working
[tpg/acess2.git]
/
Usermode
/
Libraries
/
libimage_sif.so_src
/
main.c
diff --git
a/Usermode/Libraries/libimage_sif.so_src/main.c
b/Usermode/Libraries/libimage_sif.so_src/main.c
index
c15652e
..
a515856
100644
(file)
--- a/
Usermode/Libraries/libimage_sif.so_src/main.c
+++ b/
Usermode/Libraries/libimage_sif.so_src/main.c
@@
-6,6
+6,9
@@
#include <string.h>
#include <image.h>
//#include <image_sif.h>
#include <string.h>
#include <image.h>
//#include <image_sif.h>
+#include <acess/sys.h> // _SysDebug
+
+#define _SysDebug(...) do{}while(0)
// === STRUCTURES ===
struct sHeader
// === STRUCTURES ===
struct sHeader
@@
-34,7
+37,7
@@
tImage *Image_SIF_Parse(void *Buffer, size_t Size)
int bRevOrder;
int fileOfs = 0;
int comp, fmt;
int bRevOrder;
int fileOfs = 0;
int comp, fmt;
- int sampleSize
= 4
;
+ int sampleSize;
struct sHeader *hdr = Buffer;
_SysDebug("Image_SIF_Parse: (Buffer=%p, Size=0x%x)", Buffer, Size);
struct sHeader *hdr = Buffer;
_SysDebug("Image_SIF_Parse: (Buffer=%p, Size=0x%x)", Buffer, Size);
@@
-85,6
+88,8
@@
tImage *Image_SIF_Parse(void *Buffer, size_t Size)
ret->Width = w;
ret->Height = h;
ret->Format = fmt;
ret->Width = w;
ret->Height = h;
ret->Format = fmt;
+ for( ofs = 0; ofs < w*h*sampleSize; ofs ++ )
+ ret->Data[ofs] = 255;
switch(comp)
{
switch(comp)
{
@@
-102,39
+107,38
@@
tImage *Image_SIF_Parse(void *Buffer, size_t Size)
// (1 Flag, 7-bit size, 32-bit value)
case 1:
ofs = 0;
// (1 Flag, 7-bit size, 32-bit value)
case 1:
ofs = 0;
- while( ofs < w*h )
+ while( ofs < w*h
*sampleSize
)
{
uint8_t len;
{
uint8_t len;
- if( fileOfs + 1 > Size ) return ret;
- len = *(uint8_t*)Buffer+fileOfs; fileOfs += 1;
+ if( fileOfs + 1 > Size )
+ return ret;
+ len = ((uint8_t*)Buffer)[fileOfs++];
// Verbatim
if(len & 0x80) {
len &= 0x7F;
// Verbatim
if(len & 0x80) {
len &= 0x7F;
- if( fileOfs + len*sampleSize > Size ) {
- memcpy(ret->Data + ofs*sampleSize, Buffer+fileOfs, Size-fileOfs);
- return ret;
+ while( len -- )
+ {
+ if( fileOfs + sampleSize > Size )
+ return ret;
+ memcpy(ret->Data+ofs, Buffer+fileOfs, sampleSize);
+ ofs += sampleSize;
+ fileOfs += sampleSize;
}
}
- else {
- memcpy(ret->Data + ofs*sampleSize, Buffer+fileOfs, len*sampleSize);
- }
- ofs += len;
}
// RLE
else {
}
// RLE
else {
- uint8_t tmp[sampleSize];
-
- if( fileOfs + sampleSize > Size ) return ret;
-
- for(i=0;i<sampleSize;i++)
- tmp[i] = *(uint8_t*)Buffer+fileOfs; fileOfs += 1;
+ if( fileOfs + sampleSize > Size )
+ return ret;
- i = 0;
-
while(len--)
{
- for(i=0;i<sampleSize;i++)
-
ret->Data[ofs++] = tmp[i]
;
+ while( len -- )
+ {
+ memcpy(ret->Data+ofs, Buffer+fileOfs, sampleSize);
+
ofs += sampleSize
;
}
}
+ fileOfs += sampleSize;
}
}
}
}
+ _SysDebug("Image_SIF_Parse: Complete at %i bytes", fileOfs);
return ret;
// Channel 1.7.8 RLE
return ret;
// Channel 1.7.8 RLE
@@
-148,31
+152,22
@@
tImage *Image_SIF_Parse(void *Buffer, size_t Size)
{
uint8_t len, val;
if( fileOfs + 1 > Size ) return ret;
{
uint8_t len, val;
if( fileOfs + 1 > Size ) return ret;
- len =
*(uint8_t*)Buffer+fileOfs; fileOfs += 1
;
+ len =
((uint8_t*)Buffer)[fileOfs++]
;
if(len & 0x80) {
len &= 0x7F;
while(len--) {
if( fileOfs + 1 > Size ) return ret;
if(len & 0x80) {
len &= 0x7F;
while(len--) {
if( fileOfs + 1 > Size ) return ret;
- val = *(uint8_t*)Buffer+fileOfs; fileOfs += 1;
- if(i == 0)
- ret->Data[ofs] = val;
- else
- ret->Data[ofs] |= val;
+ val = ((uint8_t*)Buffer)[fileOfs++];
+ ret->Data[ofs] = val;
ofs += sampleSize;
}
}
else {
if( fileOfs + 1 > Size ) return ret;
ofs += sampleSize;
}
}
else {
if( fileOfs + 1 > Size ) return ret;
- val = *(uint8_t*)Buffer+fileOfs; fileOfs += 1;
- if(i == 0) {
- while(len--) {
- ret->Data[ofs] = val; ofs += sampleSize;
- }
- }
- else {
- while(len--) {
- ret->Data[ofs] |= val; ofs += sampleSize;
- }
+ val = ((uint8_t*)Buffer)[fileOfs++];
+ while(len--) {
+ ret->Data[ofs] = val;
+ ofs += sampleSize;
}
}
}
}
}
}
UCC
git Repository :: git.ucc.asn.au