#include "cdio/compat/cdtext.h" #include "cdio/compat/device.h" #include "cdio/compat/disc.h" #include "stdio.h" #include "stdlib.h" #include "string.h" void store(unsigned char* buf, unsigned char byte) { if (byte >= 0x20 && byte <= 0x7E) *buf = byte; else *buf = '.'; } void flush(unsigned char* buf, size_t len) { printf(" %s\n", buf); memset(buf, 0, len); } void hexdump(unsigned char* buf, size_t size, size_t linewidth) { unsigned char ascii[linewidth + 1]; ascii[linewidth] = 0; for (int i = 0; i < size; ++i) { if (i > 0 && i % linewidth == 0) { flush(ascii, linewidth); store(ascii, buf[i]); } else store(ascii + (i % linewidth), buf[i]); printf("%2x ", buf[i]); } flush(ascii, linewidth); } int main() { FILE* file = fopen("test/datafiles/unit/carolus-rex.cdtext", "rb"); if (!file) return 1; size_t filesize = 720; unsigned char* binary = calloc(filesize, 1); if (!binary) return 2; size_t r = fread(binary, 1, filesize, file); if (filesize != r) return 3; hexdump(binary, filesize, 18); cdtext_t* cdtext = cdtext_init(); if (cdtext_data_init(cdtext, binary, filesize)) return 4; printf("Last: %i ('%s')\n", cdtext_get_last_track(cdtext), cdtext_get(cdtext, CDTEXT_FIELD_TITLE, cdtext_get_last_track(cdtext))); cdtext_set(cdtext, CDTEXT_FIELD_TITLE, (const uint8_t*)"TEST", 0x0c, NULL); printf("Last: %i ('%s'); should be %i ('%s')\n", cdtext_get_last_track(cdtext), cdtext_get(cdtext, CDTEXT_FIELD_TITLE, cdtext_get_last_track(cdtext)), 0x0c, cdtext_get(cdtext, CDTEXT_FIELD_TITLE, 0x0c)); return 0; }