Blame src/util.h

Packit dd8086
/*
Packit dd8086
  Copyright (C) 2003, 2004, 2005, 2008, 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
/* Miscellaneous things common to standalone programs. */
Packit dd8086
Packit dd8086
#ifndef UTIL_H
Packit dd8086
#define UTIL_H
Packit dd8086
#if defined(HAVE_CONFIG_H) && !defined(__CDIO_CONFIG_H__)
Packit dd8086
# include "config.h"
Packit dd8086
# define __CDIO_CONFIG_H__ 1
Packit dd8086
#endif
Packit dd8086
Packit dd8086
#include <cdio/cdio.h>
Packit dd8086
#include <cdio/logging.h>
Packit dd8086
#include <cdio/iso9660.h>
Packit dd8086
#ifdef HAVE_STDIO_H
Packit dd8086
#include <stdio.h>
Packit dd8086
#endif
Packit dd8086
#ifdef HAVE_SYS_TYPES_H
Packit dd8086
#include <sys/types.h>
Packit dd8086
#endif
Packit dd8086
#ifdef HAVE_STDLIB_H
Packit dd8086
#include <stdlib.h>
Packit dd8086
#endif
Packit dd8086
#ifdef HAVE_STRING_H
Packit dd8086
#include <string.h>
Packit dd8086
#endif
Packit dd8086
#ifdef HAVE_STRINGS_H
Packit dd8086
#include <strings.h>
Packit dd8086
#endif
Packit dd8086
#include <ctype.h>
Packit dd8086
Packit dd8086
#ifdef HAVE_STDARG_H
Packit dd8086
/* Get a definition for va_list.  */
Packit dd8086
#include <stdarg.h>
Packit dd8086
#endif
Packit dd8086
Packit dd8086
/* FreeBSD 4 has getopt in unistd.h. So we include that before
Packit dd8086
   getopt.h */
Packit dd8086
#ifdef HAVE_UNISTD_H
Packit dd8086
#include <unistd.h>
Packit dd8086
#endif
Packit dd8086
#ifdef HAVE_GETOPT_H
Packit dd8086
#include <getopt.h>
Packit dd8086
#endif
Packit dd8086
Packit dd8086
#ifdef ENABLE_NLS
Packit dd8086
#    include <locale.h>
Packit dd8086
#    include <libintl.h>
Packit dd8086
#    define _(String) dgettext ("cdinfo", String)
Packit dd8086
#else
Packit dd8086
/* Stubs that do something close enough.  */
Packit dd8086
#    define _(String) (String)
Packit dd8086
#endif
Packit dd8086
Packit dd8086
/* The following test is to work around the gross typo in
Packit dd8086
   systems like Sony NEWS-OS Release 4.0C, whereby EXIT_FAILURE
Packit dd8086
   is defined to 0, not 1.  */
Packit dd8086
#if !EXIT_FAILURE
Packit dd8086
# undef EXIT_FAILURE
Packit dd8086
# define EXIT_FAILURE 1
Packit dd8086
#endif
Packit dd8086
Packit dd8086
#ifndef EXIT_SUCCESS
Packit dd8086
# define EXIT_SUCCESS 0
Packit dd8086
#endif
Packit dd8086
Packit dd8086
#ifndef EXIT_INFO
Packit dd8086
# define EXIT_INFO 100
Packit dd8086
#endif
Packit dd8086
Packit dd8086
#define DEBUG 1
Packit dd8086
#if DEBUG
Packit dd8086
#define dbg_print(level, s, args...) \
Packit dd8086
   if (opts.debug_level >= level) \
Packit dd8086
     report(stderr, "%s: "s, __func__ , ##args)
Packit dd8086
#else
Packit dd8086
#define dbg_print(level, s, args...) 
Packit dd8086
#endif
Packit dd8086
Packit dd8086
#define err_exit(fmt, args...) \
Packit dd8086
  report(stderr, "%s: "fmt, program_name, ##args); \
Packit dd8086
  myexit(p_cdio, EXIT_FAILURE)		     
Packit dd8086
  
Packit dd8086
typedef enum
Packit dd8086
{
Packit dd8086
  INPUT_AUTO,
Packit dd8086
  INPUT_DEVICE,
Packit dd8086
  INPUT_BIN,
Packit dd8086
  INPUT_CUE,
Packit dd8086
  INPUT_NRG,
Packit dd8086
  INPUT_CDRDAO,
Packit dd8086
  INPUT_UNKNOWN
Packit dd8086
} source_image_t;
Packit dd8086
Packit dd8086
extern char *source_name;
Packit dd8086
extern char *program_name;
Packit dd8086
extern cdio_log_handler_t gl_default_cdio_log_handler;
Packit dd8086
Packit dd8086
/*! Common error exit routine which frees p_cdio. rc is the 
Packit dd8086
    return code to pass to exit.
Packit dd8086
*/
Packit dd8086
void myexit(CdIo_t *p_cdio, int rc);
Packit dd8086
Packit dd8086
/*! Print our version string */
Packit dd8086
void print_version (char *psz_program, const char *psz_version,
Packit dd8086
		    int no_header, bool version_only);
Packit dd8086
Packit dd8086
/*! Device input routine. If successful we return an open CdIo_t
Packit dd8086
    pointer. On error the program exits.
Packit dd8086
 */
Packit dd8086
CdIo_t *
Packit dd8086
open_input(const char *psz_source, source_image_t source_image, 
Packit dd8086
	   const char *psz_access_mode);
Packit dd8086
Packit dd8086
/*! On Unixish OS's we fill out the device name, from a short name.
Packit dd8086
    For example cdrom might become /dev/cdrom.
Packit dd8086
*/
Packit dd8086
char *fillout_device_name(const char *device_name);
Packit dd8086
Packit dd8086
/*! Prints out SCSI-MMC drive features  */
Packit dd8086
void  print_mmc_drive_features(CdIo *p_cdio);
Packit dd8086
Packit dd8086
/*! Prints out drive capabilities */
Packit dd8086
void print_drive_capabilities(cdio_drive_read_cap_t  p_read_cap,
Packit dd8086
			      cdio_drive_write_cap_t p_write_cap,
Packit dd8086
			      cdio_drive_misc_cap_t  p_misc_cap);
Packit dd8086
Packit dd8086
/*! Common place for output routine. In some environments, like XBOX,
Packit dd8086
  it may not be desireable to send output to stdout and stderr. */
Packit dd8086
void report (FILE *stream, const char *psz_format, ...);
Packit dd8086
Packit dd8086
/* Prints "ls"-like file attributes */
Packit dd8086
void print_fs_attrs(iso9660_stat_t *p_statbuf, bool b_rock, bool b_xa, 
Packit dd8086
		    const char *psz_name_untranslated, 
Packit dd8086
		    const char *psz_name_translated);
Packit dd8086
Packit dd8086
#endif /* UTIL_H */