mirror of
https://github.com/nzp-team/fteqw.git
synced 2024-11-10 22:51:57 +00:00
Endian fixes to PCX loading.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@1031 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
0fc98d5021
commit
5a459212f1
1 changed files with 30 additions and 19 deletions
|
@ -1102,7 +1102,6 @@ void WritePCXfile (char *filename, qbyte *data, int width, int height,
|
||||||
LoadPCX
|
LoadPCX
|
||||||
============
|
============
|
||||||
*/
|
*/
|
||||||
//fixme: endian issues?
|
|
||||||
qbyte *ReadPCXFile(qbyte *buf, int length, int *width, int *height)
|
qbyte *ReadPCXFile(qbyte *buf, int length, int *width, int *height)
|
||||||
{
|
{
|
||||||
pcx_t *pcx;
|
pcx_t *pcx;
|
||||||
|
@ -1116,36 +1115,43 @@ qbyte *ReadPCXFile(qbyte *buf, int length, int *width, int *height)
|
||||||
|
|
||||||
qbyte *pcx_rgb;
|
qbyte *pcx_rgb;
|
||||||
|
|
||||||
|
unsigned short xmin, ymin, xmax, ymax;
|
||||||
|
|
||||||
//
|
//
|
||||||
// parse the PCX file
|
// parse the PCX file
|
||||||
//
|
//
|
||||||
|
|
||||||
pcx = (pcx_t *)buf;
|
pcx = (pcx_t *)buf;
|
||||||
|
|
||||||
|
xmin = LittleShort(pcx->xmin);
|
||||||
|
ymin = LittleShort(pcx->ymin);
|
||||||
|
xmax = LittleShort(pcx->xmax);
|
||||||
|
ymax = LittleShort(pcx->ymax);
|
||||||
|
|
||||||
if (pcx->manufacturer != 0x0a
|
if (pcx->manufacturer != 0x0a
|
||||||
|| pcx->version != 5
|
|| pcx->version != 5
|
||||||
|| pcx->encoding != 1
|
|| pcx->encoding != 1
|
||||||
|| pcx->bits_per_pixel != 8
|
|| pcx->bits_per_pixel != 8
|
||||||
|| pcx->xmax >= 1024
|
|| xmax >= 1024
|
||||||
|| pcx->ymax >= 1024)
|
|| ymax >= 1024)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
*width = pcx->xmax-pcx->xmin+1;
|
*width = xmax-xmin+1;
|
||||||
*height = pcx->ymax-pcx->ymin+1;
|
*height = ymax-ymin+1;
|
||||||
|
|
||||||
palette = buf + length-768;
|
palette = buf + length-768;
|
||||||
|
|
||||||
data = (char *)(pcx+1);
|
data = (char *)(pcx+1);
|
||||||
|
|
||||||
count = (pcx->xmax+1) * (pcx->ymax+1);
|
count = (xmax+1) * (ymax+1);
|
||||||
pcx_rgb = BZ_Malloc( count * 4);
|
pcx_rgb = BZ_Malloc( count * 4);
|
||||||
|
|
||||||
for (y=0 ; y<=pcx->ymax ; y++)
|
for (y=0 ; y<=ymax ; y++)
|
||||||
{
|
{
|
||||||
pix = pcx_rgb + 4*y*(pcx->xmax+1);
|
pix = pcx_rgb + 4*y*(xmax+1);
|
||||||
for (x=0 ; x<=pcx->xmax ; )
|
for (x=0 ; x<=xmax ; )
|
||||||
{
|
{
|
||||||
dataByte = *data;
|
dataByte = *data;
|
||||||
data++;
|
data++;
|
||||||
|
@ -1176,7 +1182,6 @@ qbyte *ReadPCXFile(qbyte *buf, int length, int *width, int *height)
|
||||||
return pcx_rgb;
|
return pcx_rgb;
|
||||||
}
|
}
|
||||||
|
|
||||||
//fixme: endian issues?
|
|
||||||
qbyte *ReadPCXData(qbyte *buf, int length, int width, int height, qbyte *result)
|
qbyte *ReadPCXData(qbyte *buf, int length, int width, int height, qbyte *result)
|
||||||
{
|
{
|
||||||
pcx_t *pcx;
|
pcx_t *pcx;
|
||||||
|
@ -1188,12 +1193,19 @@ qbyte *ReadPCXData(qbyte *buf, int length, int width, int height, qbyte *result)
|
||||||
int count;
|
int count;
|
||||||
qbyte *data;
|
qbyte *data;
|
||||||
|
|
||||||
|
unsigned short xmin, ymin, xmax, ymax;
|
||||||
|
|
||||||
//
|
//
|
||||||
// parse the PCX file
|
// parse the PCX file
|
||||||
//
|
//
|
||||||
|
|
||||||
pcx = (pcx_t *)buf;
|
pcx = (pcx_t *)buf;
|
||||||
|
|
||||||
|
xmin = LittleShort(pcx->xmin);
|
||||||
|
ymin = LittleShort(pcx->ymin);
|
||||||
|
xmax = LittleShort(pcx->xmax);
|
||||||
|
ymax = LittleShort(pcx->ymax);
|
||||||
|
|
||||||
if (pcx->manufacturer != 0x0a
|
if (pcx->manufacturer != 0x0a
|
||||||
|| pcx->version != 5
|
|| pcx->version != 5
|
||||||
|| pcx->encoding != 1
|
|| pcx->encoding != 1
|
||||||
|
@ -1202,8 +1214,8 @@ qbyte *ReadPCXData(qbyte *buf, int length, int width, int height, qbyte *result)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (width != pcx->xmax-pcx->xmin+1 ||
|
if (width != xmax-xmin+1 ||
|
||||||
height > pcx->ymax-pcx->ymin+1)
|
height > ymax-ymin+1)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1211,12 +1223,12 @@ qbyte *ReadPCXData(qbyte *buf, int length, int width, int height, qbyte *result)
|
||||||
|
|
||||||
data = (char *)(pcx+1);
|
data = (char *)(pcx+1);
|
||||||
|
|
||||||
count = (pcx->xmax+1) * (pcx->ymax+1);
|
count = (xmax+1) * (ymax+1);
|
||||||
|
|
||||||
for (y=0 ; y<height ; y++)
|
for (y=0 ; y<height ; y++)
|
||||||
{
|
{
|
||||||
pix = result + y*(pcx->xmax+1);
|
pix = result + y*(xmax+1);
|
||||||
for (x=0 ; x<=pcx->xmax ; )
|
for (x=0 ; x<=xmax ; )
|
||||||
{
|
{
|
||||||
dataByte = *data;
|
dataByte = *data;
|
||||||
data++;
|
data++;
|
||||||
|
@ -1241,7 +1253,6 @@ qbyte *ReadPCXData(qbyte *buf, int length, int width, int height, qbyte *result)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
//fixme: endian issues?
|
|
||||||
qbyte *ReadPCXPalette(qbyte *buf, int len, qbyte *out)
|
qbyte *ReadPCXPalette(qbyte *buf, int len, qbyte *out)
|
||||||
{
|
{
|
||||||
pcx_t *pcx;
|
pcx_t *pcx;
|
||||||
|
@ -1257,8 +1268,8 @@ qbyte *ReadPCXPalette(qbyte *buf, int len, qbyte *out)
|
||||||
|| pcx->version != 5
|
|| pcx->version != 5
|
||||||
|| pcx->encoding != 1
|
|| pcx->encoding != 1
|
||||||
|| pcx->bits_per_pixel != 8
|
|| pcx->bits_per_pixel != 8
|
||||||
|| pcx->xmax >= 1024
|
|| LittleShort(pcx->xmax) >= 1024
|
||||||
|| pcx->ymax >= 1024)
|
|| LittleShort(pcx->ymax) >= 1024)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue