diff options
| author | R. Bernstein <rocky@gnu.org> | 2018-06-13 04:24:28 -0400 |
|---|---|---|
| committer | R. Bernstein <rocky@gnu.org> | 2018-06-13 04:24:28 -0400 |
| commit | 16ff26506eedd748598f2beed4aa9825d04c1c9f (patch) | |
| tree | 161c1463b658627beea5c0d87414d815cb44e13b | |
| parent | 81d5c7bc6c162c17362d954e86de8971605d52ef (diff) | |
| parent | ce2a26f2fcfc860c99b0ec75f0873d09e1230b64 (diff) | |
| download | libcdio-16ff26506eedd748598f2beed4aa9825d04c1c9f.tar.gz | |
Merge branch 'cdtext-list-languages'
| -rw-r--r-- | conf9AaqoM/subs.awk | 231 | ||||
| -rw-r--r-- | conf9AaqoM/subs1.awk | 231 | ||||
| -rw-r--r-- | config_extract.sh | 2 | ||||
| -rw-r--r-- | example/C++/OO/cdtext.cpp | 5 | ||||
| -rw-r--r-- | example/cdtext-raw.c | 63 | ||||
| -rw-r--r-- | example/cdtext.c | 5 | ||||
| -rwxr-xr-x | example/read-disc-struct | bin | 0 -> 506085 bytes | |||
| -rw-r--r-- | example/read-disc-struct.c | 77 | ||||
| -rwxr-xr-x | example/read-disc-struct.sh | 4 | ||||
| -rw-r--r-- | include/cdio++/cdtext.hpp | 47 | ||||
| -rw-r--r-- | include/cdio/cdtext.h | 113 | ||||
| -rw-r--r-- | lib/driver/cdtext.c | 127 | ||||
| -rw-r--r-- | lib/driver/cdtext_private.h | 8 | ||||
| -rw-r--r-- | lib/driver/libcdio.sym | 3 | ||||
| -rw-r--r-- | src/cd-info.c | 7 | ||||
| -rw-r--r-- | test/copying.iso | bin | 0 -> 131072 bytes | |||
| -rw-r--r-- | test/driver/abs_path.dSYM/Contents/Info.plist | 20 | ||||
| -rw-r--r-- | test/driver/abs_path.dSYM/Contents/Resources/DWARF/abs_path | bin | 0 -> 10688 bytes | |||
| -rw-r--r-- | test/driver/gdb.core | bin | 0 -> 21823488 bytes | |||
| -rw-r--r-- | test/driver/mmc_read.core | bin | 0 -> 4726784 bytes | |||
| -rw-r--r-- | test/iso-info.core | bin | 0 -> 167944 bytes |
21 files changed, 872 insertions, 71 deletions
diff --git a/conf9AaqoM/subs.awk b/conf9AaqoM/subs.awk new file mode 100644 index 0000000..7cb49be --- /dev/null +++ b/conf9AaqoM/subs.awk @@ -0,0 +1,231 @@ +BEGIN { +S["am__EXEEXT_FALSE"]="" +S["am__EXEEXT_TRUE"]="#" +S["LTLIBOBJS"]="" +S["LIBOBJS"]="" +S["VCDINFO_LIBS"]="" +S["VCDINFO_CFLAGS"]="" +S["CDDA_PLAYER_LIBS"]=" -lcurses" +S["BUILD_CDDA_PLAYER_FALSE"]="#" +S["BUILD_CDDA_PLAYER_TRUE"]="" +S["CDDB_LIBS"]="" +S["CDDB_CFLAGS"]="" +S["PKG_CONFIG"]="/usr/bin/pkg-config" +S["ENABLE_ROCK_FALSE"]="#" +S["ENABLE_ROCK_TRUE"]="" +S["MINGW32"]="" +S["HAVE_ROCK"]="1" +S["HAVE_JOLIET"]="1" +S["LTLIBICONV"]="" +S["LIBICONV"]="" +S["LIBCDIO_SOURCE_PATH"]="/nosenet/muffin-src/external-vcs/savannah/libcdio" +S["HAVE_OS2_CDROM"]="" +S["HAVE_WIN32_CDROM"]="" +S["HAVE_SOLARIS_CDROM"]="" +S["HAVE_LINUX_CDROM"]="" +S["HAVE_FREEBSD_CDROM"]="" +S["HAVE_DARWIN_CDROM"]="" +S["HAVE_BSDI_CDROM"]="" +S["LINUX_CDROM_TIMEOUT"]="" +S["LT_NO_UNDEFINED"]="" +S["LIBISO9660_CFLAGS"]="-I$(top_srcdir)/lib/iso9660/" +S["LIBCDIO_CFLAGS"]="-I$(top_srcdir)/lib/driver -I$(top_builddir)/include -I$(top_srcdir)/include/" +S["DARWIN_PKG_LIB_HACK"]="" +S["native_abs_top_srcdir"]="/nosenet/muffin-src/external-vcs/savannah/libcdio" +S["SED_EXTENDED_RE_FLAG"]="-r" +S["LIBUDF_LIBS"]="$(top_builddir)/lib/udf/libudf.la" +S["LIBISO9660_LIBS"]="$(top_builddir)/lib/iso9660/libiso9660.la" +S["LIBCDIO_DEPS"]="$(top_builddir)/lib/driver/libcdio.la" +S["LIBCDIOPP_LIBS"]="$(top_builddir)/lib/cdio++/libcdio++.la" +S["LIBCDIO_LIBS"]="$(top_builddir)/lib/driver/libcdio.la" +S["LIBISO9660PP_LIBS"]="$(top_builddir)/lib/cdio++/libiso9660++.la" +S["LIBCDIO_CDDA_LIBS"]="$(top_builddir)/lib/cdda_interface/libcdio_cdda.la" +S["DISABLE_CPP_FALSE"]="" +S["DISABLE_CPP_TRUE"]="#" +S["BUILD_VERSIONED_LIBS_FALSE"]="" +S["BUILD_VERSIONED_LIBS_TRUE"]="#" +S["BUILD_CDIOTEST_FALSE"]="" +S["BUILD_CDIOTEST_TRUE"]="#" +S["BUILD_CDINFO_LINUX_FALSE"]="" +S["BUILD_CDINFO_LINUX_TRUE"]="#" +S["BUILD_ISO_READ_FALSE"]="#" +S["BUILD_ISO_READ_TRUE"]="" +S["BUILD_ISO_INFO_FALSE"]="#" +S["BUILD_ISO_INFO_TRUE"]="" +S["BUILD_CD_READ_FALSE"]="#" +S["BUILD_CD_READ_TRUE"]="" +S["BUILD_CDINFO_FALSE"]="#" +S["BUILD_CDINFO_TRUE"]="" +S["BUILD_CD_DRIVE_FALSE"]="#" +S["BUILD_CD_DRIVE_TRUE"]="" +S["CYGWIN_FALSE"]="" +S["CYGWIN_TRUE"]="#" +S["COS_LIB"]="-lm" +S["CXXCPP"]="g++ -E" +S["LT_SYS_LIBRARY_PATH"]="" +S["OTOOL64"]="" +S["OTOOL"]="" +S["LIPO"]="" +S["NMEDIT"]="" +S["DSYMUTIL"]="" +S["MANIFEST_TOOL"]=":" +S["RANLIB"]="ranlib" +S["ac_ct_AR"]="ar" +S["AR"]="ar" +S["LN_S"]="ln -s" +S["NM"]="/usr/bin/nm -p" +S["ac_ct_DUMPBIN"]="" +S["DUMPBIN"]="" +S["LD"]="/usr/ccs/bin/ld" +S["FGREP"]="/opt/csw/bin/ggrep -F" +S["SED"]="/opt/csw/bin/gsed" +S["LIBTOOL"]="$(SHELL) $(top_builddir)/libtool" +S["OBJDUMP"]="objdump" +S["DLLTOOL"]="dlltool" +S["AS"]="as" +S["TYPESIZES"]="" +S["UCDROM_H"]="" +S["SBPCD_H"]="" +S["RM"]="rm -f" +S["DIFF_OPTS"]=" -w" +S["DIFF"]="/usr/bin/diff" +S["HAVE_PERL_FALSE"]="#" +S["HAVE_PERL_TRUE"]="" +S["PERL"]="/opt/csw/bin/perl" +S["EGREP"]="/opt/csw/bin/ggrep -E" +S["GREP"]="/opt/csw/bin/ggrep" +S["CPP"]="gcc -E" +S["ISO_MAKING_COMMAND"]="mkisofs" +S["am__fastdepCXX_FALSE"]="#" +S["am__fastdepCXX_TRUE"]="" +S["CXXDEPMODE"]="depmode=gcc3" +S["ac_ct_CXX"]="g++" +S["CXXFLAGS"]="-g -O2" +S["CXX"]="g++" +S["am__fastdepCC_FALSE"]="#" +S["am__fastdepCC_TRUE"]="" +S["CCDEPMODE"]="depmode=gcc3" +S["am__nodep"]="_no" +S["AMDEPBACKSLASH"]="\\" +S["AMDEP_FALSE"]="#" +S["AMDEP_TRUE"]="" +S["am__quote"]="" +S["am__include"]="include" +S["DEPDIR"]=".deps" +S["OBJEXT"]="o" +S["EXEEXT"]="" +S["ac_ct_CC"]="gcc" +S["CPPFLAGS"]="" +S["LDFLAGS"]="" +S["CFLAGS"]="-g -O2 -Wall -Wcast-align -Wchar-subscripts -Wdisabled-optimization -Wendif-labels -Winline -Wmissing-declarations -Wmissing-prototypes -Wnested-ex"\ +"terns -Wno-sign-compare -Wpointer-arith -Wshadow -Wstrict-prototypes -Wundef -Wunused -Wwrite-strings" +S["CC"]="gcc" +S["BUILD_EXAMPLES_FALSE"]="#" +S["BUILD_EXAMPLES_TRUE"]="" +S["ENABLE_CPP_FALSE"]="" +S["ENABLE_CPP_TRUE"]="#" +S["ENABLE_CXX_BINDINGS_FALSE"]="#" +S["ENABLE_CXX_BINDINGS_TRUE"]="" +S["MAINT"]="#" +S["MAINTAINER_MODE_FALSE"]="" +S["MAINTAINER_MODE_TRUE"]="#" +S["HELP2MAN"]="${SHELL} /nosenet/muffin-src/external-vcs/savannah/libcdio/missing help2man" +S["LIBCDIO_VERSION_NUM"]="1" +S["host_os"]="solaris2.11" +S["host_vendor"]="pc" +S["host_cpu"]="i386" +S["host"]="i386-pc-solaris2.11" +S["build_os"]="solaris2.11" +S["build_vendor"]="pc" +S["build_cpu"]="i386" +S["build"]="i386-pc-solaris2.11" +S["AM_BACKSLASH"]="\\" +S["AM_DEFAULT_VERBOSITY"]="0" +S["AM_DEFAULT_V"]="$(AM_DEFAULT_VERBOSITY)" +S["AM_V"]="$(V)" +S["am__untar"]="$${TAR-tar} xf -" +S["am__tar"]="$${TAR-tar} chof - \"$$tardir\"" +S["AMTAR"]="$${TAR-tar}" +S["am__leading_dot"]="." +S["SET_MAKE"]="" +S["AWK"]="gawk" +S["mkdir_p"]="/opt/csw/bin/gmkdir -p" +S["MKDIR_P"]="/opt/csw/bin/gmkdir -p" +S["INSTALL_STRIP_PROGRAM"]="$(install_sh) -c -s" +S["STRIP"]="strip" +S["install_sh"]="${SHELL} /nosenet/muffin-src/external-vcs/savannah/libcdio/install-sh" +S["MAKEINFO"]="${SHELL} /nosenet/muffin-src/external-vcs/savannah/libcdio/missing makeinfo" +S["AUTOHEADER"]="${SHELL} /nosenet/muffin-src/external-vcs/savannah/libcdio/missing autoheader" +S["AUTOMAKE"]="${SHELL} /nosenet/muffin-src/external-vcs/savannah/libcdio/missing automake-1.15" +S["AUTOCONF"]="${SHELL} /nosenet/muffin-src/external-vcs/savannah/libcdio/missing autoconf" +S["ACLOCAL"]="${SHELL} /nosenet/muffin-src/external-vcs/savannah/libcdio/missing aclocal-1.15" +S["VERSION"]="1.0.0rc1" +S["PACKAGE"]="libcdio" +S["CYGPATH_W"]="echo" +S["am__isrc"]="" +S["INSTALL_DATA"]="${INSTALL} -m 644" +S["INSTALL_SCRIPT"]="${INSTALL}" +S["INSTALL_PROGRAM"]="${INSTALL}" +S["target_alias"]="" +S["host_alias"]="" +S["build_alias"]="" +S["LIBS"]="-lnsl -lsocket -lm" +S["ECHO_T"]="" +S["ECHO_N"]="" +S["ECHO_C"]="\\c" +S["DEFS"]="-DHAVE_CONFIG_H" +S["mandir"]="${datarootdir}/man" +S["localedir"]="${datarootdir}/locale" +S["libdir"]="${exec_prefix}/lib" +S["psdir"]="${docdir}" +S["pdfdir"]="${docdir}" +S["dvidir"]="${docdir}" +S["htmldir"]="${docdir}" +S["infodir"]="${datarootdir}/info" +S["docdir"]="${datarootdir}/doc/${PACKAGE_TARNAME}" +S["oldincludedir"]="/usr/include" +S["includedir"]="${prefix}/include" +S["runstatedir"]="${localstatedir}/run" +S["localstatedir"]="${prefix}/var" +S["sharedstatedir"]="${prefix}/com" +S["sysconfdir"]="${prefix}/etc" +S["datadir"]="${datarootdir}" +S["datarootdir"]="${prefix}/share" +S["libexecdir"]="${exec_prefix}/libexec" +S["sbindir"]="${exec_prefix}/sbin" +S["bindir"]="${exec_prefix}/bin" +S["program_transform_name"]="s,x,x," +S["prefix"]="/usr/local" +S["exec_prefix"]="${prefix}" +S["PACKAGE_URL"]="" +S["PACKAGE_BUGREPORT"]="https://savannah.gnu.org/bugs/?group=libcdio" +S["PACKAGE_STRING"]="libcdio 1.0.0rc1" +S["PACKAGE_VERSION"]="1.0.0rc1" +S["PACKAGE_TARNAME"]="libcdio" +S["PACKAGE_NAME"]="libcdio" +S["PATH_SEPARATOR"]=":" +S["SHELL"]="/bin/sh" + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + diff --git a/conf9AaqoM/subs1.awk b/conf9AaqoM/subs1.awk new file mode 100644 index 0000000..7cb49be --- /dev/null +++ b/conf9AaqoM/subs1.awk @@ -0,0 +1,231 @@ +BEGIN { +S["am__EXEEXT_FALSE"]="" +S["am__EXEEXT_TRUE"]="#" +S["LTLIBOBJS"]="" +S["LIBOBJS"]="" +S["VCDINFO_LIBS"]="" +S["VCDINFO_CFLAGS"]="" +S["CDDA_PLAYER_LIBS"]=" -lcurses" +S["BUILD_CDDA_PLAYER_FALSE"]="#" +S["BUILD_CDDA_PLAYER_TRUE"]="" +S["CDDB_LIBS"]="" +S["CDDB_CFLAGS"]="" +S["PKG_CONFIG"]="/usr/bin/pkg-config" +S["ENABLE_ROCK_FALSE"]="#" +S["ENABLE_ROCK_TRUE"]="" +S["MINGW32"]="" +S["HAVE_ROCK"]="1" +S["HAVE_JOLIET"]="1" +S["LTLIBICONV"]="" +S["LIBICONV"]="" +S["LIBCDIO_SOURCE_PATH"]="/nosenet/muffin-src/external-vcs/savannah/libcdio" +S["HAVE_OS2_CDROM"]="" +S["HAVE_WIN32_CDROM"]="" +S["HAVE_SOLARIS_CDROM"]="" +S["HAVE_LINUX_CDROM"]="" +S["HAVE_FREEBSD_CDROM"]="" +S["HAVE_DARWIN_CDROM"]="" +S["HAVE_BSDI_CDROM"]="" +S["LINUX_CDROM_TIMEOUT"]="" +S["LT_NO_UNDEFINED"]="" +S["LIBISO9660_CFLAGS"]="-I$(top_srcdir)/lib/iso9660/" +S["LIBCDIO_CFLAGS"]="-I$(top_srcdir)/lib/driver -I$(top_builddir)/include -I$(top_srcdir)/include/" +S["DARWIN_PKG_LIB_HACK"]="" +S["native_abs_top_srcdir"]="/nosenet/muffin-src/external-vcs/savannah/libcdio" +S["SED_EXTENDED_RE_FLAG"]="-r" +S["LIBUDF_LIBS"]="$(top_builddir)/lib/udf/libudf.la" +S["LIBISO9660_LIBS"]="$(top_builddir)/lib/iso9660/libiso9660.la" +S["LIBCDIO_DEPS"]="$(top_builddir)/lib/driver/libcdio.la" +S["LIBCDIOPP_LIBS"]="$(top_builddir)/lib/cdio++/libcdio++.la" +S["LIBCDIO_LIBS"]="$(top_builddir)/lib/driver/libcdio.la" +S["LIBISO9660PP_LIBS"]="$(top_builddir)/lib/cdio++/libiso9660++.la" +S["LIBCDIO_CDDA_LIBS"]="$(top_builddir)/lib/cdda_interface/libcdio_cdda.la" +S["DISABLE_CPP_FALSE"]="" +S["DISABLE_CPP_TRUE"]="#" +S["BUILD_VERSIONED_LIBS_FALSE"]="" +S["BUILD_VERSIONED_LIBS_TRUE"]="#" +S["BUILD_CDIOTEST_FALSE"]="" +S["BUILD_CDIOTEST_TRUE"]="#" +S["BUILD_CDINFO_LINUX_FALSE"]="" +S["BUILD_CDINFO_LINUX_TRUE"]="#" +S["BUILD_ISO_READ_FALSE"]="#" +S["BUILD_ISO_READ_TRUE"]="" +S["BUILD_ISO_INFO_FALSE"]="#" +S["BUILD_ISO_INFO_TRUE"]="" +S["BUILD_CD_READ_FALSE"]="#" +S["BUILD_CD_READ_TRUE"]="" +S["BUILD_CDINFO_FALSE"]="#" +S["BUILD_CDINFO_TRUE"]="" +S["BUILD_CD_DRIVE_FALSE"]="#" +S["BUILD_CD_DRIVE_TRUE"]="" +S["CYGWIN_FALSE"]="" +S["CYGWIN_TRUE"]="#" +S["COS_LIB"]="-lm" +S["CXXCPP"]="g++ -E" +S["LT_SYS_LIBRARY_PATH"]="" +S["OTOOL64"]="" +S["OTOOL"]="" +S["LIPO"]="" +S["NMEDIT"]="" +S["DSYMUTIL"]="" +S["MANIFEST_TOOL"]=":" +S["RANLIB"]="ranlib" +S["ac_ct_AR"]="ar" +S["AR"]="ar" +S["LN_S"]="ln -s" +S["NM"]="/usr/bin/nm -p" +S["ac_ct_DUMPBIN"]="" +S["DUMPBIN"]="" +S["LD"]="/usr/ccs/bin/ld" +S["FGREP"]="/opt/csw/bin/ggrep -F" +S["SED"]="/opt/csw/bin/gsed" +S["LIBTOOL"]="$(SHELL) $(top_builddir)/libtool" +S["OBJDUMP"]="objdump" +S["DLLTOOL"]="dlltool" +S["AS"]="as" +S["TYPESIZES"]="" +S["UCDROM_H"]="" +S["SBPCD_H"]="" +S["RM"]="rm -f" +S["DIFF_OPTS"]=" -w" +S["DIFF"]="/usr/bin/diff" +S["HAVE_PERL_FALSE"]="#" +S["HAVE_PERL_TRUE"]="" +S["PERL"]="/opt/csw/bin/perl" +S["EGREP"]="/opt/csw/bin/ggrep -E" +S["GREP"]="/opt/csw/bin/ggrep" +S["CPP"]="gcc -E" +S["ISO_MAKING_COMMAND"]="mkisofs" +S["am__fastdepCXX_FALSE"]="#" +S["am__fastdepCXX_TRUE"]="" +S["CXXDEPMODE"]="depmode=gcc3" +S["ac_ct_CXX"]="g++" +S["CXXFLAGS"]="-g -O2" +S["CXX"]="g++" +S["am__fastdepCC_FALSE"]="#" +S["am__fastdepCC_TRUE"]="" +S["CCDEPMODE"]="depmode=gcc3" +S["am__nodep"]="_no" +S["AMDEPBACKSLASH"]="\\" +S["AMDEP_FALSE"]="#" +S["AMDEP_TRUE"]="" +S["am__quote"]="" +S["am__include"]="include" +S["DEPDIR"]=".deps" +S["OBJEXT"]="o" +S["EXEEXT"]="" +S["ac_ct_CC"]="gcc" +S["CPPFLAGS"]="" +S["LDFLAGS"]="" +S["CFLAGS"]="-g -O2 -Wall -Wcast-align -Wchar-subscripts -Wdisabled-optimization -Wendif-labels -Winline -Wmissing-declarations -Wmissing-prototypes -Wnested-ex"\ +"terns -Wno-sign-compare -Wpointer-arith -Wshadow -Wstrict-prototypes -Wundef -Wunused -Wwrite-strings" +S["CC"]="gcc" +S["BUILD_EXAMPLES_FALSE"]="#" +S["BUILD_EXAMPLES_TRUE"]="" +S["ENABLE_CPP_FALSE"]="" +S["ENABLE_CPP_TRUE"]="#" +S["ENABLE_CXX_BINDINGS_FALSE"]="#" +S["ENABLE_CXX_BINDINGS_TRUE"]="" +S["MAINT"]="#" +S["MAINTAINER_MODE_FALSE"]="" +S["MAINTAINER_MODE_TRUE"]="#" +S["HELP2MAN"]="${SHELL} /nosenet/muffin-src/external-vcs/savannah/libcdio/missing help2man" +S["LIBCDIO_VERSION_NUM"]="1" +S["host_os"]="solaris2.11" +S["host_vendor"]="pc" +S["host_cpu"]="i386" +S["host"]="i386-pc-solaris2.11" +S["build_os"]="solaris2.11" +S["build_vendor"]="pc" +S["build_cpu"]="i386" +S["build"]="i386-pc-solaris2.11" +S["AM_BACKSLASH"]="\\" +S["AM_DEFAULT_VERBOSITY"]="0" +S["AM_DEFAULT_V"]="$(AM_DEFAULT_VERBOSITY)" +S["AM_V"]="$(V)" +S["am__untar"]="$${TAR-tar} xf -" +S["am__tar"]="$${TAR-tar} chof - \"$$tardir\"" +S["AMTAR"]="$${TAR-tar}" +S["am__leading_dot"]="." +S["SET_MAKE"]="" +S["AWK"]="gawk" +S["mkdir_p"]="/opt/csw/bin/gmkdir -p" +S["MKDIR_P"]="/opt/csw/bin/gmkdir -p" +S["INSTALL_STRIP_PROGRAM"]="$(install_sh) -c -s" +S["STRIP"]="strip" +S["install_sh"]="${SHELL} /nosenet/muffin-src/external-vcs/savannah/libcdio/install-sh" +S["MAKEINFO"]="${SHELL} /nosenet/muffin-src/external-vcs/savannah/libcdio/missing makeinfo" +S["AUTOHEADER"]="${SHELL} /nosenet/muffin-src/external-vcs/savannah/libcdio/missing autoheader" +S["AUTOMAKE"]="${SHELL} /nosenet/muffin-src/external-vcs/savannah/libcdio/missing automake-1.15" +S["AUTOCONF"]="${SHELL} /nosenet/muffin-src/external-vcs/savannah/libcdio/missing autoconf" +S["ACLOCAL"]="${SHELL} /nosenet/muffin-src/external-vcs/savannah/libcdio/missing aclocal-1.15" +S["VERSION"]="1.0.0rc1" +S["PACKAGE"]="libcdio" +S["CYGPATH_W"]="echo" +S["am__isrc"]="" +S["INSTALL_DATA"]="${INSTALL} -m 644" +S["INSTALL_SCRIPT"]="${INSTALL}" +S["INSTALL_PROGRAM"]="${INSTALL}" +S["target_alias"]="" +S["host_alias"]="" +S["build_alias"]="" +S["LIBS"]="-lnsl -lsocket -lm" +S["ECHO_T"]="" +S["ECHO_N"]="" +S["ECHO_C"]="\\c" +S["DEFS"]="-DHAVE_CONFIG_H" +S["mandir"]="${datarootdir}/man" +S["localedir"]="${datarootdir}/locale" +S["libdir"]="${exec_prefix}/lib" +S["psdir"]="${docdir}" +S["pdfdir"]="${docdir}" +S["dvidir"]="${docdir}" +S["htmldir"]="${docdir}" +S["infodir"]="${datarootdir}/info" +S["docdir"]="${datarootdir}/doc/${PACKAGE_TARNAME}" +S["oldincludedir"]="/usr/include" +S["includedir"]="${prefix}/include" +S["runstatedir"]="${localstatedir}/run" +S["localstatedir"]="${prefix}/var" +S["sharedstatedir"]="${prefix}/com" +S["sysconfdir"]="${prefix}/etc" +S["datadir"]="${datarootdir}" +S["datarootdir"]="${prefix}/share" +S["libexecdir"]="${exec_prefix}/libexec" +S["sbindir"]="${exec_prefix}/sbin" +S["bindir"]="${exec_prefix}/bin" +S["program_transform_name"]="s,x,x," +S["prefix"]="/usr/local" +S["exec_prefix"]="${prefix}" +S["PACKAGE_URL"]="" +S["PACKAGE_BUGREPORT"]="https://savannah.gnu.org/bugs/?group=libcdio" +S["PACKAGE_STRING"]="libcdio 1.0.0rc1" +S["PACKAGE_VERSION"]="1.0.0rc1" +S["PACKAGE_TARNAME"]="libcdio" +S["PACKAGE_NAME"]="libcdio" +S["PATH_SEPARATOR"]=":" +S["SHELL"]="/bin/sh" + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + diff --git a/config_extract.sh b/config_extract.sh new file mode 100644 index 0000000..503e7c5 --- /dev/null +++ b/config_extract.sh @@ -0,0 +1,2 @@ +#!/bin/sh +sed -r -e 's/^#define ([A-Z_]+/#define CDIO_$1/' config.h diff --git a/example/C++/OO/cdtext.cpp b/example/C++/OO/cdtext.cpp index 227aeef..76b94e6 100644 --- a/example/C++/OO/cdtext.cpp +++ b/example/C++/OO/cdtext.cpp @@ -69,9 +69,10 @@ print_disc_info(CdioDevice *device) printf("CD-Text available in: "); - languages = cdtext->listLanguages(); + languages = cdtext->listLanguagesV2(); + /* The API promises that non-NULL p_cdtext yields non-NULL languages */ for(i=0; i<8; i++) - if ( CDTEXT_LANGUAGE_UNKNOWN != languages[i]) + if ( CDTEXT_LANGUAGE_BLOCK_UNUSED != languages[i]) printf("%s ", cdtext->lang2str(languages[i])); printf("\n"); } diff --git a/example/cdtext-raw.c b/example/cdtext-raw.c index 309c103..5d2d7cf 100644 --- a/example/cdtext-raw.c +++ b/example/cdtext-raw.c @@ -32,6 +32,9 @@ #ifdef HAVE_STDLIB_H #include <stdlib.h> #endif +#ifdef HAVE_STRING_H +#include <string.h> +#endif #include <cdio/cdio.h> @@ -62,10 +65,12 @@ print_cdtext_info(cdtext_t *p_cdtext) { int i, j; - languages = cdtext_list_languages(p_cdtext); + languages = cdtext_list_languages_v2(p_cdtext); + if (NULL == languages) + return; for(i=0; i<8; i++) - if ( CDTEXT_LANGUAGE_UNKNOWN != languages[i] - && cdtext_select_language(p_cdtext, languages[i])) + if ( CDTEXT_LANGUAGE_BLOCK_UNUSED != languages[i] + && cdtext_set_language_index(p_cdtext, i)) { printf("\nLanguage %d '%s':\n", i, cdtext_lang2str(languages[i])); @@ -126,6 +131,57 @@ read_cdtext(const char *path) { return cdt; } +static void +language_code_tests(void) { + cdtext_lang_t num, re_num; + char *text; + int i; + static cdtext_lang_t spot_codes[] = { + CDTEXT_LANGUAGE_ENGLISH, CDTEXT_LANGUAGE_WALLON , CDTEXT_LANGUAGE_ZULU, + CDTEXT_LANGUAGE_MALAGASAY, CDTEXT_LANGUAGE_AMHARIC + }; + static const char *spot_names[] = { + "English", "Wallon", "Zulu", "Malagasay", "Amharic" + }; + static int spots = 5; + + for (i = 0; i < spots; i++) { + if (0 != strcmp(cdtext_lang2str(spot_codes[i]), spot_names[i])) { + fprintf(stderr, + "cdtext_lang2str() test: idx %d , code 0x%2.2X : expected '%s' , got '%s'\n", + i, (unsigned int) spot_codes[i], spot_names[i], + cdtext_lang2str(spot_codes[i])); + } + } + + for (i = 0; i <= 0xFF; i++) { + num = i; + text = (char *) cdtext_lang2str(num); + re_num = cdtext_str2lang(text); + if ((i > CDTEXT_LANGUAGE_WALLON && i < CDTEXT_LANGUAGE_ZULU) + || i > CDTEXT_LANGUAGE_AMHARIC) { + if (0 != strcmp(text, "INVALID")) { + fprintf(stderr, + "cdtext_lang2str() test: invalid code 0x%2.2X yields '%s'\n", + (unsigned int) i, text); + } + if (CDTEXT_LANGUAGE_INVALID != re_num) { + fprintf(stderr, + "cdtext_str2lang(cdtext_lang2str()) test: invalid code 0x%2.2X yields 0x%2.2X, expected 0x%2.2X\n", + (unsigned int) i, (unsigned int) re_num, + (unsigned int) CDTEXT_LANGUAGE_INVALID); + } + } else { + if (re_num != num) { + fprintf(stderr, + "cdtext_str2lang(cdtext_lang2str()) test: code 0x%2.2X yields '%s' yields 0x%2.2X\n", + (unsigned int) i, text, (unsigned int) re_num); + } + } + } + +} + int main(int argc, const char *argv[]) { cdtext_t *cdt; @@ -141,6 +197,7 @@ main(int argc, const char *argv[]) { cdt = read_cdtext(cdt_path); print_cdtext_info(cdt); + language_code_tests(); free(cdt); return 0; diff --git a/example/cdtext.c b/example/cdtext.c index edd9ffd..d283e77 100644 --- a/example/cdtext.c +++ b/example/cdtext.c @@ -69,9 +69,10 @@ print_disc_info(CdIo_t *p_cdio) { printf("-- CD-Text available in: "); - languages = cdtext_list_languages(cdtext); + languages = cdtext_list_languages_v2(cdtext); + /* The API promises that non-NULL p_cdtext yields non-NULL languages */ for(i=0; i<8; i++) - if ( CDTEXT_LANGUAGE_UNKNOWN != languages[i]) + if ( CDTEXT_LANGUAGE_BLOCK_UNUSED != languages[i]) printf("%s ", cdtext_lang2str(languages[i])); printf("\n"); } diff --git a/example/read-disc-struct b/example/read-disc-struct Binary files differnew file mode 100755 index 0000000..6d598aa --- /dev/null +++ b/example/read-disc-struct diff --git a/example/read-disc-struct.c b/example/read-disc-struct.c new file mode 100644 index 0000000..1f02cd5 --- /dev/null +++ b/example/read-disc-struct.c @@ -0,0 +1,77 @@ +/* READ DVD STRUCTURE */ + +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <ctype.h> +#include <stdio.h> +#include <string.h> +#include <cdio/cdio.h> +#include <cdio/mmc.h> + +static void +hexdump (FILE *stream, uint8_t * buffer, unsigned int len) +{ + unsigned int i; + for (i = 0; i < len; i++, buffer++) + { + if (i % 16 == 0) + fprintf (stream, "0x%04x: ", i); + fprintf (stream, "%02x", *buffer); + if (i % 2 == 1) + fprintf (stream, " "); + if (i % 16 == 15) { + uint8_t *p; + fprintf (stream, " "); + for (p=buffer-15; p <= buffer; p++) { + fprintf(stream, "%c", isprint(*p) ? *p : '.'); + } + fprintf (stream, "\n"); + } + } + fprintf (stream, "\n"); + fflush (stream); +} + +int +main(int argc, const char *argv[]) +{ + CdIo_t *p_cdio; + + const char *psz_drive = NULL; + + /* Put in "/dev/sr0" here. */ + if (argc > 1) psz_drive = argv[1]; + + p_cdio = cdio_open (psz_drive, DRIVER_DEVICE); + + if (NULL == p_cdio) { + printf("Couldn't find DVD\n"); + return 77; + } else { + int i_status; /* Result of MMC command */ + uint8_t buf[200] = { 0, }; /* Place to hold returned data */ + mmc_cdb_t cdb = {{0, }}; /* Command Descriptor Buffer */ + int i; + + CDIO_MMC_SET_COMMAND(cdb.field, CDIO_MMC_GPCMD_READ_DVD_STRUCTURE); + CDIO_MMC_SET_READ_LENGTH16(cdb.field, sizeof(buf)); + + for (i=0; i<=16; i++) { + cdb.field[7] = i; /* The format field */ + i_status = mmc_run_cmd(p_cdio, 0, &cdb, SCSI_MMC_DATA_READ, + sizeof(buf), &buf); + if (i_status == 0) { + hexdump(stdout, buf, 200); + printf("============================================\n"); + } else { + printf("Didn't get DVD Structure.\n"); + } + } + } + + + cdio_destroy(p_cdio); + + return 0; +} diff --git a/example/read-disc-struct.sh b/example/read-disc-struct.sh new file mode 100755 index 0000000..5a90b3a --- /dev/null +++ b/example/read-disc-struct.sh @@ -0,0 +1,4 @@ +#!/bin/bash +gcc -I../include/ -g3 -Wall -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wunused -Wpointer-arith -Wwrite-strings -Wnested-externs -Wno-sign-compare -o read-disc-struct.o -c read-disc-struct.c + +/bin/sh ../libtool --silent --tag=CC --mode=link gcc -g3 -o read-disc-struct read-disc-struct.o ../lib/driver/libcdio.la -lm diff --git a/include/cdio++/cdtext.hpp b/include/cdio++/cdtext.hpp index 8e386f2..2725d4d 100644 --- a/include/cdio++/cdtext.hpp +++ b/include/cdio++/cdtext.hpp @@ -1,4 +1,5 @@ /* + Copyright (C) 2018 Thomas Schmitt Copyright (C) 2005, 2008, 2012 Rocky Bernstein <rocky@gnu.org> This program is free software: you can redistribute it and/or modify @@ -21,38 +22,38 @@ */ /*! Return string representation of the enum values above */ -const char *field2str (cdtext_field_t i) +const char *field2str (cdtext_field_t i) { return cdtext_field2str (i); } -const char *genre2str (cdtext_genre_t i) +const char *genre2str (cdtext_genre_t i) { return cdtext_genre2str (i); } -const char *lang2str (cdtext_lang_t i) +const char *lang2str (cdtext_lang_t i) { return cdtext_lang2str (i); } /*! returns an allocated string associated with the given field. NULL is returned if key is CDTEXT_INVALID or the field is not set. - + The user needs to free the string using cdio_free() when done with it. @see getConst to retrieve a constant string that doesn't have to be freed. - + */ -char *get (cdtext_field_t key, track_t i_track) +char *get (cdtext_field_t key, track_t i_track) { return cdtext_get (p_cdtext, key, i_track); } /*! returns a const string associated with the given field. NULL is returned if key is CDTEXT_INVALID or the field is not set. - + Don't use the string when the cdtext object (i.e. the CdIo_t object you got it from) is no longer valid. @@ -60,15 +61,15 @@ char *get (cdtext_field_t key, track_t i_track) cdtext object. */ -const char *getConst (cdtext_field_t key, track_t i_track) +const char *getConst (cdtext_field_t key, track_t i_track) { return cdtext_get_const (p_cdtext, key, i_track); } -/*! - sets cdtext's keyword entry to field +/*! + sets cdtext's keyword entry to field */ -void set (cdtext_field_t key, track_t i_track, const uint8_t *value, const char *charset) +void set (cdtext_field_t key, track_t i_track, const uint8_t *value, const char *charset) { cdtext_set (p_cdtext, key, value, i_track, charset); } @@ -90,15 +91,35 @@ bool selectLanguage(cdtext_lang_t lang) } /*! - returns a list of available languages + selects a language by index rather than language code +*/ +bool setLanguageIndex(int idx) +{ + return cdtext_set_language_index(p_cdtext, idx); +} + +/*! + + @deprecated. Use listLanguagesV2(), see cdio/cdtext.h + + returns a list of available languages (which has various problems) */ cdtext_lang_t *listLanguages() { return cdtext_list_languages(p_cdtext); } +/*! + returns a pointer to an array with 8 elements which indicate available + languages +*/ +cdtext_lang_t *listLanguagesV2() +{ + return cdtext_list_languages_v2(p_cdtext); +} + -/* +/* * Local variables: * c-file-style: "gnu" * tab-width: 8 diff --git a/include/cdio/cdtext.h b/include/cdio/cdtext.h index 32eb911..afac0e7 100644 --- a/include/cdio/cdtext.h +++ b/include/cdio/cdtext.h @@ -1,4 +1,5 @@ /* + Copyright (C) 2018 Thomas Schmitt Copyright (C) 2004, 2005, 2008, 2012 Rocky Bernstein <rocky@gnu.org> adapted from cuetools Copyright (C) 2003 Svend Sanjay Sorensen <ssorensen@fastmail.fm> @@ -17,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ /*! - * \file cdtext.h + * \file cdtext.h * * \brief The top-level header for CD-Text information. Applications * include this for CD-Text access. @@ -36,7 +37,10 @@ extern "C" { #define MIN_CDTEXT_FIELD 0 #define MAX_CDTEXT_FIELDS 10 -/*! Enumeration of CD-TEXT text fields. */ +/*! \typedef enum cdtext_field_t + + \brief Enumeration of CD-TEXT text fields. +*/ typedef enum { CDTEXT_FIELD_TITLE = 0, /**< title of album name or track titles */ CDTEXT_FIELD_PERFORMER = 1, /**< name(s) of the performer(s) */ @@ -51,7 +55,10 @@ typedef enum { CDTEXT_FIELD_INVALID = MAX_CDTEXT_FIELDS /**< INVALID FIELD*/ } cdtext_field_t; -/*! Enumeration of possible genre codes. */ +/*! \typedef enum cdtext_genre_t + + \brief Enumeration of possible genre codes. +*/ typedef enum { CDTEXT_GENRE_UNUSED = 0, /**< field is not used. default */ CDTEXT_GENRE_UNDEFINED = 1, /**< not defined */ @@ -84,10 +91,12 @@ typedef enum { CDTEXT_GENRE_WORLD_MUSIC = 28 /**< World Music */ } cdtext_genre_t; -/*! Enumeration of possible CD-TEXT languages. - * - * The language code is encoded as specified in ANNEX 1 to part 5 of EBU - * Tech 32 58 -E (1991). +/*! \typedef typedef enum cdtext_lang_t + + \brief Enumeration of possible CD-TEXT languages. + + The language code is encoded as specified in ANNEX 1 to part 5 of EBU + Tech 32 58 -E (1991). */ typedef enum { CDTEXT_LANGUAGE_UNKNOWN = 0x00, @@ -192,11 +201,19 @@ typedef enum { CDTEXT_LANGUAGE_ASSAMESE = 0x7C, CDTEXT_LANGUAGE_ARMENIAN = 0x7D, CDTEXT_LANGUAGE_ARABIC = 0x7E, - CDTEXT_LANGUAGE_AMHARIC = 0x7F + CDTEXT_LANGUAGE_AMHARIC = 0x7F, + + /* libcdio-internal pseudo codes: */ + + CDTEXT_LANGUAGE_INVALID = 0x100, /**< Invalid language code */ + CDTEXT_LANGUAGE_BLOCK_UNUSED = 0x101 /**< Language code should be ignored */ + } cdtext_lang_t; /*! - Opaque type for CD-Text. + \typedef struct cdtext_s cdtext_t + + \brief Opaque type for CD-Text. */ typedef struct cdtext_s cdtext_t; @@ -211,14 +228,26 @@ const char *cdtext_genre2str (cdtext_genre_t i); const char *cdtext_lang2str (cdtext_lang_t i); /*! + Return the language code of a given language string representation. + This is the inverse of cdtext_lang2str(). + + @param lang language to look up + + @return if lang is among the possible results of cdtext_lang2str(): + the cdtext_lang_t which is associated. + else: CDTEXT_LANGUAGE_INVALID +*/ +cdtext_lang_t cdtext_str2lang (const char *lang); + +/*! Return string representation of given field type. */ const char *cdtext_field2str (cdtext_field_t i); -/*! +/*! Initialize a new cdtext structure. - When the structure is no longer needed, release the + When the structure is no longer needed, release the resources using cdtext_delete. */ cdtext_t *cdtext_init (void); @@ -231,13 +260,13 @@ cdtext_t *cdtext_init (void); @param i_data size of wdata @returns 0 on success, non-zero on failure -*/ +*/ int cdtext_data_init(cdtext_t *p_cdtext, uint8_t *wdata, size_t i_data); /*! Free memory associated with the given cdtext_t object. - @param p_cdtext the CD-TEXT object + @param p_cdtext the CD-TEXT object */ void cdtext_destroy (cdtext_t *p_cdtext); @@ -259,7 +288,7 @@ char *cdtext_get (const cdtext_t *p_cdtext, cdtext_field_t key, track_t track); @param field type of the field to return @param track specifies the track, 0 stands for disc */ -const char *cdtext_get_const (const cdtext_t *p_cdtext, cdtext_field_t field, +const char *cdtext_get_const (const cdtext_t *p_cdtext, cdtext_field_t field, track_t track); /*! @@ -300,20 +329,66 @@ track_t cdtext_get_last_track(const cdtext_t *p_cdtext); */ bool cdtext_select_language(cdtext_t *p_cdtext, cdtext_lang_t language); -/* +/*! + + @deprecated Use cdtext_list_languages_v2() + Returns a list of available languages or NULL. + __WARNING__: The indices in the returned array _do not_ match the indexing + as expected by cdtext_set_language_index(). + Use cdtext_select_language() with the values of array elements. + Internally the list is stored in a static array. @param p_cdtext the CD-TEXT object + @return NULL if p_cdtext is NULL, or an array of 8 cdtext_lang_t elements: + CDTEXT_LANGUAGE_UNKNOWN not only marks language code 0x00 + but also invalid language codes and invalid language blocks. */ cdtext_lang_t *cdtext_list_languages (const cdtext_t *p_cdtext); -/*! +/*! + Returns an array of available languages or NULL. + The index of an array element may be used to select the corresponding + language block by call cdtext_set_language_index(). + + The return value is a pointer into the memory range of *p_cdtext. + Do not use it after having freed that memory range. + + @param p_cdtext the CD-TEXT object + @return NULL if p_cdtext is NULL, or an array of 8 cdtext_lang_t elements. + + If an enumeration is CDTEXT_LANGUAGE_INVALID, then the language block has an invalid + language code. + + If an enumeration is CDTEXT_LANGUAGE_BLOCK_UNUSED, then the block does not + exist on CD or could not be read in CD-TEXT for some reason. + + Otherwise, the enumeration of element will be a value in + CDTEXT_LANGUAGE_UNKNOWN to CDTEXT_LANGUAGE_AMHARIC, and is a block + in that language. +*/ +cdtext_lang_t *cdtext_list_languages_v2(cdtext_t *p_cdtext); + +/*! + Select the given language by block index. See cdtext_list_languages_v2(). + If the index is bad, or no language block with that index was read: + select the default language at index 0 and return false. + + @param p_cdtext the CD-TEXT object + @param idx the desired index: 0 to 7. + + @return true on success, false if no language block is associated to idx +*/ +bool +cdtext_set_language_index(cdtext_t *p_cdtext, int idx); + +/*! Sets the given field at the given track to the given value. - + Recodes to UTF-8 if charset is not NULL. - + @param p_cdtext the CD-TEXT object @param key field to set @param value value to set @@ -328,7 +403,7 @@ void cdtext_set (cdtext_t *p_cdtext, cdtext_field_t key, const uint8_t *value, t #endif /* CDIO_CDTEXT_H_ */ -/* +/* * Local variables: * c-file-style: "gnu" * tab-width: 8 diff --git a/lib/driver/cdtext.c b/lib/driver/cdtext.c index b944d54..868cef5 100644 --- a/lib/driver/cdtext.c +++ b/lib/driver/cdtext.c @@ -1,4 +1,5 @@ /* + Copyright (C) 2018 Thomas Schmitt Copyright (C) 2004-2005, 2008, 2011, 2012, 2013 Rocky Bernstein <rocky@gnu.org> toc reading routine adapted from cuetools Copyright (C) 2003 Svend Sanjay Sorensen <ssorensen@fastmail.fm> @@ -85,7 +86,7 @@ const char *cdtext_genre[MAX_CDTEXT_GENRE_CODE] = "World Music" }; -const char *cdtext_language[MAX_CDTEXT_LANGUAGE_CODE] = +const char *cdtext_language[MAX_CDTEXT_LANGUAGE_CODE + 1] = { "Unknown", "Albanian", @@ -131,6 +132,9 @@ const char *cdtext_language[MAX_CDTEXT_LANGUAGE_CODE] = "Turkish", "Flemish", "Wallon", + "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "Zulu", "Vietnamese", "Uzbek", @@ -149,7 +153,6 @@ const char *cdtext_language[MAX_CDTEXT_LANGUAGE_CODE] = "Serbo-croat", "Ruthenian", "Russian", - "Russian", "Quechua", "Pushtu", "Punjabi", @@ -223,10 +226,11 @@ cdtext_genre2str(cdtext_genre_t i) const char * cdtext_lang2str(cdtext_lang_t i) { - if (i >= MAX_CDTEXT_LANGUAGE_CODE) - return "INVALID"; - else + if (i <= CDTEXT_LANGUAGE_WALLON) return cdtext_language[i]; + else if (i >= CDTEXT_LANGUAGE_ZULU && i <= CDTEXT_LANGUAGE_AMHARIC) + return cdtext_language[i]; + return "INVALID"; } /*! @@ -314,7 +318,7 @@ cdtext_lang_t cdtext_get_language(const cdtext_t *p_cdtext) { if (NULL == p_cdtext) - return CDTEXT_LANGUAGE_UNKNOWN; + return CDTEXT_LANGUAGE_BLOCK_UNUSED; return p_cdtext->block[p_cdtext->block_i].language_code; } @@ -344,12 +348,22 @@ cdtext_get_last_track(const cdtext_t *p_cdtext) return p_cdtext->block[p_cdtext->block_i].last_track; } -/* +/*! + @deprecated Use cdtext_list_languages_v2() + Returns a list of available languages or NULL. + __WARNING__: The indices in the returned array _do not_ match the indexing + as expected by cdtext_set_language_index(). + Use cdtext_select_language with the values of array elements. + Internally the list is stored in a static array. @param p_cdtext the CD-TEXT object + @return NULL if p_cdtext is NULL. + Else an array of 8 cdtext_lang_t elements: + CDTEXT_LANGUAGE_UNKNOWN not only marks language code 0x00 + but also invalid language codes and invalid language blocks. */ cdtext_lang_t *cdtext_list_languages(const cdtext_t *p_cdtext) @@ -363,7 +377,9 @@ cdtext_lang_t for (i=0; i<CDTEXT_NUM_BLOCKS_MAX; i++) { avail[i] = CDTEXT_LANGUAGE_UNKNOWN; - if (CDTEXT_LANGUAGE_UNKNOWN != p_cdtext->block[i].language_code) + if (CDTEXT_LANGUAGE_UNKNOWN != p_cdtext->block[i].language_code && + CDTEXT_LANGUAGE_INVALID != p_cdtext->block[i].language_code && + CDTEXT_LANGUAGE_BLOCK_UNUSED != p_cdtext->block[i].language_code) avail[j++] = p_cdtext->block[i].language_code; } @@ -371,6 +387,65 @@ cdtext_lang_t } /*! + Returns an array of available languages or NULL. + The index of an array element may be used to select the corresponding + language block by call cdtext_set_language_index(). + + The return value is a pointer into the memory range of *p_cdtext. + Do not use it after having freed that memory range. + + @param p_cdtext the CD-TEXT object + @return NULL if p_cdtext is NULL, or an array of 8 cdtext_lang_t elements. + + If an enumeration is CDTEXT_LANGUAGE_INVALID, then the language block has an invalid + language code. + + If an enumeration is CDTEXT_LANGUAGE_BLOCK_UNUSED, then the block does not + exist on CD or could not be read in CD-TEXT for some reason. + + Otherwise, the enumeration of element will be a value in + CDTEXT_LANGUAGE_UNKNOWN to CDTEXT_LANGUAGE_AMHARIC, and is a block + in that language. +*/ +cdtext_lang_t +*cdtext_list_languages_v2(cdtext_t *p_cdtext) +{ + int i; + + if (NULL == p_cdtext) + return NULL; + for (i = 0; i < CDTEXT_NUM_BLOCKS_MAX; i++) + { + p_cdtext->languages[i] = p_cdtext->block[i].language_code; + } + return p_cdtext->languages; +} + +/*! + Select the given language by block index. See cdtext_list_languages_v2(). + If the index is bad, or no language block with that index was read: + select the default language at index 0 and return false. + + @param p_cdtext the CD-TEXT object + @param idx the desired index: 0 to 7. + + @return true on success, false if no language block is associated to idx +*/ +bool +cdtext_set_language_index(cdtext_t *p_cdtext, int idx) +{ + if (NULL == p_cdtext) + return false; + p_cdtext->block_i = 0; + if (idx < 0 || idx > 7) + return false; + if (p_cdtext->block[idx].language_code == CDTEXT_LANGUAGE_BLOCK_UNUSED) + return false; + p_cdtext->block_i = idx; + return true; +} + +/*! Try to select the given language. Select default language if specified is not available or invalid and return false. @@ -386,7 +461,7 @@ cdtext_select_language(cdtext_t *p_cdtext, cdtext_lang_t language) if(NULL == p_cdtext) return false; - if (CDTEXT_LANGUAGE_UNKNOWN != language) + if (CDTEXT_LANGUAGE_BLOCK_UNUSED != language) { int i; for (i=0; i<CDTEXT_NUM_BLOCKS_MAX; i++) { @@ -395,9 +470,8 @@ cdtext_select_language(cdtext_t *p_cdtext, cdtext_lang_t language) return true; } } - } else { - p_cdtext->block_i = 0; } + p_cdtext->block_i = 0; return false; } @@ -425,7 +499,7 @@ cdtext_t } } p_cdtext->block[i].genre_code = CDTEXT_GENRE_UNUSED; - p_cdtext->block[i].language_code = CDTEXT_LANGUAGE_UNKNOWN; + p_cdtext->block[i].language_code = CDTEXT_LANGUAGE_BLOCK_UNUSED; } p_cdtext->block_i = 0; @@ -455,24 +529,28 @@ cdtext_is_field (const char *key) } /*! - Returns associated cdtext_lang_t if argument is a supported language. + Return the language code of a given language string representation. + This is the inverse of cdtext_lang2str(). - Internal function. + @param lang language to look up - @param lang language to test - - @return CDTEXT_LANGUAGE_UNKNOWN if language is not supported + @return if lang is among the possible results of cdtext_lang2str(): + the cdtext_lang_t which is associated. + else: CDTEXT_LANGUAGE_INVALID */ cdtext_lang_t -cdtext_is_language(const char *lang) +cdtext_str2lang (const char *lang) { unsigned int i; - for (i = 0; i < MAX_CDTEXT_LANGUAGE_CODE; i++) + if(0 == lang[0]) /* The empty texts in cdtext_language[] are invalid */ + return CDTEXT_LANGUAGE_INVALID; + + for (i = 0; i <= MAX_CDTEXT_LANGUAGE_CODE; i++) if (0 == strcmp(cdtext_language[i], lang)) { return i; } - return CDTEXT_LANGUAGE_UNKNOWN; + return CDTEXT_LANGUAGE_INVALID; } /*! @@ -619,13 +697,18 @@ cdtext_data_init(cdtext_t *p_cdtext, uint8_t *wdata, size_t i_data) } if(blocksize.i_packs[15] == 3) { + cdtext_lang_t lcode; /* if there were 3 BLOCKSIZE packs */ /* set copyright */ p_cdtext->block[i_block].copyright = (0x03 == (blocksize.copyright & 0x03)); /* set Language */ - if(blocksize.langcode[i_block] <= 0x7f) - p_cdtext->block[i_block].language_code = blocksize.langcode[i_block]; + lcode = blocksize.langcode[i_block]; + if(lcode <= CDTEXT_LANGUAGE_WALLON || + (lcode >= CDTEXT_LANGUAGE_ZULU && lcode <= CDTEXT_LANGUAGE_AMHARIC) ) + p_cdtext->block[i_block].language_code = lcode; + else + p_cdtext->block[i_block].language_code = CDTEXT_LANGUAGE_INVALID; /* determine encoding */ switch (blocksize.charcode){ diff --git a/lib/driver/cdtext_private.h b/lib/driver/cdtext_private.h index ce2b48d..83cb0db 100644 --- a/lib/driver/cdtext_private.h +++ b/lib/driver/cdtext_private.h @@ -126,6 +126,7 @@ struct cdtext_block_s { */ struct cdtext_s { struct cdtext_block_s block[CDTEXT_NUM_BLOCKS_MAX]; /**< CD-TEXT for block 0..7 */ + cdtext_lang_t languages[CDTEXT_NUM_BLOCKS_MAX]; /**< return value of cdtext_list_languages_v2() */ uint8_t block_i; /**< index of active block */ }; @@ -137,13 +138,6 @@ int cdtext_read_pack (cdtext_pack_t *pack, const uint8_t *data); */ cdtext_field_t cdtext_is_field (const char *field); -/*! - returns enum of language if lang is a valid language, - returns CDTEXT_LANGUAGE_UNKNOWN otherwise. -*/ -cdtext_lang_t cdtext_is_language (const char *lang); - - #endif /* CDIO_DRIVER_CDTEXT_PRIVATE_H_ */ /* diff --git a/lib/driver/libcdio.sym b/lib/driver/libcdio.sym index c512165..9143ccf 100644 --- a/lib/driver/libcdio.sym +++ b/lib/driver/libcdio.sym @@ -185,6 +185,7 @@ cdtext_destroy cdtext_field2str cdtext_genre2str cdtext_lang2str +cdtext_str2lang cdtext_get cdtext_get_const cdtext_get_genre @@ -194,8 +195,10 @@ cdtext_get_last_track cdtext_init cdtext_data_init cdtext_list_languages +cdtext_list_languages_v2 cdtext_set cdtext_select_language +cdtext_set_language_index debug_cdio_mmc_feature debug_cdio_mmc_feature_interface debug_cdio_mmc_feature_profile diff --git a/src/cd-info.c b/src/cd-info.c index 002f0f9..230a6e4 100644 --- a/src/cd-info.c +++ b/src/cd-info.c @@ -450,10 +450,11 @@ print_cdtext_info(CdIo_t *p_cdio, track_t i_tracks, track_t i_first_track) { return; } - languages = cdtext_list_languages(p_cdtext); + languages = cdtext_list_languages_v2(p_cdtext); + /* The API promises that non-NULL p_cdtext yields non-NULL languages */ for(i=0; i<8; i++) - if ( CDTEXT_LANGUAGE_UNKNOWN != languages[i] - && cdtext_select_language(p_cdtext, languages[i])) + if ( CDTEXT_LANGUAGE_BLOCK_UNUSED != languages[i] + && cdtext_set_language_index(p_cdtext, i)) { printf("\nLanguage %d '%s':\n", i, cdtext_lang2str(languages[i])); diff --git a/test/copying.iso b/test/copying.iso Binary files differnew file mode 100644 index 0000000..5e57cd0 --- /dev/null +++ b/test/copying.iso diff --git a/test/driver/abs_path.dSYM/Contents/Info.plist b/test/driver/abs_path.dSYM/Contents/Info.plist new file mode 100644 index 0000000..c69d296 --- /dev/null +++ b/test/driver/abs_path.dSYM/Contents/Info.plist @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> + <dict> + <key>CFBundleDevelopmentRegion</key> + <string>English</string> + <key>CFBundleIdentifier</key> + <string>com.apple.xcode.dsym.abs_path</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundlePackageType</key> + <string>dSYM</string> + <key>CFBundleSignature</key> + <string>????</string> + <key>CFBundleShortVersionString</key> + <string>1.0</string> + <key>CFBundleVersion</key> + <string>1</string> + </dict> +</plist> diff --git a/test/driver/abs_path.dSYM/Contents/Resources/DWARF/abs_path b/test/driver/abs_path.dSYM/Contents/Resources/DWARF/abs_path Binary files differnew file mode 100644 index 0000000..214bfd8 --- /dev/null +++ b/test/driver/abs_path.dSYM/Contents/Resources/DWARF/abs_path diff --git a/test/driver/gdb.core b/test/driver/gdb.core Binary files differnew file mode 100644 index 0000000..966618a --- /dev/null +++ b/test/driver/gdb.core diff --git a/test/driver/mmc_read.core b/test/driver/mmc_read.core Binary files differnew file mode 100644 index 0000000..80c4dd0 --- /dev/null +++ b/test/driver/mmc_read.core diff --git a/test/iso-info.core b/test/iso-info.core Binary files differnew file mode 100644 index 0000000..79745b1 --- /dev/null +++ b/test/iso-info.core |
