annotate sidinfo.c @ 314:71139ed7e43f

Rename #define HEX_ADDR to more informative SET_FMT_HEX_ADDR.
author Matti Hamalainen <ccr@tnsp.org>
date Sat, 11 Jan 2020 18:30:51 +0200
parents b3d46806787d
children 67392d7ef391
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,
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
106 optRecurseDirs = FALSE;
180
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
107 char *optOneLineFieldSep = NULL,
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
108 *optEscapeChars = NULL;
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
109 int optNFiles = 0;
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
110
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
111 PSFStack optFormat;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
112
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
113 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
114 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
115
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
116 SIDUtilChConvCtx setChConv;
120
ecbc8cabd6a2 Initial work on iconv support.
Matti Hamalainen <ccr@tnsp.org>
parents: 118
diff changeset
117
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
118
28
6240788fe172 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
119 // Define option arguments
121
a2c2c63311de Change in th_args API.
Matti Hamalainen <ccr@tnsp.org>
parents: 120
diff changeset
120 static const th_optarg optList[] =
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
121 {
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
122 { 0, '?', "help", "Show this help", OPT_NONE },
204
0327fe1d0686 Enable -v verbosity option.
Matti Hamalainen <ccr@tnsp.org>
parents: 200
diff changeset
123 { 1, 'v', "verbose", "Be more verbose", OPT_NONE },
173
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
124 {10, 0, "license", "Print out this program's license agreement", OPT_NONE },
177
6a73d17f0c34 Add a comment.
Matti Hamalainen <ccr@tnsp.org>
parents: 176
diff changeset
125
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
126 { 2, 'p', "parsable", "Output in script-parsable format", OPT_NONE },
7
36c43f085b28 Add NoPrefix option -n.
Matti Hamalainen <ccr@tnsp.org>
parents: 5
diff changeset
127 { 5, 'n', "noprefix", "Output without field name prefix", OPT_NONE },
33
39d9df17c8b1 Add field separator argument to -l option.
Matti Hamalainen <ccr@tnsp.org>
parents: 32
diff changeset
128 { 6, 'l', "line", "Output in one line format, -l <field separator>", OPT_ARGREQ },
180
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
129 {11, 'e', "escape", "Escape these characters in fields (see note)", OPT_ARGREQ },
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
130 { 3, 'f', "fields", "Show only specified field(s)", OPT_ARGREQ },
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
131 { 4, 'x', "hex", "Use hexadecimal values", OPT_NONE },
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
132 { 7, 'F', "format", "Use given format string (see below)", OPT_ARGREQ },
212
90ff5dbee152 The HVSC path -H option now requires HVSC root directory, not HVSC/DOCUMENTS directory.
Matti Hamalainen <ccr@tnsp.org>
parents: 209
diff changeset
133 { 8, 'H', "hvsc", "Specify path to HVSC root directory", OPT_ARGREQ },
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
134 { 9, 'S', "sldb", "Specify Songlengths.(txt|md5) file", OPT_ARGREQ },
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
135 {13, 'T', "stildb", "Specify STIL.txt file", OPT_ARGREQ },
191
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
136 {12, 'R', "recurse", "Recurse into sub-directories", OPT_NONE },
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
137 };
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
138
44
7b137e4e817c Fix to match the changes in th_args API.
Matti Hamalainen <ccr@tnsp.org>
parents: 41
diff changeset
139 static const int optListN = sizeof(optList) / sizeof(optList[0]);
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
140
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 void argShowHelp(void)
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
143 {
75
92a4065c41d0 Improve listing of available fields in --help.
Matti Hamalainen <ccr@tnsp.org>
parents: 73
diff changeset
144 int index, len;
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
145
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
146 th_print_banner(stdout, th_prog_name, "[options] <sid file|path> [file|path #2 ..]");
44
7b137e4e817c Fix to match the changes in th_args API.
Matti Hamalainen <ccr@tnsp.org>
parents: 41
diff changeset
147 th_args_help(stdout, optList, optListN, 0);
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
148 printf(
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
149 "\n"
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
150 "Available fields:\n");
3
dbe35d78e621 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
151
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
152 for (len = index = 0; index < noptPSOptions; index++)
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
153 {
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
154 const PSFOption *opt = &optPSOptions[index];
75
92a4065c41d0 Improve listing of available fields in --help.
Matti Hamalainen <ccr@tnsp.org>
parents: 73
diff changeset
155 len += strlen(opt->name) + 3;
92a4065c41d0 Improve listing of available fields in --help.
Matti Hamalainen <ccr@tnsp.org>
parents: 73
diff changeset
156 if (len >= 72)
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
157 {
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
158 printf("\n");
75
92a4065c41d0 Improve listing of available fields in --help.
Matti Hamalainen <ccr@tnsp.org>
parents: 73
diff changeset
159 len = 0;
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
160 }
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
161 printf("%s%s", opt->name, (index < noptPSOptions - 1) ? ", " : "\n\n");
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
162 }
58
5ea07110f0cf Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
163
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
164 printf(
61
6916aaeda941 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 60
diff changeset
165 "Example: %s -x -p -f hash,copyright somesidfile.sid\n"
6916aaeda941 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 60
diff changeset
166 "\n"
6916aaeda941 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 60
diff changeset
167 "Format strings for '-F' option are composed of @fields@ that\n"
6916aaeda941 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 60
diff changeset
168 "are expanded to their value. Also, escape sequences \\r, \\n and \\t\n"
6916aaeda941 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 60
diff changeset
169 "can be used: -F \"hash=@hash@\\ncopy=@copyright@\\n\"\n"
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
170 "\n"
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
171 "The -F fields can be further formatted via printf-style specifiers:\n"
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
172 "-F \"@copyright:'%%-30s'@\"\n"
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
173 "\n"
180
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
174 "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
175 "(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
176 "\n"
1c004e74d0ad Adjust --help slightly.
Matti Hamalainen <ccr@tnsp.org>
parents: 230
diff changeset
177 "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
178 "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
179 "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
180 "\n"
61
6916aaeda941 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 60
diff changeset
181 , th_prog_name);
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
182 }
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
183
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
184
78
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
185 int argMatchPSField(const char *field)
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
186 {
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
187 int index, found = -1;
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
188 for (index = 0; index < noptPSOptions; index++)
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
189 {
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
190 const PSFOption *opt = &optPSOptions[index];
78
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
191 if (th_strcasecmp(opt->name, field) == 0)
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
192 {
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
193 if (found >= 0)
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
194 return -2;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
195 found = index;
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
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
199 return found;
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
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
202
78
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
203 int argMatchPSFieldError(const char *field)
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
204 {
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
205 int found = argMatchPSField(field);
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
206 switch (found)
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
207 {
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
208 case -1:
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
209 THERR("No such field '%s'.\n", field);
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
210 break;
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
211
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
212 case -2:
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
213 THERR("Field '%s' is ambiguous.\n", field);
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
214 break;
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
215 }
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
216 return found;
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
217 }
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
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
220 BOOL siStackAddItem(PSFStack *stack, const PSFStackItem *item)
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
221 {
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
222 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
223 {
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
224 stack->nallocated += 16;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
225 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
226 {
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
227 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
228 return FALSE;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
229 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
230 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
231
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
232 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
233 stack->nitems++;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
234 return TRUE;
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
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 void siClearStack(PSFStack *stack)
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
239 {
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
240 if (stack != NULL)
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
241 {
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
242 if (stack->nitems > 0 && stack->items != NULL)
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
243 {
246
f50947e8ff93 Move two index variables from block scope to loop scope.
Matti Hamalainen <ccr@tnsp.org>
parents: 244
diff changeset
244 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
245 {
300
85d92bcbebf3 Be more diligent about not doing structure reuse, easy to have either uninitialized
Matti Hamalainen <ccr@tnsp.org>
parents: 294
diff changeset
246 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
247 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
248 th_free(item->fmt);
59
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 th_free(stack->items);
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
251 }
300
85d92bcbebf3 Be more diligent about not doing structure reuse, easy to have either uninitialized
Matti Hamalainen <ccr@tnsp.org>
parents: 294
diff changeset
252
85d92bcbebf3 Be more diligent about not doing structure reuse, easy to have either uninitialized
Matti Hamalainen <ccr@tnsp.org>
parents: 294
diff changeset
253 // Clear the stack data
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
254 memset(stack, 0, sizeof(PSFStack));
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 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
257
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
258
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
259 BOOL argParsePSFields(PSFStack *stack, const char *fmt)
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
260 {
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
261 const char *start = fmt;
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
262 siClearStack(stack);
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
263
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
264 while (*start)
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
265 {
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
266 const char *end = strchr(start, ',');
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
267 char *field = (end != NULL) ?
116
d062312ea850 Fix th_strndup_trim() usage.
Matti Hamalainen <ccr@tnsp.org>
parents: 115
diff changeset
268 th_strndup_trim(start, end - start, TH_TRIM_BOTH) :
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
269 th_strdup_trim(start, TH_TRIM_BOTH);
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
270
118
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
271 if (field != NULL)
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
272 {
300
85d92bcbebf3 Be more diligent about not doing structure reuse, easy to have either uninitialized
Matti Hamalainen <ccr@tnsp.org>
parents: 294
diff changeset
273 PSFStackItem item;
118
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
274 int found = argMatchPSFieldError(field);
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
275 th_free(field);
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
276
118
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
277 if (found < 0)
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
278 return FALSE;
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
279
300
85d92bcbebf3 Be more diligent about not doing structure reuse, easy to have either uninitialized
Matti Hamalainen <ccr@tnsp.org>
parents: 294
diff changeset
280 memset(&item, 0, sizeof(item));
118
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
281 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
282 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
283
118
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
284 if (!siStackAddItem(stack, &item))
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
285 return FALSE;
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
286 }
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
287
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
288 if (!end)
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
289 break;
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
290
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
291 start = end + 1;
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
292 }
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
293
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
294 return TRUE;
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
295 }
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
296
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
297
283
a00d11de7a71 Staticize.
Matti Hamalainen <ccr@tnsp.org>
parents: 281
diff changeset
298 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
299 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
300 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
301 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
302 char buf[64];
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
303 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
304 BOOL f_neg = FALSE;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
305
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
306 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
307 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
308
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
309 if (vret == EOF)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
310 return 0;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
311
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
312 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
313 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
314
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
315
283
a00d11de7a71 Staticize.
Matti Hamalainen <ccr@tnsp.org>
parents: 281
diff changeset
316 static int siItemFormatStrPrintDo(th_vprintf_ctx *ctx,
a00d11de7a71 Staticize.
Matti Hamalainen <ccr@tnsp.org>
parents: 281
diff changeset
317 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
318 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
319 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
320 int ret = 0;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
321
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
322 while (*fmt)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
323 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
324 if (*fmt != '%')
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 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
327 goto out;
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 else
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
330 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
331 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
332 BOOL end = FALSE;
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 fmt++;
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 // Check for flags
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
337 while (!end)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
338 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
339 switch (*fmt)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
340 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
341 case '#':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
342 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
343 break;
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 case '+':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
346 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
347 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
348
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
349 case '0':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
350 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
351 break;
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 case '-':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
354 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
355 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
356
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
357 case ' ':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
358 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
359 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
360
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
361 case '\'':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
362 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
363 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
364
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
365 default:
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
366 end = TRUE;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
367 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
368 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
369 if (!end) fmt++;
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
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
372 // Get field width
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
373 if (*fmt == '*')
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 return -101;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
376 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
377 else
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 f_width = 0;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
380 while (th_isdigit(*fmt))
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
381 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
382 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
383
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
384 // Check for field precision
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
385 if (*fmt == '.')
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
386 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
387 fmt++;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
388 if (*fmt == '*')
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
389 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
390 return -102;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
391 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
392 else
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
393 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
394 // 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
395 f_prec = 0;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
396 while (th_isdigit(*fmt))
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
397 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
398 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
399 }
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
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
402 // 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
403 switch (*fmt)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
404 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
405 case 0:
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
406 return -104;
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 case 'o':
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
409 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
410 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
411 goto out;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
412 break;
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 case 'u':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
415 case 'i':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
416 case 'd':
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
417 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
418 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
419 goto out;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
420 break;
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 'x':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
423 case 'X':
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
424 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
425 if (*fmt == 'X')
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
426 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
427 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
428 goto out;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
429 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
430
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
431 case 's':
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
432 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
433 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
434 goto out;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
435 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
436
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
437 //case '%':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
438 default:
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
439 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
440 goto out;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
441 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
442 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
443 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
444 fmt++;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
445 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
446
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
447 out:
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
448 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
449 }
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
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
452 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
453 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
454 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
455 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
456 ctx->size += 64;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
457 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
458 return EOF;
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 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
462
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
463 ctx->pos++;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
464 ctx->ipos++;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
465 return ch;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
466 }
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
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
469 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
470 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
471 th_vprintf_ctx ctx;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
472
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
473 ctx.size = 128;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
474 ctx.buf = th_malloc(ctx.size);
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
475 ctx.pos = 0;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
476 ctx.ipos = 0;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
477
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
478 if (ctx.buf == NULL)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
479 return NULL;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
480
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
481 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
482 goto err;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
483
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
484 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
485 goto err;
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 return ctx.buf;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
488
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
489 err:
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
490 th_free(ctx.buf);
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
491 return NULL;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
492 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
493
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
494
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
495 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
496 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
497 ctx->pos++;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
498 ctx->ipos++;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
499 return ch;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
500 }
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
283
a00d11de7a71 Staticize.
Matti Hamalainen <ccr@tnsp.org>
parents: 281
diff changeset
503 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
504 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
505 th_vprintf_ctx ctx;
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 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
508
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
509 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
510 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
511
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
512
79
5709d0beb394 Avoid using a global variable here.
Matti Hamalainen <ccr@tnsp.org>
parents: 78
diff changeset
513 //
5709d0beb394 Avoid using a global variable here.
Matti Hamalainen <ccr@tnsp.org>
parents: 78
diff changeset
514 // Parse a format string into a PSFStack structure
5709d0beb394 Avoid using a global variable here.
Matti Hamalainen <ccr@tnsp.org>
parents: 78
diff changeset
515 //
283
a00d11de7a71 Staticize.
Matti Hamalainen <ccr@tnsp.org>
parents: 281
diff changeset
516 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
517 {
83
c54d74312080 Fix some warnings.
Matti Hamalainen <ccr@tnsp.org>
parents: 82
diff changeset
518 const char *start = NULL;
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
519 int mode = 0;
113
cd97e7517e21 Simplify error handling logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
520 BOOL rval = TRUE;
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
521
79
5709d0beb394 Avoid using a global variable here.
Matti Hamalainen <ccr@tnsp.org>
parents: 78
diff changeset
522 siClearStack(stack);
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
523
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
524 while (mode != -1)
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
525 switch (mode)
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
526 {
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
527 case 0:
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
528 if (*fmt == '@')
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
529 {
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
530 start = fmt + 1;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
531 mode = 1;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
532 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
533 else
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
534 {
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
535 start = fmt;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
536 mode = 2;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
537 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
538 fmt++;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
539 break;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
540
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
541 case 1:
143
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
542 if (*fmt != '@')
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
543 {
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
544 if (*fmt == 0)
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
545 mode = -1;
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
546 fmt++;
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
547 break;
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
548 }
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
549
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
550 if (fmt - start == 0)
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
551 {
177
6a73d17f0c34 Add a comment.
Matti Hamalainen <ccr@tnsp.org>
parents: 176
diff changeset
552 // "@@" 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
553 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
554 memset(&item, 0, sizeof(item));
143
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
555 item.cmd = -2;
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
556 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
557
143
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
558 if (!siStackAddItem(stack, &item))
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
559 return FALSE;
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
560 }
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
561 else
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
562 {
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
563 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
564 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
565 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
566 *pfield = 0;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
567 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
568 }
143
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
569
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
570 int ret = argMatchPSFieldError(field);
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
571 if (ret >= 0)
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
572 {
300
85d92bcbebf3 Be more diligent about not doing structure reuse, easy to have either uninitialized
Matti Hamalainen <ccr@tnsp.org>
parents: 294
diff changeset
573 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
574 memset(&item, 0, sizeof(item));
143
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
575 item.cmd = ret;
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
576
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
577 if (fopt != 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 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
580 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
581 item.flags |= OFMT_FORMAT;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
582 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
583 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
584 else
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
585 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
586 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
587 rval = FALSE;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
588 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
589 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
590
79
5709d0beb394 Avoid using a global variable here.
Matti Hamalainen <ccr@tnsp.org>
parents: 78
diff changeset
591 if (!siStackAddItem(stack, &item))
143
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
592 rval = FALSE;
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
593 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
594 else
143
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
595 rval = FALSE;
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
596
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
597 th_free(fopt);
143
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
598 th_free(field);
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
599 }
143
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
600
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
601 mode = 0;
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
602 fmt++;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
603 break;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
604
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
605 case 2:
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
606 if (*fmt == 0 || *fmt == '@')
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
607 {
300
85d92bcbebf3 Be more diligent about not doing structure reuse, easy to have either uninitialized
Matti Hamalainen <ccr@tnsp.org>
parents: 294
diff changeset
608 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
609 memset(&item, 0, sizeof(item));
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
610 item.cmd = -1;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
611 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
612
79
5709d0beb394 Avoid using a global variable here.
Matti Hamalainen <ccr@tnsp.org>
parents: 78
diff changeset
613 if (!siStackAddItem(stack, &item))
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
614 return FALSE;
79
5709d0beb394 Avoid using a global variable here.
Matti Hamalainen <ccr@tnsp.org>
parents: 78
diff changeset
615
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
616 mode = (*fmt == 0) ? -1 : 0;
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 else
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
619 fmt++;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
620 break;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
621 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
622
113
cd97e7517e21 Simplify error handling logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
623 return rval;
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
624 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
625
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
626
283
a00d11de7a71 Staticize.
Matti Hamalainen <ccr@tnsp.org>
parents: 281
diff changeset
627 static BOOL argHandleOpt(const int optN, char *optArg, char *currArg)
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
628 {
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
629 switch (optN)
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
630 {
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
631 case 0:
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
632 argShowHelp();
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
633 exit(0);
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
634 break;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
635
173
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
636 case 10:
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
637 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
638 exit(0);
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
639 break;
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
640
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
641 case 1:
172
6dcf4ca1dce7 Change to match th-libs' verbosity level changes.
Matti Hamalainen <ccr@tnsp.org>
parents: 171
diff changeset
642 th_verbosity++;
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
643 break;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
644
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
645 case 2:
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
646 optParsable = TRUE;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
647 break;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
648
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
649 case 3:
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
650 if (!argParsePSFields(&optFormat, optArg))
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
651 return FALSE;
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
652 break;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
653
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
654 case 4:
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
655 optHexadecimal = TRUE;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
656 break;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
657
7
36c43f085b28 Add NoPrefix option -n.
Matti Hamalainen <ccr@tnsp.org>
parents: 5
diff changeset
658 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
659 optFieldNamePrefix = FALSE;
7
36c43f085b28 Add NoPrefix option -n.
Matti Hamalainen <ccr@tnsp.org>
parents: 5
diff changeset
660 break;
36c43f085b28 Add NoPrefix option -n.
Matti Hamalainen <ccr@tnsp.org>
parents: 5
diff changeset
661
29
d4ec69beb160 Add one line output format.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
662 case 6:
180
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
663 optOneLineFieldSep = optArg;
29
d4ec69beb160 Add one line output format.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
664 break;
d4ec69beb160 Add one line output format.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
665
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
666 case 7:
111
c7ecf56d23e7 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 110
diff changeset
667 optFieldOutput = FALSE;
308
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
668 optParsable = FALSE;
79
5709d0beb394 Avoid using a global variable here.
Matti Hamalainen <ccr@tnsp.org>
parents: 78
diff changeset
669 if (!argParsePSFormatStr(&optFormat, optArg))
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
670 return FALSE;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
671 break;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
672
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
673 case 8:
252
9e45cb6f12a5 Use th_pstr_cpy() for setting certain variables.
Matti Hamalainen <ccr@tnsp.org>
parents: 251
diff changeset
674 th_pstr_cpy(&setHVSCPath, optArg);
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
675 break;
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
676
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
677 case 9:
252
9e45cb6f12a5 Use th_pstr_cpy() for setting certain variables.
Matti Hamalainen <ccr@tnsp.org>
parents: 251
diff changeset
678 th_pstr_cpy(&setSLDBPath, optArg);
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
679 break;
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
680
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
681 case 13:
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
682 th_pstr_cpy(&setSTILDBPath, optArg);
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
683 break;
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
684
180
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
685 case 11:
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
686 optEscapeChars = optArg;
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
687 break;
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
688
191
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
689 case 12:
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
690 optRecurseDirs = TRUE;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
691 break;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
692
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
693 default:
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
694 THERR("Unknown option '%s'.\n", currArg);
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
695 return FALSE;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
696 }
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
697
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
698 return TRUE;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
699 }
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
700
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
701
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
702 static char * siEscapeString(const char *str, const char *esc)
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
703 {
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
704 if (str == NULL)
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
705 return NULL;
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
706
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
707 if (esc == NULL)
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
708 return th_strdup(str);
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
709
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
710 size_t len = 0, size = strlen(str) + 1;
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
711 char *buf = th_malloc(size);
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
712 if (buf == NULL)
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
713 return NULL;
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
714
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
715 while (*str)
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
716 {
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
717 if (strchr(esc, *str) != NULL || *str == '\\')
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
718 {
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
719 if (!th_strbuf_putch(&buf, &size, &len, '\\'))
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
720 goto err;
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
721 }
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
722 if (!th_strbuf_putch(&buf, &size, &len, *str))
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
723 goto err;
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
724
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
725 str++;
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
726 }
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
727
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
728 if (!th_strbuf_putch(&buf, &size, &len, 0))
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
729 goto err;
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
730
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
731 return buf;
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
732
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
733 err:
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
734 th_free(buf);
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
735 return NULL;
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
736 }
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
737
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
738
62
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
739 static void siPrintStrEscapes(FILE *outFile, const char *str)
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
740 {
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
741 while (*str)
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
742 {
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
743 if (*str == '\\')
82
82679cccaa32 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
744 switch (*(++str))
62
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
745 {
82
82679cccaa32 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
746 case 'n': fputc('\n', outFile); break;
82679cccaa32 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
747 case 'r': fputc('\r', outFile); break;
82679cccaa32 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
748 case 't': fputc('\r', outFile); break;
82679cccaa32 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
749 case '\\': fputc('\\', outFile); break;
82679cccaa32 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
750 default: fputc(*str, outFile); break;
62
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
751 }
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
752 else
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
753 fputc(*str, outFile);
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
754
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
755 str++;
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
756 }
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
757 }
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
758
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
759
281
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
760 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
761 {
281
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
762 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
763 {
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
764 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
765 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
766 else
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
767 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
768 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
769 }
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
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
772
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
773 static void siPrintFieldPrefix(FILE *outFile, const PSFOption *opt)
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
774 {
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
775 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
776 (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
777 FALSE);
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
778 }
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
779
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
780
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
781 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
782 {
111
c7ecf56d23e7 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 110
diff changeset
783 if (optFieldOutput)
180
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
784 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
785 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
786 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
787 fputs(optOneLineFieldSep != NULL ? optOneLineFieldSep : ", ", outFile);
33
39d9df17c8b1 Add field separator argument to -l option.
Matti Hamalainen <ccr@tnsp.org>
parents: 32
diff changeset
788 }
39d9df17c8b1 Add field separator argument to -l option.
Matti Hamalainen <ccr@tnsp.org>
parents: 32
diff changeset
789
39d9df17c8b1 Add field separator argument to -l option.
Matti Hamalainen <ccr@tnsp.org>
parents: 32
diff changeset
790
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
791 static const char *siGetInfoFormat(const PSFStackItem *item, const int otype)
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
792 {
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
793 switch (otype)
146
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
794 {
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
795 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
796 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
797 return item->fmt;
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
798 else
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
799 return optHexadecimal ? "$%04x" : "%d";
146
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
800
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
801 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
802 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
803 return item->fmt;
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
804 else
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
805 return "%s";
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
806
155
de75385f75e2 Simplify by removing few lines of duplicate code.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
807 default:
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
808 return NULL;
146
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
809 }
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
810 }
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
811
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
812
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
813 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
814 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
815 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
816 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
817 {
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
818 char *str, *tmp;
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
819
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
820 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
821 {
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
822 char *tmp2 = sidutil_chconv_convert(&setChConv, d_str);
180
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
823 tmp = siEscapeString(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
824 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
825 }
157
8fc887cb56d0 Implement iconv support for converting from PSID de-facto latin-1/ISO-8859-*
Matti Hamalainen <ccr@tnsp.org>
parents: 156
diff changeset
826 else
180
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
827 tmp = siEscapeString(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
828
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
829 if ((str = siItemFormatStrPrint(fmt, otype, tmp, d_int)) != NULL)
146
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
830 fputs(str, outFile);
3
dbe35d78e621 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
831
146
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
832 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
833 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
834
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
835 *shown = TRUE;
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
836 }
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
837
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
838
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
839 #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
840 siPrintFieldPrefix(outFile, opt); \
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
841 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
842 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
843 } while (0)
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
844
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
845 #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
846 siPrintFieldPrefix(outFile, opt); \
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
847 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
848 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
849 } while (0)
9
c1fba4abf56f Make filename printing optional.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
850
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
851
226
c32015f4969e Rename PSIDHeader struct to SIDLibPSIDHeader to conform with the SIDLib
Matti Hamalainen <ccr@tnsp.org>
parents: 225
diff changeset
852 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
853 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
854 {
114
cc74a9871a44 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 113
diff changeset
855 const PSFOption *opt = &optPSOptions[item->cmd];
150
0288c4d138f7 Make the hash field also formattable.
Matti Hamalainen <ccr@tnsp.org>
parents: 148
diff changeset
856 char tmp[128];
146
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
857
114
cc74a9871a44 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 113
diff changeset
858 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
859 {
156
717d143612e2 Simplify things by having separate PRS/PRI macros for printing string and
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
860 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
861 case 1: PRS(psid->magic, FALSE); break;
146
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
862 case 2:
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
863 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
864 PRS(tmp, FALSE);
146
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
865 break;
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
866 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
867 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
868 break;
55
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
869 case 4:
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
870 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
871 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
872 break;
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
873 case 5:
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
874 if (psid->version >= 2)
222
3a01518fffe0 Rename sidlib functions from si_* prefix to sidlib_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
875 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
876 break;
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
877 case 6:
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
878 if (psid->version >= 2)
222
3a01518fffe0 Rename sidlib functions from si_* prefix to sidlib_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
879 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
880 break;
35
79e6d08b473f Add more information fields, including SID model, video clock speed, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
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 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
883 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
884 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
885 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
886 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
887 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
888 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
889
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
890 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
891 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
892 {
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
893 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
894 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
895 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
896
222
3a01518fffe0 Rename sidlib functions from si_* prefix to sidlib_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
897 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
898 }
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
899 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
900 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
901 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
902 {
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
903 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
904 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
905 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
906
222
3a01518fffe0 Rename sidlib functions from si_* prefix to sidlib_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
907 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
908 }
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
909 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
910 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
911 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
912 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
913 break;
55
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
914 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
915 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
916 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
917 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
918
156
717d143612e2 Simplify things by having separate PRS/PRI macros for printing string and
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
919 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
920 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
921 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
922
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
923 case 21:
140
9f96b37c4f75 Don't print songlengths field if there are none.
Matti Hamalainen <ccr@tnsp.org>
parents: 138
diff changeset
924 {
150
0288c4d138f7 Make the hash field also formattable.
Matti Hamalainen <ccr@tnsp.org>
parents: 148
diff changeset
925 size_t i, k;
0288c4d138f7 Make the hash field also formattable.
Matti Hamalainen <ccr@tnsp.org>
parents: 148
diff changeset
926 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
927 sprintf(&tmp[k], "%02x", psid->hash[i]);
0288c4d138f7 Make the hash field also formattable.
Matti Hamalainen <ccr@tnsp.org>
parents: 148
diff changeset
928
156
717d143612e2 Simplify things by having separate PRS/PRI macros for printing string and
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
929 PRS(tmp, FALSE);
140
9f96b37c4f75 Don't print songlengths field if there are none.
Matti Hamalainen <ccr@tnsp.org>
parents: 138
diff changeset
930 }
55
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
931 break;
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
932
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
933 case 22:
142
da29f147afcb Better check for number of songlengths.
Matti Hamalainen <ccr@tnsp.org>
parents: 141
diff changeset
934 if (psid->lengths != NULL && psid->lengths->nlengths > 0)
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
935 {
140
9f96b37c4f75 Don't print songlengths field if there are none.
Matti Hamalainen <ccr@tnsp.org>
parents: 138
diff changeset
936 siPrintFieldPrefix(outFile, opt);
246
f50947e8ff93 Move two index variables from block scope to loop scope.
Matti Hamalainen <ccr@tnsp.org>
parents: 244
diff changeset
937 for (int i = 0; i < psid->lengths->nlengths; i++)
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
938 {
114
cc74a9871a44 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 113
diff changeset
939 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
940
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
941 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
942 len / 60, len % 60,
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
943 (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
944
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
945 siPrintPSIDInfoLine(outFile, shown,
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
946 siGetInfoFormat(item, OTYPE_STR),
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
947 OTYPE_STR,
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
948 tmp,
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
949 -1, FALSE);
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
950 }
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
951 siPrintFieldSeparator(outFile, FALSE, TRUE);
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
952 }
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
953 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
954
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
955 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
956 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
957 {
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
958 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
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 // 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
961 // 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
962 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
963 {
311
ee56f1f2b528 Change how the STIL subtune are handled internally. Also fix a bug that
Matti Hamalainen <ccr@tnsp.org>
parents: 309
diff changeset
964 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
965 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
966 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
967 }
86f5c9ce26a8 Improve the STIL data output by not outputting field separator for the last item.
Matti Hamalainen <ccr@tnsp.org>
parents: 300
diff changeset
968
311
ee56f1f2b528 Change how the STIL subtune are handled internally. Also fix a bug that
Matti Hamalainen <ccr@tnsp.org>
parents: 309
diff changeset
969 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
970 {
311
ee56f1f2b528 Change how the STIL subtune are handled internally. Also fix a bug that
Matti Hamalainen <ccr@tnsp.org>
parents: 309
diff changeset
971 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
972 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
973
86f5c9ce26a8 Improve the STIL data output by not outputting field separator for the last item.
Matti Hamalainen <ccr@tnsp.org>
parents: 300
diff changeset
974 // 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
975 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
976 {
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
977 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
978 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
979 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
980 }
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
981
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
982 // 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
983 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
984 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
985 {
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
986 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
987 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
988 {
281
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
989 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
990 {
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
991 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
992 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
993 }
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
994 else
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
995 {
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
996 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
997 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
998 }
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
999
281
514d861516b0 Further work on the STIL fields output format. It's not perfect, nor
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1000 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
1001 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
1002 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
1003 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
1004 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
1005 -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
1006
86f5c9ce26a8 Improve the STIL data output by not outputting field separator for the last item.
Matti Hamalainen <ccr@tnsp.org>
parents: 300
diff changeset
1007 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
1008 ++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
1009 }
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1010 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1011 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1012 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1013 break;
29
d4ec69beb160 Add one line output format.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
1014 }
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
1015 }
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
1016
0
8e7e08bf7b9e Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1017
269
cea4a7df9efd Rename siError() to siPSIDError() and make the printed output more logical.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
1018 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
1019 {
cf081a98dccd Improve error output.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
1020 (void) err;
269
cea4a7df9efd Rename siError() to siPSIDError() and make the printed output more logical.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
1021 THERR("%s - %s\n", msg, fh->filename);
187
cf081a98dccd Improve error output.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
1022 }
cf081a98dccd Improve error output.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
1023
cf081a98dccd Improve error output.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
1024
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1025 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
1026 {
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1027 (void) err;
293
c3ebab7f9094 Fix one more format string to use proper PRIu_SIZE_T.
Matti Hamalainen <ccr@tnsp.org>
parents: 291
diff changeset
1028 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
1029 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1030
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1031
191
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1032 BOOL siHandleSIDFile(const char *filename)
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1033 {
226
c32015f4969e Rename PSIDHeader struct to SIDLibPSIDHeader to conform with the SIDLib
Matti Hamalainen <ccr@tnsp.org>
parents: 225
diff changeset
1034 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
1035 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
1036 FILE *outFile;
55
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
1037 BOOL shown = FALSE;
186
2f129ea15405 Adjust to new th_io_fopen() API.
Matti Hamalainen <ccr@tnsp.org>
parents: 181
diff changeset
1038 int res;
55
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
1039
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
1040 outFile = stdout;
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1041
186
2f129ea15405 Adjust to new th_io_fopen() API.
Matti Hamalainen <ccr@tnsp.org>
parents: 181
diff changeset
1042 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
1043 {
186
2f129ea15405 Adjust to new th_io_fopen() API.
Matti Hamalainen <ccr@tnsp.org>
parents: 181
diff changeset
1044 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
1045 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
1046 goto error;
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1047 }
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1048
269
cea4a7df9efd Rename siError() to siPSIDError() and make the printed output more logical.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
1049 th_io_set_handlers(inFile, siPSIDError, NULL);
187
cf081a98dccd Improve error output.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
1050
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1051 // Read PSID data
243
a3dd87b7c00b Oops, forgot to adjust the code for change in sidlib_read_sid_file_alloc() API.
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1052 if ((res = sidlib_read_sid_file_alloc(inFile, &psid, setSLDBNewFormat)) != THERR_OK)
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1053 goto error;
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1054
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1055 // Get songlength information, if any
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1056 if (sidSLDB != NULL)
222
3a01518fffe0 Rename sidlib functions from si_* prefix to sidlib_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
1057 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
1058
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1059 // 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
1060 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
1061 {
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
1062 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
1063 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
1064
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1065 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
1066 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
1067 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1068
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1069 // Output
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
1070 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
1071 {
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1072 PSFStackItem *item = &optFormat.items[index];
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1073 switch (item->cmd)
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
1074 {
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1075 case -1:
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1076 siPrintStrEscapes(outFile, item->str);
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1077 break;
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
1078
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1079 case -2:
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1080 fputc(item->chr, outFile);
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1081 break;
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
1082
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1083 default:
126
c1462b7880e8 Make si_read_sid_file() to allocate the PSIDHeader struct itself, adjust
Matti Hamalainen <ccr@tnsp.org>
parents: 125
diff changeset
1084 siPrintPSIDInformationField(outFile, filename, psid, &shown, item);
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1085 break;
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
1086 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
1087 }
153
e3be2ae6120e Delete trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 150
diff changeset
1088
188
489eb428cf65 Add separator empty line between "files" when in normal output mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 187
diff changeset
1089 if (optFieldOutput && shown)
55
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
1090 {
188
489eb428cf65 Add separator empty line between "files" when in normal output mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 187
diff changeset
1091 fprintf(outFile, "\n");
55
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
1092 }
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1093
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1094 // Shutdown
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1095 error:
222
3a01518fffe0 Rename sidlib functions from si_* prefix to sidlib_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
1096 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
1097 th_io_free(inFile);
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1098
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1099 return TRUE;
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1100 }
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1101
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1102
191
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1103 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
1104 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1105 th_stat_data sdata;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1106 char *npath;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1107 BOOL ret = TRUE;
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 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
1110 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
1111 else
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1112 npath = th_strdup(path);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1113
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1114 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
1115 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1116 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
1117 ret = FALSE;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1118 goto out;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1119 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1120
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1121 optNFiles++;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1122
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1123 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
1124 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1125 DIR *dirh;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1126 struct dirent *entry;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1127
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1128 // Check if recursion is disabled
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1129 if (!optRecurseDirs && optNFiles > 1)
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1130 goto out;
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 if ((dirh = opendir(npath)) == NULL)
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 int err = th_get_error();
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1135 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
1136 path, th_error_str(err));
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1137 ret = FALSE;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1138 goto out;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1139 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1140
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1141 while ((entry = readdir(dirh)) != NULL)
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1142 if (entry->d_name[0] != '.')
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1143 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1144 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
1145 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1146 ret = FALSE;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1147 goto out;
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 }
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 closedir(dirh);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1152 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1153 else
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1154 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
1155 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1156 siHandleSIDFile(npath);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1157 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1158
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1159 out:
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1160 th_free(npath);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1161 return ret;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1162 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1163
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1164
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1165 BOOL argHandleFile(char *path)
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1166 {
238
2ed665b74043 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 236
diff changeset
1167 char *pattern = NULL, *filename = NULL, *pt, *npath;
191
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1168 BOOL ret;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1169
238
2ed665b74043 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 236
diff changeset
1170 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
1171 return FALSE;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1172
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1173 // 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
1174 if ((pt = strrchr(npath, '/')) != NULL ||
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1175 (pt = strrchr(npath, '\\')) != NULL)
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1176 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1177 *pt++ = 0;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1178 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1179 else
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1180 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1181 th_free(npath);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1182 npath = th_strdup(".");
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1183 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
1184 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1185
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1186 // Check if we have glob pattern chars
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1187 if (pt != NULL && *pt != 0)
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1188 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1189 if (strchr(pt, '*') || strchr(pt, '?'))
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1190 pattern = th_strdup(pt);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1191 else
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1192 filename = th_strdup(pt);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1193 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1194
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1195 ret = argHandleFileDir(npath, filename, pattern);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1196
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1197 th_free(pattern);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1198 th_free(npath);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1199 th_free(filename);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1200 return ret;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1201 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1202
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1203
0
8e7e08bf7b9e Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1204 int main(int argc, char *argv[])
8e7e08bf7b9e Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1205 {
230
1e860046a4cc Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 229
diff changeset
1206 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
1207 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
1208 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
1209
259
4df54600633a Add support for "HVSC_BASE" environment variable as used by STILView by LaLa
Matti Hamalainen <ccr@tnsp.org>
parents: 257
diff changeset
1210 // 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
1211 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
1212
0
8e7e08bf7b9e Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1213 // Initialize
309
ff93c168c4aa Bump version.
Matti Hamalainen <ccr@tnsp.org>
parents: 308
diff changeset
1214 th_init("SIDInfo", "PSID/RSID information displayer", "0.9.2",
227
2b3d5d49086d Bump copyright years.
Matti Hamalainen <ccr@tnsp.org>
parents: 226
diff changeset
1215 "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
1216 "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
1217
172
6dcf4ca1dce7 Change to match th-libs' verbosity level changes.
Matti Hamalainen <ccr@tnsp.org>
parents: 171
diff changeset
1218 th_verbosity = 0;
0
8e7e08bf7b9e Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1219
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
1220 memset(&optFormat, 0, sizeof(optFormat));
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
1221
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
1222 // Initialize character conversion
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
1223 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
1224 {
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
1225 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
1226 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
1227 }
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
1228
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
1229 // Parse command line arguments
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
1230 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
1231 argHandleOpt, NULL, OPTH_ONLY_OPTS))
247
8c6f0a3afc43 "goto out" instead of "return -1" when commandline argument parsing fails.
Matti Hamalainen <ccr@tnsp.org>
parents: 246
diff changeset
1232 goto out;
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
1233
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
1234 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
1235 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
1236
308
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
1237 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
1238 (!optFieldOutput && optFormat.nitems > 0))
29
d4ec69beb160 Add one line output format.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
1239 {
308
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
1240 // 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
1241 optParsable = FALSE;
180
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
1242
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
1243 // 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
1244 if (optEscapeChars == NULL)
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
1245 optEscapeChars = optOneLineFieldSep;
29
d4ec69beb160 Add one line output format.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
1246 }
153
e3be2ae6120e Delete trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 150
diff changeset
1247
161
58fe784a6e48 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 158
diff changeset
1248 if (optFieldOutput && optFormat.nitems == 0)
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1249 {
161
58fe784a6e48 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 158
diff changeset
1250 // 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
1251 siClearStack(&optFormat);
127
1786b9d77782 Rename a variable, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 126
diff changeset
1252
161
58fe784a6e48 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 158
diff changeset
1253 for (int i = 0; i < noptPSOptions; i++)
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1254 {
308
04502257ccdf Add default formats for certain fields, but use them only for the standard
Matti Hamalainen <ccr@tnsp.org>
parents: 303
diff changeset
1255 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
1256 memset(&item, 0, sizeof(item));
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1257 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
1258 item.fmt = th_strdup(optPSOptions[i].dfmt);
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1259 siStackAddItem(&optFormat, &item);
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1260 }
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1261 }
29
d4ec69beb160 Add one line output format.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
1262
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
1263 // Check if HVSC path is set
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1264 if (setHVSCPath != NULL)
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1265 {
270
7c78ec8f6abd Improve one comment line.
Matti Hamalainen <ccr@tnsp.org>
parents: 269
diff changeset
1266 // Ensure that there is a path separator at the end
251
1e7c2c87e1e0 Oops, missed some lines from previous commit "TH_DIR_SEPARATOR define was renamed to TH_DIR_SEPARATOR_CHR in th-libs."
Matti Hamalainen <ccr@tnsp.org>
parents: 250
diff changeset
1267 if (th_strrcasecmp(setHVSCPath, TH_DIR_SEPARATOR_STR) == NULL)
1e7c2c87e1e0 Oops, missed some lines from previous commit "TH_DIR_SEPARATOR define was renamed to TH_DIR_SEPARATOR_CHR in th-libs."
Matti Hamalainen <ccr@tnsp.org>
parents: 250
diff changeset
1268 th_pstr_printf(&setHVSCPath, "%s%c", setHVSCPath, TH_DIR_SEPARATOR_CHR);
244
1beaad0d5219 Ensure that the specified HVSC path has '/' path separator at the end.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
1269
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
1270 // If SLDB path is not set, autocheck for .md5 and .txt
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1271 if (setSLDBPath == 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
1272 setSLDBPath = sidutil_check_hvsc_file(setHVSCPath, SET_SLDB_FILEBASE, ".md5");
230
1e860046a4cc Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 229
diff changeset
1273
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
1274 if (setSLDBPath == 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
1275 setSLDBPath = sidutil_check_hvsc_file(setHVSCPath, SET_SLDB_FILEBASE, ".txt");
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1276
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1277 if (setSTILDBPath == 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
1278 setSTILDBPath = sidutil_check_hvsc_file(setHVSCPath, SET_STILDB_FILENAME, NULL);
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1279 }
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1280
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1281 if (setSLDBPath != NULL)
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1282 {
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1283 // 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
1284 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
1285
186
2f129ea15405 Adjust to new th_io_fopen() API.
Matti Hamalainen <ccr@tnsp.org>
parents: 181
diff changeset
1286 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
1287 {
186
2f129ea15405 Adjust to new th_io_fopen() API.
Matti Hamalainen <ccr@tnsp.org>
parents: 181
diff changeset
1288 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
1289 setSLDBPath, th_error_str(ret));
235
3cb7be7b98a6 Rename a label.
Matti Hamalainen <ccr@tnsp.org>
parents: 234
diff changeset
1290 goto err1;
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1291 }
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1292
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1293 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
1294
215
d0baac239f30 Be more informative about SLDB format.
Matti Hamalainen <ccr@tnsp.org>
parents: 214
diff changeset
1295 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
1296 setSLDBNewFormat ? "new" : "old",
d0baac239f30 Be more informative about SLDB format.
Matti Hamalainen <ccr@tnsp.org>
parents: 214
diff changeset
1297 setSLDBNewFormat ? ".md5" : ".txt",
d0baac239f30 Be more informative about SLDB format.
Matti Hamalainen <ccr@tnsp.org>
parents: 214
diff changeset
1298 setSLDBPath);
d0baac239f30 Be more informative about SLDB format.
Matti Hamalainen <ccr@tnsp.org>
parents: 214
diff changeset
1299
236
609bfc1bd628 Change sidlib_sldb_new() API to int sidlib_sldb_new(SIDLibSLDB **pdbh).
Matti Hamalainen <ccr@tnsp.org>
parents: 235
diff changeset
1300 if ((ret = sidlib_sldb_new(&sidSLDB)) != THERR_OK)
110
e9dbedc4d5e4 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 109
diff changeset
1301 {
236
609bfc1bd628 Change sidlib_sldb_new() API to int sidlib_sldb_new(SIDLibSLDB **pdbh).
Matti Hamalainen <ccr@tnsp.org>
parents: 235
diff changeset
1302 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
1303 th_error_str(ret));
235
3cb7be7b98a6 Rename a label.
Matti Hamalainen <ccr@tnsp.org>
parents: 234
diff changeset
1304 goto err1;
110
e9dbedc4d5e4 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 109
diff changeset
1305 }
e9dbedc4d5e4 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 109
diff changeset
1306
222
3a01518fffe0 Rename sidlib functions from si_* prefix to sidlib_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
1307 if ((ret = sidlib_sldb_read(inFile, sidSLDB)) != THERR_OK)
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1308 {
285
04757ddace1a Unify SLDB error messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 283
diff changeset
1309 THERR("Error parsing SLDB: %s\n",
04757ddace1a Unify SLDB error messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 283
diff changeset
1310 th_error_str(ret));
235
3cb7be7b98a6 Rename a label.
Matti Hamalainen <ccr@tnsp.org>
parents: 234
diff changeset
1311 goto err1;
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1312 }
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1313
222
3a01518fffe0 Rename sidlib functions from si_* prefix to sidlib_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
1314 if ((ret = sidlib_sldb_build_index(sidSLDB)) != THERR_OK)
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1315 {
285
04757ddace1a Unify SLDB error messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 283
diff changeset
1316 THERR("Error building SLDB index: %s\n",
04757ddace1a Unify SLDB error messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 283
diff changeset
1317 th_error_str(ret));
235
3cb7be7b98a6 Rename a label.
Matti Hamalainen <ccr@tnsp.org>
parents: 234
diff changeset
1318 goto err1;
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1319 }
110
e9dbedc4d5e4 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 109
diff changeset
1320
235
3cb7be7b98a6 Rename a label.
Matti Hamalainen <ccr@tnsp.org>
parents: 234
diff changeset
1321 err1:
257
41fe5ec24726 Plug some minor memory leaks.
Matti Hamalainen <ccr@tnsp.org>
parents: 252
diff changeset
1322 th_io_free(inFile);
230
1e860046a4cc Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 229
diff changeset
1323 inFile = NULL;
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1324 }
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1325
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1326 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
1327 {
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1328 // 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
1329 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
1330 {
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1331 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
1332 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
1333 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
1334 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1335
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1336 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
1337
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1338 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
1339 setSTILDBPath);
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1340
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1341 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
1342 {
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1343 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
1344 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
1345 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
1346 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1347
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1348 if ((ret = sidlib_stildb_read(inFile, 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
1349 {
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1350 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
1351 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
1352 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
1353 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1354
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1355 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
1356 {
285
04757ddace1a Unify SLDB error messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 283
diff changeset
1357 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
1358 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
1359 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
1360 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1361
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1362 err2:
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1363 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
1364 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
1365 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1366
23
832c26cb1637 Improve option handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
1367 // Process files
832c26cb1637 Improve option handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
1368 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
1369 NULL, argHandleFile, OPTH_ONLY_OTHER))
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1370 goto out;
23
832c26cb1637 Improve option handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
1371
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1372 if (optNFiles == 0)
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
1373 {
141
71725be55ed1 Do not show full help if no filenames are specified.
Matti Hamalainen <ccr@tnsp.org>
parents: 140
diff changeset
1374 THERR("No filename(s) specified. Try --help.\n");
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
1375 }
1
25a3a142e909 Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
1376
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1377 out:
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1378
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
1379 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
1380
257
41fe5ec24726 Plug some minor memory leaks.
Matti Hamalainen <ccr@tnsp.org>
parents: 252
diff changeset
1381 siClearStack(&optFormat);
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1382 th_free(setHVSCPath);
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1383 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
1384 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
1385
222
3a01518fffe0 Rename sidlib functions from si_* prefix to sidlib_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
1386 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
1387 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
1388
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1389 return 0;
0
8e7e08bf7b9e Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1390 }