17 |
|
#define putc putc_unlocked |
18 |
|
#endif |
19 |
|
|
20 |
< |
/* get corresponding error message */ |
20 |
> |
/* Get corresponding error message */ |
21 |
|
const char * |
22 |
|
BMPerrorMessage(int ec) |
23 |
|
{ |
38 |
|
return "Unknown BMP error"; |
39 |
|
} |
40 |
|
|
41 |
< |
/* check than header is sensible */ |
41 |
> |
/* Check that header is sensible */ |
42 |
|
static int |
43 |
|
BMPheaderOK(const BMPHeader *hdr) |
44 |
|
{ |
89 |
|
/* get next byte from reader */ |
90 |
|
#define rdbyte(c,br) ((br)->fpos += (c=(*(br)->cget)((br)->c_data))!=EOF, c) |
91 |
|
|
92 |
< |
/* read n bytes */ |
92 |
> |
/* Read n bytes */ |
93 |
|
static int |
94 |
|
rdbytes(char *bp, uint32 n, BMPReader *br) |
95 |
|
{ |
103 |
|
return BIR_OK; |
104 |
|
} |
105 |
|
|
106 |
< |
/* read 32-bit integer in littlendian order */ |
106 |
> |
/* Read 32-bit integer in littlendian order */ |
107 |
|
static int32 |
108 |
|
rdint32(BMPReader *br) |
109 |
|
{ |
117 |
|
return i; /* -1 on EOF */ |
118 |
|
} |
119 |
|
|
120 |
< |
/* read 16-bit unsigned integer in littlendian order */ |
120 |
> |
/* Read 16-bit unsigned integer in littlendian order */ |
121 |
|
static int |
122 |
|
rduint16(BMPReader *br) |
123 |
|
{ |
129 |
|
return i; /* -1 on EOF */ |
130 |
|
} |
131 |
|
|
132 |
< |
/* seek on reader or return 0 (BIR_OK) on success */ |
132 |
> |
/* Seek on reader or return 0 (BIR_OK) on success */ |
133 |
|
static int |
134 |
|
rdseek(uint32 pos, BMPReader *br) |
135 |
|
{ |
141 |
|
return BIR_OK; |
142 |
|
} |
143 |
|
|
144 |
< |
/* open BMP stream for reading and get first scanline */ |
144 |
> |
/* Open BMP stream for reading and get first scanline */ |
145 |
|
BMPReader * |
146 |
|
BMPopenReader(int (*cget)(void *), int (*seek)(uint32, void *), void *c_data) |
147 |
|
{ |
248 |
|
return NULL; |
249 |
|
} |
250 |
|
|
251 |
< |
/* determine if image is grayscale */ |
251 |
> |
/* Determine if image is grayscale */ |
252 |
|
int |
253 |
|
BMPisGrayscale(const BMPHeader *hdr) |
254 |
|
{ |
265 |
|
return 1; /* all colors neutral in map */ |
266 |
|
} |
267 |
|
|
268 |
< |
/* read and decode next BMP scanline */ |
268 |
> |
/* Read and decode next BMP scanline */ |
269 |
|
int |
270 |
|
BMPreadScanline(BMPReader *br) |
271 |
|
{ |
364 |
|
return BIR_OK; |
365 |
|
} |
366 |
|
|
367 |
< |
/* read a specific scanline */ |
367 |
> |
/* Read a specific scanline */ |
368 |
|
int |
369 |
|
BMPseekScanline(int y, BMPReader *br) |
370 |
|
{ |
407 |
|
return BIR_OK; |
408 |
|
} |
409 |
|
|
410 |
< |
/* get ith pixel from last scanline */ |
410 |
> |
/* Get ith pixel from last scanline */ |
411 |
|
RGBquad |
412 |
|
BMPdecodePixel(int i, const BMPReader *br) |
413 |
|
{ |
453 |
|
case 8: |
454 |
|
return br->hdr->palette[br->scanline[i]]; |
455 |
|
case 1: |
456 |
< |
return br->hdr->palette[br->scanline[i>>3]>>((7-i)&7) & 1]; |
456 |
> |
return br->hdr->palette[br->scanline[i>>3]>>(7-(i&7)) & 1]; |
457 |
|
case 4: |
458 |
|
return br->hdr->palette[br->scanline[i>>1]>>(i&1?4:0) & 0xf]; |
459 |
|
case 16: |
471 |
|
return black; /* should never happen */ |
472 |
|
} |
473 |
|
|
474 |
< |
/* free BMP reader resources */ |
474 |
> |
/* Free BMP reader resources */ |
475 |
|
void |
476 |
|
BMPfreeReader(BMPReader *br) |
477 |
|
{ |
508 |
|
return fseek((FILE *)p, (long)pos, 0); |
509 |
|
} |
510 |
|
|
511 |
< |
/* allocate uncompressed (24-bit) RGB header */ |
511 |
> |
/* Allocate uncompressed (24-bit) RGB header */ |
512 |
|
BMPHeader * |
513 |
|
BMPtruecolorHeader(int xr, int yr, int infolen) |
514 |
|
{ |
531 |
|
return hdr; |
532 |
|
} |
533 |
|
|
534 |
< |
/* allocate color-mapped header (defaults to minimal grayscale) */ |
534 |
> |
/* Allocate color-mapped header (defaults to minimal grayscale) */ |
535 |
|
BMPHeader * |
536 |
|
BMPmappedHeader(int xr, int yr, int infolen, int ncolors) |
537 |
|
{ |
576 |
|
((bw)->flen = (bw)->fpos) : \ |
577 |
|
(bw)->fpos ) |
578 |
|
|
579 |
< |
/* write out a string of bytes */ |
579 |
> |
/* Write out a string of bytes */ |
580 |
|
static void |
581 |
|
wrbytes(char *bp, uint32 n, BMPWriter *bw) |
582 |
|
{ |
584 |
|
wrbyte(*bp++, bw); |
585 |
|
} |
586 |
|
|
587 |
< |
/* write 32-bit integer in littlendian order */ |
587 |
> |
/* Write 32-bit integer in littlendian order */ |
588 |
|
static void |
589 |
|
wrint32(int32 i, BMPWriter *bw) |
590 |
|
{ |
594 |
|
wrbyte(i>>24 & 0xff, bw); |
595 |
|
} |
596 |
|
|
597 |
< |
/* write 16-bit unsigned integer in littlendian order */ |
597 |
> |
/* Write 16-bit unsigned integer in littlendian order */ |
598 |
|
static void |
599 |
|
wruint16(uint16 ui, BMPWriter *bw) |
600 |
|
{ |
602 |
|
wrbyte(ui>>8 & 0xff, bw); |
603 |
|
} |
604 |
|
|
605 |
< |
/* seek to the specified file position, returning 0 (BIR_OK) on success */ |
605 |
> |
/* Seek to the specified file position, returning 0 (BIR_OK) on success */ |
606 |
|
static int |
607 |
|
wrseek(uint32 pos, BMPWriter *bw) |
608 |
|
{ |
618 |
|
return BIR_OK; |
619 |
|
} |
620 |
|
|
621 |
< |
/* open BMP stream for writing */ |
621 |
> |
/* Open BMP stream for writing */ |
622 |
|
BMPWriter * |
623 |
|
BMPopenWriter(void (*cput)(int, void *), int (*seek)(uint32, void *), |
624 |
|
void *c_data, BMPHeader *hdr) |
691 |
|
return bw; |
692 |
|
} |
693 |
|
|
694 |
< |
/* find position of next run of 5 or more identical bytes, or 255 if none */ |
694 |
> |
/* Find position of next run of 5 or more identical bytes, or 255 if none */ |
695 |
|
static int |
696 |
|
findNextRun(const int8 *bp, int len) |
697 |
|
{ |
708 |
|
return pos; /* didn't find any */ |
709 |
|
} |
710 |
|
|
711 |
< |
/* write the current scanline */ |
711 |
> |
/* Write the current scanline */ |
712 |
|
int |
713 |
|
BMPwriteScanline(BMPWriter *bw) |
714 |
|
{ |
753 |
|
} |
754 |
|
if (n <= 0) /* was that it? */ |
755 |
|
break; |
756 |
< |
val = *sp; /* output run */ |
757 |
< |
for (cnt = 1; --n && cnt < 255; cnt++) |
758 |
< |
if (*++sp != val) |
756 |
> |
val = *sp++; /* output run */ |
757 |
> |
for (cnt = 1; --n && cnt < 255; cnt++, sp++) |
758 |
> |
if (*sp != val) |
759 |
|
break; |
760 |
|
wrbyte(cnt, bw); |
761 |
|
wrbyte(val, bw); |
775 |
|
return BIR_OK; |
776 |
|
} |
777 |
|
|
778 |
< |
/* free BMP writer resources */ |
778 |
> |
/* Free BMP writer resources */ |
779 |
|
void |
780 |
|
BMPfreeWriter(BMPWriter *bw) |
781 |
|
{ |