summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorR. Bernstein <rocky@gnu.org>2018-06-13 04:24:28 -0400
committerR. Bernstein <rocky@gnu.org>2018-06-13 04:24:28 -0400
commit16ff26506eedd748598f2beed4aa9825d04c1c9f (patch)
tree161c1463b658627beea5c0d87414d815cb44e13b
parent81d5c7bc6c162c17362d954e86de8971605d52ef (diff)
parentce2a26f2fcfc860c99b0ec75f0873d09e1230b64 (diff)
downloadlibcdio-16ff26506eedd748598f2beed4aa9825d04c1c9f.tar.gz
Merge branch 'cdtext-list-languages'
-rw-r--r--conf9AaqoM/subs.awk231
-rw-r--r--conf9AaqoM/subs1.awk231
-rw-r--r--config_extract.sh2
-rw-r--r--example/C++/OO/cdtext.cpp5
-rw-r--r--example/cdtext-raw.c63
-rw-r--r--example/cdtext.c5
-rwxr-xr-xexample/read-disc-structbin0 -> 506085 bytes
-rw-r--r--example/read-disc-struct.c77
-rwxr-xr-xexample/read-disc-struct.sh4
-rw-r--r--include/cdio++/cdtext.hpp47
-rw-r--r--include/cdio/cdtext.h113
-rw-r--r--lib/driver/cdtext.c127
-rw-r--r--lib/driver/cdtext_private.h8
-rw-r--r--lib/driver/libcdio.sym3
-rw-r--r--src/cd-info.c7
-rw-r--r--test/copying.isobin0 -> 131072 bytes
-rw-r--r--test/driver/abs_path.dSYM/Contents/Info.plist20
-rw-r--r--test/driver/abs_path.dSYM/Contents/Resources/DWARF/abs_pathbin0 -> 10688 bytes
-rw-r--r--test/driver/gdb.corebin0 -> 21823488 bytes
-rw-r--r--test/driver/mmc_read.corebin0 -> 4726784 bytes
-rw-r--r--test/iso-info.corebin0 -> 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
new file mode 100755
index 0000000..6d598aa
--- /dev/null
+++ b/example/read-disc-struct
Binary files differ
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
new file mode 100644
index 0000000..5e57cd0
--- /dev/null
+++ b/test/copying.iso
Binary files differ
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
new file mode 100644
index 0000000..214bfd8
--- /dev/null
+++ b/test/driver/abs_path.dSYM/Contents/Resources/DWARF/abs_path
Binary files differ
diff --git a/test/driver/gdb.core b/test/driver/gdb.core
new file mode 100644
index 0000000..966618a
--- /dev/null
+++ b/test/driver/gdb.core
Binary files differ
diff --git a/test/driver/mmc_read.core b/test/driver/mmc_read.core
new file mode 100644
index 0000000..80c4dd0
--- /dev/null
+++ b/test/driver/mmc_read.core
Binary files differ
diff --git a/test/iso-info.core b/test/iso-info.core
new file mode 100644
index 0000000..79745b1
--- /dev/null
+++ b/test/iso-info.core
Binary files differ