comparison sidinfo.c @ 146:263cd25749a1

Simplify data printing.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 13 Jun 2017 01:42:56 +0300
parents 3cc3bea20157
children f636c55c7cc4
comparison
equal deleted inserted replaced
145:3cc3bea20157 146:263cd25749a1
447 if (optFieldOutput) 447 if (optFieldOutput)
448 fputs(optOneLine ? optFieldSep : "\n", outFile); 448 fputs(optOneLine ? optFieldSep : "\n", outFile);
449 } 449 }
450 450
451 451
452 static void siPrintPSIDInfoLine(FILE *outFile, BOOL *shown, const PSFOption *opt, const char *xfmt, const char *xaltfmt, ...) 452 static void siPrintPSIDInfoLine(FILE *outFile, BOOL *shown, const PSFStackItem *item, const char *d_str, const int d_int)
453 { 453 {
454 va_list ap; 454 const PSFOption *opt = &optPSOptions[item->cmd];
455 const char *fmt = optHexadecimal ? (xaltfmt != NULL ? xaltfmt : xfmt) : xfmt; 455 char *str = NULL;
456
457 switch (opt->type)
458 {
459 case OTYPE_INT:
460 str = th_strdup_printf(optHexadecimal ? "$%04x" : "%d", d_int);
461 break;
462
463 case OTYPE_STR:
464 str = th_strdup(d_str);
465 break;
466 }
456 467
457 siPrintFieldPrefix(outFile, opt); 468 siPrintFieldPrefix(outFile, opt);
458 469
459 va_start(ap, xaltfmt); 470 if (str != NULL)
460 vfprintf(outFile, fmt, ap); 471 fputs(str, outFile);
461 va_end(ap);
462 472
463 siPrintFieldSeparator(outFile); 473 siPrintFieldSeparator(outFile);
474 th_free(str);
475
464 *shown = TRUE; 476 *shown = TRUE;
465 } 477 }
466 478
467 479
468 #define PR(xfmt, xaltfmt, ...) siPrintPSIDInfoLine(outFile, shown, opt, xfmt, xaltfmt, __VA_ARGS__ ) 480 #define PR(d_str, d_int) siPrintPSIDInfoLine(outFile, shown, item, d_str, d_int)
469 481
470 482
471 static void siPrintPSIDInformationField(FILE *outFile, const char *filename, const PSIDHeader *psid, BOOL *shown, const PSFStackItem *item) 483 static void siPrintPSIDInformationField(FILE *outFile, const char *filename, const PSIDHeader *psid, BOOL *shown, const PSFStackItem *item)
472 { 484 {
473 const PSFOption *opt = &optPSOptions[item->cmd]; 485 const PSFOption *opt = &optPSOptions[item->cmd];
486 char tmp[64];
487
474 switch (item->cmd) 488 switch (item->cmd)
475 { 489 {
476 case 0: PR("%s", NULL, filename); break; 490 case 0: PR(filename, -1); break;
477 case 1: PR("%s", NULL, psid->magic); break; 491 case 1: PR(psid->magic, -1); break;
478 case 2: PR("%d.%d", NULL, (psid->version & 0xff), (psid->version >> 8)); break; 492 case 2:
479 case 3: PR("%s", NULL, (psid->flags & PSF_PLAYER_TYPE) ? "Compute! SIDPlayer MUS" : "Normal built-in"); break; 493 snprintf(tmp, sizeof(tmp), "%d.%d", (psid->version & 0xff), (psid->version >> 8));
494 PR(tmp, -1);
495 break;
496 case 3:
497 PR((psid->flags & PSF_PLAYER_TYPE) ? "Compute! SIDPlayer MUS" : "Normal built-in", -1);
498 break;
480 case 4: 499 case 4:
481 if (psid->version >= 2) 500 if (psid->version >= 2)
482 PR("%s", NULL, (psid->flags & PSF_PLAYSID_TUNE) ? "PlaySID" : "C64 compatible"); 501 PR((psid->flags & PSF_PLAYSID_TUNE) ? (psid->isRSID ? "C64 BASIC" : "PlaySID") : "C64 compatible", -1);
483 break; 502 break;
484 case 5: 503 case 5:
485 if (psid->version >= 2) 504 if (psid->version >= 2)
486 PR("%s", NULL, si_get_sid_clock_str((psid->flags >> 2) & PSF_CLOCK_MASK)); 505 PR(si_get_sid_clock_str((psid->flags >> 2) & PSF_CLOCK_MASK), -1);
487 break; 506 break;
488 case 6: 507 case 6:
489 if (psid->version >= 2) 508 if (psid->version >= 2)
490 PR("%s", NULL, si_get_sid_model_str((psid->flags >> 4) & PSF_MODEL_MASK)); 509 PR(si_get_sid_model_str((psid->flags >> 4) & PSF_MODEL_MASK), -1);
491 break; 510 break;
492 511
493 case 7: PR("%d", "$%08x", psid->dataOffset); break; 512 case 7: PR(NULL, psid->dataOffset); break;
494 case 8: PR("%d", "$%08x", psid->dataSize); break; 513 case 8: PR(NULL, psid->dataSize); break;
495 case 9: PR("%d", "$%04x", psid->loadAddress); break; 514 case 9: PR(NULL, psid->loadAddress); break;
496 case 10: PR("%d", "$%04x", psid->initAddress); break; 515 case 10: PR(NULL, psid->initAddress); break;
497 case 11: PR("%d", "$%04x", psid->playAddress); break; 516 case 11: PR(NULL, psid->playAddress); break;
498 case 12: PR("%d", "$%04x", psid->nSongs); break; 517 case 12: PR(NULL, psid->nSongs); break;
499 case 13: PR("%d", "$%04x", psid->startSong); break; 518 case 13: PR(NULL, psid->startSong); break;
500 519
501 case 14: 520 case 14:
502 if (psid->version >= 3) 521 if (psid->version >= 3)
503 { 522 {
504 int flags = (psid->flags >> 6) & PSF_MODEL_MASK; 523 int flags = (psid->flags >> 6) & PSF_MODEL_MASK;
505 if (flags == PSF_MODEL_UNKNOWN) 524 if (flags == PSF_MODEL_UNKNOWN)
506 flags = (psid->flags >> 4) & PSF_MODEL_MASK; 525 flags = (psid->flags >> 4) & PSF_MODEL_MASK;
507 526
508 PR("%s", NULL, si_get_sid_model_str(flags)); 527 PR(si_get_sid_model_str(flags), -1);
509 } 528 }
510 break; 529 break;
511 case 15: 530 case 15:
512 if (psid->version >= 4) 531 if (psid->version >= 4)
513 { 532 {
514 int flags = (psid->flags >> 8) & PSF_MODEL_MASK; 533 int flags = (psid->flags >> 8) & PSF_MODEL_MASK;
515 if (flags == PSF_MODEL_UNKNOWN) 534 if (flags == PSF_MODEL_UNKNOWN)
516 flags = (psid->flags >> 4) & PSF_MODEL_MASK; 535 flags = (psid->flags >> 4) & PSF_MODEL_MASK;
517 536
518 PR("%s", NULL, si_get_sid_model_str(flags)); 537 PR(si_get_sid_model_str(flags), -1);
519 } 538 }
520 break; 539 break;
521 case 16: 540 case 16:
522 if (psid->version >= 3) 541 if (psid->version >= 3)
523 PR("%d", "$%04x", 0xD000 | (psid->sid2Addr << 4)); 542 PR(NULL, 0xD000 | (psid->sid2Addr << 4));
524 break; 543 break;
525 case 17: 544 case 17:
526 if (psid->version >= 4) 545 if (psid->version >= 4)
527 PR("%d", "$%04x", 0xD000 | (psid->sid3Addr << 4)); 546 PR(NULL, 0xD000 | (psid->sid3Addr << 4));
528 break; 547 break;
529 548
530 case 18: PR("%s", NULL, psid->sidName); break; 549 case 18: PR(psid->sidName, -1); break;
531 case 19: PR("%s", NULL, psid->sidAuthor); break; 550 case 19: PR(psid->sidAuthor, -1); break;
532 case 20: PR("%s", NULL, psid->sidCopyright); break; 551 case 20: PR(psid->sidCopyright, -1); break;
533 552
534 case 21: 553 case 21:
535 { 554 {
536 siPrintFieldPrefix(outFile, opt); 555 siPrintFieldPrefix(outFile, opt);
537 th_md5_print(outFile, psid->hash); 556 th_md5_print(outFile, psid->hash);