Blame example/cdtext.c

Packit dd8086
/*
Packit dd8086
  Copyright (C) 2004, 2005, 2006, 2008, 2009, 2011, 2012
Packit dd8086
  Rocky Bernstein <rocky@gnu.org>
Packit dd8086
  
Packit dd8086
  This program is free software: you can redistribute it and/or modify
Packit dd8086
  it under the terms of the GNU General Public License as published by
Packit dd8086
  the Free Software Foundation, either version 3 of the License, or
Packit dd8086
  (at your option) any later version.
Packit dd8086
Packit dd8086
  This program is distributed in the hope that it will be useful,
Packit dd8086
  but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit dd8086
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit dd8086
  GNU General Public License for more details.
Packit dd8086
Packit dd8086
  You should have received a copy of the GNU General Public License
Packit dd8086
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit dd8086
*/
Packit dd8086
Packit dd8086
/* Simple program to list CD-Text info of a Compact Disc using
Packit dd8086
   libcdio.  See also corresponding C++ programs of similar names. */
Packit dd8086
Packit dd8086
#define EXAMPLE_CUE_FILE "../test/data/cdtext.cue"
Packit dd8086
#define EXAMPLE_PREF_LANG CDTEXT_LANGUAGE_GERMAN
Packit dd8086
Packit dd8086
#ifdef HAVE_CONFIG_H
Packit dd8086
#include "config.h"
Packit dd8086
#define __CDIO_CONFIG_H__ 1
Packit dd8086
#endif
Packit dd8086
Packit dd8086
#ifdef HAVE_STDIO_H
Packit dd8086
#include <stdio.h>
Packit dd8086
#endif
Packit dd8086
Packit dd8086
#include <cdio/cdio.h>
Packit dd8086
Packit dd8086
static void 
Packit dd8086
print_cdtext_track_info(cdtext_t *cdtext, track_t i_track) {
Packit dd8086
    cdtext_field_t i;
Packit dd8086
    
Packit dd8086
    for (i=0; i < MAX_CDTEXT_FIELDS; i++) {
Packit dd8086
        if (cdtext_get_const(cdtext, i, i_track)) {
Packit dd8086
            printf("-- \t%s: %s\n", cdtext_field2str(i),
Packit dd8086
                   cdtext_get_const(cdtext, i, i_track));
Packit dd8086
        }
Packit dd8086
    }
Packit dd8086
    
Packit dd8086
}
Packit dd8086
Packit dd8086
static void 
Packit dd8086
print_disc_info(CdIo_t *p_cdio) {
Packit dd8086
    track_t i_first_track = cdio_get_first_track_num (p_cdio);
Packit dd8086
    track_t i_tracks = cdio_get_num_tracks (p_cdio);
Packit dd8086
    track_t i_last_track = i_first_track + i_tracks;
Packit dd8086
    discmode_t cd_discmode = cdio_get_discmode (p_cdio);
Packit dd8086
    cdtext_t *cdtext = cdio_get_cdtext (p_cdio);
Packit dd8086
    int i;
Packit dd8086
    
Packit dd8086
    printf("-- Discmode: %s\n\n", discmode2str[cd_discmode]);
Packit dd8086
    
Packit dd8086
    if (NULL == cdtext)
Packit dd8086
    {
Packit dd8086
        printf("-- No CD-Text found on Disc.\n");
Packit dd8086
        return;
Packit dd8086
    }
Packit dd8086
Packit dd8086
    /* print available languages */
Packit dd8086
    {
Packit dd8086
        cdtext_lang_t *languages;
Packit dd8086
Packit dd8086
        printf("-- CD-Text available in: ");
Packit dd8086
Packit dd8086
        languages = cdtext_list_languages(cdtext);
Packit dd8086
        for(i=0; i<8; i++)
Packit dd8086
            if ( CDTEXT_LANGUAGE_UNKNOWN != languages[i])
Packit dd8086
                printf("%s ", cdtext_lang2str(languages[i]));
Packit dd8086
        printf("\n");
Packit dd8086
    }
Packit dd8086
Packit dd8086
    /* select language */
Packit dd8086
    if(cdtext_select_language(cdtext, EXAMPLE_PREF_LANG)) {
Packit dd8086
        printf("-- %s selected.\n", cdtext_lang2str (EXAMPLE_PREF_LANG));
Packit dd8086
    } else {
Packit dd8086
        printf("-- '%s' is not available. Using '%s'\n",
Packit dd8086
               cdtext_lang2str (EXAMPLE_PREF_LANG),
Packit dd8086
               cdtext_lang2str (cdtext_get_language (cdtext)));
Packit dd8086
    }
Packit dd8086
Packit dd8086
    /* print cd-text */
Packit dd8086
    printf("-- CD-Text for Disc:\n");
Packit dd8086
    print_cdtext_track_info(cdtext, 0);
Packit dd8086
    for (i=i_first_track ; i < i_last_track; i++ ) {
Packit dd8086
        printf("-- CD-Text for Track %d:\n", i);
Packit dd8086
        print_cdtext_track_info(cdtext, i);
Packit dd8086
    }
Packit dd8086
}
Packit dd8086
Packit dd8086
int
Packit dd8086
main(int argc, const char *argv[])
Packit dd8086
{
Packit dd8086
    CdIo_t *p_cdio;
Packit dd8086
    
Packit dd8086
    /* read CD-Text from a bin/cue (CDRWIN) image */
Packit dd8086
    p_cdio = cdio_open(EXAMPLE_CUE_FILE, DRIVER_BINCUE);
Packit dd8086
    if (NULL == p_cdio) {
Packit dd8086
        printf("Couldn't open %s with BIN/CUE driver.\n", 
Packit dd8086
               EXAMPLE_CUE_FILE);
Packit dd8086
    } else {
Packit dd8086
        print_disc_info(p_cdio);
Packit dd8086
        cdio_destroy(p_cdio);
Packit dd8086
    }
Packit dd8086
    
Packit dd8086
    /* read CD-Text from default device */
Packit dd8086
    p_cdio = cdio_open (NULL, DRIVER_DEVICE);
Packit dd8086
    if (NULL == p_cdio) {
Packit dd8086
        printf("Couldn't find CD\n");
Packit dd8086
        return 77;
Packit dd8086
    } else {
Packit dd8086
        print_disc_info(p_cdio);
Packit dd8086
        cdio_destroy(p_cdio);
Packit dd8086
    }
Packit dd8086
    
Packit dd8086
    return 0;
Packit dd8086
}