annotate tools/lib64gfx.c @ 1485:06a9c16601d6

Oops. Fix dmC64EncodeBMP() to add loading address to total data size.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 11 May 2018 04:23:47 +0300
parents 1e7f7489d3e0
children bc13af8954d7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1 /*
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2 * Functions for reading and converting various restricted
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
3 * C64/etc and/or indexed/paletted graphics formats.
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
4 * Programmed and designed by Matti 'ccr' Hamalainen
1456
42fb39da7dde Bump copyrights.
Matti Hamalainen <ccr@tnsp.org>
parents: 1448
diff changeset
5 * (C) Copyright 2012-2018 Tecnic Software productions (TNSP)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
6 *
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
7 * Please read file 'COPYING' for information on license and distribution.
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
8 */
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
9 #include "lib64gfx.h"
435
e4a3f183e463 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 433
diff changeset
10
514
c9b9f912acfb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 513
diff changeset
11 #define BUF_SIZE_INITIAL (16*1024)
c9b9f912acfb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 513
diff changeset
12 #define BUF_SIZE_GROW (4*1024)
c9b9f912acfb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 513
diff changeset
13
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
14
1381
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
15 // Based on Pepto's palette, stolen from VICE
1426
4c7b456d7f0b Rename global dmC64Palette to dmDefaultC64Palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 1425
diff changeset
16 DMColor dmDefaultC64Palette[C64_NCOLORS] =
1381
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
17 {
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
18 { 0x00, 0x00, 0x00, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
19 { 0xFF, 0xFF, 0xFF, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
20 { 0x68, 0x37, 0x2B, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
21 { 0x70, 0xA4, 0xB2, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
22 { 0x6F, 0x3D, 0x86, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
23 { 0x58, 0x8D, 0x43, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
24 { 0x35, 0x28, 0x79, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
25 { 0xB8, 0xC7, 0x6F, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
26 { 0x6F, 0x4F, 0x25, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
27 { 0x43, 0x39, 0x00, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
28 { 0x9A, 0x67, 0x59, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
29 { 0x44, 0x44, 0x44, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
30 { 0x6C, 0x6C, 0x6C, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
31 { 0x9A, 0xD2, 0x84, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
32 { 0x6C, 0x5E, 0xB5, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
33 { 0x95, 0x95, 0x95, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
34 };
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
35
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
36 #define DM_RLE_MARKER 1
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
37 #define DM_RLE_MASK 2
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
38
1381
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
39
1461
96c254579b82 Cosmetic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1460
diff changeset
40 #define DM_GET_ADDR_LO(addr) ((addr) & 0xff)
96c254579b82 Cosmetic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1460
diff changeset
41 #define DM_GET_ADDR_HI(addr) (((addr) >> 8) & 0xff)
96c254579b82 Cosmetic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1460
diff changeset
42
96c254579b82 Cosmetic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1460
diff changeset
43
1457
dcff9ac95d3f Add function to set DMImage's palette to default C64 palette and use it.
Matti Hamalainen <ccr@tnsp.org>
parents: 1456
diff changeset
44 void dmSetDefaultC64Palette(DMImage *img)
dcff9ac95d3f Add function to set DMImage's palette to default C64 palette and use it.
Matti Hamalainen <ccr@tnsp.org>
parents: 1456
diff changeset
45 {
dcff9ac95d3f Add function to set DMImage's palette to default C64 palette and use it.
Matti Hamalainen <ccr@tnsp.org>
parents: 1456
diff changeset
46 img->constpal = TRUE;
dcff9ac95d3f Add function to set DMImage's palette to default C64 palette and use it.
Matti Hamalainen <ccr@tnsp.org>
parents: 1456
diff changeset
47 img->pal = dmDefaultC64Palette;
dcff9ac95d3f Add function to set DMImage's palette to default C64 palette and use it.
Matti Hamalainen <ccr@tnsp.org>
parents: 1456
diff changeset
48 img->ncolors = C64_NCOLORS;
dcff9ac95d3f Add function to set DMImage's palette to default C64 palette and use it.
Matti Hamalainen <ccr@tnsp.org>
parents: 1456
diff changeset
49 img->ctransp = 255;
dcff9ac95d3f Add function to set DMImage's palette to default C64 palette and use it.
Matti Hamalainen <ccr@tnsp.org>
parents: 1456
diff changeset
50 }
dcff9ac95d3f Add function to set DMImage's palette to default C64 palette and use it.
Matti Hamalainen <ccr@tnsp.org>
parents: 1456
diff changeset
51
dcff9ac95d3f Add function to set DMImage's palette to default C64 palette and use it.
Matti Hamalainen <ccr@tnsp.org>
parents: 1456
diff changeset
52
1381
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
53 static BOOL dmCompareAddr16(const Uint8 *buf, const size_t offs, const Uint16 addr)
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
54 {
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
55 return buf[offs ] == DM_GET_ADDR_LO(addr) &&
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
56 buf[offs + 1] == DM_GET_ADDR_HI(addr);
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
57 }
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
58
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
59
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
60 int dmC64ImageGetNumBanks(const DMC64ImageFormat *fmt)
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
61 {
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
62 int nbanks = 0;
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
63 for (int i = 0; i < D64_MAX_ENCDEC_OPS; i++)
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
64 {
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
65 const DMC64EncDecOp *op = &fmt->encdecOps[i];
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
66 if (op->type == DT_LAST)
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
67 break;
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
68
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
69 if (op->bank > nbanks)
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
70 nbanks = op->bank;
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
71 }
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
72
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
73 return nbanks + 1;
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
74 }
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
75
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
76
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
77 DMC64Image *dmC64ImageAlloc(const DMC64ImageFormat *fmt)
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
78 {
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
79 DMC64Image *img = dmMalloc0(sizeof(DMC64Image));
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
80
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
81 if (img == NULL)
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
82 return NULL;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
83
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
84 // Initialize image information
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
85 img->width = fmt->width;
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
86 img->height = fmt->height;
1482
df6dacb48970 Rename some struct members, and sanitize handling of DMC64Image allocation more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1478
diff changeset
87 img->chWidth = fmt->chWidth;
df6dacb48970 Rename some struct members, and sanitize handling of DMC64Image allocation more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1478
diff changeset
88 img->chHeight = fmt->chHeight;
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
89 img->nbanks = dmC64ImageGetNumBanks(fmt);
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
90
1482
df6dacb48970 Rename some struct members, and sanitize handling of DMC64Image allocation more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1478
diff changeset
91 img->screenSize = img->chWidth * img->chHeight;
df6dacb48970 Rename some struct members, and sanitize handling of DMC64Image allocation more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1478
diff changeset
92 img->bitmapSize = img->screenSize * 8;
df6dacb48970 Rename some struct members, and sanitize handling of DMC64Image allocation more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1478
diff changeset
93 img->charmemSize = C64_MAX_CHARS * C64_CHR_SIZE;
df6dacb48970 Rename some struct members, and sanitize handling of DMC64Image allocation more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1478
diff changeset
94
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
95 // Allocate banks
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
96 if ((img->color = dmCalloc(img->nbanks, sizeof(Uint8 *))) == NULL ||
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
97 (img->bitmap = dmCalloc(img->nbanks, sizeof(Uint8 *))) == NULL ||
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
98 (img->screen = dmCalloc(img->nbanks, sizeof(Uint8 *))) == NULL ||
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
99 (img->charmem = dmCalloc(img->nbanks, sizeof(Uint8 *))) == NULL)
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
100 goto err;
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
101
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
102 for (int i = 0; i < img->nbanks; i++)
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
103 {
1482
df6dacb48970 Rename some struct members, and sanitize handling of DMC64Image allocation more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1478
diff changeset
104 if ((img->color[i] = dmMalloc0(img->screenSize)) == NULL)
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
105 goto err;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
106
1482
df6dacb48970 Rename some struct members, and sanitize handling of DMC64Image allocation more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1478
diff changeset
107 if ((img->bitmap[i] = dmMalloc0(img->bitmapSize)) == NULL)
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
108 goto err;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
109
1482
df6dacb48970 Rename some struct members, and sanitize handling of DMC64Image allocation more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1478
diff changeset
110 if ((img->screen[i] = dmMalloc0(img->screenSize)) == NULL)
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
111 goto err;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
112
1482
df6dacb48970 Rename some struct members, and sanitize handling of DMC64Image allocation more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1478
diff changeset
113 if ((img->charmem[i] = dmMalloc0(img->charmemSize)) == NULL)
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
114 goto err;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
115 }
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
116
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
117 return img;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
118
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
119 err:
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
120 dmC64ImageFree(img);
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
121 return NULL;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
122 }
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
123
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
124
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
125 void dmC64ImageFree(DMC64Image *img)
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
126 {
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
127 if (img != NULL)
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
128 {
1462
9cb6dd1046bf Fix memory leaks by freeing more things in dmC64ImageFree().
Matti Hamalainen <ccr@tnsp.org>
parents: 1461
diff changeset
129 // Free the allocated areas
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
130 for (int i = 0; i < img->nbanks; i++)
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
131 {
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
132 dmFree(img->color[i]);
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
133 dmFree(img->bitmap[i]);
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
134 dmFree(img->screen[i]);
932
6320bf08e302 Oops, plug a memory leak.
Matti Hamalainen <ccr@tnsp.org>
parents: 931
diff changeset
135 dmFree(img->charmem[i]);
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
136 }
1373
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
137
1462
9cb6dd1046bf Fix memory leaks by freeing more things in dmC64ImageFree().
Matti Hamalainen <ccr@tnsp.org>
parents: 1461
diff changeset
138 // Free the pointers to the areas
9cb6dd1046bf Fix memory leaks by freeing more things in dmC64ImageFree().
Matti Hamalainen <ccr@tnsp.org>
parents: 1461
diff changeset
139 dmFree(img->color);
9cb6dd1046bf Fix memory leaks by freeing more things in dmC64ImageFree().
Matti Hamalainen <ccr@tnsp.org>
parents: 1461
diff changeset
140 dmFree(img->bitmap);
9cb6dd1046bf Fix memory leaks by freeing more things in dmC64ImageFree().
Matti Hamalainen <ccr@tnsp.org>
parents: 1461
diff changeset
141 dmFree(img->screen);
9cb6dd1046bf Fix memory leaks by freeing more things in dmC64ImageFree().
Matti Hamalainen <ccr@tnsp.org>
parents: 1461
diff changeset
142 dmFree(img->charmem);
9cb6dd1046bf Fix memory leaks by freeing more things in dmC64ImageFree().
Matti Hamalainen <ccr@tnsp.org>
parents: 1461
diff changeset
143
9cb6dd1046bf Fix memory leaks by freeing more things in dmC64ImageFree().
Matti Hamalainen <ccr@tnsp.org>
parents: 1461
diff changeset
144 // Extra data ..
1373
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
145 for (int i = 0; i < C64_MAX_EXTRA_DATA; i++)
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
146 dmFree(img->extraData[i]);
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
147
1167
848a88ce7a57 Use dmMemset().
Matti Hamalainen <ccr@tnsp.org>
parents: 1134
diff changeset
148 dmMemset(img, 0, sizeof(DMC64Image));
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
149 dmFree(img);
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
150 }
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
151 }
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
152
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
153
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
154 char * dmC64GetImageTypeString(char *buf, const size_t len, const int type)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
155 {
1425
f08c4ace528d Simplify dmC64GetImageTypeString().
Matti Hamalainen <ccr@tnsp.org>
parents: 1419
diff changeset
156 snprintf(buf, len,
f08c4ace528d Simplify dmC64GetImageTypeString().
Matti Hamalainen <ccr@tnsp.org>
parents: 1419
diff changeset
157 "%s%s%s%s",
1483
1e7f7489d3e0 Improve dmC64GetImageTypeString() and use it also in 64vw.
Matti Hamalainen <ccr@tnsp.org>
parents: 1482
diff changeset
158 (type & D64_FMT_MC) ? "MultiColor " : "HiRes ",
1e7f7489d3e0 Improve dmC64GetImageTypeString() and use it also in 64vw.
Matti Hamalainen <ccr@tnsp.org>
parents: 1482
diff changeset
159 (type & D64_FMT_ILACE) ? "Interlaced " : "",
1e7f7489d3e0 Improve dmC64GetImageTypeString() and use it also in 64vw.
Matti Hamalainen <ccr@tnsp.org>
parents: 1482
diff changeset
160 (type & D64_FMT_FLI) ? "FLI " : "",
1e7f7489d3e0 Improve dmC64GetImageTypeString() and use it also in 64vw.
Matti Hamalainen <ccr@tnsp.org>
parents: 1482
diff changeset
161 (type & D64_FMT_CHAR) ? "CHAR" : ""
1425
f08c4ace528d Simplify dmC64GetImageTypeString().
Matti Hamalainen <ccr@tnsp.org>
parents: 1419
diff changeset
162 );
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
163
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
164 return buf;
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
165 }
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
166
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
167
827
c8beac5313c3 Rename a function.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
168 int dmC64ConvertCSDataToImage(DMImage *img,
410
e4b2f689aff6 Stdint -> SDL types conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 407
diff changeset
169 int xoffs, int yoffs, const Uint8 *buf,
915
ba6b210c9bf4 Cosmetic.
Matti Hamalainen <ccr@tnsp.org>
parents: 912
diff changeset
170 int width, int height, BOOL multicolor,
ba6b210c9bf4 Cosmetic.
Matti Hamalainen <ccr@tnsp.org>
parents: 912
diff changeset
171 int *colors)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
172 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
173 int yc, widthpx = width * 8;
410
e4b2f689aff6 Stdint -> SDL types conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 407
diff changeset
174 Uint8 *dp;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
175
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
176 if (img == NULL)
517
e2a76bb59888 Return better error values, using DMERR_* enums.
Matti Hamalainen <ccr@tnsp.org>
parents: 516
diff changeset
177 return DMERR_NULLPTR;
e2a76bb59888 Return better error values, using DMERR_* enums.
Matti Hamalainen <ccr@tnsp.org>
parents: 516
diff changeset
178
e2a76bb59888 Return better error values, using DMERR_* enums.
Matti Hamalainen <ccr@tnsp.org>
parents: 516
diff changeset
179 if (xoffs < 0 || yoffs < 0 ||
e2a76bb59888 Return better error values, using DMERR_* enums.
Matti Hamalainen <ccr@tnsp.org>
parents: 516
diff changeset
180 xoffs > img->width - widthpx ||
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
181 yoffs > img->height - height)
517
e2a76bb59888 Return better error values, using DMERR_* enums.
Matti Hamalainen <ccr@tnsp.org>
parents: 516
diff changeset
182 return DMERR_INVALID_ARGS;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
183
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
184 dp = img->data + (yoffs * img->pitch) + xoffs;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
185
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
186 if (multicolor)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
187 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
188 for (yc = 0; yc < height; yc++)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
189 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
190 const int offs = yc * width;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
191 int xc;
410
e4b2f689aff6 Stdint -> SDL types conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 407
diff changeset
192 Uint8 *d = dp;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
193
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
194 for (xc = 0; xc < widthpx / 2; xc++)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
195 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
196 const int b = buf[offs + (xc / 4)];
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
197 const int v = 6 - ((xc * 2) & 6);
410
e4b2f689aff6 Stdint -> SDL types conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 407
diff changeset
198 const Uint8 c = colors[(b >> v) & 3];
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
199
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
200 *d++ = c;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
201 *d++ = c;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
202 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
203
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
204 dp += img->pitch;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
205 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
206 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
207 else
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
208 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
209 for (yc = 0; yc < height; yc++)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
210 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
211 const int offs = yc * width;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
212 int xc;
410
e4b2f689aff6 Stdint -> SDL types conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 407
diff changeset
213 Uint8 *d = dp;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
214
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
215 for (xc = 0; xc < widthpx; xc++)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
216 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
217 const int b = buf[offs + (xc / 8)];
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
218 const int v = 7 - (xc & 7);
410
e4b2f689aff6 Stdint -> SDL types conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 407
diff changeset
219 const Uint8 c = colors[(b >> v) & 1];
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
220
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
221 *d++ = c;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
222 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
223
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
224 dp += img->pitch;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
225 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
226 }
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
227
517
e2a76bb59888 Return better error values, using DMERR_* enums.
Matti Hamalainen <ccr@tnsp.org>
parents: 516
diff changeset
228 return DMERR_OK;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
229 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
230
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
231
1466
bc75be0546fc More work on RLE decoder/encoder changes.
Matti Hamalainen <ccr@tnsp.org>
parents: 1465
diff changeset
232 static int dmDecodeGenericRLE(DMGrowBuf *dst, const Uint8 *src, const Uint8 *srcEnd,
bc75be0546fc More work on RLE decoder/encoder changes.
Matti Hamalainen <ccr@tnsp.org>
parents: 1465
diff changeset
233 const Uint8 rleMarker, const Uint8 rleMask1, const Uint8 rleMask2, const int rleType)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
234 {
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
235 int res;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
236
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
237 if ((res = dmGrowBufAlloc(dst, BUF_SIZE_INITIAL, BUF_SIZE_GROW)) != DMERR_OK)
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
238 goto err;
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
239
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
240 // Perform RLE decode
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
241 while (src < srcEnd)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
242 {
1476
f0232684857a Cleanup the RLE decoder.
Matti Hamalainen <ccr@tnsp.org>
parents: 1475
diff changeset
243 Uint8 data = *src++;
f0232684857a Cleanup the RLE decoder.
Matti Hamalainen <ccr@tnsp.org>
parents: 1475
diff changeset
244 int count = 1;
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
245
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
246 switch (rleType)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
247 {
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
248 case DM_RLE_MARKER:
1476
f0232684857a Cleanup the RLE decoder.
Matti Hamalainen <ccr@tnsp.org>
parents: 1475
diff changeset
249 // A simple marker byte RLE variant: [Marker] [count] [data]
f0232684857a Cleanup the RLE decoder.
Matti Hamalainen <ccr@tnsp.org>
parents: 1475
diff changeset
250 if (data == rleMarker)
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
251 {
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
252 if (srcEnd - src < 2)
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
253 {
1466
bc75be0546fc More work on RLE decoder/encoder changes.
Matti Hamalainen <ccr@tnsp.org>
parents: 1465
diff changeset
254 res = DMERR_INVALID_DATA;
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
255 goto err;
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
256 }
1476
f0232684857a Cleanup the RLE decoder.
Matti Hamalainen <ccr@tnsp.org>
parents: 1475
diff changeset
257 count = *src++;
f0232684857a Cleanup the RLE decoder.
Matti Hamalainen <ccr@tnsp.org>
parents: 1475
diff changeset
258 data = *src++;
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
259 }
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
260 break;
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
261
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
262 case DM_RLE_MASK:
1476
f0232684857a Cleanup the RLE decoder.
Matti Hamalainen <ccr@tnsp.org>
parents: 1475
diff changeset
263 // Mask marker RLE: usually high bit(s) of byte mark RLE sequence
f0232684857a Cleanup the RLE decoder.
Matti Hamalainen <ccr@tnsp.org>
parents: 1475
diff changeset
264 // and the lower bits contain the count: [Mask + count] [data]
f0232684857a Cleanup the RLE decoder.
Matti Hamalainen <ccr@tnsp.org>
parents: 1475
diff changeset
265 if ((data & rleMask1) == rleMarker)
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
266 {
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
267 if (srcEnd - src < 1)
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
268 {
1466
bc75be0546fc More work on RLE decoder/encoder changes.
Matti Hamalainen <ccr@tnsp.org>
parents: 1465
diff changeset
269 res = DMERR_INVALID_DATA;
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
270 goto err;
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
271 }
1466
bc75be0546fc More work on RLE decoder/encoder changes.
Matti Hamalainen <ccr@tnsp.org>
parents: 1465
diff changeset
272
1476
f0232684857a Cleanup the RLE decoder.
Matti Hamalainen <ccr@tnsp.org>
parents: 1475
diff changeset
273 count = data & rleMask2;
f0232684857a Cleanup the RLE decoder.
Matti Hamalainen <ccr@tnsp.org>
parents: 1475
diff changeset
274 data = *src++;
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
275 }
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
276 break;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
277 }
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
278
1476
f0232684857a Cleanup the RLE decoder.
Matti Hamalainen <ccr@tnsp.org>
parents: 1475
diff changeset
279 while (count--)
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
280 {
1476
f0232684857a Cleanup the RLE decoder.
Matti Hamalainen <ccr@tnsp.org>
parents: 1475
diff changeset
281 if (!dmGrowBufPutU8(dst, data))
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
282 {
1466
bc75be0546fc More work on RLE decoder/encoder changes.
Matti Hamalainen <ccr@tnsp.org>
parents: 1465
diff changeset
283 res = DMERR_MALLOC;
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
284 goto err;
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
285 }
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
286 }
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
287 }
523
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
288
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
289 res = DMERR_OK;
523
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
290
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
291 err:
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
292 return res;
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
293 }
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
294
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
295
1478
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
296 static int dmDecodeGenericRLEAlloc(DMGrowBuf *dst, const Uint8 *src, const Uint8 *srcEnd,
1466
bc75be0546fc More work on RLE decoder/encoder changes.
Matti Hamalainen <ccr@tnsp.org>
parents: 1465
diff changeset
297 const Uint8 rleMarker, const Uint8 rleMask1, const Uint8 rleMask2, const int rleType)
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
298 {
1478
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
299 int res;
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
300 if ((res = dmGrowBufAlloc(dst, BUF_SIZE_INITIAL, BUF_SIZE_GROW)) != DMERR_OK)
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
301 return res;
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
302
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
303 return dmDecodeGenericRLE(dst, src, srcEnd, rleMarker, rleMask1, rleMask2, rleType);
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
304 }
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
305
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
306
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
307 static BOOL dmEncodeGenericRLESequence(DMGrowBuf *dst, const Uint8 data, const Uint8 count, const Uint8 rleMarker, const int rleType)
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
308 {
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
309 switch (rleType)
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
310 {
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
311 case DM_RLE_MARKER:
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
312 // A simple marker byte RLE variant: [Marker] [count] [data]
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
313 if (!dmGrowBufPutU8(dst, rleMarker) ||
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
314 !dmGrowBufPutU8(dst, count) ||
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
315 !dmGrowBufPutU8(dst, data))
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
316 return FALSE;
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
317 break;
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
318
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
319 case DM_RLE_MASK:
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
320 // Mask marker RLE: usually high bit(s) of byte mark RLE sequence
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
321 // and the lower bits contain the count: [Mask + count] [data]
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
322 if (!dmGrowBufPutU8(dst, rleMarker | count) ||
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
323 !dmGrowBufPutU8(dst, data))
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
324 return FALSE;
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
325 break;
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
326 }
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
327
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
328 return TRUE;
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
329 }
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
330
1466
bc75be0546fc More work on RLE decoder/encoder changes.
Matti Hamalainen <ccr@tnsp.org>
parents: 1465
diff changeset
331
1478
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
332 static int dmEncodeGenericRLE(DMGrowBuf *dst, const Uint8 *src, const Uint8 *srcEnd,
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
333 const Uint8 rleMarker, const Uint8 rleMinCount, const Uint8 rleMaxCount, const int rleType)
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
334 {
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
335 int res;
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
336
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
337 // Perform RLE encoding
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
338 int count = 0, prev;
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
339 while (src < srcEnd)
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
340 {
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
341 Uint8 data = *src++;
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
342
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
343 if ((count >= rleMinCount && data != prev) || count >= rleMaxCount)
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
344 {
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
345 if (!dmEncodeGenericRLESequence(dst, prev, count + 1, rleMarker, rleType))
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
346 {
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
347 res = dmError(DMERR_MALLOC,
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
348 "Could reallocate memory for RLE encoding buffer.\n");
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
349 goto err;
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
350 }
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
351
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
352 count = 1;
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
353 }
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
354
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
355 prev = data;
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
356 }
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
357
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
358 res = DMERR_OK;
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
359
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
360 err:
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
361 return res;
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
362 }
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
363
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
364
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
365 static int dmEncodeGenericRLEAlloc(DMGrowBuf *dst, const Uint8 *src, const Uint8 *srcEnd,
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
366 const Uint8 rleMarker, const Uint8 rleMinCount, const Uint8 rleMaxCount, const int rleType)
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
367 {
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
368 int res;
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
369 if ((res = dmGrowBufAlloc(dst, BUF_SIZE_INITIAL, BUF_SIZE_GROW)) != DMERR_OK)
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
370 return res;
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
371
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
372 return dmEncodeGenericRLE(dst, src, srcEnd, rleMarker, rleMinCount, rleMaxCount, rleType);
523
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
373 }
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
374
519
feaaf0e2ecbe Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 518
diff changeset
375
1376
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
376 static inline Uint8 dmC64GetGenericSCPixel(
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
377 const DMC64Image *img, const int bmoffs, const int scroffs,
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
378 const int vshift, const int vbank, const int vbitmap, const int cbank)
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
379 {
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
380 (void) cbank;
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
381 if ((img->bitmap[vbitmap][bmoffs] >> vshift) & 1)
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
382 return img->screen[vbank][scroffs] >> 4;
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
383 else
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
384 return img->screen[vbank][scroffs] & 15;
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
385 }
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
386
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
387
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
388 static inline Uint8 dmC64GetGenericMCPixel(
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
389 const DMC64Image *img, const int bmoffs, const int scroffs,
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
390 const int vshift, const int vbank, const int vbitmap, const int cbank)
1369
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
391 {
1376
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
392 switch ((img->bitmap[vbitmap][bmoffs] >> vshift) & 3)
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
393 {
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
394 case 0: return img->bgcolor; break;
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
395 case 1: return img->screen[vbank][scroffs] >> 4; break;
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
396 case 2: return img->screen[vbank][scroffs] & 15; break;
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
397 default: return img->color[cbank][scroffs] & 15; break;
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
398 }
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
399 }
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
400
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
401
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
402 static inline Uint8 fmtGetGenericSCPixel(
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
403 const DMC64Image *img, const int bmoffs, const int scroffs,
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
404 const int vshift, const int vbitmap, const int raster)
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
405 {
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
406 (void) raster;
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
407 return dmC64GetGenericSCPixel(img, bmoffs, scroffs, vshift, 0, vbitmap, 0);
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
408 }
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
409
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
410
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
411 static inline Uint8 fmtGetGenericMCPixel(
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
412 const DMC64Image *img, const int bmoffs, const int scroffs,
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
413 const int vshift, const int vbitmap, const int raster)
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
414 {
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
415 (void) raster;
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
416 return dmC64GetGenericMCPixel(img, bmoffs, scroffs, vshift, 0, vbitmap, 0);
1369
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
417 }
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
418
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
419
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
420 static int fmtProbeDrazPaint20Packed(const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt)
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
421 {
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
422 const char *ident = (const char *) buf + 2;
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
423
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
424 if (len > 22 &&
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
425 dmCompareAddr16(buf, 0, fmt->addr) &&
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
426 strncmp(ident, "DRAZPAINT ", 10) == 0 &&
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
427 ident[11] == '.' && (
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
428 (ident[10] == '1' && ident[12] == '4') ||
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
429 (ident[10] == '2' && ident[12] == '0')
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
430 ))
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
431 return DM_PROBE_SCORE_MAX;
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
432
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
433 return DM_PROBE_SCORE_FALSE;
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
434 }
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
435
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
436
523
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
437 static int fmtDecodeDrazPaintPacked(DMC64Image *img, const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt)
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
438 {
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
439 int res;
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
440 DMGrowBuf mem;
523
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
441
1478
d883b4c1cf48 More work on RLE encoding/decoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1476
diff changeset
442 if ((res = dmDecodeGenericRLEAlloc(&mem, buf + 0x0e, buf + len, *(buf + 0x0d), 0, 0, DM_RLE_MARKER)) != DMERR_OK)
523
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
443 goto out;
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
444
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
445 res = dmC64DecodeGenericBMP(img, mem.data, mem.len, fmt);
523
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
446
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
447 out:
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
448 dmGrowBufFree(&mem);
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
449 return res;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
450 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
451
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
452
511
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
453 static int fmtProbeDrazLace10Packed(const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
454 {
511
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
455 if (len > 22 &&
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
456 dmCompareAddr16(buf, 0, fmt->addr) &&
1382
558776ee9603 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1381
diff changeset
457 strncmp((const char *) (buf + 2), "DRAZLACE! 1.0", 13) == 0)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
458 return DM_PROBE_SCORE_MAX;
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
459
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
460 return DM_PROBE_SCORE_FALSE;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
461 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
462
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
463
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
464 static BOOL fmtDrazLaceSetLaceType(DMC64Image *img, const struct _DMC64EncDecOp *op, const Uint8 *buf, const size_t len)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
465 {
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
466 (void) len;
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
467 img->laceType = buf[op->offs] ? D64_ILACE_RES : D64_ILACE_COLOR;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
468 return TRUE;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
469 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
470
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
471
1389
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
472 static int fmtProbeGunPaint(const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt)
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
473 {
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
474 if (len > 0x400 &&
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
475 dmCompareAddr16(buf, 0, fmt->addr) &&
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
476 strncmp((const char *) (buf + 0x3ea), "GUNPAINT (JZ) ", 14) == 0)
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
477 return DM_PROBE_SCORE_MAX;
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
478
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
479 return DM_PROBE_SCORE_FALSE;
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
480 }
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
481
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
482
511
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
483 static int fmtProbeAmicaPaintPacked(const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
484 {
541
7ca6abbbbb40 Use size_t instead of int here to avoid signedness issues.
Matti Hamalainen <ccr@tnsp.org>
parents: 540
diff changeset
485 size_t i, n;
1433
d8a83582f78f Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1426
diff changeset
486
1392
aad9d9e7e1d3 Cleanups, support another variant of FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1390
diff changeset
487 if (len < 2048 || !dmCompareAddr16(buf, 0, fmt->addr))
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
488 return DM_PROBE_SCORE_FALSE;
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
489
494
abb112ac9916 Prevent false positive probes of certain Interpaint files as Amica Paint
Matti Hamalainen <ccr@tnsp.org>
parents: 468
diff changeset
490 // Interpaint Hi-Res gives a false positive
1389
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
491 // as do some GunPaint images ..
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
492 if (len == 9002 || fmtProbeGunPaint(buf, len, fmt) > DM_PROBE_SCORE_GOOD)
494
abb112ac9916 Prevent false positive probes of certain Interpaint files as Amica Paint
Matti Hamalainen <ccr@tnsp.org>
parents: 468
diff changeset
493 return DM_PROBE_SCORE_FALSE;
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
494
533
91e2d0d74e2f Adjust packed Amica paint format probe function to return less false
Matti Hamalainen <ccr@tnsp.org>
parents: 532
diff changeset
495 for (n = 0, i = 2; i < len; i++)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
496 if (buf[i] == 0xC2) n++;
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
497
533
91e2d0d74e2f Adjust packed Amica paint format probe function to return less false
Matti Hamalainen <ccr@tnsp.org>
parents: 532
diff changeset
498 if (n > 50)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
499 return DM_PROBE_SCORE_GOOD;
533
91e2d0d74e2f Adjust packed Amica paint format probe function to return less false
Matti Hamalainen <ccr@tnsp.org>
parents: 532
diff changeset
500 if (n > 25)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
501 return DM_PROBE_SCORE_AVG;
533
91e2d0d74e2f Adjust packed Amica paint format probe function to return less false
Matti Hamalainen <ccr@tnsp.org>
parents: 532
diff changeset
502 if (n > 10)
91e2d0d74e2f Adjust packed Amica paint format probe function to return less false
Matti Hamalainen <ccr@tnsp.org>
parents: 532
diff changeset
503 return DM_PROBE_SCORE_MAYBE;
1369
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
504
533
91e2d0d74e2f Adjust packed Amica paint format probe function to return less false
Matti Hamalainen <ccr@tnsp.org>
parents: 532
diff changeset
505 return DM_PROBE_SCORE_FALSE;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
506 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
507
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
508
410
e4b2f689aff6 Stdint -> SDL types conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 407
diff changeset
509 static int fmtDecodeAmicaPaintPacked(DMC64Image *img, const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
510 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
511 int res;
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
512 DMGrowBuf mem, tmp;
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
513
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
514 // Amica Paint apparently is broken and stores one byte less than it should
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
515 // so we need to do some crappy buffer expansion here ..
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
516 if ((res = dmGrowBufAlloc(&tmp, len + 4, 4)) != DMERR_OK)
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
517 return res;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
518
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
519 tmp.len = len;
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
520 memcpy(tmp.data, buf, len);
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
521 tmp.data[tmp.len++] = 0;
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
522
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
523 // Now do an RLE decode on the enlarged buffer
1466
bc75be0546fc More work on RLE decoder/encoder changes.
Matti Hamalainen <ccr@tnsp.org>
parents: 1465
diff changeset
524 if ((res = dmDecodeGenericRLE(&mem, tmp.data, tmp.data + tmp.len, 0xC2, 0, 0, DM_RLE_MARKER)) != DMERR_OK)
523
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
525 goto out;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
526
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
527 // And finally decode to bitmap struct
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
528 res = dmC64DecodeGenericBMP(img, mem.data, mem.len, fmt);
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
529
523
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
530 out:
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
531 dmGrowBufFree(&tmp);
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
532 dmGrowBufFree(&mem);
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
533 return res;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
534 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
535
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
536
1392
aad9d9e7e1d3 Cleanups, support another variant of FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1390
diff changeset
537 static int fmtProbeFLIDesigner(const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt)
aad9d9e7e1d3 Cleanups, support another variant of FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1390
diff changeset
538 {
aad9d9e7e1d3 Cleanups, support another variant of FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1390
diff changeset
539 if (len == fmt->size &&
aad9d9e7e1d3 Cleanups, support another variant of FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1390
diff changeset
540 (dmCompareAddr16(buf, 0, 0x3c00) || dmCompareAddr16(buf, 0, 0x3ff0)))
aad9d9e7e1d3 Cleanups, support another variant of FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1390
diff changeset
541 return DM_PROBE_SCORE_MAX;
aad9d9e7e1d3 Cleanups, support another variant of FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1390
diff changeset
542
aad9d9e7e1d3 Cleanups, support another variant of FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1390
diff changeset
543 return DM_PROBE_SCORE_FALSE;
aad9d9e7e1d3 Cleanups, support another variant of FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1390
diff changeset
544 }
aad9d9e7e1d3 Cleanups, support another variant of FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1390
diff changeset
545
aad9d9e7e1d3 Cleanups, support another variant of FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1390
diff changeset
546
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
547 static BOOL fmtTruePaintSetLaceType(DMC64Image *img, const struct _DMC64EncDecOp *op, const Uint8 *buf, const size_t len)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
548 {
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
549 (void) op;
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
550 (void) buf;
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
551 (void) len;
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
552 img->laceType = D64_ILACE_RES;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
553 return TRUE;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
554 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
555
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
556
1376
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
557 static Uint8 fmtGetPixelTruePaint(
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
558 const DMC64Image *img, const int bmoffs, const int scroffs,
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
559 const int vshift, const int vbitmap, const int raster)
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
560 {
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
561 (void) raster;
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
562 return dmC64GetGenericMCPixel(img, bmoffs, scroffs, vshift, 0, vbitmap, 0);
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
563 }
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
564
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
565
1369
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
566 #define XX2_MIN_SIZE 4000
531
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
567
943
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
568 static int fmtProbeFormatXX2(const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt)
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
569 {
1369
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
570 if (len >= XX2_MIN_SIZE && len <= XX2_MIN_SIZE + 8 &&
943
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
571 dmCompareAddr16(buf, 0, fmt->addr))
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
572 return DM_PROBE_SCORE_MAYBE;
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
573
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
574 return DM_PROBE_SCORE_FALSE;
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
575 }
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
576
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
577
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
578 static int fmtDecodeFormatXX2(DMC64Image *img, const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt)
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
579 {
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
580 int res;
1377
e274a7e6dff9 Cosmetic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1376
diff changeset
581
1369
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
582 // If there is only data for less than XX2_MIN_SIZE bytes,
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
583 // allocate a buffer of that size and copy data there.
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
584 // Otherwise allocate len bytes.
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
585 size_t nlen = len < XX2_MIN_SIZE ? XX2_MIN_SIZE : len;
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
586 Uint8 *mem = dmMalloc0(nlen);
943
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
587 if (mem == NULL)
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
588 return DMERR_MALLOC;
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
589
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
590 memcpy(mem, buf, len);
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
591 res = dmC64DecodeGenericBMP(img, mem, nlen, fmt);
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
592
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
593 dmFree(mem);
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
594 return res;
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
595 }
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
596
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
597
1384
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
598 #define FUNPAINT2_HEADER_SIZE (0x10)
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
599
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
600 static BOOL fmtProbeFunPaint2Header(const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt)
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
601 {
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
602 return
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
603 len > 30 &&
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
604 dmCompareAddr16(buf, 0, fmt->addr) &&
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
605 strncmp((const char *) (buf + 2), "FUNPAINT (MT) ", 14) == 0;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
606 }
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
607
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
608
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
609 static int fmtProbeFunPaint2Unpacked(const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt)
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
610 {
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
611 if (fmtProbeFunPaint2Header(buf, len, fmt) &&
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
612 buf[2 + 14] == 0)
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
613 return DM_PROBE_SCORE_MAX;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
614 else
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
615 return DM_PROBE_SCORE_FALSE;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
616 }
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
617
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
618
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
619 static int fmtProbeFunPaint2Packed(const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt)
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
620 {
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
621 if (fmtProbeFunPaint2Header(buf, len, fmt) &&
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
622 buf[2 + 14] != 0)
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
623 return DM_PROBE_SCORE_MAX;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
624 else
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
625 return DM_PROBE_SCORE_FALSE;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
626 }
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
627
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
628
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
629 static int fmtDecodeFunPaint2Unpacked(DMC64Image *img, const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt)
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
630 {
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
631 return dmC64DecodeGenericBMP(img, buf + FUNPAINT2_HEADER_SIZE, len - FUNPAINT2_HEADER_SIZE, fmt);
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
632 }
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
633
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
634
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
635 static int fmtDecodeFunPaint2Packed(DMC64Image *img, const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt)
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
636 {
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
637 int res;
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
638 DMGrowBuf mem;
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
639 dmGrowBufInit(&mem);
1384
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
640
1466
bc75be0546fc More work on RLE decoder/encoder changes.
Matti Hamalainen <ccr@tnsp.org>
parents: 1465
diff changeset
641 if ((res = dmDecodeGenericRLE(&mem, buf + FUNPAINT2_HEADER_SIZE, buf + len, *(buf + 15), 0, 0, DM_RLE_MARKER)) != DMERR_OK)
1384
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
642 goto out;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
643
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
644 res = dmC64DecodeGenericBMP(img, mem.data, mem.len, fmt);
1384
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
645
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
646 out:
1463
bde6a66bc2f6 Change dmDecodeGenericRLE() to use DMGrowBuf as output. Also add support
Matti Hamalainen <ccr@tnsp.org>
parents: 1462
diff changeset
647 dmGrowBufFree(&mem);
1384
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
648 return res;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
649 }
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
650
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
651
1471
a988baa5b21f Add stub function to prevent attempts to encode formats that do not support encoding yet.
Matti Hamalainen <ccr@tnsp.org>
parents: 1469
diff changeset
652 static int fmtEncodeStub(DMGrowBuf *buf, const DMC64Image *img, const DMC64ImageFormat *fmt)
a988baa5b21f Add stub function to prevent attempts to encode formats that do not support encoding yet.
Matti Hamalainen <ccr@tnsp.org>
parents: 1469
diff changeset
653 {
a988baa5b21f Add stub function to prevent attempts to encode formats that do not support encoding yet.
Matti Hamalainen <ccr@tnsp.org>
parents: 1469
diff changeset
654 (void) buf;
a988baa5b21f Add stub function to prevent attempts to encode formats that do not support encoding yet.
Matti Hamalainen <ccr@tnsp.org>
parents: 1469
diff changeset
655 (void) img;
a988baa5b21f Add stub function to prevent attempts to encode formats that do not support encoding yet.
Matti Hamalainen <ccr@tnsp.org>
parents: 1469
diff changeset
656 (void) fmt;
a988baa5b21f Add stub function to prevent attempts to encode formats that do not support encoding yet.
Matti Hamalainen <ccr@tnsp.org>
parents: 1469
diff changeset
657
a988baa5b21f Add stub function to prevent attempts to encode formats that do not support encoding yet.
Matti Hamalainen <ccr@tnsp.org>
parents: 1469
diff changeset
658 return dmError(DMERR_NOT_SUPPORTED,
a988baa5b21f Add stub function to prevent attempts to encode formats that do not support encoding yet.
Matti Hamalainen <ccr@tnsp.org>
parents: 1469
diff changeset
659 "Encoding of '%s' format not supported.\n",
a988baa5b21f Add stub function to prevent attempts to encode formats that do not support encoding yet.
Matti Hamalainen <ccr@tnsp.org>
parents: 1469
diff changeset
660 fmt->name);
a988baa5b21f Add stub function to prevent attempts to encode formats that do not support encoding yet.
Matti Hamalainen <ccr@tnsp.org>
parents: 1469
diff changeset
661 }
a988baa5b21f Add stub function to prevent attempts to encode formats that do not support encoding yet.
Matti Hamalainen <ccr@tnsp.org>
parents: 1469
diff changeset
662
a988baa5b21f Add stub function to prevent attempts to encode formats that do not support encoding yet.
Matti Hamalainen <ccr@tnsp.org>
parents: 1469
diff changeset
663
1384
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
664 static Uint8 fmtGetPixelFunPaint2(
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
665 const DMC64Image *img, const int bmoffs, const int scroffs,
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
666 const int vshift, const int vbitmap, const int raster)
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
667 {
1390
e3794fb2df83 FunPaint2 decoding fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 1389
diff changeset
668 const int vbank = (raster & 7) + (vbitmap * 8);
1384
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
669 int vr, vb;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
670 if (raster < 100)
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
671 {
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
672 vb = 0;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
673 vr = raster;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
674 }
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
675 else
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
676 {
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
677 vb = 0;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
678 vr = raster - 100;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
679 }
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
680
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
681 switch ((img->bitmap[vbitmap][bmoffs] >> vshift) & 3)
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
682 {
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
683 case 0: return img->extraData[vb][vr] & 15; break;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
684 case 1: return img->screen[vbank][scroffs] >> 4; break;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
685 case 2: return img->screen[vbank][scroffs] & 15; break;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
686 default: return img->color[0][scroffs] & 15; break;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
687 }
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
688 }
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
689
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
690
1389
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
691 static Uint8 fmtGetPixelGunPaint(
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
692 const DMC64Image *img, const int bmoffs, const int scroffs,
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
693 const int vshift, const int vbitmap, const int raster)
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
694 {
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
695 const int vbank = (raster & 7);// + (vbitmap * 8);
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
696 int vr, vb;
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
697 if (raster < 177)
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
698 {
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
699 vb = 0;
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
700 vr = raster;
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
701 }
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
702 else
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
703 {
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
704 vb = 0;
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
705 vr = raster - 177;
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
706 }
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
707
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
708 switch ((img->bitmap[vbitmap][bmoffs] >> vshift) & 3)
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
709 {
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
710 case 0: return img->extraData[vb][vr] & 15; break;
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
711 case 1: return img->screen[vbank][scroffs] >> 4; break;
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
712 case 2: return img->screen[vbank][scroffs] & 15; break;
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
713 default: return img->color[0][scroffs] & 15; break;
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
714 }
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
715 }
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
716
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
717
1376
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
718 static Uint8 fmtGetPixelBMFLI(
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
719 const DMC64Image *img, const int bmoffs, const int scroffs,
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
720 const int vshift, const int vbitmap, const int raster)
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
721 {
1380
959b34402b81 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1378
diff changeset
722 const int vbank = raster & 7;
1376
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
723 switch ((img->bitmap[vbitmap][bmoffs] >> vshift) & 3)
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
724 {
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
725 case 0: return img->extraData[0][raster]; break;
1380
959b34402b81 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1378
diff changeset
726 case 1: return img->screen[vbank][scroffs] >> 4; break;
959b34402b81 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1378
diff changeset
727 case 2: return img->screen[vbank][scroffs] & 15; break;
1376
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
728 default: return img->color[0][scroffs] & 15; break;
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
729 }
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
730 }
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
731
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
732
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
733 static Uint8 fmtGetPixelFLIDesigner(
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
734 const DMC64Image *img, const int bmoffs, const int scroffs,
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
735 const int vshift, const int vbitmap, const int raster)
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
736 {
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
737 return dmC64GetGenericMCPixel(img, bmoffs, scroffs, vshift, raster & 7, vbitmap, 0);
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
738 }
943
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
739
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
740
1394
054561dbcd57 Add support for Crest Hires FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1393
diff changeset
741 static Uint8 fmtGetPixelCHFLI(
054561dbcd57 Add support for Crest Hires FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1393
diff changeset
742 const DMC64Image *img, const int bmoffs, const int scroffs,
054561dbcd57 Add support for Crest Hires FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1393
diff changeset
743 const int vshift, const int vbitmap, const int raster)
054561dbcd57 Add support for Crest Hires FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1393
diff changeset
744 {
054561dbcd57 Add support for Crest Hires FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1393
diff changeset
745 const int vbank = raster & 7;
054561dbcd57 Add support for Crest Hires FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1393
diff changeset
746
054561dbcd57 Add support for Crest Hires FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1393
diff changeset
747 if ((img->bitmap[vbitmap][bmoffs] >> vshift) & 1)
054561dbcd57 Add support for Crest Hires FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1393
diff changeset
748 return img->screen[vbank][scroffs] >> 4;
054561dbcd57 Add support for Crest Hires FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1393
diff changeset
749 else
054561dbcd57 Add support for Crest Hires FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1393
diff changeset
750 return img->screen[vbank][scroffs] & 15;
054561dbcd57 Add support for Crest Hires FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1393
diff changeset
751 }
054561dbcd57 Add support for Crest Hires FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1393
diff changeset
752
054561dbcd57 Add support for Crest Hires FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1393
diff changeset
753
1369
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
754 //
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
755 // Array with data for supported formats
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
756 //
1393
b5fc5a05033d Make screen ram definition macros more flexible, for possible future use cases.
Matti Hamalainen <ccr@tnsp.org>
parents: 1392
diff changeset
757 #define DEF_SCREEN_RAM(start, oindex, bindex, osize) { DT_SCREEN_RAM, (start) + ((osize) * (oindex)), (bindex), 0, NULL, NULL }
b5fc5a05033d Make screen ram definition macros more flexible, for possible future use cases.
Matti Hamalainen <ccr@tnsp.org>
parents: 1392
diff changeset
758 #define DEF_SCREEN_RAMS_8(start, sindex, osize) \
b5fc5a05033d Make screen ram definition macros more flexible, for possible future use cases.
Matti Hamalainen <ccr@tnsp.org>
parents: 1392
diff changeset
759 DEF_SCREEN_RAM((start), 0, (sindex + 0), (osize)), \
b5fc5a05033d Make screen ram definition macros more flexible, for possible future use cases.
Matti Hamalainen <ccr@tnsp.org>
parents: 1392
diff changeset
760 DEF_SCREEN_RAM((start), 1, (sindex + 1), (osize)), \
b5fc5a05033d Make screen ram definition macros more flexible, for possible future use cases.
Matti Hamalainen <ccr@tnsp.org>
parents: 1392
diff changeset
761 DEF_SCREEN_RAM((start), 2, (sindex + 2), (osize)), \
b5fc5a05033d Make screen ram definition macros more flexible, for possible future use cases.
Matti Hamalainen <ccr@tnsp.org>
parents: 1392
diff changeset
762 DEF_SCREEN_RAM((start), 3, (sindex + 3), (osize)), \
b5fc5a05033d Make screen ram definition macros more flexible, for possible future use cases.
Matti Hamalainen <ccr@tnsp.org>
parents: 1392
diff changeset
763 DEF_SCREEN_RAM((start), 4, (sindex + 4), (osize)), \
b5fc5a05033d Make screen ram definition macros more flexible, for possible future use cases.
Matti Hamalainen <ccr@tnsp.org>
parents: 1392
diff changeset
764 DEF_SCREEN_RAM((start), 5, (sindex + 5), (osize)), \
b5fc5a05033d Make screen ram definition macros more flexible, for possible future use cases.
Matti Hamalainen <ccr@tnsp.org>
parents: 1392
diff changeset
765 DEF_SCREEN_RAM((start), 6, (sindex + 6), (osize)), \
b5fc5a05033d Make screen ram definition macros more flexible, for possible future use cases.
Matti Hamalainen <ccr@tnsp.org>
parents: 1392
diff changeset
766 DEF_SCREEN_RAM((start), 7, (sindex + 7), (osize)),
1388
4f81528aa4f6 Simplify some image format definitions by using macro to define screen ram blocks.
Matti Hamalainen <ccr@tnsp.org>
parents: 1387
diff changeset
767
4f81528aa4f6 Simplify some image format definitions by using macro to define screen ram blocks.
Matti Hamalainen <ccr@tnsp.org>
parents: 1387
diff changeset
768
516
6f141f760c54 Constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 515
diff changeset
769 const DMC64ImageFormat dmC64ImageFormats[] =
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
770 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
771 {
1475
7729fefe8e57 Reorder format list.
Matti Hamalainen <ccr@tnsp.org>
parents: 1472
diff changeset
772 D64_FMT_MC, "d2p", "DrazPaint 1.4/2.0 (packed)", 0x5800, 0,
939
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
773 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
774 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
1443
57e97e58cbf3 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1442
diff changeset
775 fmtProbeDrazPaint20Packed,
1471
a988baa5b21f Add stub function to prevent attempts to encode formats that do not support encoding yet.
Matti Hamalainen <ccr@tnsp.org>
parents: 1469
diff changeset
776 fmtDecodeDrazPaintPacked, fmtEncodeStub,
1443
57e97e58cbf3 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1442
diff changeset
777 NULL, NULL,
57e97e58cbf3 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1442
diff changeset
778 NULL,
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
779 {
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
780 { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
781 { DT_BITMAP, 0x0800, 0, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
782 { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL },
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
783 { DT_COLOR_REG, 0x2740, 0, DC_BGCOL, NULL, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
784 { DT_LAST, 0, 0, 0, NULL, NULL },
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
785 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
786 },
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
787
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
788 {
1475
7729fefe8e57 Reorder format list.
Matti Hamalainen <ccr@tnsp.org>
parents: 1472
diff changeset
789 D64_FMT_MC, "drp", "DrazPaint (unpacked)", 0x5800, 10051,
7729fefe8e57 Reorder format list.
Matti Hamalainen <ccr@tnsp.org>
parents: 1472
diff changeset
790 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
7729fefe8e57 Reorder format list.
Matti Hamalainen <ccr@tnsp.org>
parents: 1472
diff changeset
791 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
7729fefe8e57 Reorder format list.
Matti Hamalainen <ccr@tnsp.org>
parents: 1472
diff changeset
792 NULL,
7729fefe8e57 Reorder format list.
Matti Hamalainen <ccr@tnsp.org>
parents: 1472
diff changeset
793 NULL, NULL,
7729fefe8e57 Reorder format list.
Matti Hamalainen <ccr@tnsp.org>
parents: 1472
diff changeset
794 NULL, NULL,
7729fefe8e57 Reorder format list.
Matti Hamalainen <ccr@tnsp.org>
parents: 1472
diff changeset
795 NULL,
7729fefe8e57 Reorder format list.
Matti Hamalainen <ccr@tnsp.org>
parents: 1472
diff changeset
796 {
7729fefe8e57 Reorder format list.
Matti Hamalainen <ccr@tnsp.org>
parents: 1472
diff changeset
797 { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL },
7729fefe8e57 Reorder format list.
Matti Hamalainen <ccr@tnsp.org>
parents: 1472
diff changeset
798 { DT_BITMAP, 0x0800, 0, 0, NULL, NULL },
7729fefe8e57 Reorder format list.
Matti Hamalainen <ccr@tnsp.org>
parents: 1472
diff changeset
799 { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL },
7729fefe8e57 Reorder format list.
Matti Hamalainen <ccr@tnsp.org>
parents: 1472
diff changeset
800 { DT_COLOR_REG, 0x2740, 0, DC_BGCOL, NULL, NULL },
7729fefe8e57 Reorder format list.
Matti Hamalainen <ccr@tnsp.org>
parents: 1472
diff changeset
801 { DT_LAST, 0, 0, 0, NULL, NULL },
7729fefe8e57 Reorder format list.
Matti Hamalainen <ccr@tnsp.org>
parents: 1472
diff changeset
802 }
7729fefe8e57 Reorder format list.
Matti Hamalainen <ccr@tnsp.org>
parents: 1472
diff changeset
803 },
7729fefe8e57 Reorder format list.
Matti Hamalainen <ccr@tnsp.org>
parents: 1472
diff changeset
804
7729fefe8e57 Reorder format list.
Matti Hamalainen <ccr@tnsp.org>
parents: 1472
diff changeset
805 {
924
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
806 D64_FMT_MC | D64_FMT_ILACE, "dlp", "DrazLace 1.0 (packed)", 0x5800, 0,
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
807 C64_SCR_WIDTH , C64_SCR_HEIGHT,
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
808 C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT,
1443
57e97e58cbf3 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1442
diff changeset
809 fmtProbeDrazLace10Packed,
1471
a988baa5b21f Add stub function to prevent attempts to encode formats that do not support encoding yet.
Matti Hamalainen <ccr@tnsp.org>
parents: 1469
diff changeset
810 fmtDecodeDrazPaintPacked, fmtEncodeStub,
1443
57e97e58cbf3 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1442
diff changeset
811 NULL, NULL,
57e97e58cbf3 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1442
diff changeset
812 NULL,
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
813 {
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
814 { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
815 { DT_BITMAP, 0x0800, 0, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
816 { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL },
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
817 { DT_COLOR_REG, 0x2740, 0, DC_BGCOL, NULL, NULL },
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
818 { DT_BITMAP, 0x2800, 1, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
819 { DT_DEC_FUNCTION, 0x2742, 0, 1, fmtDrazLaceSetLaceType, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
820 { DT_LAST, 0, 0, 0, NULL, NULL },
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
821 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
822 },
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
823
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
824 {
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 533
diff changeset
825 D64_FMT_MC | D64_FMT_ILACE, "drl", "DrazLace 1.0 (unpacked)", 0x5800, 18242,
924
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
826 C64_SCR_WIDTH , C64_SCR_HEIGHT,
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
827 C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
828 NULL,
511
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
829 NULL, NULL,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
830 NULL, NULL,
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
831 NULL,
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
832 {
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
833 { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
834 { DT_BITMAP, 0x0800, 0, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
835 { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL },
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
836 { DT_COLOR_REG, 0x2740, 0, DC_BGCOL, NULL, NULL },
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
837 { DT_BITMAP, 0x2800, 1, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
838 { DT_DEC_FUNCTION, 0x2742, 0, 1, fmtDrazLaceSetLaceType, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
839 { DT_LAST, 0, 0, 0, NULL, NULL },
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
840 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
841 },
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
842
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
843 {
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 533
diff changeset
844 D64_FMT_MC | D64_FMT_ILACE, "mci", "Truepaint (unpacked)", 0x9c00, 19434,
924
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
845 C64_SCR_WIDTH , C64_SCR_HEIGHT,
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
846 C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
847 NULL,
511
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
848 NULL, NULL,
1443
57e97e58cbf3 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1442
diff changeset
849 NULL, NULL,
57e97e58cbf3 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1442
diff changeset
850 fmtGetPixelTruePaint,
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
851 {
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
852 { DT_SCREEN_RAM, 0x0000, 0, 0, NULL, NULL },
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
853 { DT_COLOR_REG, 0x03e8, 0, DC_BGCOL, NULL, NULL },
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
854 { DT_BITMAP, 0x0400, 0, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
855 { DT_BITMAP, 0x2400, 1, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
856 { DT_SCREEN_RAM, 0x4400, 1, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
857 { DT_COLOR_RAM, 0x4800, 0, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
858 { DT_DEC_FUNCTION, 0x0000, 0, 0, fmtTruePaintSetLaceType, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
859 { DT_LAST, 0, 0, 0, NULL, NULL },
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
860 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
861 },
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
862
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
863 {
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 533
diff changeset
864 D64_FMT_MC, "kla", "Koala Paint (unpacked)", 0x6000, 10003,
939
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
865 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
866 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
867 NULL,
511
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
868 NULL, NULL,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
869 NULL, NULL,
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
870 NULL,
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
871 {
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
872 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
873 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL },
531
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
874 { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL },
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
875 { DT_COLOR_REG, 0x2710, 0, DC_BGCOL, NULL, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
876 { DT_LAST, 0, 0, 0, NULL, NULL },
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
877 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
878 },
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
879
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
880 {
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 533
diff changeset
881 D64_FMT_MC, "ocp", "Advanced Art Studio (unpacked)", 0x2000, 10018,
939
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
882 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
883 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
884 NULL,
524
78edb9710ab7 Add Advanced Art Studio format support.
Matti Hamalainen <ccr@tnsp.org>
parents: 523
diff changeset
885 NULL, NULL,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
886 NULL, NULL,
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
887 NULL,
524
78edb9710ab7 Add Advanced Art Studio format support.
Matti Hamalainen <ccr@tnsp.org>
parents: 523
diff changeset
888 {
78edb9710ab7 Add Advanced Art Studio format support.
Matti Hamalainen <ccr@tnsp.org>
parents: 523
diff changeset
889 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL },
78edb9710ab7 Add Advanced Art Studio format support.
Matti Hamalainen <ccr@tnsp.org>
parents: 523
diff changeset
890 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL },
78edb9710ab7 Add Advanced Art Studio format support.
Matti Hamalainen <ccr@tnsp.org>
parents: 523
diff changeset
891 { DT_COLOR_RAM, 0x2338, 0, 0, NULL, NULL },
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
892 { DT_COLOR_REG, 0x2329, 0, DC_BGCOL, NULL, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
893 { DT_LAST, 0, 0, 0, NULL, NULL },
524
78edb9710ab7 Add Advanced Art Studio format support.
Matti Hamalainen <ccr@tnsp.org>
parents: 523
diff changeset
894 }
78edb9710ab7 Add Advanced Art Studio format support.
Matti Hamalainen <ccr@tnsp.org>
parents: 523
diff changeset
895 },
526
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
896
524
78edb9710ab7 Add Advanced Art Studio format support.
Matti Hamalainen <ccr@tnsp.org>
parents: 523
diff changeset
897 {
924
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
898 D64_FMT_MC, "ami", "Amica Paint (packed)", 0x4000, 0,
939
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
899 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
900 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
901 fmtProbeAmicaPaintPacked,
1471
a988baa5b21f Add stub function to prevent attempts to encode formats that do not support encoding yet.
Matti Hamalainen <ccr@tnsp.org>
parents: 1469
diff changeset
902 fmtDecodeAmicaPaintPacked, fmtEncodeStub,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
903 NULL, NULL,
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
904 NULL,
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
905 {
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
906 { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
907 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
908 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL },
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
909 { DT_COLOR_REG, 0x2710, 0, DC_BGCOL, NULL, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
910 { DT_LAST, 0, 0, 0, NULL, NULL },
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
911 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
912 },
526
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
913
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
914 {
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 533
diff changeset
915 D64_FMT_MC, "rpm", "Run Paint (unpacked)", 0x6000, 10006,
939
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
916 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
917 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
918 NULL,
527
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
919 NULL, NULL,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
920 NULL, NULL,
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
921 NULL,
527
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
922 {
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
923 { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL },
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
924 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL },
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
925 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL },
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
926 { DT_COLOR_REG, 0x2710, 0, DC_BGCOL, NULL, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
927 { DT_LAST, 0, 0, 0, NULL, NULL },
527
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
928 }
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
929 },
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
930
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
931 {
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 533
diff changeset
932 D64_FMT_HIRES, "art", "Art Studio (unpacked)", 0x2000, 9009,
939
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
933 C64_SCR_WIDTH , C64_SCR_HEIGHT,
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
934 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
935 NULL,
527
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
936 NULL, NULL,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
937 NULL, NULL,
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
938 NULL,
527
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
939 {
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
940 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL },
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
941 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
942 { DT_LAST, 0, 0, 0, NULL, NULL },
527
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
943 }
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
944 },
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
945
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
946 {
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 533
diff changeset
947 D64_FMT_HIRES, "iph", "Interpaint (unpacked)", 0x4000, 9002,
924
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
948 C64_SCR_WIDTH , C64_SCR_HEIGHT,
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
949 C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
950 NULL,
526
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
951 NULL, NULL,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
952 NULL, NULL,
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
953 NULL,
526
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
954 {
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
955 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL },
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
956 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
957 { DT_LAST, 0, 0, 0, NULL, NULL },
526
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
958 }
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
959 },
1396
7acadc08bc72 Cosmetic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1394
diff changeset
960
1370
53358cc2f9ff Add support for Interpaint Multicolor (unpacked) images.
Matti Hamalainen <ccr@tnsp.org>
parents: 1369
diff changeset
961 {
53358cc2f9ff Add support for Interpaint Multicolor (unpacked) images.
Matti Hamalainen <ccr@tnsp.org>
parents: 1369
diff changeset
962 D64_FMT_MC, "ipc", "Interpaint MC (unpacked)", 0x4000, 10003,
53358cc2f9ff Add support for Interpaint Multicolor (unpacked) images.
Matti Hamalainen <ccr@tnsp.org>
parents: 1369
diff changeset
963 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
53358cc2f9ff Add support for Interpaint Multicolor (unpacked) images.
Matti Hamalainen <ccr@tnsp.org>
parents: 1369
diff changeset
964 C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
965 NULL,
1370
53358cc2f9ff Add support for Interpaint Multicolor (unpacked) images.
Matti Hamalainen <ccr@tnsp.org>
parents: 1369
diff changeset
966 NULL, NULL,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
967 NULL, NULL,
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
968 NULL,
1370
53358cc2f9ff Add support for Interpaint Multicolor (unpacked) images.
Matti Hamalainen <ccr@tnsp.org>
parents: 1369
diff changeset
969 {
53358cc2f9ff Add support for Interpaint Multicolor (unpacked) images.
Matti Hamalainen <ccr@tnsp.org>
parents: 1369
diff changeset
970 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL },
53358cc2f9ff Add support for Interpaint Multicolor (unpacked) images.
Matti Hamalainen <ccr@tnsp.org>
parents: 1369
diff changeset
971 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL },
53358cc2f9ff Add support for Interpaint Multicolor (unpacked) images.
Matti Hamalainen <ccr@tnsp.org>
parents: 1369
diff changeset
972 { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL },
53358cc2f9ff Add support for Interpaint Multicolor (unpacked) images.
Matti Hamalainen <ccr@tnsp.org>
parents: 1369
diff changeset
973 { DT_COLOR_REG, 0x2710, 0, DC_BGCOL, NULL, NULL },
53358cc2f9ff Add support for Interpaint Multicolor (unpacked) images.
Matti Hamalainen <ccr@tnsp.org>
parents: 1369
diff changeset
974 { DT_LAST, 0, 0, 0, NULL, NULL },
53358cc2f9ff Add support for Interpaint Multicolor (unpacked) images.
Matti Hamalainen <ccr@tnsp.org>
parents: 1369
diff changeset
975 }
53358cc2f9ff Add support for Interpaint Multicolor (unpacked) images.
Matti Hamalainen <ccr@tnsp.org>
parents: 1369
diff changeset
976 },
526
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
977
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
978 {
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 533
diff changeset
979 D64_FMT_HIRES, "dd", "Doodle (unpacked)", 0x1c00, 9218,
924
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
980 C64_SCR_WIDTH , C64_SCR_HEIGHT,
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
981 C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
982 NULL,
526
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
983 NULL, NULL,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
984 NULL, NULL,
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
985 NULL,
526
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
986 {
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
987 { DT_SCREEN_RAM, 0x0000, 0, 0, NULL, NULL },
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
988 { DT_BITMAP, 0x0400, 0, 0, NULL, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
989 { DT_LAST, 0, 0, 0, NULL, NULL },
526
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
990 }
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
991 },
905
b83868a23ca5 Cosmetic.
Matti Hamalainen <ccr@tnsp.org>
parents: 904
diff changeset
992
531
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
993 {
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 533
diff changeset
994 D64_FMT_MC | D64_FMT_FLI, "bml", "Blackmail FLI (unpacked)", 0x3b00, 17474,
939
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
995 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
996 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
997 NULL,
531
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
998 NULL, NULL,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
999 NULL, NULL,
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
1000 fmtGetPixelBMFLI,
531
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
1001 {
1376
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
1002 { DT_EXTRA_DATA, 0x0000, 0, 200, NULL, NULL },
531
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
1003 { DT_COLOR_RAM, 0x0100, 0, 0, NULL, NULL },
1393
b5fc5a05033d Make screen ram definition macros more flexible, for possible future use cases.
Matti Hamalainen <ccr@tnsp.org>
parents: 1392
diff changeset
1004 DEF_SCREEN_RAMS_8( 0x0500, 0, 0x400)
531
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
1005 { DT_BITMAP, 0x2500, 0, 0, NULL, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
1006 { DT_LAST, 0, 0, 0, NULL, NULL },
531
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
1007 }
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
1008 },
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
1009
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
1010 {
1392
aad9d9e7e1d3 Cleanups, support another variant of FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1390
diff changeset
1011 D64_FMT_MC | D64_FMT_FLI, "fli", "FLI Designer (unpacked)", 0, 17409,
939
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
1012 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
1013 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
1014 fmtProbeFLIDesigner,
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
1015 NULL, NULL,
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
1016 NULL, NULL,
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
1017 fmtGetPixelFLIDesigner,
531
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
1018 {
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
1019 { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL },
1393
b5fc5a05033d Make screen ram definition macros more flexible, for possible future use cases.
Matti Hamalainen <ccr@tnsp.org>
parents: 1392
diff changeset
1020 DEF_SCREEN_RAMS_8( 0x0400, 0, 0x400)
531
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
1021 { DT_BITMAP, 0x2400, 0, 0, NULL, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
1022 { DT_LAST, 0, 0, 0, NULL, NULL },
531
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
1023 }
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
1024 },
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
1025
906
e591ce9b3526 Added support to gfxconv/view64 for unknown(?) bitmap format found on some
Matti Hamalainen <ccr@tnsp.org>
parents: 905
diff changeset
1026 {
e591ce9b3526 Added support to gfxconv/view64 for unknown(?) bitmap format found on some
Matti Hamalainen <ccr@tnsp.org>
parents: 905
diff changeset
1027 D64_FMT_MC, "xx1", "Unknown $2000 format (unpacked)", 0x2000, 10242,
939
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
1028 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
1029 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
1030 NULL,
906
e591ce9b3526 Added support to gfxconv/view64 for unknown(?) bitmap format found on some
Matti Hamalainen <ccr@tnsp.org>
parents: 905
diff changeset
1031 NULL, NULL,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
1032 NULL, NULL,
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
1033 NULL,
906
e591ce9b3526 Added support to gfxconv/view64 for unknown(?) bitmap format found on some
Matti Hamalainen <ccr@tnsp.org>
parents: 905
diff changeset
1034 {
e591ce9b3526 Added support to gfxconv/view64 for unknown(?) bitmap format found on some
Matti Hamalainen <ccr@tnsp.org>
parents: 905
diff changeset
1035 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL },
e591ce9b3526 Added support to gfxconv/view64 for unknown(?) bitmap format found on some
Matti Hamalainen <ccr@tnsp.org>
parents: 905
diff changeset
1036 { DT_SCREEN_RAM, 0x2000, 0, 0, NULL, NULL },
e591ce9b3526 Added support to gfxconv/view64 for unknown(?) bitmap format found on some
Matti Hamalainen <ccr@tnsp.org>
parents: 905
diff changeset
1037 { DT_COLOR_RAM, 0x2400, 0, 0, NULL, NULL },
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1038 { DT_COLOR_SET, 0x00 , 0, DC_BGCOL, NULL, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
1039 { DT_LAST, 0, 0, 0, NULL, NULL },
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1040 }
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1041 },
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1042
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1043 #define XX2_WIDTH_CH 40
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1044 #define XX2_HEIGHT_CH 10
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1045 #define XX2_SIZE (XX2_WIDTH_CH * XX2_HEIGHT_CH)
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1046 #define XX2_BSIZE (XX2_SIZE * 8)
924
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
1047
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1048 {
943
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
1049 D64_FMT_MC, "xx2", "Unknown $2000 format (unpacked)", 0x2000, 0,
924
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
1050 XX2_WIDTH_CH * 4, XX2_HEIGHT_CH * 8,
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
1051 XX2_WIDTH_CH , XX2_HEIGHT_CH,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
1052 fmtProbeFormatXX2,
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
1053 fmtDecodeFormatXX2, NULL,
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
1054 NULL, NULL,
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
1055 NULL,
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1056 {
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1057 { DT_BITMAP, 0x0000, 0, XX2_BSIZE, NULL, NULL },
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1058 { DT_COLOR_RAM, XX2_BSIZE + XX2_SIZE, 0, XX2_SIZE, NULL, NULL },
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1059 { DT_SCREEN_RAM, XX2_BSIZE, 0, XX2_SIZE, NULL, NULL },
1382
558776ee9603 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1381
diff changeset
1060 { DT_COLOR_SET, 11, 0, DC_BGCOL, NULL, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
1061 { DT_LAST, 0, 0, 0, NULL, NULL },
906
e591ce9b3526 Added support to gfxconv/view64 for unknown(?) bitmap format found on some
Matti Hamalainen <ccr@tnsp.org>
parents: 905
diff changeset
1062 }
e591ce9b3526 Added support to gfxconv/view64 for unknown(?) bitmap format found on some
Matti Hamalainen <ccr@tnsp.org>
parents: 905
diff changeset
1063 },
1384
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1064
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1065 {
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1066 D64_FMT_MC | D64_FMT_FLI | D64_FMT_ILACE, "fp2", "FunPaint II (unpacked)", 0x3ff0, 33694,
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1067 C64_SCR_WIDTH, C64_SCR_HEIGHT,
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1068 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
1069 fmtProbeFunPaint2Unpacked,
1471
a988baa5b21f Add stub function to prevent attempts to encode formats that do not support encoding yet.
Matti Hamalainen <ccr@tnsp.org>
parents: 1469
diff changeset
1070 fmtDecodeFunPaint2Unpacked, fmtEncodeStub,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
1071 NULL, NULL,
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
1072 fmtGetPixelFunPaint2,
1384
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1073 {
1393
b5fc5a05033d Make screen ram definition macros more flexible, for possible future use cases.
Matti Hamalainen <ccr@tnsp.org>
parents: 1392
diff changeset
1074 DEF_SCREEN_RAMS_8( 0x0000, 0, 0x400)
1384
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1075 { DT_BITMAP, 0x2000, 0, 0, NULL, NULL },
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1076 { DT_EXTRA_DATA, 0x3f40, 0, 100, NULL, NULL },
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1077 { DT_COLOR_RAM, 0x4000, 0, 0, NULL, NULL },
1393
b5fc5a05033d Make screen ram definition macros more flexible, for possible future use cases.
Matti Hamalainen <ccr@tnsp.org>
parents: 1392
diff changeset
1078 DEF_SCREEN_RAMS_8( 0x43e8, 8, 0x400)
1384
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1079 { DT_BITMAP, 0x63e8, 1, 0, NULL, NULL },
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1080 { DT_EXTRA_DATA, 0x8328, 1, 100, NULL, NULL },
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1081 { DT_LAST, 0, 0, 0, NULL, NULL },
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1082 }
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1083 },
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1084
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1085 {
1396
7acadc08bc72 Cosmetic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1394
diff changeset
1086 D64_FMT_MC | D64_FMT_FLI | D64_FMT_ILACE, "fp2p", "FunPaint II (packed)", 0x3ff0, 0,
1384
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1087 C64_SCR_WIDTH, C64_SCR_HEIGHT,
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1088 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
1089 fmtProbeFunPaint2Packed,
1471
a988baa5b21f Add stub function to prevent attempts to encode formats that do not support encoding yet.
Matti Hamalainen <ccr@tnsp.org>
parents: 1469
diff changeset
1090 fmtDecodeFunPaint2Packed, fmtEncodeStub,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
1091 NULL, NULL,
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
1092 fmtGetPixelFunPaint2,
1384
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1093 {
1393
b5fc5a05033d Make screen ram definition macros more flexible, for possible future use cases.
Matti Hamalainen <ccr@tnsp.org>
parents: 1392
diff changeset
1094 DEF_SCREEN_RAMS_8( 0x0000, 0, 0x400)
1384
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1095 { DT_BITMAP, 0x2000, 0, 0, NULL, NULL },
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1096 { DT_EXTRA_DATA, 0x3f40, 0, 100, NULL, NULL },
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1097 { DT_COLOR_RAM, 0x4000, 0, 0, NULL, NULL },
1393
b5fc5a05033d Make screen ram definition macros more flexible, for possible future use cases.
Matti Hamalainen <ccr@tnsp.org>
parents: 1392
diff changeset
1098 DEF_SCREEN_RAMS_8( 0x43e8, 8, 0x400)
1384
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1099 { DT_BITMAP, 0x63e8, 1, 0, NULL, NULL },
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1100 { DT_EXTRA_DATA, 0x8328, 1, 100, NULL, NULL },
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1101 { DT_LAST, 0, 0, 0, NULL, NULL },
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1102 }
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1103 },
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
1104
1389
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
1105 {
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
1106 D64_FMT_MC | D64_FMT_FLI | D64_FMT_ILACE, "gun", "GunPaint (unpacked)", 0x4000, 0,
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
1107 C64_SCR_WIDTH, C64_SCR_HEIGHT,
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
1108 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
1109 fmtProbeGunPaint,
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
1110 NULL, NULL,
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
1111 NULL, NULL,
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
1112 fmtGetPixelGunPaint,
1389
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
1113 {
1393
b5fc5a05033d Make screen ram definition macros more flexible, for possible future use cases.
Matti Hamalainen <ccr@tnsp.org>
parents: 1392
diff changeset
1114 DEF_SCREEN_RAMS_8( 0x0000, 0, 0x400)
1389
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
1115 { DT_BITMAP, 0x2000, 0, 0, NULL, NULL },
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
1116 { DT_EXTRA_DATA, 0x3f4f, 0, 177, NULL, NULL },
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
1117 { DT_COLOR_RAM, 0x4000, 0, 0, NULL, NULL },
1393
b5fc5a05033d Make screen ram definition macros more flexible, for possible future use cases.
Matti Hamalainen <ccr@tnsp.org>
parents: 1392
diff changeset
1118 DEF_SCREEN_RAMS_8( 0x4400, 8, 0x400)
1389
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
1119 { DT_BITMAP, 0x6400, 1, 0, NULL, NULL },
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
1120 { DT_EXTRA_DATA, 0x47e8, 1, 20, NULL, NULL },
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
1121 { DT_LAST, 0, 0, 0, NULL, NULL },
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
1122 }
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
1123 },
979f550ead77 Implement GunPaint support. Possibly not working correctly.
Matti Hamalainen <ccr@tnsp.org>
parents: 1388
diff changeset
1124
1394
054561dbcd57 Add support for Crest Hires FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1393
diff changeset
1125 {
054561dbcd57 Add support for Crest Hires FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1393
diff changeset
1126 D64_FMT_HIRES | D64_FMT_FLI, "chi", "Crest Hires FLI Designer (unpacked)", 0x4000, 16386,
054561dbcd57 Add support for Crest Hires FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1393
diff changeset
1127 C64_SCR_WIDTH, 14 * 8,
054561dbcd57 Add support for Crest Hires FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1393
diff changeset
1128 C64_SCR_CH_WIDTH , 14,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
1129 NULL,
1394
054561dbcd57 Add support for Crest Hires FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1393
diff changeset
1130 NULL, NULL,
1442
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
1131 NULL, NULL,
3773281491c9 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1433
diff changeset
1132 fmtGetPixelCHFLI,
1394
054561dbcd57 Add support for Crest Hires FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1393
diff changeset
1133 {
054561dbcd57 Add support for Crest Hires FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1393
diff changeset
1134 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL },
054561dbcd57 Add support for Crest Hires FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1393
diff changeset
1135 DEF_SCREEN_RAMS_8( 0x2000, 0, 0x400)
054561dbcd57 Add support for Crest Hires FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1393
diff changeset
1136 { DT_LAST, 0, 0, 0, NULL, NULL },
054561dbcd57 Add support for Crest Hires FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1393
diff changeset
1137 }
054561dbcd57 Add support for Crest Hires FLI Designer format.
Matti Hamalainen <ccr@tnsp.org>
parents: 1393
diff changeset
1138 },
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1139 };
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1140
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1141 const int ndmC64ImageFormats = sizeof(dmC64ImageFormats) / sizeof(dmC64ImageFormats[0]);
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1142
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1143
518
63849f85db57 Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 517
diff changeset
1144 // Perform probing of the given data buffer, trying to determine
63849f85db57 Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 517
diff changeset
1145 // if it contains a supported "C64" image format. Returns the
63849f85db57 Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 517
diff changeset
1146 // "probe score", see libgfx.h for list of values. If a match
63849f85db57 Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 517
diff changeset
1147 // is found, pointer to format description is set to *pfmt.
537
32d9e67da189 Rename generic probing function to match the style of other lib64gfx functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 536
diff changeset
1148 int dmC64ProbeBMP(const Uint8 *buf, const size_t len, const DMC64ImageFormat **pfmt)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1149 {
1380
959b34402b81 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1378
diff changeset
1150 int scoreMax = DM_PROBE_SCORE_FALSE, scoreIndex = -1;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1151
1380
959b34402b81 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1378
diff changeset
1152 for (int i = 0; i < ndmC64ImageFormats; i++)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1153 {
516
6f141f760c54 Constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 515
diff changeset
1154 const DMC64ImageFormat *fmt = &dmC64ImageFormats[i];
511
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
1155 int score = DM_PROBE_SCORE_FALSE;
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
1156 if (fmt->probe == NULL && fmt->size > 0 && fmt->addr > 0)
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
1157 {
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
1158 // Generic probe just checks matching size and load address
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
1159 if (len == fmt->size && dmCompareAddr16(buf, 0, fmt->addr))
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
1160 score = DM_PROBE_SCORE_GOOD;
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
1161 }
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
1162 else
1134
d0898867ec4c Various fixes for issues reported by clang static analyzer.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
1163 if (fmt->probe != NULL)
511
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
1164 score = fmt->probe(buf, len, fmt);
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
1165
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1166 if (score > scoreMax)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1167 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1168 scoreMax = score;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1169 scoreIndex = i;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1170 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1171 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1172
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1173 if (scoreIndex >= 0)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1174 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1175 *pfmt = &dmC64ImageFormats[scoreIndex];
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1176 return scoreMax;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1177 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1178 else
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1179 return DM_PROBE_SCORE_FALSE;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1180 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1181
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1182
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
1183 static int dmC64SanityCheckEncDecOp(const int i, const DMC64EncDecOp *op, const DMC64Image *img)
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
1184 {
1373
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1185 switch (op->type)
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
1186 {
1373
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1187 case DT_COLOR_RAM:
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1188 case DT_BITMAP:
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1189 case DT_SCREEN_RAM:
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1190 case DT_CHAR_DATA:
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
1191 if (op->bank < 0 || op->bank > img->nbanks)
1373
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1192 {
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1193 return dmError(DMERR_INTERNAL,
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
1194 "Invalid bank %d / %d definition in generic encode/decode operator %d @ #%d.\n",
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
1195 op->bank, img->nbanks, op->type, i);
1373
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1196 }
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1197 break;
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1198
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1199 case DT_EXTRA_DATA:
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1200 if (op->bank < 0 || op->bank >= C64_MAX_EXTRA_DATA)
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1201 {
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1202 return dmError(DMERR_INTERNAL,
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1203 "Invalid bank %d definition in generic encode/decode operator %d @ #%d.\n",
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1204 op->bank, op->type, i);
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1205 }
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1206 break;
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
1207 }
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
1208
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
1209 if (op->type < 0 || op->type >= DT_LAST)
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
1210 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1211 return dmError(DMERR_INTERNAL,
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1212 "Invalid encode/decode operator type %d @ #%d.\n",
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
1213 op->type, i);
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
1214 }
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
1215
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
1216 return DMERR_OK;
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
1217 }
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
1218
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
1219
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1220 static BOOL dmC64GetOpSize(const DMC64EncDecOp *op, const DMC64ImageFormat *fmt, size_t *size)
927
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1221 {
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1222 BOOL check;
927
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1223 switch (op->type)
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1224 {
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1225 case DT_SCREEN_RAM:
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1226 case DT_COLOR_RAM:
1482
df6dacb48970 Rename some struct members, and sanitize handling of DMC64Image allocation more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1478
diff changeset
1227 *size = fmt->chHeight * fmt->chWidth;
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1228 check = TRUE;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1229 break;
927
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1230
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1231 case DT_BITMAP:
1482
df6dacb48970 Rename some struct members, and sanitize handling of DMC64Image allocation more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1478
diff changeset
1232 *size = fmt->chHeight * fmt->chWidth * 8;
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1233 check = TRUE;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1234 break;
927
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1235
1373
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1236 case DT_EXTRA_DATA:
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1237 *size = op->size;
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1238 check = TRUE;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1239 break;
927
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1240
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1241 case DT_CHAR_DATA:
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1242 *size = C64_MAX_CHARS * C64_CHR_SIZE;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1243 check = TRUE;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1244 break;
927
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1245
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1246 case DT_COLOR_REG:
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1247 *size = 1;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1248 check = FALSE;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1249 break;
927
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1250
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1251 default:
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1252 *size = 0;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1253 check = FALSE;
927
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1254 }
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1255
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1256 if (op->size != 0)
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1257 {
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1258 if (check && op->size > *size)
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1259 return FALSE;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1260
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1261 *size = op->size;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1262 }
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1263
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1264 return TRUE;
927
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1265 }
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1266
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1267
410
e4b2f689aff6 Stdint -> SDL types conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 407
diff changeset
1268 int dmC64DecodeGenericBMP(DMC64Image *img, const Uint8 *buf,
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1269 const size_t len, const DMC64ImageFormat *fmt)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1270 {
1460
361cad3b8445 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 1457
diff changeset
1271 int res = DMERR_OK;
361cad3b8445 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 1457
diff changeset
1272
513
486067f39bc1 Add sanity checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 511
diff changeset
1273 if (buf == NULL || img == NULL || fmt == NULL)
486067f39bc1 Add sanity checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 511
diff changeset
1274 return DMERR_NULLPTR;
486067f39bc1 Add sanity checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 511
diff changeset
1275
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
1276 // Clear the image structure, set basics
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1277 img->type = fmt->type;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1278 img->width = fmt->width;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1279 img->height = fmt->height;
1482
df6dacb48970 Rename some struct members, and sanitize handling of DMC64Image allocation more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1478
diff changeset
1280 img->chWidth = fmt->chWidth;
df6dacb48970 Rename some struct members, and sanitize handling of DMC64Image allocation more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1478
diff changeset
1281 img->chHeight = fmt->chHeight;
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
1282 img->nbanks = dmC64ImageGetNumBanks(fmt);
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1283
518
63849f85db57 Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 517
diff changeset
1284 // Perform decoding
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
1285 for (int i = 0; i < D64_MAX_ENCDEC_OPS; i++)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1286 {
515
a896c1153e4e s/decenc/encdec/g
Matti Hamalainen <ccr@tnsp.org>
parents: 514
diff changeset
1287 const DMC64EncDecOp *op = &fmt->encdecOps[i];
410
e4b2f689aff6 Stdint -> SDL types conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 407
diff changeset
1288 const Uint8 *src;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1289 size_t size;
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
1290
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
1291 // Check for last operator
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
1292 if (op->type == DT_LAST)
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
1293 break;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1294
811
aebc2f8b2c2d Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 810
diff changeset
1295 // Check operation validity
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
1296 if ((res = dmC64SanityCheckEncDecOp(i, op, img)) != DMERR_OK)
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
1297 return res;
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
1298
811
aebc2f8b2c2d Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 810
diff changeset
1299 // Check size
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1300 if (!dmC64GetOpSize(op, fmt, &size))
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1301 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1302 return dmError(DMERR_INVALID_DATA,
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1303 "Decode op SIZE out of bounds, op #%d type=%d, offs=%d ($%04x), "
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1304 "bank=%d, size=%d ($%04x) vs. allocated %d ($%04x)\n",
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1305 i, op->type, op->offs, op->offs, op->bank, size, size, op->size, op->size);
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1306 }
811
aebc2f8b2c2d Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 810
diff changeset
1307
aebc2f8b2c2d Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 810
diff changeset
1308 // Do we need to reallocate some more space?
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1309 if (op->offs + size > len)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1310 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1311 return dmError(DMERR_INVALID_DATA,
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1312 "Decode out of bounds, op #%d type=%d, offs=%d ($%04x), "
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
1313 "bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1314 i, op->type, op->offs, op->offs, op->bank, size, size, len, len);
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1315 }
811
aebc2f8b2c2d Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 810
diff changeset
1316
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1317 src = buf + op->offs;
811
aebc2f8b2c2d Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 810
diff changeset
1318
aebc2f8b2c2d Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 810
diff changeset
1319 // Perform operation
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1320 switch (op->type)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1321 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1322 case DT_COLOR_RAM: memcpy(img->color[op->bank], src, size); break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1323 case DT_BITMAP: memcpy(img->bitmap[op->bank], src, size); break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1324 case DT_SCREEN_RAM: memcpy(img->screen[op->bank], src, size); break;
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1325 case DT_CHAR_DATA: memcpy(img->charmem[op->bank], src, size); break;
1373
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1326 case DT_EXTRA_DATA:
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1327 if (img->extraData[op->bank] != NULL)
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1328 {
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1329 return dmError(DMERR_INTERNAL,
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1330 "Extra data block already allocated and used! "
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1331 "op #%d, offs=%d ($%04x), bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1332 i, op->offs, op->offs, op->bank, size, size, len, len);
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1333 }
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1334 if ((img->extraData[op->bank] = dmMalloc0(size)) == NULL)
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1335 {
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1336 return dmError(DMERR_MALLOC,
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1337 "Could not allocate extradata block! "
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1338 "op #%d, offs=%d ($%04x), bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1339 i, op->offs, op->offs, op->bank, size, size, len, len);
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1340 }
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1341 img->extraDataSizes[op->bank] = size;
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1342 memcpy(img->extraData[op->bank], src, size);
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1343 break;
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1344
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1345 case DT_COLOR_REG:
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1346 switch (op->size)
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1347 {
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1348 case DC_D020: img->d020 = *src; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1349 case DC_BGCOL:
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1350 case DC_D021: img->bgcolor = *src; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1351 case DC_D022: img->d022 = *src; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1352 case DC_D023: img->d023 = *src; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1353 case DC_D024: img->d024 = *src; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1354 default:
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1355 return dmError(DMERR_INTERNAL,
1371
e6b13426b50a Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1370
diff changeset
1356 "Unhandled DT_COLOR_REG mode %d in "
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1357 "op #%d, offs=%d ($%04x), bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1358 op->size, i, op->offs, op->offs, op->bank, size, size, len, len);
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1359 }
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1360 break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1361
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1362 case DT_COLOR_SET:
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1363 switch (op->size)
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1364 {
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1365 case DC_D020: img->d020 = op->offs; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1366 case DC_BGCOL:
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1367 case DC_D021: img->bgcolor = op->offs; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1368 case DC_D022: img->d022 = op->offs; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1369 case DC_D023: img->d023 = op->offs; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1370 case DC_D024: img->d024 = op->offs; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1371 default:
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1372 return dmError(DMERR_INTERNAL,
1371
e6b13426b50a Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1370
diff changeset
1373 "Unhandled DT_COLOR_SET mode %d in "
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1374 "op #%d, offs=%d ($%04x), bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1375 op->size, i, op->offs, op->offs, op->bank, size, size, len, len);
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1376 }
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1377 break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1378
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1379 case DT_CHAR_CONFIG:
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1380 switch (op->offs)
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1381 {
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1382 case D64_CHCFG_SCREEN:
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1383 break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1384
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1385 case D64_CHCFG_LINEAR:
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1386 {
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
1387 for (int bank = 0; bank < img->nbanks; bank++)
1482
df6dacb48970 Rename some struct members, and sanitize handling of DMC64Image allocation more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1478
diff changeset
1388 for (int offs = 0; offs < fmt->chHeight * fmt->chWidth; offs++)
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1389 img->screen[bank][offs] = offs & 0xff;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1390 }
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1391 break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1392
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1393 default:
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1394 return dmError(DMERR_INTERNAL,
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1395 "Unhandled DT_CHAR_CONFIG mode %d in ",
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1396 "op #%d, bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1397 op->offs, i, op->bank, size, size, len, len);
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1398 }
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1399 break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1400
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
1401 case DT_DEC_FUNCTION:
1482
df6dacb48970 Rename some struct members, and sanitize handling of DMC64Image allocation more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1478
diff changeset
1402 if (op->decFunction == NULL)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1403 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1404 return dmError(DMERR_INTERNAL,
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1405 "Decode op is a function, but function ptr is NULL: "
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
1406 "op #%d, offs=%d ($%04x), bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1407 i, op->offs, op->offs, op->bank, size, size, len, len);
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1408 }
1482
df6dacb48970 Rename some struct members, and sanitize handling of DMC64Image allocation more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1478
diff changeset
1409 if (!op->decFunction(img, op, buf, len))
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1410 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1411 return dmError(DMERR_INTERNAL,
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1412 "Decode op custom function failed: op #%d, "
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
1413 "offs=%d ($%04x), bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1414 i, op->offs, op->offs, op->bank, size, size, len, len);
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1415 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1416 break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1417 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1418 }
916
3985f596ece5 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 915
diff changeset
1419
508
1ed5025c2538 Return DMLIB error values instead of arbitrary 0/negatives.
Matti Hamalainen <ccr@tnsp.org>
parents: 507
diff changeset
1420 return DMERR_OK;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1421 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1422
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1423
1465
88845f95e791 Change dmC64EncodeGenericBMP() to use DMGrowBuf, and make the necessary changes in gfxconv as well.
Matti Hamalainen <ccr@tnsp.org>
parents: 1463
diff changeset
1424 int dmC64EncodeGenericBMP(DMGrowBuf *buf, const DMC64Image *img, const DMC64ImageFormat *fmt)
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1425 {
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
1426 int res = DMERR_OK;
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1427
1469
0046b4e1b35f Various fixes in bmp encoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1467
diff changeset
1428 if (img == NULL || fmt == NULL)
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1429 return DMERR_NULLPTR;
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1430
1472
b9d3577d8290 Improve error handling and checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 1471
diff changeset
1431 // Sanity check img vs format
b9d3577d8290 Improve error handling and checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 1471
diff changeset
1432 if (img->type != fmt->type ||
b9d3577d8290 Improve error handling and checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 1471
diff changeset
1433 img->width != fmt->width || img->height != fmt->height)
b9d3577d8290 Improve error handling and checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 1471
diff changeset
1434 {
b9d3577d8290 Improve error handling and checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 1471
diff changeset
1435 res = dmError(DMERR_NOT_SUPPORTED,
b9d3577d8290 Improve error handling and checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 1471
diff changeset
1436 "Can't directly encode a differing C64 bitmap image format.\n");
b9d3577d8290 Improve error handling and checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 1471
diff changeset
1437 goto err;
b9d3577d8290 Improve error handling and checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 1471
diff changeset
1438 }
b9d3577d8290 Improve error handling and checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 1471
diff changeset
1439
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1440 // Allocate the output buffer
1465
88845f95e791 Change dmC64EncodeGenericBMP() to use DMGrowBuf, and make the necessary changes in gfxconv as well.
Matti Hamalainen <ccr@tnsp.org>
parents: 1463
diff changeset
1441 if ((res = dmGrowBufAlloc(buf, fmt->size, BUF_SIZE_GROW)) != DMERR_OK)
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1442 {
1472
b9d3577d8290 Improve error handling and checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 1471
diff changeset
1443 dmError(res,
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1444 "Could not allocate %d bytes of memory for C64 image encoding buffer.\n",
1465
88845f95e791 Change dmC64EncodeGenericBMP() to use DMGrowBuf, and make the necessary changes in gfxconv as well.
Matti Hamalainen <ccr@tnsp.org>
parents: 1463
diff changeset
1445 fmt->size);
1447
de5f7e31a8bf Rename labels.
Matti Hamalainen <ccr@tnsp.org>
parents: 1443
diff changeset
1446 goto err;
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1447 }
1469
0046b4e1b35f Various fixes in bmp encoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1467
diff changeset
1448 buf->len = fmt->size;
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1449
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1450 // Perform encoding
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
1451 for (int i = 0; i < D64_MAX_ENCDEC_OPS; i++)
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1452 {
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1453 const DMC64EncDecOp *op = &fmt->encdecOps[i];
1364
0d61895e1763 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 1362
diff changeset
1454 size_t size, chksize;
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1455
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
1456 // Check for last operator
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
1457 if (op->type == DT_LAST)
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
1458 break;
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
1459
811
aebc2f8b2c2d Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 810
diff changeset
1460 // Check operation validity
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
1461 if ((res = dmC64SanityCheckEncDecOp(i, op, img)) != DMERR_OK)
1447
de5f7e31a8bf Rename labels.
Matti Hamalainen <ccr@tnsp.org>
parents: 1443
diff changeset
1462 goto err;
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1463
811
aebc2f8b2c2d Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 810
diff changeset
1464 // Check size
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1465 if (!dmC64GetOpSize(op, fmt, &size))
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1466 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1467 res = dmError(DMERR_INVALID_DATA,
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1468 "Decode op SIZE out of bounds, op #%d type=%d, offs=%d ($%04x), "
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1469 "bank=%d, size=%d ($%04x) vs. allocated %d ($%04x)\n",
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1470 i, op->type, op->offs, op->offs, op->bank, size, size, op->size, op->size);
1447
de5f7e31a8bf Rename labels.
Matti Hamalainen <ccr@tnsp.org>
parents: 1443
diff changeset
1471 goto err;
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1472 }
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1473
811
aebc2f8b2c2d Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 810
diff changeset
1474 // Do we need to reallocate some more space?
1448
50402c225ef4 Do not insert load address to the buffer beginning in dmC64EncodeGenericBMP().
Matti Hamalainen <ccr@tnsp.org>
parents: 1447
diff changeset
1475 chksize = op->offs + size;
1465
88845f95e791 Change dmC64EncodeGenericBMP() to use DMGrowBuf, and make the necessary changes in gfxconv as well.
Matti Hamalainen <ccr@tnsp.org>
parents: 1463
diff changeset
1476 if (!dmGrowBufCheckGrow(buf, chksize))
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1477 {
1465
88845f95e791 Change dmC64EncodeGenericBMP() to use DMGrowBuf, and make the necessary changes in gfxconv as well.
Matti Hamalainen <ccr@tnsp.org>
parents: 1463
diff changeset
1478 res = dmError(DMERR_MALLOC,
88845f95e791 Change dmC64EncodeGenericBMP() to use DMGrowBuf, and make the necessary changes in gfxconv as well.
Matti Hamalainen <ccr@tnsp.org>
parents: 1463
diff changeset
1479 "Could not re-allocate %d bytes of memory for C64 image encoding buffer.\n",
88845f95e791 Change dmC64EncodeGenericBMP() to use DMGrowBuf, and make the necessary changes in gfxconv as well.
Matti Hamalainen <ccr@tnsp.org>
parents: 1463
diff changeset
1480 chksize);
88845f95e791 Change dmC64EncodeGenericBMP() to use DMGrowBuf, and make the necessary changes in gfxconv as well.
Matti Hamalainen <ccr@tnsp.org>
parents: 1463
diff changeset
1481 goto err;
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1482 }
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1483
1465
88845f95e791 Change dmC64EncodeGenericBMP() to use DMGrowBuf, and make the necessary changes in gfxconv as well.
Matti Hamalainen <ccr@tnsp.org>
parents: 1463
diff changeset
1484 if (fmt->size == 0 && chksize > buf->len)
88845f95e791 Change dmC64EncodeGenericBMP() to use DMGrowBuf, and make the necessary changes in gfxconv as well.
Matti Hamalainen <ccr@tnsp.org>
parents: 1463
diff changeset
1485 buf->len = chksize;
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1486
811
aebc2f8b2c2d Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 810
diff changeset
1487 // Perform operation
1465
88845f95e791 Change dmC64EncodeGenericBMP() to use DMGrowBuf, and make the necessary changes in gfxconv as well.
Matti Hamalainen <ccr@tnsp.org>
parents: 1463
diff changeset
1488 Uint8 *dst = buf->data + op->offs;
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1489 switch (op->type)
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1490 {
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1491 case DT_COLOR_RAM: memcpy(dst, img->color[op->bank], size); break;
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1492 case DT_BITMAP: memcpy(dst, img->bitmap[op->bank], size); break;
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1493 case DT_SCREEN_RAM: memcpy(dst, img->screen[op->bank], size); break;
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1494 case DT_CHAR_DATA: memcpy(dst, img->charmem[op->bank], size); break;
1373
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1495 case DT_EXTRA_DATA:
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1496 if (img->extraData[op->bank] == NULL)
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1497 {
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1498 res = dmError(DMERR_NULLPTR,
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1499 "DT_EXTRA_DATA block is NULL in ",
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1500 "op #%d, offs=%d ($%04x), bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
1465
88845f95e791 Change dmC64EncodeGenericBMP() to use DMGrowBuf, and make the necessary changes in gfxconv as well.
Matti Hamalainen <ccr@tnsp.org>
parents: 1463
diff changeset
1501 i, op->offs, op->offs, op->bank, size, size, buf->len, buf->len);
1447
de5f7e31a8bf Rename labels.
Matti Hamalainen <ccr@tnsp.org>
parents: 1443
diff changeset
1502 goto err;
1373
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1503 }
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1504 if (size > img->extraDataSizes[op->bank])
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1505 {
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1506 res = dmError(DMERR_INTERNAL,
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1507 "DT_EXTRA_DATA size mismatch %d <> %d in ",
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1508 "op #%d, offs=%d ($%04x), bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
1465
88845f95e791 Change dmC64EncodeGenericBMP() to use DMGrowBuf, and make the necessary changes in gfxconv as well.
Matti Hamalainen <ccr@tnsp.org>
parents: 1463
diff changeset
1509 op->size, img->extraDataSizes[op->bank], i, op->offs, op->offs, op->bank, size, size, buf->len, buf->len);
1447
de5f7e31a8bf Rename labels.
Matti Hamalainen <ccr@tnsp.org>
parents: 1443
diff changeset
1510 goto err;
1373
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1511 }
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1512 memcpy(dst, img->extraData[op->bank], size);
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1513 break;
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1514
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1515 case DT_COLOR_REG:
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1516 switch (op->size)
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1517 {
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1518 case DC_D020: *dst = img->d020; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1519 case DC_BGCOL:
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1520 case DC_D021: *dst = img->bgcolor; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1521 case DC_D022: *dst = img->d022; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1522 case DC_D023: *dst = img->d023; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1523 case DC_D024: *dst = img->d024; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1524 default:
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1525 res = dmError(DMERR_INTERNAL,
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1526 "Unhandled DT_COLOR_REG mode %d in ",
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1527 "op #%d, offs=%d ($%04x), bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
1465
88845f95e791 Change dmC64EncodeGenericBMP() to use DMGrowBuf, and make the necessary changes in gfxconv as well.
Matti Hamalainen <ccr@tnsp.org>
parents: 1463
diff changeset
1528 op->size, i, op->offs, op->offs, op->bank, size, size, buf->len, buf->len);
1447
de5f7e31a8bf Rename labels.
Matti Hamalainen <ccr@tnsp.org>
parents: 1443
diff changeset
1529 goto err;
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1530 }
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1531 break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1532
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1533 case DT_ENC_FUNCTION:
1482
df6dacb48970 Rename some struct members, and sanitize handling of DMC64Image allocation more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1478
diff changeset
1534 if (op->encFunction == NULL)
904
d3cd9f2a8ef1 Some dummy code for encfunctions.
Matti Hamalainen <ccr@tnsp.org>
parents: 903
diff changeset
1535 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1536 res = dmError(DMERR_INTERNAL,
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1537 "Encode op is a function, but function ptr is NULL: "
904
d3cd9f2a8ef1 Some dummy code for encfunctions.
Matti Hamalainen <ccr@tnsp.org>
parents: 903
diff changeset
1538 "op #%d, offs=%d ($%04x), bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
1465
88845f95e791 Change dmC64EncodeGenericBMP() to use DMGrowBuf, and make the necessary changes in gfxconv as well.
Matti Hamalainen <ccr@tnsp.org>
parents: 1463
diff changeset
1539 i, op->offs, op->offs, op->bank, size, size, buf->len, buf->len);
1447
de5f7e31a8bf Rename labels.
Matti Hamalainen <ccr@tnsp.org>
parents: 1443
diff changeset
1540 goto err;
904
d3cd9f2a8ef1 Some dummy code for encfunctions.
Matti Hamalainen <ccr@tnsp.org>
parents: 903
diff changeset
1541 }
d3cd9f2a8ef1 Some dummy code for encfunctions.
Matti Hamalainen <ccr@tnsp.org>
parents: 903
diff changeset
1542 /*
1482
df6dacb48970 Rename some struct members, and sanitize handling of DMC64Image allocation more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1478
diff changeset
1543 if (!op->encFunction(op, buf, len))
904
d3cd9f2a8ef1 Some dummy code for encfunctions.
Matti Hamalainen <ccr@tnsp.org>
parents: 903
diff changeset
1544 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1545 res = dmError(DMERR_INTERNAL,
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1546 "Encode op custom function failed: op #%d, "
904
d3cd9f2a8ef1 Some dummy code for encfunctions.
Matti Hamalainen <ccr@tnsp.org>
parents: 903
diff changeset
1547 "offs=%d ($%04x), bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
d3cd9f2a8ef1 Some dummy code for encfunctions.
Matti Hamalainen <ccr@tnsp.org>
parents: 903
diff changeset
1548 i, op->offs, op->offs, op->bank, size, size, len, len);
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1549 goto out;
904
d3cd9f2a8ef1 Some dummy code for encfunctions.
Matti Hamalainen <ccr@tnsp.org>
parents: 903
diff changeset
1550 }
d3cd9f2a8ef1 Some dummy code for encfunctions.
Matti Hamalainen <ccr@tnsp.org>
parents: 903
diff changeset
1551 */
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1552 break;
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1553 }
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1554 }
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1555
1448
50402c225ef4 Do not insert load address to the buffer beginning in dmC64EncodeGenericBMP().
Matti Hamalainen <ccr@tnsp.org>
parents: 1447
diff changeset
1556 res = DMERR_OK;
535
ab8d9696225c Add helper macros and use them to set the loading address while encoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 534
diff changeset
1557
1447
de5f7e31a8bf Rename labels.
Matti Hamalainen <ccr@tnsp.org>
parents: 1443
diff changeset
1558 err:
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1559 return res;
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1560 }
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1561
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1562
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1563 // Convert a generic "C64" format bitmap in DMC64Image struct to
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1564 // a indexed/paletted bitmap image.
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
1565 int dmC64ConvertGenericBMP2Image(DMImage *dst, const DMC64Image *src, const DMC64ImageFormat *fmt)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1566 {
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
1567 DMC64GetPixelFunc getPixel;
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1568
556
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1569 // Sanity check arguments
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1570 if (dst == NULL || src == NULL)
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1571 return DMERR_NULLPTR;
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1572
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1573 if (dst->width < src->width || dst->height < src->height)
1460
361cad3b8445 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 1457
diff changeset
1574 {
361cad3b8445 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 1457
diff changeset
1575 return dmError(DMERR_INVALID_DATA,
361cad3b8445 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 1457
diff changeset
1576 "Invalid src vs. dst width/height %d x %d <-> %d x %d\n",
361cad3b8445 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 1457
diff changeset
1577 src->width, src->height, dst->width, dst->height);
361cad3b8445 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 1457
diff changeset
1578 }
556
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1579
1167
848a88ce7a57 Use dmMemset().
Matti Hamalainen <ccr@tnsp.org>
parents: 1134
diff changeset
1580 dmMemset(dst->data, 0, dst->size);
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1581
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
1582 // Check pixel getter function
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
1583 if (fmt->getPixel != NULL)
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
1584 getPixel = fmt->getPixel;
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
1585 else
1376
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
1586 getPixel = (fmt->type & D64_FMT_MC) ? fmtGetGenericMCPixel : fmtGetGenericSCPixel;
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
1587
1362
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1588 // Resolution interlaced pics need to halve the source width
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1589 int rwidth = src->width;
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1590 if ((src->type & D64_FMT_ILACE) && src->laceType == D64_ILACE_RES)
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1591 rwidth /= 2;
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1592
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1593 // Perform conversion
1411
a9afb2ad39cb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1396
diff changeset
1594 Uint8 *dp = dst->data;
a9afb2ad39cb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1396
diff changeset
1595 for (int yc = 0; yc < src->height; yc++)
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1596 {
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1597 Uint8 *d = dp;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1598 const int y = yc / 8, yb = yc & 7;
1482
df6dacb48970 Rename some struct members, and sanitize handling of DMC64Image allocation more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1478
diff changeset
1599 const int scroffsy = y * src->chWidth;
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1600 int xc;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1601
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1602 if (src->type & D64_FMT_CHAR)
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1603 {
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1604 // Charmode conversion
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1605 if ((src->type & D64_FMT_MC) == D64_FMT_HIRES)
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1606 // Hi-res charmap
1362
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1607 for (xc = 0; xc < rwidth; xc++)
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1608 {
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1609 const int x = xc / 8;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1610 const int scroffs = scroffsy + x;
918
59615f9c2ca9 Cosmetic.
Matti Hamalainen <ccr@tnsp.org>
parents: 917
diff changeset
1611 const int chr = src->screen[0][scroffs];
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1612 const int v = 7 - (xc & 7);
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1613
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1614 if ((src->charmem[0][chr * C64_CHR_SIZE + yb] >> v) & 1)
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1615 *d++ = src->color[0][scroffs];
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1616 else
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1617 *d++ = src->bgcolor;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1618 }
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1619 else
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1620 // Multicolor variants
1362
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1621 for (xc = 0; xc < rwidth; xc++)
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1622 {
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1623 const int x = xc / 4;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1624 const int scroffs = scroffsy + x;
918
59615f9c2ca9 Cosmetic.
Matti Hamalainen <ccr@tnsp.org>
parents: 917
diff changeset
1625 const int chr = src->screen[0][scroffs];
944
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1626 const int col = src->color[0][scroffs] & 15;
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
1627
944
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1628 if (col & 8)
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1629 {
944
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1630 const int v = 6 - ((xc * 2) & 6);
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1631 switch ((src->charmem[0][chr * C64_CHR_SIZE + yb] >> v) & 3)
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1632 {
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1633 case 0: *d++ = src->bgcolor; break;
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1634 case 1: *d++ = src->d022; break;
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1635 case 2: *d++ = src->d023; break;
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1636 case 3: *d++ = col;
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1637 }
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1638 }
944
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1639 else
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1640 {
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1641 const int v = 7 - (xc & 7);
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1642 if ((src->charmem[0][chr * C64_CHR_SIZE + yb] >> v) & 1)
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1643 *d++ = src->color[0][scroffs];
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1644 else
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1645 *d++ = src->bgcolor;
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1646 }
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1647 }
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1648 }
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1649 else
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1650 {
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1651 // Perform generic BITMAP conversion
1482
df6dacb48970 Rename some struct members, and sanitize handling of DMC64Image allocation more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1478
diff changeset
1652 const int bmoffsy = y * src->chWidth * 8 + yb;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1653
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1654 if ((src->type & D64_FMT_MC) == D64_FMT_HIRES)
811
aebc2f8b2c2d Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 810
diff changeset
1655 // Hi-res bitmap
1362
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1656 for (xc = 0; xc < rwidth; xc++)
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1657 {
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1658 const int x = xc / 8;
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1659 const int scroffs = scroffsy + x;
940
ff18d2511843 Remove the doubleMC madness completely. Should be replaced with x/y aspect
Matti Hamalainen <ccr@tnsp.org>
parents: 939
diff changeset
1660 const int bmoffs = bmoffsy + (x * 8);
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
1661 const int vshift = 7 - (xc & 7);
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1662
1387
14d79e4d82cf Oops, 100L. Had forgotten to change singlecolor mode handling pixel getter
Matti Hamalainen <ccr@tnsp.org>
parents: 1385
diff changeset
1663 *d++ = getPixel(src, bmoffs, scroffs, vshift, 0, yc);
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1664 }
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1665 else
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1666 // Multicolor bitmap and variants
1362
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1667 for (xc = 0; xc < rwidth; xc++)
529
1bce06b5026f Combine conversion of interlaced and normal multicolor images to one function.
Matti Hamalainen <ccr@tnsp.org>
parents: 528
diff changeset
1668 {
901
f532262f90b1 Actually fix commit 16aa5955dfb5.
Matti Hamalainen <ccr@tnsp.org>
parents: 857
diff changeset
1669 const int x = xc / 4;
f532262f90b1 Actually fix commit 16aa5955dfb5.
Matti Hamalainen <ccr@tnsp.org>
parents: 857
diff changeset
1670 const int scroffs = scroffsy + x;
940
ff18d2511843 Remove the doubleMC madness completely. Should be replaced with x/y aspect
Matti Hamalainen <ccr@tnsp.org>
parents: 939
diff changeset
1671 const int bmoffs = bmoffsy + (x * 8);
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
1672 const int vshift = 6 - ((xc * 2) & 6);
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1673
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1674 if (src->type & D64_FMT_ILACE)
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1675 {
1362
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1676 switch (src->laceType)
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1677 {
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1678 case D64_ILACE_RES:
1376
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
1679 *d++ = getPixel(src, bmoffs, scroffs, vshift, 0, yc);
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
1680 *d++ = getPixel(src, bmoffs, scroffs, vshift, 1, yc);
1362
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1681 break;
1366
d4387509a363 Return DMERR_NOT_SUPPORTED for decoding color-interlaced images, for now
Matti Hamalainen <ccr@tnsp.org>
parents: 1365
diff changeset
1682
d4387509a363 Return DMERR_NOT_SUPPORTED for decoding color-interlaced images, for now
Matti Hamalainen <ccr@tnsp.org>
parents: 1365
diff changeset
1683 default:
d4387509a363 Return DMERR_NOT_SUPPORTED for decoding color-interlaced images, for now
Matti Hamalainen <ccr@tnsp.org>
parents: 1365
diff changeset
1684 return DMERR_NOT_SUPPORTED;
1362
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1685 }
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1686 }
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1687 else
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1688 {
1376
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
1689 *d++ = getPixel(src, bmoffs, scroffs, vshift, 0, yc);
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1690 }
529
1bce06b5026f Combine conversion of interlaced and normal multicolor images to one function.
Matti Hamalainen <ccr@tnsp.org>
parents: 528
diff changeset
1691 }
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1692 }
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1693 dp += dst->pitch;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1694 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1695
508
1ed5025c2538 Return DMLIB error values instead of arbitrary 0/negatives.
Matti Hamalainen <ccr@tnsp.org>
parents: 507
diff changeset
1696 return DMERR_OK;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1697 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1698
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1699
940
ff18d2511843 Remove the doubleMC madness completely. Should be replaced with x/y aspect
Matti Hamalainen <ccr@tnsp.org>
parents: 939
diff changeset
1700 int dmC64ConvertBMP2Image(DMImage **pdst, const DMC64Image *src, const DMC64ImageFormat *fmt)
556
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1701 {
940
ff18d2511843 Remove the doubleMC madness completely. Should be replaced with x/y aspect
Matti Hamalainen <ccr@tnsp.org>
parents: 939
diff changeset
1702 int res;
556
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1703 DMImage *dst;
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1704
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1705 if (pdst == NULL || src == NULL)
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1706 return DMERR_NULLPTR;
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1707
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1708 // Allocate image structure
1289
Matti Hamalainen <ccr@tnsp.org>
parents: 1235
diff changeset
1709 if ((*pdst = dst = dmImageAlloc(src->width, src->height, DM_IFMT_PALETTE, -1)) == NULL)
556
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1710 return DMERR_MALLOC;
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1711
1426
4c7b456d7f0b Rename global dmC64Palette to dmDefaultC64Palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 1425
diff changeset
1712 // Set partial palette information
556
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1713 dst->ncolors = C64_NCOLORS;
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1714 dst->constpal = TRUE;
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1715
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1716 // Convert
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1717 if (fmt->convertFrom != NULL)
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
1718 res = fmt->convertFrom(dst, src, fmt);
556
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1719 else
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
1720 res = dmC64ConvertGenericBMP2Image(dst, src, fmt);
556
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1721
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1722 return res;
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1723 }
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1724
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1725
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1726 int dmC64DecodeBMP(DMC64Image **img, const Uint8 *buf, const size_t len,
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1727 const size_t probeOffs, const size_t loadOffs,
516
6f141f760c54 Constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 515
diff changeset
1728 const DMC64ImageFormat **fmt, const DMC64ImageFormat *forced)
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1729 {
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1730 if (img == NULL)
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1731 return DMERR_NULLPTR;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1732
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1733 // Check for forced format
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1734 if (forced != NULL)
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1735 *fmt = forced;
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1736 else
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1737 {
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1738 // Nope, perform a generic probe
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1739 if (probeOffs >= len)
1460
361cad3b8445 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 1457
diff changeset
1740 return DMERR_OUT_OF_DATA;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1741
537
32d9e67da189 Rename generic probing function to match the style of other lib64gfx functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 536
diff changeset
1742 if (dmC64ProbeBMP(buf + probeOffs, len - probeOffs, fmt) == DM_PROBE_SCORE_FALSE)
1460
361cad3b8445 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 1457
diff changeset
1743 return DMERR_NOT_SUPPORTED;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1744 }
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1745
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1746 if (loadOffs >= len)
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1747 return DMERR_INVALID_ARGS;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1748
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1749 if (*fmt == NULL)
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1750 return DMERR_INVALID_DATA;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1751
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1752 // Allocate memory
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
1753 if ((*img = dmC64ImageAlloc(*fmt)) == NULL)
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1754 return DMERR_MALLOC;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1755
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1756 // Decode the bitmap to memory layout
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1757 if ((*fmt)->decode != NULL)
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1758 return (*fmt)->decode(*img, buf + loadOffs, len - loadOffs, *fmt);
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1759 else
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1760 return dmC64DecodeGenericBMP(*img, buf + loadOffs, len - loadOffs, *fmt);
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1761 }
1467
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1762
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1763
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1764 // Convert a generic bitmap image to DMC64Image
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1765 int dmC64ConvertGenericImage2BMP(DMC64Image *dst, const DMImage *src, const DMC64ImageFormat *fmt)
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1766 {
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1767 if (dst == NULL || src == NULL || fmt == NULL)
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1768 return DMERR_NULLPTR;
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1769
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1770 return DMERR_OK;
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1771 }
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1772
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1773
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1774 int dmC64ConvertImage2BMP(DMC64Image **pdst, const DMImage *src, const DMC64ImageFormat *fmt)
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1775 {
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1776 int res;
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1777 DMC64Image *dst;
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1778
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1779 if (pdst == NULL || src == NULL)
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1780 return DMERR_NULLPTR;
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1781
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1782 // Allocate the basic C64 bitmap image structure
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1783 if ((*pdst = dst = dmC64ImageAlloc(fmt)) == NULL)
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1784 return DMERR_MALLOC;
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1785
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1786 // Convert
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1787 if (fmt->convertTo != NULL)
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1788 res = fmt->convertTo(dst, src, fmt);
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1789 else
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1790 res = dmC64ConvertGenericImage2BMP(dst, src, fmt);
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1791
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1792 return res;
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1793 }
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1794
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1795
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1796 int dmC64EncodeBMP(DMGrowBuf *buf, const DMC64Image *img, const DMC64ImageFormat *fmt)
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1797 {
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1798 int res;
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1799
1472
b9d3577d8290 Improve error handling and checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 1471
diff changeset
1800 if (img == NULL || fmt == NULL)
1467
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1801 return DMERR_NULLPTR;
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1802
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1803 // Attempt to encode the image to a buffer
1472
b9d3577d8290 Improve error handling and checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 1471
diff changeset
1804 if ((res = dmGrowBufInit(buf)) != DMERR_OK)
b9d3577d8290 Improve error handling and checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 1471
diff changeset
1805 return res;
b9d3577d8290 Improve error handling and checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 1471
diff changeset
1806
1467
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1807 if (fmt->encode != NULL)
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1808 res = fmt->encode(buf, img, fmt);
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1809 else
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1810 res = dmC64EncodeGenericBMP(buf, img, fmt);
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1811
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1812 if (res != DMERR_OK)
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1813 goto err;
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1814
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1815 // Add the loading address
1469
0046b4e1b35f Various fixes in bmp encoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1467
diff changeset
1816 if (!dmGrowBufGrow(buf, 2))
0046b4e1b35f Various fixes in bmp encoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1467
diff changeset
1817 {
0046b4e1b35f Various fixes in bmp encoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1467
diff changeset
1818 res = DMERR_MALLOC;
1467
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1819 goto err;
1469
0046b4e1b35f Various fixes in bmp encoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1467
diff changeset
1820 }
1467
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1821
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1822 memmove(buf->data + 2, buf->data, buf->len);
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1823
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1824 buf->data[0] = DM_GET_ADDR_LO(fmt->addr);
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1825 buf->data[1] = DM_GET_ADDR_HI(fmt->addr);
1485
06a9c16601d6 Oops. Fix dmC64EncodeBMP() to add loading address to total data size.
Matti Hamalainen <ccr@tnsp.org>
parents: 1483
diff changeset
1826 buf->len += 2;
1467
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1827
1469
0046b4e1b35f Various fixes in bmp encoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 1467
diff changeset
1828 return DMERR_OK;
1467
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1829
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1830 err:
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1831 dmGrowBufFree(buf);
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1832 return res;
32203356c652 Add some new functions that are mostly just stubs and not working tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 1466
diff changeset
1833 }