aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/newview/llwearable.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--linden/indra/newview/llwearable.cpp69
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 156const char* terse_F32_to_string( F32 f, char s[MAX_STRING] ) /* Flawfinder: ignore */
157std::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
193BOOL 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
216BOOL 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
191BOOL LLWearable::exportFile( LLFILE* file ) 237BOOL 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 }