annotate tools/gfxconv.c @ 2208:90ec1ec89c56

Revamp the palette handling in lib64gfx somewhat, add helper functions to lib64util for handling external palette file options and add support for specifying one of the "internal" palettes or external (.act) palette file to gfxconv and 64vw.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 14 Jun 2019 05:01:12 +0300
parents cbac4912992c
children f8bba7a82ec2
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"
2204
cbac4912992c Add new module "lib64util", and move some functions there from lib64gfx
Matti Hamalainen <ccr@tnsp.org>
parents: 2201
diff changeset
14 #include "lib64util.h"
1433
d8a83582f78f Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1432
diff changeset
15 #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
16
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
17
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
18 #define DM_MAX_COLORS 256
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
19
837
5333dd4a99e4 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 829
diff changeset
20 #define DM_ASC_NBITS 8
5333dd4a99e4 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 829
diff changeset
21 #define DM_ASC_NCOLORS 4
5333dd4a99e4 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 829
diff changeset
22 static const char dmASCIIPalette[DM_ASC_NCOLORS] = ".:X#";
5333dd4a99e4 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 829
diff changeset
23
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
24
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
25 enum
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
26 {
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
27 FFMT_AUTO = 0,
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
28
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
29 FFMT_ASCII,
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
30 FFMT_ANSI,
1869
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
31 FFMT_BITMAP,
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
32 FFMT_CHAR,
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
33 FFMT_SPRITE,
1869
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
34
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
35 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
36
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
37 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
38 };
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
39
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
40
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
41 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
42 {
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_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
44 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
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
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
47
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
48 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
49 {
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
50 "AUTO",
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
51 "ASCII text",
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
52 "ANSI text",
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
53 "C64 bitmap image",
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
54 "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
55 "C64 sprite data",
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
56 "Image",
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
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
59
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
60 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
61 {
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_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
63 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
64 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
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
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
67
2058
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
68 enum
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
69 {
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
70 SCALE_SET,
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
71 SCALE_RELATIVE,
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
72 SCALE_AUTO,
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
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
75
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
76 typedef struct
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
77 {
1340
1f8687c61891 Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1330
diff changeset
78 char *name; // Descriptive name of the format
1f8687c61891 Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1330
diff changeset
79 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
80 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
81 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
82 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
83 char *help;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
84 } DMConvFormat;
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
85
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
86
1616
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
87 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
88 {
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
89 { "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
90 { "ANSI colored text" , "ansi" , DM_FMT_WR , FFMT_ANSI , 0 , NULL },
2159
3b89ad9355f2 Show string 'bitmap' instead of NULL for c64 bitmap sources.
Matti Hamalainen <ccr@tnsp.org>
parents: 2158
diff changeset
91 { "C64 bitmap image" , "bitmap", DM_FMT_RDWR , FFMT_BITMAP , -1 , NULL },
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
92 { "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
93 { "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
94 };
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
95
1616
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
96 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
97
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
98
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
99 static DMConvFormat *convFormatList = NULL;
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
100 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
101
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
102
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
103 typedef struct
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
104 {
474
95d1facfdb77 Improve color matching, make it possible to ignore alpha values.
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
105 BOOL triplet, alpha;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
106 DMColor color;
871
fc272f5f2d15 Make value type of dmGetIntVal() unsigned.
Matti Hamalainen <ccr@tnsp.org>
parents: 867
diff changeset
107 unsigned int from, to;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
108 } DMMapValue;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
109
407
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
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
112 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
113 *optOutFilename = NULL;
837
5333dd4a99e4 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 829
diff changeset
114
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
115 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
116 optOutType = FFMT_AUTO,
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
117 optInFormat = -1,
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
118 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
119 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
120 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
121 optForcedInSubFormat = -1;
871
fc272f5f2d15 Make value type of dmGetIntVal() unsigned.
Matti Hamalainen <ccr@tnsp.org>
parents: 867
diff changeset
122 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
123 BOOL optInSkipNeg = FALSE;
838
f2ac9877263e Bitmap format specifying option changes.
Matti Hamalainen <ccr@tnsp.org>
parents: 837
diff changeset
124
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
125 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
126 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
127 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
128
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
129 BOOL optInMulticolor = FALSE,
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
130 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
131 optRemapColors = FALSE,
2065
451980580189 Refactor how paletted/indexed formats are handled in libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 2062
diff changeset
132 optRemapRemove = FALSE,
451980580189 Refactor how paletted/indexed formats are handled in libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 2062
diff changeset
133 optUsePalette = FALSE;
2058
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
134 int optNRemapTable = 0,
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
135 optScaleMode = SCALE_AUTO;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
136 DMMapValue optRemapTable[DM_MAX_COLORS];
2125
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
137 int optColorMap[D64_NCOLORS];
2123
47ddbedf5b56 Add initial support to 64vw and gfxconv for viewing and converting character
Matti Hamalainen <ccr@tnsp.org>
parents: 2120
diff changeset
138 char *optCharROMFilename = NULL;
2208
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
139 DMC64Palette *optC64Palette = NULL;
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
140 char *optC64PaletteFile = NULL;
2123
47ddbedf5b56 Add initial support to 64vw and gfxconv for viewing and converting character
Matti Hamalainen <ccr@tnsp.org>
parents: 2120
diff changeset
141
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
142
2156
e6ec7fad9ce2 Rename DMImageConvSpec to DMImageWriteSpec to better reflec the struct's purpose.
Matti Hamalainen <ccr@tnsp.org>
parents: 2155
diff changeset
143 DMImageWriteSpec optSpec =
435
e4a3f183e463 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 432
diff changeset
144 {
902
c6c480e8e1c8 Add separate X and Y scaling to gfxconv and libgfx outputters.
Matti Hamalainen <ccr@tnsp.org>
parents: 897
diff changeset
145 .scaleX = 1,
c6c480e8e1c8 Add separate X and Y scaling to gfxconv and libgfx outputters.
Matti Hamalainen <ccr@tnsp.org>
parents: 897
diff changeset
146 .scaleY = 1,
2099
dac89484f143 Fix nplanes and bpp in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2097
diff changeset
147 .nplanes = 0,
1288
6c8b19d1d196 More work on libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 1280
diff changeset
148 .bpp = 8,
1291
2c4acbc3e7bf More work on libgfx etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 1290
diff changeset
149 .planar = FALSE,
2157
9a9493809b3a Rename DM_COLFMT_* constants to DM_PIXFMT_* and the 'format' field of DMImage
Matti Hamalainen <ccr@tnsp.org>
parents: 2156
diff changeset
150 .pixfmt = 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
151 .compression = FCMP_BEST,
435
e4a3f183e463 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 432
diff changeset
152 };
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
153
2208
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
154 DMC64ImageConvSpec optC64Spec;
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
155
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
156
860
daebbf28953d The argument handling API in dmargs* was synced with th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 854
diff changeset
157 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
158 {
983
98e749d990b0 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 975
diff changeset
159 { 0, '?', "help", "Show this help", OPT_NONE },
98e749d990b0 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 975
diff changeset
160 { 15, 'v', "verbose", "Increase verbosity", OPT_NONE },
98e749d990b0 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 975
diff changeset
161 { 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
162 { 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
163 { 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
164 { 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
165 { 17, 'F', "formats", "List supported input/output formats", OPT_NONE },
983
98e749d990b0 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 975
diff changeset
166 { 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
167 { 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
168 { 7, 'n', "numitems", "How many 'items' to output (default: all)", OPT_ARGREQ },
98e749d990b0 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 975
diff changeset
169 { 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
170 { 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
171 { 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
172 { 13, 'N', "nplanes", "# of bitplanes (some output formats)", OPT_ARGREQ },
2144
0bb1d0ad178f Fix bpp option description.
Matti Hamalainen <ccr@tnsp.org>
parents: 2143
diff changeset
173 { 18, 'B', "bpp", "Bits per plane (some output formats)", OPT_ARGREQ },
1293
1dce9e5f4a2f Oops, two options were overlapping, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 1291
diff changeset
174 { 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
175 { 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
176 { 16, 'R', "remap", "Remap output image colors (-R <(#RRGGBB|index):index>[,<..>][+remove] | -R @map.txt[+remove])", OPT_ARGREQ },
2137
903effcd616b Use only long option for char ROM.
Matti Hamalainen <ccr@tnsp.org>
parents: 2126
diff changeset
177 { 21, 0, "char-rom", "Set character ROM file to be used.", OPT_ARGREQ },
2208
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
178 { 22, 'p', "palette" , "Set C64 palette to be used (see list with -p help).", 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
179 };
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
180
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
181 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
182
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
183
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
184 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
185 {
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
186 printf(
1545
3b613fcbf3ff Improve how format read/write capabilities are marked and shown.
Matti Hamalainen <ccr@tnsp.org>
parents: 1543
diff changeset
187 "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
188 " frmt | RW | Description\n"
3b613fcbf3ff Improve how format read/write capabilities are marked and shown.
Matti Hamalainen <ccr@tnsp.org>
parents: 1543
diff changeset
189 "------+----+-------------------------------------------------------\n"
432
b583a682f12d Improve listing of input/output formats in --help.
Matti Hamalainen <ccr@tnsp.org>
parents: 431
diff changeset
190 );
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
191
1532
74febc66d90d Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 1526
diff changeset
192 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
193 {
1545
3b613fcbf3ff Improve how format read/write capabilities are marked and shown.
Matti Hamalainen <ccr@tnsp.org>
parents: 1543
diff changeset
194 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
195 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
196 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
197 (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
198 (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
199 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
200 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
201 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
202
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
203 printf(
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
204 "\n"
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
205 "(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
206 "\n"
1604
d91d2a67eda5 Typofix.
Matti Hamalainen <ccr@tnsp.org>
parents: 1591
diff changeset
207 "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
208 " 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
209 "------+----+-----------------+-------------------------------------\n"
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
210 );
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
211
1532
74febc66d90d Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 1526
diff changeset
212 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
213 {
2200
dcd26cdc395e Replace dmC64InitializeFormats() with dmLib64GFXInit() and dmLib64GFXClose().
Matti Hamalainen <ccr@tnsp.org>
parents: 2198
diff changeset
214 const DMC64ImageFormat *fmt = dmC64ImageFormatsSorted[i];
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 516
diff changeset
215 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
216 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
217 fmt->fext,
1545
3b613fcbf3ff Improve how format read/write capabilities are marked and shown.
Matti Hamalainen <ccr@tnsp.org>
parents: 1543
diff changeset
218 (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
219 (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
220 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
221 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
222 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
223 }
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
224 printf("%d formats supported.\n", ndmC64ImageFormats);
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
225 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
226
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
227
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
228 void argShowHelp()
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
229 {
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
230 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
231 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
232
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
233 printf(
837
5333dd4a99e4 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 829
diff changeset
234 "\n"
2058
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
235 "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
236 "-------------------------\n"
2062
f11fad2dc3b5 Improve scale factor option '-S' help.
Matti Hamalainen <ccr@tnsp.org>
parents: 2059
diff changeset
237 "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
238 "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
239 "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
240 "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
241 "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
242 "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
243 "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
244 "\n"
1914
87245043a7ae Clarify gfxconv help.
Matti Hamalainen <ccr@tnsp.org>
parents: 1911
diff changeset
245 "Palette remapping (-R)\n"
87245043a7ae Clarify gfxconv help.
Matti Hamalainen <ccr@tnsp.org>
parents: 1911
diff changeset
246 "----------------------\n"
87245043a7ae Clarify gfxconv help.
Matti Hamalainen <ccr@tnsp.org>
parents: 1911
diff changeset
247 "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
248 "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
249 "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
250 "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
251 "-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
252 "\n"
1330
62ef5cc2b475 Clarify help.
Matti Hamalainen <ccr@tnsp.org>
parents: 1329
diff changeset
253 "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
254 "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
255 "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
256 "whitespace separating items will be ignored as well.\n"
818
a6452b575c63 Add some online documentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 814
diff changeset
257 "\n"
821
8ec16cca0eef Change -R remap option syntax slightly and document it.
Matti Hamalainen <ccr@tnsp.org>
parents: 820
diff changeset
258 "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
259 "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
260 "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
261 "+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
262 "\n"
2029
5ecd51009072 Rename '-c' colorindex map short option to '-m'.
Matti Hamalainen <ccr@tnsp.org>
parents: 2022
diff changeset
263 "Color index mapping (-m)\n"
5ecd51009072 Rename '-c' colorindex map short option to '-m'.
Matti Hamalainen <ccr@tnsp.org>
parents: 2022
diff changeset
264 "------------------------\n"
1914
87245043a7ae Clarify gfxconv help.
Matti Hamalainen <ccr@tnsp.org>
parents: 1911
diff changeset
265 "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
266 "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
267 "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
268 "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
269 "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
270 "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
271 "special transparency color index.\n"
837
5333dd4a99e4 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 829
diff changeset
272 "\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
273 );
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
274 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
275
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
276
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
277 /* 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
278 * 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
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 *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
281 {
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 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
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 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
285 (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
286 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
287
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 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
289 {
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 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
291 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
292 *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
293 }
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
294
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
295 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
296
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
297 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
298
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
299 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
300 }
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
301
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
302
1866
734234e7ca95 Add a comment about the imperfection of ANSI color output.
Matti Hamalainen <ccr@tnsp.org>
parents: 1865
diff changeset
303 //
734234e7ca95 Add a comment about the imperfection of ANSI color output.
Matti Hamalainen <ccr@tnsp.org>
parents: 1865
diff changeset
304 // 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
305 // 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
306 // 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
307 //
1865
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
308 const char *dmC64GetANSIFromC64Color(const int col)
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
309 {
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
310 switch (col)
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
311 {
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
312 case 0: return "0;30"; // Black
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
313 case 1: return "0;1;37"; // White
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
314 case 2: return "0;31"; // Red
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
315 case 3: return "0;36";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
316 case 4: return "0;35";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
317 case 5: return "0;32";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
318 case 6: return "0;34";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
319 case 7: return "0;1;33";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
320 case 8: return "0;33";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
321 case 9: return "0;31";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
322 case 10: return "0;1;31";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
323 case 11: return "0;1;30";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
324 case 12: return "0;1;30";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
325 case 13: return "0;1;32";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
326 case 14: return "0;1;34";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
327 case 15: return "0;37";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
328
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
329 default: return "0";
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
330 }
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
331 }
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
332
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
333
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
334 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
335 {
1546
228e71d66089 Constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 1545
diff changeset
336 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
337 {
1546
228e71d66089 Constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 1545
diff changeset
338 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
339 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
340 fmt->format == format)
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 memcpy(pfmt, fmt, sizeof(DMConvFormat));
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
343 return TRUE;
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
344 }
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
345 }
1869
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
346
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
347 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
348 {
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
349 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
350 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
351 {
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
352 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
353 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
354 memcpy(pfmt, fmt, sizeof(DMConvFormat));
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
355 pfmt->fext = cfmt->name;
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
356 return TRUE;
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
357 }
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
358 }
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
359
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
360 return FALSE;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
361 }
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
362
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
363
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
364 BOOL dmGetC64FormatByExt(const char *fext, int *type, int *format)
819
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
365 {
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
366 if (fext == NULL)
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
367 return FALSE;
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
368
1569
7e6af32c8032 Minor cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 1550
diff changeset
369 for (int i = 0; i < ndmC64ImageFormats; i++)
819
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 const DMC64ImageFormat *fmt = &dmC64ImageFormats[i];
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
372 if (fmt->fext != NULL &&
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
373 strcasecmp(fext, fmt->fext) == 0)
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 *type = FFMT_BITMAP;
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
376 *format = i;
819
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
377 return TRUE;
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
378 }
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
379 }
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
380
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
381 return FALSE;
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
382 }
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
383
0177d4a66d48 Split dmGetFormatByExt() to dmGetC64FormatByExt().
Matti Hamalainen <ccr@tnsp.org>
parents: 818
diff changeset
384
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
385 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
386 {
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
387 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
388 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
389
1569
7e6af32c8032 Minor cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 1550
diff changeset
390 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
391 {
1546
228e71d66089 Constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 1545
diff changeset
392 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
393 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
394 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
395 {
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
396 *type = fmt->type;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
397 *format = fmt->format;
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
398 return TRUE;
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
399 }
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
400 }
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
401
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
402 return FALSE;
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
403 }
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
404
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
405
871
fc272f5f2d15 Make value type of dmGetIntVal() unsigned.
Matti Hamalainen <ccr@tnsp.org>
parents: 867
diff changeset
406 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
407 {
481
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
408 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
409
481
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
410 if (opt == NULL)
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
411 goto error;
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
412
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
413 if ((end = split = strchr(opt, ':')) == NULL)
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
414 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
415 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
416 goto error;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
417 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
418
481
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
419 // Trim whitespace
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
420 *end = 0;
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
421 for (end--; end > opt && *end && isspace(*end); end--)
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
422 *end = 0;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
423
481
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
424 // 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
425 if (*opt == '#' || *opt == '%')
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
426 {
867
56e12109b936 Portability warning fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 860
diff changeset
427 unsigned int colR, colG, colB, colA;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
428
474
95d1facfdb77 Improve color matching, make it possible to ignore alpha values.
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
429 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
430 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
431 {
474
95d1facfdb77 Improve color matching, make it possible to ignore alpha values.
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
432 value->alpha = TRUE;
95d1facfdb77 Improve color matching, make it possible to ignore alpha values.
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
433 value->color.a = colA;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
434 }
474
95d1facfdb77 Improve color matching, make it possible to ignore alpha values.
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
435 else
95d1facfdb77 Improve color matching, make it possible to ignore alpha values.
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
436 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
437 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
438 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
439 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
440 goto error;
474
95d1facfdb77 Improve color matching, make it possible to ignore alpha values.
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
441 }
95d1facfdb77 Improve color matching, make it possible to ignore alpha values.
Matti Hamalainen <ccr@tnsp.org>
parents: 473
diff changeset
442
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
443 value->color.r = colR;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
444 value->color.g = colG;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
445 value->color.b = colB;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
446 value->triplet = TRUE;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
447 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
448 else
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
449 {
2004
161e731eb152 Improve dmGetIntVal() to accept an optional negative value boolean flag
Matti Hamalainen <ccr@tnsp.org>
parents: 1947
diff changeset
450 if (!dmGetIntVal(opt, &value->from, NULL))
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
451 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
452 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
453 goto error;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
454 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
455 value->triplet = FALSE;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
456 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
457
481
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
458 // Trim whitespace
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
459 split++;
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
460 while (*split && isspace(*split)) split++;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
461
481
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
462 // Parse destination value
2004
161e731eb152 Improve dmGetIntVal() to accept an optional negative value boolean flag
Matti Hamalainen <ccr@tnsp.org>
parents: 1947
diff changeset
463 if (!dmGetIntVal(split, &value->to, NULL))
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
464 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
465 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
466 goto error;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
467 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
468
871
fc272f5f2d15 Make value type of dmGetIntVal() unsigned.
Matti Hamalainen <ccr@tnsp.org>
parents: 867
diff changeset
469 if (!value->triplet && value->from > 255)
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
470 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
471 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
472 goto error;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
473 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
474
871
fc272f5f2d15 Make value type of dmGetIntVal() unsigned.
Matti Hamalainen <ccr@tnsp.org>
parents: 867
diff changeset
475 if (value->to > nmax)
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
476 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
477 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
478 goto error;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
479 }
481
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
480
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
481 dmFree(opt);
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
482 return TRUE;
481
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
483
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
484 error:
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
485 dmFree(opt);
c3f0fca5b596 Improve remapping option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 480
diff changeset
486 return FALSE;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
487 }
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
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
490 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
491 {
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
492 // Trim whitespace
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
493 if (end != NULL)
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
494 {
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
495 *end = 0;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
496 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
497 *end = 0;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
498 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
499 while (*opt && isspace(*opt)) opt++;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
500
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
501 // Parse item based on mode
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
502 if (requireIndex)
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
503 {
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
504 DMMapValue *value = (DMMapValue *) pvalue;
475
c0dedfef3edf Fix option parsing of mappings.
Matti Hamalainen <ccr@tnsp.org>
parents: 474
diff changeset
505 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
506 return FALSE;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
507 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
508 else
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
509 {
871
fc272f5f2d15 Make value type of dmGetIntVal() unsigned.
Matti Hamalainen <ccr@tnsp.org>
parents: 867
diff changeset
510 unsigned int *value = (unsigned int *) pvalue;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
511 char *split = strchr(opt, ':');
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
512 if (split != NULL)
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
513 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
514 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
515 return FALSE;
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
2004
161e731eb152 Improve dmGetIntVal() to accept an optional negative value boolean flag
Matti Hamalainen <ccr@tnsp.org>
parents: 1947
diff changeset
518 if (!dmGetIntVal(opt, &value[index], NULL))
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
519 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
520 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
521 return FALSE;
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 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
524
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
525 return TRUE;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
526 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
527
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
528
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
529 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
530 {
853
b2140d41785a Cleanup some parsing logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 838
diff changeset
531 char *start = opt;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
532
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
533 *nvalues = 0;
853
b2140d41785a Cleanup some parsing logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 838
diff changeset
534 while (*start && *nvalues < nmax)
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
535 {
853
b2140d41785a Cleanup some parsing logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 838
diff changeset
536 char *end = strchr(start, ',');
b2140d41785a Cleanup some parsing logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 838
diff changeset
537
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
538 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
539 return FALSE;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
540
853
b2140d41785a Cleanup some parsing logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 838
diff changeset
541 (*nvalues)++;
b2140d41785a Cleanup some parsing logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 838
diff changeset
542
b2140d41785a Cleanup some parsing logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 838
diff changeset
543 if (!end)
b2140d41785a Cleanup some parsing logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 838
diff changeset
544 break;
b2140d41785a Cleanup some parsing logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 838
diff changeset
545
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
546 start = end + 1;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
547 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
548
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
549 return TRUE;
473
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
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
552
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
553 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
554 {
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
555 FILE *fp;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
556 char line[512];
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
557 int res = DMERR_OK;
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 if ((fp = fopen(filename, "r")) == NULL)
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
560 {
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
561 res = dmGetErrno();
972
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
562 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
563 res, dmErrorStr(res));
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
564 return res;
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
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
567 while (fgets(line, sizeof(line), fp))
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
568 {
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
569 char *start = line;
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
570 line[sizeof(line) - 1] = 0;
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
571
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
572 while (*start && isspace(*start)) start++;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
573
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
574 if (*start != 0 && *start != ';')
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
575 {
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
576 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
577 goto error;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
578 else
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 (*nvalue)++;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
581 if (*nvalue >= nmax)
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
582 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
583 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
584 filename, nmax);
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
585 goto error;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
586 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
587 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
588 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
589 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
590
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
591 error:
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
592 fclose(fp);
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
593 return res;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
594 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
595
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
596
1867
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
597 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
598 {
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
599 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
600 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
601 *flags++ = 0;
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 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
604 !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
605 {
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
606 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
607 msg1, optArg);
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
608 return FALSE;
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
609 }
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
610
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
611 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
612 {
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
613 switch (*format)
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
614 {
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
615 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
616 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
617 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
618 optInMulticolor = TRUE;
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
619 else
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
620 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
621 optInMulticolor = FALSE;
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
622 else
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
623 {
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
624 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
625 msg1, flags);
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
626 return FALSE;
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
627 }
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
628 break;
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 default:
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
631 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
632 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
633 return FALSE;
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
634 }
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
635 }
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
636
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
637 return TRUE;
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
638 }
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
639
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
640
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
641 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
642 {
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
643 char *ptr = *arg, *end, *start;
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
644
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
645 // Skip any whitespace at start
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
646 while (*ptr != 0 && isspace(*ptr))
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
647 ptr++;
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
648
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
649 start = ptr;
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
650
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
651 // Find next not-xdigit/separator
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
652 while (*ptr != 0 &&
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
653 (isxdigit(*ptr) || *ptr == 'x' || *ptr == '$') &&
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
654 *ptr != sep)
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
655 ptr++;
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
656
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
657 end = ptr;
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
658
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
659 // Skip whitespace again
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
660 while (*ptr != 0 && isspace(*ptr))
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
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
663 // Return last character in "last"
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
664 *last = *ptr;
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
665
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
666 // Set end to NUL
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
667 *end = 0;
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
668
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
669 // And if last character is not NUL, move ptr
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
670 if (*last != 0)
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
671 ptr++;
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
672
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
673 *arg = ptr;
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
674
2004
161e731eb152 Improve dmGetIntVal() to accept an optional negative value boolean flag
Matti Hamalainen <ccr@tnsp.org>
parents: 1947
diff changeset
675 return dmGetIntVal(start, value, NULL);
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
676 }
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
677
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
678
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
679 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
680 {
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
681 unsigned int tmpUInt;
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
682 char *tmpStr;
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
683
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
684 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
685 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
686 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
687 argShowHelp();
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
688 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
689 break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
690
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
691 case 17:
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
692 argShowFormats();
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
693 exit(0);
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
694 break;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
695
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
696 case 15:
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
697 dmVerbosity++;
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
698 break;
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
699
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
700 case 1:
1869
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
701 {
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
702 DMConvFormat fmt;
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
703
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
704 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
705 return FALSE;
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
706
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
707 dmGetConvFormat(optInType, optForcedInSubFormat, &fmt);
1869
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
708 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
709 {
1870
1e8f60ce21d1 Add check for writability in output format option -f
Matti Hamalainen <ccr@tnsp.org>
parents: 1869
diff changeset
710 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
711 fmt.name);
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
712 return FALSE;
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
713 }
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
714 }
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 break;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
716
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
717 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
718 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
719 break;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
720
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
721 case 4:
2005
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
722 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
723 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
724 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
725 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
726 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
727 break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
728
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
729 case 5:
1870
1e8f60ce21d1 Add check for writability in output format option -f
Matti Hamalainen <ccr@tnsp.org>
parents: 1869
diff changeset
730 {
1e8f60ce21d1 Add check for writability in output format option -f
Matti Hamalainen <ccr@tnsp.org>
parents: 1869
diff changeset
731 DMConvFormat fmt;
1e8f60ce21d1 Add check for writability in output format option -f
Matti Hamalainen <ccr@tnsp.org>
parents: 1869
diff changeset
732
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
733 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
734 return FALSE;
1e8f60ce21d1 Add check for writability in output format option -f
Matti Hamalainen <ccr@tnsp.org>
parents: 1869
diff changeset
735
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
736 dmGetConvFormat(optOutType, optOutFormat, &fmt);
1870
1e8f60ce21d1 Add check for writability in output format option -f
Matti Hamalainen <ccr@tnsp.org>
parents: 1869
diff changeset
737 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
738 {
1e8f60ce21d1 Add check for writability in output format option -f
Matti Hamalainen <ccr@tnsp.org>
parents: 1869
diff changeset
739 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
740 fmt.name);
1e8f60ce21d1 Add check for writability in output format option -f
Matti Hamalainen <ccr@tnsp.org>
parents: 1869
diff changeset
741 return FALSE;
1e8f60ce21d1 Add check for writability in output format option -f
Matti Hamalainen <ccr@tnsp.org>
parents: 1869
diff changeset
742 }
1e8f60ce21d1 Add check for writability in output format option -f
Matti Hamalainen <ccr@tnsp.org>
parents: 1869
diff changeset
743 }
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
744 break;
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 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
747 {
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
748 int index, ncolors;
1865
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
749 if (!dmParseMapOptionString(optArg, optColorMap,
2125
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
750 &ncolors, D64_NCOLORS, FALSE, "color index option"))
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
751 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
752
2030
2b961e6b35e5 Update documentation etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 2029
diff changeset
753 dmMsg(1, "Set color index mapping: ");
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
754 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
755 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
756 dmPrint(1, "[%d:%d]%s",
1865
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
757 index, optColorMap[index],
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
758 (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
759 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
760 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
761 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
762 break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
763
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
764 case 7:
2004
161e731eb152 Improve dmGetIntVal() to accept an optional negative value boolean flag
Matti Hamalainen <ccr@tnsp.org>
parents: 1947
diff changeset
765 if (!dmGetIntVal(optArg, &tmpUInt, NULL) ||
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
766 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
767 {
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
768 dmErrorMsg("Invalid count value argument '%s' [1 .. MAXINT]\n",
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
769 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
770 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
771 }
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
772 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
773 break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
774
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
775 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
776 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
777 break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
778
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
779 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
780 {
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
781 BOOL error = FALSE;
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
782 unsigned int tmpUInt2;
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
783 char *tmpStr = dm_strdup(optArg),
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
784 *tmpOpt = tmpStr, sep;
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
785
2058
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
786 // 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
787 if (*tmpOpt == '*')
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
788 {
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
789 tmpOpt++;
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
790 optScaleMode = SCALE_RELATIVE;
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
791 }
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
792 else
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
793 optScaleMode = SCALE_SET;
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
794
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
795 // Parse the values
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
796 if (dmParseIntValWithSep(&tmpOpt, &tmpUInt, &sep, ':'))
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
797 {
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
798 if (sep == ':' &&
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
799 dmParseIntValWithSep(&tmpOpt, &tmpUInt2, &sep, '*'))
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
800 {
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
801 optSpec.scaleX = tmpUInt;
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
802 optSpec.scaleY = tmpUInt2;
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
803
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
804 if (sep == '*' &&
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
805 dmParseIntValWithSep(&tmpOpt, &tmpUInt, &sep, 0))
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
806 {
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
807 optSpec.scaleX *= tmpUInt;
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
808 optSpec.scaleY *= tmpUInt;
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
809 }
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
810 error = (sep != 0);
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
811 }
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
812 else
1890
ee95059b4c18 Oops, fix a blunder left in the refactored scale option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1889
diff changeset
813 if (sep == 0)
ee95059b4c18 Oops, fix a blunder left in the refactored scale option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1889
diff changeset
814 {
ee95059b4c18 Oops, fix a blunder left in the refactored scale option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1889
diff changeset
815 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
816 }
ee95059b4c18 Oops, fix a blunder left in the refactored scale option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1889
diff changeset
817 else
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
818 error = TRUE;
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
819 }
902
c6c480e8e1c8 Add separate X and Y scaling to gfxconv and libgfx outputters.
Matti Hamalainen <ccr@tnsp.org>
parents: 897
diff changeset
820 else
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
821 error = TRUE;
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 dmFree(tmpStr);
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
824
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
825 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
826 {
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
827 dmErrorMsg(
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
828 "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
829 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
830 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
831 }
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
832
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
833 if (optSpec.scaleX < 1 || optSpec.scaleX > 50)
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
834 {
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
835 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
836 return FALSE;
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
837 }
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
838 if (optSpec.scaleY < 1 || optSpec.scaleY > 50)
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
839 {
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
840 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
841 return FALSE;
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
842 }
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
843 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
844 break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
845
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
846 case 11:
2004
161e731eb152 Improve dmGetIntVal() to accept an optional negative value boolean flag
Matti Hamalainen <ccr@tnsp.org>
parents: 1947
diff changeset
847 if (!dmGetIntVal(optArg, &tmpUInt, NULL) ||
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
848 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
849 {
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
850 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
851 optArg);
902
c6c480e8e1c8 Add separate X and Y scaling to gfxconv and libgfx outputters.
Matti Hamalainen <ccr@tnsp.org>
parents: 897
diff changeset
852 return FALSE;
c6c480e8e1c8 Add separate X and Y scaling to gfxconv and libgfx outputters.
Matti Hamalainen <ccr@tnsp.org>
parents: 897
diff changeset
853 }
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
854 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
855 break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
856
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
857 case 12:
2065
451980580189 Refactor how paletted/indexed formats are handled in libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 2062
diff changeset
858 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
859 break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
860
415
d94f4bcb4be3 IFFMaster RAW output works now, at least to some extent.
Matti Hamalainen <ccr@tnsp.org>
parents: 409
diff changeset
861 case 13:
2004
161e731eb152 Improve dmGetIntVal() to accept an optional negative value boolean flag
Matti Hamalainen <ccr@tnsp.org>
parents: 1947
diff changeset
862 if (!dmGetIntVal(optArg, &tmpUInt, NULL) ||
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
863 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
864 {
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
865 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
866 optArg);
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
867 return FALSE;
1288
6c8b19d1d196 More work on libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 1280
diff changeset
868 }
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
869 optSpec.nplanes = tmpUInt;
1288
6c8b19d1d196 More work on libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 1280
diff changeset
870 break;
6c8b19d1d196 More work on libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 1280
diff changeset
871
6c8b19d1d196 More work on libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 1280
diff changeset
872 case 18:
2004
161e731eb152 Improve dmGetIntVal() to accept an optional negative value boolean flag
Matti Hamalainen <ccr@tnsp.org>
parents: 1947
diff changeset
873 if (!dmGetIntVal(optArg, &tmpUInt, NULL) ||
1889
ac9784afae27 Improve option argument parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1888
diff changeset
874 tmpUInt < 1 || tmpUInt > 32)
1288
6c8b19d1d196 More work on libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 1280
diff changeset
875 {
2144
0bb1d0ad178f Fix bpp option description.
Matti Hamalainen <ccr@tnsp.org>
parents: 2143
diff changeset
876 dmErrorMsg("Invalid number of bits per plane value '%s' [1 .. 32]\n",
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
877 optArg);
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
878 return FALSE;
415
d94f4bcb4be3 IFFMaster RAW output works now, at least to some extent.
Matti Hamalainen <ccr@tnsp.org>
parents: 409
diff changeset
879 }
2099
dac89484f143 Fix nplanes and bpp in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2097
diff changeset
880 optSpec.bpp = tmpUInt;
415
d94f4bcb4be3 IFFMaster RAW output works now, at least to some extent.
Matti Hamalainen <ccr@tnsp.org>
parents: 409
diff changeset
881 break;
d94f4bcb4be3 IFFMaster RAW output works now, at least to some extent.
Matti Hamalainen <ccr@tnsp.org>
parents: 409
diff changeset
882
d94f4bcb4be3 IFFMaster RAW output works now, at least to some extent.
Matti Hamalainen <ccr@tnsp.org>
parents: 409
diff changeset
883 case 14:
1291
2c4acbc3e7bf More work on libgfx etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 1290
diff changeset
884 optSpec.planar = TRUE;
415
d94f4bcb4be3 IFFMaster RAW output works now, at least to some extent.
Matti Hamalainen <ccr@tnsp.org>
parents: 409
diff changeset
885 break;
d94f4bcb4be3 IFFMaster RAW output works now, at least to some extent.
Matti Hamalainen <ccr@tnsp.org>
parents: 409
diff changeset
886
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
887 case 16:
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
888 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
889 {
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
890 optRemapRemove = TRUE;
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
891 *tmpStr = 0;
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
892 }
821
8ec16cca0eef Change -R remap option syntax slightly and document it.
Matti Hamalainen <ccr@tnsp.org>
parents: 820
diff changeset
893
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
894 if (optArg[0] == '@')
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
895 {
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
896 if (optArg[1] != 0)
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
897 {
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
898 int res;
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
899 if ((res = dmParseColorRemapFile(optArg + 1,
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
900 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
901 return FALSE;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
902 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
903 else
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
904 {
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
905 dmErrorMsg("No remap filename given.\n");
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
906 return FALSE;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
907 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
908 }
1888
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
909 else
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
910 {
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
911 if (!dmParseMapOptionString(optArg, optRemapTable,
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
912 &optNRemapTable, DM_MAX_COLORS, TRUE, "color remap option"))
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
913 return FALSE;
b97f273a9d54 Improve some gfxconv commanline option parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1886
diff changeset
914 }
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
915
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
916 optRemapColors = TRUE;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
917 break;
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
918
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
919 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
920 {
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 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
922 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
923 {
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 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
925 }
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 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
927 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
928 {
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 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
930 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
931 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
932 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
933 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
934 }
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 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
936 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
937 {
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 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
939 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
940 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
941 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
942 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
943 }
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
944 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
945 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
946 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
947 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
948 }
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
949 }
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
950 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
951
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
952 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
953 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
954 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
955 {
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
956 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
957 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
958 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
959 }
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
960 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
961 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
962
2123
47ddbedf5b56 Add initial support to 64vw and gfxconv for viewing and converting character
Matti Hamalainen <ccr@tnsp.org>
parents: 2120
diff changeset
963 case 21:
47ddbedf5b56 Add initial support to 64vw and gfxconv for viewing and converting character
Matti Hamalainen <ccr@tnsp.org>
parents: 2120
diff changeset
964 optCharROMFilename = optArg;
47ddbedf5b56 Add initial support to 64vw and gfxconv for viewing and converting character
Matti Hamalainen <ccr@tnsp.org>
parents: 2120
diff changeset
965 break;
47ddbedf5b56 Add initial support to 64vw and gfxconv for viewing and converting character
Matti Hamalainen <ccr@tnsp.org>
parents: 2120
diff changeset
966
2208
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
967 case 22:
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
968 return argHandleC64PaletteOption(optArg, &optC64Palette, &optC64PaletteFile);
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
969
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
970 default:
2183
e3f0eaf23f4f Change the error message for unimplemented option argument.
Matti Hamalainen <ccr@tnsp.org>
parents: 2182
diff changeset
971 dmErrorMsg("Unimplemented option argument '%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
972 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
973 }
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 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
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
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 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
980 {
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 (!optInFilename)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
982 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
983 else
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
984 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
985 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
986 currArg);
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
987 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
988 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
989
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
990 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
991 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
992
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
993
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
994 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
995 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
996 int i;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
997
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
998 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
999 {
837
5333dd4a99e4 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 829
diff changeset
1000 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
1001 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1002 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
1003 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
1004 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
1005 {
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
1006 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
1007 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
1008 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
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 else
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1018 {
837
5333dd4a99e4 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 829
diff changeset
1019 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
1020 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1021 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
1022 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
1023 {
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
1024 case FFMT_ASCII:
1865
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
1025 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
1026 break;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
1027 case FFMT_ANSI:
1865
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
1028 fprintf(out, "\x1b[%sm#\x1b[0m",
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
1029 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
1030 break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1031 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1032 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1033 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1034 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1035
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 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
1038 {
2125
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1039 for (size_t yc = 0; yc < D64_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
1040 {
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1041 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
1042 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
1043 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
1044 }
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
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1048 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
1049 {
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1050 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
1051
2125
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1052 for (bufOffs = yc = 0; yc < D64_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
1053 {
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1054 fprintf(outFile, "%04" DM_PRIx_SIZE_T " ", offs + bufOffs);
2125
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1055 for (xc = 0; xc < D64_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
1056 {
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1057 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
1058 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
1059 bufOffs++;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1060 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1061 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
1062 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1063 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1064
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1065
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
1066 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
1067 {
2143
693c3e73eb34 Fix palette remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 2142
diff changeset
1068 DMPalette *tmpPal = NULL;
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1069 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
1070 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
1071 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
1072 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
1073 DMImage *dst;
482
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1074
2143
693c3e73eb34 Fix palette remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 2142
diff changeset
1075 if ((res = dmPaletteAlloc(&tmpPal, src->pal->ncolors, -1)) != DMERR_OK)
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1076 {
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1077 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
1078 goto error;
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1079 }
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1080
2157
9a9493809b3a Rename DM_COLFMT_* constants to DM_PIXFMT_* and the 'format' field of DMImage
Matti Hamalainen <ccr@tnsp.org>
parents: 2156
diff changeset
1081 if ((dst = *pdst = dmImageAlloc(src->width, src->height, src->pixfmt, src->bpp)) == 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
1082 {
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1083 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
1084 "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
1085 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
1086 }
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
1087
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1088
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1089 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
1090 {
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1091 res = dmError(DMERR_MALLOC,
972
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
1092 "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
1093 goto error;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1094 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1095
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1096 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
1097 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
1098
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1099 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
1100 {
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 mapping[index] = -1;
482
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1102 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
1103 }
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1104
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
1105 // 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
1106 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
1107 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
1108 {
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
1109 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
1110 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
1111 {
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1112 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
1113 if (col < src->pal->ncolors && !used[col])
482
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1114 {
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
1115 used[col] = TRUE;
482
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1116 ncolors++;
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1117 }
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
1118 }
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1119 }
482
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1120 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
1121
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1122 // Match and mark mapped colors
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1123 for (index = 0; index < optNRemapTable; index++)
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 DMMapValue *map = &optRemapTable[index];
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1126 if (map->triplet)
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1127 {
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1128 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
1129 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
1130 {
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1131 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
1132 {
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1133 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
1134 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
1135 n,
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1136 map->to);
482
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1137
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1138 mapping[n] = map->to;
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1139 mapped[map->to] = TRUE;
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1140 found = 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 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
1143
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1144 if (!found)
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1145 {
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1146 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
1147 index,
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1148 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
1149 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1150 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1151 else
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1152 {
482
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1153 dmMsg(3, "Map index: %d -> %d\n",
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1154 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
1155
482
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1156 mapping[map->from] = map->to;
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1157 mapped[map->to] = TRUE;
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
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1161 // 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
1162 if (optRemapRemove)
1807
d53bdee5ffa5 Remove slight bit of code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 1801
diff changeset
1163 dmMsg(2, "Removing unused colors.\n");
d53bdee5ffa5 Remove slight bit of code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 1801
diff changeset
1164
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1165 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
1166 if (mapping[index] < 0 &&
d53bdee5ffa5 Remove slight bit of code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 1801
diff changeset
1167 (!optRemapRemove || (optRemapRemove && used[index])))
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1168 {
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1169 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
1170 if (!mapped[n])
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1171 {
1807
d53bdee5ffa5 Remove slight bit of code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 1801
diff changeset
1172 mapping[index] = n;
d53bdee5ffa5 Remove slight bit of code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 1801
diff changeset
1173 mapped[n] = TRUE;
d53bdee5ffa5 Remove slight bit of code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 1801
diff changeset
1174 break;
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 }
482
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1177
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
1178 // 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
1179 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
1180 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
1181 {
482
6fdee3ec2894 Improve remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 481
diff changeset
1182 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
1183 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
1184 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
1185
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
1186 // 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
1187 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
1188 {
b768bfb0b364 Improve color remapping, add option for removing unused colors from the final output palette.
Matti Hamalainen <ccr@tnsp.org>
parents: 478
diff changeset
1189 if (mapping[index] >= 0)
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1190 {
2143
693c3e73eb34 Fix palette remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 2142
diff changeset
1191 memcpy(&tmpPal->colors[mapping[index]], &(src->pal->colors[index]), sizeof(DMColor));
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1192 }
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 // 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
1196 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
1197 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
1198 {
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
1199 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
1200 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
1201 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
1202 {
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
1203 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
1204 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
1205 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
1206 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
1207 dp[xc] = mapping[col];
478
7c7a57590236 Calculate number of remapped colors.
Matti Hamalainen <ccr@tnsp.org>
parents: 477
diff changeset
1208 else
7c7a57590236 Calculate number of remapped colors.
Matti Hamalainen <ccr@tnsp.org>
parents: 477
diff changeset
1209 dp[xc] = 0;
473
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 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1212
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1213 // Set new palette, free memory
2143
693c3e73eb34 Fix palette remapping.
Matti Hamalainen <ccr@tnsp.org>
parents: 2142
diff changeset
1214 if ((res = dmPaletteCopy(&dst->pal, tmpPal)) != DMERR_OK)
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1215 {
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1216 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
1217 "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
1218 goto error;
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1219 }
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
1220
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1221 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
1222 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
1223 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
1224 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
1225 return res;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1226 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1227
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1228
1550
ba09aa661c72 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1546
diff changeset
1229 int dmConvertC64Bitmap(DMC64Image **pdst, const DMC64Image *src,
ba09aa661c72 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1546
diff changeset
1230 const DMC64ImageFormat *dstFmt, const DMC64ImageFormat *srcFmt)
1490
665a0b917d22 Begin restructuring how C64 bitmaps are converted.
Matti Hamalainen <ccr@tnsp.org>
parents: 1481
diff changeset
1231 {
1493
d987a4933e1c Some dabbling work on basic C64 bitmap conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1490
diff changeset
1232 DMC64Image *dst;
1891
91b80990043c Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1890
diff changeset
1233 DMC64MemBlock *srcBlk = NULL, *dstBlk = NULL;
91b80990043c Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1890
diff changeset
1234 const char *blkname = NULL;
1493
d987a4933e1c Some dabbling work on basic C64 bitmap conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1490
diff changeset
1235
1550
ba09aa661c72 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1546
diff changeset
1236 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
1237 return DMERR_NULLPTR;
1493
d987a4933e1c Some dabbling work on basic C64 bitmap conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1490
diff changeset
1238
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
1239 // Allocate the destination image
1550
ba09aa661c72 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1546
diff changeset
1240 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
1241 return DMERR_MALLOC;
d987a4933e1c Some dabbling work on basic C64 bitmap conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1490
diff changeset
1242
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
1243 // 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
1244 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
1245 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
1246 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
1247 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
1248 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
1249
1829
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1250 // Try to do some simple fixups
2181
560ba06a99eb Oops, forgot these from previous commit.
Matti Hamalainen <ccr@tnsp.org>
parents: 2160
diff changeset
1251 if ((dst->fmt->type & D64_FMT_MODE_MASK) == D64_FMT_MC &&
560ba06a99eb Oops, forgot these from previous commit.
Matti Hamalainen <ccr@tnsp.org>
parents: 2160
diff changeset
1252 (src->fmt->type & D64_FMT_MODE_MASK) == D64_FMT_HIRES)
2124
a17b37872d8e Simplistic conversion fixups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2123
diff changeset
1253 {
a17b37872d8e Simplistic conversion fixups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2123
diff changeset
1254 dmC64MemBlockCopy(&dst->screen[0], &src->screen[0]);
a17b37872d8e Simplistic conversion fixups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2123
diff changeset
1255 }
a17b37872d8e Simplistic conversion fixups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2123
diff changeset
1256 else
2181
560ba06a99eb Oops, forgot these from previous commit.
Matti Hamalainen <ccr@tnsp.org>
parents: 2160
diff changeset
1257 if ((dst->fmt->type & D64_FMT_MODE_MASK) == D64_FMT_HIRES &&
560ba06a99eb Oops, forgot these from previous commit.
Matti Hamalainen <ccr@tnsp.org>
parents: 2160
diff changeset
1258 (src->fmt->type & D64_FMT_MODE_MASK) == D64_FMT_MC)
2124
a17b37872d8e Simplistic conversion fixups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2123
diff changeset
1259 {
a17b37872d8e Simplistic conversion fixups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2123
diff changeset
1260 // XXX TODO: Handle FLI mc->hires differently?
a17b37872d8e Simplistic conversion fixups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2123
diff changeset
1261 }
a17b37872d8e Simplistic conversion fixups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2123
diff changeset
1262
1947
8896d5676f1b Architectural change: remove some duplicated variables from DMC64Image
Matti Hamalainen <ccr@tnsp.org>
parents: 1933
diff changeset
1263 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
1264 {
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1265 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
1266 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
1267 {
1929
b49814dd8469 Only copy memory blocks that do not already exist in destination.
Matti Hamalainen <ccr@tnsp.org>
parents: 1928
diff changeset
1268 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
1269 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
1270
b49814dd8469 Only copy memory blocks that do not already exist in destination.
Matti Hamalainen <ccr@tnsp.org>
parents: 1928
diff changeset
1271 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
1272 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
1273
b49814dd8469 Only copy memory blocks that do not already exist in destination.
Matti Hamalainen <ccr@tnsp.org>
parents: 1928
diff changeset
1274 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
1275 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
1276 }
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1277 }
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1278 else
1947
8896d5676f1b Architectural change: remove some duplicated variables from DMC64Image
Matti Hamalainen <ccr@tnsp.org>
parents: 1933
diff changeset
1279 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
1280 {
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1281 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
1282 }
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1283
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 // 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
1285 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
1286 {
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
1287 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
1288 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
1289
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 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
1291 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
1292
1933
c5a46cb4cce5 Change DMC64ImageFormat parameter of dmC64GetSubjectSize() and
Matti Hamalainen <ccr@tnsp.org>
parents: 1931
diff changeset
1293 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
1294 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
1295 {
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 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
1297 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
1298 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
1299 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
1300 case DO_SET_OP:
2108
5f8f170f8774 Change dmC64GetOpMemBlock() function API.
Matti Hamalainen <ccr@tnsp.org>
parents: 2103
diff changeset
1301 srcBlk = (DMC64MemBlock *) dmC64GetOpMemBlock(src, op->subject, op->bank);
5f8f170f8774 Change dmC64GetOpMemBlock() function API.
Matti Hamalainen <ccr@tnsp.org>
parents: 2103
diff changeset
1302 dstBlk = (DMC64MemBlock *) dmC64GetOpMemBlock(dst, op->subject, op->bank);
1852
219417325036 Split dmC64GetOpMemBlockAndName() into dmC64GetOpMemBlock() and
Matti Hamalainen <ccr@tnsp.org>
parents: 1843
diff changeset
1303 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
1304
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1305 // 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
1306 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
1307 break;
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1308
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
1309 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
1310 {
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 // 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
1312 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
1313 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
1314
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
1315 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
1316 }
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 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
1318 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
1319 {
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 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
1321 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
1322 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
1323 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
1324 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
1325 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
1326 {
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 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
1328 "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
1329 "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
1330 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
1331 }
1829
5639142e0b87 Change the order and logic of how we do upconversion fixups in dmConvertC64Bitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1823
diff changeset
1332 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
1333 {
1842
a3fc0cab1a60 Improve C64 bitmap conversion messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1836
diff changeset
1334 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
1335 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
1336 }
a3fc0cab1a60 Improve C64 bitmap conversion messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1836
diff changeset
1337 else
a3fc0cab1a60 Improve C64 bitmap conversion messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1836
diff changeset
1338 {
a3fc0cab1a60 Improve C64 bitmap conversion messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1836
diff changeset
1339 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
1340 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
1341 }
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1342 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
1343 {
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1344 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
1345 // 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
1346 // 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
1347 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
1348 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
1349 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
1350
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1351 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
1352 // 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
1353 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
1354
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1355 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
1356 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
1357 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
1358
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1359 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
1360 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
1361 "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
1362 "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
1363 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
1364 }
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1365 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
1366 }
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1367 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
1368 }
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1369 }
02f604264bc4 Improve C64 image format up/down conversion. Might actually work for some formats now.
Matti Hamalainen <ccr@tnsp.org>
parents: 1811
diff changeset
1370
1490
665a0b917d22 Begin restructuring how C64 bitmaps are converted.
Matti Hamalainen <ccr@tnsp.org>
parents: 1481
diff changeset
1371 return DMERR_OK;
665a0b917d22 Begin restructuring how C64 bitmaps are converted.
Matti Hamalainen <ccr@tnsp.org>
parents: 1481
diff changeset
1372 }
665a0b917d22 Begin restructuring how C64 bitmaps are converted.
Matti Hamalainen <ccr@tnsp.org>
parents: 1481
diff changeset
1373
665a0b917d22 Begin restructuring how C64 bitmaps are converted.
Matti Hamalainen <ccr@tnsp.org>
parents: 1481
diff changeset
1374
665a0b917d22 Begin restructuring how C64 bitmaps are converted.
Matti Hamalainen <ccr@tnsp.org>
parents: 1481
diff changeset
1375 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
1376 {
550
12854cbd6fab Initial support for bitmap -> bitmap conversion in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 547
diff changeset
1377 int res = DMERR_OK;
1481
e967e8e3b8c3 Sanitize dmWriteBitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1480
diff changeset
1378 DMGrowBuf buf;
550
12854cbd6fab Initial support for bitmap -> bitmap conversion in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 547
diff changeset
1379
1694
e568535e1a96 Backed out changeset 9611ecd2c4fb
Matti Hamalainen <ccr@tnsp.org>
parents: 1692
diff changeset
1380 dmGrowBufInit(&buf);
e568535e1a96 Backed out changeset 9611ecd2c4fb
Matti Hamalainen <ccr@tnsp.org>
parents: 1692
diff changeset
1381
1481
e967e8e3b8c3 Sanitize dmWriteBitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1480
diff changeset
1382 // Encode to target format
e967e8e3b8c3 Sanitize dmWriteBitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1480
diff changeset
1383 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
1384 if ((res = dmC64EncodeBMP(&buf, image, fmt)) != DMERR_OK)
1585
a076c9d9b321 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 1584
diff changeset
1385 {
a076c9d9b321 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 1584
diff changeset
1386 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
1387 goto error;
1585
a076c9d9b321 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 1584
diff changeset
1388 }
550
12854cbd6fab Initial support for bitmap -> bitmap conversion in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 547
diff changeset
1389
1481
e967e8e3b8c3 Sanitize dmWriteBitmap().
Matti Hamalainen <ccr@tnsp.org>
parents: 1480
diff changeset
1390 // 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
1391 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
1392 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
1393
1550
ba09aa661c72 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1546
diff changeset
1394 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
1395
12854cbd6fab Initial support for bitmap -> bitmap conversion in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 547
diff changeset
1396 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
1397 dmGrowBufFree(&buf);
550
12854cbd6fab Initial support for bitmap -> bitmap conversion in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 547
diff changeset
1398 return res;
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
1399 }
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
1400
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
1401
1886
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1402 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
1403 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
1404 const char *prefix, const DMImage *img,
2156
e6ec7fad9ce2 Rename DMImageConvSpec to DMImageWriteSpec to better reflec the struct's purpose.
Matti Hamalainen <ccr@tnsp.org>
parents: 2155
diff changeset
1405 const DMImageWriteSpec *spec)
1303
be30466fbc47 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1293
diff changeset
1406 {
1886
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1407 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
1408 int res;
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1409
1886
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1410 if ((res = dmf_open_stdio(hdrFilename, "wb", &fp)) != DMERR_OK)
1303
be30466fbc47 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1293
diff changeset
1411 {
1886
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1412 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
1413 "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
1414 hdrFilename);
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1415 }
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1416
2065
451980580189 Refactor how paletted/indexed formats are handled in libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 2062
diff changeset
1417 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
1418
1886
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1419 dmf_close(fp);
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1420 return res;
1303
be30466fbc47 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1293
diff changeset
1421 }
be30466fbc47 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1293
diff changeset
1422
be30466fbc47 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1293
diff changeset
1423
2156
e6ec7fad9ce2 Rename DMImageConvSpec to DMImageWriteSpec to better reflec the struct's purpose.
Matti Hamalainen <ccr@tnsp.org>
parents: 2155
diff changeset
1424 int dmWriteImage(const char *filename, DMImage *pimage, DMImageWriteSpec *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
1425 {
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
1426 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
1427
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1428 // 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
1429 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
1430 {
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1431 return dmError(DMERR_NOT_SUPPORTED,
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1432 "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
1433 fmt->name);
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1434 }
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1435
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
1436 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
1437 {
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1438 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
1439 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
1440 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
1441 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
1442 spec->scaleX, spec->scaleY);
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
1443 }
435
e4a3f183e463 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 432
diff changeset
1444
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1445 // 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
1446 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
1447 BOOL allocated = FALSE;
2182
52985e4bc9ce Wrong struct pointer variable used .. but actually the same pointer, so no harm done. Fixed anyway.
Matti Hamalainen <ccr@tnsp.org>
parents: 2181
diff changeset
1448 if (optRemapColors && image->pixfmt == DM_PIXFMT_PALETTE)
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1449 {
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
1450 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
1451 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
1452
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
1453 allocated = TRUE;
473
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1454 }
73bfe73553eb Implement palette remapping option for image outputs.
Matti Hamalainen <ccr@tnsp.org>
parents: 471
diff changeset
1455
2065
451980580189 Refactor how paletted/indexed formats are handled in libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 2062
diff changeset
1456 // Determine number of planes, if paletted
2142
894781b7310a Possibly fix RAW output when clipping nplanes/bpp.
Matti Hamalainen <ccr@tnsp.org>
parents: 2137
diff changeset
1457 if (spec->nplanes == 0)
894781b7310a Possibly fix RAW output when clipping nplanes/bpp.
Matti Hamalainen <ccr@tnsp.org>
parents: 2137
diff changeset
1458 {
2157
9a9493809b3a Rename DM_COLFMT_* constants to DM_PIXFMT_* and the 'format' field of DMImage
Matti Hamalainen <ccr@tnsp.org>
parents: 2156
diff changeset
1459 if (image->pixfmt == DM_PIXFMT_PALETTE &&
2142
894781b7310a Possibly fix RAW output when clipping nplanes/bpp.
Matti Hamalainen <ccr@tnsp.org>
parents: 2137
diff changeset
1460 image->pal != NULL)
894781b7310a Possibly fix RAW output when clipping nplanes/bpp.
Matti Hamalainen <ccr@tnsp.org>
parents: 2137
diff changeset
1461 spec->nplanes = dmGetNPlanesFromNColors(image->pal->ncolors);
894781b7310a Possibly fix RAW output when clipping nplanes/bpp.
Matti Hamalainen <ccr@tnsp.org>
parents: 2137
diff changeset
1462 else
2157
9a9493809b3a Rename DM_COLFMT_* constants to DM_PIXFMT_* and the 'format' field of DMImage
Matti Hamalainen <ccr@tnsp.org>
parents: 2156
diff changeset
1463 if (image->pixfmt == DM_PIXFMT_GRAYSCALE)
2142
894781b7310a Possibly fix RAW output when clipping nplanes/bpp.
Matti Hamalainen <ccr@tnsp.org>
parents: 2137
diff changeset
1464 spec->nplanes = image->bpp;
894781b7310a Possibly fix RAW output when clipping nplanes/bpp.
Matti Hamalainen <ccr@tnsp.org>
parents: 2137
diff changeset
1465 }
2065
451980580189 Refactor how paletted/indexed formats are handled in libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 2062
diff changeset
1466
2100
81fb21dd3265 Add dmGetNPlanesFromNColors() and use it.
Matti Hamalainen <ccr@tnsp.org>
parents: 2099
diff changeset
1467 if (spec->nplanes <= 0)
2099
dac89484f143 Fix nplanes and bpp in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2097
diff changeset
1468 spec->nplanes = 4;
dac89484f143 Fix nplanes and bpp in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2097
diff changeset
1469
2065
451980580189 Refactor how paletted/indexed formats are handled in libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 2062
diff changeset
1470 spec->fmtid = fmt->fmtid;
451980580189 Refactor how paletted/indexed formats are handled in libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 2062
diff changeset
1471
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1472 // 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
1473 switch (fmt->fmtid)
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
1474 {
1543
416d7b3ba3b2 Rename libgfx IMGFMT_* constants to DM_IMGFMT_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 1537
diff changeset
1475 case DM_IMGFMT_PNG:
2155
28b7a842181f Make PNG/PPM output a bit more sane with -P option and grayscale data.
Matti Hamalainen <ccr@tnsp.org>
parents: 2144
diff changeset
1476 if (optUsePalette)
2157
9a9493809b3a Rename DM_COLFMT_* constants to DM_PIXFMT_* and the 'format' field of DMImage
Matti Hamalainen <ccr@tnsp.org>
parents: 2156
diff changeset
1477 spec->pixfmt = (image->pixfmt == DM_PIXFMT_GRAYSCALE) ? DM_PIXFMT_GRAYSCALE : DM_PIXFMT_PALETTE;
2155
28b7a842181f Make PNG/PPM output a bit more sane with -P option and grayscale data.
Matti Hamalainen <ccr@tnsp.org>
parents: 2144
diff changeset
1478 else
2157
9a9493809b3a Rename DM_COLFMT_* constants to DM_PIXFMT_* and the 'format' field of DMImage
Matti Hamalainen <ccr@tnsp.org>
parents: 2156
diff changeset
1479 spec->pixfmt = DM_PIXFMT_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
1480 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
1481
1543
416d7b3ba3b2 Rename libgfx IMGFMT_* constants to DM_IMGFMT_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 1537
diff changeset
1482 case DM_IMGFMT_PPM:
2157
9a9493809b3a Rename DM_COLFMT_* constants to DM_PIXFMT_* and the 'format' field of DMImage
Matti Hamalainen <ccr@tnsp.org>
parents: 2156
diff changeset
1483 if (optUsePalette && image->pixfmt == DM_PIXFMT_GRAYSCALE)
9a9493809b3a Rename DM_COLFMT_* constants to DM_PIXFMT_* and the 'format' field of DMImage
Matti Hamalainen <ccr@tnsp.org>
parents: 2156
diff changeset
1484 spec->pixfmt = DM_PIXFMT_GRAYSCALE;
2155
28b7a842181f Make PNG/PPM output a bit more sane with -P option and grayscale data.
Matti Hamalainen <ccr@tnsp.org>
parents: 2144
diff changeset
1485 else
2157
9a9493809b3a Rename DM_COLFMT_* constants to DM_PIXFMT_* and the 'format' field of DMImage
Matti Hamalainen <ccr@tnsp.org>
parents: 2156
diff changeset
1486 spec->pixfmt = DM_PIXFMT_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
1487 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
1488
1543
416d7b3ba3b2 Rename libgfx IMGFMT_* constants to DM_IMGFMT_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 1537
diff changeset
1489 case DM_IMGFMT_RAW:
416d7b3ba3b2 Rename libgfx IMGFMT_* constants to DM_IMGFMT_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 1537
diff changeset
1490 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
1491 {
1886
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1492 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
1493 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
1494 (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
1495 {
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1496 res = dmError(DMERR_MALLOC,
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1497 "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
1498 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
1499 }
820
e3fa646aef0d Use dm_strdup_fext().
Matti Hamalainen <ccr@tnsp.org>
parents: 819
diff changeset
1500
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1501 // 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
1502 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
1503 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
1504
1291
2c4acbc3e7bf More work on libgfx etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 1290
diff changeset
1505 if (info)
2c4acbc3e7bf More work on libgfx etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 1290
diff changeset
1506 {
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1507 dmMsg(2, "%d bitplanes, %s planes output.\n",
1291
2c4acbc3e7bf More work on libgfx etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 1290
diff changeset
1508 spec->nplanes,
2c4acbc3e7bf More work on libgfx etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 1290
diff changeset
1509 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
1510 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
1511 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
1512 hdrFilename, prefix);
1291
2c4acbc3e7bf More work on libgfx etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 1290
diff changeset
1513 }
1891
91b80990043c Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1890
diff changeset
1514
1886
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 = dmWriteIFFMasterRAWHeaderFile(
2065
451980580189 Refactor how paletted/indexed formats are handled in libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 2062
diff changeset
1516 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
1517
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1518 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
1519 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
1520 }
607
360b1ad83ed9 Rename things; Fix build by combining the conflicting rules.
Matti Hamalainen <ccr@tnsp.org>
parents: 566
diff changeset
1521 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
1522
2065
451980580189 Refactor how paletted/indexed formats are handled in libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 2062
diff changeset
1523 default:
2157
9a9493809b3a Rename DM_COLFMT_* constants to DM_PIXFMT_* and the 'format' field of DMImage
Matti Hamalainen <ccr@tnsp.org>
parents: 2156
diff changeset
1524 spec->pixfmt = optUsePalette ? DM_PIXFMT_PALETTE : DM_PIXFMT_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
1525 break;
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1526 }
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1527
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1528 // 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
1529 if (res == DMERR_OK)
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1530 {
1886
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1531 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
1532
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1533 if (info)
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1534 {
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1535 char *str;
2158
e363dc852383 Oops, display the real intended output pixfmt.
Matti Hamalainen <ccr@tnsp.org>
parents: 2157
diff changeset
1536 switch (spec->pixfmt)
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1537 {
2157
9a9493809b3a Rename DM_COLFMT_* constants to DM_PIXFMT_* and the 'format' field of DMImage
Matti Hamalainen <ccr@tnsp.org>
parents: 2156
diff changeset
1538 case DM_PIXFMT_PALETTE : str = "indexed/paletted"; break;
9a9493809b3a Rename DM_COLFMT_* constants to DM_PIXFMT_* and the 'format' field of DMImage
Matti Hamalainen <ccr@tnsp.org>
parents: 2156
diff changeset
1539 case DM_PIXFMT_RGB : str = "24bit RGB"; break;
9a9493809b3a Rename DM_COLFMT_* constants to DM_PIXFMT_* and the 'format' field of DMImage
Matti Hamalainen <ccr@tnsp.org>
parents: 2156
diff changeset
1540 case DM_PIXFMT_RGBA : str = "32bit RGBA"; break;
9a9493809b3a Rename DM_COLFMT_* constants to DM_PIXFMT_* and the 'format' field of DMImage
Matti Hamalainen <ccr@tnsp.org>
parents: 2156
diff changeset
1541 case DM_PIXFMT_GRAYSCALE : str = "grayscale"; break;
2142
894781b7310a Possibly fix RAW output when clipping nplanes/bpp.
Matti Hamalainen <ccr@tnsp.org>
parents: 2137
diff changeset
1542 default : str = "???"; break;
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1543 }
2160
0b9315070001 Lower verbosity threshold the "Using ... output" when converting to image.
Matti Hamalainen <ccr@tnsp.org>
parents: 2159
diff changeset
1544 dmMsg(1, "Using %s output.\n", str);
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1545 }
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1546
1886
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1547 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
1548 {
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1549 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
1550 filename);
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1551 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
1552 }
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1553
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1554 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
1555
1af79412f249 Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents: 1874
diff changeset
1556 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
1557 }
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
1558
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
1559 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
1560 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
1561 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
1562
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
1563 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
1564 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1565
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1566
547
ca5ad51c6479 Make dmConvertByte() static.
Matti Hamalainen <ccr@tnsp.org>
parents: 546
diff changeset
1567 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
1568 {
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1569 Uint8 byte = 0;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1570 int xc;
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 if (multicolor)
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 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
1575 {
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1576 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
1577 byte |= pixel << (6 - (xc * 2));
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 }
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1580 else
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1581 {
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1582 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
1583 {
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1584 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
1585 byte |= pixel << (7 - xc);
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1586 }
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
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1589 return byte;
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 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
1594 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
1595 {
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1596 int yc;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1597
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1598 if (xoffs < 0 || yoffs < 0 ||
2125
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1599 xoffs + D64_CHR_WIDTH_PX > image->width ||
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1600 yoffs + D64_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
1601 return FALSE;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1602
2125
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1603 for (yc = 0; yc < D64_CHR_HEIGHT_UT; yc++)
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1604 {
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1605 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
1606 buf[yc] = dmConvertByte(sp, multicolor);
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
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1609 return TRUE;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1610 }
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1611
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1612
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1613 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
1614 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
1615 {
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1616 int yc, xc;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1617
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1618 if (xoffs < 0 || yoffs < 0 ||
2125
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1619 xoffs + D64_SPR_WIDTH_PX > image->width ||
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1620 yoffs + D64_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
1621 return FALSE;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1622
2125
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1623 for (yc = 0; yc < D64_SPR_HEIGHT_UT; yc++)
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1624 {
2125
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1625 for (xc = 0; xc < D64_SPR_WIDTH_PX / D64_SPR_WIDTH_UT; xc++)
489
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 const Uint8 *sp = image->data + ((yc + yoffs) * image->pitch) + (xc * 8) + xoffs;
2125
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1628 buf[(yc * D64_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
1629 }
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1630 }
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1631
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1632 return TRUE;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1633 }
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
1928
0b2a2da4c7e7 Constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 1916
diff changeset
1636 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
1637 {
909
be5d276f8a6c Some work on error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 907
diff changeset
1638 int ret = DMERR_OK;
829
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1639 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
1640 FILE *outFile = NULL;
829
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1641 Uint8 *buf = NULL;
907
bc6c338295e5 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 902
diff changeset
1642 size_t outBufSize;
829
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1643 char *outType;
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1644
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1645 switch (outFormat)
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1646 {
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1647 case FFMT_CHAR:
2125
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1648 outBufSize = D64_CHR_SIZE;
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1649 outBlockW = image->width / D64_CHR_WIDTH_PX;
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1650 outBlockH = image->height / D64_CHR_HEIGHT_PX;
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1651 outType = "char";
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1652 break;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1653
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1654 case FFMT_SPRITE:
2125
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1655 outBufSize = D64_SPR_SIZE;
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1656 outBlockW = image->width / D64_SPR_WIDTH_PX;
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1657 outBlockH = image->height / D64_SPR_HEIGHT_PX;
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1658 outType = "sprite";
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1659 break;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1660
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1661 default:
972
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
1662 ret = dmError(DMERR_INVALID_ARGS,
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
1663 "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
1664 goto error;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1665 }
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1666
909
be5d276f8a6c Some work on error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 907
diff changeset
1667 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
1668 {
972
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
1669 ret = dmError(DMERR_INVALID_ARGS,
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
1670 "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
1671 outBlockW, outBlockH);
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1672 goto error;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1673 }
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1674
829
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1675 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
1676 {
909
be5d276f8a6c Some work on error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 907
diff changeset
1677 ret = dmGetErrno();
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
1678 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
1679 filename, ret, dmErrorStr(ret));
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1680 goto error;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1681 }
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1682
907
bc6c338295e5 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 902
diff changeset
1683 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
1684 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
1685 dmErrorMsg("Could not allocate %d bytes for conversion buffer.\n",
907
bc6c338295e5 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 902
diff changeset
1686 outBufSize);
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1687 goto error;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1688 }
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1689
829
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1690 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
1691 outBlockW, outBlockH, outBlockW * outBlockH, outType);
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1692
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1693 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
1694 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
1695 {
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1696 switch (outFormat)
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1697 {
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1698 case FFMT_CHAR:
829
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1699 if (!dmConvertImage2Char(buf, image,
2125
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1700 bx * D64_CHR_WIDTH_PX, by * D64_CHR_HEIGHT_PX,
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1701 multicolor))
909
be5d276f8a6c Some work on error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 907
diff changeset
1702 {
be5d276f8a6c Some work on error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 907
diff changeset
1703 ret = DMERR_DATA_ERROR;
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1704 goto error;
909
be5d276f8a6c Some work on error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 907
diff changeset
1705 }
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1706 break;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1707
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1708 case FFMT_SPRITE:
829
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1709 if (!dmConvertImage2Sprite(buf, image,
2125
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1710 bx * D64_SPR_WIDTH_PX, by * D64_SPR_HEIGHT_PX,
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1711 multicolor))
909
be5d276f8a6c Some work on error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 907
diff changeset
1712 {
be5d276f8a6c Some work on error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 907
diff changeset
1713 ret = DMERR_DATA_ERROR;
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1714 goto error;
909
be5d276f8a6c Some work on error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 907
diff changeset
1715 }
910
Matti Hamalainen <ccr@tnsp.org>
parents: 909
diff changeset
1716 break;
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1717 }
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1718
907
bc6c338295e5 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 902
diff changeset
1719 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
1720 {
909
be5d276f8a6c Some work on error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 907
diff changeset
1721 ret = dmGetErrno();
972
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
1722 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
1723 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
1724 goto error;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1725 }
829
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1726 }
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1727
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1728 fclose(outFile);
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1729 dmFree(buf);
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1730 return 0;
828
c20a99411a1a Fix a silly segfault.
Matti Hamalainen <ccr@tnsp.org>
parents: 827
diff changeset
1731
c20a99411a1a Fix a silly segfault.
Matti Hamalainen <ccr@tnsp.org>
parents: 827
diff changeset
1732 error:
c20a99411a1a Fix a silly segfault.
Matti Hamalainen <ccr@tnsp.org>
parents: 827
diff changeset
1733 if (outFile != NULL)
c20a99411a1a Fix a silly segfault.
Matti Hamalainen <ccr@tnsp.org>
parents: 827
diff changeset
1734 fclose(outFile);
829
97700378ecd8 Oops, accidentally committed unfinished code :S
Matti Hamalainen <ccr@tnsp.org>
parents: 828
diff changeset
1735 dmFree(buf);
910
Matti Hamalainen <ccr@tnsp.org>
parents: 909
diff changeset
1736 return ret;
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1737 }
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
1738
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
1739
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1740 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
1741 {
1524
532c3ceaec1a Fix uninitilized variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 1522
diff changeset
1742 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
1743 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
1744
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1745 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
1746 {
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
1747 case FFMT_CHAR:
2125
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1748 outSize = D64_CHR_SIZE;
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1749 outWidth = D64_CHR_WIDTH_UT;
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1750 outWidthPX = D64_CHR_WIDTH_PX;
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1751 outHeight = D64_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
1752 break;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
1753
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
1754 case FFMT_SPRITE:
2125
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1755 outSize = D64_SPR_SIZE;
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1756 outWidth = D64_SPR_WIDTH_UT;
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1757 outWidthPX = D64_SPR_WIDTH_PX;
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1758 outHeight = D64_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
1759 break;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
1760
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1761 default:
972
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
1762 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
1763 "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
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
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1766 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
1767 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
1768
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1769 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
1770 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1771 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
1772 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
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 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
1776 else
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1777 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
1778 {
972
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
1779 ret = dmGetErrno();
1525
9602f7ea1e7e Improve some error messages in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1524
diff changeset
1780 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
1781 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
1782 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
1783 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1784
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1785 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
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 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
1788
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1789 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
1790 {
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
1791 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
1792 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
1793 break;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
1794 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
1795 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
1796 break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1797 }
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1798 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
1799 itemCount++;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1800 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1801
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1802 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
1803 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1804 else
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1805 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
1806 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1807 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
1808 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
1809 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
1810
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1811 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
1812 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1813 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
1814 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
1815 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
1816 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
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
2157
9a9493809b3a Rename DM_COLFMT_* constants to DM_PIXFMT_* and the 'format' field of DMImage
Matti Hamalainen <ccr@tnsp.org>
parents: 2156
diff changeset
1819 outImage = dmImageAlloc(outWidthPX, outHeight, DM_PIXFMT_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
1820 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
1821 optItemCount,
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1822 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
1823 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
1824 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
1825 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1826 else
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1827 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1828 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
1829 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
1830 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
1831 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
1832 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
1833 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
1834
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1835 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
1836 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
1837 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
1838 outIHeight++;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
1839
2157
9a9493809b3a Rename DM_COLFMT_* constants to DM_PIXFMT_* and the 'format' field of DMImage
Matti Hamalainen <ccr@tnsp.org>
parents: 2156
diff changeset
1840 outImage = dmImageAlloc(outWidthPX * outIWidth, outIHeight * outHeight, DM_PIXFMT_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
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
2208
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
1843 if ((err = dmC64SetImagePalette(outImage, &optC64Spec, FALSE)) != DMERR_OK)
2094
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1844 {
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1845 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
1846 goto error;
4276b8c0fef0 Revamp how the DMImage palette system and color formats work, as preparation
Matti Hamalainen <ccr@tnsp.org>
parents: 2079
diff changeset
1847 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
1848
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1849 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
1850 {
827
c8beac5313c3 Rename a function.
Matti Hamalainen <ccr@tnsp.org>
parents: 826
diff changeset
1851 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
1852 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
1853 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
1854 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
1855 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
1856 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1857
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1858 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
1859 {
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1860 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
1861 optOutFilename,
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1862 itemCount,
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1863 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
1864
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1865 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
1866 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
1867 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
1868 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
1869 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
1870
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1871 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
1872 &dmImageFormatList[optOutFormat], TRUE);
972
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
1873 if (ret != DMERR_OK)
799
5ec451795ab2 Add some error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 652
diff changeset
1874 {
1525
9602f7ea1e7e Improve some error messages in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1524
diff changeset
1875 dmErrorMsg("Error writing output image '%s': %s.\n",
9602f7ea1e7e Improve some error messages in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1524
diff changeset
1876 outFilename, dmErrorStr(ret));
799
5ec451795ab2 Add some error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 652
diff changeset
1877 }
5ec451795ab2 Add some error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 652
diff changeset
1878
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1879 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
1880 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1881 else
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 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
1884 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1885 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
1886 outY++;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1887 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1888 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
1889
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
1890 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
1891 itemCount++;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1892 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1893
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1894 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
1895 {
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
1896 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
1897 &dmImageFormatList[optOutFormat], TRUE);
972
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
1898 if (ret != DMERR_OK)
799
5ec451795ab2 Add some error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 652
diff changeset
1899 {
1525
9602f7ea1e7e Improve some error messages in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1524
diff changeset
1900 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
1901 optOutFilename, dmErrorStr(ret));
799
5ec451795ab2 Add some error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 652
diff changeset
1902 }
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1903 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
1904
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1905 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
1906 }
607
360b1ad83ed9 Rename things; Fix build by combining the conflicting rules.
Matti Hamalainen <ccr@tnsp.org>
parents: 566
diff changeset
1907 else
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1908 if (optOutType == FFMT_BITMAP)
607
360b1ad83ed9 Rename things; Fix build by combining the conflicting rules.
Matti Hamalainen <ccr@tnsp.org>
parents: 566
diff changeset
1909 {
360b1ad83ed9 Rename things; Fix build by combining the conflicting rules.
Matti Hamalainen <ccr@tnsp.org>
parents: 566
diff changeset
1910 if (optSequential)
360b1ad83ed9 Rename things; Fix build by combining the conflicting rules.
Matti Hamalainen <ccr@tnsp.org>
parents: 566
diff changeset
1911 {
972
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
1912 ret = dmError(DMERR_INVALID_ARGS,
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
1913 "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
1914 goto error;
360b1ad83ed9 Rename things; Fix build by combining the conflicting rules.
Matti Hamalainen <ccr@tnsp.org>
parents: 566
diff changeset
1915 }
360b1ad83ed9 Rename things; Fix build by combining the conflicting rules.
Matti Hamalainen <ccr@tnsp.org>
parents: 566
diff changeset
1916 }
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1917
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1918 error:
972
6d5edc6af2ad Error handling cleanups/fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
1919 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
1920 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1921
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1922
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1923 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
1924 {
933
8fe48c08dbca Fix some memory leaks etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 931
diff changeset
1925 FILE *inFile = NULL;
1440
a602488830fc Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1439
diff changeset
1926 const DMC64ImageFormat *inC64Fmt = NULL;
1869
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
1927 DMConvFormat inFormat, outFormat;
1490
665a0b917d22 Begin restructuring how C64 bitmaps are converted.
Matti Hamalainen <ccr@tnsp.org>
parents: 1481
diff changeset
1928 DMC64Image *inC64Image = NULL, *outC64Image = NULL;
2052
aa8df4f1b785 Fix minor memory leaks in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2030
diff changeset
1929 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
1930 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
1931 size_t dataSize, dataSizeOrig, dataRealOffs;
2097
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
1932 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
1933
1865
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
1934 // Default color mapping
2125
56d4dc81774b Rename various C64_* constants to D64_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 2124
diff changeset
1935 for (i = 0; i < D64_NCOLORS; i++)
1865
3e830bcb001a Improve color map and ANSI output support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1864
diff changeset
1936 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
1937
1931
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
1938 // Initialize c64 image conversion spec
2208
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
1939 memset(&optC64Spec, 0, sizeof(optC64Spec));
1931
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
1940
1616
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
1941 // Initialize list of additional conversion formats
2200
dcd26cdc395e Replace dmC64InitializeFormats() with dmLib64GFXInit() and dmLib64GFXClose().
Matti Hamalainen <ccr@tnsp.org>
parents: 2198
diff changeset
1942 if ((res = dmLib64GFXInit()) != DMERR_OK)
dcd26cdc395e Replace dmC64InitializeFormats() with dmLib64GFXInit() and dmLib64GFXClose().
Matti Hamalainen <ccr@tnsp.org>
parents: 2198
diff changeset
1943 {
dcd26cdc395e Replace dmC64InitializeFormats() with dmLib64GFXInit() and dmLib64GFXClose().
Matti Hamalainen <ccr@tnsp.org>
parents: 2198
diff changeset
1944 dmErrorMsg("Could not initialize lib64gfx: %s\n",
dcd26cdc395e Replace dmC64InitializeFormats() with dmLib64GFXInit() and dmLib64GFXClose().
Matti Hamalainen <ccr@tnsp.org>
parents: 2198
diff changeset
1945 dmErrorStr(res));
dcd26cdc395e Replace dmC64InitializeFormats() with dmLib64GFXInit() and dmLib64GFXClose().
Matti Hamalainen <ccr@tnsp.org>
parents: 2198
diff changeset
1946 goto exit;
dcd26cdc395e Replace dmC64InitializeFormats() with dmLib64GFXInit() and dmLib64GFXClose().
Matti Hamalainen <ccr@tnsp.org>
parents: 2198
diff changeset
1947 }
dcd26cdc395e Replace dmC64InitializeFormats() with dmLib64GFXInit() and dmLib64GFXClose().
Matti Hamalainen <ccr@tnsp.org>
parents: 2198
diff changeset
1948
1616
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
1949 nconvFormatList = ndmImageFormatList + nbaseFormatList;
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
1950 convFormatList = dmCalloc(nconvFormatList, sizeof(DMConvFormat));
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
1951
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
1952 for (n = i = 0; i < ndmImageFormatList; i++)
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
1953 {
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
1954 const DMImageFormat *sfmt = &dmImageFormatList[i];
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
1955 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
1956 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
1957 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
1958 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
1959 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
1960 dfmt->format = sfmt->fmtid;
1616
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
1961 }
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
1962
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
1963 for (i = 0; i < nbaseFormatList; i++)
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
1964 memcpy(&convFormatList[n++], &baseFormatList[i], sizeof(DMConvFormat));
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
1965
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1966 // Initialize and parse commandline
1910
1a198212009e Bump gfxconv version.
Matti Hamalainen <ccr@tnsp.org>
parents: 1909
diff changeset
1967 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
1968
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1969 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
1970 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
1971 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
1972
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1973 // 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
1974 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
1975 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1976 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
1977 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
1978 {
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1979 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
1980 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
1981 {
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1982 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
1983 formatTypeList[optInType]);
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1984 }
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1985 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1986 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1987
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1988 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
1989 {
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
1990 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
1991 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
1992 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
1993 dmErrorMsg("Perhaps you should try using --help\n");
2198
c26a51ea70be Replace label 'error' with 'exit'.
Matti Hamalainen <ccr@tnsp.org>
parents: 2183
diff changeset
1994 goto exit;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1995 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1996 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
1997 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
1998 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1999 else
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2000 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
2001 {
2097
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2002 res = dmGetErrno();
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
2003 dmErrorMsg("Error opening input file '%s', %d: %s\n",
488
49f0ce2cc347 Error printing cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 487
diff changeset
2004 optInFilename, res, dmErrorStr(res));
2198
c26a51ea70be Replace label 'error' with 'exit'.
Matti Hamalainen <ccr@tnsp.org>
parents: 2183
diff changeset
2005 goto exit;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2006 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2007
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2008 // 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
2009 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
2010 {
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2011 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
2012 if (dext)
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2013 {
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2014 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
2015 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
2016 {
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2017 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
2018 formatTypeList[optOutType]);
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2019 }
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2020 }
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2021 }
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2022 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
2023 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
2024 optOutType = FFMT_ASCII;
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2025
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
2026 // 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
2027 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
2028
2097
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2029 if ((res = dmReadDataFile(inFile, NULL, &dataBufOrig, &dataSizeOrig)) != DMERR_OK)
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2030 {
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2031 dmErrorMsg("Could not read input: %s.\n", dmErrorStr(res));
2198
c26a51ea70be Replace label 'error' with 'exit'.
Matti Hamalainen <ccr@tnsp.org>
parents: 2183
diff changeset
2032 goto exit;
2097
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2033 }
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2034
1664
9181d9148654 Fix a minor memory leak and file descriptor leak.
Matti Hamalainen <ccr@tnsp.org>
parents: 1640
diff changeset
2035 fclose(inFile);
9181d9148654 Fix a minor memory leak and file descriptor leak.
Matti Hamalainen <ccr@tnsp.org>
parents: 1640
diff changeset
2036
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
2037 // 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
2038 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
2039 {
2010
09d548b08150 Improve input skip option messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 2006
diff changeset
2040 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
2041 optInSkip, optInSkip, dataSizeOrig);
2198
c26a51ea70be Replace label 'error' with 'exit'.
Matti Hamalainen <ccr@tnsp.org>
parents: 2183
diff changeset
2042 goto exit;
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
2043 }
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
2044
2005
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2045 if (optInSkipNeg)
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2046 {
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2047 dataBuf = dataBufOrig + dataSizeOrig - optInSkip;
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2048 dataSize = optInSkip;
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2049 dataRealOffs = dataSizeOrig - optInSkip;
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2050
2010
09d548b08150 Improve input skip option messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 2006
diff changeset
2051 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
2052 optInSkip, optInSkip,
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2053 dataRealOffs, dataRealOffs,
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2054 dataSize, dataSize);
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2055
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2056 }
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2057 else
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2058 {
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2059 dataBuf = dataBufOrig + optInSkip;
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2060 dataSize = dataSizeOrig - optInSkip;
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2061 dataRealOffs = optInSkip;
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2062
2010
09d548b08150 Improve input skip option messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 2006
diff changeset
2063 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
2064 optInSkip, optInSkip,
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2065 dataSize, dataSize);
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2066 }
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
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 // 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
2069 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
2070 optInFormat = optForcedInSubFormat;
1869
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
2071
1479
c4755b73b93c Improve how input skipping is done. This, however, currently breaks skipping for
Matti Hamalainen <ccr@tnsp.org>
parents: 1470
diff changeset
2072 // 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
2073 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
2074 {
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2075 // Probe for format
516
6f141f760c54 Constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 509
diff changeset
2076 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
2077 DMGrowBuf tbuf;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2078
1867
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
2079 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
2080 {
1867
15cbf17a8ea6 Make output format -f option symmetric with the -i input format option.
Matti Hamalainen <ccr@tnsp.org>
parents: 1866
diff changeset
2081 forced = &dmC64ImageFormats[optForcedInSubFormat];
1869
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
2082 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
2083 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
2084 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2085
1747
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1730
diff changeset
2086 res = dmC64DecodeBMP(&inC64Image,
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1730
diff changeset
2087 dmGrowBufConstCreateFrom(&tbuf, dataBuf, dataSize),
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1730
diff changeset
2088 0, 2, &inC64Fmt, forced);
5e928618fdc8 Change DMGrowBuf API somewhat and implement more copy operations.
Matti Hamalainen <ccr@tnsp.org>
parents: 1730
diff changeset
2089
1630
00e0d345e7f1 Improve autoprobing error handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1629
diff changeset
2090 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
2091 {
1522
0d1cf72fb732 Clarify the "probed" messages of gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1514
diff changeset
2092 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
2093 inC64Fmt->name, inC64Fmt->format->type, inC64Fmt->fext);
1630
00e0d345e7f1 Improve autoprobing error handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1629
diff changeset
2094
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2095 optInType = FFMT_BITMAP;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2096 }
897
9541ea963e75 Add some error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 871
diff changeset
2097 else
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2098 if (res != DMERR_OK && (forced != NULL || optInType == FFMT_BITMAP))
897
9541ea963e75 Add some error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 871
diff changeset
2099 {
1464
73e00bf7531c Improve one error message by showing the error code.
Matti Hamalainen <ccr@tnsp.org>
parents: 1457
diff changeset
2100 dmErrorMsg("Could not decode input image: %s.\n", dmErrorStr(res));
2198
c26a51ea70be Replace label 'error' with 'exit'.
Matti Hamalainen <ccr@tnsp.org>
parents: 2183
diff changeset
2101 goto exit;
897
9541ea963e75 Add some error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 871
diff changeset
2102 }
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2103 }
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2104
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2105 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
2106 {
1616
36d073c45327 Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1609
diff changeset
2107 const DMImageFormat *ifmt = NULL;
435
e4a3f183e463 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 432
diff changeset
2108 int index;
465
ffd5e730d313 Adjust verbosity levels.
Matti Hamalainen <ccr@tnsp.org>
parents: 463
diff changeset
2109 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
2110 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
2111 {
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2112 optInType = FFMT_IMAGE;
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2113 optInFormat = index;
1869
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
2114 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
2115 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2116 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2117
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2118 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
2119 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
2120 dmErrorMsg("No input format specified, and could not be determined automatically.\n");
2198
c26a51ea70be Replace label 'error' with 'exit'.
Matti Hamalainen <ccr@tnsp.org>
parents: 2183
diff changeset
2121 goto exit;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2122 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2123
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2124 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
2125 dmGetConvFormat(optOutType, optOutFormat, &outFormat))
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2126 {
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2127 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
2128 inFormat.name, inFormat.fext,
1067df067f28 Improve input/output format probe/forcing and related messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1867
diff changeset
2129 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
2130 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2131
2058
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2132 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
2133 {
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2134 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
2135 if (inC64Fmt != NULL)
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2136 {
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2137 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
2138 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
2139 }
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2140
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2141 switch (optScaleMode)
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2142 {
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2143 case SCALE_AUTO:
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2144 optSpec.scaleX = scaleX;
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2145 optSpec.scaleY = scaleY;
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2146 break;
2070
41df24d1dfb6 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 2065
diff changeset
2147
2058
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2148 case SCALE_RELATIVE:
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2149 optSpec.scaleX *= scaleX;
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2150 optSpec.scaleY *= scaleY;
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2151 break;
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2152 }
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2153 }
020f2151949a Implement support for the c64 format aspect rations and automatic scaling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2052
diff changeset
2154
2208
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
2155 if (optC64PaletteFile != NULL)
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
2156 {
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
2157 if ((res = dmHandleExternalPalette(optC64PaletteFile, &optC64Spec.pal)) != DMERR_OK)
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
2158 goto exit;
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
2159 }
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
2160 else
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
2161 {
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
2162 // No palette file specified, use internal palette
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
2163 if (optC64Palette == NULL)
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
2164 optC64Palette = &dmC64DefaultPalettes[0];
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
2165
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
2166 dmMsg(1, "Using internal palette '%s' (%s).\n",
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
2167 optC64Palette->name, optC64Palette->desc);
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
2168
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
2169 optC64Spec.cpal = optC64Palette;
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
2170
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
2171 if ((res = dmC64PaletteFromC64Palette(&optC64Spec.pal, optC64Palette, FALSE)) != DMERR_OK)
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
2172 {
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
2173 dmErrorMsg("Could not setup palette: %s\n",
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
2174 dmErrorStr(res));
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
2175 goto exit;
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
2176 }
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
2177 }
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
2178
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2179 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
2180 {
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2181 case FFMT_SPRITE:
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2182 case FFMT_CHAR:
2005
2ff214f811b4 Implement negative input data skip values for gfxconv -s option.
Matti Hamalainen <ccr@tnsp.org>
parents: 2004
diff changeset
2183 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
2184 break;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
2185
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2186 case FFMT_BITMAP:
2097
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2187 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
2188 {
2097
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2189 dmErrorMsg("Output filename not set, required for bitmap formats.\n");
2198
c26a51ea70be Replace label 'error' with 'exit'.
Matti Hamalainen <ccr@tnsp.org>
parents: 2183
diff changeset
2190 goto exit;
2097
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2191 }
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2192
2097
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2193 switch (optOutType)
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2194 {
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2195 case FFMT_IMAGE:
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2196 case FFMT_CHAR:
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2197 case FFMT_SPRITE:
2123
47ddbedf5b56 Add initial support to 64vw and gfxconv for viewing and converting character
Matti Hamalainen <ccr@tnsp.org>
parents: 2120
diff changeset
2198 // Set character data if required
47ddbedf5b56 Add initial support to 64vw and gfxconv for viewing and converting character
Matti Hamalainen <ccr@tnsp.org>
parents: 2120
diff changeset
2199 if ((inC64Fmt->format->type & D64_FMT_CHAR) &&
2126
cffadb745484 Fix character ROM data handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2125
diff changeset
2200 inC64Image->charData[0].data == NULL)
2123
47ddbedf5b56 Add initial support to 64vw and gfxconv for viewing and converting character
Matti Hamalainen <ccr@tnsp.org>
parents: 2120
diff changeset
2201 {
2126
cffadb745484 Fix character ROM data handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2125
diff changeset
2202 // Check character ROM filename
cffadb745484 Fix character ROM data handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2125
diff changeset
2203 if (optCharROMFilename == NULL)
cffadb745484 Fix character ROM data handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2125
diff changeset
2204 optCharROMFilename = DM_DEF_CHARGEN;
cffadb745484 Fix character ROM data handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2125
diff changeset
2205
2123
47ddbedf5b56 Add initial support to 64vw and gfxconv for viewing and converting character
Matti Hamalainen <ccr@tnsp.org>
parents: 2120
diff changeset
2206 // Attempt to read character ROM
47ddbedf5b56 Add initial support to 64vw and gfxconv for viewing and converting character
Matti Hamalainen <ccr@tnsp.org>
parents: 2120
diff changeset
2207 dmMsg(1, "Using character ROM file '%s'.\n",
47ddbedf5b56 Add initial support to 64vw and gfxconv for viewing and converting character
Matti Hamalainen <ccr@tnsp.org>
parents: 2120
diff changeset
2208 optCharROMFilename);
47ddbedf5b56 Add initial support to 64vw and gfxconv for viewing and converting character
Matti Hamalainen <ccr@tnsp.org>
parents: 2120
diff changeset
2209
47ddbedf5b56 Add initial support to 64vw and gfxconv for viewing and converting character
Matti Hamalainen <ccr@tnsp.org>
parents: 2120
diff changeset
2210 if ((res = dmReadDataFile(NULL, optCharROMFilename,
2126
cffadb745484 Fix character ROM data handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2125
diff changeset
2211 &inC64Image->charData[0].data,
cffadb745484 Fix character ROM data handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2125
diff changeset
2212 &inC64Image->charData[0].size)) != DMERR_OK)
2123
47ddbedf5b56 Add initial support to 64vw and gfxconv for viewing and converting character
Matti Hamalainen <ccr@tnsp.org>
parents: 2120
diff changeset
2213 {
47ddbedf5b56 Add initial support to 64vw and gfxconv for viewing and converting character
Matti Hamalainen <ccr@tnsp.org>
parents: 2120
diff changeset
2214 dmErrorMsg("Could not read character ROM from '%s'.\n",
47ddbedf5b56 Add initial support to 64vw and gfxconv for viewing and converting character
Matti Hamalainen <ccr@tnsp.org>
parents: 2120
diff changeset
2215 optCharROMFilename);
2198
c26a51ea70be Replace label 'error' with 'exit'.
Matti Hamalainen <ccr@tnsp.org>
parents: 2183
diff changeset
2216 goto exit;
2123
47ddbedf5b56 Add initial support to 64vw and gfxconv for viewing and converting character
Matti Hamalainen <ccr@tnsp.org>
parents: 2120
diff changeset
2217 }
47ddbedf5b56 Add initial support to 64vw and gfxconv for viewing and converting character
Matti Hamalainen <ccr@tnsp.org>
parents: 2120
diff changeset
2218 }
47ddbedf5b56 Add initial support to 64vw and gfxconv for viewing and converting character
Matti Hamalainen <ccr@tnsp.org>
parents: 2120
diff changeset
2219
47ddbedf5b56 Add initial support to 64vw and gfxconv for viewing and converting character
Matti Hamalainen <ccr@tnsp.org>
parents: 2120
diff changeset
2220 // Convert the image
2208
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
2221 res = dmC64ConvertBMP2Image(&outImage, inC64Image, inC64Fmt, &optC64Spec);
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2222
2097
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2223 if (res != DMERR_OK || outImage == NULL)
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2224 {
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2225 dmErrorMsg("Error in bitmap to image conversion.\n");
2198
c26a51ea70be Replace label 'error' with 'exit'.
Matti Hamalainen <ccr@tnsp.org>
parents: 2183
diff changeset
2226 goto exit;
2097
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2227 }
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2228
2097
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2229 switch (optOutType)
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2230 {
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2231 case FFMT_IMAGE:
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2232 res = dmWriteImage(optOutFilename, outImage, &optSpec,
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2233 &dmImageFormatList[optOutFormat], TRUE);
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2234 break;
1874
b386d339056f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1873
diff changeset
2235
2097
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2236 case FFMT_CHAR:
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2237 case FFMT_SPRITE:
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2238 res = dmWriteSpritesAndChars(optOutFilename, outImage,
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2239 optOutType, optInMulticolor);
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2240 break;
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2241 }
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2242 break;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2243
2097
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2244 case FFMT_BITMAP:
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2245 if ((res = dmConvertC64Bitmap(&outC64Image, inC64Image,
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2246 &dmC64ImageFormats[optOutFormat], inC64Fmt)) != DMERR_OK)
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2247 {
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2248 dmErrorMsg("Error in bitmap format conversion.\n");
2198
c26a51ea70be Replace label 'error' with 'exit'.
Matti Hamalainen <ccr@tnsp.org>
parents: 2183
diff changeset
2249 goto exit;
2097
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2250 }
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2251 if (dmVerbosity >= 2)
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2252 {
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2253 dmPrint(0, "INPUT:\n"); dmC64ImageDump(stderr, inC64Image, inC64Fmt, " ");
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2254 dmPrint(0, "OUTPUT:\n"); dmC64ImageDump(stderr, outC64Image, &dmC64ImageFormats[optOutFormat], " ");
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2255 }
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2256 res = dmWriteBitmap(optOutFilename, outC64Image, &dmC64ImageFormats[optOutFormat]);
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2257 break;
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
2258
2097
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2259 default:
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2260 dmErrorMsg("Unsupported output format for bitmap conversion.\n");
f43011ea9b9f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 2094
diff changeset
2261 break;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2262 }
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2263 break;
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2264
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2265 case FFMT_IMAGE:
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2266 {
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2267 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
2268 DMResource *fp;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2269
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2270 if (optOutFilename == NULL)
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2271 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
2272 dmErrorMsg("Output filename not set, required for image formats.\n");
2198
c26a51ea70be Replace label 'error' with 'exit'.
Matti Hamalainen <ccr@tnsp.org>
parents: 2183
diff changeset
2273 goto exit;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2274 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2275
1609
c29adf5ce240 Convert libgfx file format routines to use DMResource instead of stdio FILE.
Matti Hamalainen <ccr@tnsp.org>
parents: 1604
diff changeset
2276 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
2277 {
c29adf5ce240 Convert libgfx file format routines to use DMResource instead of stdio FILE.
Matti Hamalainen <ccr@tnsp.org>
parents: 1604
diff changeset
2278 dmErrorMsg("Could not create MemIO handle for input.\n");
2198
c26a51ea70be Replace label 'error' with 'exit'.
Matti Hamalainen <ccr@tnsp.org>
parents: 2183
diff changeset
2279 goto exit;
1609
c29adf5ce240 Convert libgfx file format routines to use DMResource instead of stdio FILE.
Matti Hamalainen <ccr@tnsp.org>
parents: 1604
diff changeset
2280 }
c29adf5ce240 Convert libgfx file format routines to use DMResource instead of stdio FILE.
Matti Hamalainen <ccr@tnsp.org>
parents: 1604
diff changeset
2281
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2282 // 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
2283 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
2284 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
2285 else
1874
b386d339056f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1873
diff changeset
2286 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
2287
1609
c29adf5ce240 Convert libgfx file format routines to use DMResource instead of stdio FILE.
Matti Hamalainen <ccr@tnsp.org>
parents: 1604
diff changeset
2288 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
2289
1440
a602488830fc Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1439
diff changeset
2290 if (res != DMERR_OK || inImage == NULL)
2198
c26a51ea70be Replace label 'error' with 'exit'.
Matti Hamalainen <ccr@tnsp.org>
parents: 2183
diff changeset
2291 goto exit;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
2292
1909
a323ca23f449 Rename several variables to lessen the confusion about input/output "format"
Matti Hamalainen <ccr@tnsp.org>
parents: 1897
diff changeset
2293 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
2294 {
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2295 case FFMT_IMAGE:
1811
4f141426eb31 Clean up the image format output stuff in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 1807
diff changeset
2296 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
2297 &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
2298 break;
417
9ace8a5c58d9 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
2299
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
2300 case FFMT_CHAR:
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
2301 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
2302 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
2303 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
2304 break;
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2305
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2306 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
2307 {
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2308 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
2309 res = dmC64ConvertImage2BMP(&tmpC64Image, inImage,
2208
90ec1ec89c56 Revamp the palette handling in lib64gfx somewhat, add helper functions to
Matti Hamalainen <ccr@tnsp.org>
parents: 2204
diff changeset
2310 &dmC64ImageFormats[optOutFormat], &optC64Spec);
1931
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2311
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2312 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
2313 {
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2314 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
2315 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
2316 dmErrorStr(res));
2198
c26a51ea70be Replace label 'error' with 'exit'.
Matti Hamalainen <ccr@tnsp.org>
parents: 2183
diff changeset
2317 goto exit;
1931
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2318 }
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2319
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2320 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
2321 &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
2322 {
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2323 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
2324 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
2325 dmErrorStr(res));
2198
c26a51ea70be Replace label 'error' with 'exit'.
Matti Hamalainen <ccr@tnsp.org>
parents: 2183
diff changeset
2326 goto exit;
1931
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2327 }
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2328
410679d2fe8a "Enable" the image->c64 bitmap conversion path in gfxconv. It does not work
Matti Hamalainen <ccr@tnsp.org>
parents: 1929
diff changeset
2329 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
2330 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
2331 }
489
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
2332 break;
fca3c240ccac Implement simplistic image input to char/sprite splitter conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 488
diff changeset
2333
417
9ace8a5c58d9 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
2334 default:
1874
b386d339056f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1873
diff changeset
2335 dmErrorMsg("Unsupported output format for image conversion.\n");
417
9ace8a5c58d9 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
2336 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
2337 }
806
1e4d88fbce19 Error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 799
diff changeset
2338
1e4d88fbce19 Error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 799
diff changeset
2339 if (res != DMERR_OK)
1e4d88fbce19 Error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 799
diff changeset
2340 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
2341 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
2342 dmErrorStr(res));
1e4d88fbce19 Error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 799
diff changeset
2343 }
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2344 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2345 break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2346 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2347
2198
c26a51ea70be Replace label 'error' with 'exit'.
Matti Hamalainen <ccr@tnsp.org>
parents: 2183
diff changeset
2348 exit:
c26a51ea70be Replace label 'error' with 'exit'.
Matti Hamalainen <ccr@tnsp.org>
parents: 2183
diff changeset
2349 // Cleanup
1664
9181d9148654 Fix a minor memory leak and file descriptor leak.
Matti Hamalainen <ccr@tnsp.org>
parents: 1640
diff changeset
2350 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
2351 dmFree(dataBufOrig);
1440
a602488830fc Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1439
diff changeset
2352 dmC64ImageFree(inC64Image);
1490
665a0b917d22 Begin restructuring how C64 bitmaps are converted.
Matti Hamalainen <ccr@tnsp.org>
parents: 1481
diff changeset
2353 dmC64ImageFree(outC64Image);
2052
aa8df4f1b785 Fix minor memory leaks in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2030
diff changeset
2354 dmImageFree(inImage);
aa8df4f1b785 Fix minor memory leaks in gfxconv.
Matti Hamalainen <ccr@tnsp.org>
parents: 2030
diff changeset
2355 dmImageFree(outImage);
2200
dcd26cdc395e Replace dmC64InitializeFormats() with dmLib64GFXInit() and dmLib64GFXClose().
Matti Hamalainen <ccr@tnsp.org>
parents: 2198
diff changeset
2356 dmLib64GFXClose();
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
2357
933
8fe48c08dbca Fix some memory leaks etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 931
diff changeset
2358 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
2359 }