annotate tools/gfxconv.c @ 2120:88d37ec1b4d6

Bump copyright years.
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 26 May 2019 18:40:45 +0300
parents 5f8f170f8774
children 47ddbedf5b56
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 * gfxconv - Convert various 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
3 * Programmed and designed by Matti 'ccr' Hamalainen
2120
88d37ec1b4d6 Bump copyright years.
Matti Hamalainen <ccr@tnsp.org>
parents: 2108
diff changeset
4 * (C) Copyright 2012-2019 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
5 *
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
6 * 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
7 */
1432
a9516570cc26 Improve build, so that we can build the tools and tests with minimal
Matti Hamalainen <ccr@tnsp.org>
parents: 1426
diff changeset
8 #include "dmtool.h"
407
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 "dmlib.h"
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
10 #include "dmargs.h"
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
11 #include "dmfile.h"
435
e4a3f183e463 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 432
diff changeset
12 #include "libgfx.h"
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
13 #include "lib64gfx.h"
1433
d8a83582f78f Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1432
diff changeset
14 #include "dmmutex.h"
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
15
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
16
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
17 #define DM_MAX_COLORS 256
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
18
837
5333dd4a99e4 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 829
diff changeset
19 #define DM_ASC_NBITS 8
5333dd4a99e4 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 829
diff changeset
20 #define DM_ASC_NCOLORS 4
5333dd4a99e4 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 829
diff changeset
21 static const char dmASCIIPalette[DM_ASC_NCOLORS] = ".:X#";
5333dd4a99e4 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 829
diff changeset
22
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
23
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
24 enum
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
25 {
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
26 FFMT_AUTO = 0,
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
27
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
28 FFMT_ASCII,
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
29 FFMT_ANSI,
1869
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
30 FFMT_BITMAP,
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
31 FFMT_CHAR,
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
32 FFMT_SPRITE,
1869
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
33
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
34 FFMT_IMAGE,
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
35
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
36 FFMT_LAST
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
37 };
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
38
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
39
2022
eb6dafdd36dc Add option -C for controlling output file compression (PNG and IFF for now) in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2021
diff changeset
40 enum
eb6dafdd36dc Add option -C for controlling output file compression (PNG and IFF for now) in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2021
diff changeset
41 {
eb6dafdd36dc Add option -C for controlling output file compression (PNG and IFF for now) in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2021
diff changeset
42 FCMP_NONE = 0,
eb6dafdd36dc Add option -C for controlling output file compression (PNG and IFF for now) in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2021
diff changeset
43 FCMP_BEST = 9
eb6dafdd36dc Add option -C for controlling output file compression (PNG and IFF for now) in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2021
diff changeset
44 };
eb6dafdd36dc Add option -C for controlling output file compression (PNG and IFF for now) in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2021
diff changeset
45
eb6dafdd36dc Add option -C for controlling output file compression (PNG and IFF for now) in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2021
diff changeset
46
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
47 static const char *formatTypeList[FFMT_LAST] =
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
48 {
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
49 "AUTO",
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
50 "ASCII text",
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
51 "ANSI text",
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
52 "C64 bitmap image",
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
53 "C64 character/font data",
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
54 "C64 sprite data",
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
55 "Image",
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
56 };
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
57
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
58
854
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
59 enum
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
60 {
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
61 CROP_NONE = 0,
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
62 CROP_AUTO,
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
63 CROP_SIZE,
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
64 };
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
65
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
66
2058
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
67 enum
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
68 {
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
69 SCALE_SET,
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
70 SCALE_RELATIVE,
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
71 SCALE_AUTO,
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
72 };
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
73
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
74
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
75 typedef struct
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
76 {
1340
1f8687c61891 Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1330
diff changeset
77 char *name; // Descriptive name of the format
1f8687c61891 Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1330
diff changeset
78 char *fext; // File extension
1545
3b613fcbf3ff Improve how format read/write capabilities are marked and shown.
Matti Hamalainen <ccr@tnsp.org>
parents: 1543
diff changeset
79 int flags; // DM_FMT_* flags, see libgfx.h
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
80 int type; // Format type
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
81 int format; // Subformat identifier
2103
78a9140f02b1 Improve help for spr/chr formats by listing the :mc and :sc flags at their
Matti Hamalainen <ccr@tnsp.org>
parents: 2100
diff changeset
82 char *help;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
83 } DMConvFormat;
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
84
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
85
1616
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
86 static const DMConvFormat baseFormatList[] =
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
87 {
2103
78a9140f02b1 Improve help for spr/chr formats by listing the :mc and :sc flags at their
Matti Hamalainen <ccr@tnsp.org>
parents: 2100
diff changeset
88 { "ASCII text" , "asc" , DM_FMT_WR , FFMT_ASCII , 0 , NULL },
78a9140f02b1 Improve help for spr/chr formats by listing the :mc and :sc flags at their
Matti Hamalainen <ccr@tnsp.org>
parents: 2100
diff changeset
89 { "ANSI colored text" , "ansi" , DM_FMT_WR , FFMT_ANSI , 0 , NULL },
78a9140f02b1 Improve help for spr/chr formats by listing the :mc and :sc flags at their
Matti Hamalainen <ccr@tnsp.org>
parents: 2100
diff changeset
90 { "C64 bitmap image" , NULL , DM_FMT_RDWR , FFMT_BITMAP , -1 , NULL },
78a9140f02b1 Improve help for spr/chr formats by listing the :mc and :sc flags at their
Matti Hamalainen <ccr@tnsp.org>
parents: 2100
diff changeset
91 { "C64 character/font data" , "chr" , DM_FMT_RDWR , FFMT_CHAR , 0 , " (chr:mc/chr:sc for multi/singlecolor)" },
78a9140f02b1 Improve help for spr/chr formats by listing the :mc and :sc flags at their
Matti Hamalainen <ccr@tnsp.org>
parents: 2100
diff changeset
92 { "C64 sprite data" , "spr" , DM_FMT_RDWR , FFMT_SPRITE , 0 , " (spr:mc/spr:sc for multi/singlecolor)" },
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
93 };
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
94
1616
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
95 static const int nbaseFormatList = sizeof(baseFormatList) / sizeof(baseFormatList[0]);
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
96
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
97
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
98 static DMConvFormat *convFormatList = NULL;
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
99 static int nconvFormatList = 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
100
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
101
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
102 typedef struct
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
103 {
474
95d1facfdb77 Improve color matching, make it possible to ignore alpha values.
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
104 BOOL triplet, alpha;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
105 DMColor color;
871
fc272f5f2d15 Make value type of dmGetIntVal() unsigned.
Matti Hamalainen <ccr@tnsp.org>
parents: 867
diff changeset
106 unsigned int from, to;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
107 } DMMapValue;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
108
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
109
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
110
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
111 char *optInFilename = NULL,
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
112 *optOutFilename = NULL;
837
5333dd4a99e4 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 829
diff changeset
113
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
114 int optInType = FFMT_AUTO,
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
115 optOutType = FFMT_AUTO,
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
116 optInFormat = -1,
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
117 optOutFormat = -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
118 optItemCount = -1,
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
119 optPlanedWidth = 1,
1867
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
120 optForcedInSubFormat = -1;
871
fc272f5f2d15 Make value type of dmGetIntVal() unsigned.
Matti Hamalainen <ccr@tnsp.org>
parents: 867
diff changeset
121 unsigned int optInSkip = 0;
2005
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
122 BOOL optInSkipNeg = FALSE;
838
f2ac9877263e Bitmap format specifying option changes.
Matti Hamalainen <ccr@tnsp.org>
parents: 837
diff changeset
123
854
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
124 int optCropMode = CROP_NONE,
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
125 optCropX0, optCropY0,
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
126 optCropW, optCropH;
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
127
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
128 BOOL optInMulticolor = FALSE,
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
129 optSequential = FALSE,
479
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
130 optRemapColors = FALSE,
2065
451980580189 Refactor how paletted/indexed formats are handled in libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 2062
diff changeset
131 optRemapRemove = FALSE,
451980580189 Refactor how paletted/indexed formats are handled in libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 2062
diff changeset
132 optUsePalette = FALSE;
2058
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
133 int optNRemapTable = 0,
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
134 optScaleMode = SCALE_AUTO;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
135 DMMapValue optRemapTable[DM_MAX_COLORS];
1865
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
136 int optColorMap[C64_NCOLORS];
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
137
1290
e7dc9bb9777e Rename struct DMImageSpec to DMImageConvSpec.
Matti Hamalainen <ccr@tnsp.org>
parents: 1288
diff changeset
138 DMImageConvSpec optSpec =
435
e4a3f183e463 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 432
diff changeset
139 {
902
c6c480e8e1c8 Add separate X and Y scaling to gfxconv and libgfx outputters.
Matti Hamalainen <ccr@tnsp.org>
parents: 897
diff changeset
140 .scaleX = 1,
c6c480e8e1c8 Add separate X and Y scaling to gfxconv and libgfx outputters.
Matti Hamalainen <ccr@tnsp.org>
parents: 897
diff changeset
141 .scaleY = 1,
2099
dac89484f143 Fix nplanes and bpp in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2097
diff changeset
142 .nplanes = 0,
1288
6c8b19d1d196 More work on libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 1280
diff changeset
143 .bpp = 8,
1291
2c4acbc3e7bf More work on libgfx etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 1290
diff changeset
144 .planar = FALSE,
435
e4a3f183e463 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 432
diff changeset
145 .format = 0,
2022
eb6dafdd36dc Add option -C for controlling output file compression (PNG and IFF for now) in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2021
diff changeset
146 .compression = FCMP_BEST,
435
e4a3f183e463 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 432
diff changeset
147 };
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
148
860
daebbf28953d The argument handling API in dmargs* was synced with th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 854
diff changeset
149 static const DMOptArg optList[] =
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
150 {
983
98e749d990b0 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 975
diff changeset
151 { 0, '?', "help", "Show this help", OPT_NONE },
98e749d990b0 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 975
diff changeset
152 { 15, 'v', "verbose", "Increase verbosity", OPT_NONE },
98e749d990b0 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 975
diff changeset
153 { 3, 'o', "output", "Output filename", OPT_ARGREQ },
2006
9f7e9a393771 Document the negative input skip in -s option help.
Matti Hamalainen <ccr@tnsp.org>
parents: 2005
diff changeset
154 { 4, 's', "skip", "Skip N bytes in input from start (negative value will be offset from input end)", OPT_ARGREQ },
2103
78a9140f02b1 Improve help for spr/chr formats by listing the :mc and :sc flags at their
Matti Hamalainen <ccr@tnsp.org>
parents: 2100
diff changeset
155 { 1, 'i', "informat", "Set input format (see --formats)", OPT_ARGREQ },
78a9140f02b1 Improve help for spr/chr formats by listing the :mc and :sc flags at their
Matti Hamalainen <ccr@tnsp.org>
parents: 2100
diff changeset
156 { 5, 'f', "format", "Set output format (see --formats)", OPT_ARGREQ },
1640
e9a43ee46f71 Add '-F' short option alias for '--formats'.
Matti Hamalainen <ccr@tnsp.org>
parents: 1638
diff changeset
157 { 17, 'F', "formats", "List supported input/output formats", OPT_NONE },
983
98e749d990b0 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 975
diff changeset
158 { 8, 'q', "sequential", "Output sequential files (image output only)", OPT_NONE },
2029
5ecd51009072 Rename '-c' colorindex map short option to '-m'.
Matti Hamalainen <ccr@tnsp.org>
parents: 2022
diff changeset
159 { 6, 'm', "colormap", "Set color index mapping (see below for information)", OPT_ARGREQ },
983
98e749d990b0 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 975
diff changeset
160 { 7, 'n', "numitems", "How many 'items' to output (default: all)", OPT_ARGREQ },
98e749d990b0 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 975
diff changeset
161 { 11, 'w', "width", "Item width (number of items per row, min 1)", OPT_ARGREQ },
2058
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
162 { 9, 'S', "scale", "Scale output image by specified value(s) (see below)", OPT_ARGREQ },
987
5af2097ab284 Cleanup gfxconv option help a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 983
diff changeset
163 { 12, 'P', "paletted", "Use indexed/paletted output IF possible.", OPT_NONE },
1291
2c4acbc3e7bf More work on libgfx etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 1290
diff changeset
164 { 13, 'N', "nplanes", "# of bitplanes (some output formats)", OPT_ARGREQ },
2c4acbc3e7bf More work on libgfx etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 1290
diff changeset
165 { 18, 'B', "bpp", "Bits per pixel (some output formats)", OPT_ARGREQ },
1293
1dce9e5f4a2f Oops, two options were overlapping, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 1291
diff changeset
166 { 14, 'I', "interleave", "Interleaved/planar output (some output formats)", OPT_NONE },
2059
5b7f5505267c Improve gfxconv --help a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 2058
diff changeset
167 { 20, 'C', "compress", "Use compression -C <0-9>, 0 = disable, default is 9", OPT_ARGREQ },
983
98e749d990b0 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 975
diff changeset
168 { 16, 'R', "remap", "Remap output image colors (-R <(#RRGGBB|index):index>[,<..>][+remove] | -R @map.txt[+remove])", OPT_ARGREQ },
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
169 };
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
170
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
171 static const int optListN = sizeof(optList) / sizeof(optList[0]);
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
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
174 void argShowFormats()
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 {
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
176 printf(
1545
3b613fcbf3ff Improve how format read/write capabilities are marked and shown.
Matti Hamalainen <ccr@tnsp.org>
parents: 1543
diff changeset
177 "Available input/output formats (-f <frmt>):\n"
3b613fcbf3ff Improve how format read/write capabilities are marked and shown.
Matti Hamalainen <ccr@tnsp.org>
parents: 1543
diff changeset
178 " frmt | RW | Description\n"
3b613fcbf3ff Improve how format read/write capabilities are marked and shown.
Matti Hamalainen <ccr@tnsp.org>
parents: 1543
diff changeset
179 "------+----+-------------------------------------------------------\n"
432
b583a682f12d Improve listing of input/output formats in --help.
Matti Hamalainen <ccr@tnsp.org>
parents: 431
diff changeset
180 );
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
181
1532
74febc66d90d Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 1526
diff changeset
182 for (int i = 0; i < nconvFormatList; 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
183 {
1545
3b613fcbf3ff Improve how format read/write capabilities are marked and shown.
Matti Hamalainen <ccr@tnsp.org>
parents: 1543
diff changeset
184 const DMConvFormat *fmt = &convFormatList[i];
2103
78a9140f02b1 Improve help for spr/chr formats by listing the :mc and :sc flags at their
Matti Hamalainen <ccr@tnsp.org>
parents: 2100
diff changeset
185 printf("%-6s| %c%c | %s%s\n",
432
b583a682f12d Improve listing of input/output formats in --help.
Matti Hamalainen <ccr@tnsp.org>
parents: 431
diff changeset
186 fmt->fext ? fmt->fext : "",
1545
3b613fcbf3ff Improve how format read/write capabilities are marked and shown.
Matti Hamalainen <ccr@tnsp.org>
parents: 1543
diff changeset
187 (fmt->flags & DM_FMT_RD) ? 'R' : ' ',
3b613fcbf3ff Improve how format read/write capabilities are marked and shown.
Matti Hamalainen <ccr@tnsp.org>
parents: 1543
diff changeset
188 (fmt->flags & DM_FMT_WR) ? 'W' : ' ',
2103
78a9140f02b1 Improve help for spr/chr formats by listing the :mc and :sc flags at their
Matti Hamalainen <ccr@tnsp.org>
parents: 2100
diff changeset
189 fmt->name,
78a9140f02b1 Improve help for spr/chr formats by listing the :mc and :sc flags at their
Matti Hamalainen <ccr@tnsp.org>
parents: 2100
diff changeset
190 fmt->help != NULL ? fmt->help : "");
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
191 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
192
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
193 printf(
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
194 "\n"
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
195 "(Not all input->output combinations are actually supported.)\n"
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
196 "\n"
1604
d91d2a67eda5 Typofix.
Matti Hamalainen <ccr@tnsp.org>
parents: 1591
diff changeset
197 "Available C64 bitmap formats (-f <frmt>):\n"
1545
3b613fcbf3ff Improve how format read/write capabilities are marked and shown.
Matti Hamalainen <ccr@tnsp.org>
parents: 1543
diff changeset
198 " frmt | RW | Type | Description\n"
3b613fcbf3ff Improve how format read/write capabilities are marked and shown.
Matti Hamalainen <ccr@tnsp.org>
parents: 1543
diff changeset
199 "------+----+-----------------+-------------------------------------\n"
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
200 );
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
201
1532
74febc66d90d Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 1526
diff changeset
202 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
203 {
516
6f141f760c54 Constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 509
diff changeset
204 const DMC64ImageFormat *fmt = &dmC64ImageFormats[i];
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 516
diff changeset
205 char buf[64];
1759
027fb7313d85 Add a format flag for marking formats that have broken/incomplete support and use it.
Matti Hamalainen <ccr@tnsp.org>
parents: 1747
diff changeset
206 printf("%-6s| %c%c | %-15s | %s%s\n",
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
207 fmt->fext,
1545
3b613fcbf3ff Improve how format read/write capabilities are marked and shown.
Matti Hamalainen <ccr@tnsp.org>
parents: 1543
diff changeset
208 (fmt->flags & DM_FMT_RD) ? 'R' : ' ',
3b613fcbf3ff Improve how format read/write capabilities are marked and shown.
Matti Hamalainen <ccr@tnsp.org>
parents: 1543
diff changeset
209 (fmt->flags & DM_FMT_WR) ? 'W' : ' ',
1775
4e4d54135baf Refactor the c64 bitmap format definitions handling to be more flexible. Again.
Matti Hamalainen <ccr@tnsp.org>
parents: 1759
diff changeset
210 dmC64GetImageTypeString(buf, sizeof(buf), fmt->format->type, FALSE),
1759
027fb7313d85 Add a format flag for marking formats that have broken/incomplete support and use it.
Matti Hamalainen <ccr@tnsp.org>
parents: 1747
diff changeset
211 fmt->name,
027fb7313d85 Add a format flag for marking formats that have broken/incomplete support and use it.
Matti Hamalainen <ccr@tnsp.org>
parents: 1747
diff changeset
212 fmt->flags & DM_FMT_BROKEN ? " [BROKEN]" : "");
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
213 }
1667
7f74073813c6 Display number of supported C64 image formats in --formats list of 64vw and gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1664
diff changeset
214 printf("%d formats supported.\n", ndmC64ImageFormats);
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
215 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
216
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
217
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
218 void argShowHelp()
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
219 {
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
220 dmPrintBanner(stdout, dmProgName, "[options] <input file>");
860
daebbf28953d The argument handling API in dmargs* was synced with th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 854
diff changeset
221 dmArgsPrintHelp(stdout, optList, optListN, 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
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 printf(
837
5333dd4a99e4 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 829
diff changeset
224 "\n"
2058
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
225 "Output image scaling (-S)\n"
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
226 "-------------------------\n"
2062
f11fad2dc3b5 Improve scale factor option '-S' help.
Matti Hamalainen <ccr@tnsp.org>
parents: 2059
diff changeset
227 "Scaling option '-S <n>', '-S <x>:<y>', '-S <x>:<y>*<n>' can be used to set\n"
f11fad2dc3b5 Improve scale factor option '-S' help.
Matti Hamalainen <ccr@tnsp.org>
parents: 2059
diff changeset
228 "the direct or relative scale integer factor(s). '-S <n>' sets both height\n"
f11fad2dc3b5 Improve scale factor option '-S' help.
Matti Hamalainen <ccr@tnsp.org>
parents: 2059
diff changeset
229 "and width scale factor to <n>. '-S <x>:<y>*<n>' scales width by X*n and\n"
f11fad2dc3b5 Improve scale factor option '-S' help.
Matti Hamalainen <ccr@tnsp.org>
parents: 2059
diff changeset
230 "height Y*n. Certain input formats set their default aspect/scale factors.\n"
f11fad2dc3b5 Improve scale factor option '-S' help.
Matti Hamalainen <ccr@tnsp.org>
parents: 2059
diff changeset
231 "By prepending -S parameters with asterisk ('*') you can scale relative to\n"
f11fad2dc3b5 Improve scale factor option '-S' help.
Matti Hamalainen <ccr@tnsp.org>
parents: 2059
diff changeset
232 "those values. (e.g. '-S *2' for example.) NOTE! Only integer scale factors\n"
f11fad2dc3b5 Improve scale factor option '-S' help.
Matti Hamalainen <ccr@tnsp.org>
parents: 2059
diff changeset
233 "can be used at the moment.\n"
2058
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
234 "\n"
1914
87245043a7ae Clarify gfxconv help.
Matti Hamalainen <ccr@tnsp.org>
parents: 1911
diff changeset
235 "Palette remapping (-R)\n"
87245043a7ae Clarify gfxconv help.
Matti Hamalainen <ccr@tnsp.org>
parents: 1911
diff changeset
236 "----------------------\n"
87245043a7ae Clarify gfxconv help.
Matti Hamalainen <ccr@tnsp.org>
parents: 1911
diff changeset
237 "Indexed palette color remapping can be performed via the -R option, either\n"
818
a6452b575c63 Add some online documentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 814
diff changeset
238 "specifying single colors or filename of file containing remap definitions.\n"
a6452b575c63 Add some online documentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 814
diff changeset
239 "Colors to be remapped can be specified either by their palette index or by\n"
a6452b575c63 Add some online documentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 814
diff changeset
240 "their RGB values as a hex triplet (#rrggbb). Example of a remap definition:\n"
a6452b575c63 Add some online documentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 814
diff changeset
241 "-R #000000:0,#ffffff:1 would remap black and white to indices 0 and 1.\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
242 "\n"
1330
62ef5cc2b475 Clarify help.
Matti Hamalainen <ccr@tnsp.org>
parents: 1329
diff changeset
243 "Remap file can be specified as \"-R @filename\", and it is a text file with\n"
62ef5cc2b475 Clarify help.
Matti Hamalainen <ccr@tnsp.org>
parents: 1329
diff changeset
244 "one remap definition per line in same format as above. All empty lines and\n"
62ef5cc2b475 Clarify help.
Matti Hamalainen <ccr@tnsp.org>
parents: 1329
diff changeset
245 "lines starting with a semicolor (;) will be ignored as comments. Any extra\n"
62ef5cc2b475 Clarify help.
Matti Hamalainen <ccr@tnsp.org>
parents: 1329
diff changeset
246 "whitespace separating items will be ignored as well.\n"
818
a6452b575c63 Add some online documentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 814
diff changeset
247 "\n"
821
8ec16cca0eef Change -R remap option syntax slightly and document it.
Matti Hamalainen <ccr@tnsp.org>
parents: 820
diff changeset
248 "Optional +remove can be specified (-R <...>+remove), which will remove all\n"
2077
838ed06b3927 Make a note about '-R +remove' in help.
Matti Hamalainen <ccr@tnsp.org>
parents: 2070
diff changeset
249 "unused colors from the palette. This is not always desirable, for example\n"
838ed06b3927 Make a note about '-R +remove' in help.
Matti Hamalainen <ccr@tnsp.org>
parents: 2070
diff changeset
250 "when converting multiple images to same palette. You can also specify the\n"
838ed06b3927 Make a note about '-R +remove' in help.
Matti Hamalainen <ccr@tnsp.org>
parents: 2070
diff changeset
251 "+remove option by itself to remove all unused colors: -R +remove\n"
821
8ec16cca0eef Change -R remap option syntax slightly and document it.
Matti Hamalainen <ccr@tnsp.org>
parents: 820
diff changeset
252 "\n"
2029
5ecd51009072 Rename '-c' colorindex map short option to '-m'.
Matti Hamalainen <ccr@tnsp.org>
parents: 2022
diff changeset
253 "Color index mapping (-m)\n"
5ecd51009072 Rename '-c' colorindex map short option to '-m'.
Matti Hamalainen <ccr@tnsp.org>
parents: 2022
diff changeset
254 "------------------------\n"
1914
87245043a7ae Clarify gfxconv help.
Matti Hamalainen <ccr@tnsp.org>
parents: 1911
diff changeset
255 "Color mapping definitions are used for ANSI and image output, to declare what\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
256 "output colors of the C64 palette are used for each single color/multi color\n"
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
257 "bit-combination. For example, if the input is multi color sprite or char,\n"
2029
5ecd51009072 Rename '-c' colorindex map short option to '-m'.
Matti Hamalainen <ccr@tnsp.org>
parents: 2022
diff changeset
258 "you can define colors like: -m 0,8,3,15 .. for single color: -m 0,1\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
259 "The numbers are palette indexes, and the order is for bit(pair)-values\n"
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
260 "00, 01, 10, 11 (multi color) and 0, 1 (single color). NOTICE! 255 is the\n"
1914
87245043a7ae Clarify gfxconv help.
Matti Hamalainen <ccr@tnsp.org>
parents: 1911
diff changeset
261 "special transparency color index.\n"
837
5333dd4a99e4 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 829
diff changeset
262 "\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
263 );
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
264 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
265
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
266
2079
9b6027d51f76 Move dm_strdup_fext() and dm_basefilename() to gfxconv, as they are only used there.
Matti Hamalainen <ccr@tnsp.org>
parents: 2077
diff changeset
267 /* Replace filename extension based on format pattern.
9b6027d51f76 Move dm_strdup_fext() and dm_basefilename() to gfxconv, as they are only used there.
Matti Hamalainen <ccr@tnsp.org>
parents: 2077
diff changeset
268 * Usage: res = dm_strdup_fext(orig_filename, "foo_%s.cmp");
9b6027d51f76 Move dm_strdup_fext() and dm_basefilename() to gfxconv, as they are only used there.
Matti Hamalainen <ccr@tnsp.org>
parents: 2077
diff changeset
269 */
9b6027d51f76 Move dm_strdup_fext() and dm_basefilename() to gfxconv, as they are only used there.
Matti Hamalainen <ccr@tnsp.org>
parents: 2077
diff changeset
270 char *dm_strdup_fext(const char *filename, const char *fmt)
9b6027d51f76 Move dm_strdup_fext() and dm_basefilename() to gfxconv, as they are only used there.
Matti Hamalainen <ccr@tnsp.org>
parents: 2077
diff changeset
271 {
9b6027d51f76 Move dm_strdup_fext() and dm_basefilename() to gfxconv, as they are only used there.
Matti Hamalainen <ccr@tnsp.org>
parents: 2077
diff changeset
272 char *result, *tmp, *fext;
9b6027d51f76 Move dm_strdup_fext() and dm_basefilename() to gfxconv, as they are only used there.
Matti Hamalainen <ccr@tnsp.org>
parents: 2077
diff changeset
273
9b6027d51f76 Move dm_strdup_fext() and dm_basefilename() to gfxconv, as they are only used there.
Matti Hamalainen <ccr@tnsp.org>
parents: 2077
diff changeset
274 if (filename == NULL ||
9b6027d51f76 Move dm_strdup_fext() and dm_basefilename() to gfxconv, as they are only used there.
Matti Hamalainen <ccr@tnsp.org>
parents: 2077
diff changeset
275 (tmp = dm_strdup(filename)) == NULL)
9b6027d51f76 Move dm_strdup_fext() and dm_basefilename() to gfxconv, as they are only used there.
Matti Hamalainen <ccr@tnsp.org>
parents: 2077
diff changeset
276 return NULL;
9b6027d51f76 Move dm_strdup_fext() and dm_basefilename() to gfxconv, as they are only used there.
Matti Hamalainen <ccr@tnsp.org>
parents: 2077
diff changeset
277
9b6027d51f76 Move dm_strdup_fext() and dm_basefilename() to gfxconv, as they are only used there.
Matti Hamalainen <ccr@tnsp.org>
parents: 2077
diff changeset
278 if ((fext = strrchr(tmp, '.')) != NULL)
9b6027d51f76 Move dm_strdup_fext() and dm_basefilename() to gfxconv, as they are only used there.
Matti Hamalainen <ccr@tnsp.org>
parents: 2077
diff changeset
279 {
9b6027d51f76 Move dm_strdup_fext() and dm_basefilename() to gfxconv, as they are only used there.
Matti Hamalainen <ccr@tnsp.org>
parents: 2077
diff changeset
280 char *fpath = strrchr(tmp, DM_DIR_SEPARATOR);
9b6027d51f76 Move dm_strdup_fext() and dm_basefilename() to gfxconv, as they are only used there.
Matti Hamalainen <ccr@tnsp.org>
parents: 2077
diff changeset
281 if (fpath == NULL || (fpath != NULL && fext > fpath))
9b6027d51f76 Move dm_strdup_fext() and dm_basefilename() to gfxconv, as they are only used there.
Matti Hamalainen <ccr@tnsp.org>
parents: 2077
diff changeset
282 *fext = 0;
9b6027d51f76 Move dm_strdup_fext() and dm_basefilename() to gfxconv, as they are only used there.
Matti Hamalainen <ccr@tnsp.org>
parents: 2077
diff changeset
283 }
9b6027d51f76 Move dm_strdup_fext() and dm_basefilename() to gfxconv, as they are only used there.
Matti Hamalainen <ccr@tnsp.org>
parents: 2077
diff changeset
284
9b6027d51f76 Move dm_strdup_fext() and dm_basefilename() to gfxconv, as they are only used there.
Matti Hamalainen <ccr@tnsp.org>
parents: 2077
diff changeset
285 result = dm_strdup_printf(fmt, tmp);
9b6027d51f76 Move dm_strdup_fext() and dm_basefilename() to gfxconv, as they are only used there.
Matti Hamalainen <ccr@tnsp.org>
parents: 2077
diff changeset
286
9b6027d51f76 Move dm_strdup_fext() and dm_basefilename() to gfxconv, as they are only used there.
Matti Hamalainen <ccr@tnsp.org>
parents: 2077
diff changeset
287 dmFree(tmp);
9b6027d51f76 Move dm_strdup_fext() and dm_basefilename() to gfxconv, as they are only used there.
Matti Hamalainen <ccr@tnsp.org>
parents: 2077
diff changeset
288
9b6027d51f76 Move dm_strdup_fext() and dm_basefilename() to gfxconv, as they are only used there.
Matti Hamalainen <ccr@tnsp.org>
parents: 2077
diff changeset
289 return result;
9b6027d51f76 Move dm_strdup_fext() and dm_basefilename() to gfxconv, as they are only used there.
Matti Hamalainen <ccr@tnsp.org>
parents: 2077
diff changeset
290 }
9b6027d51f76 Move dm_strdup_fext() and dm_basefilename() to gfxconv, as they are only used there.
Matti Hamalainen <ccr@tnsp.org>
parents: 2077
diff changeset
291
9b6027d51f76 Move dm_strdup_fext() and dm_basefilename() to gfxconv, as they are only used there.
Matti Hamalainen <ccr@tnsp.org>
parents: 2077
diff changeset
292
1866
734234e7ca95 Add a comment about the imperfection of ANSI color output.
Matti Hamalainen <ccr@tnsp.org>
parents: 1865
diff changeset
293 //
734234e7ca95 Add a comment about the imperfection of ANSI color output.
Matti Hamalainen <ccr@tnsp.org>
parents: 1865
diff changeset
294 // Return a "matching" ANSI colour code for given C64 palette index.
734234e7ca95 Add a comment about the imperfection of ANSI color output.
Matti Hamalainen <ccr@tnsp.org>
parents: 1865
diff changeset
295 // As the standard 16 ANSI colours are not exact match and some C64
734234e7ca95 Add a comment about the imperfection of ANSI color output.
Matti Hamalainen <ccr@tnsp.org>
parents: 1865
diff changeset
296 // colours cant be represented, this is an imperfect conversion.
734234e7ca95 Add a comment about the imperfection of ANSI color output.
Matti Hamalainen <ccr@tnsp.org>
parents: 1865
diff changeset
297 //
1865
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
298 const char *dmC64GetANSIFromC64Color(const int col)
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
299 {
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
300 switch (col)
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
301 {
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
302 case 0: return "0;30"; // Black
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
303 case 1: return "0;1;37"; // White
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
304 case 2: return "0;31"; // Red
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
305 case 3: return "0;36";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
306 case 4: return "0;35";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
307 case 5: return "0;32";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
308 case 6: return "0;34";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
309 case 7: return "0;1;33";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
310 case 8: return "0;33";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
311 case 9: return "0;31";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
312 case 10: return "0;1;31";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
313 case 11: return "0;1;30";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
314 case 12: return "0;1;30";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
315 case 13: return "0;1;32";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
316 case 14: return "0;1;34";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
317 case 15: return "0;37";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
318
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
319 default: return "0";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
320 }
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
321 }
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
322
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
323
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
324 BOOL dmGetConvFormat(const int type, const int format, DMConvFormat *pfmt)
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
325 {
1546
228e71d66089 Constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 1545
diff changeset
326 for (int i = 0; i < nconvFormatList; i++)
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
327 {
1546
228e71d66089 Constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 1545
diff changeset
328 const DMConvFormat *fmt = &convFormatList[i];
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
329 if (fmt->type == type &&
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
330 fmt->format == format)
1869
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
331 {
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
332 memcpy(pfmt, fmt, sizeof(DMConvFormat));
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
333 return TRUE;
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
334 }
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
335 }
1869
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
336
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
337 for (int i = 0; i < nconvFormatList; i++)
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
338 {
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
339 const DMConvFormat *fmt = &convFormatList[i];
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
340 if (fmt->type == type && type == FFMT_BITMAP)
1869
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
341 {
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
342 const DMConvFormat *fmt = &convFormatList[i];
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
343 const DMC64ImageFormat *cfmt = &dmC64ImageFormats[format];
1869
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
344 memcpy(pfmt, fmt, sizeof(DMConvFormat));
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
345 pfmt->fext = cfmt->name;
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
346 return TRUE;
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
347 }
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
348 }
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
349
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
350 return FALSE;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
351 }
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
352
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
353
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
354 BOOL dmGetC64FormatByExt(const char *fext, int *type, int *format)
819
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
355 {
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
356 if (fext == NULL)
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
357 return FALSE;
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
358
1569
7e6af32c8032 Minor cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 1550
diff changeset
359 for (int i = 0; i < ndmC64ImageFormats; i++)
819
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
360 {
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
361 const DMC64ImageFormat *fmt = &dmC64ImageFormats[i];
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
362 if (fmt->fext != NULL &&
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
363 strcasecmp(fext, fmt->fext) == 0)
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
364 {
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
365 *type = FFMT_BITMAP;
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
366 *format = i;
819
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
367 return TRUE;
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
368 }
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
369 }
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
370
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
371 return FALSE;
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
372 }
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
373
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
374
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
375 BOOL dmGetFormatByExt(const char *fext, int *type, int *format)
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
376 {
430
77fae3e4e4d3 Fix a segfault due to not checking for NULL file extension entries in dmGetFormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 429
diff changeset
377 if (fext == NULL)
77fae3e4e4d3 Fix a segfault due to not checking for NULL file extension entries in dmGetFormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 429
diff changeset
378 return FALSE;
77fae3e4e4d3 Fix a segfault due to not checking for NULL file extension entries in dmGetFormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 429
diff changeset
379
1569
7e6af32c8032 Minor cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 1550
diff changeset
380 for (int i = 0; i < nconvFormatList; i++)
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
381 {
1546
228e71d66089 Constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 1545
diff changeset
382 const DMConvFormat *fmt = &convFormatList[i];
430
77fae3e4e4d3 Fix a segfault due to not checking for NULL file extension entries in dmGetFormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 429
diff changeset
383 if (fmt->fext != NULL &&
77fae3e4e4d3 Fix a segfault due to not checking for NULL file extension entries in dmGetFormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 429
diff changeset
384 strcasecmp(fext, fmt->fext) == 0)
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
385 {
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
386 *type = fmt->type;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
387 *format = fmt->format;
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
388 return TRUE;
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
389 }
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
390 }
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
391
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
392 return FALSE;
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
393 }
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
394
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
395
871
fc272f5f2d15 Make value type of dmGetIntVal() unsigned.
Matti Hamalainen <ccr@tnsp.org>
parents: 867
diff changeset
396 static BOOL dmParseMapOptionMapItem(const char *popt, DMMapValue *value, const unsigned int nmax, const char *msg)
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
397 {
481
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
398 char *end, *split, *opt = dm_strdup(popt);
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
399
481
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
400 if (opt == NULL)
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
401 goto error;
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
402
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
403 if ((end = split = strchr(opt, ':')) == NULL)
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
404 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
405 dmErrorMsg("Invalid %s value '%s', expected <(#|%)RRGGBB|[$|0x]index>:<[$|0x]index>.\n", msg, opt);
481
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
406 goto error;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
407 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
408
481
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
409 // Trim whitespace
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
410 *end = 0;
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
411 for (end--; end > opt && *end && isspace(*end); end--)
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
412 *end = 0;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
413
481
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
414 // Parse either a hex triplet color definition or a normal value
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
415 if (*opt == '#' || *opt == '%')
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
416 {
867
56e12109b936 Portability warning fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 860
diff changeset
417 unsigned int colR, colG, colB, colA;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
418
474
95d1facfdb77 Improve color matching, make it possible to ignore alpha values.
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
419 if (sscanf(opt + 1, "%2x%2x%2x%2x", &colR, &colG, &colB, &colA) == 4 ||
95d1facfdb77 Improve color matching, make it possible to ignore alpha values.
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
420 sscanf(opt + 1, "%2X%2X%2X%2X", &colR, &colG, &colB, &colA) == 4)
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
421 {
474
95d1facfdb77 Improve color matching, make it possible to ignore alpha values.
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
422 value->alpha = TRUE;
95d1facfdb77 Improve color matching, make it possible to ignore alpha values.
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
423 value->color.a = colA;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
424 }
474
95d1facfdb77 Improve color matching, make it possible to ignore alpha values.
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
425 else
95d1facfdb77 Improve color matching, make it possible to ignore alpha values.
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
426 if (sscanf(opt + 1, "%2x%2x%2x", &colR, &colG, &colB) != 3 &&
95d1facfdb77 Improve color matching, make it possible to ignore alpha values.
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
427 sscanf(opt + 1, "%2X%2X%2X", &colR, &colG, &colB) != 3)
95d1facfdb77 Improve color matching, make it possible to ignore alpha values.
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
428 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
429 dmErrorMsg("Invalid %s value '%s', expected a hex triplet, got '%s'.\n", msg, popt, opt + 1);
481
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
430 goto error;
474
95d1facfdb77 Improve color matching, make it possible to ignore alpha values.
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
431 }
95d1facfdb77 Improve color matching, make it possible to ignore alpha values.
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
432
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
433 value->color.r = colR;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
434 value->color.g = colG;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
435 value->color.b = colB;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
436 value->triplet = TRUE;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
437 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
438 else
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
439 {
2004
161e731eb152 Improve dmGetIntVal() to accept an optional negative value boolean flag
Matti Hamalainen <ccr@tnsp.org>
parents: 1947
diff changeset
440 if (!dmGetIntVal(opt, &value->from, NULL))
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
441 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
442 dmErrorMsg("Invalid %s value '%s', could not parse source value '%s'.\n", msg, popt, opt);
481
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
443 goto error;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
444 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
445 value->triplet = FALSE;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
446 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
447
481
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
448 // Trim whitespace
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
449 split++;
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
450 while (*split && isspace(*split)) split++;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
451
481
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
452 // Parse destination value
2004
161e731eb152 Improve dmGetIntVal() to accept an optional negative value boolean flag
Matti Hamalainen <ccr@tnsp.org>
parents: 1947
diff changeset
453 if (!dmGetIntVal(split, &value->to, NULL))
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
454 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
455 dmErrorMsg("Invalid %s value '%s', could not parse destination value '%s'.\n", msg, popt, split);
481
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
456 goto error;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
457 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
458
871
fc272f5f2d15 Make value type of dmGetIntVal() unsigned.
Matti Hamalainen <ccr@tnsp.org>
parents: 867
diff changeset
459 if (!value->triplet && value->from > 255)
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
460 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
461 dmErrorMsg("Invalid %s map source color index value %d, must be [0..255].\n", msg, value->from);
481
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
462 goto error;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
463 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
464
871
fc272f5f2d15 Make value type of dmGetIntVal() unsigned.
Matti Hamalainen <ccr@tnsp.org>
parents: 867
diff changeset
465 if (value->to > nmax)
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
466 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
467 dmErrorMsg("Invalid %s map destination color index value %d, must be [0..%d].\n", msg, value->to, nmax);
481
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
468 goto error;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
469 }
481
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
470
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
471 dmFree(opt);
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
472 return TRUE;
481
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
473
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
474 error:
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
475 dmFree(opt);
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
476 return FALSE;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
477 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
478
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
479
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
480 static BOOL dmParseMapOptionItem(char *opt, char *end, void *pvalue, const int index, const int nmax, const BOOL requireIndex, const char *msg)
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
481 {
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
482 // Trim whitespace
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
483 if (end != NULL)
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
484 {
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
485 *end = 0;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
486 for (end--; end > opt && *end && isspace(*end); end--)
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
487 *end = 0;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
488 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
489 while (*opt && isspace(*opt)) opt++;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
490
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
491 // Parse item based on mode
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
492 if (requireIndex)
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
493 {
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
494 DMMapValue *value = (DMMapValue *) pvalue;
475
c0dedfef3edf Fix option parsing of mappings.
Matti Hamalainen <ccr@tnsp.org>
parents: 474
diff changeset
495 if (!dmParseMapOptionMapItem(opt, &value[index], nmax, msg))
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
496 return FALSE;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
497 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
498 else
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
499 {
871
fc272f5f2d15 Make value type of dmGetIntVal() unsigned.
Matti Hamalainen <ccr@tnsp.org>
parents: 867
diff changeset
500 unsigned int *value = (unsigned int *) pvalue;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
501 char *split = strchr(opt, ':');
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
502 if (split != NULL)
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
503 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
504 dmErrorMsg("Unexpected ':' in indexed %s '%s'.\n", msg, opt);
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
505 return FALSE;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
506 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
507
2004
161e731eb152 Improve dmGetIntVal() to accept an optional negative value boolean flag
Matti Hamalainen <ccr@tnsp.org>
parents: 1947
diff changeset
508 if (!dmGetIntVal(opt, &value[index], NULL))
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
509 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
510 dmErrorMsg("Invalid %s value '%s', could not parse.\n", msg, opt);
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
511 return FALSE;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
512 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
513 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
514
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
515 return TRUE;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
516 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
517
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
518
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
519 BOOL dmParseMapOptionString(char *opt, void *values, int *nvalues, const int nmax, const BOOL requireIndex, const char *msg)
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
520 {
853
b2140d41785a Cleanup some parsing logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 838
diff changeset
521 char *start = opt;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
522
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
523 *nvalues = 0;
853
b2140d41785a Cleanup some parsing logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 838
diff changeset
524 while (*start && *nvalues < nmax)
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
525 {
853
b2140d41785a Cleanup some parsing logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 838
diff changeset
526 char *end = strchr(start, ',');
b2140d41785a Cleanup some parsing logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 838
diff changeset
527
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
528 if (!dmParseMapOptionItem(start, end, values, *nvalues, nmax, requireIndex, msg))
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
529 return FALSE;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
530
853
b2140d41785a Cleanup some parsing logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 838
diff changeset
531 (*nvalues)++;
b2140d41785a Cleanup some parsing logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 838
diff changeset
532
b2140d41785a Cleanup some parsing logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 838
diff changeset
533 if (!end)
b2140d41785a Cleanup some parsing logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 838
diff changeset
534 break;
b2140d41785a Cleanup some parsing logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 838
diff changeset
535
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
536 start = end + 1;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
537 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
538
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
539 return TRUE;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
540 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
541
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
542
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
543 int dmParseColorRemapFile(const char *filename, DMMapValue *values, int *nvalue, const int nmax)
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
544 {
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
545 FILE *fp;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
546 char line[512];
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
547 int res = DMERR_OK;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
548
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
549 if ((fp = fopen(filename, "r")) == NULL)
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
550 {
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
551 res = dmGetErrno();
972
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
552 dmError(res, "Could not open color remap file '%s' for reading, %d: %s\n",
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
553 res, dmErrorStr(res));
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
554 return res;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
555 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
556
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
557 while (fgets(line, sizeof(line), fp))
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
558 {
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
559 char *start = line;
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
560 line[sizeof(line) - 1] = 0;
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
561
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
562 while (*start && isspace(*start)) start++;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
563
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
564 if (*start != 0 && *start != ';')
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
565 {
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
566 if (!dmParseMapOptionMapItem(line, &values[*nvalue], nmax, "mapping file"))
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
567 goto error;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
568 else
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
569 {
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
570 (*nvalue)++;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
571 if (*nvalue >= nmax)
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
572 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
573 dmErrorMsg("Too many mapping pairs in '%s', maximum is %d.\n",
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
574 filename, nmax);
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
575 goto error;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
576 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
577 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
578 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
579 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
580
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
581 error:
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
582 fclose(fp);
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
583 return res;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
584 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
585
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
586
1867
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
587 BOOL dmParseFormatOption(const char *msg1, const char *msg2, char *optArg, int *format, int *subFormat)
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
588 {
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
589 char *flags = strchr(optArg, ':');
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
590 if (flags != NULL)
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
591 *flags++ = 0;
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
592
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
593 if (!dmGetFormatByExt(optArg, format, subFormat) &&
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
594 !dmGetC64FormatByExt(optArg, format, subFormat))
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
595 {
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
596 dmErrorMsg("Invalid %s format '%s', see -F / --formats for format list.\n",
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
597 msg1, optArg);
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
598 return FALSE;
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
599 }
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
600
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
601 if (flags != NULL)
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
602 {
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
603 switch (*format)
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
604 {
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
605 case FFMT_SPRITE:
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
606 case FFMT_CHAR:
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
607 if (strcasecmp(flags, "mc") == 0)
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
608 optInMulticolor = TRUE;
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
609 else
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
610 if (strcasecmp(flags, "sc") == 0)
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
611 optInMulticolor = FALSE;
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
612 else
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
613 {
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
614 dmErrorMsg("Invalid %s format flags for sprite/char '%s', should be 'mc' or 'sc'.\n",
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
615 msg1, flags);
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
616 return FALSE;
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
617 }
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
618 break;
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
619
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
620 default:
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
621 dmErrorMsg("%s format '%s' does not support any flags ('%s').\n",
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
622 msg2, optArg, flags);
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
623 return FALSE;
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
624 }
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
625 }
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
626
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
627 return TRUE;
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
628 }
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
629
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
630
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
631 BOOL dmParseIntValWithSep(char **arg, unsigned int *value, char *last, const char sep)
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
632 {
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
633 char *ptr = *arg, *end, *start;
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
634
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
635 // Skip any whitespace at start
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
636 while (*ptr != 0 && isspace(*ptr))
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
637 ptr++;
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
638
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
639 start = ptr;
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
640
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
641 // Find next not-xdigit/separator
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
642 while (*ptr != 0 &&
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
643 (isxdigit(*ptr) || *ptr == 'x' || *ptr == '$') &&
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
644 *ptr != sep)
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
645 ptr++;
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
646
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
647 end = ptr;
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
648
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
649 // Skip whitespace again
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
650 while (*ptr != 0 && isspace(*ptr))
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
651 ptr++;
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
652
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
653 // Return last character in "last"
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
654 *last = *ptr;
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
655
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
656 // Set end to NUL
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
657 *end = 0;
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
658
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
659 // And if last character is not NUL, move ptr
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
660 if (*last != 0)
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
661 ptr++;
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
662
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
663 *arg = ptr;
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
664
2004
161e731eb152 Improve dmGetIntVal() to accept an optional negative value boolean flag
Matti Hamalainen <ccr@tnsp.org>
parents: 1947
diff changeset
665 return dmGetIntVal(start, value, NULL);
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
666 }
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
667
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
668
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
669 BOOL argHandleOpt(const int optN, char *optArg, char *currArg)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
670 {
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
671 unsigned int tmpUInt;
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
672 char *tmpStr;
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
673
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
674 switch (optN)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
675 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
676 case 0:
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
677 argShowHelp();
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
678 exit(0);
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
679 break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
680
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
681 case 17:
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
682 argShowFormats();
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
683 exit(0);
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
684 break;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
685
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
686 case 15:
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
687 dmVerbosity++;
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
688 break;
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
689
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
690 case 1:
1869
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
691 {
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
692 DMConvFormat fmt;
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
693
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
694 if (!dmParseFormatOption("input", "Input", optArg, &optInType, &optForcedInSubFormat))
1869
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
695 return FALSE;
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
696
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
697 dmGetConvFormat(optInType, optForcedInSubFormat, &fmt);
1869
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
698 if ((fmt.flags & DM_FMT_RD) == 0)
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
699 {
1870
1e8f60ce21d1 Add check for writability in output format option -f
Matti Hamalainen <ccr@tnsp.org>
parents: 1869
diff changeset
700 dmErrorMsg("Invalid input format '%s', does not support reading.\n",
1869
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
701 fmt.name);
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
702 return FALSE;
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
703 }
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
704 }
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
705 break;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
706
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
707 case 3:
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
708 optOutFilename = optArg;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
709 break;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
710
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
711 case 4:
2005
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
712 if (!dmGetIntVal(optArg, &optInSkip, &optInSkipNeg))
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
713 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
714 dmErrorMsg("Invalid skip value argument '%s'.\n", optArg);
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
715 return FALSE;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
716 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
717 break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
718
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
719 case 5:
1870
1e8f60ce21d1 Add check for writability in output format option -f
Matti Hamalainen <ccr@tnsp.org>
parents: 1869
diff changeset
720 {
1e8f60ce21d1 Add check for writability in output format option -f
Matti Hamalainen <ccr@tnsp.org>
parents: 1869
diff changeset
721 DMConvFormat fmt;
1e8f60ce21d1 Add check for writability in output format option -f
Matti Hamalainen <ccr@tnsp.org>
parents: 1869
diff changeset
722
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
723 if (!dmParseFormatOption("output", "Output", optArg, &optOutType, &optOutFormat))
1870
1e8f60ce21d1 Add check for writability in output format option -f
Matti Hamalainen <ccr@tnsp.org>
parents: 1869
diff changeset
724 return FALSE;
1e8f60ce21d1 Add check for writability in output format option -f
Matti Hamalainen <ccr@tnsp.org>
parents: 1869
diff changeset
725
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
726 dmGetConvFormat(optOutType, optOutFormat, &fmt);
1870
1e8f60ce21d1 Add check for writability in output format option -f
Matti Hamalainen <ccr@tnsp.org>
parents: 1869
diff changeset
727 if ((fmt.flags & DM_FMT_WR) == 0)
1e8f60ce21d1 Add check for writability in output format option -f
Matti Hamalainen <ccr@tnsp.org>
parents: 1869
diff changeset
728 {
1e8f60ce21d1 Add check for writability in output format option -f
Matti Hamalainen <ccr@tnsp.org>
parents: 1869
diff changeset
729 dmErrorMsg("Invalid output format '%s', does not support writing.\n",
1e8f60ce21d1 Add check for writability in output format option -f
Matti Hamalainen <ccr@tnsp.org>
parents: 1869
diff changeset
730 fmt.name);
1e8f60ce21d1 Add check for writability in output format option -f
Matti Hamalainen <ccr@tnsp.org>
parents: 1869
diff changeset
731 return FALSE;
1e8f60ce21d1 Add check for writability in output format option -f
Matti Hamalainen <ccr@tnsp.org>
parents: 1869
diff changeset
732 }
1e8f60ce21d1 Add check for writability in output format option -f
Matti Hamalainen <ccr@tnsp.org>
parents: 1869
diff changeset
733 }
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
734 break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
735
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
736 case 6:
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
737 {
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
738 int index, ncolors;
1865
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
739 if (!dmParseMapOptionString(optArg, optColorMap,
2030
2b961e6b35e5 Update documentation etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 2029
diff changeset
740 &ncolors, C64_NCOLORS, FALSE, "color index option"))
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
741 return 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
742
2030
2b961e6b35e5 Update documentation etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 2029
diff changeset
743 dmMsg(1, "Set color index mapping: ");
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
744 for (index = 0; index < ncolors; index++)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
745 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
746 dmPrint(1, "[%d:%d]%s",
1865
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
747 index, optColorMap[index],
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
748 (index < ncolors) ? ", " : "");
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
749 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
750 dmPrint(1, "\n");
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
751 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
752 break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
753
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
754 case 7:
2004
161e731eb152 Improve dmGetIntVal() to accept an optional negative value boolean flag
Matti Hamalainen <ccr@tnsp.org>
parents: 1947
diff changeset
755 if (!dmGetIntVal(optArg, &tmpUInt, NULL) ||
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
756 tmpUInt < 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
757 {
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
758 dmErrorMsg("Invalid count value argument '%s' [1 .. MAXINT]\n",
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
759 optArg);
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
760 return FALSE;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
761 }
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
762 optItemCount = tmpUInt;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
763 break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
764
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
765 case 8:
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
766 optSequential = TRUE;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
767 break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
768
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
769 case 9:
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
770 {
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
771 BOOL error = FALSE;
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
772 unsigned int tmpUInt2;
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
773 char *tmpStr = dm_strdup(optArg),
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
774 *tmpOpt = tmpStr, sep;
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
775
2058
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
776 // Check for "relative scale mode specifier
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
777 if (*tmpOpt == '*')
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
778 {
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
779 tmpOpt++;
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
780 optScaleMode = SCALE_RELATIVE;
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
781 }
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
782 else
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
783 optScaleMode = SCALE_SET;
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
784
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
785 // Parse the values
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
786 if (dmParseIntValWithSep(&tmpOpt, &tmpUInt, &sep, ':'))
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
787 {
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
788 if (sep == ':' &&
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
789 dmParseIntValWithSep(&tmpOpt, &tmpUInt2, &sep, '*'))
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
790 {
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
791 optSpec.scaleX = tmpUInt;
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
792 optSpec.scaleY = tmpUInt2;
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
793
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
794 if (sep == '*' &&
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
795 dmParseIntValWithSep(&tmpOpt, &tmpUInt, &sep, 0))
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
796 {
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
797 optSpec.scaleX *= tmpUInt;
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
798 optSpec.scaleY *= tmpUInt;
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
799 }
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
800 error = (sep != 0);
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
801 }
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
802 else
1890
ee95059b4c18 Oops, fix a blunder left in the refactored scale option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1889
diff changeset
803 if (sep == 0)
ee95059b4c18 Oops, fix a blunder left in the refactored scale option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1889
diff changeset
804 {
ee95059b4c18 Oops, fix a blunder left in the refactored scale option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1889
diff changeset
805 optSpec.scaleX = optSpec.scaleY = tmpUInt;
ee95059b4c18 Oops, fix a blunder left in the refactored scale option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1889
diff changeset
806 }
ee95059b4c18 Oops, fix a blunder left in the refactored scale option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1889
diff changeset
807 else
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
808 error = TRUE;
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
809 }
902
c6c480e8e1c8 Add separate X and Y scaling to gfxconv and libgfx outputters.
Matti Hamalainen <ccr@tnsp.org>
parents: 897
diff changeset
810 else
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
811 error = TRUE;
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
812
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
813 dmFree(tmpStr);
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
814
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
815 if (error)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
816 {
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
817 dmErrorMsg(
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
818 "Invalid scale option value '%s', should be <n>, <w>:<h> or <w>:<h>*<n>.\n",
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
819 optArg);
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
820 return FALSE;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
821 }
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
822
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
823 if (optSpec.scaleX < 1 || optSpec.scaleX > 50)
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
824 {
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
825 dmErrorMsg("Invalid X scale value %d.\n", optSpec.scaleX);
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
826 return FALSE;
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
827 }
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
828 if (optSpec.scaleY < 1 || optSpec.scaleY > 50)
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
829 {
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
830 dmErrorMsg("Invalid Y scale value %d.\n", optSpec.scaleY);
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
831 return FALSE;
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
832 }
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
833 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
834 break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
835
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
836 case 11:
2004
161e731eb152 Improve dmGetIntVal() to accept an optional negative value boolean flag
Matti Hamalainen <ccr@tnsp.org>
parents: 1947
diff changeset
837 if (!dmGetIntVal(optArg, &tmpUInt, NULL) ||
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
838 tmpUInt < 1 || tmpUInt > 512)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
839 {
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
840 dmErrorMsg("Invalid planed width value '%s' [1 .. 512]\n",
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
841 optArg);
902
c6c480e8e1c8 Add separate X and Y scaling to gfxconv and libgfx outputters.
Matti Hamalainen <ccr@tnsp.org>
parents: 897
diff changeset
842 return FALSE;
c6c480e8e1c8 Add separate X and Y scaling to gfxconv and libgfx outputters.
Matti Hamalainen <ccr@tnsp.org>
parents: 897
diff changeset
843 }
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
844 optPlanedWidth = tmpUInt;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
845 break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
846
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
847 case 12:
2065
451980580189 Refactor how paletted/indexed formats are handled in libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 2062
diff changeset
848 optUsePalette = TRUE;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
849 break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
850
415
d94f4bcb4be3 IFFMaster RAW output works now, at least to some extent.
Matti Hamalainen <ccr@tnsp.org>
parents: 409
diff changeset
851 case 13:
2004
161e731eb152 Improve dmGetIntVal() to accept an optional negative value boolean flag
Matti Hamalainen <ccr@tnsp.org>
parents: 1947
diff changeset
852 if (!dmGetIntVal(optArg, &tmpUInt, NULL) ||
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
853 tmpUInt < 1 || tmpUInt > 8)
415
d94f4bcb4be3 IFFMaster RAW output works now, at least to some extent.
Matti Hamalainen <ccr@tnsp.org>
parents: 409
diff changeset
854 {
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
855 dmErrorMsg("Invalid number of bitplanes value '%s' [1 .. 8]\n",
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
856 optArg);
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
857 return FALSE;
1288
6c8b19d1d196 More work on libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 1280
diff changeset
858 }
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
859 optSpec.nplanes = tmpUInt;
1288
6c8b19d1d196 More work on libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 1280
diff changeset
860 break;
6c8b19d1d196 More work on libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 1280
diff changeset
861
6c8b19d1d196 More work on libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 1280
diff changeset
862 case 18:
2004
161e731eb152 Improve dmGetIntVal() to accept an optional negative value boolean flag
Matti Hamalainen <ccr@tnsp.org>
parents: 1947
diff changeset
863 if (!dmGetIntVal(optArg, &tmpUInt, NULL) ||
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
864 tmpUInt < 1 || tmpUInt > 32)
1288
6c8b19d1d196 More work on libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 1280
diff changeset
865 {
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
866 dmErrorMsg("Invalid number of bits per pixel value '%s' [1 .. 32]\n",
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
867 optArg);
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
868 return FALSE;
415
d94f4bcb4be3 IFFMaster RAW output works now, at least to some extent.
Matti Hamalainen <ccr@tnsp.org>
parents: 409
diff changeset
869 }
2099
dac89484f143 Fix nplanes and bpp in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2097
diff changeset
870 optSpec.bpp = tmpUInt;
415
d94f4bcb4be3 IFFMaster RAW output works now, at least to some extent.
Matti Hamalainen <ccr@tnsp.org>
parents: 409
diff changeset
871 break;
d94f4bcb4be3 IFFMaster RAW output works now, at least to some extent.
Matti Hamalainen <ccr@tnsp.org>
parents: 409
diff changeset
872
d94f4bcb4be3 IFFMaster RAW output works now, at least to some extent.
Matti Hamalainen <ccr@tnsp.org>
parents: 409
diff changeset
873 case 14:
1291
2c4acbc3e7bf More work on libgfx etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 1290
diff changeset
874 optSpec.planar = TRUE;
415
d94f4bcb4be3 IFFMaster RAW output works now, at least to some extent.
Matti Hamalainen <ccr@tnsp.org>
parents: 409
diff changeset
875 break;
d94f4bcb4be3 IFFMaster RAW output works now, at least to some extent.
Matti Hamalainen <ccr@tnsp.org>
parents: 409
diff changeset
876
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
877 case 16:
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
878 if ((tmpStr = dm_strrcasecmp(optArg, "+remove")) != NULL)
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
879 {
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
880 optRemapRemove = TRUE;
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
881 *tmpStr = 0;
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
882 }
821
8ec16cca0eef Change -R remap option syntax slightly and document it.
Matti Hamalainen <ccr@tnsp.org>
parents: 820
diff changeset
883
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
884 if (optArg[0] == '@')
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
885 {
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
886 if (optArg[1] != 0)
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
887 {
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
888 int res;
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
889 if ((res = dmParseColorRemapFile(optArg + 1,
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
890 optRemapTable, &optNRemapTable, DM_MAX_COLORS)) != DMERR_OK)
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
891 return FALSE;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
892 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
893 else
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
894 {
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
895 dmErrorMsg("No remap filename given.\n");
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
896 return FALSE;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
897 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
898 }
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
899 else
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
900 {
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
901 if (!dmParseMapOptionString(optArg, optRemapTable,
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
902 &optNRemapTable, DM_MAX_COLORS, TRUE, "color remap option"))
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
903 return FALSE;
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
904 }
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
905
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
906 optRemapColors = TRUE;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
907 break;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
908
854
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
909 case 19:
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
910 {
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
911 int tx0, ty0, tx1, ty1;
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
912 if (strcasecmp(optArg, "auto") == 0)
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
913 {
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
914 optCropMode = CROP_AUTO;
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
915 }
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
916 else
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
917 if (sscanf(optArg, "%d:%d-%d:%d", &tx0, &ty0, &tx1, &ty1) == 4)
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
918 {
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
919 optCropMode = CROP_SIZE;
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
920 optCropX0 = tx0;
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
921 optCropY0 = ty0;
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
922 optCropW = tx1 - tx0 + 1;
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
923 optCropH = ty1 - ty0 + 1;
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
924 }
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
925 else
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
926 if (sscanf(optArg, "%d:%d:%d:%d", &tx0, &ty0, &tx1, &ty1) == 4)
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
927 {
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
928 optCropMode = CROP_SIZE;
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
929 optCropX0 = tx0;
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
930 optCropY0 = ty0;
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
931 optCropW = tx1;
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
932 optCropH = ty1;
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
933 }
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
934 else
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
935 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
936 dmErrorMsg("Invalid crop mode / argument '%s'.\n", optArg);
854
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
937 return FALSE;
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
938 }
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
939 }
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
940 break;
ca5b4696be21 Add some code for parsing crop mode option, but the logic itself is not yet
Matti Hamalainen <ccr@tnsp.org>
parents: 853
diff changeset
941
2022
eb6dafdd36dc Add option -C for controlling output file compression (PNG and IFF for now) in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2021
diff changeset
942 case 20:
eb6dafdd36dc Add option -C for controlling output file compression (PNG and IFF for now) in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2021
diff changeset
943 if (!dmGetIntVal(optArg, &tmpUInt, NULL) ||
eb6dafdd36dc Add option -C for controlling output file compression (PNG and IFF for now) in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2021
diff changeset
944 tmpUInt > FCMP_BEST)
eb6dafdd36dc Add option -C for controlling output file compression (PNG and IFF for now) in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2021
diff changeset
945 {
eb6dafdd36dc Add option -C for controlling output file compression (PNG and IFF for now) in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2021
diff changeset
946 dmErrorMsg("Invalid compression setting '%s' [%d .. %d]\n",
eb6dafdd36dc Add option -C for controlling output file compression (PNG and IFF for now) in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2021
diff changeset
947 optArg, FCMP_NONE, FCMP_BEST);
eb6dafdd36dc Add option -C for controlling output file compression (PNG and IFF for now) in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2021
diff changeset
948 return FALSE;
eb6dafdd36dc Add option -C for controlling output file compression (PNG and IFF for now) in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2021
diff changeset
949 }
eb6dafdd36dc Add option -C for controlling output file compression (PNG and IFF for now) in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2021
diff changeset
950 optSpec.compression = tmpUInt;
eb6dafdd36dc Add option -C for controlling output file compression (PNG and IFF for now) in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2021
diff changeset
951 break;
eb6dafdd36dc Add option -C for controlling output file compression (PNG and IFF for now) in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2021
diff changeset
952
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
953 default:
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
954 dmErrorMsg("Unknown option '%s'.\n", currArg);
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
955 return FALSE;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
956 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
957
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
958 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
959 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
960
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
961
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
962 BOOL argHandleFile(char *currArg)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
963 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
964 if (!optInFilename)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
965 optInFilename = currArg;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
966 else
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
967 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
968 dmErrorMsg("Source filename already specified, extraneous argument '%s'.\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
969 currArg);
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
970 return FALSE;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
971 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
972
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
973 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
974 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
975
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
976
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
977 void dmPrintByte(FILE *out, int byte, int format, BOOL multicolor)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
978 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
979 int i;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
980
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
981 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
982 {
837
5333dd4a99e4 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 829
diff changeset
983 for (i = DM_ASC_NBITS; i; i -= 2)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
984 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
985 int val = (byte & (3ULL << (i - 2))) >> (i - 2);
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
986 char ch;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
987 switch (format)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
988 {
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
989 case FFMT_ASCII:
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
990 ch = dmASCIIPalette[val];
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
991 fprintf(out, "%c%c", ch, ch);
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
992 break;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
993 case FFMT_ANSI:
1865
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
994 fprintf(out, "\x1b[%sm##\x1b[0m",
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
995 dmC64GetANSIFromC64Color(optColorMap[val]));
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
996 break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
997 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
998 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
999 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1000 else
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1001 {
837
5333dd4a99e4 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 829
diff changeset
1002 for (i = DM_ASC_NBITS; i; 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
1003 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1004 int val = (byte & (1ULL << (i - 1))) >> (i - 1);
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1005 switch (format)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1006 {
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
1007 case FFMT_ASCII:
1865
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
1008 fputc(val ? '#' : '.', 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
1009 break;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
1010 case FFMT_ANSI:
1865
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
1011 fprintf(out, "\x1b[%sm#\x1b[0m",
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
1012 dmC64GetANSIFromC64Color(optColorMap[val]));
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1013 break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1014 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1015 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1016 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1017 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1018
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1019
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1020 void dmDumpCharASCII(FILE *outFile, const Uint8 *buf, const size_t offs, const int fmt, const BOOL multicolor)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1021 {
1859
f382cde6bb58 Rename various C64 sprite / character constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 1852
diff changeset
1022 for (size_t yc = 0; yc < C64_CHR_HEIGHT_UT; yc++)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1023 {
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1024 fprintf(outFile, "%04" DM_PRIx_SIZE_T " : ", offs + yc);
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1025 dmPrintByte(outFile, buf[yc], fmt, multicolor);
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1026 fprintf(outFile, "\n");
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1027 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1028 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1029
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1030
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1031 void dmDumpSpriteASCII(FILE *outFile, const Uint8 *buf, const size_t offs, const int fmt, BOOL multicolor)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1032 {
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1033 size_t bufOffs, xc, yc;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1034
1859
f382cde6bb58 Rename various C64 sprite / character constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 1852
diff changeset
1035 for (bufOffs = yc = 0; yc < C64_SPR_HEIGHT_UT; yc++)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1036 {
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1037 fprintf(outFile, "%04" DM_PRIx_SIZE_T " ", offs + bufOffs);
1859
f382cde6bb58 Rename various C64 sprite / character constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 1852
diff changeset
1038 for (xc = 0; xc < C64_SPR_WIDTH_UT; xc++)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1039 {
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1040 dmPrintByte(outFile, buf[bufOffs], fmt, multicolor);
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1041 fprintf(outFile, " ");
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1042 bufOffs++;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1043 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1044 fprintf(outFile, "\n");
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1045 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1046 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1047
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1048
1360
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1049 int dmRemapImageColors(DMImage **pdst, const DMImage *src)
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1050 {
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1051 DMPalette *npal = NULL;
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1052 int *mapping = dmMalloc(src->pal->ncolors * sizeof(int));
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1053 BOOL *mapped = dmMalloc(src->pal->ncolors * sizeof(BOOL));
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1054 BOOL *used = dmMalloc(src->pal->ncolors * sizeof(BOOL));
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1055 int n, index, xc, yc, ncolors, res = DMERR_OK;
1360
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1056 DMImage *dst;
482
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1057
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1058 if ((res = dmPaletteAlloc(&npal, src->pal->ncolors, -1)) != DMERR_OK)
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1059 {
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1060 dmErrorMsg("Could not allocate memory for remap palette.\n");
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1061 goto error;
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1062 }
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1063
1360
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1064 if ((dst = *pdst = dmImageAlloc(src->width, src->height, src->format, src->bpp)) == NULL)
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1065 {
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1066 res = dmError(DMERR_MALLOC,
1360
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1067 "Could not allocate memory for remapped image.\n");
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1068 goto error;
1360
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1069 }
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1070
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1071
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1072 if (mapping == NULL || mapped == NULL || used == NULL)
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1073 {
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1074 res = dmError(DMERR_MALLOC,
972
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
1075 "Could not allocate memory for reused palette.\n");
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1076 goto error;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1077 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1078
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1079 dmMsg(1, "Remapping %d output image colors of %d colors.\n",
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1080 optNRemapTable, src->pal->ncolors);
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1081
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1082 for (index = 0; index < src->pal->ncolors; index++)
479
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1083 {
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1084 mapping[index] = -1;
482
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1085 mapped[index] = used[index] = FALSE;
479
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1086 }
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1087
479
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1088 // Find used colors
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1089 dmMsg(2, "Scanning image for used colors...\n");
1360
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1090 for (ncolors = yc = 0; yc < src->height; yc++)
479
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1091 {
1360
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1092 const Uint8 *dp = src->data + src->pitch * yc;
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1093 for (xc = 0; xc < src->width; xc++)
479
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1094 {
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1095 Uint8 col = dp[xc];
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1096 if (col < src->pal->ncolors && !used[col])
482
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1097 {
479
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1098 used[col] = TRUE;
482
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1099 ncolors++;
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1100 }
479
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1101 }
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1102 }
482
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1103 dmMsg(2, "Found %d used colors, creating remap-table.\n", ncolors);
479
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1104
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1105 // Match and mark mapped colors
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1106 for (index = 0; index < optNRemapTable; index++)
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1107 {
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1108 DMMapValue *map = &optRemapTable[index];
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1109 if (map->triplet)
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1110 {
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1111 BOOL found = FALSE;
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1112 for (n = 0; n < src->pal->ncolors; n++)
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1113 {
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1114 if (dmCompareColor(&(src->pal->colors[n]), &(map->color), map->alpha))
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1115 {
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1116 dmMsg(3, "RGBA match #%02x%02x%02x%02x: %d -> %d\n",
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1117 map->color.r, map->color.g, map->color.b, map->color.a,
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1118 n,
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1119 map->to);
482
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1120
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1121 mapping[n] = map->to;
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1122 mapped[map->to] = TRUE;
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1123 found = TRUE;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1124 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1125 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
1126
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1127 if (!found)
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1128 {
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1129 dmMsg(3, "No RGBA match found for map index %d, #%02x%02x%02x%02x\n",
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1130 index,
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1131 map->color.r, map->color.g, map->color.b, map->color.a);
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1132 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1133 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1134 else
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1135 {
482
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1136 dmMsg(3, "Map index: %d -> %d\n",
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1137 map->from, map->to);
479
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1138
482
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1139 mapping[map->from] = map->to;
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1140 mapped[map->to] = TRUE;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1141 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1142 }
482
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1143
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1144 // Fill in the rest
479
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1145 if (optRemapRemove)
1807
d53bdee5ffa5 Remove slight bit of code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 1801
diff changeset
1146 dmMsg(2, "Removing unused colors.\n");
d53bdee5ffa5 Remove slight bit of code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 1801
diff changeset
1147
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1148 for (index = 0; index < src->pal->ncolors; index++)
1807
d53bdee5ffa5 Remove slight bit of code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 1801
diff changeset
1149 if (mapping[index] < 0 &&
d53bdee5ffa5 Remove slight bit of code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 1801
diff changeset
1150 (!optRemapRemove || (optRemapRemove && used[index])))
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1151 {
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1152 for (n = 0; n < src->pal->ncolors; n++)
1807
d53bdee5ffa5 Remove slight bit of code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 1801
diff changeset
1153 if (!mapped[n])
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1154 {
1807
d53bdee5ffa5 Remove slight bit of code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 1801
diff changeset
1155 mapping[index] = n;
d53bdee5ffa5 Remove slight bit of code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 1801
diff changeset
1156 mapped[n] = TRUE;
d53bdee5ffa5 Remove slight bit of code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 1801
diff changeset
1157 break;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1158 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1159 }
482
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1160
479
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1161 // Calculate final number of palette colors
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1162 ncolors = 0;
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1163 for (index = 0; index < src->pal->ncolors; index++)
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1164 {
482
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1165 if (mapping[index] + 1 > ncolors)
479
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1166 ncolors = mapping[index] + 1;
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1167 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
1168
479
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1169 // Copy palette entries
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1170 for (index = 0; index < src->pal->ncolors; index++)
479
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1171 {
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1172 if (mapping[index] >= 0)
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1173 {
1360
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1174 memcpy(&npal[mapping[index]], &(src->pal[index]), sizeof(DMColor));
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1175 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1176 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1177
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1178 // Remap image
479
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1179 dmMsg(1, "Remapping image to %d colors...\n", ncolors);
1360
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1180 for (yc = 0; yc < src->height; yc++)
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1181 {
1360
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1182 Uint8 *sp = src->data + src->pitch * yc;
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1183 Uint8 *dp = dst->data + dst->pitch * yc;
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1184 for (xc = 0; xc < src->width; xc++)
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1185 {
1360
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1186 Uint8 col = sp[xc];
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1187 if (col < src->pal->ncolors &&
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1188 mapping[col] >= 0 &&
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1189 mapping[col] < src->pal->ncolors)
479
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1190 dp[xc] = mapping[col];
478
7c7a57590236 Calculate number of remapped colors.
Matti Hamalainen <ccr@tnsp.org>
parents: 477
diff changeset
1191 else
7c7a57590236 Calculate number of remapped colors.
Matti Hamalainen <ccr@tnsp.org>
parents: 477
diff changeset
1192 dp[xc] = 0;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1193 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1194 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1195
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1196 // Set new palette, free memory
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1197 if ((res = dmPaletteCopy(&dst->pal, npal)) != DMERR_OK)
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1198 {
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1199 res = dmError(DMERR_MALLOC,
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1200 "Could not allocate memory for final remapped palette.\n");
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1201 goto error;
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1202 }
479
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1203
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1204 error:
479
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1205 dmFree(mapping);
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1206 dmFree(mapped);
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1207 dmFree(used);
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1208 return res;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1209 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1210
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1211
1550
ba09aa661c72 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1546
diff changeset
1212 int dmConvertC64Bitmap(DMC64Image **pdst, const DMC64Image *src,
ba09aa661c72 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1546
diff changeset
1213 const DMC64ImageFormat *dstFmt, const DMC64ImageFormat *srcFmt)
1490
665a0b917d22 Begin restructuring how C64 bitmaps are converted.
Matti Hamalainen <ccr@tnsp.org>
parents: 1481
diff changeset
1214 {
1493
d987a4933e1c Some dabbling work on basic C64 bitmap conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1490
diff changeset
1215 DMC64Image *dst;
1891
91b80990043c Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1890
diff changeset
1216 DMC64MemBlock *srcBlk = NULL, *dstBlk = NULL;
91b80990043c Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1890
diff changeset
1217 const char *blkname = NULL;
1493
d987a4933e1c Some dabbling work on basic C64 bitmap conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1490
diff changeset
1218
1550
ba09aa661c72 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1546
diff changeset
1219 if (pdst == NULL || dstFmt == NULL || src == NULL || srcFmt == NULL)
1490
665a0b917d22 Begin restructuring how C64 bitmaps are converted.
Matti Hamalainen <ccr@tnsp.org>
parents: 1481
diff changeset
1220 return DMERR_NULLPTR;
1493
d987a4933e1c Some dabbling work on basic C64 bitmap conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1490
diff changeset
1221
1823
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1222 // Allocate the destination image
1550
ba09aa661c72 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1546
diff changeset
1223 if ((dst = *pdst = dmC64ImageAlloc(dstFmt)) == NULL)
1493
d987a4933e1c Some dabbling work on basic C64 bitmap conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1490
diff changeset
1224 return DMERR_MALLOC;
d987a4933e1c Some dabbling work on basic C64 bitmap conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1490
diff changeset
1225
1823
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1226 // Copy rest of the structure ..
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1227 dst->d020 = src->d020;
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1228 dst->bgcolor = src->bgcolor;
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1229 dst->d022 = src->d022;
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1230 dst->d023 = src->d023;
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1231 dst->d024 = src->d024;
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1232
1829
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1233 // Try to do some simple fixups
1947
8896d5676f1b Architectural change: remove some duplicated variables from DMC64Image
Matti Hamalainen <ccr@tnsp.org>
parents: 1933
diff changeset
1234 if ((dst->fmt->type & D64_FMT_FLI) && (src->fmt->type & D64_FMT_FLI) == 0)
1829
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1235 {
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1236 dmMsg(1, "Upconverting multicolor to FLI.\n");
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1237 for (int i = 0; i < dst->nbanks; i++)
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1238 {
1929
b49814dd8469 Only copy memory blocks that do not already exist in destination.
Matti Hamalainen <ccr@tnsp.org>
parents: 1928
diff changeset
1239 if (dst->color[i].data == NULL)
b49814dd8469 Only copy memory blocks that do not already exist in destination.
Matti Hamalainen <ccr@tnsp.org>
parents: 1928
diff changeset
1240 dmC64MemBlockCopy(&dst->color[i], &src->color[0]);
b49814dd8469 Only copy memory blocks that do not already exist in destination.
Matti Hamalainen <ccr@tnsp.org>
parents: 1928
diff changeset
1241
b49814dd8469 Only copy memory blocks that do not already exist in destination.
Matti Hamalainen <ccr@tnsp.org>
parents: 1928
diff changeset
1242 if (dst->screen[i].data == NULL)
b49814dd8469 Only copy memory blocks that do not already exist in destination.
Matti Hamalainen <ccr@tnsp.org>
parents: 1928
diff changeset
1243 dmC64MemBlockCopy(&dst->screen[i], &src->screen[0]);
b49814dd8469 Only copy memory blocks that do not already exist in destination.
Matti Hamalainen <ccr@tnsp.org>
parents: 1928
diff changeset
1244
b49814dd8469 Only copy memory blocks that do not already exist in destination.
Matti Hamalainen <ccr@tnsp.org>
parents: 1928
diff changeset
1245 if (dst->bitmap[i].data == NULL)
b49814dd8469 Only copy memory blocks that do not already exist in destination.
Matti Hamalainen <ccr@tnsp.org>
parents: 1928
diff changeset
1246 dmC64MemBlockCopy(&dst->bitmap[i], &src->bitmap[0]);
1829
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1247 }
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1248 }
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1249 else
1947
8896d5676f1b Architectural change: remove some duplicated variables from DMC64Image
Matti Hamalainen <ccr@tnsp.org>
parents: 1933
diff changeset
1250 if ((src->fmt->type & D64_FMT_FLI) && (dst->fmt->type & D64_FMT_FLI) == 0)
1829
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1251 {
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1252 dmMsg(1, "Downconverting FLI to multicolor.\n");
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1253 }
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1254
1823
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1255 // Do per opcode copies
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1256 for (int i = 0; i < D64_MAX_ENCDEC_OPS; i++)
1493
d987a4933e1c Some dabbling work on basic C64 bitmap conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1490
diff changeset
1257 {
1823
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1258 const DMC64EncDecOp *op = fmtGetEncDecOp(dstFmt, i);
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1259 size_t size;
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1260
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1261 if (op->type == DO_LAST)
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1262 break;
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1263
1933
c5a46cb4cce5 Change DMC64ImageFormat parameter of dmC64GetSubjectSize() and
Matti Hamalainen <ccr@tnsp.org>
parents: 1931
diff changeset
1264 size = dmC64GetOpSubjectSize(op, dstFmt->format);
1823
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1265 switch (op->type)
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1266 {
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1267 case DO_COPY:
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1268 case DO_SET_MEM:
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1269 case DO_SET_MEM_HI:
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1270 case DO_SET_MEM_LO:
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1271 case DO_SET_OP:
2108
5f8f170f8774 Change dmC64GetOpMemBlock() function API.
Matti Hamalainen <ccr@tnsp.org>
parents: 2103
diff changeset
1272 srcBlk = (DMC64MemBlock *) dmC64GetOpMemBlock(src, op->subject, op->bank);
5f8f170f8774 Change dmC64GetOpMemBlock() function API.
Matti Hamalainen <ccr@tnsp.org>
parents: 2103
diff changeset
1273 dstBlk = (DMC64MemBlock *) dmC64GetOpMemBlock(dst, op->subject, op->bank);
1852
219417325036 Split dmC64GetOpMemBlockAndName() into dmC64GetOpMemBlock() and
Matti Hamalainen <ccr@tnsp.org>
parents: 1843
diff changeset
1274 blkname = dmC64GetOpSubjectName(op->subject);
1829
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1275
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1276 // Skip if we did previous fixups/upconverts
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1277 if (dstBlk != NULL && dstBlk->data != NULL)
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1278 break;
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1279
1823
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1280 if (srcBlk != NULL && srcBlk->data != NULL && srcBlk->size >= size)
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1281 {
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1282 // The block exists in source and is of sufficient size, so copy it
1842
a3fc0cab1a60 Improve C64 bitmap conversion messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1836
diff changeset
1283 dmMsg(3, "Copying whole block '%s' op #%d, offs=%d ($%04x), bank=%d, size=%d ($%04x)\n",
1823
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1284 blkname, i, op->offs, op->offs, op->bank, size, size);
1829
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1285
1823
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1286 dmC64MemBlockCopy(dstBlk, srcBlk);
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1287 }
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1288 else
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1289 switch (op->subject)
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1290 {
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1291 case DS_COLOR_RAM:
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1292 case DS_SCREEN_RAM:
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1293 case DS_BITMAP_RAM:
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1294 case DS_CHAR_DATA:
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1295 case DS_EXTRA_DATA:
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1296 if ((dmC64MemBlockAlloc(dstBlk, size)) != DMERR_OK)
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1297 {
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1298 return dmError(DMERR_MALLOC,
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1299 "Could not allocate '%s' block! "
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1300 "op #%d, offs=%d ($%04x), bank=%d, size=%d ($%04x)\n",
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1301 blkname, i, op->offs, op->offs, op->bank, size, size);
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1302 }
1829
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1303 if (srcBlk == NULL || srcBlk->data == NULL)
1823
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1304 {
1842
a3fc0cab1a60 Improve C64 bitmap conversion messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1836
diff changeset
1305 dmMsg(3, "Creating whole block '%s' op #%d, offs=%d ($%04x), bank=%d, size=%d ($%04x)\n",
a3fc0cab1a60 Improve C64 bitmap conversion messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1836
diff changeset
1306 blkname, i, op->offs, op->offs, op->bank, size, size);
a3fc0cab1a60 Improve C64 bitmap conversion messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1836
diff changeset
1307 }
a3fc0cab1a60 Improve C64 bitmap conversion messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1836
diff changeset
1308 else
a3fc0cab1a60 Improve C64 bitmap conversion messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1836
diff changeset
1309 {
a3fc0cab1a60 Improve C64 bitmap conversion messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1836
diff changeset
1310 dmMsg(3, "Creating block '%s' from partial data op #%d, offs=%d ($%04x), bank=%d, size=%d ($%04x)\n",
1823
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1311 blkname, i, op->offs, op->offs, op->bank, size, size);
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1312 }
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1313 switch (op->type)
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1314 {
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1315 case DO_COPY:
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1316 // If some data exists, copy it. Rest is zero.
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1317 // Otherwise just set to zero.
1829
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1318 if (srcBlk != NULL && srcBlk->data != NULL)
1823
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1319 memcpy(dstBlk->data, srcBlk->data, srcBlk->size);
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1320 break;
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1321
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1322 case DO_SET_MEM:
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1323 // Leave allocate data to zero.
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1324 break;
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1325
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1326 case DO_SET_OP:
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1327 dmMemset(dstBlk->data, op->offs, size);
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1328 break;
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1329
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1330 default:
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1331 return dmError(DMERR_INTERNAL,
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1332 "Unhandled op type %d in "
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1333 "op #%d, offs=%d ($%04x), bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1334 op->type, i, op->offs, op->offs, op->bank, size, size);
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1335 }
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1336 break;
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1337 }
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1338 break;
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1339 }
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1340 }
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1341
1490
665a0b917d22 Begin restructuring how C64 bitmaps are converted.
Matti Hamalainen <ccr@tnsp.org>
parents: 1481
diff changeset
1342 return DMERR_OK;
665a0b917d22 Begin restructuring how C64 bitmaps are converted.
Matti Hamalainen <ccr@tnsp.org>
parents: 1481
diff changeset
1343 }
665a0b917d22 Begin restructuring how C64 bitmaps are converted.
Matti Hamalainen <ccr@tnsp.org>
parents: 1481
diff changeset
1344
665a0b917d22 Begin restructuring how C64 bitmaps are converted.
Matti Hamalainen <ccr@tnsp.org>
parents: 1481
diff changeset
1345
665a0b917d22 Begin restructuring how C64 bitmaps are converted.
Matti Hamalainen <ccr@tnsp.org>
parents: 1481
diff changeset
1346 int dmWriteBitmap(const char *filename, const DMC64Image *image, const DMC64ImageFormat *fmt)
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
1347 {
550
12854cbd6fab Initial support for bitmap -> bitmap conversion in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 547
diff changeset
1348 int res = DMERR_OK;
1481
e967e8e3b8c3 Sanitize dmWriteBitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1480
diff changeset
1349 DMGrowBuf buf;
550
12854cbd6fab Initial support for bitmap -> bitmap conversion in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 547
diff changeset
1350
1694
e568535e1a96 Backed out changeset 9611ecd2c4fb
Matti Hamalainen <ccr@tnsp.org>
parents: 1692
diff changeset
1351 dmGrowBufInit(&buf);
e568535e1a96 Backed out changeset 9611ecd2c4fb
Matti Hamalainen <ccr@tnsp.org>
parents: 1692
diff changeset
1352
1481
e967e8e3b8c3 Sanitize dmWriteBitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1480
diff changeset
1353 // Encode to target format
e967e8e3b8c3 Sanitize dmWriteBitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1480
diff changeset
1354 dmMsg(1, "Encoding C64 bitmap data to format '%s'\n", fmt->name);
1470
499835ba215c Use dmC64EncodeBMP() in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1465
diff changeset
1355 if ((res = dmC64EncodeBMP(&buf, image, fmt)) != DMERR_OK)
1585
a076c9d9b321 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 1584
diff changeset
1356 {
a076c9d9b321 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 1584
diff changeset
1357 dmErrorMsg("Error encoding bitmap data: %s\n", dmErrorStr(res));
550
12854cbd6fab Initial support for bitmap -> bitmap conversion in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 547
diff changeset
1358 goto error;
1585
a076c9d9b321 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 1584
diff changeset
1359 }
550
12854cbd6fab Initial support for bitmap -> bitmap conversion in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 547
diff changeset
1360
1481
e967e8e3b8c3 Sanitize dmWriteBitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1480
diff changeset
1361 // And output the file
1696
cf0fddd4bf52 When writing a C64 bitmap output, inform the user about the output file size.
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
1362 dmMsg(1, "Writing output file '%s', %" DM_PRIu_SIZE_T " bytes.\n",
cf0fddd4bf52 When writing a C64 bitmap output, inform the user about the output file size.
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
1363 filename, buf.len);
cf0fddd4bf52 When writing a C64 bitmap output, inform the user about the output file size.
Matti Hamalainen <ccr@tnsp.org>
parents: 1694
diff changeset
1364
1550
ba09aa661c72 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1546
diff changeset
1365 res = dmWriteDataFile(NULL, filename, buf.data, buf.len);
550
12854cbd6fab Initial support for bitmap -> bitmap conversion in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 547
diff changeset
1366
12854cbd6fab Initial support for bitmap -> bitmap conversion in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 547
diff changeset
1367 error:
1465
88845f95e791 Change dmC64EncodeGenericBMP() to use DMGrowBuf, and make the necessary changes in gfxconv as well.
Matti Hamalainen <ccr@tnsp.org>
parents: 1464
diff changeset
1368 dmGrowBufFree(&buf);
550
12854cbd6fab Initial support for bitmap -> bitmap conversion in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 547
diff changeset
1369 return res;
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
1370 }
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
1371
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
1372
1886
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1373 int dmWriteIFFMasterRAWHeaderFile(
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1374 const char *hdrFilename, const char *dataFilename,
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1375 const char *prefix, const DMImage *img,
2065
451980580189 Refactor how paletted/indexed formats are handled in libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 2062
diff changeset
1376 const DMImageConvSpec *spec)
1303
be30466fbc47 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1293
diff changeset
1377 {
1886
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1378 DMResource *fp;
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1379 int res;
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1380
1886
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1381 if ((res = dmf_open_stdio(hdrFilename, "wb", &fp)) != DMERR_OK)
1303
be30466fbc47 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1293
diff changeset
1382 {
1886
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1383 return dmError(res,
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1384 "RAW: Could not open file '%s' for writing.\n",
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1385 hdrFilename);
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1386 }
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1387
2065
451980580189 Refactor how paletted/indexed formats are handled in libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 2062
diff changeset
1388 res = dmWriteIFFMasterRAWHeader(fp, dataFilename, prefix, img, spec);
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1389
1886
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1390 dmf_close(fp);
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1391 return res;
1303
be30466fbc47 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1293
diff changeset
1392 }
be30466fbc47 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1293
diff changeset
1393
be30466fbc47 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1293
diff changeset
1394
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1395 int dmWriteImage(const char *filename, DMImage *pimage, DMImageConvSpec *spec, const DMImageFormat *fmt, BOOL info)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1396 {
1360
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1397 int res = DMERR_OK;
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1398
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1399 // Check if writing is even supported
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1400 if (fmt->write == NULL || (fmt->flags & DM_FMT_WR) == 0)
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1401 {
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1402 return dmError(DMERR_NOT_SUPPORTED,
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1403 "Writing of '%s' format is not supported.\n",
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1404 fmt->name);
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1405 }
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1406
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
1407 if (info)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1408 {
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1409 dmMsg(1, "Outputting '%s' image %d x %d -> %d x %d [%d x %d]\n",
1893
334501b6cce5 Use format name instead of file extension in a message.
Matti Hamalainen <ccr@tnsp.org>
parents: 1891
diff changeset
1410 fmt->name,
1360
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1411 pimage->width, pimage->height,
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1412 pimage->width * spec->scaleX, pimage->height * spec->scaleY,
902
c6c480e8e1c8 Add separate X and Y scaling to gfxconv and libgfx outputters.
Matti Hamalainen <ccr@tnsp.org>
parents: 897
diff changeset
1413 spec->scaleX, spec->scaleY);
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
1414 }
435
e4a3f183e463 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 432
diff changeset
1415
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1416 // Perform color remapping
1360
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1417 DMImage *image = pimage;
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1418 BOOL allocated = FALSE;
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1419 if (optRemapColors && pimage->format == DM_COLFMT_PALETTE)
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1420 {
1360
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1421 if ((res = dmRemapImageColors(&image, pimage)) != DMERR_OK)
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1422 return res;
1360
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1423
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1424 allocated = TRUE;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1425 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1426
2065
451980580189 Refactor how paletted/indexed formats are handled in libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 2062
diff changeset
1427 // Determine number of planes, if paletted
2099
dac89484f143 Fix nplanes and bpp in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2097
diff changeset
1428 if (spec->format == DM_COLFMT_PALETTE &&
2100
81fb21dd3265 Add dmGetNPlanesFromNColors() and use it.
Matti Hamalainen <ccr@tnsp.org>
parents: 2099
diff changeset
1429 spec->nplanes == 0 && image->pal != NULL)
81fb21dd3265 Add dmGetNPlanesFromNColors() and use it.
Matti Hamalainen <ccr@tnsp.org>
parents: 2099
diff changeset
1430 spec->nplanes = dmGetNPlanesFromNColors(image->pal->ncolors);
81fb21dd3265 Add dmGetNPlanesFromNColors() and use it.
Matti Hamalainen <ccr@tnsp.org>
parents: 2099
diff changeset
1431 else
81fb21dd3265 Add dmGetNPlanesFromNColors() and use it.
Matti Hamalainen <ccr@tnsp.org>
parents: 2099
diff changeset
1432 if (image->format == DM_COLFMT_GRAYSCALE)
81fb21dd3265 Add dmGetNPlanesFromNColors() and use it.
Matti Hamalainen <ccr@tnsp.org>
parents: 2099
diff changeset
1433 spec->nplanes = 8;
2065
451980580189 Refactor how paletted/indexed formats are handled in libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 2062
diff changeset
1434
2100
81fb21dd3265 Add dmGetNPlanesFromNColors() and use it.
Matti Hamalainen <ccr@tnsp.org>
parents: 2099
diff changeset
1435 if (spec->nplanes <= 0)
2099
dac89484f143 Fix nplanes and bpp in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2097
diff changeset
1436 spec->nplanes = 4;
dac89484f143 Fix nplanes and bpp in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2097
diff changeset
1437
2065
451980580189 Refactor how paletted/indexed formats are handled in libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 2062
diff changeset
1438 spec->fmtid = fmt->fmtid;
451980580189 Refactor how paletted/indexed formats are handled in libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 2062
diff changeset
1439
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1440 // Do some format-specific adjustments and other things
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1441 switch (fmt->fmtid)
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
1442 {
1543
416d7b3ba3b2 Rename libgfx IMGFMT_* constants to DM_IMGFMT_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 1537
diff changeset
1443 case DM_IMGFMT_PNG:
2065
451980580189 Refactor how paletted/indexed formats are handled in libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 2062
diff changeset
1444 spec->format = optUsePalette ? DM_COLFMT_PALETTE : DM_COLFMT_RGBA;
1360
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1445 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
1446
1543
416d7b3ba3b2 Rename libgfx IMGFMT_* constants to DM_IMGFMT_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 1537
diff changeset
1447 case DM_IMGFMT_PPM:
1801
0562dd55a1f6 s/DM_IFMT_/DM_COLFMT_/g
Matti Hamalainen <ccr@tnsp.org>
parents: 1775
diff changeset
1448 spec->format = DM_COLFMT_RGB;
1360
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1449 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
1450
1543
416d7b3ba3b2 Rename libgfx IMGFMT_* constants to DM_IMGFMT_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 1537
diff changeset
1451 case DM_IMGFMT_RAW:
416d7b3ba3b2 Rename libgfx IMGFMT_* constants to DM_IMGFMT_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 1537
diff changeset
1452 case DM_IMGFMT_ARAW:
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1453 {
1886
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1454 char *prefix = NULL, *hdrFilename = NULL;
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1455 if ((hdrFilename = dm_strdup_fext(filename, "%s.inc")) == NULL ||
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1456 (prefix = dm_strdup_fext(filename, "img_%s")) == NULL)
1360
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1457 {
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1458 res = dmError(DMERR_MALLOC,
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1459 "Could not allocate memory for filename strings? :O\n");
1360
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1460 goto err;
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1461 }
820
e3fa646aef0d Use dm_strdup_fext().
Matti Hamalainen <ccr@tnsp.org>
parents: 819
diff changeset
1462
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1463 // Replace any non-alphanumerics in palette ID
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1464 for (int i = 0; prefix[i]; i++)
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1465 prefix[i] = isalnum(prefix[i]) ? tolower(prefix[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
1466
1291
2c4acbc3e7bf More work on libgfx etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 1290
diff changeset
1467 if (info)
2c4acbc3e7bf More work on libgfx etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 1290
diff changeset
1468 {
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1469 dmMsg(2, "%d bitplanes, %s planes output.\n",
1291
2c4acbc3e7bf More work on libgfx etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 1290
diff changeset
1470 spec->nplanes,
2c4acbc3e7bf More work on libgfx etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 1290
diff changeset
1471 spec->planar ? "planar/interleaved" : "non-interleaved");
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1472 dmMsg(2, "%s datafile '%s', ID prefix '%s'.\n",
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1473 fmt->fmtid == DM_IMGFMT_ARAW ? "ARAW" : "RAW",
1886
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1474 hdrFilename, prefix);
1291
2c4acbc3e7bf More work on libgfx etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 1290
diff changeset
1475 }
1891
91b80990043c Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1890
diff changeset
1476
1886
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1477 res = dmWriteIFFMasterRAWHeaderFile(
2065
451980580189 Refactor how paletted/indexed formats are handled in libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 2062
diff changeset
1478 hdrFilename, filename, prefix, image, spec);
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1479
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1480 dmFree(prefix);
1886
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1481 dmFree(hdrFilename);
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1482 }
607
360b1ad83ed9 Rename things; Fix build by combining the conflicting rules.
Matti Hamalainen <ccr@tnsp.org>
parents: 566
diff changeset
1483 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
1484
2065
451980580189 Refactor how paletted/indexed formats are handled in libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 2062
diff changeset
1485 default:
451980580189 Refactor how paletted/indexed formats are handled in libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 2062
diff changeset
1486 spec->format = optUsePalette ? DM_COLFMT_PALETTE : DM_COLFMT_RGB;
1896
f80b2dc77c30 Work begins on IFF ILBM/PBM image writer. It is pretty broken, some things
Matti Hamalainen <ccr@tnsp.org>
parents: 1893
diff changeset
1487 break;
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1488 }
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1489
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1490 // If no error has occured thus far, write the image
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1491 if (res == DMERR_OK)
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1492 {
1886
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1493 DMResource *fp;
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1494
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1495 if (info)
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1496 {
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1497 char *str;
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1498 switch (spec->format)
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1499 {
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1500 case DM_COLFMT_PALETTE : str = "indexed/paletted"; break;
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1501 case DM_COLFMT_RGB : str = "24bit RGB"; break;
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1502 case DM_COLFMT_RGBA : str = "32bit RGBA"; break;
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1503 default : str = "???"; break;
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1504 }
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1505 dmMsg(2, "Using %s output.\n", str);
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1506 }
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1507
1886
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1508 if ((res = dmf_open_stdio(filename, "wb", &fp)) != DMERR_OK)
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1509 {
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1510 dmErrorMsg("Could not open file '%s' for writing.\n",
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1511 filename);
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1512 goto err;
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1513 }
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1514
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1515 res = fmt->write(fp, image, spec);
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1516
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1517 dmf_close(fp);
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1518 }
1360
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1519
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1520 err:
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1521 if (allocated)
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1522 dmImageFree(image);
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1523
fcaf04cb0830 Make image palette remapping use a destination image instead of doing remapping on the source image.
Matti Hamalainen <ccr@tnsp.org>
parents: 1340
diff changeset
1524 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
1525 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1526
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1527
547
ca5ad51c6479 Make dmConvertByte() static.
Matti Hamalainen <ccr@tnsp.org>
parents: 546
diff changeset
1528 static Uint8 dmConvertByte(const Uint8 *sp, const BOOL multicolor)
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1529 {
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1530 Uint8 byte = 0;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1531 int xc;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1532
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1533 if (multicolor)
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1534 {
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1535 for (xc = 0; xc < 8 / 2; xc++)
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1536 {
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1537 Uint8 pixel = sp[xc * 2] & 3;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1538 byte |= pixel << (6 - (xc * 2));
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1539 }
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1540 }
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1541 else
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1542 {
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1543 for (xc = 0; xc < 8; xc++)
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1544 {
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1545 Uint8 pixel = sp[xc] == 0 ? 0 : 1;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1546 byte |= pixel << (7 - xc);
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1547 }
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1548 }
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1549
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1550 return byte;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1551 }
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1552
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1553
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1554 BOOL dmConvertImage2Char(Uint8 *buf, const DMImage *image,
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1555 const int xoffs, const int yoffs, const BOOL multicolor)
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1556 {
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1557 int yc;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1558
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1559 if (xoffs < 0 || yoffs < 0 ||
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1560 xoffs + C64_CHR_WIDTH_PX > image->width ||
1859
f382cde6bb58 Rename various C64 sprite / character constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 1852
diff changeset
1561 yoffs + C64_CHR_HEIGHT_PX > image->height)
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1562 return FALSE;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1563
1859
f382cde6bb58 Rename various C64 sprite / character constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 1852
diff changeset
1564 for (yc = 0; yc < C64_CHR_HEIGHT_UT; yc++)
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1565 {
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1566 const Uint8 *sp = image->data + ((yc + yoffs) * image->pitch) + xoffs;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1567 buf[yc] = dmConvertByte(sp, multicolor);
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1568 }
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1569
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1570 return TRUE;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1571 }
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1572
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1573
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1574 BOOL dmConvertImage2Sprite(Uint8 *buf, const DMImage *image,
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1575 const int xoffs, const int yoffs, const BOOL multicolor)
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1576 {
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1577 int yc, xc;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1578
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1579 if (xoffs < 0 || yoffs < 0 ||
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1580 xoffs + C64_SPR_WIDTH_PX > image->width ||
1859
f382cde6bb58 Rename various C64 sprite / character constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 1852
diff changeset
1581 yoffs + C64_SPR_HEIGHT_PX > image->height)
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1582 return FALSE;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1583
1859
f382cde6bb58 Rename various C64 sprite / character constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 1852
diff changeset
1584 for (yc = 0; yc < C64_SPR_HEIGHT_UT; yc++)
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1585 {
1859
f382cde6bb58 Rename various C64 sprite / character constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 1852
diff changeset
1586 for (xc = 0; xc < C64_SPR_WIDTH_PX / C64_SPR_WIDTH_UT; xc++)
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1587 {
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1588 const Uint8 *sp = image->data + ((yc + yoffs) * image->pitch) + (xc * 8) + xoffs;
1859
f382cde6bb58 Rename various C64 sprite / character constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 1852
diff changeset
1589 buf[(yc * C64_SPR_WIDTH_UT) + xc] = dmConvertByte(sp, multicolor);
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1590 }
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1591 }
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1592
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1593 return TRUE;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1594 }
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1595
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1596
1928
0b2a2da4c7e7 Constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 1916
diff changeset
1597 int dmWriteSpritesAndChars(const char *filename, DMImage *image, int outFormat, const BOOL multicolor)
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1598 {
909
be5d276f8a6c Some work on error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 907
diff changeset
1599 int ret = DMERR_OK;
829
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1600 int outBlockW, outBlockH, bx, by;
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1601 FILE *outFile = NULL;
829
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1602 Uint8 *buf = NULL;
907
bc6c338295e5 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 902
diff changeset
1603 size_t outBufSize;
829
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1604 char *outType;
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1605
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1606 switch (outFormat)
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1607 {
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1608 case FFMT_CHAR:
907
bc6c338295e5 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 902
diff changeset
1609 outBufSize = C64_CHR_SIZE;
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1610 outBlockW = image->width / C64_CHR_WIDTH_PX;
1859
f382cde6bb58 Rename various C64 sprite / character constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 1852
diff changeset
1611 outBlockH = image->height / C64_CHR_HEIGHT_PX;
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1612 outType = "char";
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1613 break;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1614
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1615 case FFMT_SPRITE:
907
bc6c338295e5 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 902
diff changeset
1616 outBufSize = C64_SPR_SIZE;
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1617 outBlockW = image->width / C64_SPR_WIDTH_PX;
1859
f382cde6bb58 Rename various C64 sprite / character constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 1852
diff changeset
1618 outBlockH = image->height / C64_SPR_HEIGHT_PX;
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1619 outType = "sprite";
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1620 break;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1621
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1622 default:
972
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
1623 ret = dmError(DMERR_INVALID_ARGS,
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
1624 "Invalid output format %d, internal error.\n", outFormat);
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1625 goto error;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1626 }
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1627
909
be5d276f8a6c Some work on error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 907
diff changeset
1628 if (outBlockW < 1 || outBlockH < 1)
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1629 {
972
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
1630 ret = dmError(DMERR_INVALID_ARGS,
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
1631 "Source image dimensions too small for conversion, block dimensions %d x %d.\n",
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1632 outBlockW, outBlockH);
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1633 goto error;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1634 }
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1635
829
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1636 if ((outFile = fopen(filename, "wb")) == NULL)
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1637 {
909
be5d276f8a6c Some work on error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 907
diff changeset
1638 ret = dmGetErrno();
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
1639 dmErrorMsg("Could not open '%s' for writing, %d: %s.\n",
909
be5d276f8a6c Some work on error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 907
diff changeset
1640 filename, ret, dmErrorStr(ret));
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1641 goto error;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1642 }
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1643
907
bc6c338295e5 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 902
diff changeset
1644 if ((buf = dmMalloc(outBufSize)) == NULL)
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1645 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
1646 dmErrorMsg("Could not allocate %d bytes for conversion buffer.\n",
907
bc6c338295e5 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 902
diff changeset
1647 outBufSize);
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1648 goto error;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1649 }
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1650
829
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1651 dmMsg(1, "Writing %d x %d = %d blocks of %s data...\n",
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1652 outBlockW, outBlockH, outBlockW * outBlockH, outType);
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1653
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1654 for (by = 0; by < outBlockH; by++)
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1655 for (bx = 0; bx < outBlockW; bx++)
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1656 {
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1657 switch (outFormat)
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1658 {
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1659 case FFMT_CHAR:
829
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1660 if (!dmConvertImage2Char(buf, image,
1859
f382cde6bb58 Rename various C64 sprite / character constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 1852
diff changeset
1661 bx * C64_CHR_WIDTH_PX, by * C64_CHR_HEIGHT_PX,
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1662 multicolor))
909
be5d276f8a6c Some work on error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 907
diff changeset
1663 {
be5d276f8a6c Some work on error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 907
diff changeset
1664 ret = DMERR_DATA_ERROR;
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1665 goto error;
909
be5d276f8a6c Some work on error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 907
diff changeset
1666 }
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1667 break;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1668
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1669 case FFMT_SPRITE:
829
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1670 if (!dmConvertImage2Sprite(buf, image,
1859
f382cde6bb58 Rename various C64 sprite / character constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 1852
diff changeset
1671 bx * C64_SPR_WIDTH_PX, by * C64_SPR_HEIGHT_PX,
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1672 multicolor))
909
be5d276f8a6c Some work on error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 907
diff changeset
1673 {
be5d276f8a6c Some work on error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 907
diff changeset
1674 ret = DMERR_DATA_ERROR;
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1675 goto error;
909
be5d276f8a6c Some work on error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 907
diff changeset
1676 }
910
Matti Hamalainen <ccr@tnsp.org>
parents: 909
diff changeset
1677 break;
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1678 }
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1679
907
bc6c338295e5 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 902
diff changeset
1680 if (!dm_fwrite_str(outFile, buf, outBufSize))
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1681 {
909
be5d276f8a6c Some work on error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 907
diff changeset
1682 ret = dmGetErrno();
972
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
1683 dmError(ret, "Error writing data block %d,%d to '%s', %d: %s\n",
909
be5d276f8a6c Some work on error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 907
diff changeset
1684 bx, by, filename, ret, dmErrorStr(ret));
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1685 goto error;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1686 }
829
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1687 }
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1688
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1689 fclose(outFile);
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1690 dmFree(buf);
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1691 return 0;
828
c20a99411a1a Fix a silly segfault.
Matti Hamalainen <ccr@tnsp.org>
parents: 827
diff changeset
1692
c20a99411a1a Fix a silly segfault.
Matti Hamalainen <ccr@tnsp.org>
parents: 827
diff changeset
1693 error:
c20a99411a1a Fix a silly segfault.
Matti Hamalainen <ccr@tnsp.org>
parents: 827
diff changeset
1694 if (outFile != NULL)
c20a99411a1a Fix a silly segfault.
Matti Hamalainen <ccr@tnsp.org>
parents: 827
diff changeset
1695 fclose(outFile);
829
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1696 dmFree(buf);
910
Matti Hamalainen <ccr@tnsp.org>
parents: 909
diff changeset
1697 return ret;
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1698 }
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1699
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
1700
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1701 int dmDumpSpritesAndChars(const Uint8 *dataBuf, const size_t dataSize, const size_t realOffs)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1702 {
1524
532c3ceaec1a Fix uninitilized variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 1522
diff changeset
1703 int ret = DMERR_OK, itemCount, outWidth, outWidthPX, outHeight;
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1704 size_t offs, outSize;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1705
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1706 switch (optInType)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1707 {
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
1708 case FFMT_CHAR:
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1709 outSize = C64_CHR_SIZE;
1859
f382cde6bb58 Rename various C64 sprite / character constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 1852
diff changeset
1710 outWidth = C64_CHR_WIDTH_UT;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1711 outWidthPX = C64_CHR_WIDTH_PX;
1859
f382cde6bb58 Rename various C64 sprite / character constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 1852
diff changeset
1712 outHeight = C64_CHR_HEIGHT_UT;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1713 break;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
1714
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
1715 case FFMT_SPRITE:
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1716 outSize = C64_SPR_SIZE;
1859
f382cde6bb58 Rename various C64 sprite / character constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 1852
diff changeset
1717 outWidth = C64_SPR_WIDTH_UT;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1718 outWidthPX = C64_SPR_WIDTH_PX;
1859
f382cde6bb58 Rename various C64 sprite / character constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 1852
diff changeset
1719 outHeight = C64_SPR_HEIGHT_UT;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1720 break;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
1721
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1722 default:
972
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
1723 return dmError(DMERR_INTERNAL,
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1724 "Invalid input format %d, internal error.\n", optInType);
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 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1726
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1727 offs = 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
1728 itemCount = 0;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1729
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1730 if (optOutType == FFMT_ANSI || optOutType == FFMT_ASCII)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1731 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1732 BOOL error = FALSE;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1733 FILE *outFile;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1734
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1735 if (optOutFilename == NULL)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1736 outFile = stdout;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1737 else
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1738 if ((outFile = fopen(optOutFilename, "w")) == NULL)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1739 {
972
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
1740 ret = dmGetErrno();
1525
9602f7ea1e7e Improve some error messages in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1524
diff changeset
1741 dmError(ret, "Error opening output file '%s': %s\n",
9602f7ea1e7e Improve some error messages in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1524
diff changeset
1742 optOutFilename, dmErrorStr(ret));
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1743 goto error;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1744 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1745
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1746 while (offs + outSize < dataSize && !error && (optItemCount < 0 || itemCount < optItemCount))
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1747 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1748 fprintf(outFile, "---- : -------------- #%d\n", itemCount);
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1749
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1750 switch (optInType)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1751 {
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
1752 case FFMT_CHAR:
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1753 dmDumpCharASCII(outFile, dataBuf + offs, realOffs + offs, optOutType, optInMulticolor);
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1754 break;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
1755 case FFMT_SPRITE:
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1756 dmDumpSpriteASCII(outFile, dataBuf + offs, realOffs + offs, optOutType, optInMulticolor);
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1757 break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1758 }
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1759 offs += outSize;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1760 itemCount++;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1761 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1762
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1763 fclose(outFile);
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1764 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1765 else
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1766 if (optOutType == FFMT_IMAGE)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1767 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1768 DMImage *outImage = NULL;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1769 char *outFilename = NULL;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1770 int outX = 0, outY = 0, err;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1771
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1772 if (optSequential)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1773 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1774 if (optOutFilename == NULL)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1775 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
1776 dmErrorMsg("Sequential image output requires filename template.\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
1777 goto error;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1778 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1779
1801
0562dd55a1f6 s/DM_IFMT_/DM_COLFMT_/g
Matti Hamalainen <ccr@tnsp.org>
parents: 1775
diff changeset
1780 outImage = dmImageAlloc(outWidthPX, outHeight, DM_COLFMT_PALETTE, -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
1781 dmMsg(1, "Outputting sequence of %d images @ %d x %d -> %d x %d.\n",
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1782 optItemCount,
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1783 outImage->width, outImage->height,
2058
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
1784 outImage->width * optSpec.scaleX,
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
1785 outImage->height * optSpec.scaleY);
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1786 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1787 else
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1788 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1789 int outIWidth, outIHeight;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1790 if (optItemCount <= 0)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1791 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
1792 dmErrorMsg("Single-image output requires count to be set (-n).\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
1793 goto error;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1794 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
1795
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1796 outIWidth = optPlanedWidth;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1797 outIHeight = (optItemCount / optPlanedWidth);
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1798 if (optItemCount % optPlanedWidth)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1799 outIHeight++;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
1800
1801
0562dd55a1f6 s/DM_IFMT_/DM_COLFMT_/g
Matti Hamalainen <ccr@tnsp.org>
parents: 1775
diff changeset
1801 outImage = dmImageAlloc(outWidthPX * outIWidth, outIHeight * outHeight, DM_COLFMT_PALETTE, -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
1802 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1803
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1804 if ((err = dmSetDefaultC64Palette(outImage)) != DMERR_OK)
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1805 {
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1806 dmErrorMsg("Could not allocate C64 palette for output image: %d\n", err);
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1807 goto error;
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1808 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
1809
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1810 while (offs + outSize < dataSize && (optItemCount < 0 || itemCount < optItemCount))
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1811 {
827
c8beac5313c3 Rename a function.
Matti Hamalainen <ccr@tnsp.org>
parents: 826
diff changeset
1812 if ((err = dmC64ConvertCSDataToImage(outImage, outX * outWidthPX, outY * outHeight,
1865
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
1813 dataBuf + offs, outWidth, outHeight, optInMulticolor, optColorMap)) != 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
1814 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
1815 dmErrorMsg("Internal error in conversion of raw data to bitmap: %d.\n", err);
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1816 goto error;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1817 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1818
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1819 if (optSequential)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1820 {
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1821 outFilename = dm_strdup_printf("%s%04d.%s",
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1822 optOutFilename,
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1823 itemCount,
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1824 convFormatList[optOutType].fext);
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1825
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1826 if (outFilename == NULL)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1827 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
1828 dmErrorMsg("Could not allocate memory for filename template?\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
1829 goto error;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1830 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
1831
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1832 ret = dmWriteImage(outFilename, outImage, &optSpec,
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1833 &dmImageFormatList[optOutFormat], TRUE);
972
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
1834 if (ret != DMERR_OK)
799
5ec451795ab2 Add some error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 652
diff changeset
1835 {
1525
9602f7ea1e7e Improve some error messages in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1524
diff changeset
1836 dmErrorMsg("Error writing output image '%s': %s.\n",
9602f7ea1e7e Improve some error messages in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1524
diff changeset
1837 outFilename, dmErrorStr(ret));
799
5ec451795ab2 Add some error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 652
diff changeset
1838 }
5ec451795ab2 Add some error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 652
diff changeset
1839
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1840 dmFree(outFilename);
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1841 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1842 else
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1843 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1844 if (++outX >= optPlanedWidth)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1845 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1846 outX = 0;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1847 outY++;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1848 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1849 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
1850
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1851 offs += outSize;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1852 itemCount++;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1853 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1854
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1855 if (!optSequential)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1856 {
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1857 ret = dmWriteImage(optOutFilename, outImage, &optSpec,
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1858 &dmImageFormatList[optOutFormat], TRUE);
972
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
1859 if (ret != DMERR_OK)
799
5ec451795ab2 Add some error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 652
diff changeset
1860 {
1525
9602f7ea1e7e Improve some error messages in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1524
diff changeset
1861 dmError(ret, "Error writing output image '%s': %s.\n",
9602f7ea1e7e Improve some error messages in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1524
diff changeset
1862 optOutFilename, dmErrorStr(ret));
799
5ec451795ab2 Add some error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 652
diff changeset
1863 }
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1864 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
1865
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1866 dmImageFree(outImage);
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1867 }
607
360b1ad83ed9 Rename things; Fix build by combining the conflicting rules.
Matti Hamalainen <ccr@tnsp.org>
parents: 566
diff changeset
1868 else
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1869 if (optOutType == FFMT_BITMAP)
607
360b1ad83ed9 Rename things; Fix build by combining the conflicting rules.
Matti Hamalainen <ccr@tnsp.org>
parents: 566
diff changeset
1870 {
360b1ad83ed9 Rename things; Fix build by combining the conflicting rules.
Matti Hamalainen <ccr@tnsp.org>
parents: 566
diff changeset
1871 if (optSequential)
360b1ad83ed9 Rename things; Fix build by combining the conflicting rules.
Matti Hamalainen <ccr@tnsp.org>
parents: 566
diff changeset
1872 {
972
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
1873 ret = dmError(DMERR_INVALID_ARGS,
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
1874 "Sequential output not supported for spr/char -> bitmap conversion.\n");
607
360b1ad83ed9 Rename things; Fix build by combining the conflicting rules.
Matti Hamalainen <ccr@tnsp.org>
parents: 566
diff changeset
1875 goto error;
360b1ad83ed9 Rename things; Fix build by combining the conflicting rules.
Matti Hamalainen <ccr@tnsp.org>
parents: 566
diff changeset
1876 }
360b1ad83ed9 Rename things; Fix build by combining the conflicting rules.
Matti Hamalainen <ccr@tnsp.org>
parents: 566
diff changeset
1877 }
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1878
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1879 error:
972
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
1880 return ret;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1881 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1882
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1883
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1884 int main(int argc, char *argv[])
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1885 {
933
8fe48c08dbca Fix some memory leaks etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 931
diff changeset
1886 FILE *inFile = NULL;
1931
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
1887 DMC64ImageConvSpec imageSpecC64;
1440
a602488830fc Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1439
diff changeset
1888 const DMC64ImageFormat *inC64Fmt = NULL;
1869
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
1889 DMConvFormat inFormat, outFormat;
1490
665a0b917d22 Begin restructuring how C64 bitmaps are converted.
Matti Hamalainen <ccr@tnsp.org>
parents: 1481
diff changeset
1890 DMC64Image *inC64Image = NULL, *outC64Image = NULL;
2052
aa8df4f1b785 Fix minor memory leaks in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2030
diff changeset
1891 DMImage *inImage = NULL, *outImage = NULL;
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1892 Uint8 *dataBuf = NULL, *dataBufOrig = NULL;
2005
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
1893 size_t dataSize, dataSizeOrig, dataRealOffs;
2097
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
1894 int i, n, 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
1895
1865
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
1896 // Default color mapping
1584
f1b279ba47a8 Remove some useless constants.
Matti Hamalainen <ccr@tnsp.org>
parents: 1569
diff changeset
1897 for (i = 0; i < C64_NCOLORS; i++)
1865
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
1898 optColorMap[i] = 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
1899
1931
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
1900 // Initialize c64 image conversion spec
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
1901 memset(&imageSpecC64, 0, sizeof(imageSpecC64));
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
1902
1616
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
1903 // Initialize list of additional conversion formats
1775
4e4d54135baf Refactor the c64 bitmap format definitions handling to be more flexible. Again.
Matti Hamalainen <ccr@tnsp.org>
parents: 1759
diff changeset
1904 dmC64InitializeFormats();
1616
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
1905 nconvFormatList = ndmImageFormatList + nbaseFormatList;
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
1906 convFormatList = dmCalloc(nconvFormatList, sizeof(DMConvFormat));
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
1907
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
1908 for (n = i = 0; i < ndmImageFormatList; i++)
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
1909 {
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
1910 const DMImageFormat *sfmt = &dmImageFormatList[i];
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
1911 DMConvFormat *dfmt = &convFormatList[n++];
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1912 dfmt->name = sfmt->name;
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1913 dfmt->fext = sfmt->fext;
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1914 dfmt->flags = sfmt->flags;
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1915 dfmt->type = FFMT_IMAGE;
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1916 dfmt->format = sfmt->fmtid;
1616
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
1917 }
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
1918
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
1919 for (i = 0; i < nbaseFormatList; i++)
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
1920 memcpy(&convFormatList[n++], &baseFormatList[i], sizeof(DMConvFormat));
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
1921
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1922 // Initialize and parse commandline
1910
1a198212009e Bump gfxconv version.
Matti Hamalainen <ccr@tnsp.org>
parents: 1909
diff changeset
1923 dmInitProg("gfxconv", "Simple graphics converter", "0.94", 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
1924
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1925 if (!dmArgsProcess(argc, argv, optList, optListN,
860
daebbf28953d The argument handling API in dmargs* was synced with th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 854
diff changeset
1926 argHandleOpt, argHandleFile, OPTH_BAILOUT))
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1927 exit(1);
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1928
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1929 // Determine input format, if not specified
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1930 if (optInType == FFMT_AUTO && optInFilename != 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
1931 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1932 char *dext = strrchr(optInFilename, '.');
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1933 if (dext)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1934 {
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1935 if (dmGetFormatByExt(dext + 1, &optInType, &optInFormat) ||
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1936 dmGetC64FormatByExt(dext + 1, &optInType, &optInFormat))
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1937 {
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1938 dmMsg(3, "Guessed input type as %s\n",
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1939 formatTypeList[optInType]);
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1940 }
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1941 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1942 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1943
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1944 if (optInFilename == NULL)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1945 {
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1946 if (optInType == FFMT_AUTO)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1947 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
1948 dmErrorMsg("Standard input cannot be used without specifying input format.\n");
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
1949 dmErrorMsg("Perhaps you should try using --help\n");
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
1950 goto error;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1951 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1952 inFile = stdin;
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1953 optInFilename = "stdin";
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1954 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1955 else
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1956 if ((inFile = fopen(optInFilename, "rb")) == NULL)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1957 {
2097
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
1958 res = dmGetErrno();
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
1959 dmErrorMsg("Error opening input file '%s', %d: %s\n",
488
49f0ce2cc347 Error printing cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 487
diff changeset
1960 optInFilename, res, dmErrorStr(res));
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
1961 goto error;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1962 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1963
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1964 // Determine output format, if not specified
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1965 if (optOutType == FFMT_AUTO && optOutFilename != NULL)
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1966 {
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1967 char *dext = strrchr(optOutFilename, '.');
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1968 if (dext)
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1969 {
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1970 if (dmGetFormatByExt(dext + 1, &optOutType, &optOutFormat) ||
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1971 dmGetC64FormatByExt(dext + 1, &optOutType, &optOutFormat))
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1972 {
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1973 dmMsg(3, "Guessed output type as %s\n",
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1974 formatTypeList[optOutType]);
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1975 }
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1976 }
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1977 }
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1978 else
1911
794cbb938a58 Do not force output type to FFMT_ASCII if format is set on commandline.
Matti Hamalainen <ccr@tnsp.org>
parents: 1910
diff changeset
1979 if (optOutType == FFMT_AUTO)
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1980 optOutType = FFMT_ASCII;
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1981
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1982 // Read the input ..
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1983 dmMsg(1, "Reading input from '%s'.\n", optInFilename);
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1984
2097
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
1985 if ((res = dmReadDataFile(inFile, NULL, &dataBufOrig, &dataSizeOrig)) != DMERR_OK)
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
1986 {
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
1987 dmErrorMsg("Could not read input: %s.\n", dmErrorStr(res));
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
1988 goto error;
2097
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
1989 }
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
1990
1664
9181d9148654 Fix a minor memory leak and file descriptor leak.
Matti Hamalainen <ccr@tnsp.org>
parents: 1640
diff changeset
1991 fclose(inFile);
9181d9148654 Fix a minor memory leak and file descriptor leak.
Matti Hamalainen <ccr@tnsp.org>
parents: 1640
diff changeset
1992
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1993 // Check and compute the input skip
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1994 if (optInSkip > dataSizeOrig)
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1995 {
2010
09d548b08150 Improve input skip option messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 2006
diff changeset
1996 dmErrorMsg("Input skip value %d (0x%x) is larger than input size %" DM_PRIu_SIZE_T ".\n",
09d548b08150 Improve input skip option messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 2006
diff changeset
1997 optInSkip, optInSkip, dataSizeOrig);
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1998 goto error;
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1999 }
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
2000
2005
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2001 if (optInSkipNeg)
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2002 {
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2003 dataBuf = dataBufOrig + dataSizeOrig - optInSkip;
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2004 dataSize = optInSkip;
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2005 dataRealOffs = dataSizeOrig - optInSkip;
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2006
2010
09d548b08150 Improve input skip option messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 2006
diff changeset
2007 dmMsg(1, "Input skip -%d (-0x%x). Offset %d (0x%x), size %d (0x%x).\n",
2005
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2008 optInSkip, optInSkip,
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2009 dataRealOffs, dataRealOffs,
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2010 dataSize, dataSize);
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2011
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2012 }
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2013 else
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2014 {
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2015 dataBuf = dataBufOrig + optInSkip;
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2016 dataSize = dataSizeOrig - optInSkip;
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2017 dataRealOffs = optInSkip;
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2018
2010
09d548b08150 Improve input skip option messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 2006
diff changeset
2019 dmMsg(1, "Input skip %d (0x%x), size %d (0x%x).\n",
2005
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2020 optInSkip, optInSkip,
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2021 dataSize, dataSize);
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2022 }
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
2023
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2024 // Check for forced input format here
1869
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
2025 if (optForcedInSubFormat >= 0)
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2026 optInFormat = optForcedInSubFormat;
1869
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
2027
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
2028 // Perform probing, if required
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2029 if (optInType == FFMT_AUTO || optInType == FFMT_BITMAP)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2030 {
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2031 // Probe for format
516
6f141f760c54 Constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 509
diff changeset
2032 const DMC64ImageFormat *forced = NULL;
1707
a0986cfd6f9d More consistently use DMGrowBuf in the lib64gfx APIs, and implement
Matti Hamalainen <ccr@tnsp.org>
parents: 1696
diff changeset
2033 DMGrowBuf tbuf;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2034
1867
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
2035 if (optForcedInSubFormat >= 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
2036 {
1867
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
2037 forced = &dmC64ImageFormats[optForcedInSubFormat];
1869
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
2038 dmMsg(0, "Forced '%s' format image, type %d, %s\n",
1775
4e4d54135baf Refactor the c64 bitmap format definitions handling to be more flexible. Again.
Matti Hamalainen <ccr@tnsp.org>
parents: 1759
diff changeset
2039 forced->name, forced->format->type, forced->fext);
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2040 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2041
1747
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1730
diff changeset
2042 res = dmC64DecodeBMP(&inC64Image,
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1730
diff changeset
2043 dmGrowBufConstCreateFrom(&tbuf, dataBuf, dataSize),
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1730
diff changeset
2044 0, 2, &inC64Fmt, forced);
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1730
diff changeset
2045
1630
00e0d345e7f1 Improve autoprobing error handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1629
diff changeset
2046 if (forced == NULL && inC64Fmt != NULL && res == 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
2047 {
1522
0d1cf72fb732 Clarify the "probed" messages of gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1514
diff changeset
2048 dmMsg(1, "Probed '%s' format image, type %d, %s\n",
1775
4e4d54135baf Refactor the c64 bitmap format definitions handling to be more flexible. Again.
Matti Hamalainen <ccr@tnsp.org>
parents: 1759
diff changeset
2049 inC64Fmt->name, inC64Fmt->format->type, inC64Fmt->fext);
1630
00e0d345e7f1 Improve autoprobing error handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1629
diff changeset
2050
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2051 optInType = FFMT_BITMAP;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2052 }
897
9541ea963e75 Add some error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 871
diff changeset
2053 else
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2054 if (res != DMERR_OK && (forced != NULL || optInType == FFMT_BITMAP))
897
9541ea963e75 Add some error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 871
diff changeset
2055 {
1464
73e00bf7531c Improve one error message by showing the error code.
Matti Hamalainen <ccr@tnsp.org>
parents: 1457
diff changeset
2056 dmErrorMsg("Could not decode input image: %s.\n", dmErrorStr(res));
1514
61a5bbaf8d5c Plug some minor memory leaks in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1502
diff changeset
2057 goto error;
897
9541ea963e75 Add some error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 871
diff changeset
2058 }
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2059 }
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2060
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2061 if (optInType == FFMT_AUTO || optInType == FFMT_IMAGE)
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2062 {
1616
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
2063 const DMImageFormat *ifmt = NULL;
435
e4a3f183e463 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 432
diff changeset
2064 int index;
465
ffd5e730d313 Adjust verbosity levels.
Matti Hamalainen <ccr@tnsp.org>
parents: 463
diff changeset
2065 dmMsg(4, "Trying to probe image formats.\n");
1708
55db8d6dffa5 Do not apply input skip offset here anymore, it's handled more generally elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents: 1707
diff changeset
2066 if (dmImageProbeGeneric(dataBuf, dataSize, &ifmt, &index) > 0)
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2067 {
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2068 optInType = FFMT_IMAGE;
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2069 optInFormat = index;
1869
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
2070 dmMsg(1, "Probed '%s' format image.\n", ifmt->name);
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2071 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2072 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2073
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2074 if (optInType == FFMT_AUTO)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2075 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
2076 dmErrorMsg("No input format specified, and could not be determined automatically.\n");
1514
61a5bbaf8d5c Plug some minor memory leaks in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1502
diff changeset
2077 goto error;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2078 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2079
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2080 if (dmGetConvFormat(optInType, optInFormat, &inFormat) &&
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2081 dmGetConvFormat(optOutType, optOutFormat, &outFormat))
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2082 {
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2083 dmMsg(1, "Attempting conversion %s (%s) -> %s (%s)\n",
1869
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
2084 inFormat.name, inFormat.fext,
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
2085 outFormat.name, outFormat.fext);
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2086 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2087
2058
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2088 if (optScaleMode != SCALE_SET)
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2089 {
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2090 int scaleX = 1, scaleY = 1;
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2091 if (inC64Fmt != NULL)
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2092 {
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2093 scaleX = inC64Fmt->format->aspectX;
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2094 scaleY = inC64Fmt->format->aspectY;
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2095 }
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2096
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2097 switch (optScaleMode)
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2098 {
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2099 case SCALE_AUTO:
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2100 optSpec.scaleX = scaleX;
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2101 optSpec.scaleY = scaleY;
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2102 break;
2070
41df24d1dfb6 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 2065
diff changeset
2103
2058
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2104 case SCALE_RELATIVE:
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2105 optSpec.scaleX *= scaleX;
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2106 optSpec.scaleY *= scaleY;
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2107 break;
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2108 }
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2109 }
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2110
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2111 switch (optInType)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2112 {
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2113 case FFMT_SPRITE:
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2114 case FFMT_CHAR:
2005
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2115 dmDumpSpritesAndChars(dataBuf, dataSize, dataRealOffs);
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2116 break;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
2117
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2118 case FFMT_BITMAP:
2097
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2119 if (optOutFilename == 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
2120 {
2097
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2121 dmErrorMsg("Output filename not set, required for bitmap formats.\n");
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2122 goto error;
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2123 }
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2124
2097
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2125 switch (optOutType)
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2126 {
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2127 case FFMT_IMAGE:
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2128 case FFMT_CHAR:
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2129 case FFMT_SPRITE:
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2130 res = dmC64ConvertBMP2Image(&outImage, inC64Image, inC64Fmt, &imageSpecC64);
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2131
2097
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2132 if (res != DMERR_OK || outImage == NULL)
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2133 {
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2134 dmErrorMsg("Error in bitmap to image conversion.\n");
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2135 goto error;
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2136 }
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2137
2097
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2138 switch (optOutType)
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2139 {
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2140 case FFMT_IMAGE:
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2141 res = dmWriteImage(optOutFilename, outImage, &optSpec,
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2142 &dmImageFormatList[optOutFormat], TRUE);
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2143 break;
1874
b386d339056f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1873
diff changeset
2144
2097
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2145 case FFMT_CHAR:
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2146 case FFMT_SPRITE:
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2147 res = dmWriteSpritesAndChars(optOutFilename, outImage,
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2148 optOutType, optInMulticolor);
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2149 break;
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2150 }
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2151 break;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2152
2097
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2153 case FFMT_BITMAP:
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2154 if ((res = dmConvertC64Bitmap(&outC64Image, inC64Image,
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2155 &dmC64ImageFormats[optOutFormat], inC64Fmt)) != DMERR_OK)
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2156 {
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2157 dmErrorMsg("Error in bitmap format conversion.\n");
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2158 goto error;
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2159 }
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2160 if (dmVerbosity >= 2)
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2161 {
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2162 dmPrint(0, "INPUT:\n"); dmC64ImageDump(stderr, inC64Image, inC64Fmt, " ");
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2163 dmPrint(0, "OUTPUT:\n"); dmC64ImageDump(stderr, outC64Image, &dmC64ImageFormats[optOutFormat], " ");
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2164 }
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2165 res = dmWriteBitmap(optOutFilename, outC64Image, &dmC64ImageFormats[optOutFormat]);
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2166 break;
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
2167
2097
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2168 default:
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2169 dmErrorMsg("Unsupported output format for bitmap conversion.\n");
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2170 break;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2171 }
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2172 break;
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2173
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2174 case FFMT_IMAGE:
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2175 {
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2176 const DMImageFormat *ifmt = &dmImageFormatList[optInFormat];
1609
c29adf5ce240 Convert libgfx file format routines to use DMResource instead of stdio FILE.
Matti Hamalainen <ccr@tnsp.org>
parents: 1604
diff changeset
2177 DMResource *fp;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2178
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2179 if (optOutFilename == NULL)
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2180 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
2181 dmErrorMsg("Output filename not set, required for image formats.\n");
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2182 goto error;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2183 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2184
1609
c29adf5ce240 Convert libgfx file format routines to use DMResource instead of stdio FILE.
Matti Hamalainen <ccr@tnsp.org>
parents: 1604
diff changeset
2185 if ((res = dmf_open_memio(NULL, optInFilename, dataBuf, dataSize, &fp)) != DMERR_OK)
c29adf5ce240 Convert libgfx file format routines to use DMResource instead of stdio FILE.
Matti Hamalainen <ccr@tnsp.org>
parents: 1604
diff changeset
2186 {
c29adf5ce240 Convert libgfx file format routines to use DMResource instead of stdio FILE.
Matti Hamalainen <ccr@tnsp.org>
parents: 1604
diff changeset
2187 dmErrorMsg("Could not create MemIO handle for input.\n");
c29adf5ce240 Convert libgfx file format routines to use DMResource instead of stdio FILE.
Matti Hamalainen <ccr@tnsp.org>
parents: 1604
diff changeset
2188 goto error;
c29adf5ce240 Convert libgfx file format routines to use DMResource instead of stdio FILE.
Matti Hamalainen <ccr@tnsp.org>
parents: 1604
diff changeset
2189 }
c29adf5ce240 Convert libgfx file format routines to use DMResource instead of stdio FILE.
Matti Hamalainen <ccr@tnsp.org>
parents: 1604
diff changeset
2190
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2191 // Read input
1886
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
2192 if (ifmt->read != NULL)
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
2193 res = ifmt->read(fp, &inImage);
441
2a4de5fe4003 Improve loading of input images to use the list provided by libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 435
diff changeset
2194 else
1874
b386d339056f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1873
diff changeset
2195 dmErrorMsg("Unsupported input image format for image conversion.\n");
409
b529b7e8ff83 Various improvements and cruft cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 407
diff changeset
2196
1609
c29adf5ce240 Convert libgfx file format routines to use DMResource instead of stdio FILE.
Matti Hamalainen <ccr@tnsp.org>
parents: 1604
diff changeset
2197 dmf_close(fp);
c29adf5ce240 Convert libgfx file format routines to use DMResource instead of stdio FILE.
Matti Hamalainen <ccr@tnsp.org>
parents: 1604
diff changeset
2198
1440
a602488830fc Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1439
diff changeset
2199 if (res != DMERR_OK || inImage == NULL)
1874
b386d339056f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1873
diff changeset
2200 goto error;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
2201
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2202 switch (optOutType)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2203 {
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2204 case FFMT_IMAGE:
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
2205 res = dmWriteImage(optOutFilename, inImage, &optSpec,
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2206 &dmImageFormatList[optOutFormat], TRUE);
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2207 break;
417
9ace8a5c58d9 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
2208
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
2209 case FFMT_CHAR:
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
2210 case FFMT_SPRITE:
1931
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2211 res = dmWriteSpritesAndChars(optOutFilename, inImage,
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2212 optOutType, optInMulticolor);
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2213 break;
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2214
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2215 case FFMT_BITMAP:
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2216 {
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2217 DMC64Image *tmpC64Image = NULL;
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2218 res = dmC64ConvertImage2BMP(&tmpC64Image, inImage,
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2219 &dmC64ImageFormats[optOutFormat], &imageSpecC64);
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2220
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2221 if (res != DMERR_OK || tmpC64Image == NULL)
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2222 {
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2223 dmC64ImageFree(tmpC64Image);
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2224 dmErrorMsg("Error in image to bitmap conversion: %s\n",
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2225 dmErrorStr(res));
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2226 goto error;
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2227 }
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2228
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2229 if ((res = dmConvertC64Bitmap(&outC64Image, tmpC64Image,
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2230 &dmC64ImageFormats[optOutFormat], &dmC64ImageFormats[optOutFormat])) != DMERR_OK)
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2231 {
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2232 dmC64ImageFree(tmpC64Image);
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2233 dmErrorMsg("Error in bitmap format conversion: %s\n",
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2234 dmErrorStr(res));
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2235 goto error;
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2236 }
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2237
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2238 res = dmWriteBitmap(optOutFilename, outC64Image, &dmC64ImageFormats[optOutFormat]);
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2239 dmC64ImageFree(tmpC64Image);
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2240 }
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
2241 break;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
2242
417
9ace8a5c58d9 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
2243 default:
1874
b386d339056f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1873
diff changeset
2244 dmErrorMsg("Unsupported output format for image conversion.\n");
417
9ace8a5c58d9 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
2245 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
2246 }
806
1e4d88fbce19 Error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 799
diff changeset
2247
1e4d88fbce19 Error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 799
diff changeset
2248 if (res != DMERR_OK)
1e4d88fbce19 Error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 799
diff changeset
2249 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
2250 dmErrorMsg("Error writing output (%s), probably unsupported output format for bitmap/image conversion.\n",
806
1e4d88fbce19 Error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 799
diff changeset
2251 dmErrorStr(res));
1e4d88fbce19 Error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 799
diff changeset
2252 }
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2253 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2254 break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2255 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2256
933
8fe48c08dbca Fix some memory leaks etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 931
diff changeset
2257 error:
1664
9181d9148654 Fix a minor memory leak and file descriptor leak.
Matti Hamalainen <ccr@tnsp.org>
parents: 1640
diff changeset
2258 dmFree(convFormatList);
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
2259 dmFree(dataBufOrig);
1440
a602488830fc Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1439
diff changeset
2260 dmC64ImageFree(inC64Image);
1490
665a0b917d22 Begin restructuring how C64 bitmaps are converted.
Matti Hamalainen <ccr@tnsp.org>
parents: 1481
diff changeset
2261 dmC64ImageFree(outC64Image);
2052
aa8df4f1b785 Fix minor memory leaks in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2030
diff changeset
2262 dmImageFree(inImage);
aa8df4f1b785 Fix minor memory leaks in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2030
diff changeset
2263 dmImageFree(outImage);
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2264
933
8fe48c08dbca Fix some memory leaks etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 931
diff changeset
2265 return 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
2266 }