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