Changeset 10076 for OpenSceneGraph/trunk/src/osgPlugins/3ds/readwrite.cpp
- Timestamp:
- 04/22/09 17:46:24 (4 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
OpenSceneGraph/trunk/src/osgPlugins/3ds/readwrite.cpp
r9571 r10076 24 24 #include <osg/Endian> 25 25 26 26 27 /*! 27 28 * \defgroup readwrite Portable Binary Input/Ouput … … 30 31 */ 31 32 32 33 33 static bool s_requiresByteSwap = false; 34 34 … … 50 50 */ 51 51 Lib3dsByte 52 lib3ds_byte_read( FILE *f)52 lib3ds_byte_read(iostream *strm) 53 53 { 54 54 Lib3dsByte b; 55 55 56 ASSERT(f); 57 int result = fread(&b,1,1,f); 58 if (result==0) return 0; 56 ASSERT(strm); 57 strm->read((char*)&b,1); 59 58 return(b); 60 59 } … … 69 68 */ 70 69 Lib3dsWord 71 lib3ds_word_read( FILE *f)70 lib3ds_word_read(iostream *strm) 72 71 { 73 72 Lib3dsByte b[2]; 74 73 Lib3dsWord w; 75 74 76 ASSERT(f); 77 int result = fread(b,2,1,f); 78 if (result==0) return 0; 79 75 ASSERT(strm); 76 strm->read((char*)&b,2); 80 77 w=((Lib3dsWord)b[1] << 8) | 81 78 ((Lib3dsWord)b[0]); … … 94 91 */ 95 92 Lib3dsDword 96 lib3ds_dword_read( FILE *f)93 lib3ds_dword_read(iostream *strm) 97 94 { 98 95 Lib3dsByte b[4]; 99 96 Lib3dsDword d; 100 97 101 ASSERT(f); 102 int result = fread(b,4,1,f); 103 if (result==0) return 0; 104 98 ASSERT(strm); 99 strm->read((char*)&b,4); 105 100 d=((Lib3dsDword)b[3] << 24) | 106 101 ((Lib3dsDword)b[2] << 16) | … … 121 116 */ 122 117 Lib3dsIntb 123 lib3ds_intb_read( FILE *f)118 lib3ds_intb_read(iostream *strm) 124 119 { 125 120 Lib3dsIntb b; 126 121 127 ASSERT(f); 128 int result = fread(&b,1,1,f); 129 if (result==0) return 0; 130 122 ASSERT(strm); 123 strm->read((char*)&b,1); 131 124 return(b); 132 125 } … … 143 136 */ 144 137 Lib3dsIntw 145 lib3ds_intw_read( FILE *f)138 lib3ds_intw_read(iostream *strm) 146 139 { 147 140 Lib3dsByte b[2]; 148 141 149 ASSERT(f); 150 int result = fread(b,2,1,f); 151 if (result==0) return 0; 142 ASSERT(strm); 143 strm->read((char*)&b,2); 152 144 153 145 if (s_requiresByteSwap) … … 170 162 */ 171 163 Lib3dsIntd 172 lib3ds_intd_read( FILE *f)173 { 174 Lib3dsByte b[4]; 164 lib3ds_intd_read(iostream *strm) 165 { 166 Lib3dsByte b[4]; 175 167 176 ASSERT(f); 177 int result = fread(b,4,1,f); 178 if (result==0) return 0; 168 ASSERT(strm); 169 strm->read((char*)&b,4); 179 170 180 171 if (s_requiresByteSwap) … … 184 175 185 176 return (*((Lib3dsIntd*)b)); 177 186 178 } 187 179 … … 197 189 */ 198 190 Lib3dsFloat 199 lib3ds_float_read( FILE *f)191 lib3ds_float_read(iostream *strm) 200 192 { 201 193 Lib3dsByte b[4]; 202 194 203 ASSERT( f);204 int result = fread(b,4,1,f);205 if (result==0) return 0;195 ASSERT(strm); 196 b[0]=b[1]=b[2]=b[3]=0; 197 strm->read((char*)&b,4); 206 198 207 199 if (s_requiresByteSwap) … … 226 218 */ 227 219 Lib3dsBool 228 lib3ds_vector_read(Lib3dsVector v, FILE *f)229 { 230 v[0]=lib3ds_float_read( f);231 v[1]=lib3ds_float_read( f);232 v[2]=lib3ds_float_read( f);233 234 if ( ferror(f)) {235 return(LIB3DS_FALSE); 236 } 237 220 lib3ds_vector_read(Lib3dsVector v, iostream *strm) 221 { 222 v[0]=lib3ds_float_read(strm); 223 v[1]=lib3ds_float_read(strm); 224 v[2]=lib3ds_float_read(strm); 225 226 if (strm->fail()) { 227 return(LIB3DS_FALSE); 228 } 229 238 230 /*printf("lib3ds_vector_read %f %f %f\n",v[0],v[1],v[2]);*/ 239 240 return(LIB3DS_TRUE); 241 } 242 243 244 /*! 245 * \ingroup readwrite 246 */ 247 Lib3dsBool 248 lib3ds_rgb_read(Lib3dsRgb rgb, FILE *f)249 { 250 rgb[0]=lib3ds_float_read( f);251 rgb[1]=lib3ds_float_read( f);252 rgb[2]=lib3ds_float_read( f);253 254 if ( ferror(f)) {231 232 return(LIB3DS_TRUE); 233 } 234 235 236 /*! 237 * \ingroup readwrite 238 */ 239 Lib3dsBool 240 lib3ds_rgb_read(Lib3dsRgb rgb, iostream *strm) 241 { 242 rgb[0]=lib3ds_float_read(strm); 243 rgb[1]=lib3ds_float_read(strm); 244 rgb[2]=lib3ds_float_read(strm); 245 246 if (strm->fail()) { 255 247 return(LIB3DS_FALSE); 256 248 } … … 273 265 */ 274 266 Lib3dsBool 275 lib3ds_string_read(char *s, int buflen, FILE *f)267 lib3ds_string_read(char *s, int buflen, iostream *strm) 276 268 { 277 269 int k=0; 278 ASSERT(f); 279 while ((*s++=char(fgetc(f)))!=0) { 280 if (++k>=buflen) { 281 return(LIB3DS_FALSE); 282 } 283 } 284 if (ferror(f)) { 285 return(LIB3DS_FALSE); 286 } 287 return(LIB3DS_TRUE); 288 } 289 270 ASSERT(s); 271 s--; 272 do 273 { 274 s++; 275 k++; 276 strm->read(s,1); 277 } while ((*s!=0) && (k<buflen)); 278 279 if (strm->fail()) { 280 return(LIB3DS_FALSE); 281 } 282 return(LIB3DS_TRUE); 283 } 290 284 291 285 /*! … … 300 294 */ 301 295 Lib3dsBool 302 lib3ds_byte_write(Lib3dsByte b, FILE *f) 303 { 304 ASSERT(f); 305 if (fwrite(&b,1,1,f)!=1) { 296 lib3ds_byte_write(Lib3dsByte b, iostream *strm) 297 { 298 ASSERT(strm); 299 strm->write((char*)&b,1); 300 if (strm->fail()) { 306 301 return(LIB3DS_FALSE); 307 302 } … … 321 316 */ 322 317 Lib3dsBool 323 lib3ds_word_write(Lib3dsWord w, FILE *f)318 lib3ds_word_write(Lib3dsWord w, iostream *strm) 324 319 { 325 320 Lib3dsByte b[2]; 326 321 327 ASSERT( f);322 ASSERT(strm); 328 323 b[1]=(Lib3dsByte)(((Lib3dsWord)w & 0xFF00) >> 8); 329 324 b[0]=(Lib3dsByte)((Lib3dsWord)w & 0x00FF); 330 if (fwrite(b,2,1,f)!=1) { 325 strm->write((char*)b,2); 326 if (strm->fail()) { 331 327 return(LIB3DS_FALSE); 332 328 } … … 346 342 */ 347 343 Lib3dsBool 348 lib3ds_dword_write(Lib3dsDword d, FILE *f)344 lib3ds_dword_write(Lib3dsDword d, iostream *strm) 349 345 { 350 346 Lib3dsByte b[4]; 351 347 352 ASSERT( f);348 ASSERT(strm); 353 349 b[3]=(Lib3dsByte)(((Lib3dsDword)d & 0xFF000000) >> 24); 354 350 b[2]=(Lib3dsByte)(((Lib3dsDword)d & 0x00FF0000) >> 16); 355 351 b[1]=(Lib3dsByte)(((Lib3dsDword)d & 0x0000FF00) >> 8); 356 352 b[0]=(Lib3dsByte)(((Lib3dsDword)d & 0x000000FF)); 357 if (fwrite(b,4,1,f)!=1) { 353 354 strm->write((char*)b,4); 355 if (strm->fail()) { 358 356 return(LIB3DS_FALSE); 359 357 } … … 373 371 */ 374 372 Lib3dsBool 375 lib3ds_intb_write(Lib3dsIntb b, FILE *f) 376 { 377 ASSERT(f); 378 if (fwrite(&b,1,1,f)!=1) { 373 lib3ds_intb_write(Lib3dsIntb b, iostream *strm) 374 { 375 ASSERT(strm); 376 strm->write((char*)b,1); 377 if (strm->fail()) { 379 378 return(LIB3DS_FALSE); 380 379 } … … 394 393 */ 395 394 Lib3dsBool 396 lib3ds_intw_write(Lib3dsIntw w, FILE *f)395 lib3ds_intw_write(Lib3dsIntw w, iostream *strm) 397 396 { 398 397 Lib3dsByte b[2]; 399 398 400 ASSERT( f);399 ASSERT(strm); 401 400 b[1]=(Lib3dsByte)(((Lib3dsWord)w & 0xFF00) >> 8); 402 401 b[0]=(Lib3dsByte)((Lib3dsWord)w & 0x00FF); 403 if (fwrite(b,2,1,f)!=1) { 402 403 strm->write((char*)b,2); 404 if (strm->fail()) { 404 405 return(LIB3DS_FALSE); 405 406 } … … 419 420 */ 420 421 Lib3dsBool 421 lib3ds_intd_write(Lib3dsIntd d, FILE *f)422 lib3ds_intd_write(Lib3dsIntd d, iostream *strm) 422 423 { 423 424 Lib3dsByte b[4]; 424 425 425 ASSERT( f);426 ASSERT(strm); 426 427 b[3]=(Lib3dsByte)(((Lib3dsDword)d & 0xFF000000) >> 24); 427 428 b[2]=(Lib3dsByte)(((Lib3dsDword)d & 0x00FF0000) >> 16); 428 429 b[1]=(Lib3dsByte)(((Lib3dsDword)d & 0x0000FF00) >> 8); 429 430 b[0]=(Lib3dsByte)(((Lib3dsDword)d & 0x000000FF)); 430 if (fwrite(b,4,1,f)!=1) { 431 432 strm->write((char*)b,4); 433 if (strm->fail()) { 431 434 return(LIB3DS_FALSE); 432 435 } … … 445 448 * \return True on success, False otherwise. 446 449 */ 447 448 449 Lib3dsBool 450 lib3ds_float_write(Lib3dsFloat l, FILE *f) 451 { 450 Lib3dsBool 451 lib3ds_float_write(Lib3dsFloat l, iostream *strm) 452 { 453 ASSERT(strm); 452 454 453 455 Lib3dsByte b[4]; … … 468 470 b[3] = *ptr++; 469 471 } 470 471 if (fwrite(b,4,1,f)!=1) { 472 473 strm->write((char*)b,4); 474 if (strm->fail()) { 472 475 return(LIB3DS_FALSE); 473 476 } … … 486 489 */ 487 490 Lib3dsBool 488 lib3ds_vector_write(Lib3dsVector v, FILE *f)489 { 490 if (!lib3ds_float_write(v[0], f)) {491 return(LIB3DS_FALSE); 492 } 493 if (!lib3ds_float_write(v[1], f)) {494 return(LIB3DS_FALSE); 495 } 496 if (!lib3ds_float_write(v[2], f)) {497 return(LIB3DS_FALSE); 498 } 499 return(LIB3DS_TRUE); 500 } 501 502 503 /*! 504 * \ingroup readwrite 505 */ 506 Lib3dsBool 507 lib3ds_rgb_write(Lib3dsRgb rgb, FILE *f)508 { 509 if (!lib3ds_float_write(rgb[0], f)) {510 return(LIB3DS_FALSE); 511 } 512 if (!lib3ds_float_write(rgb[1], f)) {513 return(LIB3DS_FALSE); 514 } 515 if (!lib3ds_float_write(rgb[2], f)) {491 lib3ds_vector_write(Lib3dsVector v, iostream *strm) 492 { 493 if (!lib3ds_float_write(v[0], strm)) { 494 return(LIB3DS_FALSE); 495 } 496 if (!lib3ds_float_write(v[1], strm)) { 497 return(LIB3DS_FALSE); 498 } 499 if (!lib3ds_float_write(v[2], strm)) { 500 return(LIB3DS_FALSE); 501 } 502 return(LIB3DS_TRUE); 503 } 504 505 506 /*! 507 * \ingroup readwrite 508 */ 509 Lib3dsBool 510 lib3ds_rgb_write(Lib3dsRgb rgb, iostream *strm) 511 { 512 if (!lib3ds_float_write(rgb[0], strm)) { 513 return(LIB3DS_FALSE); 514 } 515 if (!lib3ds_float_write(rgb[1], strm)) { 516 return(LIB3DS_FALSE); 517 } 518 if (!lib3ds_float_write(rgb[2], strm)) { 516 519 return(LIB3DS_FALSE); 517 520 } … … 531 534 */ 532 535 Lib3dsBool 533 lib3ds_string_write(const char *s, FILE *f)536 lib3ds_string_write(const char *s, iostream *strm) 534 537 { 535 538 ASSERT(s); 536 ASSERT( f);537 do fputc(*s,f); while (*s++);538 if ( ferror(f)) {539 return(LIB3DS_FALSE); 540 } 541 return(LIB3DS_TRUE); 542 } 543 539 ASSERT(strm); 540 do strm->write(s,1); while (*s++); 541 if (strm->fail()) { 542 return(LIB3DS_FALSE); 543 } 544 return(LIB3DS_TRUE); 545 } 546
