Blame example/paranoia2.c

Packit cb6d3d
/*
Packit cb6d3d
  Copyright (C) 2005, 2006, 2008, 2009 Rocky Bernstein <rocky@gnu.org>
Packit cb6d3d
Packit cb6d3d
  This program is free software: you can redistribute it and/or modify
Packit cb6d3d
  it under the terms of the GNU General Public License as published by
Packit cb6d3d
  the Free Software Foundation, either version 3 of the License, or
Packit cb6d3d
  (at your option) any later version.
Packit cb6d3d
Packit cb6d3d
  This program is distributed in the hope that it will be useful,
Packit cb6d3d
  but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit cb6d3d
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit cb6d3d
  GNU General Public License for more details.
Packit cb6d3d
Packit cb6d3d
  You should have received a copy of the GNU General Public License
Packit cb6d3d
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit cb6d3d
*/
Packit cb6d3d
Packit cb6d3d
/* Simple program to show using libcdio's version of the CD-DA
Packit cb6d3d
   paranoia library. But in this version, we'll open a cdio object before
Packit cb6d3d
   calling paranoia's open. I imagine in many cases such as media
Packit cb6d3d
   players this may be what will be done since, one may want to get
Packit cb6d3d
   CDDB/CD-Text info beforehand.
Packit cb6d3d
 */
Packit cb6d3d
#ifdef HAVE_CONFIG_H
Packit cb6d3d
#include "config.h"
Packit cb6d3d
#define __CDIO_CONFIG_H__ 1
Packit cb6d3d
#endif
Packit cb6d3d
Packit cb6d3d
#ifdef HAVE_STDIO_H
Packit cb6d3d
#include <stdio.h>
Packit cb6d3d
#endif
Packit cb6d3d
#ifdef HAVE_STDLIB_H
Packit cb6d3d
#include <stdlib.h>
Packit cb6d3d
#endif
Packit cb6d3d
Packit cb6d3d
#include <cdio/paranoia/cdda.h>
Packit cb6d3d
#include <cdio/cd_types.h>
Packit cb6d3d
Packit cb6d3d
int
Packit cb6d3d
main(int argc, const char *argv[])
Packit cb6d3d
{
Packit cb6d3d
  cdrom_drive_t *d = NULL; /* Place to store handle given by cd-paranoia. */
Packit cb6d3d
  char **ppsz_cd_drives;  /* List of all drives with a loaded CDDA in it. */
Packit cb6d3d
  CdIo_t *p_cdio = NULL;
Packit cb6d3d
Packit cb6d3d
  /* See if we can find a device with a loaded CD-DA in it. */
Packit cb6d3d
  ppsz_cd_drives = cdio_get_devices_with_cap(NULL, CDIO_FS_AUDIO, false);
Packit cb6d3d
Packit cb6d3d
  if (ppsz_cd_drives) {
Packit cb6d3d
    /* Found such a CD-ROM with a CD-DA loaded. Use the first drive in
Packit cb6d3d
       the list. */
Packit cb6d3d
    p_cdio = cdio_open(*ppsz_cd_drives, DRIVER_UNKNOWN);
Packit cb6d3d
    d=cdio_cddap_identify_cdio(p_cdio, CDDA_MESSAGE_PRINTIT, NULL);
Packit cb6d3d
  } else {
Packit cb6d3d
    printf("Unable find or access a CD-ROM drive with an audio CD in it.\n");
Packit cb6d3d
    exit(77);
Packit cb6d3d
  }
Packit cb6d3d
Packit cb6d3d
  /* Don't need a list of CD's with CD-DA's any more. */
Packit cb6d3d
  cdio_free_device_list(ppsz_cd_drives);
Packit cb6d3d
Packit cb6d3d
  if ( !d ) {
Packit cb6d3d
    printf("Unable to identify audio CD disc.\n");
Packit cb6d3d
    exit(77);
Packit cb6d3d
  }
Packit cb6d3d
Packit cb6d3d
  /* We'll set for verbose paranoia messages. */
Packit cb6d3d
  cdio_cddap_verbose_set(d, CDDA_MESSAGE_PRINTIT, CDDA_MESSAGE_PRINTIT);
Packit cb6d3d
Packit cb6d3d
  if ( 0 != cdio_cddap_open(d) ) {
Packit cb6d3d
    printf("Unable to open disc.\n");
Packit cb6d3d
    exit(77);
Packit cb6d3d
  }
Packit cb6d3d
Packit cb6d3d
  /* In the paranoia example was a reading. Here we are going to do
Packit cb6d3d
     something trivial (but I think neat any way - get the Endian-ness
Packit cb6d3d
     of the drive. */
Packit cb6d3d
  {
Packit cb6d3d
    const int i_endian = data_bigendianp(d);
Packit cb6d3d
    switch (i_endian) {
Packit cb6d3d
    case 0:
Packit cb6d3d
      printf("Drive returns audio data Little Endian."
Packit cb6d3d
	     " Your drive is like most.\n");
Packit cb6d3d
      break;
Packit cb6d3d
    case 1:
Packit cb6d3d
      printf("Drive returns audio data Big Endian.\n");
Packit cb6d3d
      break;
Packit cb6d3d
    case -1:
Packit cb6d3d
      printf("Don't know whether drive is Big or Little Endian.\n");
Packit cb6d3d
      break;
Packit cb6d3d
    default:
Packit cb6d3d
      printf("Whoah - got a return result I'm not expecting %d.\n",
Packit cb6d3d
	     i_endian);
Packit cb6d3d
      break;
Packit cb6d3d
    }
Packit cb6d3d
  }
Packit cb6d3d
Packit cb6d3d
  cdio_cddap_close_no_free_cdio(d);
Packit cb6d3d
  cdio_destroy( p_cdio );
Packit cb6d3d
Packit cb6d3d
  exit(0);
Packit cb6d3d
}