annotate sidinfo.c @ 339:923e63b9653b

Cleanup.
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 13 Jan 2020 15:14:16 +0200
parents 7ad937740139
children 6f8c431a3040
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
1 /*
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
2 * SIDInfo - PSID/RSID information displayer
171
d86ade7d0dfd Change copyright blurbs slightly.
Matti Hamalainen <ccr@tnsp.org>
parents: 169
diff changeset
3 * Programmed and designed by Matti 'ccr' Hämäläinen <ccr@tnsp.org>
227
2b3d5d49086d Bump copyright years.
Matti Hamalainen <ccr@tnsp.org>
parents: 226
diff changeset
4 * (C) Copyright 2014-2020 Tecnic Software productions (TNSP)
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
5 */
0
8e7e08bf7b9e Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
6 #include "th_args.h"
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
7 #include "th_string.h"
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
8 #include "th_file.h"
176
2e890e3d5684 Add functionality for escaping the separator characters (-l <str> option) in printed out string data.
Matti Hamalainen <ccr@tnsp.org>
parents: 174
diff changeset
9 #include "th_datastruct.h"
70
4779bbec2f28 Split some functionality into sidlib.[ch].
Matti Hamalainen <ccr@tnsp.org>
parents: 63
diff changeset
10 #include "sidlib.h"
313
b3d46806787d Move a number of more or less generic helper functions into a separate sidutil.[ch] module.
Matti Hamalainen <ccr@tnsp.org>
parents: 311
diff changeset
11 #include "sidutil.h"
191
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
12 #include <sys/types.h>
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
13 #include <dirent.h>
70
4779bbec2f28 Split some functionality into sidlib.[ch].
Matti Hamalainen <ccr@tnsp.org>
parents: 63
diff changeset
14
0
8e7e08bf7b9e Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
15
229
080219f105ce Improve some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 227
diff changeset
16 //
28
6240788fe172 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
17 // Some constants
229
080219f105ce Improve some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 227
diff changeset
18 //
112
55d99dc7c35c Prepare for some possible future enhancements by specifying a type for each data field.
Matti Hamalainen <ccr@tnsp.org>
parents: 111
diff changeset
19 enum
55d99dc7c35c Prepare for some possible future enhancements by specifying a type for each data field.
Matti Hamalainen <ccr@tnsp.org>
parents: 111
diff changeset
20 {
157
8fc887cb56d0 Implement iconv support for converting from PSID de-facto latin-1/ISO-8859-*
Matti Hamalainen <ccr@tnsp.org>
parents: 156
diff changeset
21 OFMT_QUOTED = 0x0001,
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
22 OFMT_FORMAT = 0x0002,
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
23 };
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
24
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
25
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
26 enum
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
27 {
112
55d99dc7c35c Prepare for some possible future enhancements by specifying a type for each data field.
Matti Hamalainen <ccr@tnsp.org>
parents: 111
diff changeset
28 OTYPE_OTHER = 0,
55d99dc7c35c Prepare for some possible future enhancements by specifying a type for each data field.
Matti Hamalainen <ccr@tnsp.org>
parents: 111
diff changeset
29 OTYPE_STR = 1,
55d99dc7c35c Prepare for some possible future enhancements by specifying a type for each data field.
Matti Hamalainen <ccr@tnsp.org>
parents: 111
diff changeset
30 OTYPE_INT = 2,
55d99dc7c35c Prepare for some possible future enhancements by specifying a type for each data field.
Matti Hamalainen <ccr@tnsp.org>
parents: 111
diff changeset
31 };
55d99dc7c35c Prepare for some possible future enhancements by specifying a type for each data field.
Matti Hamalainen <ccr@tnsp.org>
parents: 111
diff changeset
32
0
8e7e08bf7b9e Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
33
8e7e08bf7b9e Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
34 typedef struct
8e7e08bf7b9e Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
35 {
63
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
36 int cmd;
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
37 char *str;
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
38 char chr;
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
39 int flags;
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
40 char *fmt;
63
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
41 } PSFStackItem;
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
42
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
43
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
44 typedef struct
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
45 {
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
46 int nitems, nallocated;
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
47 PSFStackItem *items;
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
48 } PSFStack;
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
49
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
50
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
51 typedef struct
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
52 {
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
53 char *name;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
54 char *lname;
112
55d99dc7c35c Prepare for some possible future enhancements by specifying a type for each data field.
Matti Hamalainen <ccr@tnsp.org>
parents: 111
diff changeset
55 int type;
308
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
56 char *dfmt;
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
57 } PSFOption;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
58
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
59
314
71139ed7e43f Rename #define HEX_ADDR to more informative SET_FMT_HEX_ADDR.
Matti Hamalainen <ccr@tnsp.org>
parents: 313
diff changeset
60 #define SET_FMT_HEX_ADDR "%d ($%04x)"
308
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
61
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
62 static const PSFOption optPSOptions[] =
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
63 {
308
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
64 { "Filename" , NULL , OTYPE_STR , NULL },
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
65 { "Type" , NULL , OTYPE_STR , NULL },
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
66 { "Version" , NULL , OTYPE_STR , NULL },
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
67 { "PlayerType" , "Player type" , OTYPE_STR , NULL },
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
68 { "PlayerCompat" , "Player compatibility" , OTYPE_STR , NULL },
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
69 { "VideoClock" , "Video clock speed" , OTYPE_STR , NULL },
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
70 { "SIDModel" , "SID model" , OTYPE_STR , NULL },
55
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
71
314
71139ed7e43f Rename #define HEX_ADDR to more informative SET_FMT_HEX_ADDR.
Matti Hamalainen <ccr@tnsp.org>
parents: 313
diff changeset
72 { "DataOffs" , "Data offset" , OTYPE_INT , SET_FMT_HEX_ADDR },
71139ed7e43f Rename #define HEX_ADDR to more informative SET_FMT_HEX_ADDR.
Matti Hamalainen <ccr@tnsp.org>
parents: 313
diff changeset
73 { "DataSize" , "Data size" , OTYPE_INT , SET_FMT_HEX_ADDR },
71139ed7e43f Rename #define HEX_ADDR to more informative SET_FMT_HEX_ADDR.
Matti Hamalainen <ccr@tnsp.org>
parents: 313
diff changeset
74 { "LoadAddr" , "Load address" , OTYPE_INT , SET_FMT_HEX_ADDR },
71139ed7e43f Rename #define HEX_ADDR to more informative SET_FMT_HEX_ADDR.
Matti Hamalainen <ccr@tnsp.org>
parents: 313
diff changeset
75 { "InitAddr" , "Init address" , OTYPE_INT , SET_FMT_HEX_ADDR },
71139ed7e43f Rename #define HEX_ADDR to more informative SET_FMT_HEX_ADDR.
Matti Hamalainen <ccr@tnsp.org>
parents: 313
diff changeset
76 { "PlayAddr" , "Play address" , OTYPE_INT , SET_FMT_HEX_ADDR },
308
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
77 { "Songs" , "Songs" , OTYPE_INT , "%d" },
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
78 { "StartSong" , "Start song" , OTYPE_INT , "%d" },
28
6240788fe172 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
79
308
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
80 { "SID2Model" , "2nd SID model" , OTYPE_STR , NULL },
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
81 { "SID3Model" , "3rd SID model" , OTYPE_STR , NULL },
314
71139ed7e43f Rename #define HEX_ADDR to more informative SET_FMT_HEX_ADDR.
Matti Hamalainen <ccr@tnsp.org>
parents: 313
diff changeset
82 { "SID2Addr" , "2nd SID address" , OTYPE_INT , SET_FMT_HEX_ADDR },
71139ed7e43f Rename #define HEX_ADDR to more informative SET_FMT_HEX_ADDR.
Matti Hamalainen <ccr@tnsp.org>
parents: 313
diff changeset
83 { "SID3Addr" , "3rd SID address" , OTYPE_INT , SET_FMT_HEX_ADDR },
134
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
84
308
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
85 { "Name" , NULL , OTYPE_STR , NULL },
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
86 { "Author" , NULL , OTYPE_STR , NULL },
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
87 { "Copyright" , NULL , OTYPE_STR , NULL },
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
88 { "Hash" , NULL , OTYPE_STR , NULL },
112
55d99dc7c35c Prepare for some possible future enhancements by specifying a type for each data field.
Matti Hamalainen <ccr@tnsp.org>
parents: 111
diff changeset
89
308
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
90 { "Songlengths" , "Song lengths" , OTYPE_OTHER , NULL },
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
91 { "STIL" , "STIL information" , OTYPE_OTHER , NULL },
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
92 };
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
93
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
94 static const int noptPSOptions = sizeof(optPSOptions) / sizeof(optPSOptions[0]);
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
95
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
96
28
6240788fe172 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
97 // Option variables
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
98 char *setHVSCPath = NULL,
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
99 *setSLDBPath = NULL,
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
100 *setSTILDBPath = NULL;
163
179ffe97599c Implement support for the "new" MD5 format of SLDB.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
101 BOOL setSLDBNewFormat = FALSE,
179ffe97599c Implement support for the "new" MD5 format of SLDB.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
102 optParsable = FALSE,
281
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
103 optFieldNamePrefix = TRUE,
29
d4ec69beb160 Add one line output format.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
104 optHexadecimal = FALSE,
191
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
105 optFieldOutput = TRUE,
337
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
106 optRecurseDirs = FALSE,
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
107 optShowHelp = FALSE;
180
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
108 char *optOneLineFieldSep = NULL,
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
109 *optEscapeChars = NULL;
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
110 int optNFiles = 0;
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
111
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
112 PSFStack optFormat;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
113
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
114 SIDLibSLDB *sidSLDB = NULL;
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
115 SIDLibSTILDB *sidSTILDB = NULL;
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
116
313
b3d46806787d Move a number of more or less generic helper functions into a separate sidutil.[ch] module.
Matti Hamalainen <ccr@tnsp.org>
parents: 311
diff changeset
117 SIDUtilChConvCtx setChConv;
120
ecbc8cabd6a2 Initial work on iconv support.
Matti Hamalainen <ccr@tnsp.org>
parents: 118
diff changeset
118
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
119
28
6240788fe172 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
120 // Define option arguments
121
a2c2c63311de Change in th_args API.
Matti Hamalainen <ccr@tnsp.org>
parents: 120
diff changeset
121 static const th_optarg optList[] =
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
122 {
327
b6f88c150573 Use the newly added (in th-libs th_args module) option argument name field.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
123 { 0, '?', "help" , NULL , "Show this help", OPT_NONE },
b6f88c150573 Use the newly added (in th-libs th_args module) option argument name field.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
124 { 1, 0, "license" , NULL , "Print out this program's license agreement", OPT_NONE },
328
04ed43ef97e7 Oops, restore the long --verbose option.
Matti Hamalainen <ccr@tnsp.org>
parents: 327
diff changeset
125 { 2, 'v', "verbose" , NULL , "Be more verbose", OPT_NONE },
177
6a73d17f0c34 Add a comment.
Matti Hamalainen <ccr@tnsp.org>
parents: 176
diff changeset
126
327
b6f88c150573 Use the newly added (in th-libs th_args module) option argument name field.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
127 { 3, 'p', "parsable" , NULL , "Output in script-parsable format", OPT_NONE },
b6f88c150573 Use the newly added (in th-libs th_args module) option argument name field.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
128 { 4, 'x', "hex" , NULL , "Use hexadecimal values", OPT_NONE },
b6f88c150573 Use the newly added (in th-libs th_args module) option argument name field.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
129 { 5, 'n', "noprefix" , NULL , "Output without field name prefix", OPT_NONE },
b6f88c150573 Use the newly added (in th-libs th_args module) option argument name field.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
130 { 6, 'l', "line" , "sep" , "Output in one line format, -l <field sep str>", OPT_ARGREQ },
b6f88c150573 Use the newly added (in th-libs th_args module) option argument name field.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
131 { 7, 'e', "escape" , "chars" , "Escape these characters in fields (see note)", OPT_ARGREQ },
b6f88c150573 Use the newly added (in th-libs th_args module) option argument name field.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
132 { 8, 'f', "fields" , "fields" , "Show only specified field(s)", OPT_ARGREQ },
b6f88c150573 Use the newly added (in th-libs th_args module) option argument name field.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
133 { 9, 'F', "format" , "fmt" , "Use given format string (see below)", OPT_ARGREQ },
333
f8a133d0b703 Oops, -H option index was incorrect. Fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 330
diff changeset
134 { 10, 'H', "hvsc" , "path" , "Specify path to HVSC root directory", OPT_ARGREQ },
327
b6f88c150573 Use the newly added (in th-libs th_args module) option argument name field.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
135 { 11, 'S', "sldb" , "file" , "Specify Songlengths.(txt|md5) file", OPT_ARGREQ },
b6f88c150573 Use the newly added (in th-libs th_args module) option argument name field.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
136 { 12, 'T', "stildb" , "file" , "Specify STIL.txt file", OPT_ARGREQ },
b6f88c150573 Use the newly added (in th-libs th_args module) option argument name field.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
137 { 13, 'R', "recurse" , NULL , "Recurse into sub-directories", OPT_NONE },
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
138 };
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
139
44
7b137e4e817c Fix to match the changes in th_args API.
Matti Hamalainen <ccr@tnsp.org>
parents: 41
diff changeset
140 static const int optListN = sizeof(optList) / sizeof(optList[0]);
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
141
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
142
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
143 void argShowHelp(void)
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
144 {
330
c8f52ea74803 More help cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 329
diff changeset
145 int index, width;
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
146
313
b3d46806787d Move a number of more or less generic helper functions into a separate sidutil.[ch] module.
Matti Hamalainen <ccr@tnsp.org>
parents: 311
diff changeset
147 th_print_banner(stdout, th_prog_name, "[options] <sid file|path> [file|path #2 ..]");
329
14a91c998d96 Adjust help output cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 328
diff changeset
148 th_args_help(stdout, optList, optListN, 0, 80 - 2);
14a91c998d96 Adjust help output cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 328
diff changeset
149
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
150 printf(
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
151 "\n"
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
152 "Available fields:\n");
3
dbe35d78e621 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
153
330
c8f52ea74803 More help cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 329
diff changeset
154 for (width = index = 0; index < noptPSOptions; index++)
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
155 {
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
156 const PSFOption *opt = &optPSOptions[index];
330
c8f52ea74803 More help cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 329
diff changeset
157 int len = strlen(opt->name) + 2;
c8f52ea74803 More help cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 329
diff changeset
158 width += len;
c8f52ea74803 More help cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 329
diff changeset
159 if (width >= 80 - 2)
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
160 {
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
161 printf("\n");
330
c8f52ea74803 More help cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 329
diff changeset
162 width = len;
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
163 }
330
c8f52ea74803 More help cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 329
diff changeset
164 printf("%s%s",
c8f52ea74803 More help cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 329
diff changeset
165 opt->name,
c8f52ea74803 More help cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 329
diff changeset
166 (index < noptPSOptions - 1) ? ", " : "\n");
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
167 }
58
5ea07110f0cf Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
168
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
169 printf(
330
c8f52ea74803 More help cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 329
diff changeset
170 "\n"
61
6916aaeda941 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 60
diff changeset
171 "Example: %s -x -p -f hash,copyright somesidfile.sid\n"
6916aaeda941 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 60
diff changeset
172 "\n"
330
c8f52ea74803 More help cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 329
diff changeset
173 "Format strings for '-F' option are composed of @fields@ that get expanded\n"
c8f52ea74803 More help cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 329
diff changeset
174 "to their value. Also, escape sequences \\r, \\n and \\t can be used:\n"
c8f52ea74803 More help cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 329
diff changeset
175 " -F \"hash=@hash@\\ncopy=@copyright@\\n\"\n"
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
176 "\n"
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
177 "The -F fields can be further formatted via printf-style specifiers:\n"
330
c8f52ea74803 More help cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 329
diff changeset
178 " -F \"@copyright:'%%-30s'@\"\n"
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
179 "\n"
180
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
180 "NOTE: One line output (-l <field separator>) also sets escape characters\n"
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
181 "(option -e <chars>), if escape characters have NOT been separately set.\n"
234
1c004e74d0ad Adjust --help slightly.
Matti Hamalainen <ccr@tnsp.org>
parents: 230
diff changeset
182 "\n"
1c004e74d0ad Adjust --help slightly.
Matti Hamalainen <ccr@tnsp.org>
parents: 230
diff changeset
183 "TIP: When specifying HVSC paths, it is preferable to use -H/--hvsc option,\n"
1c004e74d0ad Adjust --help slightly.
Matti Hamalainen <ccr@tnsp.org>
parents: 230
diff changeset
184 "as STIL.txt and Songlengths.(txt|md5) will be automatically used from there.\n"
287
41bde08182ce Add a line about HVSC_BASE in the --help.
Matti Hamalainen <ccr@tnsp.org>
parents: 285
diff changeset
185 "You can also set it via HVSC_BASE environment variable, see README.\n"
234
1c004e74d0ad Adjust --help slightly.
Matti Hamalainen <ccr@tnsp.org>
parents: 230
diff changeset
186 "\n"
337
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
187 "HVSC path : %s\n"
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
188 "SLDB file : %s\n"
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
189 "STIL file : %s\n"
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
190 "\n",
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
191 th_prog_name,
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
192 setHVSCPath != NULL ? setHVSCPath : "[not set]",
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
193 setSLDBPath != NULL ? setSLDBPath : "[not set]",
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
194 setSTILDBPath != NULL ? setSTILDBPath : "[not set]"
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
195 );
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
196 }
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
197
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
198
78
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
199 int argMatchPSField(const char *field)
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
200 {
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
201 int index, found = -1;
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
202 for (index = 0; index < noptPSOptions; index++)
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
203 {
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
204 const PSFOption *opt = &optPSOptions[index];
78
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
205 if (th_strcasecmp(opt->name, field) == 0)
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
206 {
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
207 if (found >= 0)
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
208 return -2;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
209 found = index;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
210 }
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
211 }
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
212
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
213 return found;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
214 }
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
215
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
216
78
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
217 int argMatchPSFieldError(const char *field)
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
218 {
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
219 int found = argMatchPSField(field);
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
220 switch (found)
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
221 {
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
222 case -1:
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
223 THERR("No such field '%s'.\n", field);
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
224 break;
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
225
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
226 case -2:
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
227 THERR("Field '%s' is ambiguous.\n", field);
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
228 break;
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
229 }
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
230 return found;
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
231 }
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
232
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
233
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
234 BOOL siStackAddItem(PSFStack *stack, const PSFStackItem *item)
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
235 {
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
236 if (stack->items == NULL || stack->nitems + 1 >= stack->nallocated)
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
237 {
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
238 stack->nallocated += 16;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
239 if ((stack->items = th_realloc(stack->items, stack->nallocated * sizeof(PSFStackItem))) == NULL)
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
240 {
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
241 THERR("Could not allocate memory for format item stack.\n");
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
242 return FALSE;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
243 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
244 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
245
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
246 memcpy(stack->items + stack->nitems, item, sizeof(PSFStackItem));
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
247 stack->nitems++;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
248 return TRUE;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
249 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
250
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
251
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
252 void siClearStack(PSFStack *stack)
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
253 {
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
254 if (stack != NULL)
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
255 {
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
256 if (stack->nitems > 0 && stack->items != NULL)
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
257 {
246
f50947e8ff93 Move two index variables from block scope to loop scope.
Matti Hamalainen <ccr@tnsp.org>
parents: 244
diff changeset
258 for (int n = 0; n < stack->nitems; n++)
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
259 {
300
85d92bcbebf3 Be more diligent about not doing structure reuse, easy to have either uninitialized
Matti Hamalainen <ccr@tnsp.org>
parents: 294
diff changeset
260 PSFStackItem *item = &stack->items[n];
85d92bcbebf3 Be more diligent about not doing structure reuse, easy to have either uninitialized
Matti Hamalainen <ccr@tnsp.org>
parents: 294
diff changeset
261 th_free(item->str);
85d92bcbebf3 Be more diligent about not doing structure reuse, easy to have either uninitialized
Matti Hamalainen <ccr@tnsp.org>
parents: 294
diff changeset
262 th_free(item->fmt);
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
263 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
264 th_free(stack->items);
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
265 }
300
85d92bcbebf3 Be more diligent about not doing structure reuse, easy to have either uninitialized
Matti Hamalainen <ccr@tnsp.org>
parents: 294
diff changeset
266
85d92bcbebf3 Be more diligent about not doing structure reuse, easy to have either uninitialized
Matti Hamalainen <ccr@tnsp.org>
parents: 294
diff changeset
267 // Clear the stack data
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
268 memset(stack, 0, sizeof(PSFStack));
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
269 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
270 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
271
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
272
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
273 BOOL argParsePSFields(PSFStack *stack, const char *fmt)
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
274 {
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
275 const char *start = fmt;
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
276 siClearStack(stack);
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
277
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
278 while (*start)
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
279 {
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
280 const char *end = strchr(start, ',');
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
281 char *field = (end != NULL) ?
116
d062312ea850 Fix th_strndup_trim() usage.
Matti Hamalainen <ccr@tnsp.org>
parents: 115
diff changeset
282 th_strndup_trim(start, end - start, TH_TRIM_BOTH) :
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
283 th_strdup_trim(start, TH_TRIM_BOTH);
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
284
118
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
285 if (field != NULL)
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
286 {
300
85d92bcbebf3 Be more diligent about not doing structure reuse, easy to have either uninitialized
Matti Hamalainen <ccr@tnsp.org>
parents: 294
diff changeset
287 PSFStackItem item;
118
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
288 int found = argMatchPSFieldError(field);
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
289 th_free(field);
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
290
118
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
291 if (found < 0)
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
292 return FALSE;
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
293
300
85d92bcbebf3 Be more diligent about not doing structure reuse, easy to have either uninitialized
Matti Hamalainen <ccr@tnsp.org>
parents: 294
diff changeset
294 memset(&item, 0, sizeof(item));
118
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
295 item.cmd = found;
308
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
296 item.fmt = th_strdup(optPSOptions[found].dfmt);
294
c9cc62e7f221 Oops. Better remember to properly always initialize PSFStackItem fields.
Matti Hamalainen <ccr@tnsp.org>
parents: 293
diff changeset
297
118
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
298 if (!siStackAddItem(stack, &item))
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
299 return FALSE;
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
300 }
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
301
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
302 if (!end)
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
303 break;
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
304
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
305 start = end + 1;
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
306 }
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
307
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
308 return TRUE;
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
309 }
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
310
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
311
283
a00d11de7a71 Staticize.
Matti Hamalainen <ccr@tnsp.org>
parents: 281
diff changeset
312 static int siItemFormatStrPutInt(th_vprintf_ctx *ctx, th_vprintf_putch vputch,
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
313 const int value, const int f_radix, int f_flags, int f_width, int f_prec,
225
15a51252b73a Adjust to fit th-libs API change for th_vprintf_altfmt_func.
Matti Hamalainen <ccr@tnsp.org>
parents: 222
diff changeset
314 const BOOL f_unsig, th_vprintf_altfmt_func f_alt)
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
315 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
316 char buf[64];
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
317 int f_len = 0, vret;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
318 BOOL f_neg = FALSE;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
319
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
320 vret = th_vprintf_buf_int(buf, sizeof(buf), &f_len, value,
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
321 f_radix, f_flags & TH_PF_UPCASE, f_unsig, &f_neg);
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
322
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
323 if (vret == EOF)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
324 return 0;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
325
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
326 return th_vprintf_put_int_format(ctx, vputch, buf, f_flags, f_width, f_prec, f_len, vret, f_neg, f_unsig, f_alt);
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
327 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
328
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
329
283
a00d11de7a71 Staticize.
Matti Hamalainen <ccr@tnsp.org>
parents: 281
diff changeset
330 static int siItemFormatStrPrintDo(th_vprintf_ctx *ctx,
a00d11de7a71 Staticize.
Matti Hamalainen <ccr@tnsp.org>
parents: 281
diff changeset
331 th_vprintf_putch vputch, const char *fmt,
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
332 const int otype, const char *d_str, const int d_int)
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
333 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
334 int ret = 0;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
335
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
336 while (*fmt)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
337 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
338 if (*fmt != '%')
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
339 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
340 if ((ret = vputch(ctx, *fmt)) == EOF)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
341 goto out;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
342 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
343 else
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
344 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
345 int f_width = -1, f_prec = -1, f_flags = 0;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
346 BOOL end = FALSE;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
347
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
348 fmt++;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
349
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
350 // Check for flags
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
351 while (!end)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
352 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
353 switch (*fmt)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
354 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
355 case '#':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
356 f_flags |= TH_PF_ALT;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
357 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
358
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
359 case '+':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
360 f_flags |= TH_PF_SIGN;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
361 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
362
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
363 case '0':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
364 f_flags |= TH_PF_ZERO;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
365 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
366
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
367 case '-':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
368 f_flags |= TH_PF_LEFT;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
369 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
370
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
371 case ' ':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
372 f_flags |= TH_PF_SPACE;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
373 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
374
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
375 case '\'':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
376 f_flags |= TH_PF_GROUP;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
377 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
378
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
379 default:
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
380 end = TRUE;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
381 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
382 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
383 if (!end) fmt++;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
384 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
385
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
386 // Get field width
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
387 if (*fmt == '*')
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
388 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
389 return -101;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
390 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
391 else
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
392 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
393 f_width = 0;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
394 while (th_isdigit(*fmt))
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
395 f_width = f_width * 10 + (*fmt++ - '0');
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
396 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
397
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
398 // Check for field precision
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
399 if (*fmt == '.')
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
400 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
401 fmt++;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
402 if (*fmt == '*')
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
403 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
404 return -102;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
405 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
406 else
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
407 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
408 // If no digit after '.', precision is to be 0
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
409 f_prec = 0;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
410 while (th_isdigit(*fmt))
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
411 f_prec = f_prec * 10 + (*fmt++ - '0');
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
412 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
413 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
414
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
415
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
416 // Check for length modifiers (only some are supported currently)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
417 switch (*fmt)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
418 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
419 case 0:
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
420 return -104;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
421
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
422 case 'o':
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
423 if (otype != OTYPE_INT) return -120;
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
424 if ((ret = siItemFormatStrPutInt(ctx, vputch, d_int, 8, f_flags, f_width, f_prec, TRUE, th_vprintf_altfmt_oct)) == EOF)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
425 goto out;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
426 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
427
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
428 case 'u':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
429 case 'i':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
430 case 'd':
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
431 if (otype != OTYPE_INT) return -120;
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
432 if ((ret = siItemFormatStrPutInt(ctx, vputch, d_int, 10, f_flags, f_width, f_prec, *fmt == 'u', NULL)) == EOF)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
433 goto out;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
434 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
435
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
436 case 'x':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
437 case 'X':
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
438 if (otype != OTYPE_INT) return -120;
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
439 if (*fmt == 'X')
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
440 f_flags |= TH_PF_UPCASE;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
441 if ((ret = siItemFormatStrPutInt(ctx, vputch, d_int, 16, f_flags, f_width, f_prec, TRUE, th_vprintf_altfmt_hex)) == EOF)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
442 goto out;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
443 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
444
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
445 case 's':
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
446 if (otype != OTYPE_STR) return -121;
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
447 if ((ret = th_vprintf_put_str(ctx, vputch, d_str, f_flags, f_width, f_prec)) == EOF)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
448 goto out;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
449 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
450
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
451 //case '%':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
452 default:
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
453 if ((ret = vputch(ctx, *fmt)) == EOF)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
454 goto out;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
455 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
456 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
457 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
458 fmt++;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
459 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
460
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
461 out:
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
462 return ret == EOF ? ret : ctx->ipos;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
463 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
464
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
465
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
466 static int siItemFormatStrPutCH(th_vprintf_ctx *ctx, const char ch)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
467 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
468 if (ctx->pos + 1 >= ctx->size)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
469 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
470 ctx->size += 64;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
471 if ((ctx->buf = th_realloc(ctx->buf, ctx->size)) == NULL)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
472 return EOF;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
473 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
474
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
475 ctx->buf[ctx->pos] = ch;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
476
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
477 ctx->pos++;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
478 ctx->ipos++;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
479 return ch;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
480 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
481
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
482
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
483 char * siItemFormatStrPrint(const char *fmt, const int otype, const char *d_str, const int d_int)
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
484 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
485 th_vprintf_ctx ctx;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
486
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
487 ctx.size = 128;
320
e315bed7d791 Minor cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 319
diff changeset
488 ctx.pos = 0;
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
489 ctx.ipos = 0;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
490
320
e315bed7d791 Minor cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 319
diff changeset
491 if ((ctx.buf = th_malloc(ctx.size)) == NULL)
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
492 return NULL;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
493
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
494 if (siItemFormatStrPrintDo(&ctx, siItemFormatStrPutCH, fmt, otype, d_str, d_int) <= 0)
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
495 goto err;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
496
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
497 if (siItemFormatStrPutCH(&ctx, 0) < 0)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
498 goto err;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
499
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
500 return ctx.buf;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
501
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
502 err:
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
503 th_free(ctx.buf);
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
504 return NULL;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
505 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
506
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
507
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
508 static int siItemFormatStrPutCHNone(th_vprintf_ctx *ctx, const char ch)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
509 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
510 ctx->pos++;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
511 ctx->ipos++;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
512 return ch;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
513 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
514
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
515
283
a00d11de7a71 Staticize.
Matti Hamalainen <ccr@tnsp.org>
parents: 281
diff changeset
516 static BOOL siItemFormatStrCheck(const char *fmt, const PSFOption *opt)
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
517 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
518 th_vprintf_ctx ctx;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
519
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
520 memset(&ctx, 0, sizeof(ctx));
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
521
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
522 return siItemFormatStrPrintDo(&ctx, siItemFormatStrPutCHNone, fmt, opt->type, NULL, 0) >= 0;
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
523 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
524
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
525
79
5709d0beb394 Avoid using a global variable here.
Matti Hamalainen <ccr@tnsp.org>
parents: 78
diff changeset
526 //
5709d0beb394 Avoid using a global variable here.
Matti Hamalainen <ccr@tnsp.org>
parents: 78
diff changeset
527 // Parse a format string into a PSFStack structure
5709d0beb394 Avoid using a global variable here.
Matti Hamalainen <ccr@tnsp.org>
parents: 78
diff changeset
528 //
283
a00d11de7a71 Staticize.
Matti Hamalainen <ccr@tnsp.org>
parents: 281
diff changeset
529 static BOOL argParsePSFormatStr(PSFStack *stack, const char *fmt)
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
530 {
83
c54d74312080 Fix some warnings.
Matti Hamalainen <ccr@tnsp.org>
parents: 82
diff changeset
531 const char *start = NULL;
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
532 int mode = 0;
113
cd97e7517e21 Simplify error handling logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
533 BOOL rval = TRUE;
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
534
79
5709d0beb394 Avoid using a global variable here.
Matti Hamalainen <ccr@tnsp.org>
parents: 78
diff changeset
535 siClearStack(stack);
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
536
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
537 while (mode != -1)
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
538 switch (mode)
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
539 {
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
540 case 0:
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
541 if (*fmt == '@')
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
542 {
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
543 start = fmt + 1;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
544 mode = 1;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
545 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
546 else
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
547 {
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
548 start = fmt;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
549 mode = 2;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
550 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
551 fmt++;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
552 break;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
553
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
554 case 1:
143
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
555 if (*fmt != '@')
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
556 {
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
557 if (*fmt == 0)
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
558 mode = -1;
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
559 fmt++;
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
560 break;
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
561 }
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
562
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
563 if (fmt - start == 0)
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
564 {
177
6a73d17f0c34 Add a comment.
Matti Hamalainen <ccr@tnsp.org>
parents: 176
diff changeset
565 // "@@" sequence, just print out @
300
85d92bcbebf3 Be more diligent about not doing structure reuse, easy to have either uninitialized
Matti Hamalainen <ccr@tnsp.org>
parents: 294
diff changeset
566 PSFStackItem item;
85d92bcbebf3 Be more diligent about not doing structure reuse, easy to have either uninitialized
Matti Hamalainen <ccr@tnsp.org>
parents: 294
diff changeset
567 memset(&item, 0, sizeof(item));
143
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
568 item.cmd = -2;
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
569 item.chr = '@';
300
85d92bcbebf3 Be more diligent about not doing structure reuse, easy to have either uninitialized
Matti Hamalainen <ccr@tnsp.org>
parents: 294
diff changeset
570
143
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
571 if (!siStackAddItem(stack, &item))
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
572 return FALSE;
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
573 }
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
574 else
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
575 {
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
576 char *fopt = NULL, *pfield, *field = th_strndup_trim(start, fmt - start, TH_TRIM_BOTH);
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
577 if ((pfield = strchr(field, ':')) != NULL)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
578 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
579 *pfield = 0;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
580 fopt = th_strdup_trim(pfield + 1, TH_TRIM_BOTH);
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
581 }
143
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
582
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
583 int ret = argMatchPSFieldError(field);
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
584 if (ret >= 0)
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
585 {
300
85d92bcbebf3 Be more diligent about not doing structure reuse, easy to have either uninitialized
Matti Hamalainen <ccr@tnsp.org>
parents: 294
diff changeset
586 PSFStackItem item;
85d92bcbebf3 Be more diligent about not doing structure reuse, easy to have either uninitialized
Matti Hamalainen <ccr@tnsp.org>
parents: 294
diff changeset
587 memset(&item, 0, sizeof(item));
143
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
588 item.cmd = ret;
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
589
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
590 if (fopt != NULL)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
591 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
592 if (siItemFormatStrCheck(fopt, &optPSOptions[item.cmd]))
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
593 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
594 item.flags |= OFMT_FORMAT;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
595 item.fmt = th_strdup(fopt);
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
596 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
597 else
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
598 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
599 THERR("Invalid field format specifier '%s' in '%s'.\n", fopt, field);
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
600 rval = FALSE;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
601 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
602 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
603
79
5709d0beb394 Avoid using a global variable here.
Matti Hamalainen <ccr@tnsp.org>
parents: 78
diff changeset
604 if (!siStackAddItem(stack, &item))
143
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
605 rval = FALSE;
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
606 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
607 else
143
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
608 rval = FALSE;
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
609
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
610 th_free(fopt);
143
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
611 th_free(field);
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
612 }
143
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
613
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
614 mode = 0;
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
615 fmt++;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
616 break;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
617
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
618 case 2:
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
619 if (*fmt == 0 || *fmt == '@')
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
620 {
300
85d92bcbebf3 Be more diligent about not doing structure reuse, easy to have either uninitialized
Matti Hamalainen <ccr@tnsp.org>
parents: 294
diff changeset
621 PSFStackItem item;
85d92bcbebf3 Be more diligent about not doing structure reuse, easy to have either uninitialized
Matti Hamalainen <ccr@tnsp.org>
parents: 294
diff changeset
622 memset(&item, 0, sizeof(item));
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
623 item.cmd = -1;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
624 item.str = th_strndup(start, fmt - start);
300
85d92bcbebf3 Be more diligent about not doing structure reuse, easy to have either uninitialized
Matti Hamalainen <ccr@tnsp.org>
parents: 294
diff changeset
625
79
5709d0beb394 Avoid using a global variable here.
Matti Hamalainen <ccr@tnsp.org>
parents: 78
diff changeset
626 if (!siStackAddItem(stack, &item))
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
627 return FALSE;
79
5709d0beb394 Avoid using a global variable here.
Matti Hamalainen <ccr@tnsp.org>
parents: 78
diff changeset
628
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
629 mode = (*fmt == 0) ? -1 : 0;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
630 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
631 else
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
632 fmt++;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
633 break;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
634 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
635
113
cd97e7517e21 Simplify error handling logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
636 return rval;
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
637 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
638
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
639
283
a00d11de7a71 Staticize.
Matti Hamalainen <ccr@tnsp.org>
parents: 281
diff changeset
640 static BOOL argHandleOpt(const int optN, char *optArg, char *currArg)
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
641 {
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
642 switch (optN)
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
643 {
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
644 case 0:
337
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
645 optShowHelp = TRUE;
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
646 break;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
647
322
5dfce66cc390 Reorder / clean up the commandline option indices.
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
648 case 1:
313
b3d46806787d Move a number of more or less generic helper functions into a separate sidutil.[ch] module.
Matti Hamalainen <ccr@tnsp.org>
parents: 311
diff changeset
649 sidutil_print_license();
173
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
650 exit(0);
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
651 break;
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
652
322
5dfce66cc390 Reorder / clean up the commandline option indices.
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
653 case 2:
172
6dcf4ca1dce7 Change to match th-libs' verbosity level changes.
Matti Hamalainen <ccr@tnsp.org>
parents: 171
diff changeset
654 th_verbosity++;
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
655 break;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
656
322
5dfce66cc390 Reorder / clean up the commandline option indices.
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
657 case 3:
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
658 optParsable = TRUE;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
659 break;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
660
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
661 case 4:
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
662 optHexadecimal = TRUE;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
663 break;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
664
7
36c43f085b28 Add NoPrefix option -n.
Matti Hamalainen <ccr@tnsp.org>
parents: 5
diff changeset
665 case 5:
281
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
666 optFieldNamePrefix = FALSE;
7
36c43f085b28 Add NoPrefix option -n.
Matti Hamalainen <ccr@tnsp.org>
parents: 5
diff changeset
667 break;
36c43f085b28 Add NoPrefix option -n.
Matti Hamalainen <ccr@tnsp.org>
parents: 5
diff changeset
668
29
d4ec69beb160 Add one line output format.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
669 case 6:
180
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
670 optOneLineFieldSep = optArg;
29
d4ec69beb160 Add one line output format.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
671 break;
d4ec69beb160 Add one line output format.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
672
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
673 case 7:
322
5dfce66cc390 Reorder / clean up the commandline option indices.
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
674 optEscapeChars = optArg;
5dfce66cc390 Reorder / clean up the commandline option indices.
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
675 break;
5dfce66cc390 Reorder / clean up the commandline option indices.
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
676
5dfce66cc390 Reorder / clean up the commandline option indices.
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
677 case 8:
5dfce66cc390 Reorder / clean up the commandline option indices.
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
678 if (!argParsePSFields(&optFormat, optArg))
5dfce66cc390 Reorder / clean up the commandline option indices.
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
679 return FALSE;
5dfce66cc390 Reorder / clean up the commandline option indices.
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
680 break;
5dfce66cc390 Reorder / clean up the commandline option indices.
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
681
5dfce66cc390 Reorder / clean up the commandline option indices.
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
682 case 9:
111
c7ecf56d23e7 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 110
diff changeset
683 optFieldOutput = FALSE;
79
5709d0beb394 Avoid using a global variable here.
Matti Hamalainen <ccr@tnsp.org>
parents: 78
diff changeset
684 if (!argParsePSFormatStr(&optFormat, optArg))
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
685 return FALSE;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
686 break;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
687
322
5dfce66cc390 Reorder / clean up the commandline option indices.
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
688 case 10:
252
9e45cb6f12a5 Use th_pstr_cpy() for setting certain variables.
Matti Hamalainen <ccr@tnsp.org>
parents: 251
diff changeset
689 th_pstr_cpy(&setHVSCPath, optArg);
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
690 break;
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
691
322
5dfce66cc390 Reorder / clean up the commandline option indices.
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
692 case 11:
252
9e45cb6f12a5 Use th_pstr_cpy() for setting certain variables.
Matti Hamalainen <ccr@tnsp.org>
parents: 251
diff changeset
693 th_pstr_cpy(&setSLDBPath, optArg);
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
694 break;
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
695
322
5dfce66cc390 Reorder / clean up the commandline option indices.
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
696 case 12:
5dfce66cc390 Reorder / clean up the commandline option indices.
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
697 th_pstr_cpy(&setSTILDBPath, optArg);
5dfce66cc390 Reorder / clean up the commandline option indices.
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
698 break;
5dfce66cc390 Reorder / clean up the commandline option indices.
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
699
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
700 case 13:
191
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
701 optRecurseDirs = TRUE;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
702 break;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
703
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
704 default:
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
705 THERR("Unknown option '%s'.\n", currArg);
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
706 return FALSE;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
707 }
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
708
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
709 return TRUE;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
710 }
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
711
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
712
281
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
713 static void siPrintFieldPrefixName(FILE *outFile, const char *name, const BOOL multifield)
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
714 {
281
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
715 if (optFieldNamePrefix)
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
716 {
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
717 if (optFieldOutput && optOneLineFieldSep == NULL)
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
718 fprintf(outFile, optParsable ? "%s=" : "%-20s : ", name);
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
719 else
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
720 if (multifield)
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
721 fprintf(outFile, "[%s] ", name);
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
722 }
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
723 }
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
724
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
725
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
726 static void siPrintFieldPrefix(FILE *outFile, const PSFOption *opt)
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
727 {
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
728 siPrintFieldPrefixName(outFile,
281
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
729 (optParsable || opt->lname == NULL) ? opt->name : opt->lname,
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
730 FALSE);
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
731 }
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
732
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
733
301
86f5c9ce26a8 Improve the STIL data output by not outputting field separator for the last item.
Matti Hamalainen <ccr@tnsp.org>
parents: 300
diff changeset
734 static void siPrintFieldSeparator(FILE *outFile, const BOOL multifield, const BOOL last)
33
39d9df17c8b1 Add field separator argument to -l option.
Matti Hamalainen <ccr@tnsp.org>
parents: 32
diff changeset
735 {
111
c7ecf56d23e7 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 110
diff changeset
736 if (optFieldOutput)
180
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
737 fputs(optOneLineFieldSep != NULL ? optOneLineFieldSep : "\n", outFile);
281
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
738 else
301
86f5c9ce26a8 Improve the STIL data output by not outputting field separator for the last item.
Matti Hamalainen <ccr@tnsp.org>
parents: 300
diff changeset
739 if (multifield && !last)
281
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
740 fputs(optOneLineFieldSep != NULL ? optOneLineFieldSep : ", ", outFile);
33
39d9df17c8b1 Add field separator argument to -l option.
Matti Hamalainen <ccr@tnsp.org>
parents: 32
diff changeset
741 }
39d9df17c8b1 Add field separator argument to -l option.
Matti Hamalainen <ccr@tnsp.org>
parents: 32
diff changeset
742
39d9df17c8b1 Add field separator argument to -l option.
Matti Hamalainen <ccr@tnsp.org>
parents: 32
diff changeset
743
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
744 static const char *siGetInfoFormat(const PSFStackItem *item, const int otype)
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
745 {
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
746 switch (otype)
146
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
747 {
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
748 case OTYPE_INT:
308
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
749 if (!optParsable && item->fmt != NULL)
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
750 return item->fmt;
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
751 else
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
752 return optHexadecimal ? "$%04x" : "%d";
146
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
753
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
754 case OTYPE_STR:
308
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
755 if (!optParsable && item->fmt != NULL)
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
756 return item->fmt;
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
757 else
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
758 return "%s";
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
759
155
de75385f75e2 Simplify by removing few lines of duplicate code.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
760 default:
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
761 return NULL;
146
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
762 }
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
763 }
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
764
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
765
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
766 static void siPrintPSIDInfoLine(FILE *outFile, BOOL *shown,
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
767 const char *fmt, const int otype,
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
768 const char *d_str, const int d_int,
278
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
769 const BOOL convert)
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
770 {
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
771 char *str, *tmp;
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
772
313
b3d46806787d Move a number of more or less generic helper functions into a separate sidutil.[ch] module.
Matti Hamalainen <ccr@tnsp.org>
parents: 311
diff changeset
773 if (d_str != NULL && setChConv.enabled && convert)
176
2e890e3d5684 Add functionality for escaping the separator characters (-l <str> option) in printed out string data.
Matti Hamalainen <ccr@tnsp.org>
parents: 174
diff changeset
774 {
313
b3d46806787d Move a number of more or less generic helper functions into a separate sidutil.[ch] module.
Matti Hamalainen <ccr@tnsp.org>
parents: 311
diff changeset
775 char *tmp2 = sidutil_chconv_convert(&setChConv, d_str);
316
b0c844b39516 Move and rename siEscapeString() to sidutil_escape_string() and
Matti Hamalainen <ccr@tnsp.org>
parents: 315
diff changeset
776 tmp = sidutil_escape_string(tmp2, optEscapeChars);
176
2e890e3d5684 Add functionality for escaping the separator characters (-l <str> option) in printed out string data.
Matti Hamalainen <ccr@tnsp.org>
parents: 174
diff changeset
777 th_free(tmp2);
2e890e3d5684 Add functionality for escaping the separator characters (-l <str> option) in printed out string data.
Matti Hamalainen <ccr@tnsp.org>
parents: 174
diff changeset
778 }
157
8fc887cb56d0 Implement iconv support for converting from PSID de-facto latin-1/ISO-8859-*
Matti Hamalainen <ccr@tnsp.org>
parents: 156
diff changeset
779 else
316
b0c844b39516 Move and rename siEscapeString() to sidutil_escape_string() and
Matti Hamalainen <ccr@tnsp.org>
parents: 315
diff changeset
780 tmp = sidutil_escape_string(d_str, optEscapeChars);
196
47f75154c7db Add internal fallback ISO-8859-1 to UTF-8 converter and improve iconv() support.
Matti Hamalainen <ccr@tnsp.org>
parents: 192
diff changeset
781
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
782 if ((str = siItemFormatStrPrint(fmt, otype, tmp, d_int)) != NULL)
146
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
783 fputs(str, outFile);
3
dbe35d78e621 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
784
146
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
785 th_free(str);
157
8fc887cb56d0 Implement iconv support for converting from PSID de-facto latin-1/ISO-8859-*
Matti Hamalainen <ccr@tnsp.org>
parents: 156
diff changeset
786 th_free(tmp);
8fc887cb56d0 Implement iconv support for converting from PSID de-facto latin-1/ISO-8859-*
Matti Hamalainen <ccr@tnsp.org>
parents: 156
diff changeset
787
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
788 *shown = TRUE;
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
789 }
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
790
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
791
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
792 #define PRS(d_str, d_conv) do { \
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
793 siPrintFieldPrefix(outFile, opt); \
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
794 siPrintPSIDInfoLine(outFile, shown, siGetInfoFormat(item, opt->type), opt->type, d_str, -1, d_conv); \
301
86f5c9ce26a8 Improve the STIL data output by not outputting field separator for the last item.
Matti Hamalainen <ccr@tnsp.org>
parents: 300
diff changeset
795 siPrintFieldSeparator(outFile, FALSE, TRUE); \
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
796 } while (0)
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
797
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
798 #define PRI(d_int) do { \
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
799 siPrintFieldPrefix(outFile, opt); \
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
800 siPrintPSIDInfoLine(outFile, shown, siGetInfoFormat(item, opt->type), opt->type, NULL, d_int, FALSE); \
301
86f5c9ce26a8 Improve the STIL data output by not outputting field separator for the last item.
Matti Hamalainen <ccr@tnsp.org>
parents: 300
diff changeset
801 siPrintFieldSeparator(outFile, FALSE, TRUE); \
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
802 } while (0)
9
c1fba4abf56f Make filename printing optional.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
803
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
804
226
c32015f4969e Rename PSIDHeader struct to SIDLibPSIDHeader to conform with the SIDLib
Matti Hamalainen <ccr@tnsp.org>
parents: 225
diff changeset
805 static void siPrintPSIDInformationField(FILE *outFile, const char *filename,
c32015f4969e Rename PSIDHeader struct to SIDLibPSIDHeader to conform with the SIDLib
Matti Hamalainen <ccr@tnsp.org>
parents: 225
diff changeset
806 const SIDLibPSIDHeader *psid, BOOL *shown, const PSFStackItem *item)
55
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
807 {
114
cc74a9871a44 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 113
diff changeset
808 const PSFOption *opt = &optPSOptions[item->cmd];
150
0288c4d138f7 Make the hash field also formattable.
Matti Hamalainen <ccr@tnsp.org>
parents: 148
diff changeset
809 char tmp[128];
146
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
810
114
cc74a9871a44 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 113
diff changeset
811 switch (item->cmd)
35
79e6d08b473f Add more information fields, including SID model, video clock speed, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
diff changeset
812 {
156
717d143612e2 Simplify things by having separate PRS/PRI macros for printing string and
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
813 case 0: PRS(filename, FALSE); break;
717d143612e2 Simplify things by having separate PRS/PRI macros for printing string and
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
814 case 1: PRS(psid->magic, FALSE); break;
146
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
815 case 2:
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
816 snprintf(tmp, sizeof(tmp), "%d.%d", (psid->version & 0xff), (psid->version >> 8));
156
717d143612e2 Simplify things by having separate PRS/PRI macros for printing string and
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
817 PRS(tmp, FALSE);
146
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
818 break;
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
819 case 3:
156
717d143612e2 Simplify things by having separate PRS/PRI macros for printing string and
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
820 PRS((psid->flags & PSF_PLAYER_TYPE) ? "Compute! SIDPlayer MUS" : "Normal built-in", FALSE);
146
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
821 break;
55
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
822 case 4:
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
823 if (psid->version >= 2)
156
717d143612e2 Simplify things by having separate PRS/PRI macros for printing string and
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
824 PRS((psid->flags & PSF_PLAYSID_TUNE) ? (psid->isRSID ? "C64 BASIC" : "PlaySID") : "C64 compatible", FALSE);
55
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
825 break;
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
826 case 5:
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
827 if (psid->version >= 2)
222
3a01518fffe0 Rename sidlib functions from si_* prefix to sidlib_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
828 PRS(sidlib_get_sid_clock_str((psid->flags >> 2) & PSF_CLOCK_MASK), FALSE);
55
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
829 break;
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
830 case 6:
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
831 if (psid->version >= 2)
222
3a01518fffe0 Rename sidlib functions from si_* prefix to sidlib_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
832 PRS(sidlib_get_sid_model_str((psid->flags >> 4) & PSF_MODEL_MASK), FALSE);
55
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
833 break;
35
79e6d08b473f Add more information fields, including SID model, video clock speed, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
diff changeset
834
156
717d143612e2 Simplify things by having separate PRS/PRI macros for printing string and
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
835 case 7: PRI(psid->dataOffset); break;
717d143612e2 Simplify things by having separate PRS/PRI macros for printing string and
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
836 case 8: PRI(psid->dataSize); break;
717d143612e2 Simplify things by having separate PRS/PRI macros for printing string and
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
837 case 9: PRI(psid->loadAddress); break;
717d143612e2 Simplify things by having separate PRS/PRI macros for printing string and
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
838 case 10: PRI(psid->initAddress); break;
717d143612e2 Simplify things by having separate PRS/PRI macros for printing string and
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
839 case 11: PRI(psid->playAddress); break;
717d143612e2 Simplify things by having separate PRS/PRI macros for printing string and
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
840 case 12: PRI(psid->nSongs); break;
717d143612e2 Simplify things by having separate PRS/PRI macros for printing string and
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
841 case 13: PRI(psid->startSong); break;
134
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
842
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
843 case 14:
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
844 if (psid->version >= 3)
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
845 {
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
846 int flags = (psid->flags >> 6) & PSF_MODEL_MASK;
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
847 if (flags == PSF_MODEL_UNKNOWN)
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
848 flags = (psid->flags >> 4) & PSF_MODEL_MASK;
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
849
222
3a01518fffe0 Rename sidlib functions from si_* prefix to sidlib_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
850 PRS(sidlib_get_sid_model_str(flags), FALSE);
134
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
851 }
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
852 break;
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
853 case 15:
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
854 if (psid->version >= 4)
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
855 {
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
856 int flags = (psid->flags >> 8) & PSF_MODEL_MASK;
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
857 if (flags == PSF_MODEL_UNKNOWN)
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
858 flags = (psid->flags >> 4) & PSF_MODEL_MASK;
35
79e6d08b473f Add more information fields, including SID model, video clock speed, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
diff changeset
859
222
3a01518fffe0 Rename sidlib functions from si_* prefix to sidlib_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
860 PRS(sidlib_get_sid_model_str(flags), FALSE);
134
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
861 }
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
862 break;
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
863 case 16:
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
864 if (psid->version >= 3)
156
717d143612e2 Simplify things by having separate PRS/PRI macros for printing string and
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
865 PRI(0xD000 | (psid->sid2Addr << 4));
134
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
866 break;
55
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
867 case 17:
134
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
868 if (psid->version >= 4)
156
717d143612e2 Simplify things by having separate PRS/PRI macros for printing string and
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
869 PRI(0xD000 | (psid->sid3Addr << 4));
134
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
870 break;
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
871
156
717d143612e2 Simplify things by having separate PRS/PRI macros for printing string and
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
872 case 18: PRS(psid->sidName, TRUE); break;
717d143612e2 Simplify things by having separate PRS/PRI macros for printing string and
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
873 case 19: PRS(psid->sidAuthor, TRUE); break;
717d143612e2 Simplify things by having separate PRS/PRI macros for printing string and
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
874 case 20: PRS(psid->sidCopyright, TRUE); break;
134
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
875
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
876 case 21:
140
9f96b37c4f75 Don't print songlengths field if there are none.
Matti Hamalainen <ccr@tnsp.org>
parents: 138
diff changeset
877 {
150
0288c4d138f7 Make the hash field also formattable.
Matti Hamalainen <ccr@tnsp.org>
parents: 148
diff changeset
878 size_t i, k;
0288c4d138f7 Make the hash field also formattable.
Matti Hamalainen <ccr@tnsp.org>
parents: 148
diff changeset
879 for (i = k = 0; i < TH_MD5HASH_LENGTH && k < sizeof(tmp) - 1; i++, k += 2)
0288c4d138f7 Make the hash field also formattable.
Matti Hamalainen <ccr@tnsp.org>
parents: 148
diff changeset
880 sprintf(&tmp[k], "%02x", psid->hash[i]);
0288c4d138f7 Make the hash field also formattable.
Matti Hamalainen <ccr@tnsp.org>
parents: 148
diff changeset
881
156
717d143612e2 Simplify things by having separate PRS/PRI macros for printing string and
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
882 PRS(tmp, FALSE);
140
9f96b37c4f75 Don't print songlengths field if there are none.
Matti Hamalainen <ccr@tnsp.org>
parents: 138
diff changeset
883 }
55
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
884 break;
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
885
134
b9a3f93f69d1 Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
886 case 22:
142
da29f147afcb Better check for number of songlengths.
Matti Hamalainen <ccr@tnsp.org>
parents: 141
diff changeset
887 if (psid->lengths != NULL && psid->lengths->nlengths > 0)
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
888 {
140
9f96b37c4f75 Don't print songlengths field if there are none.
Matti Hamalainen <ccr@tnsp.org>
parents: 138
diff changeset
889 siPrintFieldPrefix(outFile, opt);
246
f50947e8ff93 Move two index variables from block scope to loop scope.
Matti Hamalainen <ccr@tnsp.org>
parents: 244
diff changeset
890 for (int i = 0; i < psid->lengths->nlengths; i++)
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
891 {
114
cc74a9871a44 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 113
diff changeset
892 int len = psid->lengths->lengths[i];
279
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
893
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
894 snprintf(tmp, sizeof(tmp), "%d:%02d%s",
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
895 len / 60, len % 60,
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
896 (i < psid->lengths->nlengths - 1) ? ", " : "");
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
897
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
898 siPrintPSIDInfoLine(outFile, shown,
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
899 siGetInfoFormat(item, OTYPE_STR),
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
900 OTYPE_STR,
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
901 tmp,
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
902 -1, FALSE);
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
903 }
301
86f5c9ce26a8 Improve the STIL data output by not outputting field separator for the last item.
Matti Hamalainen <ccr@tnsp.org>
parents: 300
diff changeset
904 siPrintFieldSeparator(outFile, FALSE, TRUE);
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
905 }
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
906 break;
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
907
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
908 case 23:
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
909 if (psid->stil != NULL)
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
910 {
301
86f5c9ce26a8 Improve the STIL data output by not outputting field separator for the last item.
Matti Hamalainen <ccr@tnsp.org>
parents: 300
diff changeset
911 int nfieldn = 0, nfieldcount = 0;
86f5c9ce26a8 Improve the STIL data output by not outputting field separator for the last item.
Matti Hamalainen <ccr@tnsp.org>
parents: 300
diff changeset
912
86f5c9ce26a8 Improve the STIL data output by not outputting field separator for the last item.
Matti Hamalainen <ccr@tnsp.org>
parents: 300
diff changeset
913 // We need to count the number of fields to be outputted
86f5c9ce26a8 Improve the STIL data output by not outputting field separator for the last item.
Matti Hamalainen <ccr@tnsp.org>
parents: 300
diff changeset
914 // beforehand, so we can know when we are at the last one
311
ee56f1f2b528 Change how the STIL subtune are handled internally. Also fix a bug that
Matti Hamalainen <ccr@tnsp.org>
parents: 309
diff changeset
915 for (size_t nsubtune = 0; nsubtune < psid->stil->nsubtunes; nsubtune++)
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
916 {
311
ee56f1f2b528 Change how the STIL subtune are handled internally. Also fix a bug that
Matti Hamalainen <ccr@tnsp.org>
parents: 309
diff changeset
917 SIDLibSTILSubTune *subtune = &psid->stil->subtunes[nsubtune];
301
86f5c9ce26a8 Improve the STIL data output by not outputting field separator for the last item.
Matti Hamalainen <ccr@tnsp.org>
parents: 300
diff changeset
918 for (int nfield = 0; nfield < STF_LAST; nfield++)
303
c2f0e8fbcac3 Oops, forgot NULL checks for STIL subtunes. Should not be coding tired, deserve much spanking.
Matti Hamalainen <ccr@tnsp.org>
parents: 301
diff changeset
919 nfieldcount += subtune->fields[nfield].ndata;
301
86f5c9ce26a8 Improve the STIL data output by not outputting field separator for the last item.
Matti Hamalainen <ccr@tnsp.org>
parents: 300
diff changeset
920 }
86f5c9ce26a8 Improve the STIL data output by not outputting field separator for the last item.
Matti Hamalainen <ccr@tnsp.org>
parents: 300
diff changeset
921
311
ee56f1f2b528 Change how the STIL subtune are handled internally. Also fix a bug that
Matti Hamalainen <ccr@tnsp.org>
parents: 309
diff changeset
922 for (size_t nsubtune = 0; nsubtune < psid->stil->nsubtunes; nsubtune++)
301
86f5c9ce26a8 Improve the STIL data output by not outputting field separator for the last item.
Matti Hamalainen <ccr@tnsp.org>
parents: 300
diff changeset
923 {
311
ee56f1f2b528 Change how the STIL subtune are handled internally. Also fix a bug that
Matti Hamalainen <ccr@tnsp.org>
parents: 309
diff changeset
924 SIDLibSTILSubTune *subtune = &psid->stil->subtunes[nsubtune];
281
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
925 int maxdata = 0;
301
86f5c9ce26a8 Improve the STIL data output by not outputting field separator for the last item.
Matti Hamalainen <ccr@tnsp.org>
parents: 300
diff changeset
926
86f5c9ce26a8 Improve the STIL data output by not outputting field separator for the last item.
Matti Hamalainen <ccr@tnsp.org>
parents: 300
diff changeset
927 // For each subtune we need to check the max number of field data items
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
928 for (int nfield = 0; nfield < STF_LAST; nfield++)
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
929 {
303
c2f0e8fbcac3 Oops, forgot NULL checks for STIL subtunes. Should not be coding tired, deserve much spanking.
Matti Hamalainen <ccr@tnsp.org>
parents: 301
diff changeset
930 SIDLibSTILField *fld = &subtune->fields[nfield];
281
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
931 if (fld->ndata > maxdata)
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
932 maxdata = fld->ndata;
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
933 }
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
934
301
86f5c9ce26a8 Improve the STIL data output by not outputting field separator for the last item.
Matti Hamalainen <ccr@tnsp.org>
parents: 300
diff changeset
935 // Now output the items in field order
281
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
936 for (int nitem = 0; nitem < maxdata; nitem++)
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
937 for (int nfield = 0; nfield < STF_LAST; nfield++)
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
938 {
303
c2f0e8fbcac3 Oops, forgot NULL checks for STIL subtunes. Should not be coding tired, deserve much spanking.
Matti Hamalainen <ccr@tnsp.org>
parents: 301
diff changeset
939 SIDLibSTILField *fld = &subtune->fields[nfield];
281
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
940 if (nitem < fld->ndata)
279
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
941 {
281
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
942 if (nsubtune > 0)
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
943 {
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
944 snprintf(tmp, sizeof(tmp), "STIL#%d/%s",
311
ee56f1f2b528 Change how the STIL subtune are handled internally. Also fix a bug that
Matti Hamalainen <ccr@tnsp.org>
parents: 309
diff changeset
945 subtune->tune, sidlib_stil_fields[nfield]);
281
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
946 }
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
947 else
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
948 {
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
949 snprintf(tmp, sizeof(tmp), "STIL/%s",
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
950 sidlib_stil_fields[nfield]);
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
951 }
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
952
281
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
953 siPrintFieldPrefixName(outFile, tmp, TRUE);
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
954 siPrintPSIDInfoLine(outFile, shown,
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
955 siGetInfoFormat(item, OTYPE_STR),
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
956 OTYPE_STR,
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
957 fld->data[nitem],
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
958 -1, TRUE);
301
86f5c9ce26a8 Improve the STIL data output by not outputting field separator for the last item.
Matti Hamalainen <ccr@tnsp.org>
parents: 300
diff changeset
959
86f5c9ce26a8 Improve the STIL data output by not outputting field separator for the last item.
Matti Hamalainen <ccr@tnsp.org>
parents: 300
diff changeset
960 siPrintFieldSeparator(outFile, TRUE,
86f5c9ce26a8 Improve the STIL data output by not outputting field separator for the last item.
Matti Hamalainen <ccr@tnsp.org>
parents: 300
diff changeset
961 ++nfieldn >= nfieldcount);
281
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
962 }
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
963 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
964 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
965 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
966 break;
29
d4ec69beb160 Add one line output format.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
967 }
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
968 }
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
969
0
8e7e08bf7b9e Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
970
269
cea4a7df9efd Rename siError() to siPSIDError() and make the printed output more logical.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
971 void siPSIDError(th_ioctx *fh, const int err, const char *msg)
187
cf081a98dccd Improve error output.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
972 {
cf081a98dccd Improve error output.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
973 (void) err;
269
cea4a7df9efd Rename siError() to siPSIDError() and make the printed output more logical.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
974 THERR("%s - %s\n", msg, fh->filename);
187
cf081a98dccd Improve error output.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
975 }
cf081a98dccd Improve error output.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
976
cf081a98dccd Improve error output.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
977
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
978 void siSTILError(th_ioctx *fh, const int err, const char *msg)
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
979 {
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
980 (void) err;
293
c3ebab7f9094 Fix one more format string to use proper PRIu_SIZE_T.
Matti Hamalainen <ccr@tnsp.org>
parents: 291
diff changeset
981 THERR("[%s:%" PRIu_SIZE_T "] %s\n", fh->filename, fh->line, msg);
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
982 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
983
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
984
191
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
985 BOOL siHandleSIDFile(const char *filename)
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
986 {
226
c32015f4969e Rename PSIDHeader struct to SIDLibPSIDHeader to conform with the SIDLib
Matti Hamalainen <ccr@tnsp.org>
parents: 225
diff changeset
987 SIDLibPSIDHeader *psid = NULL;
85
4c0ecb078591 Rename various variables and functions and change relevant places to use the
Matti Hamalainen <ccr@tnsp.org>
parents: 83
diff changeset
988 th_ioctx *inFile = NULL;
4c0ecb078591 Rename various variables and functions and change relevant places to use the
Matti Hamalainen <ccr@tnsp.org>
parents: 83
diff changeset
989 FILE *outFile;
55
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
990 BOOL shown = FALSE;
186
2f129ea15405 Adjust to new th_io_fopen() API.
Matti Hamalainen <ccr@tnsp.org>
parents: 181
diff changeset
991 int res;
55
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
992
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
993 outFile = stdout;
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
994
186
2f129ea15405 Adjust to new th_io_fopen() API.
Matti Hamalainen <ccr@tnsp.org>
parents: 181
diff changeset
995 if ((res = th_io_fopen(&inFile, &th_stdio_io_ops, filename, "rb")) != THERR_OK)
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
996 {
186
2f129ea15405 Adjust to new th_io_fopen() API.
Matti Hamalainen <ccr@tnsp.org>
parents: 181
diff changeset
997 THERR("Could not open file '%s': %s\n",
2f129ea15405 Adjust to new th_io_fopen() API.
Matti Hamalainen <ccr@tnsp.org>
parents: 181
diff changeset
998 filename, th_error_str(res));
126
c1462b7880e8 Make si_read_sid_file() to allocate the PSIDHeader struct itself, adjust
Matti Hamalainen <ccr@tnsp.org>
parents: 125
diff changeset
999 goto error;
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1000 }
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1001
269
cea4a7df9efd Rename siError() to siPSIDError() and make the printed output more logical.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
1002 th_io_set_handlers(inFile, siPSIDError, NULL);
187
cf081a98dccd Improve error output.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
1003
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1004 // Read PSID data
319
6d0143e43edf Add functionality and API changes for doing on-the-fly character set
Matti Hamalainen <ccr@tnsp.org>
parents: 318
diff changeset
1005 if ((res = sidlib_read_sid_file_alloc(inFile, &psid, setSLDBNewFormat, NULL)) != THERR_OK)
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1006 goto error;
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1007
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1008 // Get songlength information, if any
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1009 if (sidSLDB != NULL)
222
3a01518fffe0 Rename sidlib functions from si_* prefix to sidlib_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
1010 psid->lengths = sidlib_sldb_get_by_hash(sidSLDB, psid->hash);
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1011
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1012 // Get STIL information, if any
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1013 if (sidSTILDB != NULL)
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1014 {
313
b3d46806787d Move a number of more or less generic helper functions into a separate sidutil.[ch] module.
Matti Hamalainen <ccr@tnsp.org>
parents: 311
diff changeset
1015 psid->stil = sidlib_stildb_get_node(sidSTILDB,
b3d46806787d Move a number of more or less generic helper functions into a separate sidutil.[ch] module.
Matti Hamalainen <ccr@tnsp.org>
parents: 311
diff changeset
1016 sidutil_strip_hvsc_path(setHVSCPath, filename));
b3d46806787d Move a number of more or less generic helper functions into a separate sidutil.[ch] module.
Matti Hamalainen <ccr@tnsp.org>
parents: 311
diff changeset
1017
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1018 if (psid->stil != NULL)
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1019 psid->stil->lengths = psid->lengths;
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1020 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1021
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1022 // Output
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
1023 for (int index = 0; index < optFormat.nitems; index++)
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
1024 {
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1025 PSFStackItem *item = &optFormat.items[index];
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1026 switch (item->cmd)
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
1027 {
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1028 case -1:
316
b0c844b39516 Move and rename siEscapeString() to sidutil_escape_string() and
Matti Hamalainen <ccr@tnsp.org>
parents: 315
diff changeset
1029 sidutil_print_string_escaped(outFile, item->str);
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1030 break;
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
1031
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1032 case -2:
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1033 fputc(item->chr, outFile);
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1034 break;
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
1035
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1036 default:
126
c1462b7880e8 Make si_read_sid_file() to allocate the PSIDHeader struct itself, adjust
Matti Hamalainen <ccr@tnsp.org>
parents: 125
diff changeset
1037 siPrintPSIDInformationField(outFile, filename, psid, &shown, item);
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1038 break;
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
1039 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
1040 }
153
e3be2ae6120e Delete trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 150
diff changeset
1041
188
489eb428cf65 Add separator empty line between "files" when in normal output mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 187
diff changeset
1042 if (optFieldOutput && shown)
55
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
1043 {
188
489eb428cf65 Add separator empty line between "files" when in normal output mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 187
diff changeset
1044 fprintf(outFile, "\n");
55
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
1045 }
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1046
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1047 // Shutdown
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1048 error:
222
3a01518fffe0 Rename sidlib functions from si_* prefix to sidlib_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
1049 sidlib_free_sid_file(psid);
85
4c0ecb078591 Rename various variables and functions and change relevant places to use the
Matti Hamalainen <ccr@tnsp.org>
parents: 83
diff changeset
1050 th_io_free(inFile);
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1051
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1052 return TRUE;
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1053 }
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1054
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1055
191
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1056 BOOL argHandleFileDir(const char *path, const char *filename, const char *pattern)
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1057 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1058 th_stat_data sdata;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1059 char *npath;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1060 BOOL ret = TRUE;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1061
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1062 if (filename != NULL)
250
cf8c31ed13ad TH_DIR_SEPARATOR define was renamed to TH_DIR_SEPARATOR_CHR in th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
1063 npath = th_strdup_printf("%s%c%s", path, TH_DIR_SEPARATOR_CHR, filename);
191
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1064 else
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1065 npath = th_strdup(path);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1066
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1067 if (!th_stat_path(npath, &sdata))
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1068 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1069 THERR("File or path '%s' does not exist.\n", npath);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1070 ret = FALSE;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1071 goto out;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1072 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1073
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1074 optNFiles++;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1075
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1076 if (sdata.flags & TH_IS_DIR)
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1077 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1078 DIR *dirh;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1079 struct dirent *entry;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1080
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1081 // Check if recursion is disabled
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1082 if (!optRecurseDirs && optNFiles > 1)
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1083 goto out;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1084
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1085 if ((dirh = opendir(npath)) == NULL)
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1086 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1087 int err = th_get_error();
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1088 THERR("Could not open directory '%s': %s\n",
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1089 path, th_error_str(err));
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1090 ret = FALSE;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1091 goto out;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1092 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1093
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1094 while ((entry = readdir(dirh)) != NULL)
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1095 if (entry->d_name[0] != '.')
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1096 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1097 if (!argHandleFileDir(npath, entry->d_name, pattern))
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1098 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1099 ret = FALSE;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1100 goto out;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1101 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1102 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1103
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1104 closedir(dirh);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1105 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1106 else
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1107 if (pattern == NULL || th_strmatch(filename, pattern))
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1108 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1109 siHandleSIDFile(npath);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1110 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1111
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1112 out:
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1113 th_free(npath);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1114 return ret;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1115 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1116
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1117
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1118 BOOL argHandleFile(char *path)
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1119 {
339
923e63b9653b Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 337
diff changeset
1120 char *pattern, *filename, *pt, *npath;
191
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1121 BOOL ret;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1122
238
2ed665b74043 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 236
diff changeset
1123 if ((npath = th_strdup(path)) == NULL)
191
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1124 return FALSE;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1125
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1126 // Check if we have path separators
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1127 if ((pt = strrchr(npath, '/')) != NULL ||
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1128 (pt = strrchr(npath, '\\')) != NULL)
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1129 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1130 *pt++ = 0;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1131 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1132 else
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1133 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1134 th_free(npath);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1135 npath = th_strdup(".");
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1136 pt = strcmp(path, npath) != 0 ? path : NULL;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1137 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1138
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1139 // Check if we have glob pattern chars
339
923e63b9653b Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 337
diff changeset
1140 pattern = filename = NULL;
191
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1141 if (pt != NULL && *pt != 0)
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1142 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1143 if (strchr(pt, '*') || strchr(pt, '?'))
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1144 pattern = th_strdup(pt);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1145 else
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1146 filename = th_strdup(pt);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1147 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1148
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1149 ret = argHandleFileDir(npath, filename, pattern);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1150
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1151 th_free(pattern);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1152 th_free(npath);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1153 th_free(filename);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1154 return ret;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1155 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1156
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1157
0
8e7e08bf7b9e Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1158 int main(int argc, char *argv[])
8e7e08bf7b9e Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1159 {
230
1e860046a4cc Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 229
diff changeset
1160 th_ioctx *inFile = NULL;
313
b3d46806787d Move a number of more or less generic helper functions into a separate sidutil.[ch] module.
Matti Hamalainen <ccr@tnsp.org>
parents: 311
diff changeset
1161 char *setLang = getenv("LANG");
b3d46806787d Move a number of more or less generic helper functions into a separate sidutil.[ch] module.
Matti Hamalainen <ccr@tnsp.org>
parents: 311
diff changeset
1162 int ret;
196
47f75154c7db Add internal fallback ISO-8859-1 to UTF-8 converter and improve iconv() support.
Matti Hamalainen <ccr@tnsp.org>
parents: 192
diff changeset
1163
259
4df54600633a Add support for "HVSC_BASE" environment variable as used by STILView by LaLa
Matti Hamalainen <ccr@tnsp.org>
parents: 257
diff changeset
1164 // Get HVSC_BASE env variable if it is set
4df54600633a Add support for "HVSC_BASE" environment variable as used by STILView by LaLa
Matti Hamalainen <ccr@tnsp.org>
parents: 257
diff changeset
1165 th_pstr_cpy(&setHVSCPath, getenv("HVSC_BASE"));
4df54600633a Add support for "HVSC_BASE" environment variable as used by STILView by LaLa
Matti Hamalainen <ccr@tnsp.org>
parents: 257
diff changeset
1166
0
8e7e08bf7b9e Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1167 // Initialize
309
ff93c168c4aa Bump version.
Matti Hamalainen <ccr@tnsp.org>
parents: 308
diff changeset
1168 th_init("SIDInfo", "PSID/RSID information displayer", "0.9.2",
227
2b3d5d49086d Bump copyright years.
Matti Hamalainen <ccr@tnsp.org>
parents: 226
diff changeset
1169 "By Matti 'ccr' Hamalainen (C) Copyright 2014-2020 TNSP",
173
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
1170 "This program is distributed under a 3-clause BSD -style license.");
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
1171
172
6dcf4ca1dce7 Change to match th-libs' verbosity level changes.
Matti Hamalainen <ccr@tnsp.org>
parents: 171
diff changeset
1172 th_verbosity = 0;
0
8e7e08bf7b9e Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1173
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
1174 memset(&optFormat, 0, sizeof(optFormat));
336
5c2e77ec45e8 Initialize setChConv structure with memset().
Matti Hamalainen <ccr@tnsp.org>
parents: 335
diff changeset
1175 memset(&setChConv, 0, sizeof(setChConv));
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
1176
337
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1177 // Parse command line arguments
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1178 if (!th_args_process(argc, argv, optList, optListN,
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1179 argHandleOpt, NULL, OPTH_ONLY_OPTS))
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1180 goto exit;
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1181
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1182 // Check if HVSC path is set
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1183 if (setHVSCPath != NULL)
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1184 {
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1185 // Ensure that there is a path separator at the end
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1186 if (th_strrcasecmp(setHVSCPath, TH_DIR_SEPARATOR_STR) == NULL)
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1187 th_pstr_printf(&setHVSCPath, "%s%c", setHVSCPath, TH_DIR_SEPARATOR_CHR);
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1188
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1189 // If SLDB path is not set, autocheck for .md5 and .txt
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1190 if (setSLDBPath == NULL)
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1191 setSLDBPath = sidutil_check_hvsc_file(setHVSCPath, SIDUTIL_SLDB_FILEBASE, ".md5");
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1192
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1193 if (setSLDBPath == NULL)
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1194 setSLDBPath = sidutil_check_hvsc_file(setHVSCPath, SIDUTIL_SLDB_FILEBASE, ".txt");
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1195
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1196 if (setSTILDBPath == NULL)
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1197 setSTILDBPath = sidutil_check_hvsc_file(setHVSCPath, SIDUTIL_STILDB_FILENAME, NULL);
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1198 }
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1199
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1200 // Check if help is requested
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1201 if (optShowHelp)
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1202 {
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1203 argShowHelp();
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1204 goto exit;
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1205 }
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1206
324
4b99dff0958d Fix a comment.
Matti Hamalainen <ccr@tnsp.org>
parents: 322
diff changeset
1207 // Initialize character set conversion
313
b3d46806787d Move a number of more or less generic helper functions into a separate sidutil.[ch] module.
Matti Hamalainen <ccr@tnsp.org>
parents: 311
diff changeset
1208 if ((ret = sidutil_chconv_init(&setChConv, setLang)) != THERR_OK)
120
ecbc8cabd6a2 Initial work on iconv support.
Matti Hamalainen <ccr@tnsp.org>
parents: 118
diff changeset
1209 {
313
b3d46806787d Move a number of more or less generic helper functions into a separate sidutil.[ch] module.
Matti Hamalainen <ccr@tnsp.org>
parents: 311
diff changeset
1210 THERR("Could not initialize character set conversion (LANG='%s'): %s\n",
b3d46806787d Move a number of more or less generic helper functions into a separate sidutil.[ch] module.
Matti Hamalainen <ccr@tnsp.org>
parents: 311
diff changeset
1211 setLang, th_error_str(ret));
278
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1212 }
196
47f75154c7db Add internal fallback ISO-8859-1 to UTF-8 converter and improve iconv() support.
Matti Hamalainen <ccr@tnsp.org>
parents: 192
diff changeset
1213
273
2437436b6129 Inform user of the character set conversion in use (or not in use) with verbosity level of 2.
Matti Hamalainen <ccr@tnsp.org>
parents: 272
diff changeset
1214 THMSG(2, "Requested output LANG='%s', use charset conversion=%s\n",
313
b3d46806787d Move a number of more or less generic helper functions into a separate sidutil.[ch] module.
Matti Hamalainen <ccr@tnsp.org>
parents: 311
diff changeset
1215 setChConv.outLang, setChConv.enabled ? "yes" : "no");
273
2437436b6129 Inform user of the character set conversion in use (or not in use) with verbosity level of 2.
Matti Hamalainen <ccr@tnsp.org>
parents: 272
diff changeset
1216
337
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1217 // Check operation mode
308
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
1218 if (optOneLineFieldSep != NULL ||
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
1219 (!optFieldOutput && optFormat.nitems > 0))
29
d4ec69beb160 Add one line output format.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
1220 {
308
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
1221 // For one-line format and formatted output (-F), disable parsable
29
d4ec69beb160 Add one line output format.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
1222 optParsable = FALSE;
180
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
1223
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
1224 // If no escape chars have been set, use the field separator(s)
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
1225 if (optEscapeChars == NULL)
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
1226 optEscapeChars = optOneLineFieldSep;
29
d4ec69beb160 Add one line output format.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
1227 }
153
e3be2ae6120e Delete trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 150
diff changeset
1228
161
58fe784a6e48 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 158
diff changeset
1229 if (optFieldOutput && optFormat.nitems == 0)
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1230 {
161
58fe784a6e48 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 158
diff changeset
1231 // For standard field output, push standard items to format stack
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1232 siClearStack(&optFormat);
127
1786b9d77782 Rename a variable, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 126
diff changeset
1233
161
58fe784a6e48 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 158
diff changeset
1234 for (int i = 0; i < noptPSOptions; i++)
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1235 {
308
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
1236 PSFStackItem item;
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
1237 memset(&item, 0, sizeof(item));
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1238 item.cmd = i;
308
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
1239 item.fmt = th_strdup(optPSOptions[i].dfmt);
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1240 siStackAddItem(&optFormat, &item);
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1241 }
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1242 }
29
d4ec69beb160 Add one line output format.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
1243
337
7ad937740139 Change how --help option is handled and show currently set HVSC/SLDB/STIL
Matti Hamalainen <ccr@tnsp.org>
parents: 336
diff changeset
1244 // Read SLDB and STILDB
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1245 if (setSLDBPath != NULL)
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1246 {
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1247 // Initialize SLDB
208
5cdcebad7342 Autodetect which version of Songlength database file is available (.md5 or .txt), prefer .md5 version.
Matti Hamalainen <ccr@tnsp.org>
parents: 205
diff changeset
1248 setSLDBNewFormat = th_strrcasecmp(setSLDBPath, ".md5") != NULL;
5cdcebad7342 Autodetect which version of Songlength database file is available (.md5 or .txt), prefer .md5 version.
Matti Hamalainen <ccr@tnsp.org>
parents: 205
diff changeset
1249
186
2f129ea15405 Adjust to new th_io_fopen() API.
Matti Hamalainen <ccr@tnsp.org>
parents: 181
diff changeset
1250 if ((ret = th_io_fopen(&inFile, &th_stdio_io_ops, setSLDBPath, "r")) != THERR_OK)
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1251 {
186
2f129ea15405 Adjust to new th_io_fopen() API.
Matti Hamalainen <ccr@tnsp.org>
parents: 181
diff changeset
1252 THERR("Could not open SLDB '%s': %s\n",
2f129ea15405 Adjust to new th_io_fopen() API.
Matti Hamalainen <ccr@tnsp.org>
parents: 181
diff changeset
1253 setSLDBPath, th_error_str(ret));
235
3cb7be7b98a6 Rename a label.
Matti Hamalainen <ccr@tnsp.org>
parents: 234
diff changeset
1254 goto err1;
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1255 }
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1256
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1257 th_io_set_handlers(inFile, siSTILError, NULL);
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1258
215
d0baac239f30 Be more informative about SLDB format.
Matti Hamalainen <ccr@tnsp.org>
parents: 214
diff changeset
1259 THMSG(1, "Reading SLDB (%s format [%s]): %s\n",
d0baac239f30 Be more informative about SLDB format.
Matti Hamalainen <ccr@tnsp.org>
parents: 214
diff changeset
1260 setSLDBNewFormat ? "new" : "old",
d0baac239f30 Be more informative about SLDB format.
Matti Hamalainen <ccr@tnsp.org>
parents: 214
diff changeset
1261 setSLDBNewFormat ? ".md5" : ".txt",
d0baac239f30 Be more informative about SLDB format.
Matti Hamalainen <ccr@tnsp.org>
parents: 214
diff changeset
1262 setSLDBPath);
d0baac239f30 Be more informative about SLDB format.
Matti Hamalainen <ccr@tnsp.org>
parents: 214
diff changeset
1263
236
609bfc1bd628 Change sidlib_sldb_new() API to int sidlib_sldb_new(SIDLibSLDB **pdbh).
Matti Hamalainen <ccr@tnsp.org>
parents: 235
diff changeset
1264 if ((ret = sidlib_sldb_new(&sidSLDB)) != THERR_OK)
110
e9dbedc4d5e4 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 109
diff changeset
1265 {
236
609bfc1bd628 Change sidlib_sldb_new() API to int sidlib_sldb_new(SIDLibSLDB **pdbh).
Matti Hamalainen <ccr@tnsp.org>
parents: 235
diff changeset
1266 THERR("Could not allocate SLDB database structure: %s\n",
609bfc1bd628 Change sidlib_sldb_new() API to int sidlib_sldb_new(SIDLibSLDB **pdbh).
Matti Hamalainen <ccr@tnsp.org>
parents: 235
diff changeset
1267 th_error_str(ret));
235
3cb7be7b98a6 Rename a label.
Matti Hamalainen <ccr@tnsp.org>
parents: 234
diff changeset
1268 goto err1;
110
e9dbedc4d5e4 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 109
diff changeset
1269 }
e9dbedc4d5e4 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 109
diff changeset
1270
222
3a01518fffe0 Rename sidlib functions from si_* prefix to sidlib_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
1271 if ((ret = sidlib_sldb_read(inFile, sidSLDB)) != THERR_OK)
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1272 {
285
04757ddace1a Unify SLDB error messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 283
diff changeset
1273 THERR("Error parsing SLDB: %s\n",
04757ddace1a Unify SLDB error messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 283
diff changeset
1274 th_error_str(ret));
235
3cb7be7b98a6 Rename a label.
Matti Hamalainen <ccr@tnsp.org>
parents: 234
diff changeset
1275 goto err1;
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1276 }
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1277
222
3a01518fffe0 Rename sidlib functions from si_* prefix to sidlib_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
1278 if ((ret = sidlib_sldb_build_index(sidSLDB)) != THERR_OK)
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1279 {
285
04757ddace1a Unify SLDB error messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 283
diff changeset
1280 THERR("Error building SLDB index: %s\n",
04757ddace1a Unify SLDB error messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 283
diff changeset
1281 th_error_str(ret));
235
3cb7be7b98a6 Rename a label.
Matti Hamalainen <ccr@tnsp.org>
parents: 234
diff changeset
1282 goto err1;
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1283 }
110
e9dbedc4d5e4 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 109
diff changeset
1284
235
3cb7be7b98a6 Rename a label.
Matti Hamalainen <ccr@tnsp.org>
parents: 234
diff changeset
1285 err1:
257
41fe5ec24726 Plug some minor memory leaks.
Matti Hamalainen <ccr@tnsp.org>
parents: 252
diff changeset
1286 th_io_free(inFile);
230
1e860046a4cc Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 229
diff changeset
1287 inFile = NULL;
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1288 }
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1289
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1290 if (setSTILDBPath != NULL)
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1291 {
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1292 // Initialize STILDB
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1293 if ((ret = th_io_fopen(&inFile, &th_stdio_io_ops, setSTILDBPath, "r")) != THERR_OK)
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1294 {
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1295 THERR("Could not open STIL database '%s': %s\n",
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1296 setSTILDBPath, th_error_str(ret));
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1297 goto err2;
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1298 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1299
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1300 th_io_set_handlers(inFile, siSTILError, NULL);
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1301
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1302 THMSG(1, "Reading STIL database: %s\n",
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1303 setSTILDBPath);
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1304
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1305 if ((ret = sidlib_stildb_new(&sidSTILDB)) != THERR_OK)
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1306 {
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1307 THERR("Could not allocate STIL database structure: %s\n",
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1308 th_error_str(ret));
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1309 goto err2;
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1310 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1311
319
6d0143e43edf Add functionality and API changes for doing on-the-fly character set
Matti Hamalainen <ccr@tnsp.org>
parents: 318
diff changeset
1312 if ((ret = sidlib_stildb_read(inFile, sidSTILDB, NULL)) != THERR_OK)
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1313 {
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1314 THERR("Error parsing STIL: %s\n",
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1315 th_error_str(ret));
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1316 goto err2;
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1317 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1318
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1319 if ((ret = sidlib_stildb_build_index(sidSTILDB)) != THERR_OK)
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1320 {
285
04757ddace1a Unify SLDB error messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 283
diff changeset
1321 THERR("Error building STIL index: %s\n",
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1322 th_error_str(ret));
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1323 goto err2;
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1324 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1325
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1326 err2:
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1327 th_io_free(inFile);
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1328 inFile = NULL;
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1329 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1330
23
832c26cb1637 Improve option handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
1331 // Process files
832c26cb1637 Improve option handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
1332 if (!th_args_process(argc, argv, optList, optListN,
191
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1333 NULL, argHandleFile, OPTH_ONLY_OTHER))
335
293fce53b5f9 Rename out label to exit.
Matti Hamalainen <ccr@tnsp.org>
parents: 333
diff changeset
1334 goto exit;
23
832c26cb1637 Improve option handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
1335
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1336 if (optNFiles == 0)
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
1337 {
141
71725be55ed1 Do not show full help if no filenames are specified.
Matti Hamalainen <ccr@tnsp.org>
parents: 140
diff changeset
1338 THERR("No filename(s) specified. Try --help.\n");
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
1339 }
1
25a3a142e909 Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
1340
335
293fce53b5f9 Rename out label to exit.
Matti Hamalainen <ccr@tnsp.org>
parents: 333
diff changeset
1341 exit:
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1342
313
b3d46806787d Move a number of more or less generic helper functions into a separate sidutil.[ch] module.
Matti Hamalainen <ccr@tnsp.org>
parents: 311
diff changeset
1343 sidutil_chconv_close(&setChConv);
273
2437436b6129 Inform user of the character set conversion in use (or not in use) with verbosity level of 2.
Matti Hamalainen <ccr@tnsp.org>
parents: 272
diff changeset
1344
257
41fe5ec24726 Plug some minor memory leaks.
Matti Hamalainen <ccr@tnsp.org>
parents: 252
diff changeset
1345 siClearStack(&optFormat);
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1346 th_free(setHVSCPath);
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1347 th_free(setSLDBPath);
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1348 th_free(setSTILDBPath);
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1349
222
3a01518fffe0 Rename sidlib functions from si_* prefix to sidlib_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
1350 sidlib_sldb_free(sidSLDB);
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1351 sidlib_stildb_free(sidSTILDB);
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1352
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1353 return 0;
0
8e7e08bf7b9e Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1354 }