Mercurial > hg > sidinfo
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); |