diff options
| author | SND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2009-04-16 06:22:51 +0000 |
|---|---|---|
| committer | SND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2009-04-16 06:22:51 +0000 |
| commit | 8139fbf8204882663446bcb06f68789353597820 (patch) | |
| tree | 6ea1f39932b33faee84d603e956470e37f135804 /plugins/dfcdrom | |
| download | pcsxr-8139fbf8204882663446bcb06f68789353597820.tar.gz | |
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@23061 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'plugins/dfcdrom')
| -rw-r--r-- | plugins/dfcdrom/Makefile.am | 18 | ||||
| -rw-r--r-- | plugins/dfcdrom/Makefile.in | 562 | ||||
| -rw-r--r-- | plugins/dfcdrom/callbacks.c | 210 | ||||
| -rw-r--r-- | plugins/dfcdrom/callbacks.h | 18 | ||||
| -rw-r--r-- | plugins/dfcdrom/cdr.c | 636 | ||||
| -rw-r--r-- | plugins/dfcdrom/cdr.h | 68 | ||||
| -rw-r--r-- | plugins/dfcdrom/cfg-gtk2.c | 62 | ||||
| -rw-r--r-- | plugins/dfcdrom/cfg.c | 62 | ||||
| -rw-r--r-- | plugins/dfcdrom/cfgCdr.glade | 549 | ||||
| -rw-r--r-- | plugins/dfcdrom/interface.c | 339 | ||||
| -rw-r--r-- | plugins/dfcdrom/interface.h | 6 | ||||
| -rw-r--r-- | plugins/dfcdrom/main.c | 32 | ||||
| -rw-r--r-- | plugins/dfcdrom/support.c | 147 | ||||
| -rw-r--r-- | plugins/dfcdrom/support.h | 44 |
14 files changed, 2753 insertions, 0 deletions
diff --git a/plugins/dfcdrom/Makefile.am b/plugins/dfcdrom/Makefile.am new file mode 100644 index 00000000..41949526 --- /dev/null +++ b/plugins/dfcdrom/Makefile.am @@ -0,0 +1,18 @@ +bindir = @libdir@/games/psemu/ +libdir = @libdir@/games/psemu/ + +lib_LTLIBRARIES = libDFCdrom.la + +libDFCdrom_la_SOURCES = cdr.c cfg.c +libDFCdrom_la_LDFLAGS = -module -avoid-version -lpthread + +INCLUDES = -DPIXMAPDIR=\"${datadir}/pixmaps/\" \ + -DLOCALE_DIR=\"${datadir}/locale/\" \ + -DDATADIR=\"${datadir}/psemu/\" \ + $(GTK2_CFLAGS) \ + -DREVISION=1 -DBUILD=0 \ + -I../../libpcsxcore + +bin_PROGRAMS = cfgDFCdrom +cfgDFCdrom_SOURCES = cfg-gtk2.c main.c support.c interface.c callbacks.c +cfgDFCdrom_LDADD = $(GTK2_LIBS) diff --git a/plugins/dfcdrom/Makefile.in b/plugins/dfcdrom/Makefile.in new file mode 100644 index 00000000..be7449a5 --- /dev/null +++ b/plugins/dfcdrom/Makefile.in @@ -0,0 +1,562 @@ +# Makefile.in generated by automake 1.10.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 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. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@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 +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +bin_PROGRAMS = cfgDFCdrom$(EXEEXT) +subdir = plugins/dfcdrom +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/include/config.h +CONFIG_CLEAN_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 = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" +libLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(lib_LTLIBRARIES) +libDFCdrom_la_LIBADD = +am_libDFCdrom_la_OBJECTS = cdr.lo cfg.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 $@ +binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) +PROGRAMS = $(bin_PROGRAMS) +am_cfgDFCdrom_OBJECTS = cfg-gtk2.$(OBJEXT) main.$(OBJEXT) \ + support.$(OBJEXT) interface.$(OBJEXT) callbacks.$(OBJEXT) +cfgDFCdrom_OBJECTS = $(am_cfgDFCdrom_OBJECTS) +am__DEPENDENCIES_1 = +cfgDFCdrom_DEPENDENCIES = $(am__DEPENDENCIES_1) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libDFCdrom_la_SOURCES) $(cfgDFCdrom_SOURCES) +DIST_SOURCES = $(libDFCdrom_la_SOURCES) $(cfgDFCdrom_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DFOPENGL = @DFOPENGL@ +DSYMUTIL = @DSYMUTIL@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GLADE2_CFLAGS = @GLADE2_CFLAGS@ +GLADE2_LIBS = @GLADE2_LIBS@ +GLIB2_CFLAGS = @GLIB2_CFLAGS@ +GLIB2_LIBS = @GLIB2_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +GTK2_CFLAGS = @GTK2_CFLAGS@ +GTK2_LIBS = @GTK2_LIBS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NASM = @NASM@ +NMEDIT = @NMEDIT@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @libdir@/games/psemu/ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@/games/psemu/ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +lib_LTLIBRARIES = libDFCdrom.la +libDFCdrom_la_SOURCES = cdr.c cfg.c +libDFCdrom_la_LDFLAGS = -module -avoid-version -lpthread +INCLUDES = -DPIXMAPDIR=\"${datadir}/pixmaps/\" \ + -DLOCALE_DIR=\"${datadir}/locale/\" \ + -DDATADIR=\"${datadir}/psemu/\" \ + $(GTK2_CFLAGS) \ + -DREVISION=1 -DBUILD=0 \ + -I../../libpcsxcore + +cfgDFCdrom_SOURCES = cfg-gtk2.c main.c support.c interface.c callbacks.c +cfgDFCdrom_LDADD = $(GTK2_LIBS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + 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 \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(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 +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + 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 + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @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: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libDFCdrom.la: $(libDFCdrom_la_OBJECTS) $(libDFCdrom_la_DEPENDENCIES) + $(libDFCdrom_la_LINK) -rpath $(libdir) $(libDFCdrom_la_OBJECTS) $(libDFCdrom_la_LIBADD) $(LIBS) +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @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)'; 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)'; 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) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/callbacks.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdr.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cfg-gtk2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cfg.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interface.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/support.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@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@ 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@ 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 $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + 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; nonemtpy = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + 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; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(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)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + 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 $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) +install-binPROGRAMS: install-libLTLIBRARIES + +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ + clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: install-binPROGRAMS install-libLTLIBRARIES + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-libLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic clean-libLTLIBRARIES clean-libtool ctags \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-libLTLIBRARIES \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-binPROGRAMS 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/callbacks.c b/plugins/dfcdrom/callbacks.c new file mode 100644 index 00000000..09f72f63 --- /dev/null +++ b/plugins/dfcdrom/callbacks.c @@ -0,0 +1,210 @@ +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#ifdef __linux__ + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> +#include <fcntl.h> +#include <sys/stat.h> +#include <sys/ioctl.h> +#include <linux/cdrom.h> + +#include <gtk/gtk.h> + +#include "cdr.h" +#include "callbacks.h" +#include "interface.h" +#include "support.h" + +/* list of drives */ +GList * driveslist = NULL; + +/* private functions prototypes */ +void fill_drives_list(void); +int is_cdrom(char *device); + + +/*************************************************************************** + * Config Dialog. + ***************************************************************************/ + +void on_cfg_dialog_show (GtkWidget *widget, gpointer user_data) +{ + GtkWidget *devcombo; + GtkWidget *rmmenu; + GtkWidget *subQbtn; + GtkWidget *spinC; + GtkWidget *spinS; + + LoadConf(); + fill_drives_list(); + + devcombo = lookup_widget (GTK_WIDGET (widget), "cddev_combo"); + rmmenu = lookup_widget (GTK_WIDGET (widget), "readmode_optionmenu"); + subQbtn = lookup_widget (GTK_WIDGET (widget), "subQ_button"); + spinC = lookup_widget (GTK_WIDGET (widget), "spinCacheSize"); + spinS = lookup_widget (GTK_WIDGET (widget), "spinCdrSpeed"); + + /* show values */ + gtk_combo_set_popdown_strings (GTK_COMBO (devcombo), driveslist); + gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (devcombo)->entry), CdromDev); + gtk_option_menu_set_history (GTK_OPTION_MENU (rmmenu), ReadMode); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (subQbtn), UseSubQ); + gtk_spin_button_set_value (GTK_SPIN_BUTTON(spinC), (float)CacheSize); + gtk_spin_button_set_value (GTK_SPIN_BUTTON(spinS), (float)CdrSpeed); + + /* ??? is correct to free? it's a global... */ + g_list_free(driveslist); +} + + +void on_cfg_cancelbutton_clicked (GtkButton *button, gpointer user_data) +{ + gtk_widget_destroy (gtk_widget_get_toplevel (GTK_WIDGET (button))); + gtk_main_quit(); +} + + +void on_cfg_okbutton_clicked (GtkButton *button, gpointer user_data) +{ + GtkWidget *deventry; + GtkWidget *rmmenu; + GtkWidget *subQbtn; + GtkWidget *spinC; + GtkWidget *spinS; + char *tmp; + + deventry = lookup_widget (GTK_WIDGET (button), "cddev_entry"); + rmmenu = lookup_widget (GTK_WIDGET (button), "readmode_optionmenu"); + subQbtn = lookup_widget (GTK_WIDGET (button), "subQ_button"); + spinC = lookup_widget (GTK_WIDGET (button), "spinCacheSize"); + spinS = lookup_widget (GTK_WIDGET (button), "spinCdrSpeed"); + + tmp = gtk_entry_get_text (GTK_ENTRY (deventry)); + strcpy(CdromDev, tmp); + ReadMode = gtk_option_menu_get_history (GTK_OPTION_MENU(rmmenu)); + UseSubQ = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(subQbtn)); + CacheSize= gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(spinC)); + CdrSpeed = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(spinS)); + + SaveConf(); + + gtk_widget_destroy(gtk_widget_get_toplevel (GTK_WIDGET (button))); + gtk_main_quit(); +} + + +/*************************************************************************** + * About Dialog. + ***************************************************************************/ + +void on_abt_okbutton_clicked (GtkButton *button, gpointer user_data) +{ + gtk_widget_destroy (gtk_widget_get_toplevel (GTK_WIDGET (button))); + gtk_main_quit(); +} + + +/*************************************************************************** + * Private functions. + ***************************************************************************/ + +/* + * get_drives_list: retrieves available cd drives. At the moment it use a quite + * ugly "brute force" method: we check for the most common location for cdrom + * in /dev and chech if they are cdrom devices. + * If your cdrom path is not listed here you'll have to type it in the dialog + * entry yourself (or add it here and recompile). + * Are there any other common entry to add to the list? (especially scsi, I + * deliberately ignored old non standard cdroms... ) + * If you come up with a better method let me know!! + */ + +void fill_drives_list(void) +{ + int i = 0; + static char *cdrom_devices[]={ + "/dev/cdrom", + "/dev/cdroms/cdrom0", + "/dev/cdroms/cdrom1", + "/dev/cdroms/cdrom2", + "/dev/cdroms/cdrom3", + "/dev/hda", + "/dev/hdb", + "/dev/hdc", + "/dev/hdd", + "/dev/scd0", + "/dev/scd1", + "/dev/scd2", + "/dev/scd3", + "/dev/optcd", + NULL}; + + /* fisrt we put our current drive */ + driveslist = g_list_append(driveslist, CdromDev); + + /* scan cdrom_devices for real cdrom and add them to driveslist */ + while(cdrom_devices[i] != NULL){ + + /* check that is not our current dev (already in list) */ + if (strcmp(cdrom_devices[i], CdromDev) != 0){ + + /* check that is a cdrom device */ + if (is_cdrom(cdrom_devices[i])){ + driveslist = g_list_append(driveslist, cdrom_devices[i]); + } + } + ++i; + } + + return; +} + + +/* function to check if the device is a cdrom */ +int is_cdrom(char *device){ + struct stat st; + int fd = -1; + + /* check if the file exist */ + if (stat(device, &st) <0) return 0; + + /* check if is a block or char device */ + if (!S_ISCHR(st.st_mode) && !S_ISBLK(st.st_mode)) return 0; + + /* try to open the device file descriptor */ + if ((fd = open(device, O_RDONLY | O_NONBLOCK)) < 0) return 0; + + /* I need a method to check is a device is really a cdrom. + some problems/ideas are: + - different protocls (ide, scsi, old proprietary...) + - maybe we can use major number (see linux/major.h) to do some check. + major number can be retrieved with (st.st_rdev>>8) + scsi has SCSI_CDROM_MAJOR but does this cover all scsi drives? + beside IDE major is the same for hard disks and cdroms... + and DVDs? + - another idea is to parse /proc, but again IDE, scsi etc have + different files... I've not found a way to query "which cd drives + are available?" + + Now I use this ioctl which works also if the drive is empty, + I hope that is implemented for all the drives... here works + fine: at least doesn't let me to select my HD as cds ;) + */ + /* try a ioctl to see if it's a cdrom device */ + if (ioctl(fd, CDROM_GET_CAPABILITY, NULL) < 0){ + close(fd); + return 0; + } + + close(fd); + + /* yes, it seems a cd drive! */ + return 1; +} + +#endif diff --git a/plugins/dfcdrom/callbacks.h b/plugins/dfcdrom/callbacks.h new file mode 100644 index 00000000..622914d9 --- /dev/null +++ b/plugins/dfcdrom/callbacks.h @@ -0,0 +1,18 @@ +#include <gtk/gtk.h> + + +void +on_cfg_dialog_show (GtkWidget *widget, + gpointer user_data); + +void +on_cfg_cancelbutton_clicked (GtkButton *button, + gpointer user_data); + +void +on_cfg_okbutton_clicked (GtkButton *button, + gpointer user_data); + +void +on_abt_okbutton_clicked (GtkButton *button, + gpointer user_data); diff --git a/plugins/dfcdrom/cdr.c b/plugins/dfcdrom/cdr.c new file mode 100644 index 00000000..4649ff62 --- /dev/null +++ b/plugins/dfcdrom/cdr.c @@ -0,0 +1,636 @@ +/* + * Cdrom for Psemu Pro like Emulators + * + * By: linuzappz <linuzappz@hotmail.com> + * + */ + +#include <stdio.h> +#include <stdlib.h> +#include <fcntl.h> +#include <sys/ioctl.h> +#include <sys/stat.h> +#include <unistd.h> +#include <pthread.h> +#include <time.h> +#include <string.h> + +#include "cdr.h" + +#ifdef __linux__ + +static inline int msf_to_lba(char m, char s, char f) { + return (((m * CD_SECS) + s) * CD_FRAMES + f) - CD_MSF_OFFSET; +} + +pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER; +pthread_cond_t cond = PTHREAD_COND_INITIALIZER; + +long (*ReadTrackT[])() = { + ReadNormal, + ReadThreaded, +}; + +unsigned char* (*GetBufferT[])() = { + GetBNormal, + GetBThreaded, +}; + +long (*fReadTrack)(); +unsigned char* (*fGetBuffer)(); + +void *CdrThread(void *arg); + +char *LibName = "CD-ROM Drive Reader"; + +#else + +char *LibName = "CDR NULL Plugin"; + +#endif + +const unsigned char version = 1; // PSEmu 1.x library +const unsigned char revision = VERSION; +const unsigned char build = BUILD; + +char *PSEgetLibName(void) { + return LibName; +} + +unsigned long PSEgetLibType(void) { + return PSE_LT_CDR; +} + +unsigned long PSEgetLibVersion(void) { + return version << 16 | revision << 8 | build; +} + +#ifdef __linux__ + +long CDRinit(void) { + cdHandle = -1; + thread = -1; + + return 0; +} + +long CDRshutdown(void) { + return 0; +} + +long CDRopen(void) { + LoadConf(); + + if (cdHandle > 0) + return 0; /* it's already open */ + cdHandle = open(CdromDev, O_RDONLY); + if (cdHandle != -1) { // if we can't open the cdrom we'll works as a null plugin + ioctl(cdHandle, CDROM_LOCKDOOR, 0); +// ioctl(cdHandle, CDROMSTART, NULL); + + ioctl(cdHandle, CDROM_SELECT_SPEED, CdrSpeed); + } else { + fprintf(stderr, "CDR: Could not open %s\n", CdromDev); + } + + fReadTrack = ReadTrackT[ReadMode]; + fGetBuffer = GetBufferT[ReadMode]; + + if (ReadMode == THREADED) { + cdcache = (CacheData *)malloc(CacheSize * sizeof(CacheData)); + if (cdcache == NULL) return -1; + memset(cdcache, 0, CacheSize * sizeof(CacheData)); + } else { + cdbuffer = cr.buf + 12; /* skip sync data */ + } + + if (ReadMode == THREADED) { + pthread_attr_t attr; + + pthread_mutex_init(&mut, NULL); + pthread_cond_init(&cond, NULL); + locked = 0; + + pthread_attr_init(&attr); + pthread_create(&thread, &attr, CdrThread, NULL); + + cacheaddr = -1; + } else thread = -1; + + playing = 0; + stopth = 0; + + return 0; +} + +long CDRclose(void) { + if (cdHandle < 1) return 0; + + if (playing) CDRstop(); + close(cdHandle); + cdHandle = -1; + + if (thread != -1) { + if (locked == 0) { + stopth = 1; + while (locked == 0) usleep(5000); + } + + stopth = 2; + pthread_mutex_lock(&mut); + pthread_cond_signal(&cond); + pthread_mutex_unlock(&mut); + + pthread_join(thread, NULL); + pthread_mutex_destroy(&mut); + pthread_cond_destroy(&cond); + } + + if (ReadMode == THREADED) { + free(cdcache); + } + + return 0; +} + +// return Starting and Ending Track +// buffer: +// byte 0 - start track +// byte 1 - end track +long CDRgetTN(unsigned char *buffer) { + struct cdrom_tochdr toc; + + if (cdHandle < 1) { + buffer[0] = 1; + buffer[1] = 1; + return 0; + } + + if (ioctl(cdHandle, CDROMREADTOCHDR, &toc) == -1) + return -1; + + buffer[0] = toc.cdth_trk0; // start track + buffer[1] = toc.cdth_trk1; // end track + + return 0; +} + +// return Track Time +// buffer: +// byte 0 - frame +// byte 1 - second +// byte 2 - minute +long CDRgetTD(unsigned char track, unsigned char *buffer) { + struct cdrom_tocentry entry; + + if (cdHandle < 1) { + memset(buffer + 1, 0, 3); + return 0; + } + + if (track == 0) + track = 0xaa; // total time + entry.cdte_track = track; + entry.cdte_format = CDROM_MSF; + + 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 */ + + return 0; +} + +// normal reading +long ReadNormal() { + if (ioctl(cdHandle, CDROMREADRAW, &cr) == -1) + return -1; + + return 0; +} + +unsigned char* GetBNormal() { + return cdbuffer; +} + +// threaded reading (with cache) +long ReadThreaded() { + int addr = msf_to_lba(cr.msf.cdmsf_min0, cr.msf.cdmsf_sec0, cr.msf.cdmsf_frame0); + int i; + + if (addr >= cacheaddr && addr < (cacheaddr + CacheSize) && + cacheaddr != -1) { + i = addr - cacheaddr; +// printf("found %d\n", (addr - cacheaddr)); + cdbuffer = cdcache[i].cr.buf + 12; + while (btoi(cdbuffer[0]) != cr.msf.cdmsf_min0 || + btoi(cdbuffer[1]) != cr.msf.cdmsf_sec0 || + btoi(cdbuffer[2]) != cr.msf.cdmsf_frame0) { + if (locked == 1) { + if (cdcache[i].ret == 0) break; + return -1; + } + usleep(5000); + } +// printf("%x:%x:%x, %p, %p\n", cdbuffer[0], cdbuffer[1], cdbuffer[2], cdbuffer, cdcache); + found = 1; + + return 0; + } else found = 0; + + if (locked == 0) { + stopth = 1; + while (locked == 0) { usleep(5000); } + stopth = 0; + } + + // not found in cache + locked = 0; + pthread_mutex_lock(&mut); + pthread_cond_signal(&cond); + pthread_mutex_unlock(&mut); + + return 0; +} + +unsigned char* GetBThreaded() { +// printf("threadc %d\n", found); + if (found == 1) { found = 0; return cdbuffer; } + cdbuffer = cdcache[0].cr.buf + 12; + while (btoi(cdbuffer[0]) != cr.msf.cdmsf_min0 || + btoi(cdbuffer[1]) != cr.msf.cdmsf_sec0 || + btoi(cdbuffer[2]) != cr.msf.cdmsf_frame0) { + if (locked == 1) return NULL; + usleep(5000); + } + if (cdcache[0].ret == -1) return NULL; + + return cdbuffer; +} + + +// read track +// time: +// byte 0 - minute +// byte 1 - second +// byte 2 - frame +// uses bcd format +long CDRreadTrack(unsigned char *time) { + if (cdHandle < 1) { + memset(cr.buf, 0, DATA_SIZE); + return 0; + } + +// printf("CDRreadTrack %d:%d:%d\n", btoi(time[0]), btoi(time[1]), btoi(time[2])); + + if (UseSubQ) memcpy(lastTime, time, 3); + subqread = 0; + + cr.msf.cdmsf_min0 = btoi(time[0]); + cr.msf.cdmsf_sec0 = btoi(time[1]); + cr.msf.cdmsf_frame0 = btoi(time[2]); + + return fReadTrack(); +} + +void *CdrThread(void *arg) { + unsigned char curTime[3]; + int i; + + for (;;) { + locked = 1; + pthread_mutex_lock(&mut); + pthread_cond_wait(&cond, &mut); + + if (stopth == 2) pthread_exit(NULL); + // refill the buffer + cacheaddr = msf_to_lba(cr.msf.cdmsf_min0, cr.msf.cdmsf_sec0, cr.msf.cdmsf_frame0); + + memcpy(curTime, &cr.msf, 3); + +// printf("start thc %d:%d:%d\n", curTime[0], curTime[1], curTime[2]); + + for (i=0; i<CacheSize; i++) { + memcpy(&cdcache[i].cr.msf, curTime, 3); +// printf("reading %d:%d:%d\n", crp.msf.cdmsf_min0, crp.msf.cdmsf_sec0, crp.msf.cdmsf_frame0); + cdcache[i].ret = ioctl(cdHandle, CDROMREADRAW, &cdcache[i].cr); + +// printf("readed %x:%x:%x\n", crd.buf[12], crd.buf[13], crd.buf[14]); + if (cdcache[i].ret == -1) break; + + curTime[2]++; + if (curTime[2] == 75) { + curTime[2] = 0; + curTime[1]++; + if (curTime[1] == 60) { + curTime[1] = 0; + curTime[0]++; + } + } + + if (stopth) break; + } + + pthread_mutex_unlock(&mut); + } + + return NULL; +} + +// return readed track +unsigned char *CDRgetBuffer(void) { + return fGetBuffer(); +} + +// plays cdda audio +// sector: +// byte 0 - minute +// byte 1 - second +// byte 2 - frame +// does NOT uses bcd format +long CDRplay(unsigned char *sector) { + struct cdrom_msf addr; + unsigned char ptmp[4]; + + if (cdHandle < 1) + return 0; + + // 0 is the last track of every cdrom, so play up to there + if (CDRgetTD(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(cdHandle, CDROMPLAYMSF, &addr) == -1) + return -1; + + playing = 1; + + return 0; +} + +// stops cdda audio +long CDRstop(void) { + struct cdrom_subchnl sc; + + if (cdHandle < 1) + return 0; + + sc.cdsc_format = CDROM_MSF; + if (ioctl(cdHandle, CDROMSUBCHNL, &sc) == -1) + return -1; + + switch (sc.cdsc_audiostatus) { + case CDROM_AUDIO_PAUSED: + case CDROM_AUDIO_PLAY: + ioctl(cdHandle, CDROMSTOP); + break; + } + + playing = 0; + + return 0; +} + +struct CdrStat { + unsigned long Type; + unsigned long Status; + unsigned char Time[3]; // current playing time +}; + +struct CdrStat ostat; + +// reads cdr status +// type: +// 0x00 - unknown +// 0x01 - data +// 0x02 - audio +// 0xff - no cdrom +// status: (only shell open supported) +// 0x00 - unknown +// 0x01 - error +// 0x04 - seek error +// 0x10 - shell open +// 0x20 - reading +// 0x40 - seeking +// 0x80 - playing +// time: +// byte 0 - minute +// byte 1 - second +// byte 2 - frame + +long CDRgetStatus(struct CdrStat *stat) { + struct cdrom_subchnl sc; + int ret; + static time_t to; + + if (cdHandle < 1) + return -1; + + if (!playing) { // if not playing update stat only once in a second + if (to < time(NULL)) { + to = time(NULL); + } else { + memcpy(stat, &ostat, sizeof(struct CdrStat)); + return 0; + } + } + + memset(stat, 0, sizeof(struct CdrStat)); + + if (playing) { // return Time only if playing + sc.cdsc_format = CDROM_MSF; + if (ioctl(cdHandle, CDROMSUBCHNL, &sc) != -1) + memcpy(stat->Time, &sc.cdsc_absaddr.msf, 3); + } + + ret = ioctl(cdHandle, CDROM_DISC_STATUS); + switch (ret) { + case CDS_AUDIO: + stat->Type = 0x02; + break; + case CDS_DATA_1: + case CDS_DATA_2: + case CDS_XA_2_1: + case CDS_XA_2_2: + stat->Type = 0x01; + break; + } + ret = ioctl(cdHandle, CDROM_DRIVE_STATUS); + switch (ret) { + case CDS_NO_DISC: + case CDS_TRAY_OPEN: + stat->Type = 0xff; + stat->Status |= 0x10; + break; + default: + ioctl(cdHandle, CDROM_LOCKDOOR, 0); + break; + } + + switch (sc.cdsc_audiostatus) { + case CDROM_AUDIO_PLAY: + stat->Status |= 0x80; + break; + } + + memcpy(&ostat, stat, sizeof(struct CdrStat)); + + return 0; +} + +struct SubQ { + char res0[11]; + unsigned char ControlAndADR; + unsigned char TrackNumber; + unsigned char IndexNumber; + unsigned char TrackRelativeAddress[3]; + unsigned char Filler; + unsigned char AbsoluteAddress[3]; + char res1[72]; +}; + +struct SubQ subq; + +unsigned char *CDRgetBufferSub(void) { + struct cdrom_subchnl subchnl; + int ret; + + if (!UseSubQ) return NULL; + + if (subqread) return (unsigned char *)&subq; + + cr.msf.cdmsf_min0 = btoi(lastTime[0]); + cr.msf.cdmsf_sec0 = btoi(lastTime[1]); + cr.msf.cdmsf_frame0 = btoi(lastTime[2]); + if (ioctl(cdHandle, CDROMSEEK, &cr.msf) == -1) { + // will be slower, but there's no other way to make it accurate + if (ioctl(cdHandle, CDROMREADRAW, &cr) == -1) return NULL; + } + + subchnl.cdsc_format = CDROM_MSF; + ret = ioctl(cdHandle, CDROMSUBCHNL, &subchnl); + if (ret == -1) return NULL; + + subqread = 1; + + subq.TrackNumber = subchnl.cdsc_trk; + subq.IndexNumber = subchnl.cdsc_ind; + subq.TrackRelativeAddress[0] = itob(subchnl.cdsc_reladdr.msf.minute); + subq.TrackRelativeAddress[1] = itob(subchnl.cdsc_reladdr.msf.second); + subq.TrackRelativeAddress[2] = itob(subchnl.cdsc_reladdr.msf.frame); + subq.AbsoluteAddress[0] = itob(subchnl.cdsc_absaddr.msf.minute); + subq.AbsoluteAddress[1] = itob(subchnl.cdsc_absaddr.msf.second); + subq.AbsoluteAddress[2] = itob(subchnl.cdsc_absaddr.msf.frame); + +#if 0 + 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)); +#endif + + return (unsigned char *)&subq; +} + +void ExecCfg(char *arg) { + char cfg[256]; + struct stat buf; + + strcpy(cfg, "./cfgDFCdrom"); + if (stat(cfg, &buf) != -1) { + strcat(cfg, " "); + strcat(cfg, arg); + system(cfg); + return; + } + + strcpy(cfg, "./cfg/DFCdrom"); + if (stat(cfg, &buf) != -1) { + strcat(cfg, " "); + strcat(cfg, arg); + system(cfg); + return; + } + + printf("cfgDFCdrom file not found!\n"); +} + +long CDRconfigure() { + ExecCfg("configure"); + + return 0; +} + +void CDRabout() { + ExecCfg("about"); +} + +long CDRtest(void) { + cdHandle = open(CdromDev, O_RDONLY); + if (cdHandle == -1) + return -1; + close(cdHandle); + cdHandle = -1; + return 0; +} + +#else + +long CDRinit(void) { + return 0; +} + +long CDRshutdown(void) { + return 0; +} + +long CDRopen(void) { + return 0; +} + +long CDRclose(void) { + return 0; +} + +long CDRgetTN(unsigned char *buffer) { + buffer[0] = 1; + buffer[1] = 1; + return 0; +} + +long CDRgetTD(unsigned char track, unsigned char *buffer) { + memset(buffer + 1, 0, 3); + return 0; +} + +long CDRreadTrack(unsigned char *time) { + return -1; +} + +unsigned char *CDRgetBuffer(void) { + return NULL; +} + +long CDRplay(unsigned char *sector) { + return 0; +} + +long CDRstop(void) { + return 0; +} + +long CDRconfigure() { + return 0; +} + +void CDRabout() { +} + +#endif diff --git a/plugins/dfcdrom/cdr.h b/plugins/dfcdrom/cdr.h new file mode 100644 index 00000000..1f9afbaa --- /dev/null +++ b/plugins/dfcdrom/cdr.h @@ -0,0 +1,68 @@ +#ifndef __CDR_H__ +#define __CDR_H__ + +#ifdef __linux__ +#include <linux/cdrom.h> +#endif + +typedef char HWND; + +#include <stdint.h> +#include "psemu_plugin_defs.h" + +char CdromDev[256]; +long ReadMode; +long UseSubQ; +long CacheSize; +long CdrSpeed; + +#define VERSION 1 + +#ifdef __linux__ + +#define DEV_DEF "/dev/cdrom" +#define NORMAL 0 +#define THREADED 1 +#define READ_MODES 2 + +#define DATA_SIZE (CD_FRAMESIZE_RAW-12) + +#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 union { + struct cdrom_msf msf; + unsigned char buf[CD_FRAMESIZE_RAW]; +} crdata; + +crdata cr; + +typedef struct { + crdata cr; + int ret; +} CacheData; + +CacheData *cdcache; +unsigned char *cdbuffer; +int cacheaddr; + +unsigned char lastTime[3]; +int cdHandle; +pthread_t thread; +int subqread, stopth; +int found, locked; +int playing; + +long ReadNormal(); +long ReadThreaded(); +unsigned char* GetBNormal(); +unsigned char* GetBThreaded(); + +long CDRstop(void); + +void LoadConf(); +void SaveConf(); + +#endif + +#endif /* __CDR_H__ */ diff --git a/plugins/dfcdrom/cfg-gtk2.c b/plugins/dfcdrom/cfg-gtk2.c new file mode 100644 index 00000000..ac3e829a --- /dev/null +++ b/plugins/dfcdrom/cfg-gtk2.c @@ -0,0 +1,62 @@ +/* + * Cdrom for Psemu Pro like Emulators + * + * By: linuzappz <linuzappz@hotmail.com> + * + */ + +#ifdef __linux__ + +#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" + +void LoadConf() { + FILE *f; + char cfg[255]; + + strcpy(CdromDev, DEV_DEF); + ReadMode = THREADED; + UseSubQ = 0; + CacheSize = 64; + CdrSpeed = 0; + + sprintf(cfg, "dfcdrom.cfg"); + f = fopen(cfg, "r"); + if (f == NULL) return; + + fscanf(f, "CdromDev = %s\n", CdromDev); + fscanf(f, "ReadMode = %ld\n", &ReadMode); + fscanf(f, "UseSubQ = %ld\n", &UseSubQ); + fscanf(f, "CacheSize = %ld\n", &CacheSize); + fscanf(f, "CdrSpeed = %ld\n", &CdrSpeed); + fclose(f); + + if (ReadMode >= READ_MODES) ReadMode = THREADED; + if (CacheSize <= 0) CacheSize = 32; + if (CacheSize > 2048) CacheSize = 2048; +} + +void SaveConf() { + FILE *f; + char cfg[255]; + + sprintf(cfg, "dfcdrom.cfg"); + f = fopen(cfg, "w"); + if (f == NULL) + return; + fprintf(f, "CdromDev = %s\n", CdromDev); + fprintf(f, "ReadMode = %ld\n", ReadMode); + fprintf(f, "UseSubQ = %ld\n", UseSubQ); + fprintf(f, "CacheSize = %ld\n", CacheSize); + fprintf(f, "CdrSpeed = %ld\n", CdrSpeed); + fclose(f); +} + +#endif diff --git a/plugins/dfcdrom/cfg.c b/plugins/dfcdrom/cfg.c new file mode 100644 index 00000000..ac3e829a --- /dev/null +++ b/plugins/dfcdrom/cfg.c @@ -0,0 +1,62 @@ +/* + * Cdrom for Psemu Pro like Emulators + * + * By: linuzappz <linuzappz@hotmail.com> + * + */ + +#ifdef __linux__ + +#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" + +void LoadConf() { + FILE *f; + char cfg[255]; + + strcpy(CdromDev, DEV_DEF); + ReadMode = THREADED; + UseSubQ = 0; + CacheSize = 64; + CdrSpeed = 0; + + sprintf(cfg, "dfcdrom.cfg"); + f = fopen(cfg, "r"); + if (f == NULL) return; + + fscanf(f, "CdromDev = %s\n", CdromDev); + fscanf(f, "ReadMode = %ld\n", &ReadMode); + fscanf(f, "UseSubQ = %ld\n", &UseSubQ); + fscanf(f, "CacheSize = %ld\n", &CacheSize); + fscanf(f, "CdrSpeed = %ld\n", &CdrSpeed); + fclose(f); + + if (ReadMode >= READ_MODES) ReadMode = THREADED; + if (CacheSize <= 0) CacheSize = 32; + if (CacheSize > 2048) CacheSize = 2048; +} + +void SaveConf() { + FILE *f; + char cfg[255]; + + sprintf(cfg, "dfcdrom.cfg"); + f = fopen(cfg, "w"); + if (f == NULL) + return; + fprintf(f, "CdromDev = %s\n", CdromDev); + fprintf(f, "ReadMode = %ld\n", ReadMode); + fprintf(f, "UseSubQ = %ld\n", UseSubQ); + fprintf(f, "CacheSize = %ld\n", CacheSize); + fprintf(f, "CdrSpeed = %ld\n", CdrSpeed); + fclose(f); +} + +#endif diff --git a/plugins/dfcdrom/cfgCdr.glade b/plugins/dfcdrom/cfgCdr.glade new file mode 100644 index 00000000..60fa04af --- /dev/null +++ b/plugins/dfcdrom/cfgCdr.glade @@ -0,0 +1,549 @@ +<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> +<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> + +<glade-interface> + +<widget class="GtkDialog" id="cfg_dialog"> + <property name="border_width">5</property> + <property name="visible">True</property> + <property name="title" translatable="yes">CDR configuration</property> + <property name="type">GTK_WINDOW_TOPLEVEL</property> + <property name="window_position">GTK_WIN_POS_CENTER</property> + <property name="modal">True</property> + <property name="resizable">True</property> + <property name="destroy_with_parent">False</property> + <property name="has_separator">False</property> + <signal name="show" handler="on_cfg_dialog_show" last_modification_time="Mon, 18 Nov 2002 09:56:37 GMT"/> + + <child internal-child="vbox"> + <widget class="GtkVBox" id="dialog-vbox1"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> + + <child internal-child="action_area"> + <widget class="GtkHButtonBox" id="cfg_dialog-action_area"> + <property name="visible">True</property> + <property name="layout_style">GTK_BUTTONBOX_END</property> + + <child> + <widget class="GtkButton" id="cfg_cancelbutton"> + <property name="visible">True</property> + <property name="can_default">True</property> + <property name="can_focus">True</property> + <property name="label">gtk-cancel</property> + <property name="use_stock">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="response_id">-6</property> + <signal name="clicked" handler="on_cfg_cancelbutton_clicked" last_modification_time="Sat, 16 Nov 2002 19:25:24 GMT"/> + </widget> + </child> + + <child> + <widget class="GtkButton" id="cfg_okbutton"> + <property name="visible">True</property> + <property name="can_default">True</property> + <property name="can_focus">True</property> + <property name="label">gtk-ok</property> + <property name="use_stock">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="response_id">-5</property> + <signal name="clicked" handler="on_cfg_okbutton_clicked" last_modification_time="Sat, 16 Nov 2002 19:58:18 GMT"/> + </widget> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="pack_type">GTK_PACK_END</property> + </packing> + </child> + + <child> + <widget class="GtkVBox" id="vbox1"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> + + <child> + <widget class="GtkFrame" id="frame1"> + <property name="visible">True</property> + <property name="label_xalign">0</property> + <property name="label_yalign">0.5</property> + <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property> + + <child> + <widget class="GtkCombo" id="cddev_combo"> + <property name="border_width">10</property> + <property name="visible">True</property> + <property name="value_in_list">False</property> + <property name="allow_empty">True</property> + <property name="case_sensitive">False</property> + <property name="enable_arrow_keys">True</property> + <property name="enable_arrows_always">False</property> + + <child internal-child="entry"> + <widget class="GtkEntry" id="cddev_entry"> + <property name="visible">True</property> + <property name="tooltip" translatable="yes">chose yor cdrom device or type its path if it's not listed</property> + <property name="can_focus">True</property> + <property name="editable">True</property> + <property name="visibility">True</property> + <property name="max_length">0</property> + <property name="text" translatable="yes"></property> + <property name="has_frame">True</property> + <property name="invisible_char" translatable="yes">*</property> + <property name="activates_default">True</property> + </widget> + </child> + + <child internal-child="list"> + <widget class="GtkList" id="combo-list1"> + <property name="visible">True</property> + <property name="selection_mode">GTK_SELECTION_BROWSE</property> + </widget> + </child> + </widget> + </child> + + <child> + <widget class="GtkLabel" id="cdr_label"> + <property name="visible">True</property> + <property name="label" translatable="yes">Select cdrom device</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + <packing> + <property name="type">label_item</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + + <child> + <widget class="GtkFrame" id="frame2"> + <property name="visible">True</property> + <property name="label_xalign">0</property> + <property name="label_yalign">0.5</property> + <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property> + + <child> + <widget class="GtkVBox" id="vbox2"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> + + <child> + <widget class="GtkHBox" id="hbox1"> + <property name="border_width">5</property> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> + + <child> + <widget class="GtkLabel" id="readmode_label"> + <property name="visible">True</property> + <property name="label" translatable="yes">Select read mode:</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">5</property> + <property name="ypad">5</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkOptionMenu" id="readmode_optionmenu"> + <property name="border_width">5</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="history">0</property> + + <child> + <widget class="GtkMenu" id="menu1"> + + <child> + <widget class="GtkMenuItem" id="normal"> + <property name="visible">True</property> + <property name="label" translatable="yes">Normal (No Cache)</property> + <property name="use_underline">True</property> + </widget> + </child> + + <child> + <widget class="GtkMenuItem" id="threaded"> + <property name="visible">True</property> + <property name="label" translatable="yes">Threaded - Faster (With Cache)</property> + <property name="use_underline">True</property> + </widget> + </child> + </widget> + </child> + </widget> + <packing> + <property name="padding">1</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkHSeparator" id="hseparator1"> + <property name="visible">True</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + + <child> + <widget class="GtkHBox" id="hbox2"> + <property name="border_width">5</property> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">5</property> + + <child> + <widget class="GtkLabel" id="label4"> + <property name="visible">True</property> + <property name="label" translatable="yes">Cache Size (Def. 64): </property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkSpinButton" id="spinCacheSize"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="climb_rate">1</property> + <property name="digits">0</property> + <property name="numeric">True</property> + <property name="update_policy">GTK_UPDATE_ALWAYS</property> + <property name="snap_to_ticks">False</property> + <property name="wrap">False</property> + <property name="adjustment">32 32 2048 1 16 16</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + + <child> + <widget class="GtkHSeparator" id="hseparator2"> + <property name="visible">True</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + + <child> + <widget class="GtkHBox" id="hbox3"> + <property name="border_width">5</property> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">5</property> + + <child> + <widget class="GtkLabel" id="label5"> + <property name="visible">True</property> + <property name="label" translatable="yes">Cdrom Speed (Def. 0 = MAX): </property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkSpinButton" id="spinCdrSpeed"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="climb_rate">1</property> + <property name="digits">0</property> + <property name="numeric">True</property> + <property name="update_policy">GTK_UPDATE_ALWAYS</property> + <property name="snap_to_ticks">False</property> + <property name="wrap">False</property> + <property name="adjustment">0 0 100 1 4 4</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + + <child> + <widget class="GtkHSeparator" id="cfg_hseparator"> + <property name="visible">True</property> + <accessibility> + <atkproperty name="AtkObject::accessible_name" translatable="yes">hseparator</atkproperty> + </accessibility> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + + <child> + <widget class="GtkCheckButton" id="subQ_button"> + <property name="border_width">10</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">Enable subQ read</property> + <property name="use_underline">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="active">False</property> + <property name="inconsistent">False</property> + <property name="draw_indicator">True</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + </widget> + </child> + + <child> + <widget class="GtkLabel" id="options_label"> + <property name="visible">True</property> + <property name="label" translatable="yes">Options</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + <packing> + <property name="type">label_item</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + </widget> + </child> +</widget> + +<widget class="GtkDialog" id="abt_dialog"> + <property name="border_width">10</property> + <property name="width_request">300</property> + <property name="height_request">200</property> + <property name="visible">True</property> + <property name="title" translatable="yes">About CDR</property> + <property name="type">GTK_WINDOW_TOPLEVEL</property> + <property name="window_position">GTK_WIN_POS_CENTER</property> + <property name="modal">False</property> + <property name="resizable">True</property> + <property name="destroy_with_parent">True</property> + <property name="has_separator">True</property> + + <child internal-child="vbox"> + <widget class="GtkVBox" id="abt_dialog-vbox"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> + + <child internal-child="action_area"> + <widget class="GtkHButtonBox" id="abt_dialog-action_area"> + <property name="visible">True</property> + <property name="layout_style">GTK_BUTTONBOX_END</property> + + <child> + <widget class="GtkButton" id="abt_okbutton"> + <property name="visible">True</property> + <property name="can_default">True</property> + <property name="can_focus">True</property> + <property name="label">gtk-ok</property> + <property name="use_stock">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="response_id">-5</property> + <signal name="clicked" handler="on_abt_okbutton_clicked" last_modification_time="Sat, 16 Nov 2002 19:25:54 GMT"/> + </widget> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="pack_type">GTK_PACK_END</property> + </packing> + </child> + + <child> + <widget class="GtkVBox" id="vbox3"> + <property name="border_width">10</property> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> + + <child> + <widget class="GtkLabel" id="label3"> + <property name="visible">True</property> + <property name="label" translatable="yes"><span size="xx-large"><b>CDR plugin</b></span></property> + <property name="use_underline">False</property> + <property name="use_markup">True</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">5</property> + <property name="ypad">5</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="label1"> + <property name="visible">True</property> + <property name="label" translatable="yes">linux CDR plugin for Pcsx + +</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_FILL</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">5</property> + <property name="ypad">5</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="label" translatable="yes"><small>(c) linuzappz linuzappz@hotmail.com + xobro _xobro_@tin.it</small> +</property> + <property name="use_underline">False</property> + <property name="use_markup">True</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">5</property> + <property name="ypad">5</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + </widget> + </child> +</widget> + +</glade-interface> diff --git a/plugins/dfcdrom/interface.c b/plugins/dfcdrom/interface.c new file mode 100644 index 00000000..bfb24cee --- /dev/null +++ b/plugins/dfcdrom/interface.c @@ -0,0 +1,339 @@ +/* + * DO NOT EDIT THIS FILE - it is generated by Glade. + */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#ifdef __linux__ + +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> +#include <string.h> +#include <stdio.h> + +#include <gdk/gdkkeysyms.h> +#include <gtk/gtk.h> + +#include "callbacks.h" +#include "interface.h" +#include "support.h" + +#define GLADE_HOOKUP_OBJECT(component,widget,name) \ + g_object_set_data_full (G_OBJECT (component), name, \ + gtk_widget_ref (widget), (GDestroyNotify) gtk_widget_unref) + +#define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \ + g_object_set_data (G_OBJECT (component), name, widget) + +GtkWidget* +create_cfg_dialog (void) +{ + GtkWidget *cfg_dialog; + GtkWidget *dialog_vbox1; + GtkWidget *vbox1; + GtkWidget *frame1; + GtkWidget *cddev_combo; + GtkWidget *cddev_entry; + GtkWidget *cdr_label; + GtkWidget *frame2; + GtkWidget *vbox2; + GtkWidget *hbox1; + GtkWidget *readmode_label; + GtkWidget *readmode_optionmenu; + GtkWidget *menu1; + GtkWidget *normal; + GtkWidget *threaded; + GtkWidget *hseparator1; + GtkWidget *hbox2; + GtkWidget *label4; + GtkObject *spinCacheSize_adj; + GtkWidget *spinCacheSize; + GtkWidget *hseparator2; + GtkWidget *hbox3; + GtkWidget *label5; + GtkObject *spinCdrSpeed_adj; + GtkWidget *spinCdrSpeed; + GtkWidget *cfg_hseparator; + AtkObject *atko; + GtkWidget *subQ_button; + GtkWidget *options_label; + GtkWidget *cfg_dialog_action_area; + GtkWidget *cfg_cancelbutton; + GtkWidget *cfg_okbutton; + GtkTooltips *tooltips; + + tooltips = gtk_tooltips_new (); + + cfg_dialog = gtk_dialog_new (); + gtk_container_set_border_width (GTK_CONTAINER (cfg_dialog), 5); + gtk_window_set_title (GTK_WINDOW (cfg_dialog), "CDR configuration"); + gtk_window_set_position (GTK_WINDOW (cfg_dialog), GTK_WIN_POS_CENTER); + gtk_window_set_modal (GTK_WINDOW (cfg_dialog), TRUE); + gtk_dialog_set_has_separator (GTK_DIALOG (cfg_dialog), FALSE); + + dialog_vbox1 = GTK_DIALOG (cfg_dialog)->vbox; + gtk_widget_show (dialog_vbox1); + + vbox1 = gtk_vbox_new (FALSE, 0); + gtk_widget_show (vbox1); + gtk_box_pack_start (GTK_BOX (dialog_vbox1), vbox1, TRUE, TRUE, 0); + + frame1 = gtk_frame_new (NULL); + gtk_widget_show (frame1); + gtk_box_pack_start (GTK_BOX (vbox1), frame1, TRUE, TRUE, 0); + + cddev_combo = gtk_combo_new (); + g_object_set_data (G_OBJECT (GTK_COMBO (cddev_combo)->popwin), + "GladeParentKey", cddev_combo); + gtk_widget_show (cddev_combo); + gtk_container_add (GTK_CONTAINER (frame1), cddev_combo); + gtk_container_set_border_width (GTK_CONTAINER (cddev_combo), 10); + + cddev_entry = GTK_COMBO (cddev_combo)->entry; + gtk_widget_show (cddev_entry); + gtk_tooltips_set_tip (tooltips, cddev_entry, "Choose yor CD-ROM device or type its path if it's not listed", NULL); + gtk_entry_set_activates_default (GTK_ENTRY (cddev_entry), TRUE); + + cdr_label = gtk_label_new ("Select CD-ROM device"); + gtk_widget_show (cdr_label); + gtk_frame_set_label_widget (GTK_FRAME (frame1), cdr_label); + gtk_label_set_justify (GTK_LABEL (cdr_label), GTK_JUSTIFY_LEFT); + + frame2 = gtk_frame_new (NULL); + gtk_widget_show (frame2); + gtk_box_pack_start (GTK_BOX (vbox1), frame2, TRUE, TRUE, 0); + + vbox2 = gtk_vbox_new (FALSE, 0); + gtk_widget_show (vbox2); + gtk_container_add (GTK_CONTAINER (frame2), vbox2); + + hbox1 = gtk_hbox_new (FALSE, 0); + gtk_widget_show (hbox1); + gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0); + gtk_container_set_border_width (GTK_CONTAINER (hbox1), 5); + + readmode_label = gtk_label_new ("Select read mode:"); + gtk_widget_show (readmode_label); + gtk_box_pack_start (GTK_BOX (hbox1), readmode_label, FALSE, FALSE, 0); + gtk_label_set_justify (GTK_LABEL (readmode_label), GTK_JUSTIFY_LEFT); + gtk_misc_set_padding (GTK_MISC (readmode_label), 5, 5); + + readmode_optionmenu = gtk_option_menu_new (); + gtk_widget_show (readmode_optionmenu); + gtk_box_pack_start (GTK_BOX (hbox1), readmode_optionmenu, TRUE, TRUE, 1); + gtk_container_set_border_width (GTK_CONTAINER (readmode_optionmenu), 5); + + menu1 = gtk_menu_new (); + + normal = gtk_menu_item_new_with_mnemonic ("Normal (No Cache)"); + gtk_widget_show (normal); + gtk_container_add (GTK_CONTAINER (menu1), normal); + + threaded = gtk_menu_item_new_with_mnemonic ("Threaded - Faster (With Cache)"); + gtk_widget_show (threaded); + gtk_container_add (GTK_CONTAINER (menu1), threaded); + + gtk_option_menu_set_menu (GTK_OPTION_MENU (readmode_optionmenu), menu1); + + hseparator1 = gtk_hseparator_new (); + gtk_widget_show (hseparator1); + gtk_box_pack_start (GTK_BOX (vbox2), hseparator1, TRUE, TRUE, 0); + + hbox2 = gtk_hbox_new (FALSE, 5); + gtk_widget_show (hbox2); + gtk_box_pack_start (GTK_BOX (vbox2), hbox2, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (hbox2), 5); + + label4 = gtk_label_new ("Cache Size (Def. 64): "); + gtk_widget_show (label4); + gtk_box_pack_start (GTK_BOX (hbox2), label4, FALSE, FALSE, 0); + gtk_label_set_justify (GTK_LABEL (label4), GTK_JUSTIFY_LEFT); + +// spinCacheSize_adj = gtk_adjustment_new (32, 32, 2048, 1, 16, 16); + spinCacheSize_adj = gtk_adjustment_new (32, 32, 2048, 1, 16, 0); + spinCacheSize = gtk_spin_button_new (GTK_ADJUSTMENT (spinCacheSize_adj), 1, 0); + gtk_widget_show (spinCacheSize); + gtk_box_pack_start (GTK_BOX (hbox2), spinCacheSize, TRUE, TRUE, 0); + gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinCacheSize), TRUE); + + hseparator2 = gtk_hseparator_new (); + gtk_widget_show (hseparator2); + gtk_box_pack_start (GTK_BOX (vbox2), hseparator2, TRUE, TRUE, 0); + + hbox3 = gtk_hbox_new (FALSE, 5); + gtk_widget_show (hbox3); + gtk_box_pack_start (GTK_BOX (vbox2), hbox3, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (hbox3), 5); + + label5 = gtk_label_new ("Cdrom Speed (Def. 0 = MAX): "); + gtk_widget_show (label5); + gtk_box_pack_start (GTK_BOX (hbox3), label5, FALSE, FALSE, 0); + gtk_label_set_justify (GTK_LABEL (label5), GTK_JUSTIFY_LEFT); + +// spinCdrSpeed_adj = gtk_adjustment_new (0, 0, 100, 1, 4, 4); + spinCdrSpeed_adj = gtk_adjustment_new (0, 0, 100, 1, 4, 0); + spinCdrSpeed = gtk_spin_button_new (GTK_ADJUSTMENT (spinCdrSpeed_adj), 1, 0); + gtk_widget_show (spinCdrSpeed); + gtk_box_pack_start (GTK_BOX (hbox3), spinCdrSpeed, TRUE, TRUE, 0); + gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinCdrSpeed), TRUE); + + cfg_hseparator = gtk_hseparator_new (); + gtk_widget_show (cfg_hseparator); + gtk_box_pack_start (GTK_BOX (vbox2), cfg_hseparator, TRUE, TRUE, 0); + + subQ_button = gtk_check_button_new_with_mnemonic ("Enable Subchannel read"); + gtk_widget_show (subQ_button); + gtk_box_pack_start (GTK_BOX (vbox2), subQ_button, FALSE, FALSE, 0); + gtk_container_set_border_width (GTK_CONTAINER (subQ_button), 10); + + options_label = gtk_label_new ("Options"); + gtk_widget_show (options_label); + gtk_frame_set_label_widget (GTK_FRAME (frame2), options_label); + gtk_label_set_justify (GTK_LABEL (options_label), GTK_JUSTIFY_LEFT); + + cfg_dialog_action_area = GTK_DIALOG (cfg_dialog)->action_area; + gtk_widget_show (cfg_dialog_action_area); + gtk_button_box_set_layout (GTK_BUTTON_BOX (cfg_dialog_action_area), GTK_BUTTONBOX_END); + + cfg_cancelbutton = gtk_button_new_from_stock ("gtk-cancel"); + gtk_widget_show (cfg_cancelbutton); + gtk_dialog_add_action_widget (GTK_DIALOG (cfg_dialog), cfg_cancelbutton, GTK_RESPONSE_CANCEL); + GTK_WIDGET_SET_FLAGS (cfg_cancelbutton, GTK_CAN_DEFAULT); + + cfg_okbutton = gtk_button_new_from_stock ("gtk-ok"); + gtk_widget_show (cfg_okbutton); + gtk_dialog_add_action_widget (GTK_DIALOG (cfg_dialog), cfg_okbutton, GTK_RESPONSE_OK); + GTK_WIDGET_SET_FLAGS (cfg_okbutton, GTK_CAN_DEFAULT); + + g_signal_connect ((gpointer) cfg_dialog, "show", + G_CALLBACK (on_cfg_dialog_show), + NULL); + g_signal_connect ((gpointer) cfg_cancelbutton, "clicked", + G_CALLBACK (on_cfg_cancelbutton_clicked), + NULL); + g_signal_connect ((gpointer) cfg_dialog, "delete_event", + G_CALLBACK (on_cfg_cancelbutton_clicked), + NULL); + g_signal_connect ((gpointer) cfg_okbutton, "clicked", + G_CALLBACK (on_cfg_okbutton_clicked), + NULL); + + atko = gtk_widget_get_accessible (cfg_hseparator); + atk_object_set_name (atko, "hseparator"); + + + /* Store pointers to all widgets, for use by lookup_widget(). */ + GLADE_HOOKUP_OBJECT_NO_REF (cfg_dialog, cfg_dialog, "cfg_dialog"); + GLADE_HOOKUP_OBJECT_NO_REF (cfg_dialog, dialog_vbox1, "dialog_vbox1"); + GLADE_HOOKUP_OBJECT (cfg_dialog, vbox1, "vbox1"); + GLADE_HOOKUP_OBJECT (cfg_dialog, frame1, "frame1"); + GLADE_HOOKUP_OBJECT (cfg_dialog, cddev_combo, "cddev_combo"); + GLADE_HOOKUP_OBJECT (cfg_dialog, cddev_entry, "cddev_entry"); + GLADE_HOOKUP_OBJECT (cfg_dialog, cdr_label, "cdr_label"); + GLADE_HOOKUP_OBJECT (cfg_dialog, frame2, "frame2"); + GLADE_HOOKUP_OBJECT (cfg_dialog, vbox2, "vbox2"); + GLADE_HOOKUP_OBJECT (cfg_dialog, hbox1, "hbox1"); + GLADE_HOOKUP_OBJECT (cfg_dialog, readmode_label, "readmode_label"); + GLADE_HOOKUP_OBJECT (cfg_dialog, readmode_optionmenu, "readmode_optionmenu"); + GLADE_HOOKUP_OBJECT (cfg_dialog, menu1, "menu1"); + GLADE_HOOKUP_OBJECT (cfg_dialog, normal, "normal"); + GLADE_HOOKUP_OBJECT (cfg_dialog, threaded, "threaded"); + GLADE_HOOKUP_OBJECT (cfg_dialog, hseparator1, "hseparator1"); + GLADE_HOOKUP_OBJECT (cfg_dialog, hbox2, "hbox2"); + GLADE_HOOKUP_OBJECT (cfg_dialog, label4, "label4"); + GLADE_HOOKUP_OBJECT (cfg_dialog, spinCacheSize, "spinCacheSize"); + GLADE_HOOKUP_OBJECT (cfg_dialog, hseparator2, "hseparator2"); + GLADE_HOOKUP_OBJECT (cfg_dialog, hbox3, "hbox3"); + GLADE_HOOKUP_OBJECT (cfg_dialog, label5, "label5"); + GLADE_HOOKUP_OBJECT (cfg_dialog, spinCdrSpeed, "spinCdrSpeed"); + GLADE_HOOKUP_OBJECT (cfg_dialog, cfg_hseparator, "cfg_hseparator"); + GLADE_HOOKUP_OBJECT (cfg_dialog, subQ_button, "subQ_button"); + GLADE_HOOKUP_OBJECT (cfg_dialog, options_label, "options_label"); + GLADE_HOOKUP_OBJECT_NO_REF (cfg_dialog, cfg_dialog_action_area, "cfg_dialog_action_area"); + GLADE_HOOKUP_OBJECT (cfg_dialog, cfg_cancelbutton, "cfg_cancelbutton"); + GLADE_HOOKUP_OBJECT (cfg_dialog, cfg_okbutton, "cfg_okbutton"); + GLADE_HOOKUP_OBJECT_NO_REF (cfg_dialog, tooltips, "tooltips"); + + return cfg_dialog; +} + +GtkWidget* +create_abt_dialog (void) +{ + GtkWidget *abt_dialog; + GtkWidget *abt_dialog_vbox; + GtkWidget *vbox3; + GtkWidget *label3; + GtkWidget *label1; + GtkWidget *label2; + GtkWidget *abt_dialog_action_area; + GtkWidget *abt_okbutton; + + abt_dialog = gtk_dialog_new (); + gtk_widget_set_size_request (abt_dialog, 300, 200); + gtk_container_set_border_width (GTK_CONTAINER (abt_dialog), 10); + gtk_window_set_title (GTK_WINDOW (abt_dialog), "About CDR"); + gtk_window_set_position (GTK_WINDOW (abt_dialog), GTK_WIN_POS_CENTER); + gtk_window_set_destroy_with_parent (GTK_WINDOW (abt_dialog), TRUE); + + abt_dialog_vbox = GTK_DIALOG (abt_dialog)->vbox; + gtk_widget_show (abt_dialog_vbox); + + vbox3 = gtk_vbox_new (FALSE, 0); + gtk_widget_show (vbox3); + gtk_box_pack_start (GTK_BOX (abt_dialog_vbox), vbox3, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (vbox3), 10); + + label3 = gtk_label_new ("<span size=\"xx-large\"><b>CDR plugin</b></span>"); + gtk_widget_show (label3); + gtk_box_pack_start (GTK_BOX (vbox3), label3, FALSE, FALSE, 0); + gtk_label_set_use_markup (GTK_LABEL (label3), TRUE); + gtk_label_set_justify (GTK_LABEL (label3), GTK_JUSTIFY_LEFT); + gtk_misc_set_padding (GTK_MISC (label3), 5, 5); + + label1 = gtk_label_new ("linux CDR plugin for Pcsx\n\n"); + gtk_widget_show (label1); + gtk_box_pack_start (GTK_BOX (vbox3), label1, FALSE, FALSE, 0); + gtk_label_set_justify (GTK_LABEL (label1), GTK_JUSTIFY_FILL); + gtk_misc_set_padding (GTK_MISC (label1), 5, 5); + + label2 = gtk_label_new ("<small>(c) linuzappz linuzappz@hotmail.com\n xobro _xobro_@tin.it</small>\n"); + gtk_widget_show (label2); + gtk_box_pack_start (GTK_BOX (vbox3), label2, FALSE, FALSE, 0); + gtk_label_set_use_markup (GTK_LABEL (label2), TRUE); + gtk_label_set_justify (GTK_LABEL (label2), GTK_JUSTIFY_LEFT); + gtk_misc_set_padding (GTK_MISC (label2), 5, 5); + + abt_dialog_action_area = GTK_DIALOG (abt_dialog)->action_area; + gtk_widget_show (abt_dialog_action_area); + gtk_button_box_set_layout (GTK_BUTTON_BOX (abt_dialog_action_area), GTK_BUTTONBOX_END); + + abt_okbutton = gtk_button_new_from_stock ("gtk-ok"); + gtk_widget_show (abt_okbutton); + gtk_dialog_add_action_widget (GTK_DIALOG (abt_dialog), abt_okbutton, GTK_RESPONSE_OK); + GTK_WIDGET_SET_FLAGS (abt_okbutton, GTK_CAN_DEFAULT); + + g_signal_connect ((gpointer) abt_okbutton, "clicked", + G_CALLBACK (on_abt_okbutton_clicked), + NULL); + g_signal_connect ((gpointer) abt_dialog, "delete_event", + G_CALLBACK (on_abt_okbutton_clicked), + NULL); + + /* Store pointers to all widgets, for use by lookup_widget(). */ + GLADE_HOOKUP_OBJECT_NO_REF (abt_dialog, abt_dialog, "abt_dialog"); + GLADE_HOOKUP_OBJECT_NO_REF (abt_dialog, abt_dialog_vbox, "abt_dialog_vbox"); + GLADE_HOOKUP_OBJECT (abt_dialog, vbox3, "vbox3"); + GLADE_HOOKUP_OBJECT (abt_dialog, label3, "label3"); + GLADE_HOOKUP_OBJECT (abt_dialog, label1, "label1"); + GLADE_HOOKUP_OBJECT (abt_dialog, label2, "label2"); + GLADE_HOOKUP_OBJECT_NO_REF (abt_dialog, abt_dialog_action_area, "abt_dialog_action_area"); + GLADE_HOOKUP_OBJECT (abt_dialog, abt_okbutton, "abt_okbutton"); + + return abt_dialog; +} + +#endif diff --git a/plugins/dfcdrom/interface.h b/plugins/dfcdrom/interface.h new file mode 100644 index 00000000..e23e1adb --- /dev/null +++ b/plugins/dfcdrom/interface.h @@ -0,0 +1,6 @@ +/* + * DO NOT EDIT THIS FILE - it is generated by Glade. + */ + +GtkWidget* create_cfg_dialog (void); +GtkWidget* create_abt_dialog (void); diff --git a/plugins/dfcdrom/main.c b/plugins/dfcdrom/main.c new file mode 100644 index 00000000..2b591045 --- /dev/null +++ b/plugins/dfcdrom/main.c @@ -0,0 +1,32 @@ + +#include <string.h> +#include <gtk/gtk.h> + +#include "interface.h" +#include "support.h" + +int main (int argc, char *argv[]) +{ +#ifdef __linux__ + GtkWidget *cfg_dialog; + GtkWidget *abt_dialog; + + gtk_set_locale (); + gtk_init (&argc, &argv); + + if (argc != 2) return 0; + + if (!strcmp(argv[1], "configure")) { + cfg_dialog = create_cfg_dialog (); + gtk_widget_show (cfg_dialog); + gtk_main (); + } else { + abt_dialog = create_abt_dialog (); + gtk_widget_show (abt_dialog); + gtk_main (); + } +#endif + return 0; +} + + diff --git a/plugins/dfcdrom/support.c b/plugins/dfcdrom/support.c new file mode 100644 index 00000000..9da69992 --- /dev/null +++ b/plugins/dfcdrom/support.c @@ -0,0 +1,147 @@ +/* + * DO NOT EDIT THIS FILE - it is generated by Glade. + */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#ifdef __linux__ + +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> +#include <string.h> +#include <stdio.h> + +#include <gtk/gtk.h> + +#include "support.h" + +GtkWidget* +lookup_widget (GtkWidget *widget, + const gchar *widget_name) +{ + GtkWidget *parent, *found_widget; + + for (;;) + { + if (GTK_IS_MENU (widget)) + parent = gtk_menu_get_attach_widget (GTK_MENU (widget)); + else + parent = widget->parent; + if (!parent) + parent = g_object_get_data (G_OBJECT (widget), "GladeParentKey"); + if (parent == NULL) + break; + widget = parent; + } + + found_widget = (GtkWidget*) g_object_get_data (G_OBJECT (widget), + widget_name); + if (!found_widget) + g_warning ("Widget not found: %s", widget_name); + return found_widget; +} + +static GList *pixmaps_directories = NULL; + +/* Use this function to set the directory containing installed pixmaps. */ +void +add_pixmap_directory (const gchar *directory) +{ + pixmaps_directories = g_list_prepend (pixmaps_directories, + g_strdup (directory)); +} + +/* This is an internally used function to find pixmap files. */ +static gchar* +find_pixmap_file (const gchar *filename) +{ + GList *elem; + + /* We step through each of the pixmaps directory to find it. */ + elem = pixmaps_directories; + while (elem) + { + gchar *pathname = g_strdup_printf ("%s%s%s", (gchar*)elem->data, + G_DIR_SEPARATOR_S, filename); + if (g_file_test (pathname, G_FILE_TEST_EXISTS)) + return pathname; + g_free (pathname); + elem = elem->next; + } + return NULL; +} + +/* This is an internally used function to create pixmaps. */ +GtkWidget* +create_pixmap (GtkWidget *widget, + const gchar *filename) +{ + gchar *pathname = NULL; + GtkWidget *pixmap; + + if (!filename || !filename[0]) + return gtk_image_new (); + + pathname = find_pixmap_file (filename); + + if (!pathname) + { + g_warning ("Couldn't find pixmap file: %s", filename); + return gtk_image_new (); + } + + pixmap = gtk_image_new_from_file (pathname); + g_free (pathname); + return pixmap; +} + +/* This is an internally used function to create pixmaps. */ +GdkPixbuf* +create_pixbuf (const gchar *filename) +{ + gchar *pathname = NULL; + GdkPixbuf *pixbuf; + GError *error = NULL; + + if (!filename || !filename[0]) + return NULL; + + pathname = find_pixmap_file (filename); + + if (!pathname) + { + g_warning ("Couldn't find pixmap file: %s", filename); + return NULL; + } + + pixbuf = gdk_pixbuf_new_from_file (pathname, &error); + if (!pixbuf) + { + fprintf (stderr, "Failed to load pixbuf file: %s: %s\n", + pathname, error->message); + g_error_free (error); + } + g_free (pathname); + return pixbuf; +} + +/* This is used to set ATK action descriptions. */ +void +glade_set_atk_action_description (AtkAction *action, + const gchar *action_name, + const gchar *description) +{ + gint n_actions, i; + + n_actions = atk_action_get_n_actions (action); + for (i = 0; i < n_actions; i++) + { + if (!strcmp (atk_action_get_name (action, i), action_name)) + atk_action_set_description (action, i, description); + } +} + +#endif diff --git a/plugins/dfcdrom/support.h b/plugins/dfcdrom/support.h new file mode 100644 index 00000000..2dea079c --- /dev/null +++ b/plugins/dfcdrom/support.h @@ -0,0 +1,44 @@ +/* + * DO NOT EDIT THIS FILE - it is generated by Glade. + */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <gtk/gtk.h> + +/* + * Public Functions. + */ + +/* + * This function returns a widget in a component created by Glade. + * Call it with the toplevel widget in the component (i.e. a window/dialog), + * or alternatively any widget in the component, and the name of the widget + * you want returned. + */ +GtkWidget* lookup_widget (GtkWidget *widget, + const gchar *widget_name); + + +/* Use this function to set the directory containing installed pixmaps. */ +void add_pixmap_directory (const gchar *directory); + + +/* + * Private Functions. + */ + +/* This is used to create the pixmaps used in the interface. */ +GtkWidget* create_pixmap (GtkWidget *widget, + const gchar *filename); + +/* This is used to create the pixbufs used in the interface. */ +GdkPixbuf* create_pixbuf (const gchar *filename); + +/* This is used to set ATK action descriptions. */ +void glade_set_atk_action_description (AtkAction *action, + const gchar *action_name, + const gchar *description); + |
