summaryrefslogtreecommitdiff
path: root/src/renderergl2/tr_image_pcx.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/renderergl2/tr_image_pcx.c')
-rw-r--r--src/renderergl2/tr_image_pcx.c179
1 files changed, 0 insertions, 179 deletions
diff --git a/src/renderergl2/tr_image_pcx.c b/src/renderergl2/tr_image_pcx.c
deleted file mode 100644
index 5e1de51b..00000000
--- a/src/renderergl2/tr_image_pcx.c
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
-===========================================================================
-Copyright (C) 1999-2005 Id Software, Inc.
- 2008 Ludwig Nussel
-
-This file is part of Quake III Arena source code.
-
-Quake III Arena source code is free software; you can redistribute it
-and/or modify it under the terms of the GNU General Public License as
-published by the Free Software Foundation; either version 2 of the License,
-or (at your option) any later version.
-
-Quake III Arena source code is distributed in the hope that it will be
-useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with Quake III Arena source code; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-===========================================================================
-*/
-
-#include "../qcommon/q_shared.h"
-#include "../qcommon/qfiles.h"
-#include "../qcommon/qcommon.h"
-#include "../renderercommon/tr_public.h"
-extern refimport_t ri;
-
-/*
-========================================================================
-
-PCX files are used for 8 bit images
-
-========================================================================
-*/
-
-typedef struct {
- char manufacturer;
- char version;
- char encoding;
- char bits_per_pixel;
- unsigned short xmin,ymin,xmax,ymax;
- unsigned short hres,vres;
- unsigned char palette[48];
- char reserved;
- char color_planes;
- unsigned short bytes_per_line;
- unsigned short palette_type;
- unsigned short hscreensize, vscreensize;
- char filler[54];
- unsigned char data[];
-} pcx_t;
-
-void R_LoadPCX ( const char *filename, byte **pic, int *width, int *height)
-{
- union {
- byte *b;
- void *v;
- } raw;
- byte *end;
- pcx_t *pcx;
- int len;
- unsigned char dataByte = 0, runLength = 0;
- byte *out, *pix;
- unsigned short w, h;
- byte *pic8;
- byte *palette;
- int i;
- unsigned size = 0;
-
- if (width)
- *width = 0;
- if (height)
- *height = 0;
- *pic = NULL;
-
- //
- // load the file
- //
- len = ri.FS_ReadFile( ( char * ) filename, &raw.v);
- if (!raw.b || len < 0) {
- return;
- }
-
- if((unsigned)len < sizeof(pcx_t))
- {
- ri.Printf (PRINT_ALL, "PCX truncated: %s\n", filename);
- ri.FS_FreeFile (raw.v);
- return;
- }
-
- //
- // parse the PCX file
- //
- pcx = (pcx_t *)raw.b;
- end = raw.b+len;
-
- w = LittleShort(pcx->xmax)+1;
- h = LittleShort(pcx->ymax)+1;
- size = w*h;
-
- if (pcx->manufacturer != 0x0a
- || pcx->version != 5
- || pcx->encoding != 1
- || pcx->color_planes != 1
- || pcx->bits_per_pixel != 8
- || w >= 1024
- || h >= 1024)
- {
- ri.Printf (PRINT_ALL, "Bad or unsupported pcx file %s (%dx%d@%d)\n", filename, w, h, pcx->bits_per_pixel);
- return;
- }
-
- pix = pic8 = ri.Malloc ( size );
-
- raw.b = pcx->data;
- // FIXME: should use bytes_per_line but original q3 didn't do that either
- while(pix < pic8+size)
- {
- if(runLength > 0) {
- *pix++ = dataByte;
- --runLength;
- continue;
- }
-
- if(raw.b+1 > end)
- break;
- dataByte = *raw.b++;
-
- if((dataByte & 0xC0) == 0xC0)
- {
- if(raw.b+1 > end)
- break;
- runLength = dataByte & 0x3F;
- dataByte = *raw.b++;
- }
- else
- runLength = 1;
- }
-
- if(pix < pic8+size)
- {
- ri.Printf (PRINT_ALL, "PCX file truncated: %s\n", filename);
- ri.FS_FreeFile (pcx);
- ri.Free (pic8);
- }
-
- if (raw.b-(byte*)pcx >= end - (byte*)769 || end[-769] != 0x0c)
- {
- ri.Printf (PRINT_ALL, "PCX missing palette: %s\n", filename);
- ri.FS_FreeFile (pcx);
- ri.Free (pic8);
- return;
- }
-
- palette = end-768;
-
- pix = out = ri.Malloc(4 * size );
- for (i = 0 ; i < size ; i++)
- {
- unsigned char p = pic8[i];
- pix[0] = palette[p*3];
- pix[1] = palette[p*3 + 1];
- pix[2] = palette[p*3 + 2];
- pix[3] = 255;
- pix += 4;
- }
-
- if (width)
- *width = w;
- if (height)
- *height = h;
-
- *pic = out;
-
- ri.FS_FreeFile (pcx);
- ri.Free (pic8);
-}