summaryrefslogtreecommitdiff
path: root/plugins/dfcdrom
diff options
context:
space:
mode:
authorSND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-07-10 06:54:11 +0000
committerSND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-07-10 06:54:11 +0000
commitf7823bc1646f1885bd9a0a19a9645c0e2cb884bd (patch)
tree15f115383205088b3fca3f4c41a319e1da183ac7 /plugins/dfcdrom
parentfcf4fb0933140db08c7bc094abc9edb271c13359 (diff)
I was really stupid... just use libcdio and everything's fine, no need to deal with different OSes at all.
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@54442 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'plugins/dfcdrom')
-rw-r--r--plugins/dfcdrom/Makefile.am10
-rw-r--r--plugins/dfcdrom/Makefile.in268
-rw-r--r--plugins/dfcdrom/cdr-freebsd.c126
-rw-r--r--plugins/dfcdrom/cdr-libcdio.c255
-rw-r--r--plugins/dfcdrom/cdr-linux.c249
-rw-r--r--plugins/dfcdrom/cdr-null.c10
-rw-r--r--plugins/dfcdrom/cdr-solaris.c159
-rw-r--r--plugins/dfcdrom/cdr.c14
-rw-r--r--plugins/dfcdrom/cdr.h79
-rw-r--r--plugins/dfcdrom/cdrcfg-0.1df/main.c2
-rw-r--r--plugins/dfcdrom/cfg.c8
-rw-r--r--plugins/dfcdrom/util.c95
12 files changed, 742 insertions, 533 deletions
diff --git a/plugins/dfcdrom/Makefile.am b/plugins/dfcdrom/Makefile.am
index c205ff15..917ce913 100644
--- a/plugins/dfcdrom/Makefile.am
+++ b/plugins/dfcdrom/Makefile.am
@@ -9,11 +9,17 @@ libDFCdrom_la_SOURCES = \
cfg.c \
cdr-linux.c \
cdr-null.c \
- cdr-freebsd.c \
- cdr-solaris.c
+ cdr-libcdio.c \
+ util.c
+libDFCdrom_la_CFLAGS =
libDFCdrom_la_LDFLAGS = -module -avoid-version -lpthread
+if USE_LIBCDIO
+libDFCdrom_la_CFLAGS += "-DUSE_LIBCDIO=1"
+libDFCdrom_la_LDFLAGS += "-lcdio"
+endif
+
INCLUDES = -DPIXMAPDIR=\"${datadir}/pixmaps/\" \
-DLOCALE_DIR=\"${datadir}/locale/\" \
-DDATADIR=\"${datadir}/psemu/\" \
diff --git a/plugins/dfcdrom/Makefile.in b/plugins/dfcdrom/Makefile.in
index 92fcf1b8..dfce3703 100644
--- a/plugins/dfcdrom/Makefile.in
+++ b/plugins/dfcdrom/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -19,9 +18,8 @@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
@@ -37,6 +35,8 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
+@USE_LIBCDIO_TRUE@am__append_1 = "-DUSE_LIBCDIO=1"
+@USE_LIBCDIO_TRUE@am__append_2 = "-lcdio"
bin_PROGRAMS = cfgDFCdrom$(EXEEXT)
subdir = plugins/dfcdrom
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
@@ -47,38 +47,25 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/include/config.h
CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
- srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
- for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
- for p in $$list; do echo "$$p $$p"; done | \
- sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
- $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
- if (++n[$$2] == $(am__install_max)) \
- { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
- END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
- sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
- sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
"$(DESTDIR)$(gladedir)"
+libLTLIBRARIES_INSTALL = $(INSTALL)
LTLIBRARIES = $(lib_LTLIBRARIES)
libDFCdrom_la_LIBADD =
-am_libDFCdrom_la_OBJECTS = cdr.lo cfg.lo cdr-linux.lo cdr-null.lo \
- cdr-freebsd.lo cdr-solaris.lo
+am_libDFCdrom_la_OBJECTS = libDFCdrom_la-cdr.lo libDFCdrom_la-cfg.lo \
+ libDFCdrom_la-cdr-linux.lo libDFCdrom_la-cdr-null.lo \
+ libDFCdrom_la-cdr-libcdio.lo libDFCdrom_la-util.lo
libDFCdrom_la_OBJECTS = $(am_libDFCdrom_la_OBJECTS)
libDFCdrom_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
- $(libDFCdrom_la_LDFLAGS) $(LDFLAGS) -o $@
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libDFCdrom_la_CFLAGS) \
+ $(CFLAGS) $(libDFCdrom_la_LDFLAGS) $(LDFLAGS) -o $@
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
PROGRAMS = $(bin_PROGRAMS)
am_cfgDFCdrom_OBJECTS = main.$(OBJEXT)
cfgDFCdrom_OBJECTS = $(am_cfgDFCdrom_OBJECTS)
@@ -87,7 +74,6 @@ cfgDFCdrom_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
-am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
@@ -99,6 +85,7 @@ LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
$(LDFLAGS) -o $@
SOURCES = $(libDFCdrom_la_SOURCES) $(cfgDFCdrom_SOURCES)
DIST_SOURCES = $(libDFCdrom_la_SOURCES) $(cfgDFCdrom_SOURCES)
+gladeDATA_INSTALL = $(INSTALL_DATA)
DATA = $(glade_DATA)
ETAGS = etags
CTAGS = ctags
@@ -179,7 +166,6 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PEOPSXGL = @PEOPSXGL@
@@ -263,10 +249,12 @@ libDFCdrom_la_SOURCES = \
cfg.c \
cdr-linux.c \
cdr-null.c \
- cdr-freebsd.c \
- cdr-solaris.c
+ cdr-libcdio.c \
+ util.c
-libDFCdrom_la_LDFLAGS = -module -avoid-version -lpthread
+libDFCdrom_la_CFLAGS = $(am__append_1)
+libDFCdrom_la_LDFLAGS = -module -avoid-version -lpthread \
+ $(am__append_2)
INCLUDES = -DPIXMAPDIR=\"${datadir}/pixmaps/\" \
-DLOCALE_DIR=\"${datadir}/locale/\" \
-DDATADIR=\"${datadir}/psemu/\" \
@@ -291,9 +279,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu plugins/dfcdrom/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu plugins/dfcdrom/Makefile
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu plugins/dfcdrom/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu plugins/dfcdrom/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -311,28 +299,23 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
@$(NORMAL_INSTALL)
test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
- @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
- list2=; for p in $$list; do \
+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
if test -f $$p; then \
- list2="$$list2 $$p"; \
+ f=$(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
else :; fi; \
- done; \
- test -z "$$list2" || { \
- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
- }
+ done
uninstall-libLTLIBRARIES:
@$(NORMAL_UNINSTALL)
- @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
- for p in $$list; do \
- $(am__strip_dir) \
- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ p=$(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
done
clean-libLTLIBRARIES:
@@ -348,46 +331,31 @@ libDFCdrom.la: $(libDFCdrom_la_OBJECTS) $(libDFCdrom_la_DEPENDENCIES)
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
- @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
- for p in $$list; do echo "$$p $$p"; done | \
- sed 's/$(EXEEXT)$$//' | \
- while read p p1; do if test -f $$p || test -f $$p1; \
- then echo "$$p"; echo "$$p"; else :; fi; \
- done | \
- sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
- -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
- sed 'N;N;N;s,\n, ,g' | \
- $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
- { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
- if ($$2 == $$4) files[d] = files[d] " " $$1; \
- else { print "f", $$3 "/" $$4, $$1; } } \
- END { for (d in files) print "f", d, files[d] }' | \
- while read type dir files; do \
- if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
- test -z "$$files" || { \
- echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
- $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
- } \
- ; done
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ if test -f $$p \
+ || test -f $$p1 \
+ ; then \
+ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+ else :; fi; \
+ done
uninstall-binPROGRAMS:
@$(NORMAL_UNINSTALL)
- @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
- files=`for p in $$list; do echo "$$p"; done | \
- sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
- -e 's/$$/$(EXEEXT)/' `; \
- test -n "$$list" || exit 0; \
- echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(bindir)" && rm -f $$files
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+ rm -f "$(DESTDIR)$(bindir)/$$f"; \
+ done
clean-binPROGRAMS:
- @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
- echo " rm -f" $$list; \
- rm -f $$list || exit $$?; \
- test -n "$(EXEEXT)" || exit 0; \
- list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
- echo " rm -f" $$list; \
- rm -f $$list
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f $$p $$f"; \
+ rm -f $$p $$f ; \
+ done
cfgDFCdrom$(EXEEXT): $(cfgDFCdrom_OBJECTS) $(cfgDFCdrom_DEPENDENCIES)
@rm -f cfgDFCdrom$(EXEEXT)
$(LINK) $(cfgDFCdrom_OBJECTS) $(cfgDFCdrom_LDADD) $(LIBS)
@@ -398,45 +366,87 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdr-freebsd.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdr-linux.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdr-null.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdr-solaris.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdr.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cfg.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libDFCdrom_la-cdr-libcdio.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libDFCdrom_la-cdr-linux.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libDFCdrom_la-cdr-null.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libDFCdrom_la-cdr.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libDFCdrom_la-cfg.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libDFCdrom_la-util.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+libDFCdrom_la-cdr.lo: cdr.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libDFCdrom_la_CFLAGS) $(CFLAGS) -MT libDFCdrom_la-cdr.lo -MD -MP -MF $(DEPDIR)/libDFCdrom_la-cdr.Tpo -c -o libDFCdrom_la-cdr.lo `test -f 'cdr.c' || echo '$(srcdir)/'`cdr.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libDFCdrom_la-cdr.Tpo $(DEPDIR)/libDFCdrom_la-cdr.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cdr.c' object='libDFCdrom_la-cdr.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libDFCdrom_la_CFLAGS) $(CFLAGS) -c -o libDFCdrom_la-cdr.lo `test -f 'cdr.c' || echo '$(srcdir)/'`cdr.c
+
+libDFCdrom_la-cfg.lo: cfg.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libDFCdrom_la_CFLAGS) $(CFLAGS) -MT libDFCdrom_la-cfg.lo -MD -MP -MF $(DEPDIR)/libDFCdrom_la-cfg.Tpo -c -o libDFCdrom_la-cfg.lo `test -f 'cfg.c' || echo '$(srcdir)/'`cfg.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libDFCdrom_la-cfg.Tpo $(DEPDIR)/libDFCdrom_la-cfg.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cfg.c' object='libDFCdrom_la-cfg.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libDFCdrom_la_CFLAGS) $(CFLAGS) -c -o libDFCdrom_la-cfg.lo `test -f 'cfg.c' || echo '$(srcdir)/'`cfg.c
+
+libDFCdrom_la-cdr-linux.lo: cdr-linux.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libDFCdrom_la_CFLAGS) $(CFLAGS) -MT libDFCdrom_la-cdr-linux.lo -MD -MP -MF $(DEPDIR)/libDFCdrom_la-cdr-linux.Tpo -c -o libDFCdrom_la-cdr-linux.lo `test -f 'cdr-linux.c' || echo '$(srcdir)/'`cdr-linux.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libDFCdrom_la-cdr-linux.Tpo $(DEPDIR)/libDFCdrom_la-cdr-linux.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cdr-linux.c' object='libDFCdrom_la-cdr-linux.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libDFCdrom_la_CFLAGS) $(CFLAGS) -c -o libDFCdrom_la-cdr-linux.lo `test -f 'cdr-linux.c' || echo '$(srcdir)/'`cdr-linux.c
+
+libDFCdrom_la-cdr-null.lo: cdr-null.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libDFCdrom_la_CFLAGS) $(CFLAGS) -MT libDFCdrom_la-cdr-null.lo -MD -MP -MF $(DEPDIR)/libDFCdrom_la-cdr-null.Tpo -c -o libDFCdrom_la-cdr-null.lo `test -f 'cdr-null.c' || echo '$(srcdir)/'`cdr-null.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libDFCdrom_la-cdr-null.Tpo $(DEPDIR)/libDFCdrom_la-cdr-null.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cdr-null.c' object='libDFCdrom_la-cdr-null.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libDFCdrom_la_CFLAGS) $(CFLAGS) -c -o libDFCdrom_la-cdr-null.lo `test -f 'cdr-null.c' || echo '$(srcdir)/'`cdr-null.c
+
+libDFCdrom_la-cdr-libcdio.lo: cdr-libcdio.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libDFCdrom_la_CFLAGS) $(CFLAGS) -MT libDFCdrom_la-cdr-libcdio.lo -MD -MP -MF $(DEPDIR)/libDFCdrom_la-cdr-libcdio.Tpo -c -o libDFCdrom_la-cdr-libcdio.lo `test -f 'cdr-libcdio.c' || echo '$(srcdir)/'`cdr-libcdio.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libDFCdrom_la-cdr-libcdio.Tpo $(DEPDIR)/libDFCdrom_la-cdr-libcdio.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cdr-libcdio.c' object='libDFCdrom_la-cdr-libcdio.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libDFCdrom_la_CFLAGS) $(CFLAGS) -c -o libDFCdrom_la-cdr-libcdio.lo `test -f 'cdr-libcdio.c' || echo '$(srcdir)/'`cdr-libcdio.c
+
+libDFCdrom_la-util.lo: util.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libDFCdrom_la_CFLAGS) $(CFLAGS) -MT libDFCdrom_la-util.lo -MD -MP -MF $(DEPDIR)/libDFCdrom_la-util.Tpo -c -o libDFCdrom_la-util.lo `test -f 'util.c' || echo '$(srcdir)/'`util.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libDFCdrom_la-util.Tpo $(DEPDIR)/libDFCdrom_la-util.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='util.c' object='libDFCdrom_la-util.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libDFCdrom_la_CFLAGS) $(CFLAGS) -c -o libDFCdrom_la-util.lo `test -f 'util.c' || echo '$(srcdir)/'`util.c
+
main.o: cdrcfg-0.1df/main.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT main.o -MD -MP -MF $(DEPDIR)/main.Tpo -c -o main.o `test -f 'cdrcfg-0.1df/main.c' || echo '$(srcdir)/'`cdrcfg-0.1df/main.c
-@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/main.Tpo $(DEPDIR)/main.Po
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/main.Tpo $(DEPDIR)/main.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cdrcfg-0.1df/main.c' object='main.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o main.o `test -f 'cdrcfg-0.1df/main.c' || echo '$(srcdir)/'`cdrcfg-0.1df/main.c
main.obj: cdrcfg-0.1df/main.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT main.obj -MD -MP -MF $(DEPDIR)/main.Tpo -c -o main.obj `if test -f 'cdrcfg-0.1df/main.c'; then $(CYGPATH_W) 'cdrcfg-0.1df/main.c'; else $(CYGPATH_W) '$(srcdir)/cdrcfg-0.1df/main.c'; fi`
-@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/main.Tpo $(DEPDIR)/main.Po
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/main.Tpo $(DEPDIR)/main.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cdrcfg-0.1df/main.c' object='main.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o main.obj `if test -f 'cdrcfg-0.1df/main.c'; then $(CYGPATH_W) 'cdrcfg-0.1df/main.c'; else $(CYGPATH_W) '$(srcdir)/cdrcfg-0.1df/main.c'; fi`
@@ -449,23 +459,20 @@ clean-libtool:
install-gladeDATA: $(glade_DATA)
@$(NORMAL_INSTALL)
test -z "$(gladedir)" || $(MKDIR_P) "$(DESTDIR)$(gladedir)"
- @list='$(glade_DATA)'; test -n "$(gladedir)" || list=; \
- for p in $$list; do \
+ @list='$(glade_DATA)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(gladedir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(gladedir)" || exit $$?; \
+ f=$(am__strip_dir) \
+ echo " $(gladeDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(gladedir)/$$f'"; \
+ $(gladeDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(gladedir)/$$f"; \
done
uninstall-gladeDATA:
@$(NORMAL_UNINSTALL)
- @list='$(glade_DATA)'; test -n "$(gladedir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(gladedir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(gladedir)" && rm -f $$files
+ @list='$(glade_DATA)'; for p in $$list; do \
+ f=$(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(gladedir)/$$f'"; \
+ rm -f "$(DESTDIR)$(gladedir)/$$f"; \
+ done
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
@@ -479,7 +486,7 @@ tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
- set x; \
+ tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
@@ -487,34 +494,29 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
- shift; \
- if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
- if test $$# -gt 0; then \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- "$$@" $$unique; \
- else \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$unique; \
- fi; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
+ tags=; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
- test -z "$(CTAGS_ARGS)$$unique" \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$unique
+ $$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
- && $(am__cd) $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) "$$here"
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@@ -535,17 +537,13 @@ distdir: $(DISTFILES)
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
@@ -578,7 +576,6 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@@ -600,8 +597,6 @@ dvi-am:
html: html-am
-html-am:
-
info: info-am
info-am:
@@ -610,28 +605,18 @@ install-data-am: install-gladeDATA
install-dvi: install-dvi-am
-install-dvi-am:
-
install-exec-am: install-binPROGRAMS install-libLTLIBRARIES
install-html: install-html-am
-install-html-am:
-
install-info: install-info-am
-install-info-am:
-
install-man:
install-pdf: install-pdf-am
-install-pdf-am:
-
install-ps: install-ps-am
-install-ps-am:
-
installcheck-am:
maintainer-clean: maintainer-clean-am
@@ -673,7 +658,6 @@ uninstall-am: uninstall-binPROGRAMS uninstall-gladeDATA \
tags uninstall uninstall-am uninstall-binPROGRAMS \
uninstall-gladeDATA uninstall-libLTLIBRARIES
-
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/plugins/dfcdrom/cdr-freebsd.c b/plugins/dfcdrom/cdr-freebsd.c
deleted file mode 100644
index 41c608b3..00000000
--- a/plugins/dfcdrom/cdr-freebsd.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (c) 2010, Wei Mingzhi <whistler@openoffice.org>.
- * All Rights Reserved.
- *
- * Based on: Cdrom for Psemu Pro like Emulators
- * By: linuzappz <linuzappz@hotmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses>.
- */
-
-#include "cdr.h"
-
-#ifdef __FreeBSD__
-
-char *LibName = N_("CD-ROM Drive Reader");
-
-static int handle = -1;
-
-int OpenCdHandle(const char *dev) {
- int parameter;
- char spindown;
-
- handle = open(dev, O_RDONLY);
-
- if (handle != -1) {
- if (SpinDown != SPINDOWN_VENDOR_SPECIFIC) {
- if (SpinDown > SPINDOWN_1S) {
- parameter = (1 << (SpinDown - SPINDOWN_1S));
- } else {
- parameter = 1;
- }
-
- ioctl(handle, IOCATASSPINDOWN, &parameter);
-
- parameter = CdrSpeed * 177;
- if (parameter == 0) parameter = CDR_MAX_SPEED;
-
- ioctl(handle, CDRIOCREADSPEED, &parameter);
- }
- }
-
- return (h == -1) ? -1 : 0;
-}
-
-void CloseCdHandle() {
- int parameter;
-
- parameter = 0;
- ioctl(handle, IOCATASSPINDOWN, &parameter);
-
- parameter = CDR_MAX_SPEED;
- ioctl(handle, CDRIOCREADSPEED, &parameter);
-
- close(handle);
-
- handle = -1;
-}
-
-int IsCdHandleOpen () {
- return (handle != -1);
-}
-
-long GetTN(unsigned char *buffer) {
- buffer[0] = 0;
- buffer[1] = 0;
- return 0;
-}
-
-long GetTD(unsigned char track, unsigned char *buffer) {
- memset(buffer + 1, 0, 3);
- return 0;
-}
-
-long GetTE(unsigned char track, unsigned char *m, unsigned char *s, unsigned char *f) {
- return -1;
-}
-
-long ReadSector(crdata *cr) {
- unsigned int lba = msf_to_lba(cr->msf.cdmsf_min0, cr->msf.cdmsf_sec0,
- cr->msf.cdmsf_frame0);
-
- int bsize = CD_FRAMESIZE_RAW;
-
- if (ioctl(handle, CDRIOCSETBLOCKSIZE, &bsize) == -1) {
- return -1;
- }
-
- if (lseek(handle, lba * CD_FRAMESIZE_RAW, SEEK_SET) == -1) {
- return -1;
- }
-
- if (read(handle, (void *)cr->buf, CD_FRAMESIZE_RAW) == -1) {
- return -1;
- }
-
- return 0;
-}
-
-long PlayCDDA(unsigned char *sector) {
- return -1;
-}
-
-long StopCDDA() {
- return -1;
-}
-
-long GetStatus(int playing, struct CdrStat *stat) {
- return -1;
-}
-
-unsigned char *ReadSub(const unsigned char *time) {
- return NULL;
-}
-
-#endif
diff --git a/plugins/dfcdrom/cdr-libcdio.c b/plugins/dfcdrom/cdr-libcdio.c
new file mode 100644
index 00000000..a319bfd1
--- /dev/null
+++ b/plugins/dfcdrom/cdr-libcdio.c
@@ -0,0 +1,255 @@
+/*
+ * Copyright (c) 2010, Wei Mingzhi <whistler@openoffice.org>.
+ * All Rights Reserved.
+ *
+ * Based on: Cdrom for Psemu Pro like Emulators
+ * By: linuzappz <linuzappz@hotmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses>.
+ */
+
+#ifdef USE_LIBCDIO
+
+#include "cdr.h"
+
+#include <cdio/cdio.h>
+#include <cdio/mmc.h>
+
+char *LibName = N_("CD-ROM Drive Reader");
+
+static CdIo_t *cdHandle = NULL;
+
+static void SetSpeed(int speed) {
+ speed *= 176;
+ if (speed == 0) speed = 0xFFFF;
+
+ cdio_set_speed(cdHandle, speed);
+}
+
+static void SetSpinDown(unsigned char spindown) {
+ mmc_cdb_t cdb;
+ char buf[16];
+
+ memset(&cdb, 0, sizeof(cdb));
+
+ cdb.field[0] = 0x5A;
+ cdb.field[2] = 0x0D;
+ cdb.field[8] = sizeof(buf);
+
+ if (mmc_run_cmd(cdHandle, 10000, &cdb, SCSI_MMC_DATA_READ, sizeof(buf), buf) != DRIVER_OP_SUCCESS)
+ return;
+
+ buf[11] = (buf[11] & 0xF0) | (spindown & 0x0F);
+
+ memset(&cdb, 0, sizeof(cdb));
+ memset(buf, 0, 2);
+
+ cdb.field[0] = 0x55;
+ cdb.field[1] = 0x10;
+ cdb.field[8] = sizeof(buf);
+
+ mmc_run_cmd(cdHandle, 10000, &cdb, SCSI_MMC_DATA_WRITE, sizeof(buf), buf);
+}
+
+static void UnlockDoor() {
+ mmc_cdb_t cdb;
+
+ memset(&cdb, 0, sizeof(cdb));
+
+ cdb.field[0] = 0x1E;
+ cdb.field[4] = 0;
+
+ mmc_run_cmd(cdHandle, 10000, &cdb, SCSI_MMC_DATA_WRITE, 0, NULL);
+}
+
+int OpenCdHandle(const char *dev) {
+ if (dev == NULL || dev[0] == '\0') {
+ if ((dev = cdio_get_default_device(NULL)) == NULL) {
+ return -1;
+ }
+ }
+
+ cdHandle = cdio_open_cd(dev);
+
+ if (cdHandle != NULL) {
+ SetSpeed(CdrSpeed);
+ SetSpinDown(SpinDown);
+ UnlockDoor();
+
+ return 0;
+ }
+
+ return -1;
+}
+
+void CloseCdHandle() {
+ if (cdHandle != NULL) {
+ cdio_set_speed(cdHandle, 0xFFFF);
+ SetSpinDown(SPINDOWN_VENDOR_SPECIFIC);
+
+ cdio_destroy(cdHandle);
+ }
+
+ cdHandle = NULL;
+}
+
+int IsCdHandleOpen() {
+ return (cdHandle != NULL);
+}
+
+long GetTN(unsigned char *buffer) {
+ buffer[0] = cdio_get_first_track_num(cdHandle);
+ buffer[1] = cdio_get_last_track_num(cdHandle);
+
+ return 0;
+}
+
+long GetTD(unsigned char track, unsigned char *buffer) {
+ msf_t msf;
+
+ if (track == 0) track = CDIO_CDROM_LEADOUT_TRACK;
+
+ if (!cdio_get_track_msf(cdHandle, track, &msf)) {
+ memset(buffer + 1, 0, 3);
+ return 0;
+ }
+
+ buffer[0] = btoi(msf.f);
+ buffer[1] = btoi(msf.s);
+ buffer[2] = btoi(msf.m);
+
+ return 0;
+}
+
+long GetTE(unsigned char track, unsigned char *m, unsigned char *s, unsigned char *f) {
+ unsigned char msf[3];
+
+ lba_to_msf(cdio_get_track_lba(cdHandle, track + 1) - CD_MSF_OFFSET, msf);
+
+ *m = msf[0];
+ *s = msf[1];
+ *f = msf[2];
+
+ return 0;
+}
+
+long ReadSector(crdata *cr) {
+ int lba;
+ MMC_READ_CD cdb;
+
+ lba = msf_to_lba(cr->msf.cdmsf_min0, cr->msf.cdmsf_sec0, cr->msf.cdmsf_frame0);
+ memset(&cdb, 0, sizeof(cdb));
+
+ cdb.Code = 0xBE;
+ cdb.IncludeEDC = 1;
+ cdb.IncludeUserData = 1;
+ cdb.HeaderCode = 3;
+ cdb.IncludeSyncData = 1;
+ cdb.SubChannelSelection = 0;
+ cdb.StartingLBA[1] = lba >> 16;
+ cdb.StartingLBA[2] = lba >> 8;
+ cdb.StartingLBA[3] = lba;
+ cdb.TransferBlocks[2] = 1;
+
+ if (mmc_run_cmd(cdHandle, 10000, (mmc_cdb_t *)&cdb, SCSI_MMC_DATA_READ, sizeof(*cr), cr) != DRIVER_OP_SUCCESS)
+ return -1;
+
+ return 0;
+}
+
+long PlayCDDA(unsigned char *sector) {
+ msf_t start, end;
+
+ if (!cdio_get_track_msf(cdHandle, CDIO_CDROM_LEADOUT_TRACK, &end))
+ return -1;
+
+ start.m = itob(sector[0]);
+ start.s = itob(sector[1]);
+ start.f = itob(sector[2]);
+
+ if (cdio_audio_play_msf(cdHandle, &start, &end) != DRIVER_OP_SUCCESS)
+ return -1;
+
+ return 0;
+}
+
+long StopCDDA() {
+ cdio_subchannel_t subchnl;
+
+ if (cdio_audio_read_subchannel(cdHandle, &subchnl) != DRIVER_OP_SUCCESS)
+ return -1;
+
+ switch (subchnl.audio_status) {
+ case CDIO_MMC_READ_SUB_ST_PLAY:
+ case CDIO_MMC_READ_SUB_ST_PAUSED:
+ cdio_audio_stop(cdHandle);
+ }
+
+ return 0;
+}
+
+long GetStatus(int playing, struct CdrStat *stat) {
+ cdio_subchannel_t subchnl;
+
+ memset(stat, 0, sizeof(struct CdrStat));
+
+ if (playing) {
+ if (cdio_audio_read_subchannel(cdHandle, &subchnl) == DRIVER_OP_SUCCESS) {
+ stat->Time[0] = btoi(subchnl.abs_addr.m);
+ stat->Time[1] = btoi(subchnl.abs_addr.s);
+ stat->Time[2] = btoi(subchnl.abs_addr.f);
+ }
+ }
+
+ stat->Type = 0x01;
+
+ if (mmc_get_tray_status(cdHandle)) {
+ stat->Type = 0xff;
+ stat->Status |= 0x10;
+ } else {
+ SetSpeed(CdrSpeed);
+ SetSpinDown(SpinDown);
+ UnlockDoor();
+ }
+
+ return 0;
+}
+
+unsigned char *ReadSub(const unsigned char *time) {
+ int lba = msf_to_lba(btoi(time[0]), btoi(time[1]), btoi(time[2]));
+ static unsigned char buf[CD_FRAMESIZE_RAW + 96];
+
+ MMC_READ_CD cdb;
+
+ memset(&cdb, 0, sizeof(cdb));
+
+ cdb.Code = 0xBE;
+ cdb.IncludeEDC = 1;
+ cdb.IncludeUserData = 1;
+ cdb.HeaderCode = 3;
+ cdb.IncludeSyncData = 1;
+ cdb.StartingLBA[1] = lba >> 16;
+ cdb.StartingLBA[2] = lba >> 8;
+ cdb.StartingLBA[3] = lba;
+ cdb.TransferBlocks[2] = 1;
+ cdb.SubChannelSelection = 1;
+
+ if (mmc_run_cmd(cdHandle, 10000, (mmc_cdb_t *)&cdb, SCSI_MMC_DATA_READ, sizeof(buf), buf) != DRIVER_OP_SUCCESS)
+ return NULL;
+
+ DecodeRawSubData(buf + CD_FRAMESIZE_RAW);
+ return buf + CD_FRAMESIZE_RAW;
+}
+
+#endif
diff --git a/plugins/dfcdrom/cdr-linux.c b/plugins/dfcdrom/cdr-linux.c
index 3d15c4d2..2c598076 100644
--- a/plugins/dfcdrom/cdr-linux.c
+++ b/plugins/dfcdrom/cdr-linux.c
@@ -5,6 +5,9 @@
* Based on: Cdrom for Psemu Pro like Emulators
* By: linuzappz <linuzappz@hotmail.com>
*
+ * Portions based on: cdrdao - write audio CD-Rs in disc-at-once mode
+ * Copyright (C) 2007 Denis Leroy <denis@poolshark.org>
+ *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
@@ -19,49 +22,135 @@
* along with this program; if not, see <http://www.gnu.org/licenses>.
*/
-#include "cdr.h"
+#if defined (__linux__) && !defined (USE_LIBCDIO)
-#ifdef __linux__
+#include "cdr.h"
char *LibName = N_("CD-ROM Drive Reader");
-static int handle = -1;
+static int cdHandle = -1;
+static int ReadMMC = 0, SubQMMC = 0;
+
+static int SendMMCCmd(const unsigned char *cmd, int cmdLen, const unsigned char *dataOut,
+ int dataOutLen, unsigned char *dataIn, int dataInLen)
+{
+ sg_io_hdr_t io_hdr;
+
+ memset(&io_hdr, 0, sizeof(io_hdr));
+
+ io_hdr.interface_id = 'S';
+ io_hdr.cmd_len = cmdLen;
+ io_hdr.cmdp = (unsigned char *)cmd;
+ io_hdr.timeout = 10000;
+ io_hdr.sbp = NULL;
+ io_hdr.mx_sb_len = 0;
+ io_hdr.flags = 1;
+
+ if (dataOut != NULL) {
+ io_hdr.dxferp = (void *)dataOut;
+ io_hdr.dxfer_len = dataOutLen;
+ io_hdr.dxfer_direction = SG_DXFER_TO_DEV;
+ } else if (dataIn != NULL) {
+ io_hdr.dxferp = (void *)dataIn;
+ io_hdr.dxfer_len = dataInLen;
+ io_hdr.dxfer_direction = SG_DXFER_FROM_DEV;
+ }
+
+ if (ioctl(cdHandle, SG_IO, &io_hdr) < 0) {
+ return -1;
+ }
+
+ return io_hdr.status;
+}
+
+static int CheckReadMMC() {
+ MMC_READ_CD cdb;
+ unsigned char buf[CD_FRAMESIZE_RAW];
+
+ memset(&cdb, 0, sizeof(cdb));
+ memset(buf, 0xAA, sizeof(buf));
+
+ cdb.Code = GPCMD_READ_CD;
+ cdb.IncludeEDC = 0;
+ cdb.IncludeUserData = 1;
+ cdb.HeaderCode = 3;
+ cdb.IncludeSyncData = 1;
+ cdb.TransferBlocks[2] = 1;
+
+ if (SendMMCCmd((unsigned char *)&cdb, sizeof(cdb), NULL, 0, buf, sizeof(buf)) == 0) {
+ if (buf[0] != 0xAA) {
+ PRINTF("Using MMC for data\n");
+ return 1; // supported
+ }
+ }
+
+ return 0; // NOT supported
+}
+
+static int CheckSubQMMC() {
+ MMC_READ_CD cdb;
+ unsigned char buf[CD_FRAMESIZE_RAW + 96];
+
+ memset(&cdb, 0, sizeof(cdb));
+ memset(buf, 0xAA, sizeof(buf));
+
+ cdb.Code = GPCMD_READ_CD;
+ cdb.IncludeEDC = 1;
+ cdb.IncludeUserData = 1;
+ cdb.HeaderCode = 3;
+ cdb.IncludeSyncData = 1;
+ cdb.SubChannelSelection = 1;
+ cdb.TransferBlocks[2] = 1;
+
+ if (SendMMCCmd((unsigned char *)&cdb, sizeof(cdb), NULL, 0, buf, sizeof(buf)) == 0) {
+ if (buf[0] != 0xAA && (buf[2352] != 0xAA || buf[2353] != 0xAA)) {
+ PRINTF("Using MMC for subchannel\n");
+ return 1; // supported
+ }
+ }
+
+ return 0; // NOT supported
+}
int OpenCdHandle(const char *dev) {
char spindown;
- handle = open(dev, O_RDONLY);
+ cdHandle = open(dev, O_RDONLY);
- if (handle != -1) {
- ioctl(handle, CDROM_LOCKDOOR, 0);
-// ioctl(handle, CDROMSTART, NULL);
+ if (cdHandle != -1) {
+ ioctl(cdHandle, CDROM_LOCKDOOR, 0);
spindown = (char)SpinDown;
- ioctl(handle, CDROMSETSPINDOWN, &spindown);
+ ioctl(cdHandle, CDROMSETSPINDOWN, &spindown);
+
+ ioctl(cdHandle, CDROM_SELECT_SPEED, CdrSpeed);
- ioctl(handle, CDROM_SELECT_SPEED, CdrSpeed);
+ ReadMMC = CheckReadMMC();
+ SubQMMC = CheckSubQMMC();
+
+ return 0;
}
- return (handle == -1) ? -1 : 0;
+ return -1;
}
void CloseCdHandle() {
char spindown = SPINDOWN_VENDOR_SPECIFIC;
- ioctl(handle, CDROMSETSPINDOWN, &spindown);
+ ioctl(cdHandle, CDROMSETSPINDOWN, &spindown);
- close(handle);
+ close(cdHandle);
- handle = -1;
+ cdHandle = -1;
}
int IsCdHandleOpen() {
- return (handle != -1);
+ return (cdHandle != -1);
}
long GetTN(unsigned char *buffer) {
struct cdrom_tochdr toc;
- if (ioctl(handle, CDROMREADTOCHDR, &toc) == -1)
+ if (ioctl(cdHandle, CDROMREADTOCHDR, &toc) == -1)
return -1;
buffer[0] = toc.cdth_trk0; // start track
@@ -74,28 +163,32 @@ long GetTD(unsigned char track, unsigned char *buffer) {
struct cdrom_tocentry entry;
if (track == 0)
- track = 0xaa; // total time
+ track = 0xAA; // total time (leadout)
entry.cdte_track = track;
entry.cdte_format = CDROM_MSF;
- if (ioctl(handle, CDROMREADTOCENTRY, &entry) == -1)
+ if (ioctl(cdHandle, CDROMREADTOCENTRY, &entry) == -1)
return -1;
- buffer[0] = entry.cdte_addr.msf.frame; /* frame */
- buffer[1] = entry.cdte_addr.msf.second; /* second */
- buffer[2] = entry.cdte_addr.msf.minute; /* minute */
+ buffer[0] = entry.cdte_addr.msf.frame;
+ buffer[1] = entry.cdte_addr.msf.second;
+ buffer[2] = entry.cdte_addr.msf.minute;
return 0;
}
long GetTE(unsigned char track, unsigned char *m, unsigned char *s, unsigned char *f) {
struct cdrom_tocentry entry;
- char msf[3];
+ unsigned char msf[3];
+
+ if (GetTN(msf) == -1) return -1;
entry.cdte_track = track + 1;
+ if (entry.cdte_track > msf[1]) entry.cdte_track = 0xaa;
+
entry.cdte_format = CDROM_MSF;
- if (ioctl(handle, CDROMREADTOCENTRY, &entry) == -1)
+ if (ioctl(cdHandle, CDROMREADTOCENTRY, &entry) == -1)
return -1;
lba_to_msf(msf_to_lba(entry.cdte_addr.msf.minute, entry.cdte_addr.msf.second, entry.cdte_addr.msf.frame) - CD_MSF_OFFSET, msf);
@@ -108,8 +201,31 @@ long GetTE(unsigned char track, unsigned char *m, unsigned char *s, unsigned cha
}
long ReadSector(crdata *cr) {
- if (ioctl(handle, CDROMREADRAW, cr) == -1)
- return -1;
+ if (ReadMMC) {
+ MMC_READ_CD cdb;
+ int lba;
+
+ memset(&cdb, 0, sizeof(cdb));
+
+ lba = msf_to_lba(cr->msf.cdmsf_min0, cr->msf.cdmsf_sec0, cr->msf.cdmsf_frame0);
+
+ cdb.Code = GPCMD_READ_CD;
+ cdb.IncludeEDC = 1;
+ cdb.IncludeUserData = 1;
+ cdb.HeaderCode = 3;
+ cdb.IncludeSyncData = 1;
+ cdb.SubChannelSelection = 0;
+ cdb.StartingLBA[1] = lba >> 16;
+ cdb.StartingLBA[2] = lba >> 8;
+ cdb.StartingLBA[3] = lba;
+ cdb.TransferBlocks[2] = 1;
+
+ if (SendMMCCmd((unsigned char *)&cdb, sizeof(cdb), NULL, 0, (unsigned char *)cr, sizeof(*cr)) != 0)
+ return -1;
+ } else {
+ if (ioctl(cdHandle, CDROMREADRAW, cr) == -1)
+ return -1;
+ }
return 0;
}
@@ -129,7 +245,7 @@ long PlayCDDA(unsigned char *sector) {
addr.cdmsf_sec1 = ptmp[1];
addr.cdmsf_frame1 = ptmp[0];
- if (ioctl(handle, CDROMPLAYMSF, &addr) == -1)
+ if (ioctl(cdHandle, CDROMPLAYMSF, &addr) == -1)
return -1;
return 0;
@@ -139,13 +255,13 @@ long StopCDDA() {
struct cdrom_subchnl sc;
sc.cdsc_format = CDROM_MSF;
- if (ioctl(handle, CDROMSUBCHNL, &sc) == -1)
+ if (ioctl(cdHandle, CDROMSUBCHNL, &sc) == -1)
return -1;
switch (sc.cdsc_audiostatus) {
case CDROM_AUDIO_PAUSED:
case CDROM_AUDIO_PLAY:
- ioctl(handle, CDROMSTOP);
+ ioctl(cdHandle, CDROMSTOP);
break;
}
@@ -161,11 +277,11 @@ long GetStatus(int playing, struct CdrStat *stat) {
if (playing) { // return Time only if playing
sc.cdsc_format = CDROM_MSF;
- if (ioctl(handle, CDROMSUBCHNL, &sc) != -1)
+ if (ioctl(cdHandle, CDROMSUBCHNL, &sc) != -1)
memcpy(stat->Time, &sc.cdsc_absaddr.msf, 3);
}
- ret = ioctl(handle, CDROM_DISC_STATUS);
+ ret = ioctl(cdHandle, CDROM_DISC_STATUS);
switch (ret) {
case CDS_AUDIO:
stat->Type = 0x02;
@@ -177,7 +293,7 @@ long GetStatus(int playing, struct CdrStat *stat) {
stat->Type = 0x01;
break;
}
- ret = ioctl(handle, CDROM_DRIVE_STATUS);
+ ret = ioctl(cdHandle, CDROM_DRIVE_STATUS);
switch (ret) {
case CDS_NO_DISC:
case CDS_TRAY_OPEN:
@@ -186,8 +302,9 @@ long GetStatus(int playing, struct CdrStat *stat) {
break;
default:
spindown = (char)SpinDown;
- ioctl(handle, CDROMSETSPINDOWN, &spindown);
- ioctl(handle, CDROM_LOCKDOOR, 0);
+ ioctl(cdHandle, CDROMSETSPINDOWN, &spindown);
+ ioctl(cdHandle, CDROM_SELECT_SPEED, CdrSpeed);
+ ioctl(cdHandle, CDROM_LOCKDOOR, 0);
break;
}
@@ -200,28 +317,55 @@ long GetStatus(int playing, struct CdrStat *stat) {
return 0;
}
-unsigned char *ReadSub(const unsigned char *time) {
+static unsigned char *ReadSubMMC(const unsigned char *time) {
+ static unsigned char buf[CD_FRAMESIZE_RAW + 96];
+ int lba = msf_to_lba(btoi(time[0]), btoi(time[1]), btoi(time[2]));
+ MMC_READ_CD cdb;
+
+ memset(&cdb, 0, sizeof(cdb));
+
+ cdb.Code = GPCMD_READ_CD;
+ cdb.IncludeEDC = 1;
+ cdb.IncludeUserData = 1;
+ cdb.HeaderCode = 3;
+ cdb.IncludeSyncData = 1;
+ cdb.StartingLBA[1] = lba >> 16;
+ cdb.StartingLBA[2] = lba >> 8;
+ cdb.StartingLBA[3] = lba;
+ cdb.TransferBlocks[2] = 1;
+ cdb.SubChannelSelection = 1;
+
+ if (SendMMCCmd((unsigned char *)&cdb, sizeof(cdb), NULL, 0, buf, sizeof(buf)) != 0)
+ return NULL;
+
+ DecodeRawSubData(buf + CD_FRAMESIZE_RAW);
+ return buf + CD_FRAMESIZE_RAW;
+}
+
+static unsigned char *ReadSubIOCTL(const unsigned char *time) {
static struct SubQ subq;
struct cdrom_subchnl subchnl;
- int ret;
+ int r;
crdata cr;
+ unsigned short crc;
cr.msf.cdmsf_min0 = btoi(time[0]);
cr.msf.cdmsf_sec0 = btoi(time[1]);
cr.msf.cdmsf_frame0 = btoi(time[2]);
- if (ioctl(handle, CDROMSEEK, &cr.msf) == -1) {
+ if (ioctl(cdHandle, CDROMSEEK, &cr.msf) == -1) {
// will be slower, but there's no other way to make it accurate
- if (ioctl(handle, CDROMREADRAW, &cr) == -1) {
+ if (ioctl(cdHandle, CDROMREADRAW, &cr) == -1) {
return NULL;
}
}
subchnl.cdsc_format = CDROM_MSF;
- ret = ioctl(handle, CDROMSUBCHNL, &subchnl);
+ r = ioctl(cdHandle, CDROMSUBCHNL, &subchnl);
- if (ret == -1) return NULL;
+ if (r == -1) return NULL;
+ subq.ControlAndADR = 0x41;
subq.TrackNumber = subchnl.cdsc_trk;
subq.IndexNumber = subchnl.cdsc_ind;
subq.TrackRelativeAddress[0] = itob(subchnl.cdsc_reladdr.msf.minute);
@@ -231,12 +375,35 @@ unsigned char *ReadSub(const unsigned char *time) {
subq.AbsoluteAddress[1] = itob(subchnl.cdsc_absaddr.msf.second);
subq.AbsoluteAddress[2] = itob(subchnl.cdsc_absaddr.msf.frame);
+ // CRC is not supported with IOCTL, fake it.
+ crc = calcCrc((unsigned char *)&subq + 12, 10);
+ subq.CRC[0] = (crc >> 8);
+ subq.CRC[1] = (crc & 0xFF);
+
+ r = msf_to_lba(btoi(time[0]), btoi(time[1]), btoi(time[2]));
+
+ if (GetTE(1, &cr.msf.cdmsf_min0, &cr.msf.cdmsf_sec0, &cr.msf.cdmsf_frame0) == -1) {
+ cr.msf.cdmsf_min0 = 80;
+ cr.msf.cdmsf_sec0 = 0;
+ cr.msf.cdmsf_frame0 = 0;
+ }
+
+ if (msf_to_lba(cr.msf.cdmsf_min0, cr.msf.cdmsf_sec0, cr.msf.cdmsf_frame0) >= r &&
+ (msf_to_lba(subchnl.cdsc_absaddr.msf.minute, subchnl.cdsc_absaddr.msf.second, subchnl.cdsc_absaddr.msf.frame) != r ||
+ msf_to_lba(subchnl.cdsc_reladdr.msf.minute, subchnl.cdsc_reladdr.msf.second, subchnl.cdsc_reladdr.msf.frame) != r - CD_MSF_OFFSET))
+ subq.CRC[1] ^= 1; // time mismatch; report wrong CRC
+
PRINTF("subq : %x,%x : %x,%x,%x : %x,%x,%x\n",
- subchnl.cdsc_trk, subchnl.cdsc_ind,
- itob(subchnl.cdsc_reladdr.msf.minute), itob(subchnl.cdsc_reladdr.msf.second), itob(subchnl.cdsc_reladdr.msf.frame),
- itob(subchnl.cdsc_absaddr.msf.minute), itob(subchnl.cdsc_absaddr.msf.second), itob(subchnl.cdsc_absaddr.msf.frame));
+ subchnl.cdsc_trk, subchnl.cdsc_ind,
+ itob(subchnl.cdsc_reladdr.msf.minute), itob(subchnl.cdsc_reladdr.msf.second), itob(subchnl.cdsc_reladdr.msf.frame),
+ itob(subchnl.cdsc_absaddr.msf.minute), itob(subchnl.cdsc_absaddr.msf.second), itob(subchnl.cdsc_absaddr.msf.frame));
return (unsigned char *)&subq;
}
+unsigned char *ReadSub(const unsigned char *time) {
+ if (SubQMMC) return ReadSubMMC(time);
+ else return ReadSubIOCTL(time);
+}
+
#endif
diff --git a/plugins/dfcdrom/cdr-null.c b/plugins/dfcdrom/cdr-null.c
index 0ee8eea3..275a6b65 100644
--- a/plugins/dfcdrom/cdr-null.c
+++ b/plugins/dfcdrom/cdr-null.c
@@ -19,10 +19,10 @@
* along with this program; if not, see <http://www.gnu.org/licenses>.
*/
-#include "cdr.h"
-
#ifdef USENULL
+#include "cdr.h"
+
char *LibName = N_("CDR NULL Plugin");
int OpenCdHandle(const char *dev) {
@@ -32,7 +32,7 @@ int OpenCdHandle(const char *dev) {
void CloseCdHandle() {
}
-int IsCdHandleOpen () {
+int IsCdHandleOpen() {
return 0;
}
@@ -56,11 +56,11 @@ long ReadSector(crdata *cr) {
}
long PlayCDDA(unsigned char *sector) {
- return -1;
+ return 0;
}
long StopCDDA() {
- return -1;
+ return 0;
}
long GetStatus(int playing, struct CdrStat *stat) {
diff --git a/plugins/dfcdrom/cdr-solaris.c b/plugins/dfcdrom/cdr-solaris.c
deleted file mode 100644
index 54ccdab1..00000000
--- a/plugins/dfcdrom/cdr-solaris.c
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (c) 2010, Wei Mingzhi <whistler@openoffice.org>.
- * All Rights Reserved.
- *
- * Based on: Cdrom for Psemu Pro like Emulators
- * By: linuzappz <linuzappz@hotmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses>.
- */
-
-#include "cdr.h"
-
-#ifdef __sun
-
-char *LibName = N_("CD-ROM Device Reader");
-
-int handle = -1;
-
-int OpenCdHandle(const char *dev) {
- char spindown;
-
- handle = open(dev, O_RDONLY);
-
- if (handle != -1) {
-// ioctl(handle, CDROM_LOCKDOOR, 0);
-
- spindown = (char)SpinDown;
-// ioctl(handle, CDROMSETSPINDOWN, &spindown);
-
-// ioctl(handle, CDROM_SELECT_SPEED, CdrSpeed);
- }
-
- return (handle == -1) ? -1 : 0;
-}
-
-void CloseCdHandle() {
- char spindown = SPINDOWN_VENDOR_SPECIFIC;
-// ioctl(handle, CDROMSETSPINDOWN, &spindown);
-
- close(handle);
-
- handle = -1;
-}
-
-int IsCdHandleOpen() {
- return (handle != -1);
-}
-
-long GetTN(unsigned char *buffer) {
- struct cdrom_tochdr toc;
-
- if (ioctl(handle, CDROMREADTOCHDR, &toc) == -1)
- return -1;
-
- buffer[0] = toc.cdth_trk0; // start track
- buffer[1] = toc.cdth_trk1; // end track
-
- return 0;
-}
-
-long GetTD(unsigned char track, unsigned char *buffer) {
- struct cdrom_tocentry entry;
-
- if (track == 0)
- track = 0xaa; // total time
- entry.cdte_track = track;
- entry.cdte_format = CDROM_MSF;
-
- if (ioctl(handle, CDROMREADTOCENTRY, &entry) == -1)
- return -1;
-
- buffer[0] = entry.cdte_addr.msf.frame; /* frame */
- buffer[1] = entry.cdte_addr.msf.second; /* second */
- buffer[2] = entry.cdte_addr.msf.minute; /* minute */
-
- return 0;
-}
-
-long GetTE(unsigned char track, unsigned char *m, unsigned char *s, unsigned char *f) {
- struct cdrom_tocentry entry;
- char msf[3];
-
- entry.cdte_track = track + 1;
- entry.cdte_format = CDROM_MSF;
-
- if (ioctl(handle, CDROMREADTOCENTRY, &entry) == -1)
- return -1;
-
- lba_to_msf(msf_to_lba(entry.cdte_addr.msf.minute, entry.cdte_addr.msf.second, entry.cdte_addr.msf.frame) - CD_MSF_OFFSET, msf);
-
- *m = msf[0];
- *s = msf[1];
- *f = msf[2];
-
- return 0;
-}
-
-long ReadSector(crdata *cr) {
- return -1;
-}
-
-long PlayCDDA(unsigned char *sector) {
- struct cdrom_msf addr;
- unsigned char ptmp[4];
-
- // 0 is the last track of every cdrom, so play up to there
- if (GetTD(0, ptmp) == -1)
- return -1;
-
- addr.cdmsf_min0 = sector[0];
- addr.cdmsf_sec0 = sector[1];
- addr.cdmsf_frame0 = sector[2];
- addr.cdmsf_min1 = ptmp[2];
- addr.cdmsf_sec1 = ptmp[1];
- addr.cdmsf_frame1 = ptmp[0];
-
- if (ioctl(handle, CDROMPLAYMSF, &addr) == -1)
- return -1;
-
- return 0;
-}
-
-long StopCDDA() {
- struct cdrom_subchnl sc;
-
- sc.cdsc_format = CDROM_MSF;
- if (ioctl(handle, CDROMSUBCHNL, &sc) == -1)
- return -1;
-
- switch (sc.cdsc_audiostatus) {
- case CDROM_AUDIO_PAUSED:
- case CDROM_AUDIO_PLAY:
- ioctl(handle, CDROMSTOP);
- break;
- }
-
- return 0;
-}
-
-long GetStatus(int playing, struct CdrStat *stat) {
- return -1;
-}
-
-unsigned char *ReadSub(const unsigned char *time) {
- return NULL;
-}
-
-#endif
diff --git a/plugins/dfcdrom/cdr.c b/plugins/dfcdrom/cdr.c
index eb08929c..c83269db 100644
--- a/plugins/dfcdrom/cdr.c
+++ b/plugins/dfcdrom/cdr.c
@@ -21,20 +21,6 @@
#include "cdr.h"
-unsigned int msf_to_lba(char m, char s, char f) {
- return (((m * CD_SECS) + s) * CD_FRAMES + f) - CD_MSF_OFFSET;
-}
-
-void lba_to_msf(unsigned int s, char *msf) {
- s += CD_MSF_OFFSET;
-
- msf[0] = s / CD_FRAMES / CD_SECS;
- s = s - msf[0] * CD_FRAMES * CD_SECS;
- msf[1] = s / CD_FRAMES;
- s = s - msf[1] * CD_FRAMES;
- msf[2] = s;
-}
-
int initial_time = 0;
pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
diff --git a/plugins/dfcdrom/cdr.h b/plugins/dfcdrom/cdr.h
index e127f89b..32092122 100644
--- a/plugins/dfcdrom/cdr.h
+++ b/plugins/dfcdrom/cdr.h
@@ -52,25 +52,14 @@
#if defined (__linux__)
#include <linux/cdrom.h>
+#include <scsi/scsi.h>
+#include <scsi/sg.h>
+
#ifndef CDROMSETSPINDOWN
#define CDROMSETSPINDOWN 0x531e
#endif
-#define DEV_DEF "/dev/cdrom"
-
-#elif defined (__sun)
-
-#include <sys/cdio.h>
-#include <sys/scsi/scsi.h>
-
-#define CD_SECS 60
-#define CD_FRAMES 75
-#define CD_FRAMESIZE_RAW 2352
-#define CD_FRAMESIZE_SUB 96
-#define CD_MSF_OFFSET 150
-/* The CD-ROM device name seems to vary on different computers on Solaris, so
- let user set this. */
-#define DEV_DEF ""
+#define DEV_DEF "/dev/cdrom"
#else
@@ -90,19 +79,13 @@ struct cdrom_msf {
#define CD_MSF_OFFSET 150
#if defined (__FreeBSD__)
-
-#include <sys/ata.h>
-#include <sys/cdio.h>
-#include <sys/cdrio.h>
-#include <sys/disklabel.h>
-
#define DEV_DEF "/dev/acd0"
-
#else
-
#define DEV_DEF ""
-#define USE_NULL 1
+#endif
+#ifndef USE_LIBCDIO
+#define USE_NULL 1
#endif
#endif
@@ -142,18 +125,32 @@ extern long SpinDown;
#define SPINDOWN_16MIN 0x0E
#define SPINDOWN_32MIN 0x0F
-#define itob(i) ((i)/10*16 + (i)%10) /* u_char to BCD */
-#define btoi(b) ((b)/16*10 + (b)%16) /* BCD to u_char */
+typedef struct _MMC_READ_CD {
+ unsigned char Code; // 0xBE
-typedef union {
- struct cdrom_msf msf;
- unsigned char buf[CD_FRAMESIZE_RAW];
-} crdata;
+ unsigned char RelativeAddress : 1;
+ unsigned char : 1;
+ unsigned char ExpectedSectorType : 3;
+ unsigned char Lun : 3;
-typedef struct {
- crdata cr;
- int ret;
-} CacheData;
+ unsigned char StartingLBA[4];
+ unsigned char TransferBlocks[3];
+
+ unsigned char : 1;
+ unsigned char ErrorFlags : 2;
+ unsigned char IncludeEDC : 1;
+ unsigned char IncludeUserData : 1;
+ unsigned char HeaderCode : 2;
+ unsigned char IncludeSyncData : 1;
+
+ unsigned char SubChannelSelection : 3;
+ unsigned char : 5;
+
+ unsigned char Ctrl;
+} MMC_READ_CD;
+
+#define itob(i) ((i)/10*16 + (i)%10) /* u_char to BCD */
+#define btoi(b) ((b)/16*10 + (b)%16) /* BCD to u_char */
struct CdrStat {
unsigned long Type;
@@ -173,6 +170,16 @@ struct SubQ {
char res1[72];
};
+typedef union {
+ struct cdrom_msf msf;
+ unsigned char buf[CD_FRAMESIZE_RAW];
+} crdata;
+
+typedef struct {
+ crdata cr;
+ int ret;
+} CacheData;
+
long ReadNormal();
long ReadThreaded();
unsigned char* GetBNormal();
@@ -190,7 +197,9 @@ void SaveConf();
#endif
unsigned int msf_to_lba(char m, char s, char f);
-void lba_to_msf(unsigned int s, char *msf);
+void lba_to_msf(unsigned int s, unsigned char *msf);
+void DecodeRawSubData(unsigned char *subbuffer);
+unsigned short calcCrc(unsigned char *d, int len);
int OpenCdHandle();
void CloseCdHandle();
diff --git a/plugins/dfcdrom/cdrcfg-0.1df/main.c b/plugins/dfcdrom/cdrcfg-0.1df/main.c
index 608d2f7f..6f486c40 100644
--- a/plugins/dfcdrom/cdrcfg-0.1df/main.c
+++ b/plugins/dfcdrom/cdrcfg-0.1df/main.c
@@ -143,7 +143,7 @@ void fill_drives_list(GtkWidget *widget) {
pclose(fp);
}
#else
- static const char *cdrom_devices[] = { NULL };
+ static const char *cdrom_devices[] = { "" };
#endif
store = gtk_list_store_new(1, G_TYPE_STRING);
diff --git a/plugins/dfcdrom/cfg.c b/plugins/dfcdrom/cfg.c
index 217b7705..b9e0f92a 100644
--- a/plugins/dfcdrom/cfg.c
+++ b/plugins/dfcdrom/cfg.c
@@ -19,14 +19,6 @@
* along with this program; if not, see <http://www.gnu.org/licenses>.
*/
-#include <stdio.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <time.h>
-#include <string.h>
-
#include "cdr.h"
char CdromDev[256];
diff --git a/plugins/dfcdrom/util.c b/plugins/dfcdrom/util.c
new file mode 100644
index 00000000..c80c8726
--- /dev/null
+++ b/plugins/dfcdrom/util.c
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2010, Wei Mingzhi <whistler@openoffice.org>.
+ * All Rights Reserved.
+ *
+ * Based on: Cdrom for Psemu Pro like Emulators
+ * By: linuzappz <linuzappz@hotmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses>.
+ */
+
+#include "cdr.h"
+
+unsigned int msf_to_lba(char m, char s, char f) {
+ return (m * CD_SECS + s) * CD_FRAMES + f - CD_MSF_OFFSET;
+}
+
+void lba_to_msf(unsigned int s, unsigned char *msf) {
+ s += CD_MSF_OFFSET;
+
+ msf[0] = s / CD_FRAMES / CD_SECS;
+ s = s - msf[0] * CD_FRAMES * CD_SECS;
+ msf[1] = s / CD_FRAMES;
+ s = s - msf[1] * CD_FRAMES;
+ msf[2] = s;
+}
+
+void DecodeRawSubData(unsigned char *subbuffer) {
+ unsigned char subQData[12];
+ int i;
+
+ memset(subQData, 0, sizeof(subQData));
+
+ for (i = 0; i < 8 * 12; i++) {
+ if (subbuffer[i] & (1 << 6)) { // only subchannel Q is needed
+ subQData[i >> 3] |= (1 << (7 - (i & 7)));
+ }
+ }
+
+ memcpy(&subbuffer[12], subQData, 12);
+}
+
+// lookup table for crc calculation
+static unsigned short crctab[256] = {
+ 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, 0x8108,
+ 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, 0x1231, 0x0210,
+ 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6, 0x9339, 0x8318, 0xB37B,
+ 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE, 0x2462, 0x3443, 0x0420, 0x1401,
+ 0x64E6, 0x74C7, 0x44A4, 0x5485, 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE,
+ 0xF5CF, 0xC5AC, 0xD58D, 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6,
+ 0x5695, 0x46B4, 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D,
+ 0xC7BC, 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,
+ 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B, 0x5AF5,
+ 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12, 0xDBFD, 0xCBDC,
+ 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A, 0x6CA6, 0x7C87, 0x4CE4,
+ 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41, 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD,
+ 0xAD2A, 0xBD0B, 0x8D68, 0x9D49, 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13,
+ 0x2E32, 0x1E51, 0x0E70, 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A,
+ 0x9F59, 0x8F78, 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E,
+ 0xE16F, 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,
+ 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, 0x02B1,
+ 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256, 0xB5EA, 0xA5CB,
+ 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D, 0x34E2, 0x24C3, 0x14A0,
+ 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xA7DB, 0xB7FA, 0x8799, 0x97B8,
+ 0xE75F, 0xF77E, 0xC71D, 0xD73C, 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657,
+ 0x7676, 0x4615, 0x5634, 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9,
+ 0xB98A, 0xA9AB, 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882,
+ 0x28A3, 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,
+ 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92, 0xFD2E,
+ 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, 0x7C26, 0x6C07,
+ 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1, 0xEF1F, 0xFF3E, 0xCF5D,
+ 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8, 0x6E17, 0x7E36, 0x4E55, 0x5E74,
+ 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
+};
+
+unsigned short calcCrc(unsigned char *d, int len) {
+ unsigned short crc = 0;
+ int i;
+
+ for (i = 0; i < len; i++) {
+ crc = crctab[(crc >> 8) ^ d[i]] ^ (crc << 8);
+ }
+
+ return ~crc;
+}