47 if (img_cfp == NULL) {
49 char *
p = strchr( filename,
'.' );
53 PCXfile =
cfopen( filename ,
"rb" );
74 for (i=0; i<16; i++ ){
82 for (i=0; i<60; i++ ){
93 if (w) *w = header.
Xmax - header.
Xmin + 1;
94 if (h) *h = header.
Ymax - header.
Ymin + 1;
99 cfread( pal, 3, 256, PCXfile );
210 #if BYTE_ORDER == BIG_ENDIAN
223 int buffer_size, buffer_pos;
232 strcpy_s( filename, real_filename );
233 char *
p = strchr( filename,
'.' );
268 xsize = header.
Xmax - header.
Xmin + 1;
269 ysize = header.
Ymax - header.
Ymin + 1;
275 cfread( palette, 1, (3 * 256), PCXfile );
283 buffer_size =
cfread( buffer, 1, buffer_size, PCXfile );
287 for (row=0; row<ysize;row++) {
292 data = buffer[buffer_pos++];
293 if ( buffer_pos == buffer_size ) {
294 buffer_size =
cfread( buffer, 1, buffer_size, PCXfile );
295 Assert( buffer_size > 0 );
298 if ((data & 0xC0) == 0xC0) {
300 data = buffer[buffer_pos++];
301 if ( buffer_pos == buffer_size ) {
302 buffer_size =
cfread( buffer, 1, buffer_size, PCXfile );
303 Assert( buffer_size > 0 );
313 if ( byte_size == 1 ) {
317 if ( (byte_size == 2) && aabitmap ) {
324 g = palette[data*3 + 1];
325 b = palette[data*3 + 2];
329 memset(&bit_32, 0,
sizeof(
COLOR32));
332 if ( (byte_size == 2) && nondark ) {
341 if ( (0 == (
int)palette[data*3]) && (255 == (
int)palette[data*3+1]) && (0 == (
int)palette[data*3+2]) ) {
343 g = (byte_size == 4) ? 0 : 255;
349 if ( byte_size == 2 ) {
354 *((
ushort*)pixdata) = bit_16;
357 else if ( byte_size == 4 ) {
359 memset(&bit_32, 0,
sizeof(
COLOR32));
372 pixdata += byte_size;
379 org_data += (xsize * byte_size);
392 if ( (cnt==1) && (0xc0 != (0xc0 & byt)) ) {
393 if(EOF == putc((
int)byt, fid))
397 if(EOF == putc((
int)0xC0 | cnt, fid))
399 if(EOF == putc((
int)byt, fid))
410 ubyte this_ptr, last;
419 for (srcIndex = 1; srcIndex < inLen; srcIndex++) {
420 this_ptr = *(++inBuff);
421 if (this_ptr == last) {
423 if (runCount == 63) {
464 strcpy_s( filename, real_filename );
465 char *
p = strchr( filename,
'.' );
469 memset( &header, 0,
sizeof(
PCXHeader ) );
476 header.
Xmax = (short)(w-1);
477 header.
Ymax = (short)(h-1);
482 PCXfile = fopen( filename ,
"wb" );
486 if ( fwrite( &header,
sizeof(
PCXHeader ), 1, PCXfile ) != 1 ) {
491 for (i=0; i<
h; i++ ) {
500 if (fwrite( &data, 1, 1, PCXfile )!=1) {
509 retval = fwrite( palette, 768, 1, PCXfile );
527 "Error opening file.\0"
528 "Couldn't read PCX header.\0"
529 "Unsupported PCX version.\0"
530 "Error reading data.\0"
531 "Couldn't find palette information.\0"
532 "Error writing data.\0"
541 while (error_number--) {
int pcx_read_bitmap(const char *real_filename, ubyte *org_data, ubyte *pal, int byte_size, int aabitmap, int nondark, int cf_type)
GLfloat GLfloat GLfloat GLfloat h
int cfread(void *buf, int elsize, int nelem, CFILE *fp)
char pcx_error_messages[]
#define PCX_ERROR_WRONG_VERSION
#define PCX_ERROR_WRITING
GLenum GLenum GLvoid * row
GLdouble GLdouble GLdouble r
void(* bm_set_components)(ubyte *pixel, ubyte *r, ubyte *g, ubyte *b, ubyte *a)
Functional pointer that references any of the bm_set_components functions.
char * pcx_errormsg(int error_number)
GLboolean GLboolean GLboolean GLboolean a
#define PCX_ERROR_OPENING
int pcx_read_header(const char *real_filename, CFILE *img_cfp, int *w, int *h, int *bpp, ubyte *pal)
int pcx_encode_line(ubyte *inBuff, int inLen, FILE *fp)
GLboolean GLboolean GLboolean b
int pcx_encode_byte(ubyte byt, ubyte cnt, FILE *fid)
GLubyte GLubyte GLubyte GLubyte w
int palman_is_nondarkening(int r, int g, int b)
GLenum GLsizei GLenum GLenum const GLvoid * data
int cfclose(CFILE *cfile)
int pcx_write_bitmap(const char *real_filename, int w, int h, ubyte **row_ptrs, ubyte *palette)
#define PCX_ERROR_NO_HEADER
int cfseek(CFILE *fp, int offset, int where)