diff options
| author | SND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-07-10 06:54:11 +0000 |
|---|---|---|
| committer | SND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-07-10 06:54:11 +0000 |
| commit | f7823bc1646f1885bd9a0a19a9645c0e2cb884bd (patch) | |
| tree | 15f115383205088b3fca3f4c41a319e1da183ac7 /plugins/dfcdrom | |
| parent | fcf4fb0933140db08c7bc094abc9edb271c13359 (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.am | 10 | ||||
| -rw-r--r-- | plugins/dfcdrom/Makefile.in | 268 | ||||
| -rw-r--r-- | plugins/dfcdrom/cdr-freebsd.c | 126 | ||||
| -rw-r--r-- | plugins/dfcdrom/cdr-libcdio.c | 255 | ||||
| -rw-r--r-- | plugins/dfcdrom/cdr-linux.c | 249 | ||||
| -rw-r--r-- | plugins/dfcdrom/cdr-null.c | 10 | ||||
| -rw-r--r-- | plugins/dfcdrom/cdr-solaris.c | 159 | ||||
| -rw-r--r-- | plugins/dfcdrom/cdr.c | 14 | ||||
| -rw-r--r-- | plugins/dfcdrom/cdr.h | 79 | ||||
| -rw-r--r-- | plugins/dfcdrom/cdrcfg-0.1df/main.c | 2 | ||||
| -rw-r--r-- | plugins/dfcdrom/cfg.c | 8 | ||||
| -rw-r--r-- | plugins/dfcdrom/util.c | 95 |
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, ¶meter); - - parameter = CdrSpeed * 177; - if (parameter == 0) parameter = CDR_MAX_SPEED; - - ioctl(handle, CDRIOCREADSPEED, ¶meter); - } - } - - return (h == -1) ? -1 : 0; -} - -void CloseCdHandle() { - int parameter; - - parameter = 0; - ioctl(handle, IOCATASSPINDOWN, ¶meter); - - parameter = CDR_MAX_SPEED; - ioctl(handle, CDRIOCREADSPEED, ¶meter); - - 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; +} |
