annotate sidinfo.c @ 279:d5ab136cdc97

Changes to the STIL and songlengths entry output formats .. just experimenting.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 07 Jan 2020 10:10:24 +0200
parents d73ccb155878
children 08695f046565
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"
191
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
11 #include <sys/types.h>
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
12 #include <dirent.h>
135
b4b1aac8761c Add preprocessor guards around iconv stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 134
diff changeset
13 #ifdef HAVE_ICONV
229
080219f105ce Improve some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 227
diff changeset
14 # include <iconv.h>
135
b4b1aac8761c Add preprocessor guards around iconv stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 134
diff changeset
15 #endif
70
4779bbec2f28 Split some functionality into sidlib.[ch].
Matti Hamalainen <ccr@tnsp.org>
parents: 63
diff changeset
16
0
8e7e08bf7b9e Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
17
229
080219f105ce Improve some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 227
diff changeset
18 //
28
6240788fe172 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
19 // Some constants
229
080219f105ce Improve some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 227
diff changeset
20 //
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
21
229
080219f105ce Improve some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 227
diff changeset
22 // HVSC documents directory
080219f105ce Improve some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 227
diff changeset
23 #define SET_HVSC_DOCUMENTS "DOCUMENTS"
080219f105ce Improve some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 227
diff changeset
24
080219f105ce Improve some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 227
diff changeset
25 // Songlengths database filename prefix (.md5|.txt appended)
080219f105ce Improve some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 227
diff changeset
26 #define SET_SLDB_FILEBASE "Songlengths"
1
25a3a142e909 Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
27
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
28 // STIL database file
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
29 #define SET_STILDB_FILENAME "STIL.txt"
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
30
121
a2c2c63311de Change in th_args API.
Matti Hamalainen <ccr@tnsp.org>
parents: 120
diff changeset
31
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
32 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
33 {
157
8fc887cb56d0 Implement iconv support for converting from PSID de-facto latin-1/ISO-8859-*
Matti Hamalainen <ccr@tnsp.org>
parents: 156
diff changeset
34 OFMT_QUOTED = 0x0001,
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
35 OFMT_FORMAT = 0x0002,
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
36 };
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
37
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
38
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
39 enum
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
40 {
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
41 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
42 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
43 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
44 };
55d99dc7c35c Prepare for some possible future enhancements by specifying a type for each data field.
Matti Hamalainen <ccr@tnsp.org>
parents: 111
diff changeset
45
0
8e7e08bf7b9e Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
46
278
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
47 enum
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
48 {
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
49 TH_LANG_UTF8,
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
50 TH_LANG_ISO88591,
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
51 TH_LANG_CP850,
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
52 TH_LANG_CP437,
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
53 };
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
54
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
55
0
8e7e08bf7b9e Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
56 typedef struct
8e7e08bf7b9e Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
57 {
63
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
58 int cmd;
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
59 char *str;
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
60 char chr;
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
61 int flags;
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
62 char *fmt;
63
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
63 } PSFStackItem;
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
64
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
65
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
66 typedef struct
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
67 {
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
68 int nitems, nallocated;
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
69 PSFStackItem *items;
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
70 } PSFStack;
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
71
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
72
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
73 typedef struct
6bbe11ae6bf5 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 62
diff changeset
74 {
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
75 char *name;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
76 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
77 int type;
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
78 } PSFOption;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
79
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
80
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
81 static const PSFOption optPSOptions[] =
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
82 {
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
83 { "Filename" , NULL , OTYPE_STR },
55d99dc7c35c Prepare for some possible future enhancements by specifying a type for each data field.
Matti Hamalainen <ccr@tnsp.org>
parents: 111
diff changeset
84 { "Type" , NULL , OTYPE_STR },
55d99dc7c35c Prepare for some possible future enhancements by specifying a type for each data field.
Matti Hamalainen <ccr@tnsp.org>
parents: 111
diff changeset
85 { "Version" , NULL , OTYPE_STR },
55d99dc7c35c Prepare for some possible future enhancements by specifying a type for each data field.
Matti Hamalainen <ccr@tnsp.org>
parents: 111
diff changeset
86 { "PlayerType" , "Player type" , OTYPE_STR },
55d99dc7c35c Prepare for some possible future enhancements by specifying a type for each data field.
Matti Hamalainen <ccr@tnsp.org>
parents: 111
diff changeset
87 { "PlayerCompat" , "Player compatibility" , OTYPE_STR },
55d99dc7c35c Prepare for some possible future enhancements by specifying a type for each data field.
Matti Hamalainen <ccr@tnsp.org>
parents: 111
diff changeset
88 { "VideoClock" , "Video clock speed" , OTYPE_STR },
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 { "SIDModel" , "SID model" , OTYPE_STR },
55
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
90
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
91 { "DataOffs" , "Data offset" , OTYPE_INT },
55d99dc7c35c Prepare for some possible future enhancements by specifying a type for each data field.
Matti Hamalainen <ccr@tnsp.org>
parents: 111
diff changeset
92 { "DataSize" , "Data size" , OTYPE_INT },
55d99dc7c35c Prepare for some possible future enhancements by specifying a type for each data field.
Matti Hamalainen <ccr@tnsp.org>
parents: 111
diff changeset
93 { "LoadAddr" , "Load address" , OTYPE_INT },
55d99dc7c35c Prepare for some possible future enhancements by specifying a type for each data field.
Matti Hamalainen <ccr@tnsp.org>
parents: 111
diff changeset
94 { "InitAddr" , "Init address" , OTYPE_INT },
55d99dc7c35c Prepare for some possible future enhancements by specifying a type for each data field.
Matti Hamalainen <ccr@tnsp.org>
parents: 111
diff changeset
95 { "PlayAddr" , "Play address" , OTYPE_INT },
55d99dc7c35c Prepare for some possible future enhancements by specifying a type for each data field.
Matti Hamalainen <ccr@tnsp.org>
parents: 111
diff changeset
96 { "Songs" , "Songs" , OTYPE_INT },
55d99dc7c35c Prepare for some possible future enhancements by specifying a type for each data field.
Matti Hamalainen <ccr@tnsp.org>
parents: 111
diff changeset
97 { "StartSong" , "Start song" , OTYPE_INT },
28
6240788fe172 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
98
267
ac6b5957b82b Oops, second and third SID chip models were being printed out as integers
Matti Hamalainen <ccr@tnsp.org>
parents: 259
diff changeset
99 { "SID2Model" , "2nd SID model" , OTYPE_STR },
ac6b5957b82b Oops, second and third SID chip models were being printed out as integers
Matti Hamalainen <ccr@tnsp.org>
parents: 259
diff changeset
100 { "SID3Model" , "3rd SID model" , OTYPE_STR },
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
101 { "SID2Addr" , "2nd SID address" , OTYPE_INT },
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
102 { "SID3Addr" , "3rd SID address" , OTYPE_INT },
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
103
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
104 { "Name" , NULL , OTYPE_STR },
55d99dc7c35c Prepare for some possible future enhancements by specifying a type for each data field.
Matti Hamalainen <ccr@tnsp.org>
parents: 111
diff changeset
105 { "Author" , NULL , OTYPE_STR },
55d99dc7c35c Prepare for some possible future enhancements by specifying a type for each data field.
Matti Hamalainen <ccr@tnsp.org>
parents: 111
diff changeset
106 { "Copyright" , NULL , OTYPE_STR },
150
0288c4d138f7 Make the hash field also formattable.
Matti Hamalainen <ccr@tnsp.org>
parents: 148
diff changeset
107 { "Hash" , NULL , OTYPE_STR },
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
108
55d99dc7c35c Prepare for some possible future enhancements by specifying a type for each data field.
Matti Hamalainen <ccr@tnsp.org>
parents: 111
diff changeset
109 { "Songlengths" , "Song lengths" , OTYPE_OTHER },
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
110
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
111 { "STIL" , "STIL information" , OTYPE_OTHER },
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
112 };
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
113
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
114 static const int noptPSOptions = sizeof(optPSOptions) / sizeof(optPSOptions[0]);
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
115
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
116
28
6240788fe172 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
117 // Option variables
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
118 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
119 *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
120 *setSTILDBPath = NULL;
163
179ffe97599c Implement support for the "new" MD5 format of SLDB.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
121 BOOL setSLDBNewFormat = FALSE,
179ffe97599c Implement support for the "new" MD5 format of SLDB.
Matti Hamalainen <ccr@tnsp.org>
parents: 161
diff changeset
122 optParsable = FALSE,
7
36c43f085b28 Add NoPrefix option -n.
Matti Hamalainen <ccr@tnsp.org>
parents: 5
diff changeset
123 optNoNamePrefix = FALSE,
29
d4ec69beb160 Add one line output format.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
124 optHexadecimal = FALSE,
191
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
125 optFieldOutput = TRUE,
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
126 optRecurseDirs = FALSE;
180
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
127 char *optOneLineFieldSep = NULL,
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
128 *optEscapeChars = NULL;
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
129 int optNFiles = 0;
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
130
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
131 PSFStack optFormat;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
132
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
133 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
134 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
135
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
136
278
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
137 BOOL setUseOutConv;
135
b4b1aac8761c Add preprocessor guards around iconv stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 134
diff changeset
138 #ifdef HAVE_ICONV
278
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
139 iconv_t setIConvCtx;
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
140 #else
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
141 int setOutLang;
135
b4b1aac8761c Add preprocessor guards around iconv stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 134
diff changeset
142 #endif
120
ecbc8cabd6a2 Initial work on iconv support.
Matti Hamalainen <ccr@tnsp.org>
parents: 118
diff changeset
143
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
144
28
6240788fe172 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
145 // Define option arguments
121
a2c2c63311de Change in th_args API.
Matti Hamalainen <ccr@tnsp.org>
parents: 120
diff changeset
146 static const th_optarg optList[] =
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
147 {
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
148 { 0, '?', "help", "Show this help", OPT_NONE },
204
0327fe1d0686 Enable -v verbosity option.
Matti Hamalainen <ccr@tnsp.org>
parents: 200
diff changeset
149 { 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
150 {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
151
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
152 { 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
153 { 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
154 { 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
155 {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
156 { 3, 'f', "fields", "Show only specified field(s)", OPT_ARGREQ },
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
157 { 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
158 { 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
159 { 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
160 { 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
161 {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
162 {12, 'R', "recurse", "Recurse into sub-directories", OPT_NONE },
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
163 };
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
164
44
7b137e4e817c Fix to match the changes in th_args API.
Matti Hamalainen <ccr@tnsp.org>
parents: 41
diff changeset
165 static const int optListN = sizeof(optList) / sizeof(optList[0]);
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
166
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
167
173
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
168 void argShowLicense(void)
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
169 {
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
170 printf("%s - %s\n%s\n", th_prog_name, th_prog_desc, th_prog_author);
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
171 printf(
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
172 "\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
173 "Redistribution and use in source and binary forms, with or without\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
174 "modification, are permitted provided that the following conditions\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
175 "are met:\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
176 "\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
177 " 1. Redistributions of source code must retain the above copyright\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
178 " notice, this list of conditions and the following disclaimer.\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
179 "\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
180 " 2. Redistributions in binary form must reproduce the above copyright\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
181 " notice, this list of conditions and the following disclaimer in\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
182 " the documentation and/or other materials provided with the\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
183 " distribution.\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
184 "\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
185 " 3. The name of the author may not be used to endorse or promote\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
186 " products derived from this software without specific prior written\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
187 " permission.\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
188 "\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
189 "THIS SOFTWARE IS PROVIDED BY THE AUTHOR \"AS IS\" AND ANY EXPRESS OR\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
190 "IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
191 "WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
192 "ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
193 "INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
194 "(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
195 "SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
196 "HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
197 "STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
198 "IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
199 "POSSIBILITY OF SUCH DAMAGE.\n"
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
200 );
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
201 }
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
202
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
203
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
204 void argShowHelp(void)
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
205 {
75
92a4065c41d0 Improve listing of available fields in --help.
Matti Hamalainen <ccr@tnsp.org>
parents: 73
diff changeset
206 int index, len;
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
207
20
6058339ffe0e Update usage.
Matti Hamalainen <ccr@tnsp.org>
parents: 19
diff changeset
208 th_print_banner(stdout, th_prog_name, "[options] <sid filename> [sid filename #2 ..]");
44
7b137e4e817c Fix to match the changes in th_args API.
Matti Hamalainen <ccr@tnsp.org>
parents: 41
diff changeset
209 th_args_help(stdout, optList, optListN, 0);
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
210 printf(
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
211 "\n"
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
212 "Available fields:\n");
3
dbe35d78e621 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
213
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
214 for (len = index = 0; index < noptPSOptions; index++)
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
215 {
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
216 const PSFOption *opt = &optPSOptions[index];
75
92a4065c41d0 Improve listing of available fields in --help.
Matti Hamalainen <ccr@tnsp.org>
parents: 73
diff changeset
217 len += strlen(opt->name) + 3;
92a4065c41d0 Improve listing of available fields in --help.
Matti Hamalainen <ccr@tnsp.org>
parents: 73
diff changeset
218 if (len >= 72)
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
219 {
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
220 printf("\n");
75
92a4065c41d0 Improve listing of available fields in --help.
Matti Hamalainen <ccr@tnsp.org>
parents: 73
diff changeset
221 len = 0;
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
222 }
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
223 printf("%s%s", opt->name, (index < noptPSOptions - 1) ? ", " : "\n\n");
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
224 }
58
5ea07110f0cf Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 57
diff changeset
225
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
226 printf(
61
6916aaeda941 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 60
diff changeset
227 "Example: %s -x -p -f hash,copyright somesidfile.sid\n"
6916aaeda941 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 60
diff changeset
228 "\n"
6916aaeda941 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 60
diff changeset
229 "Format strings for '-F' option are composed of @fields@ that\n"
6916aaeda941 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 60
diff changeset
230 "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
231 "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
232 "\n"
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
233 "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
234 "-F \"@copyright:'%%-30s'@\"\n"
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
235 "\n"
180
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
236 "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
237 "(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
238 "\n"
1c004e74d0ad Adjust --help slightly.
Matti Hamalainen <ccr@tnsp.org>
parents: 230
diff changeset
239 "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
240 "as STIL.txt and Songlengths.(txt|md5) will be automatically used from there.\n"
1c004e74d0ad Adjust --help slightly.
Matti Hamalainen <ccr@tnsp.org>
parents: 230
diff changeset
241 "\n"
61
6916aaeda941 Improve help.
Matti Hamalainen <ccr@tnsp.org>
parents: 60
diff changeset
242 , th_prog_name);
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
243 }
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
244
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
245
78
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
246 int argMatchPSField(const char *field)
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
247 {
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
248 int index, found = -1;
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
249 for (index = 0; index < noptPSOptions; index++)
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
250 {
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
251 const PSFOption *opt = &optPSOptions[index];
78
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
252 if (th_strcasecmp(opt->name, field) == 0)
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
253 {
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
254 if (found >= 0)
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
255 return -2;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
256 found = index;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
257 }
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
258 }
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
259
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
260 return found;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
261 }
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
262
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
263
78
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
264 int argMatchPSFieldError(const char *field)
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
265 {
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
266 int found = argMatchPSField(field);
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
267 switch (found)
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
268 {
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
269 case -1:
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
270 THERR("No such field '%s'.\n", field);
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
271 break;
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
272
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
273 case -2:
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
274 THERR("Field '%s' is ambiguous.\n", field);
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
275 break;
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
276 }
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
277 return found;
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
278 }
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
279
9fb70b7b34ff Clean up error handling for field parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
280
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
281 const char *siStripHVSCPath(const char *filename)
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
282 {
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
283 if (setHVSCPath != NULL)
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
284 {
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
285 const char *hvsc = setHVSCPath, *fptr = filename;
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
286
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
287 // Compare until end of string(s)
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
288 for (; *hvsc != 0 && *fptr != 0 && *hvsc == *fptr; hvsc++, fptr++);
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
289
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
290 // Full match?
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
291 if (*hvsc == 0)
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
292 return fptr - 1;
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
293 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
294
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
295 return filename;
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
296 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
297
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
298
240
217f294deea5 Move function.
Matti Hamalainen <ccr@tnsp.org>
parents: 238
diff changeset
299 char *siCheckHVSCFilePath(const char *filebase, const char *fext)
217f294deea5 Move function.
Matti Hamalainen <ccr@tnsp.org>
parents: 238
diff changeset
300 {
217f294deea5 Move function.
Matti Hamalainen <ccr@tnsp.org>
parents: 238
diff changeset
301 th_stat_data sdata;
217f294deea5 Move function.
Matti Hamalainen <ccr@tnsp.org>
parents: 238
diff changeset
302 char *npath = th_strdup_printf("%s%c%s%c%s%s",
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
303 setHVSCPath, TH_DIR_SEPARATOR_CHR,
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
304 SET_HVSC_DOCUMENTS, TH_DIR_SEPARATOR_CHR,
240
217f294deea5 Move function.
Matti Hamalainen <ccr@tnsp.org>
parents: 238
diff changeset
305 filebase, fext != NULL ? fext : "");
217f294deea5 Move function.
Matti Hamalainen <ccr@tnsp.org>
parents: 238
diff changeset
306
217f294deea5 Move function.
Matti Hamalainen <ccr@tnsp.org>
parents: 238
diff changeset
307 if (npath != NULL &&
217f294deea5 Move function.
Matti Hamalainen <ccr@tnsp.org>
parents: 238
diff changeset
308 th_stat_path(npath, &sdata) &&
217f294deea5 Move function.
Matti Hamalainen <ccr@tnsp.org>
parents: 238
diff changeset
309 (sdata.flags & TH_IS_READABLE) &&
217f294deea5 Move function.
Matti Hamalainen <ccr@tnsp.org>
parents: 238
diff changeset
310 (sdata.flags & TH_IS_DIR) == 0)
217f294deea5 Move function.
Matti Hamalainen <ccr@tnsp.org>
parents: 238
diff changeset
311 return npath;
217f294deea5 Move function.
Matti Hamalainen <ccr@tnsp.org>
parents: 238
diff changeset
312
217f294deea5 Move function.
Matti Hamalainen <ccr@tnsp.org>
parents: 238
diff changeset
313 th_free(npath);
217f294deea5 Move function.
Matti Hamalainen <ccr@tnsp.org>
parents: 238
diff changeset
314 return NULL;
217f294deea5 Move function.
Matti Hamalainen <ccr@tnsp.org>
parents: 238
diff changeset
315 }
217f294deea5 Move function.
Matti Hamalainen <ccr@tnsp.org>
parents: 238
diff changeset
316
217f294deea5 Move function.
Matti Hamalainen <ccr@tnsp.org>
parents: 238
diff changeset
317
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
318 BOOL siStackAddItem(PSFStack *stack, const PSFStackItem *item)
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
319 {
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
320 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
321 {
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
322 stack->nallocated += 16;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
323 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
324 {
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
325 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
326 return FALSE;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
327 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
328 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
329
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
330 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
331 stack->nitems++;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
332 return TRUE;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
333 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
334
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
335
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
336 void siClearStack(PSFStack *stack)
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
337 {
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
338 if (stack != NULL)
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
339 {
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
340 if (stack->nitems > 0 && stack->items != NULL)
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
341 {
246
f50947e8ff93 Move two index variables from block scope to loop scope.
Matti Hamalainen <ccr@tnsp.org>
parents: 244
diff changeset
342 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
343 {
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
344 if (stack->items[n].cmd == -1)
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
345 th_free(stack->items[n].str);
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
346 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
347 th_free(stack->items);
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
348 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
349 memset(stack, 0, sizeof(PSFStack));
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
350 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
351 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
352
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
353
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
354 BOOL argParsePSFields(PSFStack *stack, const char *fmt)
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
355 {
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
356 const char *start = fmt;
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
357 siClearStack(stack);
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
358
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
359 while (*start)
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
360 {
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
361 PSFStackItem item;
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
362 const char *end = strchr(start, ',');
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
363 char *field = (end != NULL) ?
116
d062312ea850 Fix th_strndup_trim() usage.
Matti Hamalainen <ccr@tnsp.org>
parents: 115
diff changeset
364 th_strndup_trim(start, end - start, TH_TRIM_BOTH) :
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
365 th_strdup_trim(start, TH_TRIM_BOTH);
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
366
118
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
367 if (field != NULL)
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
368 {
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
369 int found = argMatchPSFieldError(field);
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
370 th_free(field);
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
371
118
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
372 if (found < 0)
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
373 return FALSE;
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
374
118
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
375 item.cmd = found;
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
376 item.str = NULL;
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
377 if (!siStackAddItem(stack, &item))
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
378 return FALSE;
24583e5ca0b3 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 116
diff changeset
379 }
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
380
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
381 if (!end)
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
382 break;
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
383
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
384 start = end + 1;
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
385 }
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
386
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
387 return TRUE;
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
388 }
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
389
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
390
278
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
391 static const uint8_t si_lang_iso88591_to_cp850[16*6] = {
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
392 0xff, 0xad, 0xbd, 0x9c, 0xcf, 0xbe, 0xdd, 0xf5, 0xf9, 0xb8, 0xa6, 0xae, 0xaa, 0xf0, 0xa9, 0xee,
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
393 0xf8, 0xf1, 0xfd, 0xfc, 0xef, 0xe6, 0xf4, 0xfa, 0xf7, 0xfb, 0xa7, 0xaf, 0xac, 0xab, 0xf3, 0xa8,
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
394 0xb7, 0xb5, 0xb6, 0xc7, 0x8e, 0x8f, 0x92, 0x80, 0xd4, 0x90, 0xd2, 0xd3, 0xde, 0xd6, 0xd7, 0xd8,
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
395 0xd1, 0xa5, 0xe3, 0xe0, 0xe2, 0xe5, 0x99, 0x9e, 0x9d, 0xeb, 0xe9, 0xea, 0x9a, 0xed, 0xe8, 0xe1,
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
396 0x85, 0xa0, 0x83, 0xc6, 0x84, 0x86, 0x91, 0x87, 0x8a, 0x82, 0x88, 0x89, 0x8d, 0xa1, 0x8c, 0x8b,
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
397 0xd0, 0xa4, 0x95, 0xa2, 0x93, 0xe4, 0x94, 0xf6, 0x9b, 0x97, 0xa3, 0x96, 0x81, 0xec, 0xe7, 0x98,
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
398 };
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
399
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
400 static const uint8_t si_lang_iso88591_to_cp437[16*6] = {
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
401 0xff, 0xad, 0x9b, 0x9c, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x00, 0xa6, 0xae, 0xaa, 0x00, 0x00, 0x00,
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
402 0xf8, 0xf1, 0xfd, 0x00, 0x00, 0xe6, 0x00, 0xfa, 0x00, 0x00, 0xa7, 0xaf, 0xac, 0xab, 0x00, 0xa8,
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
403 0x00, 0x00, 0x00, 0x00, 0x8e, 0x8f, 0x92, 0x80, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
404 0x00, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0xe1,
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
405 0x85, 0xa0, 0x83, 0x00, 0x84, 0x86, 0x91, 0x87, 0x8a, 0x82, 0x88, 0x89, 0x8d, 0xa1, 0x8c, 0x8b,
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
406 0x00, 0xa4, 0x95, 0xa2, 0x93, 0x00, 0x94, 0xf6, 0x00, 0x97, 0xa3, 0x96, 0x81, 0x00, 0x00, 0x98,
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
407 };
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
408
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
409
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
410 char *siConvertCharset(const char *src)
47f75154c7db Add internal fallback ISO-8859-1 to UTF-8 converter and improve iconv() support.
Matti Hamalainen <ccr@tnsp.org>
parents: 192
diff changeset
411 {
157
8fc887cb56d0 Implement iconv support for converting from PSID de-facto latin-1/ISO-8859-*
Matti Hamalainen <ccr@tnsp.org>
parents: 156
diff changeset
412 #ifdef HAVE_ICONV
8fc887cb56d0 Implement iconv support for converting from PSID de-facto latin-1/ISO-8859-*
Matti Hamalainen <ccr@tnsp.org>
parents: 156
diff changeset
413 size_t srcLeft = strlen(src) + 1;
8fc887cb56d0 Implement iconv support for converting from PSID de-facto latin-1/ISO-8859-*
Matti Hamalainen <ccr@tnsp.org>
parents: 156
diff changeset
414 size_t outLeft = srcLeft * 2;
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
415 char *srcPtr = (char *) src;
157
8fc887cb56d0 Implement iconv support for converting from PSID de-facto latin-1/ISO-8859-*
Matti Hamalainen <ccr@tnsp.org>
parents: 156
diff changeset
416 char *outBuf, *outPtr;
8fc887cb56d0 Implement iconv support for converting from PSID de-facto latin-1/ISO-8859-*
Matti Hamalainen <ccr@tnsp.org>
parents: 156
diff changeset
417
8fc887cb56d0 Implement iconv support for converting from PSID de-facto latin-1/ISO-8859-*
Matti Hamalainen <ccr@tnsp.org>
parents: 156
diff changeset
418 if ((outBuf = outPtr = th_malloc(outLeft + 1)) == NULL)
8fc887cb56d0 Implement iconv support for converting from PSID de-facto latin-1/ISO-8859-*
Matti Hamalainen <ccr@tnsp.org>
parents: 156
diff changeset
419 return NULL;
8fc887cb56d0 Implement iconv support for converting from PSID de-facto latin-1/ISO-8859-*
Matti Hamalainen <ccr@tnsp.org>
parents: 156
diff changeset
420
8fc887cb56d0 Implement iconv support for converting from PSID de-facto latin-1/ISO-8859-*
Matti Hamalainen <ccr@tnsp.org>
parents: 156
diff changeset
421 while (srcLeft > 0)
8fc887cb56d0 Implement iconv support for converting from PSID de-facto latin-1/ISO-8859-*
Matti Hamalainen <ccr@tnsp.org>
parents: 156
diff changeset
422 {
278
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
423 size_t ret = iconv(setIConvCtx, &srcPtr, &srcLeft, &outPtr, &outLeft);
157
8fc887cb56d0 Implement iconv support for converting from PSID de-facto latin-1/ISO-8859-*
Matti Hamalainen <ccr@tnsp.org>
parents: 156
diff changeset
424 if (ret == (size_t) -1)
8fc887cb56d0 Implement iconv support for converting from PSID de-facto latin-1/ISO-8859-*
Matti Hamalainen <ccr@tnsp.org>
parents: 156
diff changeset
425 break;
8fc887cb56d0 Implement iconv support for converting from PSID de-facto latin-1/ISO-8859-*
Matti Hamalainen <ccr@tnsp.org>
parents: 156
diff changeset
426 }
8fc887cb56d0 Implement iconv support for converting from PSID de-facto latin-1/ISO-8859-*
Matti Hamalainen <ccr@tnsp.org>
parents: 156
diff changeset
427
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
428 #else
278
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
429 // Fallback conversion of ISO-8859-1 to X
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
430 size_t srcSize = strlen(src), outSize, minLeft;
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
431 const uint8_t *srcPtr = (const uint8_t *) src;
278
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
432 const uint8_t *tab;
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
433 uint8_t *outBuf, *outPtr;
278
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
434
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
435 switch (setOutLang)
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
436 {
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
437 case TH_LANG_UTF8:
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
438 outSize = srcSize * 2;
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
439 minLeft = 2;
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
440 break;
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
441
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
442 default:
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
443 outSize = srcSize;
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
444 minLeft = 1;
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
445 }
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
446
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
447 if ((outBuf = outPtr = th_malloc(outSize)) == NULL)
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
448 return NULL;
47f75154c7db Add internal fallback ISO-8859-1 to UTF-8 converter and improve iconv() support.
Matti Hamalainen <ccr@tnsp.org>
parents: 192
diff changeset
449
278
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
450 while (srcSize > 0 && outSize >= minLeft)
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
451 {
278
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
452 switch (setOutLang)
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
453 {
278
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
454 case TH_LANG_UTF8:
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
455 // Not 100% correct really, but close enough
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
456 if (*srcPtr < 0x80)
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
457 {
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
458 *outPtr++ = *srcPtr;
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
459 outSize--;
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
460 }
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
461 else
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
462 if (*srcPtr < 0xBF)
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
463 {
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
464 *outPtr++ = 0xC2;
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
465 *outPtr++ = *srcPtr;
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
466 outSize -= 2;
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
467 }
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
468 else
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
469 {
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
470 *outPtr++ = 0xC3;
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
471 *outPtr++ = *srcPtr - 0x40;
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
472 outSize -= 2;
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
473 }
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
474 break;
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
475
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
476 case TH_LANG_ISO88591:
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
477 *outPtr++ = *srcPtr;
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
478 outSize--;
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
479 break;
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
480
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
481 case TH_LANG_CP850:
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
482 case TH_LANG_CP437:
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
483 // Not 100% correct either, but close enough
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
484 tab = (setOutLang == TH_LANG_CP850) ? si_lang_iso88591_to_cp850 : si_lang_iso88591_to_cp437;
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
485
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
486 if (*srcPtr < 0x7f)
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
487 *outPtr++ = *srcPtr;
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
488 else
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
489 if (*srcPtr >= 0xA0)
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
490 *outPtr++ = tab[*srcPtr - 0xA0];
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
491 else
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
492 *outPtr++ = '?';
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
493
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
494 outSize--;
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
495 break;
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
496 }
278
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
497
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
498 srcPtr++;
47f75154c7db Add internal fallback ISO-8859-1 to UTF-8 converter and improve iconv() support.
Matti Hamalainen <ccr@tnsp.org>
parents: 192
diff changeset
499 srcSize--;
47f75154c7db Add internal fallback ISO-8859-1 to UTF-8 converter and improve iconv() support.
Matti Hamalainen <ccr@tnsp.org>
parents: 192
diff changeset
500 }
47f75154c7db Add internal fallback ISO-8859-1 to UTF-8 converter and improve iconv() support.
Matti Hamalainen <ccr@tnsp.org>
parents: 192
diff changeset
501
47f75154c7db Add internal fallback ISO-8859-1 to UTF-8 converter and improve iconv() support.
Matti Hamalainen <ccr@tnsp.org>
parents: 192
diff changeset
502 *outPtr++ = 0;
47f75154c7db Add internal fallback ISO-8859-1 to UTF-8 converter and improve iconv() support.
Matti Hamalainen <ccr@tnsp.org>
parents: 192
diff changeset
503 #endif
47f75154c7db Add internal fallback ISO-8859-1 to UTF-8 converter and improve iconv() support.
Matti Hamalainen <ccr@tnsp.org>
parents: 192
diff changeset
504
47f75154c7db Add internal fallback ISO-8859-1 to UTF-8 converter and improve iconv() support.
Matti Hamalainen <ccr@tnsp.org>
parents: 192
diff changeset
505 return (char *) outBuf;
157
8fc887cb56d0 Implement iconv support for converting from PSID de-facto latin-1/ISO-8859-*
Matti Hamalainen <ccr@tnsp.org>
parents: 156
diff changeset
506 }
8fc887cb56d0 Implement iconv support for converting from PSID de-facto latin-1/ISO-8859-*
Matti Hamalainen <ccr@tnsp.org>
parents: 156
diff changeset
507
8fc887cb56d0 Implement iconv support for converting from PSID de-facto latin-1/ISO-8859-*
Matti Hamalainen <ccr@tnsp.org>
parents: 156
diff changeset
508
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
509 int siItemFormatStrPutInt(th_vprintf_ctx *ctx, th_vprintf_putch vputch,
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
510 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
511 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
512 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
513 char buf[64];
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
514 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
515 BOOL f_neg = FALSE;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
516
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
517 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
518 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
519
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
520 if (vret == EOF)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
521 return 0;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
522
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
523 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
524 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
525
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
526
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
527 int siItemFormatStrPrintDo(th_vprintf_ctx *ctx, 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
528 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
529 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
530 int ret = 0;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
531
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
532 while (*fmt)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
533 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
534 if (*fmt != '%')
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
535 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
536 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
537 goto out;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
538 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
539 else
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
540 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
541 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
542 BOOL end = FALSE;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
543
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
544 fmt++;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
545
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
546 // Check for flags
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
547 while (!end)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
548 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
549 switch (*fmt)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
550 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
551 case '#':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
552 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
553 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
554
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
555 case '+':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
556 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
557 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
558
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
559 case '0':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
560 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
561 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
562
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
563 case '-':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
564 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
565 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
566
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
567 case ' ':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
568 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
569 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
570
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
571 case '\'':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
572 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
573 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
574
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
575 default:
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
576 end = TRUE;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
577 break;
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 (!end) fmt++;
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
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
582 // Get field width
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
583 if (*fmt == '*')
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
584 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
585 return -101;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
586 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
587 else
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 f_width = 0;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
590 while (th_isdigit(*fmt))
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
591 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
592 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
593
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
594 // Check for field precision
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
595 if (*fmt == '.')
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
596 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
597 fmt++;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
598 if (*fmt == '*')
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
599 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
600 return -102;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
601 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
602 else
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
603 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
604 // 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
605 f_prec = 0;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
606 while (th_isdigit(*fmt))
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
607 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
608 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
609 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
610
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
611
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
612 // 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
613 switch (*fmt)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
614 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
615 case 0:
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
616 return -104;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
617
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
618 case 'o':
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
619 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
620 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
621 goto out;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
622 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
623
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
624 case 'u':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
625 case 'i':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
626 case 'd':
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
627 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
628 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
629 goto out;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
630 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
631
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
632 case 'x':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
633 case 'X':
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
634 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
635 if (*fmt == 'X')
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
636 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
637 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
638 goto out;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
639 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
640
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
641 case 's':
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
642 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
643 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
644 goto out;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
645 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
646
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
647 //case '%':
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
648 default:
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
649 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
650 goto out;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
651 break;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
652 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
653 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
654 fmt++;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
655 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
656
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
657 out:
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
658 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
659 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
660
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
661
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
662 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
663 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
664 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
665 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
666 ctx->size += 64;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
667 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
668 return EOF;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
669 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
670
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
671 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
672
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
673 ctx->pos++;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
674 ctx->ipos++;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
675 return ch;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
676 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
677
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
678
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
679 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
680 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
681 th_vprintf_ctx ctx;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
682
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
683 ctx.size = 128;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
684 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
685 ctx.pos = 0;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
686 ctx.ipos = 0;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
687
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
688 if (ctx.buf == NULL)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
689 return NULL;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
690
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
691 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
692 goto err;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
693
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
694 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
695 goto err;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
696
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
697 return ctx.buf;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
698
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
699 err:
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
700 th_free(ctx.buf);
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
701 return NULL;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
702 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
703
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
704
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
705 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
706 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
707 ctx->pos++;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
708 ctx->ipos++;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
709 return ch;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
710 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
711
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
712
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
713 BOOL siItemFormatStrCheck(const char *fmt, const PSFOption *opt)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
714 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
715 th_vprintf_ctx ctx;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
716
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
717 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
718
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
719 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
720 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
721
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
722
79
5709d0beb394 Avoid using a global variable here.
Matti Hamalainen <ccr@tnsp.org>
parents: 78
diff changeset
723 //
5709d0beb394 Avoid using a global variable here.
Matti Hamalainen <ccr@tnsp.org>
parents: 78
diff changeset
724 // Parse a format string into a PSFStack structure
5709d0beb394 Avoid using a global variable here.
Matti Hamalainen <ccr@tnsp.org>
parents: 78
diff changeset
725 //
5709d0beb394 Avoid using a global variable here.
Matti Hamalainen <ccr@tnsp.org>
parents: 78
diff changeset
726 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
727 {
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
728 PSFStackItem item;
83
c54d74312080 Fix some warnings.
Matti Hamalainen <ccr@tnsp.org>
parents: 82
diff changeset
729 const char *start = NULL;
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
730 int mode = 0;
113
cd97e7517e21 Simplify error handling logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
731 BOOL rval = TRUE;
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
732
79
5709d0beb394 Avoid using a global variable here.
Matti Hamalainen <ccr@tnsp.org>
parents: 78
diff changeset
733 siClearStack(stack);
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
734
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
735 while (mode != -1)
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
736 switch (mode)
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
737 {
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
738 case 0:
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
739 if (*fmt == '@')
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
740 {
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
741 start = fmt + 1;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
742 mode = 1;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
743 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
744 else
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
745 {
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
746 start = fmt;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
747 mode = 2;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
748 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
749 fmt++;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
750 break;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
751
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
752 case 1:
143
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
753 if (*fmt != '@')
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
754 {
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
755 if (*fmt == 0)
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
756 mode = -1;
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
757 fmt++;
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
758 break;
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
759 }
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
760
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
761 if (fmt - start == 0)
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
762 {
177
6a73d17f0c34 Add a comment.
Matti Hamalainen <ccr@tnsp.org>
parents: 176
diff changeset
763 // "@@" sequence, just print out @
143
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
764 item.cmd = -2;
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
765 item.str = NULL;
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
766 item.chr = '@';
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
767 if (!siStackAddItem(stack, &item))
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
768 return FALSE;
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
769 }
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
770 else
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
771 {
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
772 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
773 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
774 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
775 *pfield = 0;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
776 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
777 }
143
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
778
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
779 int ret = argMatchPSFieldError(field);
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
780 if (ret >= 0)
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
781 {
143
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
782 item.cmd = ret;
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
783 item.flags = 0;
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
784 item.fmt = NULL;
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
785 item.str = NULL;
143
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
786
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
787 if (fopt != NULL)
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
788 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
789 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
790 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
791 item.flags |= OFMT_FORMAT;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
792 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
793 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
794 else
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
795 {
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
796 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
797 rval = FALSE;
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
798 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
799 }
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
800
79
5709d0beb394 Avoid using a global variable here.
Matti Hamalainen <ccr@tnsp.org>
parents: 78
diff changeset
801 if (!siStackAddItem(stack, &item))
143
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
802 rval = FALSE;
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
803 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
804 else
143
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
805 rval = FALSE;
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
806
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
807 th_free(fopt);
143
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
808 th_free(field);
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
809 }
143
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
810
e481947fd051 Improve format string parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 142
diff changeset
811 mode = 0;
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
812 fmt++;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
813 break;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
814
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
815 case 2:
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
816 if (*fmt == 0 || *fmt == '@')
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
817 {
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
818 item.cmd = -1;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
819 item.str = th_strndup(start, fmt - start);
79
5709d0beb394 Avoid using a global variable here.
Matti Hamalainen <ccr@tnsp.org>
parents: 78
diff changeset
820 if (!siStackAddItem(stack, &item))
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
821 return FALSE;
79
5709d0beb394 Avoid using a global variable here.
Matti Hamalainen <ccr@tnsp.org>
parents: 78
diff changeset
822
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
823 mode = (*fmt == 0) ? -1 : 0;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
824 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
825 else
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
826 fmt++;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
827 break;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
828 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
829
113
cd97e7517e21 Simplify error handling logic.
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
830 return rval;
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
831 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
832
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
833
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
834 BOOL argHandleOpt(const int optN, char *optArg, char *currArg)
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
835 {
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
836 switch (optN)
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
837 {
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
838 case 0:
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
839 argShowHelp();
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
840 exit(0);
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
841 break;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
842
173
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
843 case 10:
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
844 argShowLicense();
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
845 exit(0);
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
846 break;
23dcc2dc47a9 Add the license into the program itself, displayable via --license option.
Matti Hamalainen <ccr@tnsp.org>
parents: 172
diff changeset
847
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
848 case 1:
172
6dcf4ca1dce7 Change to match th-libs' verbosity level changes.
Matti Hamalainen <ccr@tnsp.org>
parents: 171
diff changeset
849 th_verbosity++;
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
850 break;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
851
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
852 case 2:
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
853 optParsable = TRUE;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
854 break;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
855
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
856 case 3:
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
857 if (!argParsePSFields(&optFormat, optArg))
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
858 return FALSE;
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
859 break;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
860
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
861 case 4:
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
862 optHexadecimal = TRUE;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
863 break;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
864
7
36c43f085b28 Add NoPrefix option -n.
Matti Hamalainen <ccr@tnsp.org>
parents: 5
diff changeset
865 case 5:
36c43f085b28 Add NoPrefix option -n.
Matti Hamalainen <ccr@tnsp.org>
parents: 5
diff changeset
866 optNoNamePrefix = TRUE;
36c43f085b28 Add NoPrefix option -n.
Matti Hamalainen <ccr@tnsp.org>
parents: 5
diff changeset
867 break;
36c43f085b28 Add NoPrefix option -n.
Matti Hamalainen <ccr@tnsp.org>
parents: 5
diff changeset
868
29
d4ec69beb160 Add one line output format.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
869 case 6:
180
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
870 optOneLineFieldSep = optArg;
29
d4ec69beb160 Add one line output format.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
871 break;
d4ec69beb160 Add one line output format.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
872
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
873 case 7:
111
c7ecf56d23e7 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 110
diff changeset
874 optFieldOutput = FALSE;
79
5709d0beb394 Avoid using a global variable here.
Matti Hamalainen <ccr@tnsp.org>
parents: 78
diff changeset
875 if (!argParsePSFormatStr(&optFormat, optArg))
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
876 return FALSE;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
877 break;
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
878
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
879 case 8:
252
9e45cb6f12a5 Use th_pstr_cpy() for setting certain variables.
Matti Hamalainen <ccr@tnsp.org>
parents: 251
diff changeset
880 th_pstr_cpy(&setHVSCPath, optArg);
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
881 break;
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
882
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
883 case 9:
252
9e45cb6f12a5 Use th_pstr_cpy() for setting certain variables.
Matti Hamalainen <ccr@tnsp.org>
parents: 251
diff changeset
884 th_pstr_cpy(&setSLDBPath, optArg);
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
885 break;
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
886
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
887 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
888 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
889 break;
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
890
180
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
891 case 11:
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
892 optEscapeChars = optArg;
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
893 break;
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
894
191
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
895 case 12:
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
896 optRecurseDirs = TRUE;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
897 break;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
898
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
899 default:
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
900 THERR("Unknown option '%s'.\n", currArg);
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
901 return FALSE;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
902 }
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
903
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
904 return TRUE;
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
905 }
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
906
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
907
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
908 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
909 {
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
910 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
911 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
912
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
913 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
914 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
915
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
916 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
917 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
918 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
919 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
920
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
921 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
922 {
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
923 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
924 {
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
925 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
926 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
927 }
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
928 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
929 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
930
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
931 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
932 }
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
933
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
934 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
935 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
936
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
937 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
938
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
939 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
940 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
941 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
942 }
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
943
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
944
62
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
945 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
946 {
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
947 while (*str)
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
948 {
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
949 if (*str == '\\')
82
82679cccaa32 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
950 switch (*(++str))
62
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
951 {
82
82679cccaa32 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
952 case 'n': fputc('\n', outFile); break;
82679cccaa32 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
953 case 'r': fputc('\r', outFile); break;
82679cccaa32 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
954 case 't': fputc('\r', outFile); break;
82679cccaa32 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
955 case '\\': fputc('\\', outFile); break;
82679cccaa32 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
956 default: fputc(*str, outFile); break;
62
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
957 }
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
958 else
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
959 fputc(*str, outFile);
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
960
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
961 str++;
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
962 }
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
963 }
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
964
0d01efc3c803 Factor escape printing to a separate function.
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
965
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
966 static void siPrintFieldPrefixName(FILE *outFile, const char *name)
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
967 {
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
968 if (!optNoNamePrefix && optFieldOutput)
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
969 fprintf(outFile, optParsable ? "%s=" : "%-20s : ", name);
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
970 }
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
971
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
972
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
973 static void siPrintFieldPrefix(FILE *outFile, const PSFOption *opt)
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
974 {
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
975 siPrintFieldPrefixName(outFile,
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
976 (optParsable || opt->lname == NULL) ? opt->name : opt->lname);
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
977 }
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
978
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
979
33
39d9df17c8b1 Add field separator argument to -l option.
Matti Hamalainen <ccr@tnsp.org>
parents: 32
diff changeset
980 static void siPrintFieldSeparator(FILE *outFile)
39d9df17c8b1 Add field separator argument to -l option.
Matti Hamalainen <ccr@tnsp.org>
parents: 32
diff changeset
981 {
111
c7ecf56d23e7 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 110
diff changeset
982 if (optFieldOutput)
180
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
983 fputs(optOneLineFieldSep != NULL ? optOneLineFieldSep : "\n", outFile);
33
39d9df17c8b1 Add field separator argument to -l option.
Matti Hamalainen <ccr@tnsp.org>
parents: 32
diff changeset
984 }
39d9df17c8b1 Add field separator argument to -l option.
Matti Hamalainen <ccr@tnsp.org>
parents: 32
diff changeset
985
39d9df17c8b1 Add field separator argument to -l option.
Matti Hamalainen <ccr@tnsp.org>
parents: 32
diff changeset
986
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
987 static const char *siGetInfoFormat(const PSFStackItem *item, const int otype)
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
988 {
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
989 switch (otype)
146
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
990 {
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
991 case OTYPE_INT:
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
992 if (item->flags & OFMT_FORMAT)
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
993 return item->fmt;
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
994 else
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
995 return optHexadecimal ? "$%04x" : "%d";
146
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
996
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
997 case OTYPE_STR:
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
998 if (item->flags & OFMT_FORMAT)
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
999 return item->fmt;
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
1000 else
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1001 return "%s";
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
1002
155
de75385f75e2 Simplify by removing few lines of duplicate code.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1003 default:
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1004 return NULL;
146
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
1005 }
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1006 }
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1007
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1008
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1009 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
1010 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
1011 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
1012 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
1013 {
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1014 char *str, *tmp;
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
1015
278
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1016 if (setUseOutConv && d_str != NULL && 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
1017 {
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
1018 char *tmp2 = siConvertCharset(d_str);
180
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
1019 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
1020 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
1021 }
157
8fc887cb56d0 Implement iconv support for converting from PSID de-facto latin-1/ISO-8859-*
Matti Hamalainen <ccr@tnsp.org>
parents: 156
diff changeset
1022 else
180
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
1023 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
1024
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1025 if ((str = siItemFormatStrPrint(fmt, otype, tmp, d_int)) != NULL)
146
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
1026 fputs(str, outFile);
3
dbe35d78e621 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
1027
146
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
1028 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
1029 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
1030
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1031 *shown = TRUE;
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
1032 }
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
1033
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1034
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1035 #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
1036 siPrintFieldPrefix(outFile, opt); \
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1037 siPrintPSIDInfoLine(outFile, shown, siGetInfoFormat(item, opt->type), opt->type, d_str, -1, d_conv); \
276
158f4f613787 Call siPrintFieldSeparator() separately instead from inside siPrintPSIDInfoLine()
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1038 siPrintFieldSeparator(outFile); \
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1039 } while (0)
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1040
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1041 #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
1042 siPrintFieldPrefix(outFile, opt); \
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1043 siPrintPSIDInfoLine(outFile, shown, siGetInfoFormat(item, opt->type), opt->type, NULL, d_int, FALSE); \
276
158f4f613787 Call siPrintFieldSeparator() separately instead from inside siPrintPSIDInfoLine()
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1044 siPrintFieldSeparator(outFile); \
268
6312d33d1361 Refactor and improve the field formatting / printing to be more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 267
diff changeset
1045 } while (0)
9
c1fba4abf56f Make filename printing optional.
Matti Hamalainen <ccr@tnsp.org>
parents: 8
diff changeset
1046
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
1047
226
c32015f4969e Rename PSIDHeader struct to SIDLibPSIDHeader to conform with the SIDLib
Matti Hamalainen <ccr@tnsp.org>
parents: 225
diff changeset
1048 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
1049 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
1050 {
114
cc74a9871a44 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 113
diff changeset
1051 const PSFOption *opt = &optPSOptions[item->cmd];
150
0288c4d138f7 Make the hash field also formattable.
Matti Hamalainen <ccr@tnsp.org>
parents: 148
diff changeset
1052 char tmp[128];
146
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
1053
114
cc74a9871a44 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 113
diff changeset
1054 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
1055 {
156
717d143612e2 Simplify things by having separate PRS/PRI macros for printing string and
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
1056 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
1057 case 1: PRS(psid->magic, FALSE); break;
146
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
1058 case 2:
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
1059 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
1060 PRS(tmp, FALSE);
146
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
1061 break;
263cd25749a1 Simplify data printing.
Matti Hamalainen <ccr@tnsp.org>
parents: 145
diff changeset
1062 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
1063 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
1064 break;
55
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
1065 case 4:
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
1066 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
1067 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
1068 break;
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
1069 case 5:
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
1070 if (psid->version >= 2)
222
3a01518fffe0 Rename sidlib functions from si_* prefix to sidlib_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
1071 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
1072 break;
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
1073 case 6:
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
1074 if (psid->version >= 2)
222
3a01518fffe0 Rename sidlib functions from si_* prefix to sidlib_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
1075 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
1076 break;
35
79e6d08b473f Add more information fields, including SID model, video clock speed, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 34
diff changeset
1077
156
717d143612e2 Simplify things by having separate PRS/PRI macros for printing string and
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
1078 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
1079 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
1080 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
1081 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
1082 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
1083 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
1084 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
1085
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
1086 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
1087 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
1088 {
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
1089 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
1090 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
1091 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
1092
222
3a01518fffe0 Rename sidlib functions from si_* prefix to sidlib_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
1093 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
1094 }
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
1095 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
1096 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
1097 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
1098 {
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
1099 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
1100 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
1101 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
1102
222
3a01518fffe0 Rename sidlib functions from si_* prefix to sidlib_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
1103 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
1104 }
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
1105 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
1106 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
1107 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
1108 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
1109 break;
55
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
1110 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
1111 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
1112 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
1113 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
1114
156
717d143612e2 Simplify things by having separate PRS/PRI macros for printing string and
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
1115 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
1116 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
1117 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
1118
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
1119 case 21:
140
9f96b37c4f75 Don't print songlengths field if there are none.
Matti Hamalainen <ccr@tnsp.org>
parents: 138
diff changeset
1120 {
150
0288c4d138f7 Make the hash field also formattable.
Matti Hamalainen <ccr@tnsp.org>
parents: 148
diff changeset
1121 size_t i, k;
0288c4d138f7 Make the hash field also formattable.
Matti Hamalainen <ccr@tnsp.org>
parents: 148
diff changeset
1122 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
1123 sprintf(&tmp[k], "%02x", psid->hash[i]);
0288c4d138f7 Make the hash field also formattable.
Matti Hamalainen <ccr@tnsp.org>
parents: 148
diff changeset
1124
156
717d143612e2 Simplify things by having separate PRS/PRI macros for printing string and
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
1125 PRS(tmp, FALSE);
140
9f96b37c4f75 Don't print songlengths field if there are none.
Matti Hamalainen <ccr@tnsp.org>
parents: 138
diff changeset
1126 }
55
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
1127 break;
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1128
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
1129 case 22:
142
da29f147afcb Better check for number of songlengths.
Matti Hamalainen <ccr@tnsp.org>
parents: 141
diff changeset
1130 if (psid->lengths != NULL && psid->lengths->nlengths > 0)
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1131 {
140
9f96b37c4f75 Don't print songlengths field if there are none.
Matti Hamalainen <ccr@tnsp.org>
parents: 138
diff changeset
1132 siPrintFieldPrefix(outFile, opt);
246
f50947e8ff93 Move two index variables from block scope to loop scope.
Matti Hamalainen <ccr@tnsp.org>
parents: 244
diff changeset
1133 for (int i = 0; i < psid->lengths->nlengths; i++)
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1134 {
114
cc74a9871a44 Simplify.
Matti Hamalainen <ccr@tnsp.org>
parents: 113
diff changeset
1135 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
1136
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
1137 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
1138 len / 60, len % 60,
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
1139 (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
1140
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
1141 siPrintPSIDInfoLine(outFile, shown,
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
1142 siGetInfoFormat(item, OTYPE_STR),
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
1143 OTYPE_STR,
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
1144 tmp,
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
1145 -1, FALSE);
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1146 }
140
9f96b37c4f75 Don't print songlengths field if there are none.
Matti Hamalainen <ccr@tnsp.org>
parents: 138
diff changeset
1147 siPrintFieldSeparator(outFile);
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1148 }
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1149 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
1150
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1151 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
1152 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
1153 for (int nsubtune = 0; nsubtune < psid->stil->nsubtunes; nsubtune++)
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1154 {
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1155 SIDLibSTILSubTune *node = psid->stil->subtunes[nsubtune];
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1156 if (node != NULL)
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1157 {
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1158 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
1159 for (int nitem = 0; nitem < node->fields[nfield].ndata; nitem++)
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1160 {
279
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
1161 if (nsubtune > 0)
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
1162 {
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
1163 snprintf(tmp, sizeof(tmp), "STIL#%d/%s",
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
1164 nsubtune, sidlib_stil_fields[nfield]);
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
1165 }
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
1166 else
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
1167 {
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
1168 snprintf(tmp, sizeof(tmp), "STIL/%s",
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
1169 sidlib_stil_fields[nfield]);
d5ab136cdc97 Changes to the STIL and songlengths entry output formats .. just
Matti Hamalainen <ccr@tnsp.org>
parents: 278
diff changeset
1170 }
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1171
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1172 siPrintFieldPrefixName(outFile, tmp);
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1173 siPrintPSIDInfoLine(outFile, shown,
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1174 siGetInfoFormat(item, OTYPE_STR),
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1175 OTYPE_STR,
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1176 node->fields[nfield].data[nitem],
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1177 -1, TRUE);
276
158f4f613787 Call siPrintFieldSeparator() separately instead from inside siPrintPSIDInfoLine()
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1178 siPrintFieldSeparator(outFile);
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1179 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1180 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1181 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1182 break;
29
d4ec69beb160 Add one line output format.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
1183 }
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
1184 }
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
1185
0
8e7e08bf7b9e Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1186
269
cea4a7df9efd Rename siError() to siPSIDError() and make the printed output more logical.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
1187 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
1188 {
cf081a98dccd Improve error output.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
1189 (void) err;
269
cea4a7df9efd Rename siError() to siPSIDError() and make the printed output more logical.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
1190 THERR("%s - %s\n", msg, fh->filename);
187
cf081a98dccd Improve error output.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
1191 }
cf081a98dccd Improve error output.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
1192
cf081a98dccd Improve error output.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
1193
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1194 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
1195 {
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1196 (void) err;
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1197 THERR("[%s:%d] %s\n", fh->filename, fh->line, msg);
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1198 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1199
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1200
191
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1201 BOOL siHandleSIDFile(const char *filename)
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1202 {
226
c32015f4969e Rename PSIDHeader struct to SIDLibPSIDHeader to conform with the SIDLib
Matti Hamalainen <ccr@tnsp.org>
parents: 225
diff changeset
1203 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
1204 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
1205 FILE *outFile;
55
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
1206 BOOL shown = FALSE;
186
2f129ea15405 Adjust to new th_io_fopen() API.
Matti Hamalainen <ccr@tnsp.org>
parents: 181
diff changeset
1207 int res;
55
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
1208
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
1209 outFile = stdout;
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1210
186
2f129ea15405 Adjust to new th_io_fopen() API.
Matti Hamalainen <ccr@tnsp.org>
parents: 181
diff changeset
1211 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
1212 {
186
2f129ea15405 Adjust to new th_io_fopen() API.
Matti Hamalainen <ccr@tnsp.org>
parents: 181
diff changeset
1213 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
1214 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
1215 goto error;
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1216 }
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1217
269
cea4a7df9efd Rename siError() to siPSIDError() and make the printed output more logical.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
1218 th_io_set_handlers(inFile, siPSIDError, NULL);
187
cf081a98dccd Improve error output.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
1219
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1220 // 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
1221 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
1222 goto error;
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1223
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1224 // Get songlength information, if any
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1225 if (sidSLDB != NULL)
222
3a01518fffe0 Rename sidlib functions from si_* prefix to sidlib_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
1226 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
1227
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1228 // 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
1229 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
1230 {
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1231 psid->stil = sidlib_stildb_get_node(sidSTILDB, siStripHVSCPath(filename));
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1232 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
1233 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
1234 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1235
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1236 // Output
147
f636c55c7cc4 Implement C printf-style format specifiers for -F option @fields@.
Matti Hamalainen <ccr@tnsp.org>
parents: 146
diff changeset
1237 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
1238 {
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1239 PSFStackItem *item = &optFormat.items[index];
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1240 switch (item->cmd)
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
1241 {
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1242 case -1:
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1243 siPrintStrEscapes(outFile, item->str);
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1244 break;
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
1245
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1246 case -2:
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1247 fputc(item->chr, outFile);
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1248 break;
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
1249
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1250 default:
126
c1462b7880e8 Make si_read_sid_file() to allocate the PSIDHeader struct itself, adjust
Matti Hamalainen <ccr@tnsp.org>
parents: 125
diff changeset
1251 siPrintPSIDInformationField(outFile, filename, psid, &shown, item);
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1252 break;
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
1253 }
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
1254 }
153
e3be2ae6120e Delete trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 150
diff changeset
1255
188
489eb428cf65 Add separator empty line between "files" when in normal output mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 187
diff changeset
1256 if (optFieldOutput && shown)
55
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
1257 {
188
489eb428cf65 Add separator empty line between "files" when in normal output mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 187
diff changeset
1258 fprintf(outFile, "\n");
55
54b48086a1d0 Begin slight refactoring of how output is done.
Matti Hamalainen <ccr@tnsp.org>
parents: 53
diff changeset
1259 }
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1260
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1261 // Shutdown
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1262 error:
222
3a01518fffe0 Rename sidlib functions from si_* prefix to sidlib_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
1263 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
1264 th_io_free(inFile);
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1265
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1266 return TRUE;
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1267 }
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1268
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1269
191
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1270 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
1271 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1272 th_stat_data sdata;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1273 char *npath;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1274 BOOL ret = TRUE;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1275
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1276 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
1277 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
1278 else
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1279 npath = th_strdup(path);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1280
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1281 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
1282 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1283 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
1284 ret = FALSE;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1285 goto out;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1286 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1287
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1288 optNFiles++;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1289
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1290 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
1291 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1292 DIR *dirh;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1293 struct dirent *entry;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1294
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1295 // Check if recursion is disabled
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1296 if (!optRecurseDirs && optNFiles > 1)
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1297 goto out;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1298
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1299 if ((dirh = opendir(npath)) == NULL)
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1300 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1301 int err = th_get_error();
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1302 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
1303 path, th_error_str(err));
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1304 ret = FALSE;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1305 goto out;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1306 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1307
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1308 while ((entry = readdir(dirh)) != NULL)
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1309 if (entry->d_name[0] != '.')
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1310 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1311 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
1312 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1313 ret = FALSE;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1314 goto out;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1315 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1316 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1317
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1318 closedir(dirh);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1319 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1320 else
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1321 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
1322 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1323 siHandleSIDFile(npath);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1324 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1325
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1326 out:
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1327 th_free(npath);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1328 return ret;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1329 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1330
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1331
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1332 BOOL argHandleFile(char *path)
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1333 {
238
2ed665b74043 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 236
diff changeset
1334 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
1335 BOOL ret;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1336
238
2ed665b74043 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 236
diff changeset
1337 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
1338 return FALSE;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1339
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1340 // 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
1341 if ((pt = strrchr(npath, '/')) != NULL ||
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1342 (pt = strrchr(npath, '\\')) != NULL)
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1343 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1344 *pt++ = 0;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1345 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1346 else
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1347 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1348 th_free(npath);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1349 npath = th_strdup(".");
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1350 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
1351 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1352
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1353 // 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
1354 if (pt != NULL && *pt != 0)
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1355 {
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1356 if (strchr(pt, '*') || strchr(pt, '?'))
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1357 pattern = th_strdup(pt);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1358 else
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1359 filename = th_strdup(pt);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1360 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1361
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1362 ret = argHandleFileDir(npath, filename, pattern);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1363
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1364 th_free(pattern);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1365 th_free(npath);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1366 th_free(filename);
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1367 return ret;
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1368 }
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1369
d26bc1adfd14 Add internal directory reading and filename matching, plus optional
Matti Hamalainen <ccr@tnsp.org>
parents: 189
diff changeset
1370
0
8e7e08bf7b9e Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1371 int main(int argc, char *argv[])
8e7e08bf7b9e Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1372 {
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
1373 char *setLang = th_strdup(getenv("LANG"));
230
1e860046a4cc Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 229
diff changeset
1374 th_ioctx *inFile = NULL;
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
1375
259
4df54600633a Add support for "HVSC_BASE" environment variable as used by STILView by LaLa
Matti Hamalainen <ccr@tnsp.org>
parents: 257
diff changeset
1376 // 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
1377 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
1378
0
8e7e08bf7b9e Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1379 // Initialize
272
763623493f59 Bump version.
Matti Hamalainen <ccr@tnsp.org>
parents: 271
diff changeset
1380 th_init("SIDInfo", "PSID/RSID information displayer", "0.9.0",
227
2b3d5d49086d Bump copyright years.
Matti Hamalainen <ccr@tnsp.org>
parents: 226
diff changeset
1381 "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
1382 "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
1383
172
6dcf4ca1dce7 Change to match th-libs' verbosity level changes.
Matti Hamalainen <ccr@tnsp.org>
parents: 171
diff changeset
1384 th_verbosity = 0;
0
8e7e08bf7b9e Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1385
59
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
1386 memset(&optFormat, 0, sizeof(optFormat));
718cdb563531 Initial implementation of -F format string option.
Matti Hamalainen <ccr@tnsp.org>
parents: 58
diff changeset
1387
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
1388 // Get environment language
120
ecbc8cabd6a2 Initial work on iconv support.
Matti Hamalainen <ccr@tnsp.org>
parents: 118
diff changeset
1389 if (setLang != NULL)
ecbc8cabd6a2 Initial work on iconv support.
Matti Hamalainen <ccr@tnsp.org>
parents: 118
diff changeset
1390 {
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
1391 // Get the character encoding part (e.g. "UTF-8" etc.) and
47f75154c7db Add internal fallback ISO-8859-1 to UTF-8 converter and improve iconv() support.
Matti Hamalainen <ccr@tnsp.org>
parents: 192
diff changeset
1392 // strip out and lowercase everything (e.g. "utf8")
47f75154c7db Add internal fallback ISO-8859-1 to UTF-8 converter and improve iconv() support.
Matti Hamalainen <ccr@tnsp.org>
parents: 192
diff changeset
1393 size_t i;
120
ecbc8cabd6a2 Initial work on iconv support.
Matti Hamalainen <ccr@tnsp.org>
parents: 118
diff changeset
1394 char *ptr = strchr(setLang, '.');
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
1395 ptr = (ptr == NULL) ? setLang : ptr + 1;
47f75154c7db Add internal fallback ISO-8859-1 to UTF-8 converter and improve iconv() support.
Matti Hamalainen <ccr@tnsp.org>
parents: 192
diff changeset
1396
47f75154c7db Add internal fallback ISO-8859-1 to UTF-8 converter and improve iconv() support.
Matti Hamalainen <ccr@tnsp.org>
parents: 192
diff changeset
1397 for (i = 0; *ptr; ptr++)
47f75154c7db Add internal fallback ISO-8859-1 to UTF-8 converter and improve iconv() support.
Matti Hamalainen <ccr@tnsp.org>
parents: 192
diff changeset
1398 {
47f75154c7db Add internal fallback ISO-8859-1 to UTF-8 converter and improve iconv() support.
Matti Hamalainen <ccr@tnsp.org>
parents: 192
diff changeset
1399 if (*ptr != '-')
47f75154c7db Add internal fallback ISO-8859-1 to UTF-8 converter and improve iconv() support.
Matti Hamalainen <ccr@tnsp.org>
parents: 192
diff changeset
1400 setLang[i++] = th_tolower(*ptr);
47f75154c7db Add internal fallback ISO-8859-1 to UTF-8 converter and improve iconv() support.
Matti Hamalainen <ccr@tnsp.org>
parents: 192
diff changeset
1401 }
47f75154c7db Add internal fallback ISO-8859-1 to UTF-8 converter and improve iconv() support.
Matti Hamalainen <ccr@tnsp.org>
parents: 192
diff changeset
1402 setLang[i] = 0;
120
ecbc8cabd6a2 Initial work on iconv support.
Matti Hamalainen <ccr@tnsp.org>
parents: 118
diff changeset
1403
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
1404 #ifdef HAVE_ICONV
278
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1405 // Initialize iconv, check if we have language/charset
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1406 setIConvCtx = iconv_open("utf8", "iso88591");
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1407 setUseOutConv = setIConvCtx != (iconv_t) -1;
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
1408 #else
278
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1409 // Check if we can use our fallback converter
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1410 if (strcmp(setLang, "utf8") == 0)
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1411 setOutLang = TH_LANG_UTF8;
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1412 else
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1413 if (strcmp(setLang, "iso88591") == 0 ||
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1414 strcmp(setLang, "cp819") == 0 ||
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1415 strcmp(setLang, "latin1") == 0 ||
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1416 strcmp(setLang, "cp28591") == 0)
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1417 setOutLang = TH_LANG_ISO88591;
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1418 else
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1419 if (strcmp(setLang, "cp850") == 0)
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1420 setOutLang = TH_LANG_CP850;
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1421 else
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1422 if (strcmp(setLang, "cp437") == 0)
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1423 setOutLang = TH_LANG_CP437;
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1424 else
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1425 setOutLang = TH_LANG_ISO88591;
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1426
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1427 setUseOutConv = setOutLang != TH_LANG_ISO88591;
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
1428 #endif
278
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1429 }
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
1430
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
1431 // Parse command line arguments
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
1432 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
1433 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
1434 goto out;
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
1435
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
1436 THMSG(2, "Requested output LANG='%s', use charset conversion=%s\n",
278
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1437 setLang, setUseOutConv ? "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
1438
180
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
1439 if (optOneLineFieldSep != NULL)
29
d4ec69beb160 Add one line output format.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
1440 {
161
58fe784a6e48 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 158
diff changeset
1441 // For one-line format, disable parsing and prefixes
29
d4ec69beb160 Add one line output format.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
1442 optParsable = FALSE;
d4ec69beb160 Add one line output format.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
1443 optNoNamePrefix = TRUE;
180
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
1444
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
1445 // 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
1446 if (optEscapeChars == NULL)
6913c5dbbb58 Add separate escape characters option (-e <chars>), but make -l <separator>
Matti Hamalainen <ccr@tnsp.org>
parents: 177
diff changeset
1447 optEscapeChars = optOneLineFieldSep;
29
d4ec69beb160 Add one line output format.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
1448 }
153
e3be2ae6120e Delete trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 150
diff changeset
1449
161
58fe784a6e48 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 158
diff changeset
1450 if (optFieldOutput && optFormat.nitems == 0)
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1451 {
161
58fe784a6e48 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 158
diff changeset
1452 // For standard field output, push standard items to format stack
115
6843261b4cd6 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 114
diff changeset
1453 PSFStackItem item;
127
1786b9d77782 Rename a variable, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 126
diff changeset
1454
115
6843261b4cd6 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 114
diff changeset
1455 memset(&item, 0, sizeof(item));
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1456 siClearStack(&optFormat);
127
1786b9d77782 Rename a variable, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 126
diff changeset
1457
161
58fe784a6e48 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 158
diff changeset
1458 for (int i = 0; i < noptPSOptions; i++)
109
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1459 {
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1460 item.cmd = i;
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1461 siStackAddItem(&optFormat, &item);
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1462 }
59b5b99f4280 Reimplement '-f' option differently.
Matti Hamalainen <ccr@tnsp.org>
parents: 108
diff changeset
1463 }
29
d4ec69beb160 Add one line output format.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
1464
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
1465 // Check if HVSC path is set
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1466 if (setHVSCPath != NULL)
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1467 {
270
7c78ec8f6abd Improve one comment line.
Matti Hamalainen <ccr@tnsp.org>
parents: 269
diff changeset
1468 // 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
1469 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
1470 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
1471
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
1472 // 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
1473 if (setSLDBPath == NULL)
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
1474 setSLDBPath = siCheckHVSCFilePath(SET_SLDB_FILEBASE, ".md5");
230
1e860046a4cc Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 229
diff changeset
1475
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
1476 if (setSLDBPath == 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
1477 setSLDBPath = siCheckHVSCFilePath(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
1478
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1479 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
1480 setSTILDBPath = siCheckHVSCFilePath(SET_STILDB_FILENAME, NULL);
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1481 }
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1482
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1483 if (setSLDBPath != NULL)
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1484 {
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1485 // Initialize SLDB
110
e9dbedc4d5e4 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 109
diff changeset
1486 int ret = THERR_OK;
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
1487
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
1488 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
1489
186
2f129ea15405 Adjust to new th_io_fopen() API.
Matti Hamalainen <ccr@tnsp.org>
parents: 181
diff changeset
1490 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
1491 {
186
2f129ea15405 Adjust to new th_io_fopen() API.
Matti Hamalainen <ccr@tnsp.org>
parents: 181
diff changeset
1492 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
1493 setSLDBPath, th_error_str(ret));
235
3cb7be7b98a6 Rename a label.
Matti Hamalainen <ccr@tnsp.org>
parents: 234
diff changeset
1494 goto err1;
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1495 }
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1496
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1497 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
1498
215
d0baac239f30 Be more informative about SLDB format.
Matti Hamalainen <ccr@tnsp.org>
parents: 214
diff changeset
1499 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
1500 setSLDBNewFormat ? "new" : "old",
d0baac239f30 Be more informative about SLDB format.
Matti Hamalainen <ccr@tnsp.org>
parents: 214
diff changeset
1501 setSLDBNewFormat ? ".md5" : ".txt",
d0baac239f30 Be more informative about SLDB format.
Matti Hamalainen <ccr@tnsp.org>
parents: 214
diff changeset
1502 setSLDBPath);
d0baac239f30 Be more informative about SLDB format.
Matti Hamalainen <ccr@tnsp.org>
parents: 214
diff changeset
1503
236
609bfc1bd628 Change sidlib_sldb_new() API to int sidlib_sldb_new(SIDLibSLDB **pdbh).
Matti Hamalainen <ccr@tnsp.org>
parents: 235
diff changeset
1504 if ((ret = sidlib_sldb_new(&sidSLDB)) != THERR_OK)
110
e9dbedc4d5e4 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 109
diff changeset
1505 {
236
609bfc1bd628 Change sidlib_sldb_new() API to int sidlib_sldb_new(SIDLibSLDB **pdbh).
Matti Hamalainen <ccr@tnsp.org>
parents: 235
diff changeset
1506 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
1507 th_error_str(ret));
235
3cb7be7b98a6 Rename a label.
Matti Hamalainen <ccr@tnsp.org>
parents: 234
diff changeset
1508 goto err1;
110
e9dbedc4d5e4 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 109
diff changeset
1509 }
e9dbedc4d5e4 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 109
diff changeset
1510
222
3a01518fffe0 Rename sidlib functions from si_* prefix to sidlib_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
1511 if ((ret = sidlib_sldb_read(inFile, sidSLDB)) != THERR_OK)
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1512 {
106
9ff4f6da3db8 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 94
diff changeset
1513 THERR("Error parsing SLDB: %d, %s\n",
9ff4f6da3db8 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 94
diff changeset
1514 ret, th_error_str(ret));
235
3cb7be7b98a6 Rename a label.
Matti Hamalainen <ccr@tnsp.org>
parents: 234
diff changeset
1515 goto err1;
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1516 }
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1517
222
3a01518fffe0 Rename sidlib functions from si_* prefix to sidlib_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
1518 if ((ret = sidlib_sldb_build_index(sidSLDB)) != THERR_OK)
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1519 {
106
9ff4f6da3db8 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 94
diff changeset
1520 THERR("Error building SLDB index: %d, %s.\n",
9ff4f6da3db8 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 94
diff changeset
1521 ret, th_error_str(ret));
235
3cb7be7b98a6 Rename a label.
Matti Hamalainen <ccr@tnsp.org>
parents: 234
diff changeset
1522 goto err1;
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1523 }
110
e9dbedc4d5e4 Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 109
diff changeset
1524
235
3cb7be7b98a6 Rename a label.
Matti Hamalainen <ccr@tnsp.org>
parents: 234
diff changeset
1525 err1:
257
41fe5ec24726 Plug some minor memory leaks.
Matti Hamalainen <ccr@tnsp.org>
parents: 252
diff changeset
1526 th_io_free(inFile);
230
1e860046a4cc Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 229
diff changeset
1527 inFile = NULL;
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1528 }
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1529
271
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1530 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
1531 {
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1532 // 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
1533 int ret = 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
1534
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1535 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
1536 {
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1537 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
1538 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
1539 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
1540 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1541
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1542 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
1543
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1544 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
1545 setSTILDBPath);
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1546
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1547 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
1548 {
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1549 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
1550 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
1551 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
1552 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1553
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1554 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
1555 {
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1556 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
1557 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
1558 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
1559 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1560
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1561 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
1562 {
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1563 THERR("Error building STIL index: %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
1564 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
1565 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
1566 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1567
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1568 err2:
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1569 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
1570 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
1571 }
439d08a11365 Add support for STIL database in output. The output format is probably going
Matti Hamalainen <ccr@tnsp.org>
parents: 270
diff changeset
1572
23
832c26cb1637 Improve option handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
1573 // Process files
832c26cb1637 Improve option handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
1574 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
1575 NULL, argHandleFile, OPTH_ONLY_OTHER))
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1576 goto out;
23
832c26cb1637 Improve option handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
1577
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1578 if (optNFiles == 0)
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
1579 {
141
71725be55ed1 Do not show full help if no filenames are specified.
Matti Hamalainen <ccr@tnsp.org>
parents: 140
diff changeset
1580 THERR("No filename(s) specified. Try --help.\n");
2
ffb795582a91 More work.
Matti Hamalainen <ccr@tnsp.org>
parents: 1
diff changeset
1581 }
1
25a3a142e909 Moar work.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
1582
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1583 out:
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1584
135
b4b1aac8761c Add preprocessor guards around iconv stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 134
diff changeset
1585 #ifdef HAVE_ICONV
278
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1586 if (setUseOutConv)
d73ccb155878 Implement support for outputting CP850 and CP437 in our simple fallback
Matti Hamalainen <ccr@tnsp.org>
parents: 276
diff changeset
1587 iconv_close(setIConvCtx);
135
b4b1aac8761c Add preprocessor guards around iconv stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 134
diff changeset
1588 #endif
120
ecbc8cabd6a2 Initial work on iconv support.
Matti Hamalainen <ccr@tnsp.org>
parents: 118
diff changeset
1589
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
1590 th_free(setLang);
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
1591
257
41fe5ec24726 Plug some minor memory leaks.
Matti Hamalainen <ccr@tnsp.org>
parents: 252
diff changeset
1592 siClearStack(&optFormat);
89
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1593 th_free(setHVSCPath);
d9cb7c635e7b Implement initial SLDB support.
Matti Hamalainen <ccr@tnsp.org>
parents: 87
diff changeset
1594 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
1595 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
1596
222
3a01518fffe0 Rename sidlib functions from si_* prefix to sidlib_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 216
diff changeset
1597 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
1598 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
1599
19
16cfbdf20eaf Handle multiple files.
Matti Hamalainen <ccr@tnsp.org>
parents: 16
diff changeset
1600 return 0;
0
8e7e08bf7b9e Initial import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1601 }