diff options
Diffstat (limited to '')
-rw-r--r-- | linden/indra/newview/llwearable.cpp | 69 |
1 files changed, 58 insertions, 11 deletions
diff --git a/linden/indra/newview/llwearable.cpp b/linden/indra/newview/llwearable.cpp index a5f4dc9..bf5fd4a 100644 --- a/linden/indra/newview/llwearable.cpp +++ b/linden/indra/newview/llwearable.cpp | |||
@@ -153,41 +153,87 @@ EWearableType LLWearable::typeNameToType( const std::string& type_name ) | |||
153 | return WT_INVALID; | 153 | return WT_INVALID; |
154 | } | 154 | } |
155 | 155 | ||
156 | 156 | const char* terse_F32_to_string( F32 f, char s[MAX_STRING] ) /* Flawfinder: ignore */ | |
157 | std::string terse_F32_to_string( F32 f ) | ||
158 | { | 157 | { |
159 | std::string r = llformat( "%.2f", f ); | 158 | char* r = s; |
159 | S32 len = snprintf( s, MAX_STRING, "%.2f", f ); /* Flawfinder: ignore */ | ||
160 | 160 | ||
161 | // "1.20" -> "1.2" | 161 | // "1.20" -> "1.2" |
162 | // "24.00" -> "24." | 162 | // "24.00" -> "24." |
163 | S32 len = r.length(); | 163 | while( '0' == r[len - 1] ) |
164 | while( len > 0 && '0' == r[len - 1] ) | ||
165 | { | 164 | { |
166 | r.erase(len-1, 1); | 165 | len--; |
167 | len--; | 166 | r[len] = '\0'; |
168 | } | 167 | } |
169 | 168 | ||
170 | if( '.' == r[len - 1] ) | 169 | if( '.' == r[len - 1] ) |
171 | { | 170 | { |
172 | // "24." -> "24" | 171 | // "24." -> "24" |
173 | r.erase(len-1, 1); | 172 | len--; |
173 | r[len] = '\0'; | ||
174 | } | 174 | } |
175 | else | 175 | else |
176 | if( ('-' == r[0]) && ('0' == r[1]) ) | 176 | if( ('-' == r[0]) && ('0' == r[1]) ) |
177 | { | 177 | { |
178 | // "-0.59" -> "-.59" | 178 | // "-0.59" -> "-.59" |
179 | r.erase(1, 1); | 179 | r++; |
180 | r[0] = '-'; | ||
180 | } | 181 | } |
181 | else | 182 | else |
182 | if( '0' == r[0] ) | 183 | if( '0' == r[0] ) |
183 | { | 184 | { |
184 | // "0.59" -> ".59" | 185 | // "0.59" -> ".59" |
185 | r.erase(0, 1); | 186 | r++; |
186 | } | 187 | } |
187 | 188 | ||
188 | return r; | 189 | return r; |
189 | } | 190 | } |
190 | 191 | ||
192 | // reX: new function | ||
193 | BOOL LLWearable::FileExportParams( FILE* file ) | ||
194 | { | ||
195 | // wearable type | ||
196 | S32 type = (S32)mType; | ||
197 | fprintf( file, "type %d\n", type ); | ||
198 | |||
199 | // parameters | ||
200 | S32 num_parameters = mVisualParamMap.size(); | ||
201 | fprintf( file, "parameters %d\n", num_parameters ); | ||
202 | |||
203 | char s[ MAX_STRING ]; /* Flawfinder: ignore */ | ||
204 | for (param_map_t::iterator iter = mVisualParamMap.begin(); | ||
205 | iter != mVisualParamMap.end(); ++iter) | ||
206 | { | ||
207 | S32 param_id = iter->first; | ||
208 | F32 param_weight = iter->second; | ||
209 | fprintf( file, "%d %s\n", param_id, terse_F32_to_string( param_weight, s ) ); | ||
210 | } | ||
211 | |||
212 | return TRUE; | ||
213 | } | ||
214 | |||
215 | // reX: new function | ||
216 | BOOL LLWearable::FileExportTextures( FILE* file ) | ||
217 | { | ||
218 | // wearable type | ||
219 | S32 type = (S32)mType; | ||
220 | fprintf( file, "type %d\n", type ); | ||
221 | |||
222 | // texture entries | ||
223 | S32 num_textures = mTEMap.size(); | ||
224 | fprintf( file, "textures %d\n", num_textures ); | ||
225 | |||
226 | for (te_map_t::iterator iter = mTEMap.begin(); | ||
227 | iter != mTEMap.end(); ++iter) | ||
228 | { | ||
229 | S32 te = iter->first; | ||
230 | LLUUID& image_id = iter->second; | ||
231 | fprintf( file, "%d %s\n", te, image_id.asString().c_str() ); | ||
232 | } | ||
233 | |||
234 | return TRUE; | ||
235 | } | ||
236 | |||
191 | BOOL LLWearable::exportFile( LLFILE* file ) | 237 | BOOL LLWearable::exportFile( LLFILE* file ) |
192 | { | 238 | { |
193 | // header and version | 239 | // header and version |
@@ -234,12 +280,13 @@ BOOL LLWearable::exportFile( LLFILE* file ) | |||
234 | return FALSE; | 280 | return FALSE; |
235 | } | 281 | } |
236 | 282 | ||
283 | char s[ MAX_STRING ]; /* Flawfinder: ignore */ | ||
237 | for (param_map_t::iterator iter = mVisualParamMap.begin(); | 284 | for (param_map_t::iterator iter = mVisualParamMap.begin(); |
238 | iter != mVisualParamMap.end(); ++iter) | 285 | iter != mVisualParamMap.end(); ++iter) |
239 | { | 286 | { |
240 | S32 param_id = iter->first; | 287 | S32 param_id = iter->first; |
241 | F32 param_weight = iter->second; | 288 | F32 param_weight = iter->second; |
242 | if( fprintf( file, "%d %s\n", param_id, terse_F32_to_string( param_weight ).c_str() ) < 0 ) | 289 | if( fprintf( file, "%d %s\n", param_id, terse_F32_to_string( param_weight, s ) ) < 0 ) |
243 | { | 290 | { |
244 | return FALSE; | 291 | return FALSE; |
245 | } | 292 | } |