|
38 | 38 |
|
39 | 39 | #include <ctype.h> |
40 | 40 | #include <limits.h> |
| 41 | +#include <iomanip> |
41 | 42 |
|
42 | 43 | // -------------------------------------------------------------------------------------------------------------------- |
43 | 44 | // Private macros. |
@@ -292,6 +293,104 @@ DCF(bm_frag, "Shows BmpMan fragmentation") { |
292 | 293 | key_getch(); |
293 | 294 | } |
294 | 295 |
|
| 296 | +DCF(bm_used, "Shows BmpMan Slot Usage") { |
| 297 | + if (dc_optional_string_either("help", "--help")) { |
| 298 | + dc_printf("Displays used bmpman slots usage with a breakdown per filetype\n\n"); |
| 299 | + return; |
| 300 | + } |
| 301 | + |
| 302 | + int none = 0, pcx = 0, user = 0, tga = 0, png = 0; int jpg = 0, dds = 0, ani = 0; |
| 303 | + int eff = 0, eff_dds = 0, eff_tga = 0, eff_png = 0, eff_jpg = 0, eff_pcx = 0; |
| 304 | + int render_target_dynamic = 0, render_target_static = 0; |
| 305 | + |
| 306 | + for (int i = 0; i<MAX_BITMAPS; i++) { |
| 307 | + switch (bm_bitmaps[i].type) { |
| 308 | + case BM_TYPE_NONE: |
| 309 | + none++; |
| 310 | + break; |
| 311 | + case BM_TYPE_PCX: |
| 312 | + pcx++; |
| 313 | + break; |
| 314 | + case BM_TYPE_USER: |
| 315 | + user++; |
| 316 | + break; |
| 317 | + case BM_TYPE_TGA: |
| 318 | + tga++; |
| 319 | + break; |
| 320 | + case BM_TYPE_PNG: |
| 321 | + // TODO distinguish png(static) from apng |
| 322 | + png++; |
| 323 | + break; |
| 324 | + case BM_TYPE_JPG: |
| 325 | + jpg++; |
| 326 | + break; |
| 327 | + case BM_TYPE_DDS: |
| 328 | + dds++; |
| 329 | + break; |
| 330 | + case BM_TYPE_ANI: |
| 331 | + ani++; |
| 332 | + break; |
| 333 | + case BM_TYPE_EFF: |
| 334 | + eff++; |
| 335 | + switch (bm_bitmaps[i].info.ani.eff.type) { |
| 336 | + case BM_TYPE_DDS: |
| 337 | + eff_dds++; |
| 338 | + break; |
| 339 | + case BM_TYPE_TGA: |
| 340 | + eff_tga++; |
| 341 | + break; |
| 342 | + case BM_TYPE_PNG: |
| 343 | + eff_png++; |
| 344 | + break; |
| 345 | + case BM_TYPE_JPG: |
| 346 | + eff_jpg++; |
| 347 | + break; |
| 348 | + case BM_TYPE_PCX: |
| 349 | + eff_pcx++; |
| 350 | + break; |
| 351 | + default: |
| 352 | + Warning(LOCATION, "Unhandled EFF image type (%i), get a coder!", bm_bitmaps[i].info.ani.eff.type); |
| 353 | + break; |
| 354 | + } |
| 355 | + break; |
| 356 | + case BM_TYPE_RENDER_TARGET_STATIC: |
| 357 | + render_target_static++; |
| 358 | + break; |
| 359 | + case BM_TYPE_RENDER_TARGET_DYNAMIC: |
| 360 | + render_target_dynamic++; |
| 361 | + break; |
| 362 | + default: |
| 363 | + Warning(LOCATION, "Unhandled image type (%i), get a coder!", bm_bitmaps[i].type); |
| 364 | + break; |
| 365 | + } |
| 366 | + } |
| 367 | + |
| 368 | + SCP_stringstream text; |
| 369 | + text << "BmpMan Used Slots\n"; |
| 370 | + text << " " << std::dec << std::setw(4) << std::setfill('0') << pcx << ", PCX\n"; |
| 371 | + text << " " << std::dec << std::setw(4) << std::setfill('0') << user << ", User\n"; |
| 372 | + text << " " << std::dec << std::setw(4) << std::setfill('0') << tga << ", TGA\n"; |
| 373 | + text << " " << std::dec << std::setw(4) << std::setfill('0') << png << ", PNG\n"; |
| 374 | + text << " " << std::dec << std::setw(4) << std::setfill('0') << jpg << ", JPG\n"; |
| 375 | + text << " " << std::dec << std::setw(4) << std::setfill('0') << dds << ", DDS\n"; |
| 376 | + text << " " << std::dec << std::setw(4) << std::setfill('0') << ani << ", ANI\n"; |
| 377 | + text << " " << std::dec << std::setw(4) << std::setfill('0') << eff << ", EFF\n"; |
| 378 | + text << " " << std::dec << std::setw(4) << std::setfill('0') << eff_dds << ", EFF/DDS\n"; |
| 379 | + text << " " << std::dec << std::setw(4) << std::setfill('0') << eff_tga << ", EFF/TGA\n"; |
| 380 | + text << " " << std::dec << std::setw(4) << std::setfill('0') << eff_png << ", EFF/PNG\n"; |
| 381 | + text << " " << std::dec << std::setw(4) << std::setfill('0') << eff_jpg << ", EFF/JPG\n"; |
| 382 | + text << " " << std::dec << std::setw(4) << std::setfill('0') << eff_pcx << ", EFF/PCX\n"; |
| 383 | + text << " " << std::dec << std::setw(4) << std::setfill('0') << render_target_static << ", Render/Static\n"; |
| 384 | + text << " " << std::dec << std::setw(4) << std::setfill('0') << render_target_dynamic << ", Render/Dynamic\n"; |
| 385 | + text << " " << std::dec << std::setw(4) << std::setfill('0') << MAX_BITMAPS-none << "/" << MAX_BITMAPS << ", Total\n"; |
| 386 | + text << "\n"; |
| 387 | + |
| 388 | + // TODO consider converting 1's to monospace to make debug console output prettier |
| 389 | + mprintf(("%s", text.str().c_str())); // log for ease for copying data |
| 390 | + dc_printf("%s", text.str().c_str()); // instant gratification |
| 391 | +} |
| 392 | + |
| 393 | + |
295 | 394 | DCF(bmpman, "Shows/changes bitmap caching parameters and usage") { |
296 | 395 | if (dc_optional_string_either("help", "--help")) { |
297 | 396 | dc_printf("Usage: BmpMan [arg]\nWhere arg can be any of the following:\n"); |
|
0 commit comments