|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- /*
- * cdtext.c -- cdtext data structure and functions
- *
- * Copyright (C) 2004 Svend Sorensen
- * For license terms, see the file COPYING in this distribution.
- */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "cdtext.h"
-
- struct Cdtext {
- int pti;
- int format;
- char *value;
- };
-
- Cdtext *cdtext_init ()
- {
- Cdtext *new_cdtext = NULL;
-
- Cdtext cdtext[] = {
- {PTI_TITLE, FORMAT_CHAR, NULL},
- {PTI_PERFORMER, FORMAT_CHAR, NULL},
- {PTI_SONGWRITER, FORMAT_CHAR, NULL},
- {PTI_COMPOSER, FORMAT_CHAR, NULL},
- {PTI_ARRANGER, FORMAT_CHAR, NULL},
- {PTI_MESSAGE, FORMAT_CHAR, NULL},
- {PTI_DISC_ID, FORMAT_BINARY, NULL},
- {PTI_GENRE, FORMAT_BINARY, NULL},
- {PTI_TOC_INFO1, FORMAT_BINARY, NULL},
- {PTI_TOC_INFO2, FORMAT_BINARY, NULL},
- {PTI_RESERVED1, FORMAT_CHAR, NULL},
- {PTI_RESERVED2, FORMAT_CHAR, NULL},
- {PTI_RESERVED3, FORMAT_CHAR, NULL},
- {PTI_RESERVED4, FORMAT_CHAR, NULL},
- {PTI_UPC_ISRC, FORMAT_CHAR, NULL},
- {PTI_SIZE_INFO, FORMAT_BINARY, NULL},
- {PTI_END, FORMAT_CHAR, NULL}
- };
-
- new_cdtext = (Cdtext *) calloc (sizeof (cdtext) / sizeof (Cdtext), sizeof (Cdtext));
- if (NULL == new_cdtext)
- fprintf (stderr, "problem allocating memory\n");
- else
- memcpy (new_cdtext, cdtext, sizeof(cdtext));
-
- return new_cdtext;
- }
-
- void cdtext_delete (Cdtext *cdtext)
- {
- int i;
-
- if (NULL != cdtext) {
- for (i = 0; PTI_END != cdtext[i].pti; i++)
- free (cdtext[i].value);
- free (cdtext);
- }
- }
-
- /* return 0 if there is no cdtext, returns non-zero otherwise */
- int cdtext_is_empty (Cdtext *cdtext)
- {
- for (; PTI_END != cdtext->pti; cdtext++)
- if (NULL != cdtext->value)
- return -1;
-
- return 0;
- }
-
- /* sets cdtext's pti entry to field */
- void cdtext_set (int pti, char *value, Cdtext *cdtext)
- {
- if (NULL != value) /* don't pass NULL to strdup */
- for (; PTI_END != cdtext->pti; cdtext++)
- if (pti == cdtext->pti) {
- free (cdtext->value);
- cdtext->value = strdup (value);
- }
- }
-
- /* returns value for pti, NULL if pti is not found */
- char *cdtext_get (int pti, Cdtext *cdtext)
- {
- for (; PTI_END != cdtext->pti; cdtext++)
- if (pti == cdtext->pti)
- return cdtext->value;
-
- return NULL;
- }
-
- const char *cdtext_get_key (int pti, int istrack)
- {
- char *key = NULL;
-
- switch (pti) {
- case PTI_TITLE:
- key = "TITLE";
- break;
- case PTI_PERFORMER:
- key = "PERFORMER";
- break;
- case PTI_SONGWRITER:
- key = "SONGWRITER";
- break;
- case PTI_COMPOSER:
- key = "COMPOSER";
- break;
- case PTI_ARRANGER:
- key = "ARRANGER";
- break;
- case PTI_MESSAGE:
- key = "MESSAGE";
- break;
- case PTI_DISC_ID:
- key = "DISC_ID";
- break;
- case PTI_GENRE:
- key = "GENRE";
- break;
- case PTI_TOC_INFO1:
- key = "TOC_INFO1";
- break;
- case PTI_TOC_INFO2:
- key = "TOC_INFO1";
- break;
- case PTI_RESERVED1:
- /* reserved */
- break;
- case PTI_RESERVED2:
- /* reserved */
- break;
- case PTI_RESERVED3:
- /* reserved */
- break;
- case PTI_RESERVED4:
- /* reserved */
- break;
- case PTI_UPC_ISRC:
- if (0 == istrack)
- key = "UPC_EAN";
- else
- key = "ISRC";
- break;
- case PTI_SIZE_INFO:
- key = "SIZE_INFO";
- break;
- }
-
- return key;
- }
|