summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2009-10-25 14:21:02 +0000
committerSND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2009-10-25 14:21:02 +0000
commit7d0f136239c4dcee9f27adf9f7a8c262fcbfe95f (patch)
tree18b5c5292a39fcda65327e2dd32e44e70ef8e5ff
parent5408345d8b1cde19a19ddf324d3439ead6e80709 (diff)
downloadpcsxr-7d0f136239c4dcee9f27adf9f7a8c262fcbfe95f.tar.gz
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@32889 e17a0e51-4ae3-4d35-97c3-1a29b211df97
-rw-r--r--ChangeLog17
-rw-r--r--Makefile.in3
-rw-r--r--aclocal.m4182
-rwxr-xr-xconfigure353
-rw-r--r--configure.ac2
-rw-r--r--data/Makefile.in3
-rw-r--r--debian/control2
-rw-r--r--doc/Makefile.in3
-rw-r--r--gui/Makefile.in3
-rw-r--r--libpcsxcore/Makefile.in3
-rw-r--r--pixmaps/Makefile.in3
-rw-r--r--plugins/dfcdrom/Makefile.in3
-rw-r--r--plugins/dfinput/Makefile.am9
-rw-r--r--plugins/dfinput/Makefile.in27
-rw-r--r--plugins/dfinput/analog.c62
-rw-r--r--plugins/dfinput/cfg-gtk2.c666
-rw-r--r--plugins/dfinput/cfg.c1558
-rw-r--r--plugins/dfinput/dfinput.glade2508
-rw-r--r--plugins/dfinput/pad.c1323
-rw-r--r--plugins/dfinput/pad.h182
-rw-r--r--plugins/dfinput/padjoy.h82
-rw-r--r--plugins/dfinput/sdljoy.c112
-rw-r--r--plugins/dfinput/xkb.c97
-rw-r--r--plugins/dfsound/Makefile.in3
-rw-r--r--plugins/dfxvideo/Makefile.in3
-rw-r--r--plugins/peopsxgl/Makefile.in3
-rw-r--r--po/pcsx.pot695
-rw-r--r--po/pt_BR.gmobin42668 -> 40981 bytes
-rw-r--r--po/pt_BR.po1090
-rw-r--r--po/zh_CN.gmobin38102 -> 40377 bytes
-rw-r--r--po/zh_CN.po840
-rw-r--r--po/zh_TW.gmobin30789 -> 29522 bytes
-rw-r--r--po/zh_TW.po1036
33 files changed, 4877 insertions, 3996 deletions
diff --git a/ChangeLog b/ChangeLog
index ee3e302a..2ce8286f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+October 25, 2009 Wei Mingzhi <weimingzhi@gmail.com>
+
+ * plugins/dfinput/cfg.c: Replaced dfinput with new SDL/Xkb-based input plugin.
+ * plugins/dfinput/analog.c: Likewise.
+ * plugins/dfinput/Makefile.in: Likewise.
+ * plugins/dfinput/cfg-gtk2.c: Likewise.
+ * plugins/dfinput/pad.c: Likewise.
+ * plugins/dfinput/sdljoy.c: Likewise.
+ * plugins/dfinput/xkb.c: Likewise.
+ * plugins/dfinput/dfinput.glade2: Likewise.
+ * plugins/dfinput/Makefile.am: Likewise.
+ * plugins/dfinput/pad.h: Likewise.
+ * plugins/dfinput/padjoy.h: Removed.
+ * configure.ac: Check for SDL on configure.
+ * debian/control: Added libsdl1.2-dev to Build-Depends.
+ * po/pt_BR.po, po/zh_TW.po, po/zh_CN.po, po/pcsx.pot: Updated.
+
October 24, 2009 Wei Mingzhi <weimingzhi@gmail.com>
* macosx/Pcsx.xcodeproj/project.pbxproj: Fixed Mac OS X build.
diff --git a/Makefile.in b/Makefile.in
index 3096b326..5dbe2b28 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -153,6 +153,9 @@ PEOPSXGL = @PEOPSXGL@
PKG_CONFIG = @PKG_CONFIG@
POSUB = @POSUB@
RANLIB = @RANLIB@
+SDL_CFLAGS = @SDL_CFLAGS@
+SDL_CONFIG = @SDL_CONFIG@
+SDL_LIBS = @SDL_LIBS@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
diff --git a/aclocal.m4 b/aclocal.m4
index 0a72d1ae..7aa5c329 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -10336,6 +10336,188 @@ fi
AC_SUBST($1)dnl
])
+# Configure paths for SDL
+# Sam Lantinga 9/21/99
+# stolen from Manish Singh
+# stolen back from Frank Belew
+# stolen from Manish Singh
+# Shamelessly stolen from Owen Taylor
+
+dnl AM_PATH_SDL([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS
+dnl
+AC_DEFUN([AM_PATH_SDL],
+[dnl
+dnl Get the cflags and libraries from the sdl-config script
+dnl
+AC_ARG_WITH(sdl-prefix,[ --with-sdl-prefix=PFX Prefix where SDL is installed (optional)],
+ sdl_prefix="$withval", sdl_prefix="")
+AC_ARG_WITH(sdl-exec-prefix,[ --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)],
+ sdl_exec_prefix="$withval", sdl_exec_prefix="")
+AC_ARG_ENABLE(sdltest, [ --disable-sdltest Do not try to compile and run a test SDL program],
+ , enable_sdltest=yes)
+
+ if test x$sdl_exec_prefix != x ; then
+ sdl_config_args="$sdl_config_args --exec-prefix=$sdl_exec_prefix"
+ if test x${SDL_CONFIG+set} != xset ; then
+ SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config
+ fi
+ fi
+ if test x$sdl_prefix != x ; then
+ sdl_config_args="$sdl_config_args --prefix=$sdl_prefix"
+ if test x${SDL_CONFIG+set} != xset ; then
+ SDL_CONFIG=$sdl_prefix/bin/sdl-config
+ fi
+ fi
+
+ if test "x$prefix" != xNONE; then
+ PATH="$prefix/bin:$prefix/usr/bin:$PATH"
+ fi
+ AC_PATH_PROG(SDL_CONFIG, sdl-config, no, [$PATH])
+ min_sdl_version=ifelse([$1], ,0.11.0,$1)
+ AC_MSG_CHECKING(for SDL - version >= $min_sdl_version)
+ no_sdl=""
+ if test "$SDL_CONFIG" = "no" ; then
+ no_sdl=yes
+ else
+ SDL_CFLAGS=`$SDL_CONFIG $sdl_config_args --cflags`
+ SDL_LIBS=`$SDL_CONFIG $sdl_config_args --libs`
+
+ sdl_major_version=`$SDL_CONFIG $sdl_config_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+ sdl_minor_version=`$SDL_CONFIG $sdl_config_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+ sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+ if test "x$enable_sdltest" = "xyes" ; then
+ ac_save_CFLAGS="$CFLAGS"
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ ac_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $SDL_CFLAGS"
+ CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
+ LIBS="$LIBS $SDL_LIBS"
+dnl
+dnl Now check if the installed SDL is sufficiently new. (Also sanity
+dnl checks the results of sdl-config to some extent
+dnl
+ rm -f conf.sdltest
+ AC_TRY_RUN([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "SDL.h"
+
+char*
+my_strdup (char *str)
+{
+ char *new_str;
+
+ if (str)
+ {
+ new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char));
+ strcpy (new_str, str);
+ }
+ else
+ new_str = NULL;
+
+ return new_str;
+}
+
+int main (int argc, char *argv[])
+{
+ int major, minor, micro;
+ char *tmp_version;
+
+ /* This hangs on some systems (?)
+ system ("touch conf.sdltest");
+ */
+ { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); }
+
+ /* HP/UX 9 (%@#!) writes to sscanf strings */
+ tmp_version = my_strdup("$min_sdl_version");
+ if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
+ printf("%s, bad version string\n", "$min_sdl_version");
+ exit(1);
+ }
+
+ if (($sdl_major_version > major) ||
+ (($sdl_major_version == major) && ($sdl_minor_version > minor)) ||
+ (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro)))
+ {
+ return 0;
+ }
+ else
+ {
+ printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version);
+ printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro);
+ printf("*** best to upgrade to the required version.\n");
+ printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n");
+ printf("*** to point to the correct copy of sdl-config, and remove the file\n");
+ printf("*** config.cache before re-running configure\n");
+ return 1;
+ }
+}
+
+],, no_sdl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+ CFLAGS="$ac_save_CFLAGS"
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ if test "x$no_sdl" = x ; then
+ AC_MSG_RESULT(yes)
+ ifelse([$2], , :, [$2])
+ else
+ AC_MSG_RESULT(no)
+ if test "$SDL_CONFIG" = "no" ; then
+ echo "*** The sdl-config script installed by SDL could not be found"
+ echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in"
+ echo "*** your path, or set the SDL_CONFIG environment variable to the"
+ echo "*** full path to sdl-config."
+ else
+ if test -f conf.sdltest ; then
+ :
+ else
+ echo "*** Could not run SDL test program, checking why..."
+ CFLAGS="$CFLAGS $SDL_CFLAGS"
+ CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
+ LIBS="$LIBS $SDL_LIBS"
+ AC_TRY_LINK([
+#include <stdio.h>
+#include "SDL.h"
+
+int main(int argc, char *argv[])
+{ return 0; }
+#undef main
+#define main K_and_R_C_main
+], [ return 0; ],
+ [ echo "*** The test program compiled, but did not run. This usually means"
+ echo "*** that the run-time linker is not finding SDL or finding the wrong"
+ echo "*** version of SDL. If it is not finding SDL, you'll need to set your"
+ echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+ echo "*** to the installed location Also, make sure you have run ldconfig if that"
+ echo "*** is required on your system"
+ echo "***"
+ echo "*** If you have an old version installed, it is best to remove it, although"
+ echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
+ [ echo "*** The test program failed to compile or link. See the file config.log for the"
+ echo "*** exact error that occured. This usually means SDL was incorrectly installed"
+ echo "*** or that you have moved SDL since it was installed. In the latter case, you"
+ echo "*** may want to edit the sdl-config script: $SDL_CONFIG" ])
+ CFLAGS="$ac_save_CFLAGS"
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ SDL_CFLAGS=""
+ SDL_LIBS=""
+ ifelse([$3], , :, [$3])
+ fi
+ AC_SUBST(SDL_CFLAGS)
+ AC_SUBST(SDL_LIBS)
+ rm -f conf.sdltest
+])
+
# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
diff --git a/configure b/configure
index 52a60126..40c9b652 100755
--- a/configure
+++ b/configure
@@ -801,6 +801,9 @@ HAVE_ALSA_FALSE
HAVE_ALSA_TRUE
HAVE_OSS_FALSE
HAVE_OSS_TRUE
+SDL_LIBS
+SDL_CFLAGS
+SDL_CONFIG
GLADE2_LIBS
GLADE2_CFLAGS
GTK2_LIBS
@@ -957,6 +960,9 @@ enable_nls
enable_rpath
with_libiconv_prefix
with_libintl_prefix
+with_sdl_prefix
+with_sdl_exec_prefix
+enable_sdltest
enable_alsa
enable_opengl
enable_dynarec
@@ -1621,6 +1627,7 @@ Optional Features:
--disable-libtool-lock avoid locking (might break parallel builds)
--disable-nls do not use Native Language Support
--disable-rpath do not hardcode runtime library paths
+ --disable-sdltest Do not try to compile and run a test SDL program
--enable-alsa use ALSA sound output (default=no)
--enable-opengl build OpenGL plugin (default=no)
--enable-dynarec=... force selection of dynamic recompiler platform (x86, x86_64, ppc) (default: autodetect)
@@ -1636,6 +1643,8 @@ Optional Packages:
--without-libiconv-prefix don't search for libiconv in includedir and libdir
--with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib
--without-libintl-prefix don't search for libintl in includedir and libdir
+ --with-sdl-prefix=PFX Prefix where SDL is installed (optional)
+ --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)
Some influential environment variables:
CC C compiler command
@@ -4594,13 +4603,13 @@ if test "${lt_cv_nm_interface+set}" = set; then
else
lt_cv_nm_interface="BSD nm"
echo "int some_variable = 0;" > conftest.$ac_ext
- (eval echo "\"\$as_me:4597: $ac_compile\"" >&5)
+ (eval echo "\"\$as_me:4606: $ac_compile\"" >&5)
(eval "$ac_compile" 2>conftest.err)
cat conftest.err >&5
- (eval echo "\"\$as_me:4600: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+ (eval echo "\"\$as_me:4609: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
(eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
cat conftest.err >&5
- (eval echo "\"\$as_me:4603: output\"" >&5)
+ (eval echo "\"\$as_me:4612: output\"" >&5)
cat conftest.out >&5
if $GREP 'External.*some_variable' conftest.out > /dev/null; then
lt_cv_nm_interface="MS dumpbin"
@@ -5806,7 +5815,7 @@ ia64-*-hpux*)
;;
*-*-irix6*)
# Find out which ABI we are using.
- echo '#line 5809 "configure"' > conftest.$ac_ext
+ echo '#line 5818 "configure"' > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
@@ -7629,11 +7638,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:7632: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:7641: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:7636: \$? = $ac_status" >&5
+ echo "$as_me:7645: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -7968,11 +7977,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:7971: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:7980: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:7975: \$? = $ac_status" >&5
+ echo "$as_me:7984: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -8073,11 +8082,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:8076: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:8085: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:8080: \$? = $ac_status" >&5
+ echo "$as_me:8089: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -8128,11 +8137,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:8131: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:8140: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:8135: \$? = $ac_status" >&5
+ echo "$as_me:8144: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -10941,7 +10950,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10944 "configure"
+#line 10953 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11037,7 +11046,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11040 "configure"
+#line 11049 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -14162,6 +14171,322 @@ $as_echo "yes" >&6; }
fi
+# Check whether --with-sdl-prefix was given.
+if test "${with_sdl_prefix+set}" = set; then
+ withval=$with_sdl_prefix; sdl_prefix="$withval"
+else
+ sdl_prefix=""
+fi
+
+
+# Check whether --with-sdl-exec-prefix was given.
+if test "${with_sdl_exec_prefix+set}" = set; then
+ withval=$with_sdl_exec_prefix; sdl_exec_prefix="$withval"
+else
+ sdl_exec_prefix=""
+fi
+
+# Check whether --enable-sdltest was given.
+if test "${enable_sdltest+set}" = set; then
+ enableval=$enable_sdltest;
+else
+ enable_sdltest=yes
+fi
+
+
+ if test x$sdl_exec_prefix != x ; then
+ sdl_config_args="$sdl_config_args --exec-prefix=$sdl_exec_prefix"
+ if test x${SDL_CONFIG+set} != xset ; then
+ SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config
+ fi
+ fi
+ if test x$sdl_prefix != x ; then
+ sdl_config_args="$sdl_config_args --prefix=$sdl_prefix"
+ if test x${SDL_CONFIG+set} != xset ; then
+ SDL_CONFIG=$sdl_prefix/bin/sdl-config
+ fi
+ fi
+
+ if test "x$prefix" != xNONE; then
+ PATH="$prefix/bin:$prefix/usr/bin:$PATH"
+ fi
+ # Extract the first word of "sdl-config", so it can be a program name with args.
+set dummy sdl-config; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_SDL_CONFIG+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ case $SDL_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_SDL_CONFIG="$SDL_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_SDL_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_SDL_CONFIG" && ac_cv_path_SDL_CONFIG="no"
+ ;;
+esac
+fi
+SDL_CONFIG=$ac_cv_path_SDL_CONFIG
+if test -n "$SDL_CONFIG"; then
+ { $as_echo "$as_me:$LINENO: result: $SDL_CONFIG" >&5
+$as_echo "$SDL_CONFIG" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ min_sdl_version=1.2.0
+ { $as_echo "$as_me:$LINENO: checking for SDL - version >= $min_sdl_version" >&5
+$as_echo_n "checking for SDL - version >= $min_sdl_version... " >&6; }
+ no_sdl=""
+ if test "$SDL_CONFIG" = "no" ; then
+ no_sdl=yes
+ else
+ SDL_CFLAGS=`$SDL_CONFIG $sdl_config_args --cflags`
+ SDL_LIBS=`$SDL_CONFIG $sdl_config_args --libs`
+
+ sdl_major_version=`$SDL_CONFIG $sdl_config_args --version | \
+ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'`
+ sdl_minor_version=`$SDL_CONFIG $sdl_config_args --version | \
+ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'`
+ sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \
+ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'`
+ if test "x$enable_sdltest" = "xyes" ; then
+ ac_save_CFLAGS="$CFLAGS"
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ ac_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $SDL_CFLAGS"
+ CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
+ LIBS="$LIBS $SDL_LIBS"
+ rm -f conf.sdltest
+ if test "$cross_compiling" = yes; then
+ echo $ac_n "cross compiling; assumed OK... $ac_c"
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "SDL.h"
+
+char*
+my_strdup (char *str)
+{
+ char *new_str;
+
+ if (str)
+ {
+ new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char));
+ strcpy (new_str, str);
+ }
+ else
+ new_str = NULL;
+
+ return new_str;
+}
+
+int main (int argc, char *argv[])
+{
+ int major, minor, micro;
+ char *tmp_version;
+
+ /* This hangs on some systems (?)
+ system ("touch conf.sdltest");
+ */
+ { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); }
+
+ /* HP/UX 9 (%@#!) writes to sscanf strings */
+ tmp_version = my_strdup("$min_sdl_version");
+ if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
+ printf("%s, bad version string\n", "$min_sdl_version");
+ exit(1);
+ }
+
+ if (($sdl_major_version > major) ||
+ (($sdl_major_version == major) && ($sdl_minor_version > minor)) ||
+ (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro)))
+ {
+ return 0;
+ }
+ else
+ {
+ printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version);
+ printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro);
+ printf("*** best to upgrade to the required version.\n");
+ printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n");
+ printf("*** to point to the correct copy of sdl-config, and remove the file\n");
+ printf("*** config.cache before re-running configure\n");
+ return 1;
+ }
+}
+
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+no_sdl=yes
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+ CFLAGS="$ac_save_CFLAGS"
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ if test "x$no_sdl" = x ; then
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+ :
+ else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+ if test "$SDL_CONFIG" = "no" ; then
+ echo "*** The sdl-config script installed by SDL could not be found"
+ echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in"
+ echo "*** your path, or set the SDL_CONFIG environment variable to the"
+ echo "*** full path to sdl-config."
+ else
+ if test -f conf.sdltest ; then
+ :
+ else
+ echo "*** Could not run SDL test program, checking why..."
+ CFLAGS="$CFLAGS $SDL_CFLAGS"
+ CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
+ LIBS="$LIBS $SDL_LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <stdio.h>
+#include "SDL.h"
+
+int main(int argc, char *argv[])
+{ return 0; }
+#undef main
+#define main K_and_R_C_main
+
+int
+main ()
+{
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ echo "*** The test program compiled, but did not run. This usually means"
+ echo "*** that the run-time linker is not finding SDL or finding the wrong"
+ echo "*** version of SDL. If it is not finding SDL, you'll need to set your"
+ echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+ echo "*** to the installed location Also, make sure you have run ldconfig if that"
+ echo "*** is required on your system"
+ echo "***"
+ echo "*** If you have an old version installed, it is best to remove it, although"
+ echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ echo "*** The test program failed to compile or link. See the file config.log for the"
+ echo "*** exact error that occured. This usually means SDL was incorrectly installed"
+ echo "*** or that you have moved SDL since it was installed. In the latter case, you"
+ echo "*** may want to edit the sdl-config script: $SDL_CONFIG"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$ac_save_CFLAGS"
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ SDL_CFLAGS=""
+ SDL_LIBS=""
+ { { $as_echo "$as_me:$LINENO: error: *** SDL not found!" >&5
+$as_echo "$as_me: error: *** SDL not found!" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+
+
+ rm -f conf.sdltest
+
+
+
diff --git a/configure.ac b/configure.ac
index 38124a41..b8dc01d5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -25,6 +25,8 @@ PKG_CHECK_MODULES(GLIB2, glib-2.0, [], AC_MSG_ERROR([*** glib2 not found!]))
PKG_CHECK_MODULES(GTK2, gtk+-2.0, [], AC_MSG_ERROR([*** libgtk2 not found!]))
PKG_CHECK_MODULES(GLADE2, libglade-2.0, [], AC_MSG_ERROR([*** libglade2 not found!]))
+AM_PATH_SDL(1.2.0, :, AC_MSG_ERROR([*** SDL not found!]))
+
AC_SUBST(GLIB2_CFLAGS)
AC_SUBST(GLIB2_LIBS)
AC_SUBST(GTK2_CFLAGS)
diff --git a/data/Makefile.in b/data/Makefile.in
index e93a2f59..16b5582a 100644
--- a/data/Makefile.in
+++ b/data/Makefile.in
@@ -136,6 +136,9 @@ PEOPSXGL = @PEOPSXGL@
PKG_CONFIG = @PKG_CONFIG@
POSUB = @POSUB@
RANLIB = @RANLIB@
+SDL_CFLAGS = @SDL_CFLAGS@
+SDL_CONFIG = @SDL_CONFIG@
+SDL_LIBS = @SDL_LIBS@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
diff --git a/debian/control b/debian/control
index eef840b0..a8bab94b 100644
--- a/debian/control
+++ b/debian/control
@@ -2,7 +2,7 @@ Source: pcsxr
Section: otherosfs
Priority: extra
Maintainer: Wei Mingzhi <whistler@openoffice.org>
-Build-Depends: debhelper (>= 5), libgtk2.0-dev, libglade2-dev, zlib1g-dev | libz-dev, libxv-dev, libxtst-dev, nasm, libbz2-dev, libgl1-mesa-dev, libxxf86vm-dev, libasound2-dev
+Build-Depends: debhelper (>= 5), libgtk2.0-dev, libglade2-dev, zlib1g-dev | libz-dev, libxv-dev, libxtst-dev, nasm, libbz2-dev, libgl1-mesa-dev, libxxf86vm-dev, libasound2-dev, libsdl1.2-dev
Standards-Version: 3.7.3
Package: pcsxr
diff --git a/doc/Makefile.in b/doc/Makefile.in
index 0f37447f..7688ba11 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -129,6 +129,9 @@ PEOPSXGL = @PEOPSXGL@
PKG_CONFIG = @PKG_CONFIG@
POSUB = @POSUB@
RANLIB = @RANLIB@
+SDL_CFLAGS = @SDL_CFLAGS@
+SDL_CONFIG = @SDL_CONFIG@
+SDL_LIBS = @SDL_LIBS@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
diff --git a/gui/Makefile.in b/gui/Makefile.in
index 37066e28..45bbe704 100644
--- a/gui/Makefile.in
+++ b/gui/Makefile.in
@@ -150,6 +150,9 @@ PEOPSXGL = @PEOPSXGL@
PKG_CONFIG = @PKG_CONFIG@
POSUB = @POSUB@
RANLIB = @RANLIB@
+SDL_CFLAGS = @SDL_CFLAGS@
+SDL_CONFIG = @SDL_CONFIG@
+SDL_LIBS = @SDL_LIBS@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
diff --git a/libpcsxcore/Makefile.in b/libpcsxcore/Makefile.in
index 87d9fc77..64f1d0b4 100644
--- a/libpcsxcore/Makefile.in
+++ b/libpcsxcore/Makefile.in
@@ -245,6 +245,9 @@ PEOPSXGL = @PEOPSXGL@
PKG_CONFIG = @PKG_CONFIG@
POSUB = @POSUB@
RANLIB = @RANLIB@
+SDL_CFLAGS = @SDL_CFLAGS@
+SDL_CONFIG = @SDL_CONFIG@
+SDL_LIBS = @SDL_LIBS@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
diff --git a/pixmaps/Makefile.in b/pixmaps/Makefile.in
index 2512b92d..b3bbfb04 100644
--- a/pixmaps/Makefile.in
+++ b/pixmaps/Makefile.in
@@ -136,6 +136,9 @@ PEOPSXGL = @PEOPSXGL@
PKG_CONFIG = @PKG_CONFIG@
POSUB = @POSUB@
RANLIB = @RANLIB@
+SDL_CFLAGS = @SDL_CFLAGS@
+SDL_CONFIG = @SDL_CONFIG@
+SDL_LIBS = @SDL_LIBS@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
diff --git a/plugins/dfcdrom/Makefile.in b/plugins/dfcdrom/Makefile.in
index c6e7cdd3..5e91d951 100644
--- a/plugins/dfcdrom/Makefile.in
+++ b/plugins/dfcdrom/Makefile.in
@@ -164,6 +164,9 @@ PEOPSXGL = @PEOPSXGL@
PKG_CONFIG = @PKG_CONFIG@
POSUB = @POSUB@
RANLIB = @RANLIB@
+SDL_CFLAGS = @SDL_CFLAGS@
+SDL_CONFIG = @SDL_CONFIG@
+SDL_LIBS = @SDL_LIBS@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
diff --git a/plugins/dfinput/Makefile.am b/plugins/dfinput/Makefile.am
index fa20fb13..b600352f 100644
--- a/plugins/dfinput/Makefile.am
+++ b/plugins/dfinput/Makefile.am
@@ -3,19 +3,20 @@ libdir = @libdir@/games/psemu/
lib_LTLIBRARIES = libDFInput.la
-libDFInput_la_SOURCES = pad.c padjoy.h
+libDFInput_la_SOURCES = cfg.c pad.c pad.h sdljoy.c xkb.c analog.c
libDFInput_la_LDFLAGS = -module -avoid-version -lpthread -lX11 \
- -L/usr/X11R6/lib64 -L/usr/X11R6/lib
+ `sdl-config --libs` -L/usr/X11R6/lib64 -L/usr/X11R6/lib
INCLUDES = -DPIXMAPDIR=\"${datadir}/pixmaps/\" \
-DLOCALE_DIR=\"${datadir}/locale/\" \
-DDATADIR=\"${datadir}/psemu/\" \
$(GTK2_CFLAGS) $(GLADE2_CFLAGS) -I/usr/X11R6/include \
- -I../../include
+ -I../../include -I../../libpcsxcore `sdl-config --cflags`
bin_PROGRAMS = cfgDFInput
-cfgDFInput_SOURCES = cfg.c padjoy.h
+cfgDFInput_SOURCES = cfg-gtk2.c pad.h
cfgDFInput_LDADD = $(GTK2_LIBS) $(GLADE2_LIBS)
+cfgDFInput_LDFLAGS = `sdl-config --libs`
glade_DATA = dfinput.glade2
gladedir = $(datadir)/psemu/
diff --git a/plugins/dfinput/Makefile.in b/plugins/dfinput/Makefile.in
index b221dcfe..4a2982ba 100644
--- a/plugins/dfinput/Makefile.in
+++ b/plugins/dfinput/Makefile.in
@@ -56,17 +56,20 @@ am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
libLTLIBRARIES_INSTALL = $(INSTALL)
LTLIBRARIES = $(lib_LTLIBRARIES)
libDFInput_la_LIBADD =
-am_libDFInput_la_OBJECTS = pad.lo
+am_libDFInput_la_OBJECTS = cfg.lo pad.lo sdljoy.lo xkb.lo analog.lo
libDFInput_la_OBJECTS = $(am_libDFInput_la_OBJECTS)
libDFInput_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(libDFInput_la_LDFLAGS) $(LDFLAGS) -o $@
binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
PROGRAMS = $(bin_PROGRAMS)
-am_cfgDFInput_OBJECTS = cfg.$(OBJEXT)
+am_cfgDFInput_OBJECTS = cfg-gtk2.$(OBJEXT)
cfgDFInput_OBJECTS = $(am_cfgDFInput_OBJECTS)
am__DEPENDENCIES_1 =
cfgDFInput_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+cfgDFInput_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(cfgDFInput_LDFLAGS) $(LDFLAGS) -o $@
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
@@ -167,6 +170,9 @@ PEOPSXGL = @PEOPSXGL@
PKG_CONFIG = @PKG_CONFIG@
POSUB = @POSUB@
RANLIB = @RANLIB@
+SDL_CFLAGS = @SDL_CFLAGS@
+SDL_CONFIG = @SDL_CONFIG@
+SDL_LIBS = @SDL_LIBS@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
@@ -233,18 +239,19 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
lib_LTLIBRARIES = libDFInput.la
-libDFInput_la_SOURCES = pad.c padjoy.h
+libDFInput_la_SOURCES = cfg.c pad.c pad.h sdljoy.c xkb.c analog.c
libDFInput_la_LDFLAGS = -module -avoid-version -lpthread -lX11 \
- -L/usr/X11R6/lib64 -L/usr/X11R6/lib
+ `sdl-config --libs` -L/usr/X11R6/lib64 -L/usr/X11R6/lib
INCLUDES = -DPIXMAPDIR=\"${datadir}/pixmaps/\" \
-DLOCALE_DIR=\"${datadir}/locale/\" \
-DDATADIR=\"${datadir}/psemu/\" \
$(GTK2_CFLAGS) $(GLADE2_CFLAGS) -I/usr/X11R6/include \
- -I../../include
+ -I../../include -I../../libpcsxcore `sdl-config --cflags`
-cfgDFInput_SOURCES = cfg.c padjoy.h
+cfgDFInput_SOURCES = cfg-gtk2.c pad.h
cfgDFInput_LDADD = $(GTK2_LIBS) $(GLADE2_LIBS)
+cfgDFInput_LDFLAGS = `sdl-config --libs`
glade_DATA = dfinput.glade2
gladedir = $(datadir)/psemu/
EXTRA_DIST = $(glade_DATA)
@@ -340,7 +347,7 @@ clean-binPROGRAMS:
done
cfgDFInput$(EXEEXT): $(cfgDFInput_OBJECTS) $(cfgDFInput_DEPENDENCIES)
@rm -f cfgDFInput$(EXEEXT)
- $(LINK) $(cfgDFInput_OBJECTS) $(cfgDFInput_LDADD) $(LIBS)
+ $(cfgDFInput_LINK) $(cfgDFInput_OBJECTS) $(cfgDFInput_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -348,8 +355,12 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cfg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/analog.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)/pad.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sdljoy.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xkb.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
diff --git a/plugins/dfinput/analog.c b/plugins/dfinput/analog.c
new file mode 100644
index 00000000..34d3dcbe
--- /dev/null
+++ b/plugins/dfinput/analog.c
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2009, Wei Mingzhi <whistler@openoffice.org>.
+ * All Rights Reserved.
+ *
+ * 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 3 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 "pad.h"
+
+void InitAnalog() {
+ g.PadState[0].AnalogStatus[ANALOG_LEFT][ANALOG_X] = 128;
+ g.PadState[0].AnalogStatus[ANALOG_LEFT][ANALOG_Y] = 128;
+ g.PadState[0].AnalogStatus[ANALOG_RIGHT][ANALOG_X] = 128;
+ g.PadState[0].AnalogStatus[ANALOG_RIGHT][ANALOG_Y] = 128;
+ g.PadState[1].AnalogStatus[ANALOG_LEFT][ANALOG_X] = 128;
+ g.PadState[1].AnalogStatus[ANALOG_LEFT][ANALOG_Y] = 128;
+ g.PadState[1].AnalogStatus[ANALOG_RIGHT][ANALOG_X] = 128;
+ g.PadState[1].AnalogStatus[ANALOG_RIGHT][ANALOG_Y] = 128;
+}
+
+void CheckAnalog() {
+ int i, j, k, val;
+ uint8_t n;
+
+ for (i = 0; i < 2; i++) {
+ if (g.cfg.PadDef[i].Type != PSE_PAD_TYPE_ANALOGPAD) {
+ continue;
+ }
+
+ for (j = 0; j < ANALOG_TOTAL; j++) {
+ for (k = 0; k < 2; k++) {
+ if (g.cfg.PadDef[i].AnalogDef[j][k] == 0) {
+ continue;
+ }
+
+ n = abs(g.cfg.PadDef[i].AnalogDef[j][k]) - 1;
+
+ val = SDL_JoystickGetAxis(g.PadState[i].JoyDev, n);
+
+ val += 32768;
+ val /= 256;
+
+ if (g.cfg.PadDef[i].AnalogDef[j][k] < 0) {
+ g.PadState[i].AnalogStatus[j][k] = 255 - val;
+ } else {
+ g.PadState[i].AnalogStatus[j][k] = val;
+ }
+ }
+ }
+ }
+}
diff --git a/plugins/dfinput/cfg-gtk2.c b/plugins/dfinput/cfg-gtk2.c
new file mode 100644
index 00000000..ae36dcd6
--- /dev/null
+++ b/plugins/dfinput/cfg-gtk2.c
@@ -0,0 +1,666 @@
+/*
+ * Copyright (c) 2009, Wei Mingzhi <whistler@openoffice.org>.
+ * All Rights Reserved.
+ *
+ * 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 3 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 "cfg.c"
+
+#include <time.h>
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+
+GtkWidget *MainWindow;
+
+const int DPad[DKEY_TOTAL] = {
+ DKEY_UP,
+ DKEY_DOWN,
+ DKEY_LEFT,
+ DKEY_RIGHT,
+ DKEY_CROSS,
+ DKEY_CIRCLE,
+ DKEY_SQUARE,
+ DKEY_TRIANGLE,
+ DKEY_L1,
+ DKEY_R1,
+ DKEY_L2,
+ DKEY_R2,
+ DKEY_L3,
+ DKEY_R3,
+ DKEY_SELECT,
+ DKEY_START
+};
+
+const char *DPadText[DKEY_TOTAL] = {
+ N_("D-Pad Up"),
+ N_("D-Pad Down"),
+ N_("D-Pad Left"),
+ N_("D-Pad Right"),
+ N_("Cross"),
+ N_("Circle"),
+ N_("Square"),
+ N_("Triangle"),
+ N_("L1"),
+ N_("R1"),
+ N_("L2"),
+ N_("R2"),
+ N_("L3"),
+ N_("R3"),
+ N_("Select"),
+ N_("Start")
+};
+
+const char *AnalogText[] = {
+ N_("L-Stick X"),
+ N_("L-Stick Y"),
+ N_("R-Stick X"),
+ N_("R-Stick Y")
+};
+
+static int GetSelectedKeyIndex(int padnum) {
+ GladeXML *xml;
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ GtkTreePath *path;
+ gboolean selected;
+ int i;
+
+ xml = glade_get_widget_tree(MainWindow);
+
+ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(glade_xml_get_widget(xml, padnum == 0 ? "treeview1" : "treeview2")));
+ selected = gtk_tree_selection_get_selected(selection, &model, &iter);
+
+ if (!selected) {
+ return -1;
+ }
+
+ path = gtk_tree_model_get_path(model, &iter);
+ i = *gtk_tree_path_get_indices(path);
+
+ return i;
+}
+
+static void GetKeyDescription(char *buf, int joynum, int key) {
+ const char *hatname[16] = {_("Centered"), _("Up"), _("Right"), _("Rightup"),
+ _("Down"), "", _("Rightdown"), "", _("Left"), _("Leftup"), "", "",
+ _("Leftdown"), "", "", ""};
+
+ switch (g.cfg.PadDef[joynum].KeyDef[key].JoyEvType) {
+ case BUTTON:
+ sprintf(buf, _("Joystick: Button %d"), g.cfg.PadDef[joynum].KeyDef[key].J.Button);
+ break;
+
+ case AXIS:
+ sprintf(buf, _("Joystick: Axis %d%c"), abs(g.cfg.PadDef[joynum].KeyDef[key].J.Axis) - 1,
+ g.cfg.PadDef[joynum].KeyDef[key].J.Axis > 0 ? '+' : '-');
+ break;
+
+ case HAT:
+ sprintf(buf, _("Joystick: Hat %d %s"), (g.cfg.PadDef[joynum].KeyDef[key].J.Hat >> 8),
+ hatname[g.cfg.PadDef[joynum].KeyDef[key].J.Hat & 0x0F]);
+ break;
+
+ case NONE:
+ default:
+ buf[0] = '\0';
+ break;
+ }
+
+ if (g.cfg.PadDef[joynum].KeyDef[key].Key != 0) {
+ if (buf[0] != '\0') {
+ strcat(buf, " / ");
+ }
+
+ strcat(buf, _("Keyboard:"));
+ strcat(buf, " ");
+ strcat(buf, XKeysymToString(g.cfg.PadDef[joynum].KeyDef[key].Key));
+ } else if (buf[0] == '\0') {
+ strcpy(buf, _("(Not Set)"));
+ }
+}
+
+static void GetAnalogDescription(char *buf, int joynum, int analognum, int analogaxis) {
+ int16_t v = g.cfg.PadDef[joynum].AnalogDef[analognum][analogaxis];
+
+ if (v == 0) {
+ sprintf(buf, _("(Not Set)"));
+ } else {
+ sprintf(buf, _("Joystick: Axis %d%s"), abs(v) - 1, (v < 0) ? _(" (Reversed)") : "");
+ }
+}
+
+static void UpdateKeyList() {
+ const char *widgetname[2] = {"treeview1", "treeview2"};
+
+ GladeXML *xml;
+ GtkWidget *widget;
+ GtkListStore *store;
+ GtkTreeIter iter;
+ int i, j;
+ char buf[256];
+
+ xml = glade_get_widget_tree(MainWindow);
+
+ for (i = 0; i < 2; i++) {
+ widget = glade_xml_get_widget(xml, widgetname[i]);
+
+ store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
+
+ for (j = 0; j < DKEY_TOTAL; j++) {
+ gtk_list_store_append(store, &iter);
+ GetKeyDescription(buf, i, DPad[j]);
+ gtk_list_store_set(store, &iter, 0, _(DPadText[j]), 1, buf, -1);
+ }
+
+ if (g.cfg.PadDef[i].Type == PSE_PAD_TYPE_ANALOGPAD) {
+ for (j = 0; j < 4; j++) {
+ gtk_list_store_append(store, &iter);
+ GetAnalogDescription(buf, i, j / 2, j % 2);
+ gtk_list_store_set(store, &iter, 0, _(AnalogText[j]), 1, buf, -1);
+ }
+ }
+
+ gtk_tree_view_set_model(GTK_TREE_VIEW(widget), GTK_TREE_MODEL(store));
+ g_object_unref(G_OBJECT(store));
+ gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(widget), TRUE);
+ gtk_widget_show(widget);
+ }
+}
+
+static void UpdateKey() {
+ const char *widgetname[2] = {"treeview1", "treeview2"};
+ int i, index;
+ GladeXML *xml;
+ GtkWidget *widget;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ GValue value = {0, };
+ char buf[256];
+
+ xml = glade_get_widget_tree(MainWindow);
+
+ for (i = 0; i < 2; i++) {
+ index = GetSelectedKeyIndex(i);
+ if (index == -1) continue;
+
+ widget = glade_xml_get_widget(xml, widgetname[i]);
+ gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widget)), &model, &iter);
+
+ if (index < DKEY_TOTAL) {
+ GetKeyDescription(buf, i, DPad[index]);
+ } else {
+ GetAnalogDescription(buf, i, (index - DKEY_TOTAL) / 2, (index - DKEY_TOTAL) % 2);
+ }
+
+ g_value_init(&value, G_TYPE_STRING);
+ g_value_set_string(&value, buf);
+ gtk_list_store_set_value(GTK_LIST_STORE(model), &iter, 1, &value);
+ }
+}
+
+static void OnConfigExit(GtkWidget *widget, gpointer user_data) {
+ SaveConfig();
+
+ gtk_widget_destroy(widget);
+ SDL_Quit();
+
+ gtk_exit(0);
+}
+
+static void TreeSelectionChanged(GtkTreeSelection *selection, gpointer user_data) {
+ GladeXML *xml;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ GtkTreePath *path;
+
+ gboolean selected;
+ int i;
+
+ selected = gtk_tree_selection_get_selected(selection, &model, &iter);
+
+ if (selected) {
+ path = gtk_tree_model_get_path(model, &iter);
+ i = *gtk_tree_path_get_indices(path);
+
+ // If a row was selected, and the row is not blank, we can now enable
+ // some of the disabled widgets
+ xml = glade_get_widget_tree(MainWindow);
+
+ if ((int)user_data == 0) {
+ gtk_widget_set_sensitive(GTK_WIDGET(glade_xml_get_widget(xml, "btnchange1")), TRUE);
+ gtk_widget_set_sensitive(GTK_WIDGET(glade_xml_get_widget(xml, "btnreset1")), TRUE);
+ } else {
+ gtk_widget_set_sensitive(GTK_WIDGET(glade_xml_get_widget(xml, "btnchange2")), TRUE);
+ gtk_widget_set_sensitive(GTK_WIDGET(glade_xml_get_widget(xml, "btnreset2")), TRUE);
+ }
+ } else {
+ xml = glade_get_widget_tree(MainWindow);
+
+ if ((int)user_data == 0) {
+ gtk_widget_set_sensitive(GTK_WIDGET(glade_xml_get_widget(xml, "btnchange1")), FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(glade_xml_get_widget(xml, "btnreset1")), FALSE);
+ } else {
+ gtk_widget_set_sensitive(GTK_WIDGET(glade_xml_get_widget(xml, "btnchange2")), FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(glade_xml_get_widget(xml, "btnreset2")), FALSE);
+ }
+ }
+}
+
+static void OnDeviceChanged(GtkWidget *widget, gpointer user_data) {
+ int n = (int)user_data, current = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
+ current--;
+ g.cfg.PadDef[n].DevNum = current;
+}
+
+static void OnTypeChanged(GtkWidget *widget, gpointer user_data) {
+ int n = (int)user_data, current = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
+ g.cfg.PadDef[n].Type = (current == 0 ? PSE_PAD_TYPE_STANDARD : PSE_PAD_TYPE_ANALOGPAD);
+
+ UpdateKeyList();
+}
+
+static void OnThreadedToggled(GtkWidget *widget, gpointer user_data) {
+ g.cfg.Threaded = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+}
+
+static void SysErrorMessage(gchar *primary, gchar *secondary) {
+ GtkWidget *message_dialog;
+
+ message_dialog = gtk_message_dialog_new(NULL,
+ GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, primary, NULL);
+ gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG (message_dialog), secondary);
+
+ gtk_dialog_run(GTK_DIALOG(message_dialog));
+ gtk_widget_destroy(message_dialog);
+}
+
+static void ReadDKeyEvent(int padnum, int key) {
+ SDL_Joystick *js;
+ time_t t;
+ GdkEvent *ge;
+ int i;
+ Sint16 axis;
+
+ if (g.cfg.PadDef[padnum].DevNum >= 0) {
+ js = SDL_JoystickOpen(g.cfg.PadDef[padnum].DevNum);
+ SDL_JoystickEventState(SDL_IGNORE);
+ } else {
+ js = NULL;
+ }
+
+ t = time(NULL);
+
+ while (time(NULL) < t + 10) {
+ // check joystick events
+ if (js != NULL) {
+ SDL_JoystickUpdate();
+
+ for (i = 0; i < SDL_JoystickNumButtons(js); i++) {
+ if (SDL_JoystickGetButton(js, i)) {
+ g.cfg.PadDef[padnum].KeyDef[key].JoyEvType = BUTTON;
+ g.cfg.PadDef[padnum].KeyDef[key].J.Button = i;
+ goto end;
+ }
+ }
+
+ for (i = 0; i < SDL_JoystickNumAxes(js); i++) {
+ axis = SDL_JoystickGetAxis(js, i);
+ if (abs(axis) > 16383) {
+ g.cfg.PadDef[padnum].KeyDef[key].JoyEvType = AXIS;
+ g.cfg.PadDef[padnum].KeyDef[key].J.Axis = (i + 1) * (axis > 0 ? 1 : -1);
+ goto end;
+ }
+ }
+
+ for (i = 0; i < SDL_JoystickNumHats(js); i++) {
+ axis = SDL_JoystickGetHat(js, i);
+ if (axis != SDL_HAT_CENTERED) {
+ g.cfg.PadDef[padnum].KeyDef[key].JoyEvType = HAT;
+
+ if (axis & SDL_HAT_UP) {
+ g.cfg.PadDef[padnum].KeyDef[key].J.Hat = ((i << 8) | SDL_HAT_UP);
+ } else if (axis & SDL_HAT_DOWN) {
+ g.cfg.PadDef[padnum].KeyDef[key].J.Hat = ((i << 8) | SDL_HAT_DOWN);
+ } else if (axis & SDL_HAT_LEFT) {
+ g.cfg.PadDef[padnum].KeyDef[key].J.Hat = ((i << 8) | SDL_HAT_LEFT);
+ } else if (axis & SDL_HAT_RIGHT) {
+ g.cfg.PadDef[padnum].KeyDef[key].J.Hat = ((i << 8) | SDL_HAT_RIGHT);
+ }
+
+ goto end;
+ }
+ }
+ }
+
+ // check keyboard events
+ while ((ge = gdk_event_get()) != NULL) {
+ if (ge->type == GDK_KEY_PRESS) {
+ if (ge->key.keyval != XK_Escape) {
+ g.cfg.PadDef[padnum].KeyDef[key].Key = ge->key.keyval;
+ }
+ gdk_event_free(ge);
+ goto end;
+ }
+ gdk_event_free(ge);
+ }
+
+ usleep(5000);
+ }
+
+end:
+ if (js != NULL) {
+ SDL_JoystickClose(js);
+ }
+}
+
+static void ReadAnalogEvent(int padnum, int analognum, int analogaxis) {
+ SDL_Joystick *js;
+ time_t t;
+ GdkEvent *ge;
+ int i;
+ Sint16 axis;
+
+ if (g.cfg.PadDef[padnum].DevNum < 0) {
+ SysErrorMessage(_("Device not set"), _("Please select a valid Joystick Device"));
+ return;
+ }
+
+ js = SDL_JoystickOpen(g.cfg.PadDef[padnum].DevNum);
+ if (js == NULL) {
+ SysErrorMessage(_("Device open error"), _("Unable to open Joystick Device"));
+ return;
+ }
+
+ t = time(NULL);
+
+ while (time(NULL) < t + 10) {
+ // check joystick events
+ SDL_JoystickUpdate();
+ for (i = 0; i < SDL_JoystickNumAxes(js); i++) {
+ axis = SDL_JoystickGetAxis(js, i);
+ if (abs(axis) > 16383) {
+ g.cfg.PadDef[padnum].AnalogDef[analognum][analogaxis] = (i + 1) * (axis > 0 ? 1 : -1);
+ goto end1;
+ }
+ }
+
+ // check keyboard events
+ while ((ge = gdk_event_get()) != NULL) {
+ if (ge->type == GDK_KEY_PRESS) {
+ if (ge->key.keyval == XK_Escape) {
+ gdk_event_free(ge);
+ goto end1;
+ }
+ }
+ gdk_event_free(ge);
+ }
+
+ usleep(5000);
+ }
+
+end1:
+ SDL_JoystickClose(js);
+}
+
+static void OnChangeClicked(GtkWidget *widget, gpointer user_data) {
+ int pad = (int)user_data;
+ int index = GetSelectedKeyIndex(pad);
+
+ if (index == -1) return;
+
+ if (index < DKEY_TOTAL) {
+ ReadDKeyEvent(pad, DPad[index]);
+ } else {
+ index -= DKEY_TOTAL;
+ ReadAnalogEvent(pad, index / 2, index % 2);
+ }
+
+ UpdateKey();
+}
+
+static void OnResetClicked(GtkWidget *widget, gpointer user_data) {
+ int pad = (int)user_data;
+ int index = GetSelectedKeyIndex(pad);
+
+ if (index == -1) return;
+
+ if (index < DKEY_TOTAL) {
+ g.cfg.PadDef[pad].KeyDef[DPad[index]].Key = 0;
+ g.cfg.PadDef[pad].KeyDef[DPad[index]].JoyEvType = NONE;
+ g.cfg.PadDef[pad].KeyDef[DPad[index]].J.Button = 0;
+ } else {
+ index -= DKEY_TOTAL;
+ g.cfg.PadDef[pad].AnalogDef[index / 2][index % 2] = 0;
+ }
+
+ UpdateKey();
+}
+
+static void PopulateDevList() {
+ const char *widgetname[2] = {"combodev1", "combodev2"};
+ int i, j, n;
+ GtkWidget *widget;
+ GladeXML *xml;
+ GtkTreeIter iter;
+ GtkListStore *store;
+ GtkCellRenderer *renderer;
+ char buf[256];
+
+ xml = glade_get_widget_tree(MainWindow);
+
+ for (i = 0; i < 2; i++) {
+ widget = glade_xml_get_widget(xml, widgetname[i]);
+
+ renderer = gtk_cell_renderer_text_new();
+ gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget), renderer, FALSE);
+ gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(widget), renderer, "text", 0);
+
+ store = gtk_list_store_new(1, G_TYPE_STRING);
+
+ gtk_list_store_append(store, &iter);
+ gtk_list_store_set(store, &iter, 0, _("None"), -1);
+
+ n = SDL_NumJoysticks();
+ for (j = 0; j < n; j++) {
+ sprintf(buf, "%d: %s", j + 1, SDL_JoystickName(j));
+ gtk_list_store_append(store, &iter);
+ gtk_list_store_set(store, &iter, 0, buf, -1);
+ }
+
+ gtk_combo_box_set_model(GTK_COMBO_BOX(widget), GTK_TREE_MODEL(store));
+
+ n = g.cfg.PadDef[i].DevNum + 1;
+ if (n > SDL_NumJoysticks()) {
+ n = 0;
+ g.cfg.PadDef[i].DevNum = -1;
+ }
+
+ gtk_combo_box_set_active(GTK_COMBO_BOX(widget), n);
+ }
+}
+
+long PADconfigure() {
+ GladeXML *xml;
+ GtkWidget *widget;
+ GtkTreeSelection *treesel;
+ GtkTreeViewColumn *column;
+ GtkCellRenderer *renderer;
+
+ if (SDL_Init(SDL_INIT_JOYSTICK) == -1) {
+ fprintf(stderr, "Failed to initialize SDL!\n");
+ return -1;
+ }
+
+ LoadConfig();
+
+ xml = glade_xml_new(DATADIR "dfinput.glade2", "CfgWnd", NULL);
+ if (xml == NULL) {
+ g_warning("We could not load the interface!");
+ return -1;
+ }
+
+ MainWindow = glade_xml_get_widget(xml, "CfgWnd");
+ gtk_window_set_title(GTK_WINDOW(MainWindow), _("Gamepad/Keyboard Input Configuration"));
+
+ widget = glade_xml_get_widget(xml, "treeview1");
+
+ // column for key
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes(_("Key"),
+ renderer, "text", 0, NULL);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(widget), column);
+
+ // column for button
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes(_("Button"),
+ renderer, "text", 1, NULL);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(widget), column);
+
+ treesel = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget));
+ gtk_tree_selection_set_mode(treesel, GTK_SELECTION_SINGLE);
+
+ g_signal_connect_data(G_OBJECT(treesel), "changed",
+ G_CALLBACK(TreeSelectionChanged), (gpointer)0, NULL, G_CONNECT_AFTER);
+
+ widget = glade_xml_get_widget(xml, "treeview2");
+
+ // column for key
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes(_("Key"),
+ renderer, "text", 0, NULL);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(widget), column);
+
+ // column for button
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes(_("Button"),
+ renderer, "text", 1, NULL);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(widget), column);
+
+ treesel = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget));
+ gtk_tree_selection_set_mode(treesel, GTK_SELECTION_SINGLE);
+
+ g_signal_connect_data(G_OBJECT(treesel), "changed",
+ G_CALLBACK(TreeSelectionChanged), (gpointer)1, NULL, G_CONNECT_AFTER);
+
+ widget = glade_xml_get_widget(xml, "CfgWnd");
+ g_signal_connect_data(GTK_OBJECT(widget), "delete_event",
+ GTK_SIGNAL_FUNC(OnConfigExit), NULL, NULL, G_CONNECT_AFTER);
+
+ widget = glade_xml_get_widget(xml, "btnclose");
+ g_signal_connect_data(GTK_OBJECT(widget), "clicked",
+ GTK_SIGNAL_FUNC(OnConfigExit), xml, NULL, G_CONNECT_AFTER);
+
+ PopulateDevList();
+ UpdateKeyList();
+
+ widget = glade_xml_get_widget(xml, "checkmt");
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), g.cfg.Threaded);
+ g_signal_connect_data(GTK_OBJECT(widget), "toggled",
+ GTK_SIGNAL_FUNC(OnThreadedToggled), NULL, NULL, G_CONNECT_AFTER);
+
+ widget = glade_xml_get_widget(xml, "combodev1");
+ g_signal_connect_data(GTK_OBJECT(widget), "changed",
+ GTK_SIGNAL_FUNC(OnDeviceChanged), (gpointer)0, NULL, G_CONNECT_AFTER);
+
+ widget = glade_xml_get_widget(xml, "combodev2");
+ g_signal_connect_data(GTK_OBJECT(widget), "changed",
+ GTK_SIGNAL_FUNC(OnDeviceChanged), (gpointer)1, NULL, G_CONNECT_AFTER);
+
+ widget = glade_xml_get_widget(xml, "combotype1");
+ gtk_combo_box_set_active(GTK_COMBO_BOX(widget),
+ g.cfg.PadDef[0].Type == PSE_PAD_TYPE_ANALOGPAD ? 1 : 0);
+ g_signal_connect_data(GTK_OBJECT(widget), "changed",
+ GTK_SIGNAL_FUNC(OnTypeChanged), (gpointer)0, NULL, G_CONNECT_AFTER);
+
+ widget = glade_xml_get_widget(xml, "combotype2");
+ gtk_combo_box_set_active(GTK_COMBO_BOX(widget),
+ g.cfg.PadDef[1].Type == PSE_PAD_TYPE_ANALOGPAD ? 1 : 0);
+ g_signal_connect_data(GTK_OBJECT(widget), "changed",
+ GTK_SIGNAL_FUNC(OnTypeChanged), (gpointer)1, NULL, G_CONNECT_AFTER);
+
+ widget = glade_xml_get_widget(xml, "btnchange1");
+ gtk_widget_set_sensitive(widget, FALSE);
+ g_signal_connect_data(GTK_OBJECT(widget), "clicked",
+ GTK_SIGNAL_FUNC(OnChangeClicked), (gpointer)0, NULL, G_CONNECT_AFTER);
+
+ widget = glade_xml_get_widget(xml, "btnreset1");
+ gtk_widget_set_sensitive(widget, FALSE);
+ g_signal_connect_data(GTK_OBJECT(widget), "clicked",
+ GTK_SIGNAL_FUNC(OnResetClicked), (gpointer)0, NULL, G_CONNECT_AFTER);
+
+ widget = glade_xml_get_widget(xml, "btnchange2");
+ gtk_widget_set_sensitive(widget, FALSE);
+ g_signal_connect_data(GTK_OBJECT(widget), "clicked",
+ GTK_SIGNAL_FUNC(OnChangeClicked), (gpointer)1, NULL, G_CONNECT_AFTER);
+
+ widget = glade_xml_get_widget(xml, "btnreset2");
+ gtk_widget_set_sensitive(widget, FALSE);
+ g_signal_connect_data(GTK_OBJECT(widget), "clicked",
+ GTK_SIGNAL_FUNC(OnResetClicked), (gpointer)1, NULL, G_CONNECT_AFTER);
+
+ gtk_widget_show(MainWindow);
+ gtk_main();
+
+ return 0;
+}
+
+static void OnAboutExit(GtkWidget *widget, gpointer user_data) {
+ gtk_widget_destroy(widget);
+ gtk_exit(0);
+}
+
+void PADabout() {
+ const char *authors[]= {"Wei Mingzhi <weimingzhi@gmail.com>", NULL};
+ GtkWidget *widget;
+
+ widget = gtk_about_dialog_new();
+#ifdef EPSXE
+ gtk_about_dialog_set_name(GTK_ABOUT_DIALOG(widget), "Gamepad/Keyboard Input (ePSXe)");
+#else
+ gtk_about_dialog_set_name(GTK_ABOUT_DIALOG(widget), "Gamepad/Keyboard Input");
+#endif
+ gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(widget), "1.1");
+ gtk_about_dialog_set_authors(GTK_ABOUT_DIALOG(widget), authors);
+ gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(widget), "http://www.codeplex.com/pcsxr/");
+
+ g_signal_connect_data(GTK_OBJECT(widget), "response",
+ GTK_SIGNAL_FUNC(OnAboutExit), NULL, NULL, G_CONNECT_AFTER);
+
+ gtk_widget_show(widget);
+ gtk_main();
+}
+
+int main(int argc, char *argv[]) {
+#ifdef ENABLE_NLS
+ setlocale(LC_ALL, "");
+ bindtextdomain(GETTEXT_PACKAGE, LOCALE_DIR);
+ bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
+ textdomain(GETTEXT_PACKAGE);
+#endif
+
+ gtk_set_locale();
+ gtk_init(&argc, &argv);
+
+ if (argc > 1 && !strcmp(argv[1], "-about")) {
+ PADabout();
+ } else {
+ PADconfigure();
+ }
+
+ gtk_exit(0);
+ return 0;
+}
diff --git a/plugins/dfinput/cfg.c b/plugins/dfinput/cfg.c
index d5f54a63..d8f7a78c 100644
--- a/plugins/dfinput/cfg.c
+++ b/plugins/dfinput/cfg.c
@@ -1,1299 +1,295 @@
/*
- * Pad for Psemu Pro like Emulators
- * This is the config program, taken out from the pad
- * It's also responsible for the about-dialog box
+ * Copyright (c) 2009, Wei Mingzhi <whistler@openoffice.org>.
+ * All Rights Reserved.
*
- * Written by Erich Kitzmuller <ammoq@ammoq.com>
- * Based on padXwin 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 3 of the License, or
+ * (at your option) any later version.
*
- * Copyright 2002,2003 by Erich Kitzmuller
- *
- * 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, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * 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 "config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#ifdef __linux__
-#include <linux/joystick.h>
-#endif
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <unistd.h>
-#include <gdk/gdk.h>
-#include <gtk/gtk.h>
-#include <glade/glade.h>
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <X11/keysym.h>
-#include <errno.h>
-#include "padjoy.h"
-
-#ifdef ENABLE_NLS
-#include <libintl.h>
-#include <locale.h>
-#endif
-
-#ifdef __linux__
-char *LibName = "Gamepad/Keyboard Input";
-#else
-char *LibName = "Keyboard Input";
-#endif
-
-#define CONFIG_FILENAME "dfinput.cfg"
-
-// Prototypes
-static void loadConfig();
-static void saveConfig();
-static char *eventDescription(EventCode);
-static void initPadtime();
-
-// Filenames for device files, e.g. "/dev/input/js0"
-static char devicefilename[MAXDEVICES][FILENAME_MAX+1] = {"/dev/input/js0", "/dev/input/js1"};
-
-// File desciptors for device files
-static int devicefile[MAXDEVICES] = { -1, -1 };
-
-// Use Threading for joy device input?
-static int use_threads = 1;
-
-// Emulate Dualshock(TM) analog pad?
-static int use_analog = 0;
-
-// calibration data
-int minzero[MAXAXES];
-int maxzero[MAXAXES];
-
-// axes status - so only changing status are reported
-int axestatus[MAXDEVICES][MAXAXES];
-
-// Assignment of PSX buttons to Events
-static EventCode PadButtons[MAXDEVICES][MAXPSXBUTTONS] =
-{
- {
- KEY_EVENT(XK_e), // L2
- KEY_EVENT(XK_t), // R2
- KEY_EVENT(XK_w), // L1
- KEY_EVENT(XK_r), // R1
- KEY_EVENT(XK_d), // Triangle
- KEY_EVENT(XK_x), // Circle
- KEY_EVENT(XK_z), // Cross
- KEY_EVENT(XK_s), // Square
- KEY_EVENT(XK_c), // Select
- NO_EVENT, // Left Analog
- NO_EVENT, // Right Analog
- KEY_EVENT(XK_v), // Start
- KEY_EVENT(XK_Up), // Up
- KEY_EVENT(XK_Right), // Right
- KEY_EVENT(XK_Down), // Down
- KEY_EVENT(XK_Left), // Left
- NO_EVENT, // Left Anlaog X
- NO_EVENT, // Left Analog Y
- NO_EVENT, // Right Analog X
- NO_EVENT // Right Analog Y
- },
- {
- NO_EVENT, // L2
- NO_EVENT, // R2
- NO_EVENT, // L1
- NO_EVENT, // R1
- NO_EVENT, // Triangle
- NO_EVENT, // Circle
- NO_EVENT, // Cross
- NO_EVENT, // Square
- NO_EVENT, // Select
- NO_EVENT, // Left Analog
- NO_EVENT, // Right Analog
- NO_EVENT, // Start
- NO_EVENT, // Up
- NO_EVENT, // Right
- NO_EVENT, // Down
- NO_EVENT, // Left
- NO_EVENT, // Left Anlaog X
- NO_EVENT, // Left Analog Y
- NO_EVENT, // Right Analog X
- NO_EVENT // Right Analog Y
- }
-};
-
-static Display *Dsp;
-
-static EventCode macroLaunch[MAXDEVICES][MAXMACROS];
-static EventCode macroEvents[MAXDEVICES][MAXMACROS][MAXMACROLENGTH];
-static long macroInterval[MAXDEVICES][MAXMACROS][MAXMACROLENGTH];
-static int macroActive[MAXDEVICES];
-static int macroIndex[MAXDEVICES];
-static long macroNext[MAXDEVICES];
-
-void init_macros() {
- int i,j;
-
- for (i=0; i<MAXDEVICES; i++) {
- for (j=0; j<MAXMACROS; j++) {
- macroLaunch[i][j]=NO_EVENT;
- macroEvents[i][j][0]=NO_EVENT;
- macroInterval[i][j][0]=0;
- }
- macroActive[i]=-1;
- macroIndex[i]=0;
- macroNext[i]=0;
- }
-}
-
-long PADinit(long flags) {
- int i,j;
-
- init_macros();
- initPadtime();
- for (i=0; i<MAXDEVICES; i++) {
- maxzero[i] = 250;
- minzero[i] = -250;
-
- for (j=0; j<MAXAXES; j++) {
- axestatus[i][j] = AXESTS_UNKNOWN;
- }
- }
- loadConfig();
-
- return 0;
-}
-
-static long firstsecond = 0;
-
-static void initPadtime() {
- struct timeval tv;
- gettimeofday(&tv, NULL);
- firstsecond = tv.tv_sec;
-}
-
-// construct a time on our own
-long getPadtime() {
- struct timeval tv;
- gettimeofday(&tv, NULL);
- return (tv.tv_sec-firstsecond)*10000+tv.tv_usec/100;
-}
-
-unsigned short PadStat[2] = {0xffff, 0xffff};
-
-// get pending events
-static int getPendingEvents(int millisecondstowait, EventCode *events, int maxevents, int useGDK, int checkJoydevice, int checkXKeyboard, long *timing) {
- fd_set rfds;
- int retval;
- int i;
- int md;
- int eventsread=0;
- XEvent xe;
- GdkEvent *ge;
- int cntopen;
- struct timeval tv;
- int oldstatus;
-
-#ifdef __linux__
- struct js_event je;
-
- if (checkJoydevice) {
- FD_ZERO(&rfds);
- md = -1;
- cntopen=0;
- for (i=0; i<MAXDEVICES; i++) {
- if (devicefile[i] > -1) {
- FD_SET(devicefile[i], &rfds);
- cntopen++;
- }
- if (devicefile[i] > md) md = devicefile[i];
- }
- tv.tv_sec = millisecondstowait / 1000;
- tv.tv_usec = 1000 * (millisecondstowait % 1000);
-
- retval = select(md+1, &rfds, NULL, NULL, &tv);
-
- while (retval && eventsread<maxevents-2*checkXKeyboard) {
- for (i=0; i<MAXDEVICES; i++) {
- if (devicefile[i]>-1 && FD_ISSET(devicefile[i], &rfds)) {
- read (devicefile[i], &je, 8);
-
- if (je.type == JS_EVENT_AXIS && je.number<MAXAXES) {
- if (axestatus[i][je.number] == AXESTS_ANALOG) {
- /* this axe should be reported analog */
- events[eventsread++] = ANALOGAXIS_EVENT(i,je.number, (je.value+32768)>>8);
- if (timing) {
- (*timing)=getPadtime();
- timing++;
- }
- if (eventsread == maxevents) return eventsread;
- }
- else if (je.value > maxzero[i]) {
- if (axestatus[i][je.number] != AXESTS_PLUS &&
- axestatus[i][je.number] != AXESTS_UNUSED) {
-
- oldstatus = axestatus[i][je.number];
-
- axestatus[i][je.number] = AXESTS_PLUS;
-
- events[eventsread++] = AXISPLUS_EVENT(i,je.number);
- if (timing) {
- (*timing)=getPadtime();
- timing++;
- }
- if (eventsread==maxevents) return eventsread;
-
- if (oldstatus == AXESTS_MINUS) {
- events[eventsread++] = RELEASE_EVENT+AXISMINUS_EVENT(i,je.number);
- if (timing) {
- (*timing)=getPadtime();
- timing++;
- }
- if (eventsread==maxevents) return eventsread;
- }
-
- }
- }
- else if (je.value < minzero[i]) {
- if (axestatus[i][je.number] != AXESTS_MINUS &&
- axestatus[i][je.number] != AXESTS_UNUSED) {
-
- oldstatus = axestatus[i][je.number];
-
- axestatus[i][je.number] = AXESTS_MINUS;
-
- events[eventsread++] = AXISMINUS_EVENT(i,je.number);
- if (timing) {
- (*timing)=getPadtime();
- timing++;
- }
- if (eventsread==maxevents) return eventsread;
-
- if (oldstatus == AXESTS_PLUS) {
- events[eventsread++] = RELEASE_EVENT+AXISPLUS_EVENT(i,je.number);
- if (timing) {
- (*timing)=getPadtime();
- timing++;
- }
- if (eventsread==maxevents) return eventsread;
- }
- }
- }
- else {
- if (axestatus[i][je.number] != AXESTS_CENTER &&
- axestatus[i][je.number] != AXESTS_UNUSED) {
-
- oldstatus = axestatus[i][je.number];
-
- axestatus[i][je.number] = AXESTS_CENTER;
-
- if (oldstatus == AXESTS_PLUS) {
- events[eventsread++] = RELEASE_EVENT+AXISPLUS_EVENT(i,je.number);
- if (timing) {
- (*timing)=getPadtime();
- timing++;
- }
- if (eventsread==maxevents) return eventsread;
- }
- else if (oldstatus == AXESTS_MINUS) {
- events[eventsread++] = RELEASE_EVENT+AXISMINUS_EVENT(i,je.number);
- if (timing) {
- (*timing)=getPadtime();
- timing++;
- }
- if (eventsread==maxevents) return eventsread;
- }
- }
- }
- }
- else if (je.type == JS_EVENT_BUTTON && je.number<MAXBUTTONS) {
- events[eventsread++] = (je.value?0:RELEASE_EVENT) + BUTTON_EVENT(i,je.number);
- if (timing) {
- (*timing)=getPadtime();
- timing++;
- }
- if (eventsread==maxevents) return eventsread;
- }
- }
- }
- tv.tv_sec = 0;
- tv.tv_usec = 0;
-
- retval = select(md+1, &rfds, NULL, NULL, &tv);
- }
-
- }
-#endif
-
- if (checkXKeyboard) {
- if (useGDK) {
- while ((ge = gdk_event_get() ) != NULL ) {
- if (ge->type == GDK_KEY_PRESS) {
- events[eventsread++] = KEY_EVENT(ge->key.keyval);
- if (timing) {
- (*timing)=((GdkEventKey *)ge)->time*10;
- timing++;
- }
- if (eventsread==maxevents) return eventsread;
- }
- else if (ge->type == GDK_KEY_RELEASE) {
- events[eventsread++] = RELEASE_EVENT+KEY_EVENT(ge->key.keyval);
- if (timing) {
- (*timing)=((GdkEventKey *)ge)->time*10;
- timing++;
- }
- if (eventsread==maxevents) return eventsread;
- }
- gdk_event_free(ge);
- }
- }
- else {
- while ((i=XPending(Dsp))) {
- while (i--) {
- XNextEvent(Dsp, &xe);
- switch (xe.type) {
- case KeyPress:
- events[eventsread++] = KEY_EVENT(XLookupKeysym((XKeyEvent *)&xe, 0));
- if (timing) {
- (*timing)=getPadtime();
- timing++;
- }
- if (eventsread==maxevents) return eventsread;
- break;
- case KeyRelease:
- events[eventsread++] = RELEASE_EVENT+KEY_EVENT(XLookupKeysym((XKeyEvent *)&xe, 0));
- if (timing) {
- (*timing)=getPadtime();
- timing++;
- }
- if (eventsread==maxevents) return eventsread;
- break;
-/*
- case FocusIn:
- XAutoRepeatOff(Dsp);
- break;
- case FocusOut:
- XAutoRepeatOn(Dsp);
- break;
-*/
- }
- }
- }
- }
- }
-
- return eventsread;
-}
-
-
-/*---------------------------------------------------------------------*/
-/* Config Dialogue stuff */
-/*---------------------------------------------------------------------*/
-
-// analyse Eventcode
-static PadJoyEvent *EventCode2PadJoyEvent(EventCode p_e) {
- static PadJoyEvent event;
- EventCode e;
- int i,p;
-
- event.event_type = EVENTTYPE_NONE;
- event.pad = 0;
- event.no = 0;
- event.value = 0;
-
- if (!p_e) {
- return &event;
- }
-
- e = p_e;
-
- if (e>RELEASE_EVENT) {
- event.value = 0;
- e -= RELEASE_EVENT;
- }
- else {
- event.value = 1;
- }
-
- if (e && e<FIRST_JOY_EVENT) {
- event.event_type = EVENTTYPE_KEY;
- event.no = e;
- return &event;
- }
-
- if (e >= FIRST_ANALOG_EVENT) {
- event.event_type = EVENTTYPE_ANALOG;
- event.pad = (e-FIRST_ANALOG_EVENT)/(256*MAXAXES);
- event.no = (e-ANALOGAXIS_EVENT(event.pad,0,0))/256;
- event.value = e & 0xff;
- return &event;
- }
-
-
- for (p=0; p<MAXDEVICES; p++) {
- for (i=0; i<MAXAXES; i++) {
- if (e == AXISPLUS_EVENT(p,i)) {
- event.event_type = EVENTTYPE_AXISPLUS;
- event.pad = p;
- event.no = i;
- return &event;
- }
- if (e == AXISMINUS_EVENT(p,i)) {
- event.event_type = EVENTTYPE_AXISMINUS;
- event.pad = p;
- event.no = i;
- return &event;
- }
- }
-
- for (i=0; i<MAXBUTTONS; i++) {
- if (e == BUTTON_EVENT(p,i)) {
- event.event_type = EVENTTYPE_BUTTON;
- event.pad = p;
- event.no = i;
- return &event;
- }
- }
- }
-
- return &event;
-}
-
-
-
-// get the description of an Eventcode
-// this implementation is not optimized,
-// but I only need it for the configuration part so speed doesn't matter
-// should be changed to use EventCode2PadJoyEvent
-static char *eventDescription(EventCode e) {
- static char buffer[256];
- int i,p;
-
- if (e && e<FIRST_JOY_EVENT) {
- sprintf(buffer, "\"%s\"", XKeysymToString(e-FIRST_KEY_EVENT));
- return buffer;
- }
-
- if (e >= FIRST_ANALOG_EVENT) {
- p = (e-FIRST_ANALOG_EVENT)/(256*MAXAXES);
- i = (e-ANALOGAXIS_EVENT(p,0,0))/256;
- sprintf(buffer, "X%d", i);
- return buffer;
- }
-
- for (p=0; p<MAXDEVICES; p++) {
- for (i=0; i<MAXAXES; i++) {
- if (e == AXISPLUS_EVENT(p,i)) {
- sprintf(buffer, "A%d+", i);
- return buffer;
- }
- if (e == AXISMINUS_EVENT(p,i)) {
- sprintf(buffer, "A%d-", i);
- return buffer;
- }
- }
-
- for (i=0; i<MAXBUTTONS; i++) {
- if (e == BUTTON_EVENT(p,i)) {
- sprintf(buffer, "B%d", i);
- return buffer;
- }
- }
- }
-
- sprintf(buffer, "???");
- return buffer;
-}
-
-
-// get a String for each EventCode
-// more accurate than eventDescription()
-// should be changed to use EventCode2PadJoyEvent
-static char *EventCode2String(EventCode p_e) {
- static char buffer[256];
- int i,p,v;
- char push_release;
- EventCode e;
-
- if (!p_e) {
- sprintf(buffer, "???");
- return buffer;
- }
-
- e = p_e;
-
- if (e>RELEASE_EVENT) {
- push_release = 'R';
- e -= RELEASE_EVENT;
- }
- else {
- push_release = 'P';
- }
-
- if (e && e<FIRST_JOY_EVENT) {
- sprintf(buffer, "K%c\"%s\"", push_release, XKeysymToString(e-FIRST_KEY_EVENT));
- return buffer;
- }
-
- if (e >= FIRST_ANALOG_EVENT) {
- p = (e-FIRST_ANALOG_EVENT)/(256*MAXAXES);
- i = (e-ANALOGAXIS_EVENT(p,0,0))/256;
- v = e & 0xff;;
- sprintf(buffer, "X%dP%dv%d",p, i, v);
- return buffer;
- }
-
-
- for (p=0; p<MAXDEVICES; p++) {
- for (i=0; i<MAXAXES; i++) {
- if (e == AXISPLUS_EVENT(p,i)) {
- sprintf(buffer, "A%d%c%d+", p, push_release, i);
- return buffer;
- }
- if (e == AXISMINUS_EVENT(p,i)) {
- sprintf(buffer, "A%d%c%d-", p, push_release, i);
- return buffer;
- }
- }
-
- for (i=0; i<MAXBUTTONS; i++) {
- if (e == BUTTON_EVENT(p,i)) {
- sprintf(buffer, "B%d%c%d", p, push_release, i);
- return buffer;
- }
- }
- }
-
- sprintf(buffer, "???");
- return buffer;
-}
-
-// reversal of EventCode2String
-static EventCode String2EventCode(char *s) {
- static char buffer[256];
- int i,p;
- char *q;
- char push_release;
- EventCode e;
-
- if (s[0]>='0' && s[0]<='9') return atoi(s); // allow numeric input
-
- e=0;
- push_release = 'P';
-
- switch(s[0]) {
- case 'K':
- push_release = s[1];
- strncpy(buffer, s+3, 255);
- q=buffer;
- i=1;
- while (*q) {
- if (*q=='"') i=!i;
- if (*q==' ' && !i)
- *q='\0';
- else
- q++;
- }
- if (s[2]=='"' && buffer[0] && buffer[strlen(buffer)-1]=='"') {
- buffer[strlen(buffer)-1] = '\0';
- e = KEY_EVENT(XStringToKeysym(buffer));
- }
- break;
- case 'A':
- if (s[1]>='0' && s[1]<='1' && strlen(s)>=5) {
- p = s[1]-'0';
- push_release = s[2];
- i = atoi(s+3);
- q=s+3;
- while (*q && *q!='+' && *q!='-') q++;
- if (*q=='+')
- e = AXISPLUS_EVENT(p,i);
- else if (*q=='-')
- e = AXISMINUS_EVENT(p,i);
- }
- break;
- case 'B':
- if (s[1]>='0' && s[1]<='1' && strlen(s)>=4) {
- p = s[1]-'0';
- push_release = s[2];
- i = atoi(s+3);
- e = BUTTON_EVENT(p,i);
- }
- break;
- case 'X':
- if (s[1]>='0' && s[1]<='1' && strlen(s)>=5) {
- p = s[1]-'0';
- i = atoi(s+3);
- q=s+3;
- while (*q && *q!='v') q++;
- if (*q=='v')
- e = ANALOGAXIS_EVENT(p,i,atoi(q+1));
- }
- break;
- }
-
- if (push_release=='R')
- return e+RELEASE_EVENT;
- else
- return e;
-}
-
-static void saveConfig() {
- FILE *f;
- int i,j,k;
-
- f = fopen(CONFIG_FILENAME, "w");
- if (!f) {
- fprintf(stderr, "DFInput error: couldn't write config file!\n");
- return;
- }
-
- fprintf(f,"[general]\n");
- fprintf(f,"use_threads = %d\n", use_threads);
- fprintf(f,"use_analog = %d\n", use_analog);
- for (i=0;i<MAXDEVICES;i++) {
- fprintf(f,"[pad %d]\n", i+1);
- fprintf(f,"devicefilename = %s\n", devicefilename[i]);
- fprintf(f,"minzero = %d\n", minzero[i]);
- fprintf(f,"maxzero = %d\n", maxzero[i]);
- fprintf(f,"event_l2 = %s\n", EventCode2String(PadButtons[i][0]));
- fprintf(f,"event_r2 = %s\n", EventCode2String(PadButtons[i][1]));
- fprintf(f,"event_l1 = %s\n", EventCode2String(PadButtons[i][2]));
- fprintf(f,"event_r1 = %s\n", EventCode2String(PadButtons[i][3]));
- fprintf(f,"event_triangle = %s\n", EventCode2String(PadButtons[i][4]));
- fprintf(f,"event_circle = %s\n", EventCode2String(PadButtons[i][5]));
- fprintf(f,"event_cross = %s\n", EventCode2String(PadButtons[i][6]));
- fprintf(f,"event_square = %s\n", EventCode2String(PadButtons[i][7]));
- fprintf(f,"event_select = %s\n", EventCode2String(PadButtons[i][8]));
- fprintf(f,"event_lanalog = %s\n", EventCode2String(PadButtons[i][9]));
- fprintf(f,"event_ranalog = %s\n", EventCode2String(PadButtons[i][10]));
- fprintf(f,"event_start = %s\n", EventCode2String(PadButtons[i][11]));
- fprintf(f,"event_up = %s\n", EventCode2String(PadButtons[i][12]));
- fprintf(f,"event_right = %s\n", EventCode2String(PadButtons[i][13]));
- fprintf(f,"event_down = %s\n", EventCode2String(PadButtons[i][14]));
- fprintf(f,"event_left = %s\n", EventCode2String(PadButtons[i][15]));
- fprintf(f,"event_lanax = %s\n", EventCode2String(PadButtons[i][16]));
- fprintf(f,"event_lanay = %s\n", EventCode2String(PadButtons[i][17]));
- fprintf(f,"event_ranax = %s\n", EventCode2String(PadButtons[i][18]));
- fprintf(f,"event_ranay = %s\n", EventCode2String(PadButtons[i][19]));
- for (j=0; j<MAXMACROS; j++) {
- fprintf(f, "[macro %d]\n", j+1);
- fprintf(f, "event_launch = %s\n", EventCode2String(macroLaunch[i][j]));
- fprintf(f, "events =");
- for (k=0; k<MAXMACROLENGTH && macroEvents[i][j][k]; k++) {
- fprintf(f, " %s", EventCode2String(macroEvents[i][j][k]));
- }
- fprintf(f,"\n");
- fprintf(f, "interval =");
- for (k=0; k<MAXMACROLENGTH && macroEvents[i][j][k]; k++) {
- fprintf(f, " %ld", macroInterval[i][j][k]);
- }
- fprintf(f,"\n");
- }
- }
-
- fclose(f);
-}
-
-static void loadConfig() {
- FILE *f;
- int i;
- char line[FILENAME_MAX+30];
- int pad=0;
- int macronr=0;
- char *val;
-
- f = fopen(CONFIG_FILENAME, "r");
- if (!f) {
-// fprintf(stderr, "DFInput warning: config file not found.");
- return;
- }
-
- while(!feof(f)) {
- fgets(line, FILENAME_MAX+29, f);
- i=strlen(line)-1;
- while (i>0 && line[i]<32) line[i--]='\0';
-
- val=NULL;
- while(i>0) {
- if (line[i]=='=') val = line+(i+1);
- i--;
- }
- if (val) {
- while (*val==' ') val++;
- }
-
- if (!strcmp(line, "[general]")) {
- // nothing to do
- }
- else if (!strncmp(line, "use_threads", 11)) {
- use_threads = atoi(val);
- }
- else if (!strncmp(line, "use_analog", 10)) {
- use_analog = atoi(val);
- }
- else if (!strcmp(line, "[pad 1]")) {
- pad = 0;
- }
- else if (!strcmp(line, "[pad 2]")) {
- pad = 1;
- }
- else if (!strncmp(line, "[macro ", 7)) {
- macronr = atoi(line+7)-1;
- if (macronr<0 || macronr>=MAXMACROS) macronr=0;
- }
- else if (!strncmp(line, "devicefilename", 14)) {
- strcpy(devicefilename[pad], val);
- }
- else if (!strncmp(line, "minzero", 7)) {
- minzero[pad] = atoi(val);
- }
- else if (!strncmp(line, "maxzero", 7)) {
- maxzero[pad] = atoi(val);
- }
- else if (!strncmp(line, "event_l2", 8)) PadButtons[pad][0] = String2EventCode(val);
- else if (!strncmp(line, "event_r2", 8)) PadButtons[pad][1] = String2EventCode(val);
- else if (!strncmp(line, "event_l1", 8)) PadButtons[pad][2] = String2EventCode(val);
- else if (!strncmp(line, "event_r1", 8)) PadButtons[pad][3] = String2EventCode(val);
- else if (!strncmp(line, "event_triangle", 14)) PadButtons[pad][4] = String2EventCode(val);
- else if (!strncmp(line, "event_circle", 12)) PadButtons[pad][5] = String2EventCode(val);
- else if (!strncmp(line, "event_cross", 11)) PadButtons[pad][6] = String2EventCode(val);
- else if (!strncmp(line, "event_square", 12)) PadButtons[pad][7] = String2EventCode(val);
- else if (!strncmp(line, "event_select", 12)) PadButtons[pad][8] = String2EventCode(val);
- else if (!strncmp(line, "event_lanalog", 13)) PadButtons[pad][9] = String2EventCode(val);
- else if (!strncmp(line, "event_ranalog", 13)) PadButtons[pad][10] = String2EventCode(val);
- else if (!strncmp(line, "event_start", 11)) PadButtons[pad][11] = String2EventCode(val);
- else if (!strncmp(line, "event_up", 8)) PadButtons[pad][12] = String2EventCode(val);
- else if (!strncmp(line, "event_right", 11)) PadButtons[pad][13] = String2EventCode(val);
- else if (!strncmp(line, "event_down", 10)) PadButtons[pad][14] = String2EventCode(val);
- else if (!strncmp(line, "event_left", 10)) PadButtons[pad][15] = String2EventCode(val);
- else if (!strncmp(line, "event_lanax", 11)) PadButtons[pad][16] = String2EventCode(val);
- else if (!strncmp(line, "event_lanay", 11)) PadButtons[pad][17] = String2EventCode(val);
- else if (!strncmp(line, "event_ranax", 11)) PadButtons[pad][18] = String2EventCode(val);
- else if (!strncmp(line, "event_ranay", 11)) PadButtons[pad][19] = String2EventCode(val);
- else if (!strncmp(line, "event_launch", 12)) macroLaunch[pad][macronr] = String2EventCode(val);
- else if (!strncmp(line, "events", 6)) {
- i=0;
- while (*val) {
- macroEvents[pad][macronr][i++]=String2EventCode(val);
- while (*val && *val!=' ') val++;
- if (*val==' ') val++;
- }
- macroEvents[pad][macronr][i]=NO_EVENT;
- }
- else if (!strncmp(line, "interval", 8)) {
- i=0;
- while (*val) {
- macroInterval[pad][macronr][i++]=atol(val);
- while (*val && *val!=' ') val++;
- if (*val==' ') val++;
- }
- }
-// else fprintf(stderr, "DFInput error: can't interpret %s\n", line);
- }
-}
-
-static int currentPad=0;
-
-static struct {
- GtkWidget *config_window;
-
-/* ADB
- GSList *padnogroup;
- GtkWidget *padno_radio[2];*/
- GtkWidget *filename_entry; // TODO
- GtkWidget *button[CONFIGBUTTONCOUNT];
- GtkWidget *label[CONFIGBUTTONCOUNT];
-/* ADB
- GSList *pcsxgroup;
- GtkWidget *epsxe_radio;
- GtkWidget *pcsx_radio;
- GtkWidget *thread_check;
- GtkWidget *analog_check;*/
- GtkWidget *macro_button[MAXMACROS];
- GtkWidget *macro_label[MAXMACROS];
- GtkWidget *macro_def_button[MAXMACROS];
-
- GtkWidget *ok_button;
- GtkWidget *cancel_button;
-} ConfWidgets;
-
-static struct { int nr;
- char *label;
- int x;
- int y; }
- buttonInfo[CONFIGBUTTONCOUNT] =
-{
-{0, " L2 ", 20, 30},
-{2, " L1 ", 20, 70},
-{1, " R2 ", 350, 30},
-{3, " R1 ", 350, 70},
-{12, " ^ ", 70, 110},
-{15, " < ", 20, 140},
-{13, " > ", 120, 140},
-{14, " v ", 70, 170},
-{4, " /\\ ", 300, 110},
-{7, " [_] ", 250, 140},
-{5, " (_) ", 350, 140},
-{6, " >< ", 300, 170},
-{8, " Select ", 100, 200},
-{11, " Start ", 250, 200},
-{9, " + ", 90, 280},
-{10," + ", 320, 280},
-{16," -- ", 20, 280},
-{17," | ", 70, 250},
-{18," -- ",250, 280},
-{19," | ",300, 250}
-};
-
-static void showPadConfiguration() {
- int i;
-
- // gtk_toggle_button_set_active(ConfWidgets.padno_radio[currentPad], TRUE);
- // gtk_toggle_button_set_active(ConfWidgets.padno_radio[1-currentPad], FALSE);
-
- gtk_entry_set_text ( GTK_ENTRY(ConfWidgets.filename_entry), devicefilename[currentPad] );
-
- for (i=0; i<CONFIGBUTTONCOUNT; i++) {
- gtk_label_set(GTK_LABEL(ConfWidgets.label[i]), eventDescription(PadButtons[currentPad][buttonInfo[i].nr]));
- }
-
- for (i=0; i<MAXMACROS; i++) {
- gtk_label_set(GTK_LABEL(ConfWidgets.macro_label[i]), eventDescription(macroLaunch[currentPad][i]));
- }
-}
-
-static void OnConfCancel(GtkWidget *widget, gpointer user_data) {
- loadConfig();
- gtk_widget_hide(ConfWidgets.config_window);
- gtk_widget_destroy(ConfWidgets.config_window);
- gtk_main_quit();
-}
-
-static void OnConfOk(GtkWidget *widget, gpointer user_data) {
- saveConfig();
- gtk_widget_hide(ConfWidgets.config_window);
- gtk_widget_destroy(ConfWidgets.config_window);
- gtk_main_quit();
-}
-
-static void OnConfBtn(GtkWidget *But, gpointer data) {
- EventCode events[MAXCNT];
- EventCode e=NO_EVENT;
- int i,j,cnt;
- KeySym ksym;
- PadJoyEvent *pje;
- int ok=0;
- int labelnr = (int) gtk_object_get_user_data(GTK_OBJECT(But));
- int btnnr = buttonInfo[labelnr].nr;
- int e_rem1 =NO_EVENT;
- int e_rem2 =NO_EVENT;
-
- devicefile[currentPad] = open(devicefilename[currentPad], O_RDONLY);
-
- if (devicefilename[currentPad][0] && devicefile[currentPad] == -1) {
- fprintf(stderr, "DFInput: could not open device %s, errno=%d\n", devicefilename[currentPad], errno);
- }
-
- for (i=0; i<MAXDEVICES; i++) {
- for (j=0; j<MAXAXES; j++) {
- axestatus[i][j] = AXESTS_UNKNOWN;
- }
- }
-
- for (i=0; i<100 && !ok; i++) {
- cnt = getPendingEvents(30, events, MAXCNT, 1, 1, 1, NULL);
-
- for (j=0; j<cnt && !ok; j++) {
- e = events[j];
- if (e<RELEASE_EVENT) {
- pje = EventCode2PadJoyEvent(e);
- if (btnnr>15) {
- if (pje->event_type == EVENTTYPE_AXISPLUS || pje->event_type == EVENTTYPE_AXISMINUS) {
- e = ANALOGAXIS_EVENT(pje->pad, pje->no, 0);
- PadButtons[currentPad][btnnr] = e;
- ok = 1;
- e_rem1 = AXISPLUS_EVENT(pje->pad, pje->no);
- e_rem2 = AXISMINUS_EVENT(pje->pad, pje->no);
- }
- }
- else if (e<FIRST_JOY_EVENT) {
- ksym = e-FIRST_KEY_EVENT;
- if (ksym != XK_Escape) {
- PadButtons[currentPad][btnnr] = e;
- ok=1;
- }
- }
- else {
- PadButtons[currentPad][btnnr] = e;
- if (pje->event_type == EVENTTYPE_AXISPLUS || pje->event_type == EVENTTYPE_AXISMINUS) {
- e_rem1 = ANALOGAXIS_EVENT(pje->pad, pje->no, 0);
- }
- ok=1;
- }
- }
-
- if (!ok) {
- fprintf(stderr, "DFInput: event %ld (%s) is not usable.\n", (long) e, EventCode2String(e));
- }
- }
- }
-
- if (!ok) {
- fprintf(stderr, "DFInput: no usable input received.\n");
- }
-
- while (getPendingEvents(0, events, MAXCNT, 1, 1, 1, NULL)){} // read pending events to clear buffers
-
- close(devicefile[currentPad]);
- devicefile[currentPad] = -1;
-
- if (ok) {
- // If this event is assigned to another button, remove this assignment
- for (i=0; i<MAXDEVICES; i++) {
- for (j=0; j<MAXPSXBUTTONS; j++) {
- if ((PadButtons[i][j] == e || PadButtons[i][j] == e_rem1 || PadButtons[i][j] == e_rem2) &&
- (i!=currentPad || j!=btnnr)) {
- PadButtons[i][j] = NO_EVENT;
- }
- }
- for (j=0; j<MAXMACROS; j++) {
- if (macroLaunch[i][j] == e || macroLaunch[i][j] == e_rem1 || macroLaunch[i][j] == e_rem2) {
- macroLaunch[i][j] = NO_EVENT;
- }
- }
- }
-
- showPadConfiguration();
- }
-}
-
-static void OnMacroBtn(GtkWidget *But, gpointer data) {
- EventCode events[MAXCNT];
- EventCode e=NO_EVENT;
- PadJoyEvent *pje;
- int i,j,cnt;
- KeySym ksym;
- int ok=0;
- int e_rem1 =NO_EVENT;
-
- int macronr = (int) gtk_object_get_user_data(GTK_OBJECT(But));
-
- devicefile[currentPad] = open(devicefilename[currentPad], O_RDONLY);
-
- for (i=0; i<MAXDEVICES; i++) {
- for (j=0; j<MAXAXES; j++) {
- axestatus[i][j] = AXESTS_UNKNOWN;
- }
- }
-
- for (i=0; i<100 && !ok; i++) {
- cnt = getPendingEvents(30, events, MAXCNT, 1, 1, 1, NULL);
-
- for (j=0; j<cnt && !ok; j++) {
- e = events[j];
- if (e<RELEASE_EVENT) {
- pje = EventCode2PadJoyEvent(e);
- if (e<FIRST_JOY_EVENT) {
- ksym = e-FIRST_KEY_EVENT;
- if (ksym != XK_Escape) {
- macroLaunch[currentPad][macronr] = e;
- ok=1;
- }
- }
- else {
- macroLaunch[currentPad][macronr] = e;
- ok=1;
- if (pje->event_type == EVENTTYPE_AXISPLUS || pje->event_type == EVENTTYPE_AXISMINUS) {
- e_rem1 = ANALOGAXIS_EVENT(pje->pad, pje->no, 0);
- }
- }
- }
- }
- }
- while (getPendingEvents(0, events, MAXCNT, 1, 1, 1, NULL)){} // read pending events to clear buffers
-
- close(devicefile[currentPad]);
- devicefile[currentPad] = -1;
-
- if (ok) {
- // If this event is assigned to another button, remove this assignment
- for (i=0; i<MAXDEVICES; i++) {
- for (j=0; j<MAXPSXBUTTONS; j++) {
- if (PadButtons[i][j] == e || PadButtons[i][j] == e_rem1) {
- PadButtons[i][j] = NO_EVENT;
- }
- }
- for (j=0; j<MAXMACROS; j++) {
- if (macroLaunch[i][j] == e && (i!=currentPad || j!=macronr)) {
- macroLaunch[i][j] = NO_EVENT;
- }
- }
- }
-
- showPadConfiguration();
- }
-}
-
-static void OnMacroDefineBtn(GtkWidget *But, gpointer data) {
- EventCode events[MAXCNT];
- EventCode e=NO_EVENT;
- PadJoyEvent *pje;
- int i,j,cnt;
- int ok=0;
- long now;
- long timing[MAXCNT];
-
- int macronr = (int) gtk_object_get_user_data(GTK_OBJECT(But));
-
- devicefile[currentPad] = open(devicefilename[currentPad], O_RDONLY);
-
- now = -1;
-
- for (i=0; i<MAXDEVICES; i++) {
- for (j=0; j<MAXAXES; j++) {
- axestatus[i][j] = AXESTS_UNUSED;
- }
- }
-
- for (i=0; i<MAXDEVICES; i++) {
- for (j=0; j<MAXPSXBUTTONS; j++) {
- pje = EventCode2PadJoyEvent(PadButtons[i][j]);
-
- if (pje->event_type == EVENTTYPE_AXISPLUS || pje->event_type == EVENTTYPE_AXISMINUS) {
- axestatus[pje->pad][pje->no] = AXESTS_UNKNOWN;
- }
- else if (pje->event_type == EVENTTYPE_ANALOG && use_analog) {
- axestatus[pje->pad][pje->no] = AXESTS_ANALOG;
- }
- }
- }
-
- i=0;
-
- gtk_widget_add_events(ConfWidgets.config_window,GDK_KEY_RELEASE_MASK);
-
- /* Listen for input events until finished (Escape is pressed) or timeout */
- while (!ok && i<MAXMACROLENGTH-1) {
- cnt = getPendingEvents(2000, events, MAXCNT, 1, 1, 1, timing);
-
- if (cnt && now<0) {
- now=timing[0];
- }
- else if (!cnt && i) {
- // inactivity for 2 seconds, finish definition
- ok=1;
- }
-
- for (j=0; j<cnt && !ok && i<MAXMACROLENGTH-1; j++) {
- e = events[j];
- if ((e-FIRST_KEY_EVENT) != XK_Escape && (e-FIRST_KEY_EVENT) != (XK_Escape+RELEASE_EVENT)) {
- macroEvents[currentPad][macronr][i] = e;
- macroInterval[currentPad][macronr][i] = timing[j]-now;
- now = timing[j];
- i++;
- }
- else {
- ok=1;
- }
- }
- }
-
- if (i>0) {
- macroEvents[currentPad][macronr][i] = NO_EVENT;
- }
-
- close(devicefile[currentPad]);
- devicefile[currentPad] = -1;
-
-}
-
-static void OnThreadCheck(GtkWidget *But, gpointer data) {
- use_threads = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(But));
-}
-
-static void OnAnalogCheck(GtkWidget *But, gpointer data) {
- use_analog = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(But));
-}
-
-static void OnPadnoRadio(GtkWidget *But, gpointer data) {
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (But)))
- currentPad = (int) data;
- showPadConfiguration();
-}
-
-static void OnFilenameEntry(GtkWidget *Ent, gpointer data) {
- strcpy(devicefilename[currentPad], gtk_entry_get_text(GTK_ENTRY(Ent)));
-}
-
-/* Closed by clicking on the top-right hand corner */
-void on_config_win_clicked (GtkWidget *widget, gpointer user_data) {
- gtk_widget_destroy (widget);
- gtk_main_quit();
- exit (0);
-}
-
-static void CreateConfigWindow(void) {
- char buffer[100];
- int i;
- GtkWidget *hbox;
-
- GladeXML *xml;
- xml = glade_xml_new (DATADIR "dfinput.glade2", "CfgWin", NULL);
- /* ADB TODO Error checking */
-
- GtkWidget *widget = glade_xml_get_widget (xml, "CfgWin");
- ConfWidgets.config_window = widget;
- GtkWidget *fixedbox = glade_xml_get_widget (xml, "fixed1");
-
- g_signal_connect_data(GTK_OBJECT(widget), "delete_event",
- GTK_SIGNAL_FUNC(on_config_win_clicked), NULL, NULL, G_CONNECT_AFTER);
-
-/* DELETE hbox = gtk_hbox_new(FALSE, 0);
- gtk_fixed_put(GTK_FIXED(fixedbox), hbox, 10, 10);
- gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new("Pad number:"), FALSE, TRUE, 2);*/
-
-// ConfWidgets.padnogroup = NULL;
-
- widget = glade_xml_get_widget (xml, "radiobutton1");
- g_signal_connect_data (GTK_OBJECT (widget), "toggled",
- GTK_SIGNAL_FUNC (OnPadnoRadio), (gpointer) 0, NULL, G_CONNECT_AFTER);
- widget = glade_xml_get_widget (xml, "radiobutton2");
- g_signal_connect_data (GTK_OBJECT (widget), "toggled",
- GTK_SIGNAL_FUNC (OnPadnoRadio), (gpointer) 1, NULL, G_CONNECT_AFTER);
-
-// hbox = gtk_hbox_new(FALSE, 0);
-// gtk_fixed_put (GTK_FIXED (fixedbox), hbox, 10, 40);
-
-// gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new("Device file:"), FALSE, TRUE, 2);
- /*ConfWidgets.filename_entry = gtk_entry_new();*/
-
- widget = glade_xml_get_widget (xml, "filename_entry");
- gtk_entry_set_text ( GTK_ENTRY(widget), (gchar *) devicefilename[0] );
- gtk_entry_set_max_length ( GTK_ENTRY(widget), FILENAME_MAX);
- //gtk_box_pack_start(GTK_BOX(hbox), ConfWidgets.filename_entry, FALSE, TRUE, 2);
- gtk_signal_connect(GTK_OBJECT(widget), "changed", GTK_SIGNAL_FUNC(OnFilenameEntry), NULL);
- ConfWidgets.filename_entry = widget;
-
-/* TODO
- ConfWidgets.thread_check = gtk_check_button_new_with_label("multithreaded");*/
- widget = glade_xml_get_widget (xml, "chkMultithreaded");
- g_signal_connect_data (GTK_OBJECT (widget), "toggled",
- GTK_SIGNAL_FUNC (OnThreadCheck), NULL, NULL, G_CONNECT_AFTER);
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(widget), use_threads);
-
- /* TODO
- ConfWidgets.analog_check = gtk_check_button_new_with_label("analog");*/
- widget = glade_xml_get_widget (xml, "chkAnalog");
- g_signal_connect_data (GTK_OBJECT (widget), "toggled",
- GTK_SIGNAL_FUNC (OnAnalogCheck), NULL, NULL, G_CONNECT_AFTER);
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(widget), use_analog);
-
- // Pad Buttons
- for (i=0; i<CONFIGBUTTONCOUNT; i++) {
- hbox = gtk_hbox_new(FALSE, 0);
- ConfWidgets.button[i] = gtk_button_new_with_label(buttonInfo[i].label);
- gtk_box_pack_start(GTK_BOX(hbox), ConfWidgets.button[i], FALSE, TRUE, 2);
- gtk_fixed_put(GTK_FIXED(fixedbox), hbox, buttonInfo[i].x, buttonInfo[i].y);
- gtk_object_set_user_data(GTK_OBJECT(ConfWidgets.button[i]), (char *)i);
- gtk_signal_connect(GTK_OBJECT(ConfWidgets.button[i]), "clicked", GTK_SIGNAL_FUNC(OnConfBtn), NULL);
- ConfWidgets.label[i] = gtk_label_new(eventDescription(PadButtons[0][buttonInfo[i].nr]));
- gtk_box_pack_start(GTK_BOX(hbox), ConfWidgets.label[i], FALSE, TRUE, 2);
- }
-
- hbox = gtk_hbox_new(FALSE, 0);
- gtk_fixed_put(GTK_FIXED(fixedbox), hbox, 20, 390);
- // Macro Buttons
- for (i=0; i<MAXMACROS; i++) {
- sprintf(buffer, "M%d", i+1);
- ConfWidgets.macro_button[i] = gtk_button_new_with_label(buffer);
- gtk_box_pack_start(GTK_BOX(hbox), ConfWidgets.macro_button[i], FALSE, TRUE, 2);
- gtk_object_set_user_data(GTK_OBJECT(ConfWidgets.macro_button[i]), (char *)i);
- gtk_signal_connect(GTK_OBJECT(ConfWidgets.macro_button[i]), "clicked", GTK_SIGNAL_FUNC(OnMacroBtn), NULL);
- ConfWidgets.macro_label[i] = gtk_label_new(eventDescription(macroLaunch[0][i]));
- gtk_box_pack_start(GTK_BOX(hbox), ConfWidgets.macro_label[i], FALSE, TRUE, 2);
- ConfWidgets.macro_def_button[i] = gtk_button_new_with_label("Def");
- gtk_box_pack_start(GTK_BOX(hbox), ConfWidgets.macro_def_button[i], FALSE, TRUE, 2);
- gtk_object_set_user_data(GTK_OBJECT(ConfWidgets.macro_def_button[i]), (char *)i);
- gtk_signal_connect(GTK_OBJECT(ConfWidgets.macro_def_button[i]), "clicked", GTK_SIGNAL_FUNC(OnMacroDefineBtn), NULL);
- if (i<MAXMACROS-1) {
- gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(" "), FALSE, TRUE, 2);
- }
- }
-
- gtk_widget_show_all (GTK_WIDGET (fixedbox));
-
- widget = glade_xml_get_widget (xml, "btnOK");
- g_signal_connect_data (GTK_OBJECT (widget), "clicked", GTK_SIGNAL_FUNC (OnConfOk), NULL, NULL, G_CONNECT_AFTER);
-
- widget = glade_xml_get_widget (xml, "btnCancel");
- g_signal_connect_data (GTK_OBJECT (widget), "clicked", GTK_SIGNAL_FUNC (OnConfCancel), NULL, NULL, G_CONNECT_AFTER);
-}
-
-long PADconfigure(void) {
- currentPad = 0;
- initPadtime();
- PADinit(0);
- CreateConfigWindow();
- gtk_widget_show_all(ConfWidgets.config_window);
-
- gtk_main();
-
- return 0;
+#include "pad.h"
+
+#define CONFIG_FILE "dfinput.cfg"
+
+GLOBALDATA g;
+
+static void SetDefaultConfig() {
+ memset(&g.cfg, 0, sizeof(g.cfg));
+
+ g.cfg.Threaded = 1;
+
+ g.cfg.PadDef[0].DevNum = 0;
+ g.cfg.PadDef[1].DevNum = 1;
+
+ g.cfg.PadDef[0].Type = PSE_PAD_TYPE_STANDARD;
+ g.cfg.PadDef[1].Type = PSE_PAD_TYPE_STANDARD;
+
+ // Pad1 keyboard
+ g.cfg.PadDef[0].KeyDef[DKEY_SELECT].Key = XK_c;
+ g.cfg.PadDef[0].KeyDef[DKEY_START].Key = XK_v;
+ g.cfg.PadDef[0].KeyDef[DKEY_UP].Key = XK_Up;
+ g.cfg.PadDef[0].KeyDef[DKEY_RIGHT].Key = XK_Right;
+ g.cfg.PadDef[0].KeyDef[DKEY_DOWN].Key = XK_Down;
+ g.cfg.PadDef[0].KeyDef[DKEY_LEFT].Key = XK_Left;
+ g.cfg.PadDef[0].KeyDef[DKEY_L2].Key = XK_e;
+ g.cfg.PadDef[0].KeyDef[DKEY_R2].Key = XK_t;
+ g.cfg.PadDef[0].KeyDef[DKEY_L1].Key = XK_w;
+ g.cfg.PadDef[0].KeyDef[DKEY_R1].Key = XK_r;
+ g.cfg.PadDef[0].KeyDef[DKEY_TRIANGLE].Key = XK_d;
+ g.cfg.PadDef[0].KeyDef[DKEY_CIRCLE].Key = XK_x;
+ g.cfg.PadDef[0].KeyDef[DKEY_CROSS].Key = XK_z;
+ g.cfg.PadDef[0].KeyDef[DKEY_SQUARE].Key = XK_s;
+
+ // Pad1 joystick
+ g.cfg.PadDef[0].KeyDef[DKEY_SELECT].JoyEvType = BUTTON;
+ g.cfg.PadDef[0].KeyDef[DKEY_SELECT].J.Button = 8;
+ g.cfg.PadDef[0].KeyDef[DKEY_START].JoyEvType = BUTTON;
+ g.cfg.PadDef[0].KeyDef[DKEY_START].J.Button = 9;
+ g.cfg.PadDef[0].KeyDef[DKEY_UP].JoyEvType = AXIS;
+ g.cfg.PadDef[0].KeyDef[DKEY_UP].J.Axis = -2;
+ g.cfg.PadDef[0].KeyDef[DKEY_RIGHT].JoyEvType = AXIS;
+ g.cfg.PadDef[0].KeyDef[DKEY_RIGHT].J.Axis = 1;
+ g.cfg.PadDef[0].KeyDef[DKEY_DOWN].JoyEvType = AXIS;
+ g.cfg.PadDef[0].KeyDef[DKEY_DOWN].J.Axis = 2;
+ g.cfg.PadDef[0].KeyDef[DKEY_LEFT].JoyEvType = AXIS;
+ g.cfg.PadDef[0].KeyDef[DKEY_LEFT].J.Axis = -1;
+ g.cfg.PadDef[0].KeyDef[DKEY_L2].JoyEvType = BUTTON;
+ g.cfg.PadDef[0].KeyDef[DKEY_L2].J.Button = 4;
+ g.cfg.PadDef[0].KeyDef[DKEY_L1].JoyEvType = BUTTON;
+ g.cfg.PadDef[0].KeyDef[DKEY_L1].J.Button = 6;
+ g.cfg.PadDef[0].KeyDef[DKEY_R2].JoyEvType = BUTTON;
+ g.cfg.PadDef[0].KeyDef[DKEY_R2].J.Button = 5;
+ g.cfg.PadDef[0].KeyDef[DKEY_R1].JoyEvType = BUTTON;
+ g.cfg.PadDef[0].KeyDef[DKEY_R1].J.Button = 7;
+ g.cfg.PadDef[0].KeyDef[DKEY_TRIANGLE].JoyEvType = BUTTON;
+ g.cfg.PadDef[0].KeyDef[DKEY_TRIANGLE].J.Button = 0;
+ g.cfg.PadDef[0].KeyDef[DKEY_CIRCLE].JoyEvType = BUTTON;
+ g.cfg.PadDef[0].KeyDef[DKEY_CIRCLE].J.Button = 1;
+ g.cfg.PadDef[0].KeyDef[DKEY_CROSS].JoyEvType = BUTTON;
+ g.cfg.PadDef[0].KeyDef[DKEY_CROSS].J.Button = 2;
+ g.cfg.PadDef[0].KeyDef[DKEY_SQUARE].JoyEvType = BUTTON;
+ g.cfg.PadDef[0].KeyDef[DKEY_SQUARE].J.Button = 3;
+
+ // Pad2 joystick
+ g.cfg.PadDef[1].KeyDef[DKEY_SELECT].JoyEvType = BUTTON;
+ g.cfg.PadDef[1].KeyDef[DKEY_SELECT].J.Button = 8;
+ g.cfg.PadDef[1].KeyDef[DKEY_START].JoyEvType = BUTTON;
+ g.cfg.PadDef[1].KeyDef[DKEY_START].J.Button = 9;
+ g.cfg.PadDef[1].KeyDef[DKEY_UP].JoyEvType = AXIS;
+ g.cfg.PadDef[1].KeyDef[DKEY_UP].J.Axis = -2;
+ g.cfg.PadDef[1].KeyDef[DKEY_RIGHT].JoyEvType = AXIS;
+ g.cfg.PadDef[1].KeyDef[DKEY_RIGHT].J.Axis = 1;
+ g.cfg.PadDef[1].KeyDef[DKEY_DOWN].JoyEvType = AXIS;
+ g.cfg.PadDef[1].KeyDef[DKEY_DOWN].J.Axis = 2;
+ g.cfg.PadDef[1].KeyDef[DKEY_LEFT].JoyEvType = AXIS;
+ g.cfg.PadDef[1].KeyDef[DKEY_LEFT].J.Axis = -1;
+ g.cfg.PadDef[1].KeyDef[DKEY_L2].JoyEvType = BUTTON;
+ g.cfg.PadDef[1].KeyDef[DKEY_L2].J.Button = 4;
+ g.cfg.PadDef[1].KeyDef[DKEY_L1].JoyEvType = BUTTON;
+ g.cfg.PadDef[1].KeyDef[DKEY_L1].J.Button = 6;
+ g.cfg.PadDef[1].KeyDef[DKEY_R2].JoyEvType = BUTTON;
+ g.cfg.PadDef[1].KeyDef[DKEY_R2].J.Button = 5;
+ g.cfg.PadDef[1].KeyDef[DKEY_R1].JoyEvType = BUTTON;
+ g.cfg.PadDef[1].KeyDef[DKEY_R1].J.Button = 7;
+ g.cfg.PadDef[1].KeyDef[DKEY_TRIANGLE].JoyEvType = BUTTON;
+ g.cfg.PadDef[1].KeyDef[DKEY_TRIANGLE].J.Button = 0;
+ g.cfg.PadDef[1].KeyDef[DKEY_CIRCLE].JoyEvType = BUTTON;
+ g.cfg.PadDef[1].KeyDef[DKEY_CIRCLE].J.Button = 1;
+ g.cfg.PadDef[1].KeyDef[DKEY_CROSS].JoyEvType = BUTTON;
+ g.cfg.PadDef[1].KeyDef[DKEY_CROSS].J.Button = 2;
+ g.cfg.PadDef[1].KeyDef[DKEY_SQUARE].JoyEvType = BUTTON;
+ g.cfg.PadDef[1].KeyDef[DKEY_SQUARE].J.Button = 3;
}
+void LoadConfig() {
+ FILE *fp;
+ char buf[256];
+ int current, a, b, c;
-/*---------------------------------------------------------------------*/
-/* About dialogue stuff */
-/*---------------------------------------------------------------------*/
-
-void PADabout(void) {
- GladeXML *xml;
- xml = glade_xml_new (DATADIR "dfinput.glade2", "AboutWin", NULL);
+ SetDefaultConfig();
- GtkWidget *widget = glade_xml_get_widget (xml, "AboutWin");
+ fp = fopen(CONFIG_FILE, "r");
+ if (fp == NULL) {
+ return;
+ }
- /* TODO Authors, about, version */
+ current = 0;
+
+ while (fgets(buf, 256, fp) != NULL) {
+ if (strncmp(buf, "Threaded=", 9) == 0) {
+ g.cfg.Threaded = atoi(&buf[9]);
+ } else if (strncmp(buf, "[PAD", 4) == 0) {
+ current = atoi(&buf[4]) - 1;
+ if (current < 0) {
+ current = 0;
+ } else if (current > 1) {
+ current = 1;
+ }
+ } else if (strncmp(buf, "DevNum=", 7) == 0) {
+ g.cfg.PadDef[current].DevNum = atoi(&buf[7]);
+ } else if (strncmp(buf, "Type=", 5) == 0) {
+ g.cfg.PadDef[current].Type = atoi(&buf[5]);
+ } else if (strncmp(buf, "Select=", 7) == 0) {
+ sscanf(buf, "Select=%d,%d,%d", &a, &b, &c);
+ g.cfg.PadDef[current].KeyDef[DKEY_SELECT].Key = a;
+ g.cfg.PadDef[current].KeyDef[DKEY_SELECT].JoyEvType = b;
+ g.cfg.PadDef[current].KeyDef[DKEY_SELECT].J.d = c;
+ } else if (strncmp(buf, "L3=", 3) == 0) {
+ sscanf(buf, "L3=%d,%d,%d", &a, &b, &c);
+ g.cfg.PadDef[current].KeyDef[DKEY_L3].Key = a;
+ g.cfg.PadDef[current].KeyDef[DKEY_L3].JoyEvType = b;
+ g.cfg.PadDef[current].KeyDef[DKEY_L3].J.d = c;
+ } else if (strncmp(buf, "R3=", 3) == 0) {
+ sscanf(buf, "R3=%d,%d,%d", &a, &b, &c);
+ g.cfg.PadDef[current].KeyDef[DKEY_R3].Key = a;
+ g.cfg.PadDef[current].KeyDef[DKEY_R3].JoyEvType = b;
+ g.cfg.PadDef[current].KeyDef[DKEY_R3].J.d = c;
+ } else if (strncmp(buf, "Start=", 6) == 0) {
+ sscanf(buf, "Start=%d,%d,%d", &a, &b, &c);
+ g.cfg.PadDef[current].KeyDef[DKEY_START].Key = a;
+ g.cfg.PadDef[current].KeyDef[DKEY_START].JoyEvType = b;
+ g.cfg.PadDef[current].KeyDef[DKEY_START].J.d = c;
+ } else if (strncmp(buf, "Up=", 3) == 0) {
+ sscanf(buf, "Up=%d,%d,%d", &a, &b, &c);
+ g.cfg.PadDef[current].KeyDef[DKEY_UP].Key = a;
+ g.cfg.PadDef[current].KeyDef[DKEY_UP].JoyEvType = b;
+ g.cfg.PadDef[current].KeyDef[DKEY_UP].J.d = c;
+ } else if (strncmp(buf, "Right=", 6) == 0) {
+ sscanf(buf, "Right=%d,%d,%d", &a, &b, &c);
+ g.cfg.PadDef[current].KeyDef[DKEY_RIGHT].Key = a;
+ g.cfg.PadDef[current].KeyDef[DKEY_RIGHT].JoyEvType = b;
+ g.cfg.PadDef[current].KeyDef[DKEY_RIGHT].J.d = c;
+ } else if (strncmp(buf, "Down=", 5) == 0) {
+ sscanf(buf, "Down=%d,%d,%d", &a, &b, &c);
+ g.cfg.PadDef[current].KeyDef[DKEY_DOWN].Key = a;
+ g.cfg.PadDef[current].KeyDef[DKEY_DOWN].JoyEvType = b;
+ g.cfg.PadDef[current].KeyDef[DKEY_DOWN].J.d = c;
+ } else if (strncmp(buf, "Left=", 5) == 0) {
+ sscanf(buf, "Left=%d,%d,%d", &a, &b, &c);
+ g.cfg.PadDef[current].KeyDef[DKEY_LEFT].Key = a;
+ g.cfg.PadDef[current].KeyDef[DKEY_LEFT].JoyEvType = b;
+ g.cfg.PadDef[current].KeyDef[DKEY_LEFT].J.d = c;
+ } else if (strncmp(buf, "L2=", 3) == 0) {
+ sscanf(buf, "L2=%d,%d,%d", &a, &b, &c);
+ g.cfg.PadDef[current].KeyDef[DKEY_L2].Key = a;
+ g.cfg.PadDef[current].KeyDef[DKEY_L2].JoyEvType = b;
+ g.cfg.PadDef[current].KeyDef[DKEY_L2].J.d = c;
+ } else if (strncmp(buf, "R2=", 3) == 0) {
+ sscanf(buf, "R2=%d,%d,%d", &a, &b, &c);
+ g.cfg.PadDef[current].KeyDef[DKEY_R2].Key = a;
+ g.cfg.PadDef[current].KeyDef[DKEY_R2].JoyEvType = b;
+ g.cfg.PadDef[current].KeyDef[DKEY_R2].J.d = c;
+ } else if (strncmp(buf, "L1=", 3) == 0) {
+ sscanf(buf, "L1=%d,%d,%d", &a, &b, &c);
+ g.cfg.PadDef[current].KeyDef[DKEY_L1].Key = a;
+ g.cfg.PadDef[current].KeyDef[DKEY_L1].JoyEvType = b;
+ g.cfg.PadDef[current].KeyDef[DKEY_L1].J.d = c;
+ } else if (strncmp(buf, "R1=", 3) == 0) {
+ sscanf(buf, "R1=%d,%d,%d", &a, &b, &c);
+ g.cfg.PadDef[current].KeyDef[DKEY_R1].Key = a;
+ g.cfg.PadDef[current].KeyDef[DKEY_R1].JoyEvType = b;
+ g.cfg.PadDef[current].KeyDef[DKEY_R1].J.d = c;
+ } else if (strncmp(buf, "Triangle=", 9) == 0) {
+ sscanf(buf, "Triangle=%d,%d,%d", &a, &b, &c);
+ g.cfg.PadDef[current].KeyDef[DKEY_TRIANGLE].Key = a;
+ g.cfg.PadDef[current].KeyDef[DKEY_TRIANGLE].JoyEvType = b;
+ g.cfg.PadDef[current].KeyDef[DKEY_TRIANGLE].J.d = c;
+ } else if (strncmp(buf, "Circle=", 7) == 0) {
+ sscanf(buf, "Circle=%d,%d,%d", &a, &b, &c);
+ g.cfg.PadDef[current].KeyDef[DKEY_CIRCLE].Key = a;
+ g.cfg.PadDef[current].KeyDef[DKEY_CIRCLE].JoyEvType = b;
+ g.cfg.PadDef[current].KeyDef[DKEY_CIRCLE].J.d = c;
+ } else if (strncmp(buf, "Cross=", 6) == 0) {
+ sscanf(buf, "Cross=%d,%d,%d", &a, &b, &c);
+ g.cfg.PadDef[current].KeyDef[DKEY_CROSS].Key = a;
+ g.cfg.PadDef[current].KeyDef[DKEY_CROSS].JoyEvType = b;
+ g.cfg.PadDef[current].KeyDef[DKEY_CROSS].J.d = c;
+ } else if (strncmp(buf, "Square=", 7) == 0) {
+ sscanf(buf, "Square=%d,%d,%d", &a, &b, &c);
+ g.cfg.PadDef[current].KeyDef[DKEY_SQUARE].Key = a;
+ g.cfg.PadDef[current].KeyDef[DKEY_SQUARE].JoyEvType = b;
+ g.cfg.PadDef[current].KeyDef[DKEY_SQUARE].J.d = c;
+ } else if (strncmp(buf, "LeftAnalogX=", 11) == 0) {
+ g.cfg.PadDef[current].AnalogDef[ANALOG_LEFT][ANALOG_X] = atoi(&buf[11]);
+ } else if (strncmp(buf, "LeftAnalogY=", 11) == 0) {
+ g.cfg.PadDef[current].AnalogDef[ANALOG_LEFT][ANALOG_Y] = atoi(&buf[11]);
+ } else if (strncmp(buf, "RightAnalogX=", 12) == 0) {
+ g.cfg.PadDef[current].AnalogDef[ANALOG_RIGHT][ANALOG_X] = atoi(&buf[12]);
+ } else if (strncmp(buf, "RightAnalogY=", 12) == 0) {
+ g.cfg.PadDef[current].AnalogDef[ANALOG_RIGHT][ANALOG_Y] = atoi(&buf[12]);
+ }
+ }
- gtk_dialog_run (GTK_DIALOG (widget));
- gtk_widget_destroy (widget);
-// gtk_main_quit();
+ fclose(fp);
}
-/*---------------------------------------------------------------------*/
-/* Main program */
-/*---------------------------------------------------------------------*/
-
-int main(int argc, char **argv) {
-#ifdef ENABLE_NLS
- setlocale (LC_ALL, "");
- bindtextdomain (GETTEXT_PACKAGE, LOCALE_DIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
- textdomain (GETTEXT_PACKAGE);
-#endif
+void SaveConfig() {
+ FILE *fp;
+ int i;
- gtk_set_locale();
- gtk_init (&argc, &argv);
-
- if (argc>1 && !strcmp(argv[1], "-about")) {
- PADabout();
- }
- else {
- PADconfigure();
- }
+ fp = fopen(CONFIG_FILE, "w");
+ if (fp == NULL) {
+ return;
+ }
- gtk_exit (0);
+ fprintf(fp, "[CONFIG]\n");
+ fprintf(fp, "Threaded=%d\n", g.cfg.Threaded);
+ fprintf(fp, "\n");
+
+ for (i = 0; i < 2; i++) {
+ fprintf(fp, "[PAD%d]\n", i + 1);
+ fprintf(fp, "DevNum=%d\n", g.cfg.PadDef[i].DevNum);
+ fprintf(fp, "Type=%d\n", g.cfg.PadDef[i].Type);
+
+ fprintf(fp, "Select=%d,%d,%d\n", g.cfg.PadDef[i].KeyDef[DKEY_SELECT].Key,
+ g.cfg.PadDef[i].KeyDef[DKEY_SELECT].JoyEvType, g.cfg.PadDef[i].KeyDef[DKEY_SELECT].J.d);
+ fprintf(fp, "L3=%d,%d,%d\n", g.cfg.PadDef[i].KeyDef[DKEY_L3].Key,
+ g.cfg.PadDef[i].KeyDef[DKEY_L3].JoyEvType, g.cfg.PadDef[i].KeyDef[DKEY_L3].J.d);
+ fprintf(fp, "R3=%d,%d,%d\n", g.cfg.PadDef[i].KeyDef[DKEY_R3].Key,
+ g.cfg.PadDef[i].KeyDef[DKEY_R3].JoyEvType, g.cfg.PadDef[i].KeyDef[DKEY_R3].J.d);
+ fprintf(fp, "Start=%d,%d,%d\n", g.cfg.PadDef[i].KeyDef[DKEY_START].Key,
+ g.cfg.PadDef[i].KeyDef[DKEY_START].JoyEvType, g.cfg.PadDef[i].KeyDef[DKEY_START].J.d);
+ fprintf(fp, "Up=%d,%d,%d\n", g.cfg.PadDef[i].KeyDef[DKEY_UP].Key,
+ g.cfg.PadDef[i].KeyDef[DKEY_UP].JoyEvType, g.cfg.PadDef[i].KeyDef[DKEY_UP].J.d);
+ fprintf(fp, "Right=%d,%d,%d\n", g.cfg.PadDef[i].KeyDef[DKEY_RIGHT].Key,
+ g.cfg.PadDef[i].KeyDef[DKEY_RIGHT].JoyEvType, g.cfg.PadDef[i].KeyDef[DKEY_RIGHT].J.d);
+ fprintf(fp, "Down=%d,%d,%d\n", g.cfg.PadDef[i].KeyDef[DKEY_DOWN].Key,
+ g.cfg.PadDef[i].KeyDef[DKEY_DOWN].JoyEvType, g.cfg.PadDef[i].KeyDef[DKEY_DOWN].J.d);
+ fprintf(fp, "Left=%d,%d,%d\n", g.cfg.PadDef[i].KeyDef[DKEY_LEFT].Key,
+ g.cfg.PadDef[i].KeyDef[DKEY_LEFT].JoyEvType, g.cfg.PadDef[i].KeyDef[DKEY_LEFT].J.d);
+ fprintf(fp, "L2=%d,%d,%d\n", g.cfg.PadDef[i].KeyDef[DKEY_L2].Key,
+ g.cfg.PadDef[i].KeyDef[DKEY_L2].JoyEvType, g.cfg.PadDef[i].KeyDef[DKEY_L2].J.d);
+ fprintf(fp, "R2=%d,%d,%d\n", g.cfg.PadDef[i].KeyDef[DKEY_R2].Key,
+ g.cfg.PadDef[i].KeyDef[DKEY_R2].JoyEvType, g.cfg.PadDef[i].KeyDef[DKEY_R2].J.d);
+ fprintf(fp, "L1=%d,%d,%d\n", g.cfg.PadDef[i].KeyDef[DKEY_L1].Key,
+ g.cfg.PadDef[i].KeyDef[DKEY_L1].JoyEvType, g.cfg.PadDef[i].KeyDef[DKEY_L1].J.d);
+ fprintf(fp, "R1=%d,%d,%d\n", g.cfg.PadDef[i].KeyDef[DKEY_R1].Key,
+ g.cfg.PadDef[i].KeyDef[DKEY_R1].JoyEvType, g.cfg.PadDef[i].KeyDef[DKEY_R1].J.d);
+ fprintf(fp, "Triangle=%d,%d,%d\n", g.cfg.PadDef[i].KeyDef[DKEY_TRIANGLE].Key,
+ g.cfg.PadDef[i].KeyDef[DKEY_TRIANGLE].JoyEvType, g.cfg.PadDef[i].KeyDef[DKEY_TRIANGLE].J.d);
+ fprintf(fp, "Circle=%d,%d,%d\n", g.cfg.PadDef[i].KeyDef[DKEY_CIRCLE].Key,
+ g.cfg.PadDef[i].KeyDef[DKEY_CIRCLE].JoyEvType, g.cfg.PadDef[i].KeyDef[DKEY_CIRCLE].J.d);
+ fprintf(fp, "Cross=%d,%d,%d\n", g.cfg.PadDef[i].KeyDef[DKEY_CROSS].Key,
+ g.cfg.PadDef[i].KeyDef[DKEY_CROSS].JoyEvType, g.cfg.PadDef[i].KeyDef[DKEY_CROSS].J.d);
+ fprintf(fp, "Square=%d,%d,%d\n", g.cfg.PadDef[i].KeyDef[DKEY_SQUARE].Key,
+ g.cfg.PadDef[i].KeyDef[DKEY_SQUARE].JoyEvType, g.cfg.PadDef[i].KeyDef[DKEY_SQUARE].J.d);
+
+ fprintf(fp, "LeftAnalogX=%d\n", g.cfg.PadDef[i].AnalogDef[ANALOG_LEFT][ANALOG_X]);
+ fprintf(fp, "LeftAnalogY=%d\n", g.cfg.PadDef[i].AnalogDef[ANALOG_LEFT][ANALOG_Y]);
+ fprintf(fp, "RightAnalogX=%d\n", g.cfg.PadDef[i].AnalogDef[ANALOG_RIGHT][ANALOG_X]);
+ fprintf(fp, "RightAnalogY=%d\n", g.cfg.PadDef[i].AnalogDef[ANALOG_RIGHT][ANALOG_Y]);
+
+ fprintf(fp, "\n");
+ }
- return 0;
+ fclose(fp);
}
diff --git a/plugins/dfinput/dfinput.glade2 b/plugins/dfinput/dfinput.glade2
index d98fcbd7..e4a9ba81 100644
--- a/plugins/dfinput/dfinput.glade2
+++ b/plugins/dfinput/dfinput.glade2
@@ -1,31 +1,95 @@
<?xml version="1.0"?>
<glade-interface>
- <!-- interface-requires gtk+ 2.6 -->
- <!-- interface-naming-policy toplevel-contextual -->
- <widget class="GtkWindow" id="CfgWin">
- <property name="visible">True</property>
- <property name="title" translatable="yes">Configure Gamepad/Keyboard</property>
- <property name="modal">True</property>
- <property name="type_hint">dialog</property>
- <child>
- <widget class="GtkVBox" id="vbox1">
+ <!-- interface-requires gtk+ 2.12 -->
+ <!-- interface-naming-policy project-wide -->
+ <widget class="GtkDialog" id="CfgWnd">
+ <property name="border_width">5</property>
+ <property name="resizable">False</property>
+ <property name="type_hint">normal</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox1">
<property name="visible">True</property>
- <property name="border_width">6</property>
<property name="orientation">vertical</property>
- <property name="spacing">6</property>
+ <property name="spacing">2</property>
<child>
- <widget class="GtkVBox" id="vbox2">
+ <widget class="GtkNotebook" id="notebook1">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
+ <property name="can_focus">True</property>
<child>
- <widget class="GtkHBox" id="hbox1">
+ <widget class="GtkVBox" id="vbox1">
<property name="visible">True</property>
- <property name="border_width">6</property>
- <property name="spacing">50</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
<child>
- <widget class="GtkLabel" id="label1">
+ <widget class="GtkHButtonBox" id="hbuttonbox1">
<property name="visible">True</property>
- <property name="label" translatable="yes">Pad number:</property>
+ <child>
+ <widget class="GtkHBox" id="hbox6">
+ <property name="visible">True</property>
+ <property name="spacing">10</property>
+ <child>
+ <widget class="GtkLabel" id="label10">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Device:</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkComboBox" id="combodev1">
+ <property name="width_request">150</property>
+ <property name="visible">True</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox5">
+ <property name="visible">True</property>
+ <property name="spacing">10</property>
+ <child>
+ <widget class="GtkLabel" id="label5">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Type:</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkComboBox" id="combotype1">
+ <property name="width_request">200</property>
+ <property name="visible">True</property>
+ <property name="items" translatable="yes">Digital Pad
+Analog Pad</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
</widget>
<packing>
<property name="expand">False</property>
@@ -34,50 +98,195 @@
</packing>
</child>
<child>
- <widget class="GtkRadioButton" id="radiobutton1">
- <property name="label" translatable="yes">1</property>
+ <widget class="GtkScrolledWindow" id="scrolledwindow1">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
+ <property name="border_width">5</property>
+ <property name="hscrollbar_policy">automatic</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="window_placement_set">True</property>
+ <property name="shadow_type">etched-in</property>
+ <child>
+ <widget class="GtkTreeView" id="treeview1">
+ <property name="width_request">500</property>
+ <property name="height_request">275</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ </child>
</widget>
<packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
- <widget class="GtkRadioButton" id="radiobutton2">
- <property name="label" translatable="yes">2</property>
+ <widget class="GtkHButtonBox" id="hbuttonbox2">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- <property name="group">radiobutton1</property>
+ <property name="spacing">20</property>
+ <property name="layout_style">center</property>
+ <child>
+ <widget class="GtkButton" id="btnchange1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <child>
+ <widget class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="stock">gtk-edit</property>
+ <property name="icon-size">1</property>
+ </widget>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Change</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="btnreset1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <child>
+ <widget class="GtkHBox" id="hbox2">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkImage" id="image2">
+ <property name="visible">True</property>
+ <property name="stock">gtk-undo</property>
+ <property name="icon-size">1</property>
+ </widget>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label6">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Reset</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
</widget>
<packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
<property name="position">2</property>
</packing>
</child>
</widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Controller 1</property>
+ </widget>
<packing>
- <property name="position">0</property>
+ <property name="tab_fill">False</property>
+ <property name="type">tab</property>
</packing>
</child>
<child>
- <widget class="GtkHBox" id="hbox2">
+ <widget class="GtkVBox" id="vbox2">
<property name="visible">True</property>
- <property name="border_width">6</property>
- <property name="spacing">6</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
<child>
- <widget class="GtkLabel" id="label3">
+ <widget class="GtkHButtonBox" id="hbuttonbox4">
<property name="visible">True</property>
- <property name="label" translatable="yes">Device file:</property>
+ <child>
+ <widget class="GtkHBox" id="hbox8">
+ <property name="visible">True</property>
+ <property name="spacing">10</property>
+ <child>
+ <widget class="GtkLabel" id="label11">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Device:</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkComboBox" id="combodev2">
+ <property name="width_request">150</property>
+ <property name="visible">True</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox7">
+ <property name="visible">True</property>
+ <property name="spacing">10</property>
+ <child>
+ <widget class="GtkLabel" id="label7">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Type:</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkComboBox" id="combotype2">
+ <property name="width_request">200</property>
+ <property name="visible">True</property>
+ <property name="items" translatable="yes">Digital Pad
+Analog Pad</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
</widget>
<packing>
<property name="expand">False</property>
@@ -86,52 +295,145 @@
</packing>
</child>
<child>
- <widget class="GtkEntry" id="filename_entry">
+ <widget class="GtkScrolledWindow" id="scrolledwindow2">
<property name="visible">True</property>
<property name="can_focus">True</property>
+ <property name="border_width">5</property>
+ <property name="hscrollbar_policy">automatic</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="window_placement_set">True</property>
+ <property name="shadow_type">etched-in</property>
+ <child>
+ <widget class="GtkTreeView" id="treeview2">
+ <property name="width_request">500</property>
+ <property name="height_request">275</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ </child>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkHBox" id="hbox3">
- <property name="visible">True</property>
- <property name="border_width">6</property>
- <property name="spacing">6</property>
<child>
- <widget class="GtkCheckButton" id="chkMultithreaded">
- <property name="label" translatable="yes">Multi-threaded</property>
+ <widget class="GtkHButtonBox" id="hbuttonbox3">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
+ <property name="spacing">20</property>
+ <property name="layout_style">center</property>
+ <child>
+ <widget class="GtkButton" id="btnchange2">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <child>
+ <widget class="GtkHBox" id="hbox3">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkImage" id="image3">
+ <property name="visible">True</property>
+ <property name="stock">gtk-edit</property>
+ <property name="icon-size">1</property>
+ </widget>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label8">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Change</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="btnreset2">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <child>
+ <widget class="GtkHBox" id="hbox4">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkImage" id="image4">
+ <property name="visible">True</property>
+ <property name="stock">gtk-undo</property>
+ <property name="icon-size">1</property>
+ </widget>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label9">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Reset</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
- <property name="position">0</property>
+ <property name="position">2</property>
</packing>
</child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Controller 2</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ <property name="tab_fill">False</property>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="vbox3">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">20</property>
<child>
- <widget class="GtkCheckButton" id="chkAnalog">
- <property name="label" translatable="yes">Analog</property>
+ <widget class="GtkCheckButton" id="checkmt">
+ <property name="label" translatable="yes">Multi-Threaded (Recommended)</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
- <property name="use_underline">True</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
- <property name="position">1</property>
+ <property name="padding">16</property>
+ <property name="position">0</property>
</packing>
</child>
</widget>
@@ -140,55 +442,31 @@
</packing>
</child>
<child>
- <widget class="GtkFrame" id="frame1">
+ <widget class="GtkLabel" id="label3">
<property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">out</property>
- <child>
- <widget class="GtkAlignment" id="alignment1">
- <property name="visible">True</property>
- <property name="bottom_padding">5</property>
- <property name="left_padding">12</property>
- <property name="right_padding">12</property>
- <child>
- <widget class="GtkFixed" id="fixed1">
- <property name="visible">True</property>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label4">
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;b&gt;Button Configuration&lt;/b&gt;</property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
+ <property name="label" translatable="yes">Options</property>
</widget>
<packing>
- <property name="position">3</property>
+ <property name="position">2</property>
+ <property name="tab_fill">False</property>
+ <property name="type">tab</property>
</packing>
</child>
</widget>
<packing>
- <property name="position">0</property>
+ <property name="position">1</property>
</packing>
</child>
- <child>
- <widget class="GtkHButtonBox" id="hbuttonbox1">
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area1">
<property name="visible">True</property>
- <property name="spacing">6</property>
<property name="layout_style">end</property>
<child>
- <widget class="GtkButton" id="btnCancel">
- <property name="label">gtk-cancel</property>
+ <widget class="GtkButton" id="btnclose">
+ <property name="label">gtk-close</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">False</property>
+ <property name="receives_default">True</property>
<property name="use_stock">True</property>
</widget>
<packing>
@@ -197,45 +475,9 @@
<property name="position">0</property>
</packing>
</child>
- <child>
- <widget class="GtkButton" id="btnOK">
- <property name="label">gtk-ok</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">False</property>
- <property name="use_stock">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
</widget>
<packing>
<property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- <widget class="GtkAboutDialog" id="AboutWin">
- <property name="visible">True</property>
- <property name="window_position">center</property>
- <property name="type_hint">normal</property>
- <property name="comments" translatable="yes">Based on PadJoy by Erich Kitzm&#xFC;ller (ammoq@ammoq.com)</property>
- <property name="authors">Erich Kitzm&#xFC;ller (ammoq@ammoq.com)
-Andrew Burton (adb@iinet.net.au)</property>
- <property name="translator_credits" translatable="yes" comments="TRANSLATORS: Replace this string with your names, one name per line.">translator-credits</property>
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox1">
- <property name="orientation">vertical</property>
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area1"/>
- <packing>
- <property name="expand">False</property>
<property name="pack_type">end</property>
<property name="position">0</property>
</packing>
diff --git a/plugins/dfinput/pad.c b/plugins/dfinput/pad.c
index d67a3a7b..564aa324 100644
--- a/plugins/dfinput/pad.c
+++ b/plugins/dfinput/pad.c
@@ -1,1001 +1,472 @@
/*
- * Pad for Psemu Pro like Emulators
- * This is the plugin
+ * Copyright (c) 2009, Wei Mingzhi <whistler@openoffice.org>.
+ * All Rights Reserved.
*
- * Modified for PCSX-df by Ryan Schultz
+ * 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 3 of the License, or
+ * (at your option) any later version.
*
- * Written by Erich Kitzmuller <ammoq@ammoq.com>
- * Based on padXwin by linuzappz <linuzappz@hotmail.com>
+ * 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.
*
- * Copyright 2002,2003 by Erich Kitzmuller
- *
- * 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, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * 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 "config.h"
+#include "pad.h"
-#include <stdio.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#ifdef __linux__
-#include <linux/joystick.h>
-#endif
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <unistd.h>
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <X11/keysym.h>
-#include <X11/XKBlib.h>
-#include <pthread.h>
-#include <errno.h>
-#include "padjoy.h"
-#ifdef ENABLE_NLS
-#include <libintl.h>
-#include <locale.h>
-#define _(x) gettext(x)
-#define N_(x) (x)
-#else
-#define _(x) (x)
-#define N_(x) (x)
-#endif
-
-#ifdef __linux__
-char *LibName = N_("Gamepad/Keyboard Input");
+char *PSEgetLibName(void) {
+#ifdef EPSXE
+ return _("Gamepad/Keyboard Input (ePSXe)");
#else
-char *LibName = N_("Keyboard Input");
+ return _("Gamepad/Keyboard Input");
#endif
-
-// Prototypes
-static void loadConfig();
-static void *thread_check_joydevice(void *arg);
-static void initPadtime();
-static PadJoyEvent *EventCode2PadJoyEvent(EventCode p_e);
-
-// Filenames for device files, e.g. "/dev/input/js0"
-static char devicefilename[MAXDEVICES][FILENAME_MAX+1] = {"/dev/input/js0", "/dev/input/js1"};
-
-// File desciptors for device files
-static int devicefile[MAXDEVICES] = { -1, -1 };
-
-// Use Threading for joy device input?
-static int use_threads = 1;
-static pthread_t joy_thread;
-static int die_thread_die = 0;
-
-// Emulate Dualshock(TM) analog pad?
-static int use_analog = 0;
-
-// any joydevice open?
-static int joydevice_open = 0;
-
-// initialisation already done?
-static int init_done = 0;
-
-// calibration data
-int minzero[MAXAXES];
-int maxzero[MAXAXES];
-
-// axes status - so only changing status are reported
-int axestatus[MAXDEVICES][MAXAXES];
-
-// Assignment of PSX buttons to Events
-static EventCode PadButtons[MAXDEVICES][MAXPSXBUTTONS] =
-{
- {
- KEY_EVENT(XK_e), // L2
- KEY_EVENT(XK_t), // R2
- KEY_EVENT(XK_w), // L1
- KEY_EVENT(XK_r), // R1
- KEY_EVENT(XK_d), // Triangle
- KEY_EVENT(XK_x), // Circle
- KEY_EVENT(XK_z), // Cross
- KEY_EVENT(XK_s), // Square
- KEY_EVENT(XK_c), // Select
- NO_EVENT, // Left Analog
- NO_EVENT, // Right Analog
- KEY_EVENT(XK_v), // Start
- KEY_EVENT(XK_Up), // Up
- KEY_EVENT(XK_Right), // Right
- KEY_EVENT(XK_Down), // Down
- KEY_EVENT(XK_Left), // Left
- NO_EVENT, // Left Analog X
- NO_EVENT, // Left Analog Y
- NO_EVENT, // Right Analog X
- NO_EVENT // Right Analog Y
- },
- {
- NO_EVENT, // L2
- NO_EVENT, // R2
- NO_EVENT, // L1
- NO_EVENT, // R1
- NO_EVENT, // Triangle
- NO_EVENT, // Circle
- NO_EVENT, // Cross
- NO_EVENT, // Square
- NO_EVENT, // Select
- NO_EVENT, // Left Analog
- NO_EVENT, // Right Analog
- NO_EVENT, // Start
- NO_EVENT, // Up
- NO_EVENT, // Right
- NO_EVENT, // Down
- NO_EVENT, // Left
- NO_EVENT, // Left Analog X
- NO_EVENT, // Left Analog Y
- NO_EVENT, // Right Analog X
- NO_EVENT // Right Analog Y
- }
-};
-
-static Display *Dsp;
-static Atom wmprotocols, wmdelwindow;
-
-static EventCode macroLaunch[MAXDEVICES][MAXMACROS];
-static EventCode macroEvents[MAXDEVICES][MAXMACROS][MAXMACROLENGTH];
-static long macroInterval[MAXDEVICES][MAXMACROS][MAXMACROLENGTH];
-static int macroActive[MAXDEVICES];
-static int macroIndex[MAXDEVICES];
-static long macroNext[MAXDEVICES];
-
-unsigned short PadStat[MAXDEVICES] = {0xffff, 0xffff};
-
-int AnalogValue[MAXDEVICES][MAXPSXBUTTONS-4] = {{127,127,127,127}, {127,127,127,127}};
-
-char *PSEgetLibName(void) {
- return _(LibName);
}
uint32_t PSEgetLibType(void) {
- return 8; // PSE_LT_PAD
+ return PSE_LT_PAD;
}
uint32_t PSEgetLibVersion(void) {
- return 1 << 16;
-}
-
-void init_macros() {
- int i,j;
-
- for (i=0; i<MAXDEVICES; i++) {
- for (j=0; j<MAXMACROS; j++) {
- macroLaunch[i][j] = NO_EVENT;
- macroEvents[i][j][0] = NO_EVENT;
- macroInterval[i][j][0] = 0;
- }
- macroActive[i] = -1;
- macroIndex[i] = 0;
- macroNext[i] = 0;
- }
+ return (1 << 16) | (1 << 8);
}
long PADinit(long flags) {
- int i,j;
+ LoadConfig();
- init_macros();
- initPadtime();
- for (i = 0; i < MAXDEVICES; i++) {
- maxzero[i] = 250;
- minzero[i] = -250;
+ g.PadState[0].PadMode = 0;
+ g.PadState[0].PadID = 0x41;
+ g.PadState[1].PadMode = 0;
+ g.PadState[1].PadID = 0x41;
- for (j = 0; j < MAXAXES; j++) {
- axestatus[i][j] = AXESTS_UNKNOWN;
- }
- }
- loadConfig();
-
- return 0;
+ return PSE_PAD_ERR_SUCCESS;
}
long PADshutdown(void) {
- return 0;
+ PADclose();
+ return PSE_PAD_ERR_SUCCESS;
}
-long PADopen(unsigned long *Disp) {
- int i,j;
- int res;
- PadJoyEvent *pje;
-
- if (init_done) {
-// fprintf(stderr, "DFInput warning: device already initialized.\n");
- return 0;
- }
-
- Dsp = (Display *)*Disp;
- XkbSetDetectableAutoRepeat(Dsp, 1, NULL);
-
- // TODO: find a way to grab the window, and set protocol WM_DELETE_WINDOW if not already set by the video plugin
- wmprotocols = XInternAtom(Dsp,"WM_PROTOCOLS",0);
- wmdelwindow = XInternAtom(Dsp,"WM_DELETE_WINDOW",0);
- //XSetWMProtocols(Dsp, window, &wmdelwindow, 1); //need window!
-
- joydevice_open = 0;
-
-#ifdef __linux__
- for (i = 0; i < MAXDEVICES; i++) {
- if (devicefilename[i][0]) {
- devicefile[i] = open(devicefilename[i], O_RDONLY);
- if (devicefile[i] == -1) {
- fprintf(stderr, "DFInput error: could not open device %s!\n", devicefilename[i]);
- }
- else {
- joydevice_open = 1;
- }
- }
- else {
- devicefile [i] = -1;
- }
- }
-#endif
+static pthread_t ThreadID;
+static uint8_t TerminateThread = 0;
- for (i = 0; i < MAXDEVICES; i++) {
- for (j = 0; j < MAXAXES; j++) {
- axestatus[i][j] = AXESTS_UNUSED;
- }
- }
-
- for (i=0; i<MAXDEVICES; i++) {
- for (j = 0; j < MAXPSXBUTTONS; j++) {
- pje = EventCode2PadJoyEvent(PadButtons[i][j]);
-
- if (pje->event_type == EVENTTYPE_AXISPLUS || pje->event_type == EVENTTYPE_AXISMINUS) {
- axestatus[pje->pad][pje->no] = AXESTS_UNKNOWN;
- }
-#ifdef __linux__
- else if (pje->event_type == EVENTTYPE_ANALOG && use_analog) {
- axestatus[pje->pad][pje->no] = AXESTS_ANALOG;
- }
-#endif
- }
- }
-
-#ifdef __linux__
- if (use_threads) {
- die_thread_die = 0;
- if (joydevice_open) {
- fprintf(stderr, "DFInput: starting thread...\n");
- sleep(1);
- res = pthread_create(&joy_thread, NULL, thread_check_joydevice, (void *) NULL);
-
- if (res!=0) {
- fprintf(stderr, "DFInput warning: thread failure, switching to polling!\n");
- use_threads = 0;
- }
- }
- }
-#endif
+static void *JoyThread(void *param) {
+ while (!TerminateThread) {
+ CheckJoy();
+ usleep(1000);
+ }
+ pthread_exit(0);
+ return NULL;
+}
- init_done = 1;
+long PADopen(unsigned long *Disp) {
+ g.Disp = (Display *)*Disp;
+
+ if (!g.Opened) {
+ if (SDL_WasInit(SDL_INIT_EVERYTHING)) {
+ if (SDL_InitSubSystem(SDL_INIT_JOYSTICK) == -1) {
+ return PSE_PAD_ERR_FAILURE;
+ }
+ } else if (SDL_Init(SDL_INIT_JOYSTICK | SDL_INIT_NOPARACHUTE) == -1) {
+ return PSE_PAD_ERR_FAILURE;
+ }
+
+ InitSDLJoy();
+ InitKeyboard();
+
+ g.KeyLeftOver = 0;
+
+ if (g.cfg.Threaded) {
+ TerminateThread = 0;
+
+ if (pthread_create(&ThreadID, NULL, JoyThread, NULL) != 0) {
+ // thread creation failed, fallback to polling
+ g.cfg.Threaded = 0;
+ }
+ }
+ }
+
+ g.Opened = 1;
- return 0;
+ return PSE_PAD_ERR_SUCCESS;
}
long PADclose(void) {
- int i;
-
-#ifdef __linux__
- for (i=0; i<2; i++) {
- if (devicefile[i] > -1) {
- close (devicefile[i]);
- }
- }
-
- if (use_threads) {
- die_thread_die = 1;
- if (joydevice_open) {
- pthread_join(joy_thread, (void **) NULL);
- }
- }
-#endif
-
- init_done = 0;
+ if (g.Opened) {
+ if (g.cfg.Threaded) {
+ TerminateThread = 1;
+ pthread_join(ThreadID, NULL);
+ }
+
+ DestroySDLJoy();
+ DestroyKeyboard();
+
+ if (SDL_WasInit(SDL_INIT_EVERYTHING & ~SDL_INIT_JOYSTICK)) {
+ SDL_QuitSubSystem(SDL_INIT_JOYSTICK);
+ } else {
+ SDL_Quit();
+ }
+ }
- XAutoRepeatOn(Dsp);
+ g.Opened = 0;
- return 0;
+ return PSE_PAD_ERR_SUCCESS;
}
long PADquery(void) {
- return 3; // both pads
+ return PSE_PAD_USE_PORT1 | PSE_PAD_USE_PORT2;
}
-static long firstsecond = 0;
-
-static void initPadtime() {
- struct timeval tv;
- gettimeofday(&tv, NULL);
- firstsecond = tv.tv_sec;
+static void UpdateInput(void) {
+ if (!g.cfg.Threaded) CheckJoy();
+ CheckKeyboard();
}
-// construct a time on our own
-long getPadtime() {
- struct timeval tv;
- gettimeofday(&tv, NULL);
- return (tv.tv_sec-firstsecond)*10000+tv.tv_usec/100;
-}
+#ifndef EPSXE
-// get pending events
-static int getPendingEvents(int millisecondstowait, EventCode *events, int maxevents, int checkJoydevice, int checkXKeyboard, long *timing) {
- fd_set rfds;
- int retval;
- int i;
- int md;
- int eventsread=0;
- XEvent xe;
- XClientMessageEvent *xce;
- int cntopen;
- struct timeval tv;
- int oldstatus;
-
-#ifdef __linux__
- struct js_event je;
-
- if (checkJoydevice) {
- FD_ZERO(&rfds);
- md = -1;
- cntopen=0;
- for (i=0; i<MAXDEVICES; i++) {
- if (devicefile[i] > -1) {
- FD_SET(devicefile[i], &rfds);
- cntopen++;
- }
- if (devicefile[i] > md) md = devicefile[i];
- }
- tv.tv_sec = millisecondstowait / 1000;
- tv.tv_usec = 1000 * (millisecondstowait % 1000);
-
- retval = select(md + 1, &rfds, NULL, NULL, &tv);
-
- while (retval && eventsread < maxevents - 2 * checkXKeyboard) {
- for (i = 0; i < MAXDEVICES; i++) {
- if (devicefile[i] > -1 && FD_ISSET(devicefile[i], &rfds)) {
- read (devicefile[i], &je, 8);
-
- if (je.type == JS_EVENT_AXIS && je.number < MAXAXES) {
- if (axestatus[i][je.number] == AXESTS_ANALOG) {
- /* this axe should be reported analog */
- events[eventsread++] = ANALOGAXIS_EVENT(i,je.number, (je.value + 32768) >> 8);
- if (timing) {
- (*timing) = getPadtime();
- timing++;
- }
- if (eventsread == maxevents) return eventsread;
-
- }
- else if (je.value > maxzero[i]) {
- if (axestatus[i][je.number] != AXESTS_PLUS &&
- axestatus[i][je.number] != AXESTS_UNUSED) {
-
- oldstatus = axestatus[i][je.number];
-
- axestatus[i][je.number] = AXESTS_PLUS;
-
- events[eventsread++] = AXISPLUS_EVENT(i, je.number);
- if (timing) {
- (*timing) = getPadtime();
- timing++;
- }
- if (eventsread==maxevents) return eventsread;
-
- if (oldstatus == AXESTS_MINUS) {
- events[eventsread++] = RELEASE_EVENT + AXISMINUS_EVENT(i, je.number);
- if (timing) {
- (*timing) = getPadtime();
- timing++;
- }
- if (eventsread == maxevents) return eventsread;
- }
-
- }
- }
- else if (je.value < minzero[i]) {
- if (axestatus[i][je.number] != AXESTS_MINUS &&
- axestatus[i][je.number] != AXESTS_UNUSED) {
-
- oldstatus = axestatus[i][je.number];
-
- axestatus[i][je.number] = AXESTS_MINUS;
-
- events[eventsread++] = AXISMINUS_EVENT(i, je.number);
- if (timing) {
- (*timing) = getPadtime();
- timing++;
- }
- if (eventsread == maxevents) return eventsread;
-
- if (oldstatus == AXESTS_PLUS) {
- events[eventsread++] = RELEASE_EVENT+AXISPLUS_EVENT(i, je.number);
- if (timing) {
- (*timing) = getPadtime();
- timing++;
- }
- if (eventsread == maxevents) return eventsread;
- }
- }
- }
- else {
- if (axestatus[i][je.number] != AXESTS_CENTER &&
- axestatus[i][je.number] != AXESTS_UNUSED) {
-
- oldstatus = axestatus[i][je.number];
-
- axestatus[i][je.number] = AXESTS_CENTER;
-
- if (oldstatus == AXESTS_PLUS) {
- events[eventsread++] = RELEASE_EVENT+AXISPLUS_EVENT(i,je.number);
- if (timing) {
- (*timing) = getPadtime();
- timing++;
- }
- if (eventsread == maxevents) return eventsread;
- }
- else if (oldstatus == AXESTS_MINUS) {
- events[eventsread++] = RELEASE_EVENT+AXISMINUS_EVENT(i,je.number);
- if (timing) {
- (*timing) = getPadtime();
- timing++;
- }
- if (eventsread == maxevents) return eventsread;
- }
- }
- }
- }
- else if (je.type == JS_EVENT_BUTTON && je.number<MAXBUTTONS) {
- events[eventsread++] = (je.value ? 0 : RELEASE_EVENT) + BUTTON_EVENT(i, je.number);
- if (timing) {
- (*timing) = getPadtime();
- timing++;
- }
- if (eventsread == maxevents) return eventsread;
- }
- }
- }
- tv.tv_sec = 0;
- tv.tv_usec = 0;
-
- retval = select(md + 1, &rfds, NULL, NULL, &tv);
- }
-
- }
-#endif
+static uint8_t stdpar[2][20] = {
+ {0xFF, 0x5A, 0xFF, 0xFF, 0x80, 0x80, 0x80, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00},
+ {0xFF, 0x5A, 0xFF, 0xFF, 0x80, 0x80, 0x80, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00}
+};
- if (checkXKeyboard) {
- while ((i = XPending(Dsp))) {
- while (i--) {
- XNextEvent(Dsp, &xe);
- switch (xe.type) {
- case KeyPress:
- events[eventsread++] = KEY_EVENT(XLookupKeysym((XKeyEvent *)&xe, 0));
- if (timing) {
- (*timing) = getPadtime();
- timing++;
- }
- if (eventsread == maxevents) return eventsread;
- break;
- case KeyRelease:
- events[eventsread++] = RELEASE_EVENT + KEY_EVENT(XLookupKeysym((XKeyEvent *)&xe, 0));
- if (timing) {
- (*timing) = getPadtime();
- timing++;
- }
- if (eventsread == maxevents) return eventsread;
- break;
- case ClientMessage:
- xce = (XClientMessageEvent *)&xe;
- if (xce->message_type == wmprotocols && (Atom)xce->data.l[0] == wmdelwindow) {
- events[eventsread++] = KEY_EVENT(XK_Escape);
- if (eventsread == maxevents) return eventsread;
- }
- break;
-/*
- case FocusIn:
- XAutoRepeatOff(Dsp);
- break;
- case FocusOut:
- XAutoRepeatOn(Dsp);
- break;
-*/
- }
- }
- }
- }
-
- return eventsread;
-}
+static uint8_t unk46[2][8] = {
+ {0xFF, 0x5A, 0x00, 0x00, 0x01, 0x02, 0x00, 0x0A},
+ {0xFF, 0x5A, 0x00, 0x00, 0x01, 0x02, 0x00, 0x0A}
+};
-// Key Event not used...
-static EventCode keyLeftOver = NO_EVENT;
-
-static void CheckPads(int checkJoydevice, int checkXKeyboard, int blocking) {
- EventCode events[MAXCNT];
- int cnt;
- int release;
- EventCode e;
- int i,j,k,l;
- int notfound;
- long now;
- int v;
-
- if (checkJoydevice || checkXKeyboard) {
- cnt = getPendingEvents(blocking<<8, events, MAXCNT, checkJoydevice, checkXKeyboard, NULL);
- }
- else {
- cnt = 0;
- }
-
- // more events come from the macros
- // only process makros when blocking is not set, since
- // this cannot be done by the joy device thread
-
- if (!blocking) {
- now= -1;
- for (j = 0; j < MAXDEVICES; j++) {
- if (macroActive[j] > -1) {
- if (now < 0) {
- now = getPadtime();
- }
-
- while (now >= macroNext[j] && cnt < MAXCNT && macroActive[j] > -1) {
- events[cnt++]=macroEvents[j][macroActive[j]][macroIndex[j]];
- macroIndex[j]++;
- if (macroIndex[j] == MAXMACROLENGTH || macroEvents[j][macroActive[j]][macroIndex[j]] == NO_EVENT) {
- macroActive[j] = -1;
- }
- else {
- macroNext[j] += macroInterval[j][macroActive[j]][macroIndex[j]];
- }
- }
- }
- }
- }
-
- for (i = 0; i < cnt; i++) {
- e = events[i];
- if (e >= RELEASE_EVENT) {
- release = 1;
- e -= RELEASE_EVENT;
- }
- else {
- release = 0;
- }
-
- notfound = 1;
- if (e >= FIRST_ANALOG_EVENT) {
- v = e & 0xff;
- e -= v;
- for (j = 0; j < MAXDEVICES && notfound; j++) {
- for (k = 16; k < MAXPSXBUTTONS && notfound; k++) {
- if (PadButtons[j][k] == e) {
- AnalogValue[j][k - 16] = v;
- notfound = 0;
- }
- }
- }
- }
- else
- {
- for (j=0; j<MAXDEVICES && notfound; j++) {
- for (k=0; k<MAXPSXBUTTONS && notfound; k++) {
- if (PadButtons[j][k] == e) {
- notfound = 0;
- if (release) {
- PadStat[j]|=(1<<k);
- }
- else {
- PadStat[j]&=~(1<<k);
- }
- }
- }
- for (k=0; k<MAXMACROS && notfound; k++) {
- if (macroLaunch[j][k] == e) {
- notfound=0;
- if (release) {
- // release all buttons pressed by the macro
- for (l=macroIndex[j]; l<MAXMACROLENGTH && macroEvents[j][macroActive[j]][l] != NO_EVENT; l++) {
- if (macroEvents[j][macroActive[j]][l] >= RELEASE_EVENT) {
- if (cnt<MAXCNT) {
- events[cnt++]=macroEvents[j][macroActive[j]][l];
- }
- }
-
- }
-
- macroActive[j]= -1; // stop Makro from running
- }
- else {
- macroActive[j]=k;
- macroIndex[j]=0;
- macroNext[j]=getPadtime();
- }
- }
- }
- }
- }
- if (notfound && e < FIRST_JOY_EVENT) {
- keyLeftOver = e + (release << 30);
- }
- }
-}
+static uint8_t unk47[2][8] = {
+ {0xFF, 0x5A, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00},
+ {0xFF, 0x5A, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00}
+};
+static uint8_t unk4c[2][8] = {
+ {0xFF, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0xFF, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
+};
-long PADreadPort1(PadDataS *pad) {
- if (!use_threads) {
- CheckPads(joydevice_open, 1, 0);
- }
- else {
- CheckPads(0, 1, 0);
- }
-
- pad->buttonStatus = PadStat[0];
-#ifdef __linux__
- if (use_analog) {
- pad->controllerType = 7; // analog Pad
- pad->leftJoyX = AnalogValue[0][0];
- pad->leftJoyY = AnalogValue[0][1];
- pad->rightJoyX = AnalogValue[0][2];
- pad->rightJoyY = AnalogValue[0][3];
- }
- else {
-#endif
- pad->controllerType = 4; // standard
-#ifdef __linux__
- }
-#endif
- // ePSXe different from pcsx, swap bytes
- pad->buttonStatus = (pad->buttonStatus>>8)|(pad->buttonStatus<<8);
+static uint8_t unk4d[2][8] = {
+ {0xFF, 0x5A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+ {0xFF, 0x5A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}
+};
- return 0;
-}
+static uint8_t stdcfg[2][8] = {
+ {0xFF, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0xFF, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
+};
-long PADreadPort2(PadDataS *pad) {
- if (!use_threads) {
- CheckPads(joydevice_open, 1, 0);
- }
- else {
- CheckPads(0, 1, 0);
- }
-
- pad->buttonStatus = PadStat[1];
-#ifdef __linux__
- if (use_analog) {
- pad->controllerType = 7; // analog Pad
- pad->leftJoyX = AnalogValue[1][0];
- pad->leftJoyY = AnalogValue[1][1];
- pad->rightJoyX = AnalogValue[1][2];
- pad->rightJoyY = AnalogValue[1][3];
- }
- else {
-#endif
- pad->controllerType = 4; // standard
-#ifdef __linux__
- }
-#endif
+static uint8_t stdmode[2][8] = {
+ {0xFF, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0xFF, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
+};
- // ePSXe different from pcsx, swap bytes
- pad->buttonStatus = (pad->buttonStatus>>8)|(pad->buttonStatus<<8);
+static uint8_t stdmodel[2][8] = {
+ {0xFF,
+ 0x5A,
+ 0x01, // 03 - dualshock2, 01 - dualshock
+ 0x02, // number of modes
+ 0x01, // current mode: 01 - analog, 00 - digital
+ 0x02,
+ 0x01,
+ 0x00},
+ {0xFF,
+ 0x5A,
+ 0x01, // 03 - dualshock2, 01 - dualshock
+ 0x02, // number of modes
+ 0x01, // current mode: 01 - analog, 00 - digital
+ 0x02,
+ 0x01,
+ 0x00}
+};
- return 0;
-}
+static uint8_t CurPad = 0, CurByte = 0, CurCmd = 0, CmdLen = 0;
-long PADkeypressed(void) {
- int ksym;
+unsigned char PADstartPoll(int pad) {
+ CurPad = pad - 1;
+ CurByte = 0;
- CheckPads(0, 1, 1);
+ return 0xFF;
+}
+
+unsigned char PADpoll(unsigned char value) {
+ static uint8_t *buf = NULL;
+ uint16_t n;
+
+ if (CurByte == 0) {
+ CurByte++;
+
+ // Don't enable Analog/Vibration for a standard pad
+ if (g.cfg.PadDef[CurPad].Type != PSE_PAD_TYPE_ANALOGPAD) {
+ CurCmd = CMD_READ_DATA_AND_VIBRATE;
+ } else {
+ CurCmd = value;
+ }
+
+ switch (CurCmd) {
+ case CMD_CONFIG_MODE:
+ CmdLen = 8;
+ buf = stdcfg[CurPad];
+ if (stdcfg[CurPad][3] == 0xFF) return 0xF3;
+ else return g.PadState[CurPad].PadID;
+
+ case CMD_SET_MODE_AND_LOCK:
+ CmdLen = 8;
+ buf = stdmode[CurPad];
+ return 0xF3;
+
+ case CMD_QUERY_MODEL_AND_MODE:
+ CmdLen = 8;
+ buf = stdmodel[CurPad];
+ buf[4] = g.PadState[CurPad].PadMode;
+ return 0xF3;
+
+ case CMD_QUERY_ACT:
+ CmdLen = 8;
+ buf = unk46[CurPad];
+ return 0xF3;
+
+ case CMD_QUERY_COMB:
+ CmdLen = 8;
+ buf = unk47[CurPad];
+ return 0xF3;
+
+ case CMD_QUERY_MODE:
+ CmdLen = 8;
+ buf = unk4c[CurPad];
+ return 0xF3;
+
+ case CMD_VIBRATION_TOGGLE:
+ CmdLen = 8;
+ buf = unk4d[CurPad];
+ return 0xF3;
+
+ case CMD_READ_DATA_AND_VIBRATE:
+ default:
+ UpdateInput();
+
+ n = g.PadState[CurPad].KeyStatus;
+ n &= g.PadState[CurPad].JoyKeyStatus;
+
+ stdpar[CurPad][2] = n & 0xFF;
+ stdpar[CurPad][3] = n >> 8;
+
+ if (g.PadState[CurPad].PadMode == 1) {
+ CmdLen = 20;
+
+ stdpar[CurPad][4] = g.PadState[CurPad].AnalogStatus[ANALOG_RIGHT][ANALOG_X];
+ stdpar[CurPad][5] = g.PadState[CurPad].AnalogStatus[ANALOG_RIGHT][ANALOG_Y];
+ stdpar[CurPad][6] = g.PadState[CurPad].AnalogStatus[ANALOG_LEFT][ANALOG_X];
+ stdpar[CurPad][7] = g.PadState[CurPad].AnalogStatus[ANALOG_LEFT][ANALOG_Y];
+
+ switch (stdpar[CurPad][3]) {
+ case 0xBF: // X
+ stdpar[CurPad][14] = 0xFF;
+ break;
+
+ case 0xDF: // Circle
+ stdpar[CurPad][13] = 0xFF;
+ break;
+
+ case 0xEF: // Triangle
+ stdpar[CurPad][12] = 0xFF;
+ break;
+
+ case 0x7F: // Square
+ stdpar[CurPad][15] = 0xFF;
+ break;
+
+ case 0xFB: // L1
+ stdpar[CurPad][16] = 0xFF;
+ break;
+
+ case 0xF7: // R1
+ stdpar[CurPad][17] = 0xFF;
+ break;
+
+ case 0xFE: // L2
+ stdpar[CurPad][18] = 0xFF;
+ break;
+
+ case 0xFD: // R2
+ stdpar[CurPad][19] = 0xFF;
+ break;
+
+ default:
+ stdpar[CurPad][14] = 0x00; // Not pressed
+ stdpar[CurPad][13] = 0x00; // Not pressed
+ stdpar[CurPad][12] = 0x00; // Not pressed
+ stdpar[CurPad][15] = 0x00; // Not pressed
+ stdpar[CurPad][16] = 0x00; // Not pressed
+ stdpar[CurPad][17] = 0x00; // Not pressed
+ stdpar[CurPad][18] = 0x00; // Not pressed
+ stdpar[CurPad][19] = 0x00; // Not pressed
+ break;
+ }
+
+ switch (stdpar[CurPad][2] >> 4) {
+ case 0x0E: // UP
+ stdpar[CurPad][10] = 0xFF;
+ break;
+
+ case 0x0B: // DOWN
+ stdpar[CurPad][11] = 0xFF;
+ break;
+
+ case 0x07: // LEFT
+ stdpar[CurPad][9] = 0xFF;
+ break;
+
+ case 0x0D: // RIGHT
+ stdpar[CurPad][8] = 0xFF;
+ break;
+
+ default:
+ stdpar[CurPad][8] = 0x00; // Not pressed
+ stdpar[CurPad][9] = 0x00; // Not pressed
+ stdpar[CurPad][10] = 0x00; // Not pressed
+ stdpar[CurPad][11] = 0x00; // Not pressed
+ break;
+ }
+ } else {
+ CmdLen = 4;
+ }
- if (keyLeftOver == NO_EVENT) return 0;
+ buf = stdpar[CurPad];
+ return g.PadState[CurPad].PadID;
+ }
+ }
- ksym = keyLeftOver-FIRST_KEY_EVENT;
- keyLeftOver = NO_EVENT;
+ switch (CurCmd) {
+ case CMD_CONFIG_MODE:
+ if (CurByte == 2) {
+ switch (value) {
+ case 0:
+ buf[2] = 0;
+ buf[3] = 0;
+ break;
+
+ case 1:
+ buf[2] = 0xFF;
+ buf[3] = 0xFF;
+ break;
+ }
+ }
+ break;
+
+ case CMD_SET_MODE_AND_LOCK:
+ if (CurByte == 2) {
+ g.PadState[CurPad].PadMode = value;
+ g.PadState[CurPad].PadID = value ? 0x73 : 0x41;
+ }
+ break;
+
+ case CMD_QUERY_ACT:
+ if (CurByte == 2) {
+ switch (value) {
+ case 0: // default
+ buf[5] = 0x02;
+ buf[6] = 0x00;
+ buf[7] = 0x0A;
+ break;
+
+ case 1: // Param std conf change
+ buf[5] = 0x01;
+ buf[6] = 0x01;
+ buf[7] = 0x14;
+ break;
+ }
+ }
+ break;
+
+ case CMD_QUERY_MODE:
+ if (CurByte == 2) {
+ switch (value) {
+ case 0: // mode 0 - digital mode
+ buf[5] = PSE_PAD_TYPE_STANDARD;
+ break;
+
+ case 1: // mode 1 - analog mode
+ buf[5] = PSE_PAD_TYPE_ANALOGPAD;
+ break;
+ }
+ }
+ break;
+ }
- return ksym;
+ if (CurByte >= CmdLen) return 0;
+ return buf[CurByte++];
}
-#ifdef __linux__
+#endif
-static void *thread_check_joydevice(void *arg) {
- while (!die_thread_die) {
- CheckPads(1, 0, 1);
- }
- return NULL;
-}
+static long PADreadPort(int num, PadDataS *pad) {
+ UpdateInput();
-#endif
+ pad->buttonStatus = (g.PadState[num].KeyStatus & g.PadState[num].JoyKeyStatus);
-// analyse Eventcode
-static PadJoyEvent *EventCode2PadJoyEvent(EventCode p_e) {
- static PadJoyEvent event;
- EventCode e;
- int i,p;
-
- event.event_type = EVENTTYPE_NONE;
- event.pad = 0;
- event.no = 0;
- event.value = 0;
-
- if (!p_e) {
- return &event;
- }
-
- e = p_e;
-
- if (e > RELEASE_EVENT) {
- event.value = 0;
- e -= RELEASE_EVENT;
- }
- else {
- event.value = 1;
- }
-
- if (e && e<FIRST_JOY_EVENT) {
- event.event_type = EVENTTYPE_KEY;
- event.no = e;
- return &event;
- }
-
- if (e >= FIRST_ANALOG_EVENT) {
- event.event_type = EVENTTYPE_ANALOG;
- event.pad = (e-FIRST_ANALOG_EVENT)/(256*MAXAXES);
- event.no = (e-ANALOGAXIS_EVENT(event.pad,0,0))/256;
- event.value = e & 0xff;
- return &event;
- }
-
-
- for (p=0; p<MAXDEVICES; p++) {
- for (i=0; i<MAXAXES; i++) {
- if (e == AXISPLUS_EVENT(p,i)) {
- event.event_type = EVENTTYPE_AXISPLUS;
- event.pad = p;
- event.no = i;
- return &event;
- }
- if (e == AXISMINUS_EVENT(p,i)) {
- event.event_type = EVENTTYPE_AXISMINUS;
- event.pad = p;
- event.no = i;
- return &event;
- }
- }
-
- for (i=0; i<MAXBUTTONS; i++) {
- if (e == BUTTON_EVENT(p,i)) {
- event.event_type = EVENTTYPE_BUTTON;
- event.pad = p;
- event.no = i;
- return &event;
- }
- }
- }
-
- return &event;
-}
+#ifdef EPSXE
+ // ePSXe different from pcsx, swap bytes
+ pad->buttonStatus = (pad->buttonStatus >> 8) | (pad->buttonStatus << 8);
+#endif
+ switch (g.cfg.PadDef[num].Type) {
+ case PSE_PAD_TYPE_ANALOGPAD: // Analog Controller SCPH-1150
+ pad->controllerType = PSE_PAD_TYPE_ANALOGPAD;
+ pad->rightJoyX = g.PadState[num].AnalogStatus[ANALOG_RIGHT][ANALOG_X];
+ pad->rightJoyY = g.PadState[num].AnalogStatus[ANALOG_RIGHT][ANALOG_Y];
+ pad->leftJoyX = g.PadState[num].AnalogStatus[ANALOG_LEFT][ANALOG_X];
+ pad->leftJoyY = g.PadState[num].AnalogStatus[ANALOG_LEFT][ANALOG_Y];
+ break;
+
+ case PSE_PAD_TYPE_STANDARD: // Standard Pad SCPH-1080, SCPH-1150
+ default:
+ pad->controllerType = PSE_PAD_TYPE_STANDARD;
+ break;
+ }
-// reversal of EventCode2String
-static EventCode String2EventCode(char *s) {
- static char buffer[256];
- int i,p;
- char *q;
- char push_release;
- EventCode e;
-
- if (s[0] >= '0' && s[0] <= '9') return atoi(s); // allow numeric input
-
- e=0;
- push_release = 'P';
-
- switch(s[0]) {
- case 'K':
- push_release = s[1];
- strncpy(buffer, s + 3, 255);
- q=buffer;
- i=1;
- while (*q) {
- if (*q=='"') i = !i;
- if (*q==' ' && !i)
- *q='\0';
- else
- q++;
- }
- if (s[2]=='"' && buffer[0] && buffer[strlen(buffer)-1]=='"') {
- buffer[strlen(buffer)-1] = '\0';
- e = KEY_EVENT(XStringToKeysym(buffer));
- }
- break;
- case 'A':
- if (s[1] >= '0' && s[1] <= '1' && strlen(s) >= 5) {
- p = s[1] - '0';
- push_release = s[2];
- i = atoi(s+3);
- q=s+3;
- while (*q && *q != '+' && *q != '-') q++;
- if (*q == '+')
- e = AXISPLUS_EVENT(p,i);
- else if (*q == '-')
- e = AXISMINUS_EVENT(p,i);
- }
- break;
- case 'B':
- if (s[1] >= '0' && s[1] <= '1' && strlen(s) >= 4) {
- p = s[1] - '0';
- push_release = s[2];
- i = atoi(s + 3);
- e = BUTTON_EVENT(p, i);
- }
- break;
- case 'X':
- if (s[1] >= '0' && s[1] <= '1' && strlen(s) >= 5) {
- p = s[1] - '0';
- i = atoi(s + 3);
- q = s + 3;
- while (*q && *q != 'v') q++;
- if (*q == 'v')
- e = ANALOGAXIS_EVENT(p,i,atoi(q + 1));
- }
- break;
- }
-
- if (push_release == 'R')
- return e + RELEASE_EVENT;
- else
- return e;
+ return PSE_PAD_ERR_SUCCESS;
}
-static void loadConfig() {
- FILE *f;
- int i;
- char line[FILENAME_MAX+30];
- int pad=0;
- int macronr=0;
- char *val;
-
- f = fopen("dfinput.cfg", "r");
- if (f == NULL) {
-// fprintf(stderr, "DFInput warning: config file not found.\n");
- return;
- }
-
- while(!feof(f)) {
- fgets(line, FILENAME_MAX+29, f);
- i=strlen(line)-1;
- while (i>0 && line[i]<32) line[i--]='\0';
-
- val=NULL;
- while(i>0) {
- if (line[i]=='=') val = line+(i+1);
- i--;
- }
- if (val) {
- while (*val==' ') val++;
- }
-
- if (!strcmp(line, "[general]")) {
- // nothing to do
- }
- else if (!strncmp(line, "use_threads", 11)) {
- use_threads = atoi(val);
- }
- else if (!strncmp(line, "use_analog", 10)) {
- use_analog = atoi(val);
- }
-
- else if (!strcmp(line, "[pad 1]")) {
- pad = 0;
- }
- else if (!strcmp(line, "[pad 2]")) {
- pad = 1;
- }
- else if (!strncmp(line, "[macro ", 7)) {
- macronr = atoi(line+7)-1;
- if (macronr<0 || macronr>=MAXMACROS) macronr=0;
- }
- else if (!strncmp(line, "devicefilename", 14)) {
- strcpy(devicefilename[pad], val);
- }
- else if (!strncmp(line, "minzero", 7)) {
- minzero[pad] = atoi(val);
- }
- else if (!strncmp(line, "maxzero", 7)) {
- maxzero[pad] = atoi(val);
- }
- else if (!strncmp(line, "event_l2", 8)) PadButtons[pad][0] = String2EventCode(val);
- else if (!strncmp(line, "event_r2", 8)) PadButtons[pad][1] = String2EventCode(val);
- else if (!strncmp(line, "event_l1", 8)) PadButtons[pad][2] = String2EventCode(val);
- else if (!strncmp(line, "event_r1", 8)) PadButtons[pad][3] = String2EventCode(val);
- else if (!strncmp(line, "event_triangle", 14)) PadButtons[pad][4] = String2EventCode(val);
- else if (!strncmp(line, "event_circle", 12)) PadButtons[pad][5] = String2EventCode(val);
- else if (!strncmp(line, "event_cross", 11)) PadButtons[pad][6] = String2EventCode(val);
- else if (!strncmp(line, "event_square", 12)) PadButtons[pad][7] = String2EventCode(val);
- else if (!strncmp(line, "event_select", 12)) PadButtons[pad][8] = String2EventCode(val);
- else if (!strncmp(line, "event_lanalog", 13)) PadButtons[pad][9] = String2EventCode(val);
- else if (!strncmp(line, "event_ranalog", 13)) PadButtons[pad][10] = String2EventCode(val);
- else if (!strncmp(line, "event_start", 11)) PadButtons[pad][11] = String2EventCode(val);
- else if (!strncmp(line, "event_up", 8)) PadButtons[pad][12] = String2EventCode(val);
- else if (!strncmp(line, "event_right", 11)) PadButtons[pad][13] = String2EventCode(val);
- else if (!strncmp(line, "event_down", 10)) PadButtons[pad][14] = String2EventCode(val);
- else if (!strncmp(line, "event_left", 10)) PadButtons[pad][15] = String2EventCode(val);
- else if (!strncmp(line, "event_lanax", 11)) PadButtons[pad][16] = String2EventCode(val);
- else if (!strncmp(line, "event_lanay", 11)) PadButtons[pad][17] = String2EventCode(val);
- else if (!strncmp(line, "event_ranax", 11)) PadButtons[pad][18] = String2EventCode(val);
- else if (!strncmp(line, "event_ranay", 11)) PadButtons[pad][19] = String2EventCode(val);
- else if (!strncmp(line, "event_launch", 12)) macroLaunch[pad][macronr] = String2EventCode(val);
- else if (!strncmp(line, "events", 6)) {
- i=0;
- while (*val) {
- macroEvents[pad][macronr][i++]=String2EventCode(val);
- while (*val && *val!=' ') val++;
- if (*val==' ') val++;
- }
- macroEvents[pad][macronr][i]=NO_EVENT;
- }
- else if (!strncmp(line, "interval", 8)) {
- i=0;
- while (*val) {
- macroInterval[pad][macronr][i++]=atol(val);
- while (*val && *val!=' ') val++;
- if (*val==' ') val++;
- }
- }
-// else fprintf(stderr, "DFInput error: can't interpret %s\n", line);
- }
+long PADreadPort1(PadDataS *pad) {
+ return PADreadPort(0, pad);
}
-long PADconfigure(void) {
- if (fork() == 0) {
- execl("cfg/cfgDFInput", "cfgDFInput", NULL);
- exit(0);
- }
- return 0;
+long PADreadPort2(PadDataS *pad) {
+ return PADreadPort(1, pad);
}
+long PADkeypressed(void) {
+ long s;
+
+ CheckKeyboard();
-/*---------------------------------------------------------------------*/
-/* About dialogue stuff */
-/*---------------------------------------------------------------------*/
+ s = g.KeyLeftOver;
+ g.KeyLeftOver = 0;
+ return s;
+}
-void PADabout(void) {
- if (fork() == 0) {
- execl("cfg/cfgDFInput", "cfgDFInput", "-about", NULL);
- }
+long PADconfigure(void) {
+ if (fork() == 0) {
+ execl("cfg/cfgDFInput", "cfgDFInput", NULL);
+ exit(0);
+ }
+ return PSE_PAD_ERR_SUCCESS;
}
-#ifdef __linux__
+void PADabout(void) {
+ if (fork() == 0) {
+ execl("cfg/cfgDFInput", "cfgDFInput", "-about", NULL);
+ exit(0);
+ }
+}
long PADtest(void) {
- int i;
- int f;
-
- int r=1;
-
- loadConfig();
- for (i=0; i<2; i++) {
- if (devicefilename[i][0]) {
- r = 0;
- f = open(devicefilename[i], O_RDONLY);
- if (f == -1) {
- return -1;
- }
- close (f);
- }
- }
-
- return r;
+ return PSE_PAD_ERR_SUCCESS;
}
-
-#endif
diff --git a/plugins/dfinput/pad.h b/plugins/dfinput/pad.h
new file mode 100644
index 00000000..da4fc727
--- /dev/null
+++ b/plugins/dfinput/pad.h
@@ -0,0 +1,182 @@
+/*
+ * Copyright (c) 2009, Wei Mingzhi <whistler@openoffice.org>.
+ * All Rights Reserved.
+ *
+ * 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 3 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>.
+ */
+
+#ifndef PAD_H_
+#define PAD_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+//#define EPSXE 1
+
+#include "config.h"
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <pthread.h>
+
+#include <SDL.h>
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/keysym.h>
+#include <X11/XKBlib.h>
+
+#include "psemu_plugin_defs.h"
+
+#ifdef ENABLE_NLS
+#include <libintl.h>
+#include <locale.h>
+#define _(x) gettext(x)
+#define N_(x) (x)
+#else
+#define _(x) (x)
+#define N_(x) (x)
+#endif
+
+enum {
+ DKEY_SELECT = 0,
+ DKEY_L3,
+ DKEY_R3,
+ DKEY_START,
+ DKEY_UP,
+ DKEY_RIGHT,
+ DKEY_DOWN,
+ DKEY_LEFT,
+ DKEY_L2,
+ DKEY_R2,
+ DKEY_L1,
+ DKEY_R1,
+ DKEY_TRIANGLE,
+ DKEY_CIRCLE,
+ DKEY_CROSS,
+ DKEY_SQUARE,
+
+ DKEY_TOTAL
+};
+
+enum {
+ ANALOG_LEFT = 0,
+ ANALOG_RIGHT,
+
+ ANALOG_TOTAL
+};
+
+enum { NONE = 0, AXIS, HAT, BUTTON };
+
+typedef struct tagKeyDef {
+ uint8_t JoyEvType;
+ union {
+ int16_t d;
+ int16_t Axis; // positive=axis+, negative=axis-, abs(Axis)-1=axis index
+ uint16_t Hat; // 8-bit for hat number, 8-bit for direction
+ uint16_t Button; // button number
+ } J;
+ uint16_t Key;
+} KEYDEF;
+
+enum { ANALOG_X = 0, ANALOG_Y };
+
+typedef struct tagPadDef {
+ int8_t DevNum;
+ uint16_t Type;
+ KEYDEF KeyDef[DKEY_TOTAL];
+ int16_t AnalogDef[ANALOG_TOTAL][2]; // positive=axis+, negative=axis-, abs(Axis)-1=axis index
+} PADDEF;
+
+typedef struct tagConfig {
+ uint8_t Threaded;
+ PADDEF PadDef[2];
+} CONFIG;
+
+typedef struct tagPadState {
+ SDL_Joystick *JoyDev;
+ uint8_t PadMode;
+ uint8_t PadID;
+ uint16_t KeyStatus;
+ uint16_t JoyKeyStatus;
+ uint8_t AnalogStatus[ANALOG_TOTAL][2]; // 0-255 where 128 is center position
+} PADSTATE;
+
+typedef struct tagGlobalData {
+ CONFIG cfg;
+
+ uint8_t Opened;
+ Display *Disp;
+
+ PADSTATE PadState[2];
+ long KeyLeftOver;
+} GLOBALDATA;
+
+extern GLOBALDATA g;
+
+enum {
+ CMD_READ_DATA_AND_VIBRATE = 0x42,
+ CMD_CONFIG_MODE = 0x43,
+ CMD_SET_MODE_AND_LOCK = 0x44,
+ CMD_QUERY_MODEL_AND_MODE = 0x45,
+ CMD_QUERY_ACT = 0x46, // ??
+ CMD_QUERY_COMB = 0x47, // ??
+ CMD_QUERY_MODE = 0x4C, // QUERY_MODE ??
+ CMD_VIBRATION_TOGGLE = 0x4D,
+};
+
+// cfg.c functions...
+void LoadConfig();
+void SaveConfig();
+
+// sdljoy.c functions...
+void InitSDLJoy();
+void DestroySDLJoy();
+void CheckJoy();
+
+// xkb.c functions...
+void InitKeyboard();
+void DestroyKeyboard();
+void CheckKeyboard();
+
+// analog.c functions...
+void InitAnalog();
+void CheckAnalog();
+
+// pad.c functions...
+char *PSEgetLibName(void);
+uint32_t PSEgetLibType(void);
+uint32_t PSEgetLibVersion(void);
+long PADinit(long flags);
+long PADshutdown(void);
+long PADopen(unsigned long *Disp);
+long PADclose(void);
+long PADquery(void);
+unsigned char PADstartPoll(int pad);
+unsigned char PADpoll(unsigned char value);
+long PADreadPort1(PadDataS *pad);
+long PADreadPort2(PadDataS *pad);
+long PADkeypressed(void);
+long PADconfigure(void);
+void PADabout(void);
+long PADtest(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/plugins/dfinput/padjoy.h b/plugins/dfinput/padjoy.h
deleted file mode 100644
index e51f2db4..00000000
--- a/plugins/dfinput/padjoy.h
+++ /dev/null
@@ -1,82 +0,0 @@
-#ifndef _PADJOY_H_
-
-#define _PADJOY_H_
-
-#define DEBUG(x) fprintf(stderr, "DFInput: %s\n", x);
-
-// Maximum number of joy devices
-#define MAXDEVICES 2
-// Maximum number of supported axis (per device, a normal joystick has 2)
-#define MAXAXES 20
-// Maximum number of supported buttons (per device)
-#define MAXBUTTONS 32
-// Number of PSX-Buttons (including analog axis)
-#define MAXPSXBUTTONS 20
-
-// Status of digital Axes (avoids repeated events of the same type on an analog pad)
-#define AXESTS_UNUSED -1
-#define AXESTS_UNKNOWN 0
-#define AXESTS_CENTER 1
-#define AXESTS_PLUS 2
-#define AXESTS_MINUS 3
-#define AXESTS_ANALOG 4
-
-// every kind of supported event is coded into a long int
-typedef int32_t EventCode;
-
-// Position of directional buttons in PadButtons
-#define PSXBTN_UP 12
-#define PSXBTN_RIGHT 13
-#define PSXBTN_DOWN 14
-#define PSXBTN_LEFT 15
-
-// macros to define Eventcodes
-// this may look like I make it too complicated, but it keeps things open for future improvements
-#define NO_EVENT 0
-#define FIRST_KEY_EVENT 0
-#define FIRST_JOY_EVENT (1<<16)
-#define RELEASE_EVENT (1<<30)
-#define FIRST_ANALOG_EVENT (1<<20)
-
-#define KEY_EVENT(n) (FIRST_KEY_EVENT+(n))
-#define AXISPLUS_EVENT(p,n) (FIRST_JOY_EVENT+2*(n)+(p)*(2*MAXAXES+MAXBUTTONS))
-#define AXISMINUS_EVENT(p,n) (FIRST_JOY_EVENT+2*(n)+1+(p)*(2*MAXAXES+MAXBUTTONS))
-#define BUTTON_EVENT(p,n) (FIRST_JOY_EVENT+2*MAXAXES+(n)+(p)*(2*MAXAXES+MAXBUTTONS))
-#define ANALOGAXIS_EVENT(p,n,v) (FIRST_ANALOG_EVENT+256*(n)+(v)+(p)*(256*MAXAXES))
-
-// Makro Definitions etc.
-#define MAXMACROS 3
-#define MAXMACROLENGTH 100
-
-typedef struct
-{
- unsigned char controllerType;
- unsigned short buttonStatus;
- unsigned char rightJoyX, rightJoyY, leftJoyX, leftJoyY;
- unsigned char moveX, moveY;
- unsigned char reserved[91];
-} PadDataS;
-
-// Number of events to fetch at once...
-#define MAXCNT 100
-
-/* number of buttons required for configuration */
-#define CONFIGBUTTONCOUNT 20
-
-#define EVENTTYPE_NONE -1
-#define EVENTTYPE_KEY 0
-#define EVENTTYPE_BUTTON 1
-#define EVENTTYPE_AXISPLUS 2
-#define EVENTTYPE_AXISMINUS 3
-#define EVENTTYPE_ANALOG 4
-
-// The following struct is used in the config part only
-typedef struct
-{
- unsigned int event_type; // Button, Axe, AnalogAxe
- unsigned int pad;
- unsigned int no; // Keycode in case of key event
- int value; // 0=release, 1=press, or analog value in case of EVENTTYPE_ANALOG
-} PadJoyEvent;
-
-#endif
diff --git a/plugins/dfinput/sdljoy.c b/plugins/dfinput/sdljoy.c
new file mode 100644
index 00000000..2a80cfa8
--- /dev/null
+++ b/plugins/dfinput/sdljoy.c
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2009, Wei Mingzhi <whistler@openoffice.org>.
+ * All Rights Reserved.
+ *
+ * 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 3 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 "pad.h"
+
+void InitSDLJoy() {
+ uint8_t i;
+
+ g.PadState[0].JoyKeyStatus = 0xFFFF;
+ g.PadState[1].JoyKeyStatus = 0xFFFF;
+
+ for (i = 0; i < 2; i++) {
+ if (g.cfg.PadDef[i].DevNum >= 0) {
+ g.PadState[i].JoyDev = SDL_JoystickOpen(g.cfg.PadDef[i].DevNum);
+ } else {
+ g.PadState[i].JoyDev = NULL;
+ }
+ }
+
+ SDL_JoystickEventState(SDL_IGNORE);
+
+ InitAnalog();
+}
+
+void DestroySDLJoy() {
+ uint8_t i;
+
+ if (SDL_WasInit(SDL_INIT_JOYSTICK)) {
+ for (i = 0; i < 2; i++) {
+ if (g.PadState[i].JoyDev != NULL) {
+ SDL_JoystickClose(g.PadState[i].JoyDev);
+ }
+ }
+ }
+
+ for (i = 0; i < 2; i++) {
+ g.PadState[i].JoyDev = NULL;
+ }
+}
+
+void CheckJoy() {
+ uint8_t i, j, n;
+ int dx, dy;
+
+ SDL_JoystickUpdate();
+
+ for (i = 0; i < 2; i++) {
+ if (g.PadState[i].JoyDev == NULL) {
+ continue;
+ }
+
+ for (j = 0; j < DKEY_TOTAL; j++) {
+ switch (g.cfg.PadDef[i].KeyDef[j].JoyEvType) {
+ case AXIS:
+ n = abs(g.cfg.PadDef[i].KeyDef[j].J.Axis) - 1;
+
+ if (g.cfg.PadDef[i].KeyDef[j].J.Axis > 0) {
+ if (SDL_JoystickGetAxis(g.PadState[i].JoyDev, n) > 16383) {
+ g.PadState[i].JoyKeyStatus &= ~(1 << j);
+ } else {
+ g.PadState[i].JoyKeyStatus |= (1 << j);
+ }
+ } else if (g.cfg.PadDef[i].KeyDef[j].J.Axis < 0) {
+ if (SDL_JoystickGetAxis(g.PadState[i].JoyDev, n) < -16383) {
+ g.PadState[i].JoyKeyStatus &= ~(1 << j);
+ } else {
+ g.PadState[i].JoyKeyStatus |= (1 << j);
+ }
+ }
+ break;
+
+ case HAT:
+ n = (g.cfg.PadDef[i].KeyDef[j].J.Hat >> 8);
+
+ if (SDL_JoystickGetHat(g.PadState[i].JoyDev, n) & (g.cfg.PadDef[i].KeyDef[j].J.Hat & 0xFF)) {
+ g.PadState[i].JoyKeyStatus &= ~(1 << j);
+ } else {
+ g.PadState[i].JoyKeyStatus |= (1 << j);
+ }
+ break;
+
+ case BUTTON:
+ if (SDL_JoystickGetButton(g.PadState[i].JoyDev, g.cfg.PadDef[i].KeyDef[j].J.Button)) {
+ g.PadState[i].JoyKeyStatus &= ~(1 << j);
+ } else {
+ g.PadState[i].JoyKeyStatus |= (1 << j);
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+
+ CheckAnalog();
+}
diff --git a/plugins/dfinput/xkb.c b/plugins/dfinput/xkb.c
new file mode 100644
index 00000000..5706d230
--- /dev/null
+++ b/plugins/dfinput/xkb.c
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2009, Wei Mingzhi <whistler@openoffice.org>.
+ * All Rights Reserved.
+ *
+ * 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 3 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 "pad.h"
+
+static Atom wmprotocols, wmdelwindow;
+
+void InitKeyboard() {
+ wmprotocols = XInternAtom(g.Disp, "WM_PROTOCOLS", 0);
+ wmdelwindow = XInternAtom(g.Disp, "WM_DELETE_WINDOW", 0);
+
+ XAutoRepeatOff(g.Disp);
+
+ g.PadState[0].KeyStatus = 0xFFFF;
+ g.PadState[1].KeyStatus = 0xFFFF;
+}
+
+void DestroyKeyboard() {
+ XAutoRepeatOn(g.Disp);
+}
+
+void CheckKeyboard() {
+ uint8_t i, j, found;
+ XEvent evt;
+ XClientMessageEvent *xce;
+ uint16_t Key;
+
+ while (XPending(g.Disp)) {
+ XNextEvent(g.Disp, &evt);
+ switch (evt.type) {
+ case KeyPress:
+ Key = XLookupKeysym((XKeyEvent *)&evt, 0);
+ found = 0;
+ for (i = 0; i < 2; i++) {
+ for (j = 0; j < DKEY_TOTAL; j++) {
+ if (g.cfg.PadDef[i].KeyDef[j].Key == Key) {
+ found = 1;
+ g.PadState[i].KeyStatus &= ~(1 << j);
+ }
+ }
+ }
+ if (!found) {
+ g.KeyLeftOver = Key;
+ }
+ return;
+
+ case KeyRelease:
+ Key = XLookupKeysym((XKeyEvent *)&evt, 0);
+ found = 0;
+ for (i = 0; i < 2; i++) {
+ for (j = 0; j < DKEY_TOTAL; j++) {
+ if (g.cfg.PadDef[i].KeyDef[j].Key == Key) {
+ found = 1;
+ g.PadState[i].KeyStatus |= (1 << j);
+ }
+ }
+ }
+ if (!found) {
+ g.KeyLeftOver = ((long)Key | 0x40000000);
+ }
+ break;
+
+ case ClientMessage:
+ xce = (XClientMessageEvent *)&evt;
+ if (xce->message_type == wmprotocols && (Atom)xce->data.l[0] == wmdelwindow) {
+ // Fake an ESC key if user clicked the close button on window
+ g.KeyLeftOver = XK_Escape;
+ return;
+ }
+ break;
+
+ case FocusOut:
+ XAutoRepeatOn(g.Disp);
+ break;
+
+ case FocusIn:
+ XAutoRepeatOff(g.Disp);
+ break;
+ }
+ }
+}
+
diff --git a/plugins/dfsound/Makefile.in b/plugins/dfsound/Makefile.in
index f993b373..d13c1dbe 100644
--- a/plugins/dfsound/Makefile.in
+++ b/plugins/dfsound/Makefile.in
@@ -174,6 +174,9 @@ PEOPSXGL = @PEOPSXGL@
PKG_CONFIG = @PKG_CONFIG@
POSUB = @POSUB@
RANLIB = @RANLIB@
+SDL_CFLAGS = @SDL_CFLAGS@
+SDL_CONFIG = @SDL_CONFIG@
+SDL_LIBS = @SDL_LIBS@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
diff --git a/plugins/dfxvideo/Makefile.in b/plugins/dfxvideo/Makefile.in
index 97ca3dd1..3353a2a5 100644
--- a/plugins/dfxvideo/Makefile.in
+++ b/plugins/dfxvideo/Makefile.in
@@ -174,6 +174,9 @@ PEOPSXGL = @PEOPSXGL@
PKG_CONFIG = @PKG_CONFIG@
POSUB = @POSUB@
RANLIB = @RANLIB@
+SDL_CFLAGS = @SDL_CFLAGS@
+SDL_CONFIG = @SDL_CONFIG@
+SDL_LIBS = @SDL_LIBS@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
diff --git a/plugins/peopsxgl/Makefile.in b/plugins/peopsxgl/Makefile.in
index f65b4430..296fe747 100644
--- a/plugins/peopsxgl/Makefile.in
+++ b/plugins/peopsxgl/Makefile.in
@@ -165,6 +165,9 @@ PEOPSXGL = @PEOPSXGL@
PKG_CONFIG = @PKG_CONFIG@
POSUB = @POSUB@
RANLIB = @RANLIB@
+SDL_CFLAGS = @SDL_CFLAGS@
+SDL_CONFIG = @SDL_CONFIG@
+SDL_LIBS = @SDL_LIBS@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
diff --git a/po/pcsx.pot b/po/pcsx.pot
index 5d1c554f..3742c7a5 100644
--- a/po/pcsx.pot
+++ b/po/pcsx.pot
@@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-10-01 18:26+0800\n"
+"POT-Creation-Date: 2009-10-25 21:49+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../win32/gui/AboutDlg.c:26
@@ -45,7 +45,7 @@ msgstr ""
#: ../win32/gui/AboutDlg.c:48 ../win32/gui/AboutDlg.c:52
#: ../win32/gui/CheatDlg.c:70 ../win32/gui/CheatDlg.c:120
-#: ../win32/gui/ConfigurePlugins.c:464 ../win32/gui/ConfigurePlugins.c:595
+#: ../win32/gui/ConfigurePlugins.c:470 ../win32/gui/ConfigurePlugins.c:601
#: ../win32/gui/WndMain.c:963 ../win32/gui/WndMain.c:1199
#: ../plugins/peopsxgl/gpucfg/interface.c:130
#: ../plugins/peopsxgl/gpucfg/interface.c:843
@@ -80,7 +80,7 @@ msgid "Cheat Code:"
msgstr ""
#: ../win32/gui/CheatDlg.c:71 ../win32/gui/CheatDlg.c:121
-#: ../win32/gui/ConfigurePlugins.c:465 ../win32/gui/ConfigurePlugins.c:596
+#: ../win32/gui/ConfigurePlugins.c:471 ../win32/gui/ConfigurePlugins.c:602
#: ../win32/gui/WndMain.c:964 ../win32/gui/WndMain.c:1200
#: ../plugins/peopsxgl/gpucfg/interface.c:338
msgid "Cancel"
@@ -293,98 +293,98 @@ msgstr ""
msgid "Hexadecimal"
msgstr ""
-#: ../win32/gui/ConfigurePlugins.c:200 ../gui/Gtk2Gui.c:2237
+#: ../win32/gui/ConfigurePlugins.c:206 ../gui/Gtk2Gui.c:2228
msgid "Internal HLE Bios"
msgstr ""
-#: ../win32/gui/ConfigurePlugins.c:286
+#: ../win32/gui/ConfigurePlugins.c:292
msgid "Configuration not OK!"
msgstr ""
-#: ../win32/gui/ConfigurePlugins.c:286 ../gui/Cheat.c:155 ../gui/Cheat.c:250
+#: ../win32/gui/ConfigurePlugins.c:292 ../gui/Cheat.c:155 ../gui/Cheat.c:250
#: ../gui/LnxMain.c:405
msgid "Error"
msgstr ""
-#: ../win32/gui/ConfigurePlugins.c:387
+#: ../win32/gui/ConfigurePlugins.c:393
msgid "This plugin reports that should work correctly"
msgstr ""
-#: ../win32/gui/ConfigurePlugins.c:388
+#: ../win32/gui/ConfigurePlugins.c:394
msgid "This plugin reports that should not work correctly"
msgstr ""
-#: ../win32/gui/ConfigurePlugins.c:444
+#: ../win32/gui/ConfigurePlugins.c:450
msgid "Select Plugins Directory"
msgstr ""
-#: ../win32/gui/ConfigurePlugins.c:453
+#: ../win32/gui/ConfigurePlugins.c:459
msgid "Select Bios Directory"
msgstr ""
-#: ../win32/gui/ConfigurePlugins.c:462
+#: ../win32/gui/ConfigurePlugins.c:468
msgid "Configuration"
msgstr ""
-#: ../win32/gui/ConfigurePlugins.c:466
+#: ../win32/gui/ConfigurePlugins.c:472
msgid "Graphics"
msgstr ""
-#: ../win32/gui/ConfigurePlugins.c:467
+#: ../win32/gui/ConfigurePlugins.c:473
msgid "First Controller"
msgstr ""
-#: ../win32/gui/ConfigurePlugins.c:468
+#: ../win32/gui/ConfigurePlugins.c:474
msgid "Second Controller"
msgstr ""
-#: ../win32/gui/ConfigurePlugins.c:469
+#: ../win32/gui/ConfigurePlugins.c:475
msgid "Sound"
msgstr ""
-#: ../win32/gui/ConfigurePlugins.c:470
+#: ../win32/gui/ConfigurePlugins.c:476
msgid "Cdrom"
msgstr ""
-#: ../win32/gui/ConfigurePlugins.c:471
+#: ../win32/gui/ConfigurePlugins.c:477
msgid "Bios"
msgstr ""
-#: ../win32/gui/ConfigurePlugins.c:472
+#: ../win32/gui/ConfigurePlugins.c:478
msgid "Set Bios Directory"
msgstr ""
-#: ../win32/gui/ConfigurePlugins.c:473
+#: ../win32/gui/ConfigurePlugins.c:479
msgid "Set Plugins Directory"
msgstr ""
-#: ../win32/gui/ConfigurePlugins.c:474 ../win32/gui/ConfigurePlugins.c:477
#: ../win32/gui/ConfigurePlugins.c:480 ../win32/gui/ConfigurePlugins.c:483
-#: ../win32/gui/ConfigurePlugins.c:486 ../win32/gui/ConfigurePlugins.c:598
+#: ../win32/gui/ConfigurePlugins.c:486 ../win32/gui/ConfigurePlugins.c:489
+#: ../win32/gui/ConfigurePlugins.c:492 ../win32/gui/ConfigurePlugins.c:604
msgid "Configure..."
msgstr ""
-#: ../win32/gui/ConfigurePlugins.c:475 ../win32/gui/ConfigurePlugins.c:478
#: ../win32/gui/ConfigurePlugins.c:481 ../win32/gui/ConfigurePlugins.c:484
-#: ../win32/gui/ConfigurePlugins.c:487 ../win32/gui/ConfigurePlugins.c:599
+#: ../win32/gui/ConfigurePlugins.c:487 ../win32/gui/ConfigurePlugins.c:490
+#: ../win32/gui/ConfigurePlugins.c:493 ../win32/gui/ConfigurePlugins.c:605
msgid "Test..."
msgstr ""
-#: ../win32/gui/ConfigurePlugins.c:476 ../win32/gui/ConfigurePlugins.c:479
#: ../win32/gui/ConfigurePlugins.c:482 ../win32/gui/ConfigurePlugins.c:485
-#: ../win32/gui/ConfigurePlugins.c:488 ../win32/gui/ConfigurePlugins.c:600
+#: ../win32/gui/ConfigurePlugins.c:488 ../win32/gui/ConfigurePlugins.c:491
+#: ../win32/gui/ConfigurePlugins.c:494 ../win32/gui/ConfigurePlugins.c:606
msgid "About..."
msgstr ""
-#: ../win32/gui/ConfigurePlugins.c:593
+#: ../win32/gui/ConfigurePlugins.c:599
msgid "NetPlay Configuration"
msgstr ""
-#: ../win32/gui/ConfigurePlugins.c:597
+#: ../win32/gui/ConfigurePlugins.c:603
msgid "NetPlay"
msgstr ""
-#: ../win32/gui/ConfigurePlugins.c:601
+#: ../win32/gui/ConfigurePlugins.c:607
msgid ""
"Note: The NetPlay Plugin Directory should be the same as the other Plugins."
msgstr ""
@@ -546,8 +546,8 @@ msgstr ""
msgid "Greek"
msgstr ""
-#: ../win32/gui/WndMain.c:80 ../win32/gui/WndMain.c:1522
-#: ../win32/gui/WndMain.c:1524
+#: ../win32/gui/WndMain.c:80 ../win32/gui/WndMain.c:1556
+#: ../win32/gui/WndMain.c:1558
msgid "English"
msgstr ""
@@ -615,13 +615,13 @@ msgstr ""
msgid "*PCSX*: Error Saving State %s"
msgstr ""
-#: ../win32/gui/WndMain.c:426 ../win32/gui/WndMain.c:475 ../gui/Gtk2Gui.c:580
-#: ../gui/Gtk2Gui.c:707
+#: ../win32/gui/WndMain.c:426 ../win32/gui/WndMain.c:475 ../gui/Gtk2Gui.c:575
+#: ../gui/Gtk2Gui.c:700
msgid "The CD does not appear to be a valid Playstation CD"
msgstr ""
-#: ../win32/gui/WndMain.c:432 ../win32/gui/WndMain.c:481 ../gui/Gtk2Gui.c:588
-#: ../gui/Gtk2Gui.c:715
+#: ../win32/gui/WndMain.c:432 ../win32/gui/WndMain.c:481 ../gui/Gtk2Gui.c:583
+#: ../gui/Gtk2Gui.c:708
msgid "Could not load CD-ROM!"
msgstr ""
@@ -629,11 +629,11 @@ msgstr ""
msgid "Running BIOS is not supported with Internal HLE Bios."
msgstr ""
-#: ../win32/gui/WndMain.c:661 ../gui/Gtk2Gui.c:1080
+#: ../win32/gui/WndMain.c:661 ../gui/Gtk2Gui.c:1068
msgid "Title"
msgstr ""
-#: ../win32/gui/WndMain.c:667 ../gui/Gtk2Gui.c:1086
+#: ../win32/gui/WndMain.c:667 ../gui/Gtk2Gui.c:1074
msgid "Status"
msgstr ""
@@ -653,16 +653,16 @@ msgstr ""
msgid "terminiting link block"
msgstr ""
-#: ../win32/gui/WndMain.c:864 ../gui/Gtk2Gui.c:1160
+#: ../win32/gui/WndMain.c:864 ../gui/Gtk2Gui.c:1148
msgid "Deleted"
msgstr ""
-#: ../win32/gui/WndMain.c:865 ../win32/gui/WndMain.c:868 ../gui/Gtk2Gui.c:1162
-#: ../gui/Gtk2Gui.c:1166
+#: ../win32/gui/WndMain.c:865 ../win32/gui/WndMain.c:868 ../gui/Gtk2Gui.c:1150
+#: ../gui/Gtk2Gui.c:1154
msgid "Free"
msgstr ""
-#: ../win32/gui/WndMain.c:867 ../gui/Gtk2Gui.c:1164
+#: ../win32/gui/WndMain.c:867 ../gui/Gtk2Gui.c:1152
msgid "Used"
msgstr ""
@@ -755,200 +755,205 @@ msgstr ""
msgid "Enable Console Output"
msgstr ""
-#: ../win32/gui/WndMain.c:1209
+#: ../win32/gui/WndMain.c:1209 ../data/pcsx.glade2:1233
+msgid "Enable Debugger"
+msgstr ""
+
+#: ../win32/gui/WndMain.c:1210
msgid "Spu Irq Always Enabled"
msgstr ""
-#: ../win32/gui/WndMain.c:1210 ../data/pcsx.glade2:1370
+#: ../win32/gui/WndMain.c:1211 ../data/pcsx.glade2:1370
msgid "Parasite Eve 2, Vandal Hearts 1/2 Fix"
msgstr ""
-#: ../win32/gui/WndMain.c:1211 ../data/pcsx.glade2:1385
+#: ../win32/gui/WndMain.c:1212 ../data/pcsx.glade2:1385
msgid "InuYasha Sengoku Battle Fix"
msgstr ""
-#: ../win32/gui/WndMain.c:1213 ../plugins/dfcdrom/interface.c:194
+#: ../win32/gui/WndMain.c:1214 ../plugins/dfcdrom/interface.c:194
+#: ../plugins/dfinput/dfinput.glade2:447
msgid "Options"
msgstr ""
-#: ../win32/gui/WndMain.c:1214
+#: ../win32/gui/WndMain.c:1215
msgid "Psx System Type"
msgstr ""
-#: ../win32/gui/WndMain.c:1286
+#: ../win32/gui/WndMain.c:1320
msgid "Psx Mcd Format (*.mcr;*.mc;*.mem;*.vgs;*.mcd;*.gme;*.ddf)"
msgstr ""
-#: ../win32/gui/WndMain.c:1291
+#: ../win32/gui/WndMain.c:1325
msgid "Psx Memory Card (*.mcr;*.mc)"
msgstr ""
-#: ../win32/gui/WndMain.c:1296
+#: ../win32/gui/WndMain.c:1330
msgid "CVGS Memory Card (*.mem;*.vgs)"
msgstr ""
-#: ../win32/gui/WndMain.c:1301
+#: ../win32/gui/WndMain.c:1335
msgid "Bleem Memory Card (*.mcd)"
msgstr ""
-#: ../win32/gui/WndMain.c:1306
+#: ../win32/gui/WndMain.c:1340
msgid "DexDrive Memory Card (*.gme)"
msgstr ""
-#: ../win32/gui/WndMain.c:1311
+#: ../win32/gui/WndMain.c:1345
msgid "DataDeck Memory Card (*.ddf)"
msgstr ""
-#: ../win32/gui/WndMain.c:1316 ../win32/gui/WndMain.c:1397 ../gui/Cheat.c:319
-#: ../gui/Gtk2Gui.c:516 ../gui/Gtk2Gui.c:658
+#: ../win32/gui/WndMain.c:1350 ../win32/gui/WndMain.c:1431 ../gui/Cheat.c:319
+#: ../gui/Gtk2Gui.c:512 ../gui/Gtk2Gui.c:651
msgid "All Files"
msgstr ""
-#: ../win32/gui/WndMain.c:1355
+#: ../win32/gui/WndMain.c:1389
msgid "Psx Exe Format"
msgstr ""
-#: ../win32/gui/WndMain.c:1392
+#: ../win32/gui/WndMain.c:1426
msgid "Psx Isos (*.iso;*.mdf;*.img;*.bin)"
msgstr ""
-#: ../win32/gui/WndMain.c:1468
+#: ../win32/gui/WndMain.c:1502
msgid "&File"
msgstr ""
-#: ../win32/gui/WndMain.c:1469
+#: ../win32/gui/WndMain.c:1503
msgid "E&xit"
msgstr ""
-#: ../win32/gui/WndMain.c:1471
+#: ../win32/gui/WndMain.c:1505
msgid "Run &EXE..."
msgstr ""
-#: ../win32/gui/WndMain.c:1472
+#: ../win32/gui/WndMain.c:1506
msgid "Run &BIOS"
msgstr ""
-#: ../win32/gui/WndMain.c:1473
+#: ../win32/gui/WndMain.c:1507
msgid "Run &ISO..."
msgstr ""
-#: ../win32/gui/WndMain.c:1474
+#: ../win32/gui/WndMain.c:1508
msgid "Run &CD"
msgstr ""
-#: ../win32/gui/WndMain.c:1476
+#: ../win32/gui/WndMain.c:1510
msgid "&Emulator"
msgstr ""
-#: ../win32/gui/WndMain.c:1477
+#: ../win32/gui/WndMain.c:1511
msgid "&States"
msgstr ""
-#: ../win32/gui/WndMain.c:1479
+#: ../win32/gui/WndMain.c:1513
msgid "S&witch ISO..."
msgstr ""
-#: ../win32/gui/WndMain.c:1481
+#: ../win32/gui/WndMain.c:1515
msgid "Re&set"
msgstr ""
-#: ../win32/gui/WndMain.c:1482
+#: ../win32/gui/WndMain.c:1516
msgid "&Run"
msgstr ""
-#: ../win32/gui/WndMain.c:1483
+#: ../win32/gui/WndMain.c:1517
msgid "&Save"
msgstr ""
-#: ../win32/gui/WndMain.c:1484
+#: ../win32/gui/WndMain.c:1518
msgid "&Load"
msgstr ""
-#: ../win32/gui/WndMain.c:1485 ../win32/gui/WndMain.c:1491
+#: ../win32/gui/WndMain.c:1519 ../win32/gui/WndMain.c:1525
msgid "&Other..."
msgstr ""
-#: ../win32/gui/WndMain.c:1486 ../win32/gui/WndMain.c:1492
+#: ../win32/gui/WndMain.c:1520 ../win32/gui/WndMain.c:1526
msgid "Slot &5"
msgstr ""
-#: ../win32/gui/WndMain.c:1487 ../win32/gui/WndMain.c:1493
+#: ../win32/gui/WndMain.c:1521 ../win32/gui/WndMain.c:1527
msgid "Slot &4"
msgstr ""
-#: ../win32/gui/WndMain.c:1488 ../win32/gui/WndMain.c:1494
+#: ../win32/gui/WndMain.c:1522 ../win32/gui/WndMain.c:1528
msgid "Slot &3"
msgstr ""
-#: ../win32/gui/WndMain.c:1489 ../win32/gui/WndMain.c:1495
+#: ../win32/gui/WndMain.c:1523 ../win32/gui/WndMain.c:1529
msgid "Slot &2"
msgstr ""
-#: ../win32/gui/WndMain.c:1490 ../win32/gui/WndMain.c:1496
+#: ../win32/gui/WndMain.c:1524 ../win32/gui/WndMain.c:1530
msgid "Slot &1"
msgstr ""
-#: ../win32/gui/WndMain.c:1498
+#: ../win32/gui/WndMain.c:1532
msgid "&Configuration"
msgstr ""
-#: ../win32/gui/WndMain.c:1499
+#: ../win32/gui/WndMain.c:1533
msgid "Cheat &Search..."
msgstr ""
-#: ../win32/gui/WndMain.c:1500
+#: ../win32/gui/WndMain.c:1534
msgid "Ch&eat Code..."
msgstr ""
-#: ../win32/gui/WndMain.c:1503
+#: ../win32/gui/WndMain.c:1537
msgid "&Language"
msgstr ""
-#: ../win32/gui/WndMain.c:1528
+#: ../win32/gui/WndMain.c:1562
msgid "&Memory cards..."
msgstr ""
-#: ../win32/gui/WndMain.c:1529
+#: ../win32/gui/WndMain.c:1563
msgid "C&PU..."
msgstr ""
-#: ../win32/gui/WndMain.c:1531
+#: ../win32/gui/WndMain.c:1565
msgid "&NetPlay..."
msgstr ""
-#: ../win32/gui/WndMain.c:1533
+#: ../win32/gui/WndMain.c:1567
msgid "&Controllers..."
msgstr ""
-#: ../win32/gui/WndMain.c:1534
+#: ../win32/gui/WndMain.c:1568
msgid "CD-&ROM..."
msgstr ""
-#: ../win32/gui/WndMain.c:1535
+#: ../win32/gui/WndMain.c:1569
msgid "&Sound..."
msgstr ""
-#: ../win32/gui/WndMain.c:1536
+#: ../win32/gui/WndMain.c:1570
msgid "&Graphics..."
msgstr ""
-#: ../win32/gui/WndMain.c:1538
+#: ../win32/gui/WndMain.c:1572
msgid "&Plugins && Bios..."
msgstr ""
-#: ../win32/gui/WndMain.c:1540
+#: ../win32/gui/WndMain.c:1574
msgid "&Help"
msgstr ""
-#: ../win32/gui/WndMain.c:1541
+#: ../win32/gui/WndMain.c:1575
msgid "&About..."
msgstr ""
-#: ../win32/gui/WndMain.c:1723
+#: ../win32/gui/WndMain.c:1761
msgid "Pcsx Msg"
msgstr ""
-#: ../win32/gui/WndMain.c:1726
+#: ../win32/gui/WndMain.c:1764
msgid "Error Loading Symbol"
msgstr ""
@@ -972,8 +977,8 @@ msgstr ""
msgid "All Files (*.*)"
msgstr ""
-#: ../gui/Cheat.c:392 ../gui/Cheat.c:1121 ../gui/Gtk2Gui.c:404
-#: ../gui/Gtk2Gui.c:1032
+#: ../gui/Cheat.c:392 ../gui/Cheat.c:1121 ../gui/Gtk2Gui.c:400
+#: ../gui/Gtk2Gui.c:1020
msgid "Error: Glade interface could not be loaded!"
msgstr ""
@@ -1001,129 +1006,129 @@ msgstr ""
msgid "Search Results"
msgstr ""
-#: ../gui/Gtk2Gui.c:412 ../data/pcsx.glade2:605
+#: ../gui/Gtk2Gui.c:408 ../data/pcsx.glade2:605
msgid "Configure PCSX"
msgstr ""
-#: ../gui/Gtk2Gui.c:498
+#: ../gui/Gtk2Gui.c:494
msgid "Select PSX EXE File"
msgstr ""
-#: ../gui/Gtk2Gui.c:512
+#: ../gui/Gtk2Gui.c:508
msgid "PlayStation Executable Files"
msgstr ""
-#: ../gui/Gtk2Gui.c:549
+#: ../gui/Gtk2Gui.c:544
msgid "Not a valid PSX file"
msgstr ""
-#: ../gui/Gtk2Gui.c:549
+#: ../gui/Gtk2Gui.c:544
msgid "The file does not appear to be a valid Playstation executable"
msgstr ""
-#: ../gui/Gtk2Gui.c:580 ../gui/Gtk2Gui.c:707
+#: ../gui/Gtk2Gui.c:575 ../gui/Gtk2Gui.c:700
msgid "CD ROM failed"
msgstr ""
-#: ../gui/Gtk2Gui.c:588
+#: ../gui/Gtk2Gui.c:583
msgid "The CD ROM could not be loaded"
msgstr ""
-#: ../gui/Gtk2Gui.c:603
+#: ../gui/Gtk2Gui.c:597
msgid "Could not run BIOS"
msgstr ""
-#: ../gui/Gtk2Gui.c:603
+#: ../gui/Gtk2Gui.c:597
msgid "Running BIOS is not supported with Internal HLE BIOS."
msgstr ""
-#: ../gui/Gtk2Gui.c:633
+#: ../gui/Gtk2Gui.c:626
msgid "Open PSX Disc Image File"
msgstr ""
-#: ../gui/Gtk2Gui.c:653
+#: ../gui/Gtk2Gui.c:646
msgid "PSX Image Files (*.bin, *.img, *.mdf, *.iso)"
msgstr ""
-#: ../gui/Gtk2Gui.c:891
+#: ../gui/Gtk2Gui.c:880
#, c-format
msgid "Loaded state %s."
msgstr ""
-#: ../gui/Gtk2Gui.c:896
+#: ../gui/Gtk2Gui.c:884
#, c-format
msgid "Error loading state %s!"
msgstr ""
-#: ../gui/Gtk2Gui.c:907
+#: ../gui/Gtk2Gui.c:895
#, c-format
msgid "Saved state %s."
msgstr ""
-#: ../gui/Gtk2Gui.c:909
+#: ../gui/Gtk2Gui.c:897
#, c-format
msgid "Error saving state %s!"
msgstr ""
-#: ../gui/Gtk2Gui.c:943 ../gui/Gtk2Gui.c:970
+#: ../gui/Gtk2Gui.c:931 ../gui/Gtk2Gui.c:958
msgid "Select State File"
msgstr ""
-#: ../gui/Gtk2Gui.c:1074
+#: ../gui/Gtk2Gui.c:1062
msgid "Icon"
msgstr ""
-#: ../gui/Gtk2Gui.c:1092
+#: ../gui/Gtk2Gui.c:1080
msgid "ID"
msgstr ""
-#: ../gui/Gtk2Gui.c:1098
+#: ../gui/Gtk2Gui.c:1086
msgid "Name"
msgstr ""
-#: ../gui/Gtk2Gui.c:1258
+#: ../gui/Gtk2Gui.c:1246
msgid "Format this Memory Card?"
msgstr ""
-#: ../gui/Gtk2Gui.c:1260
+#: ../gui/Gtk2Gui.c:1248
msgid ""
"If you format the memory card, the card will be empty, and any existing data "
"overwritten."
msgstr ""
-#: ../gui/Gtk2Gui.c:1263
+#: ../gui/Gtk2Gui.c:1251
msgid "Format card"
msgstr ""
-#: ../gui/Gtk2Gui.c:1378
+#: ../gui/Gtk2Gui.c:1366
msgid "No space available in the target memory card!"
msgstr ""
-#: ../gui/Gtk2Gui.c:1520 ../gui/Gtk2Gui.c:1541 ../gui/Gtk2Gui.c:1562
-#: ../gui/Gtk2Gui.c:1583 ../gui/Gtk2Gui.c:1889
+#: ../gui/Gtk2Gui.c:1508 ../gui/Gtk2Gui.c:1529 ../gui/Gtk2Gui.c:1550
+#: ../gui/Gtk2Gui.c:1571 ../gui/Gtk2Gui.c:1880
msgid "No configuration required"
msgstr ""
-#: ../gui/Gtk2Gui.c:1520 ../gui/Gtk2Gui.c:1541 ../gui/Gtk2Gui.c:1562
-#: ../gui/Gtk2Gui.c:1583 ../gui/Gtk2Gui.c:1889
+#: ../gui/Gtk2Gui.c:1508 ../gui/Gtk2Gui.c:1529 ../gui/Gtk2Gui.c:1550
+#: ../gui/Gtk2Gui.c:1571 ../gui/Gtk2Gui.c:1880
msgid "This plugin doesn't need to be configured."
msgstr ""
-#: ../gui/Gtk2Gui.c:1620
+#: ../gui/Gtk2Gui.c:1608
msgid "Memory Card Manager"
msgstr ""
-#: ../gui/Gtk2Gui.c:2143
+#: ../gui/Gtk2Gui.c:2134
#, c-format
msgid "Could not open BIOS directory: '%s'\n"
msgstr ""
-#: ../gui/Gtk2Gui.c:2173 ../gui/Gtk2Gui.c:2266 ../gui/LnxMain.c:170
+#: ../gui/Gtk2Gui.c:2164 ../gui/Gtk2Gui.c:2257 ../gui/LnxMain.c:170
#, c-format
msgid "Could not open directory: '%s'\n"
msgstr ""
-#: ../gui/Gtk2Gui.c:2327
+#: ../gui/Gtk2Gui.c:2318
msgid "Notice"
msgstr ""
@@ -1237,7 +1242,7 @@ msgstr ""
msgid "Error closing GPU plugin!"
msgstr ""
-#: ../libpcsxcore/cdriso.c:631
+#: ../libpcsxcore/cdriso.c:639
#, c-format
msgid "Loaded CD Image: %s"
msgstr ""
@@ -1256,6 +1261,22 @@ msgstr ""
msgid "(Untitled)"
msgstr ""
+#: ../libpcsxcore/debug.c:317
+msgid "Error allocating memory"
+msgstr ""
+
+#: ../libpcsxcore/debug.c:322
+msgid "Unable to start debug server.\n"
+msgstr ""
+
+#: ../libpcsxcore/debug.c:326
+msgid "Debugger started.\n"
+msgstr ""
+
+#: ../libpcsxcore/debug.c:333
+msgid "Debugger stopped.\n"
+msgstr ""
+
#: ../libpcsxcore/misc.c:380
#, c-format
msgid "Error opening file: %s.\n"
@@ -1399,19 +1420,19 @@ msgstr ""
msgid "Configure X11 Video"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:39
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:44
msgid "Initial Window Size:"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:50
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:55
msgid "Stretching:"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:63
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:68
msgid "Dithering:"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:76
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:81
msgid ""
"320x240\n"
"640x480\n"
@@ -1422,7 +1443,7 @@ msgid ""
"1600x1200"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:95
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:100
msgid ""
"0: None\n"
"1: 2xSai\n"
@@ -1434,192 +1455,157 @@ msgid ""
"7: HQ3X"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:117
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:122
msgid ""
"0: Off (fastest)\n"
"1: Game dependant\n"
"2: Always"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:139
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:145
msgid "Maintain 4:3 Aspect Ratio"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:153
-msgid "Toggle windowed/fullscreen mode."
-msgstr ""
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:154
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:160
#: ../plugins/peopsxgl/gpucfg/interface.c:322
msgid "Fullscreen"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:177
-msgid "<b>Screen</b>"
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:164
+msgid "Toggle windowed/fullscreen mode."
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:203
-msgid "Toggle whether the FPS will be shown."
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:186
+msgid "<b>Screen</b>"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:204
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:215
msgid "Show FPS"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:218
-msgid "Enable this if games display too quickly."
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:219
+msgid "Toggle whether the FPS will be shown."
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:219
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:231
msgid "Autodetect FPS limit"
msgstr ""
#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:235
-msgid "Skip frames when rendering."
+msgid "Enable this if games display too quickly."
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:236
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:248
msgid "Enable frame skipping"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:257
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:252
+msgid "Skip frames when rendering."
+msgstr ""
+
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:269
msgid "Set FPS"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:272
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:286
msgid "200.0"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:295
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:309
msgid "<b>Framerate</b>"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:324
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:338
#: ../plugins/peopsxgl/gpucfg/interface.c:568
msgid "Use game fixes"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:348
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:365
msgid "better g-colors, worse textures"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:363
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:380
msgid "Needed by Dark Forces"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:378
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:393
msgid "Draw quads with triangles"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:394
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:409
msgid "Repeated flat tex triangles"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:410
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:425
msgid "Disable CPU Saving"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:426
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:441
msgid "Odd/even bit hack"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:440
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:457
msgid "For precise framerate"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:455
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:472
msgid "Better FPS limit in some"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:470
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:485
msgid "PC FPS calculation"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:486
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:503
msgid "Pandemonium 2"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:501
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:516
msgid "Lazy screen update"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:517
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:534
msgid "Skip every second frame"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:532
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:547
#: ../plugins/peopsxgl/gpucfg/interface.c:640
msgid "Old frame skipping"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:548
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:563
msgid "Expand screen width"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:564
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:579
msgid "Ignore brightness color"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:580
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:595
msgid "Disable coordinate check"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:596
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:613
msgid "Chrono Cross"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:609
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:626
msgid "Capcom fighting games"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:624
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:641
msgid "Black screens in Lunar"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:639
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:656
msgid "Compatibility mode"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:664
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:428
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:681
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:267
msgid "<b>Compatibility</b>"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:701
-msgid "About X11 Video Plugin"
-msgstr ""
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:714
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:516
-msgid "Coded by: Pete Bernert and the P.E.Op.S. team"
-msgstr ""
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:725
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:541
-msgid "Homepage: http://home.t-online.de/home/PeteBernert/"
-msgstr ""
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:737
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:566
-msgid "EMail: BlackDove@addcom.de"
-msgstr ""
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:750
-msgid "Version: 1.15"
-msgstr ""
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:762
-msgid "Release date: 2003"
-msgstr ""
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:774
-msgid "<b>PCSX-df Video Plugin Adaption</b>"
-msgstr ""
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:787
-msgid "XVideo Support: Stephen Chao"
-msgstr ""
-
#: ../data/pcsx.glade2:9
msgid "PCSX"
msgstr ""
@@ -1792,10 +1778,6 @@ msgstr ""
msgid "Configure CPU"
msgstr ""
-#: ../data/pcsx.glade2:1233
-msgid "Enable Debugger"
-msgstr ""
-
#: ../data/pcsx.glade2:1251
msgid "SPU IRQ Always Enabled"
msgstr ""
@@ -1901,7 +1883,7 @@ msgid ""
"the Free Software Foundation, Inc."
msgstr ""
-#: ../data/pcsx.glade2:2310 ../plugins/dfinput/dfinput.glade2:212
+#: ../data/pcsx.glade2:2310
msgid "translator-credits"
msgstr ""
@@ -1969,23 +1951,23 @@ msgid ""
"Coded by Pete Bernert and the P.E.Op.S. team\n"
msgstr ""
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:9
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:8
msgid "Configure Sound"
msgstr ""
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:62
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:41
msgid "Volume:"
msgstr ""
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:90
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:53
msgid "Interpolation:"
msgstr ""
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:118
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:67
msgid "Reverb:"
msgstr ""
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:146
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:80
msgid ""
"Low\n"
"Medium\n"
@@ -1993,14 +1975,14 @@ msgid ""
"Loudest"
msgstr ""
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:165
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:94
msgid ""
"Off\n"
"Simple\n"
"Playstation"
msgstr ""
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:184
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:110
msgid ""
"None\n"
"Simple\n"
@@ -2008,68 +1990,44 @@ msgid ""
"Cubic"
msgstr ""
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:208
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:131
msgid "<b>General</b>"
msgstr ""
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:264
-msgid "Enable or disable XA music."
-msgstr ""
-
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:266
-msgid "Enable XA"
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:162
+msgid "Adjust XA speed"
msgstr ""
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:284
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:166
msgid "Choose this if XA music is played too quickly."
msgstr ""
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:286
-msgid "Adjust XA speed"
-msgstr ""
-
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:308
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:183
msgid "<b>XA Music</b>"
msgstr ""
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:364
-msgid "Use the asynchronous SPU interface."
-msgstr ""
-
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:366
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:214
msgid "High compatibility mode"
msgstr ""
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:384
-msgid "Wait for CPU; only useful for some games."
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:218
+msgid "Use the asynchronous SPU interface."
msgstr ""
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:386
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:230
msgid "SPU IRQ Wait"
msgstr ""
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:404
-msgid "Play only one channel for a performance boost."
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:234
+msgid "Wait for CPU; only useful for some games."
msgstr ""
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:406
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:246
msgid "Single channel sound"
msgstr ""
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:486
-msgid "About Sound Plugin"
-msgstr ""
-
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:592
-msgid "Version: 1.6"
-msgstr ""
-
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:617
-msgid "Release date: 05.04.2003"
-msgstr ""
-
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:642
-msgid "<b>PCSX-df Sound Plugin Adaption</b>"
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:250
+msgid "Play only one channel for a performance boost."
msgstr ""
#: ../plugins/dfcdrom/cdr.c:58
@@ -2472,46 +2430,225 @@ msgstr ""
msgid "Version: 1.78"
msgstr ""
-#: ../plugins/dfinput/pad.c:59
-msgid "Gamepad/Keyboard Input"
+#: ../plugins/dfinput/cfg-gtk2.c:48
+msgid "D-Pad Up"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:49
+msgid "D-Pad Down"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:50
+msgid "D-Pad Left"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:51
+msgid "D-Pad Right"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:52
+msgid "Cross"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:53
+msgid "Circle"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:54
+msgid "Square"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:55
+msgid "Triangle"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:56
+msgid "L1"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:57
+msgid "R1"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:58
+msgid "L2"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:59
+msgid "R2"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:60
+msgid "L3"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:61
+msgid "R3"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:62
+msgid "Select"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:63
+msgid "Start"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:67
+msgid "L-Stick X"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:68
+msgid "L-Stick Y"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:69
+msgid "R-Stick X"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:70
+msgid "R-Stick Y"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:98
+msgid "Centered"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:98
+msgid "Up"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:98
+msgid "Right"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:98
+msgid "Rightup"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:99
+msgid "Down"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:99
+msgid "Rightdown"
msgstr ""
-#: ../plugins/dfinput/pad.c:61
-msgid "Keyboard Input"
+#: ../plugins/dfinput/cfg-gtk2.c:99
+msgid "Left"
msgstr ""
-#: ../plugins/dfinput/dfinput.glade2:7
-msgid "Configure Gamepad/Keyboard"
+#: ../plugins/dfinput/cfg-gtk2.c:99
+msgid "Leftup"
msgstr ""
-#: ../plugins/dfinput/dfinput.glade2:25
-msgid "Pad number:"
+#: ../plugins/dfinput/cfg-gtk2.c:100
+msgid "Leftdown"
msgstr ""
-#: ../plugins/dfinput/dfinput.glade2:36
-msgid "1"
+#: ../plugins/dfinput/cfg-gtk2.c:104
+#, c-format
+msgid "Joystick: Button %d"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:108
+#, c-format
+msgid "Joystick: Axis %d%c"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:113
+#, c-format
+msgid "Joystick: Hat %d %s"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:128
+msgid "Keyboard:"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:132 ../plugins/dfinput/cfg-gtk2.c:140
+#, c-format
+msgid "(Not Set)"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:142
+#, c-format
+msgid "Joystick: Axis %d%s"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:142
+msgid " (Reversed)"
msgstr ""
-#: ../plugins/dfinput/dfinput.glade2:51
-msgid "2"
+#: ../plugins/dfinput/cfg-gtk2.c:378
+msgid "Device not set"
msgstr ""
-#: ../plugins/dfinput/dfinput.glade2:73
-msgid "Device file:"
+#: ../plugins/dfinput/cfg-gtk2.c:378
+msgid "Please select a valid Joystick Device"
msgstr ""
-#: ../plugins/dfinput/dfinput.glade2:104
-msgid "Multi-threaded"
+#: ../plugins/dfinput/cfg-gtk2.c:384
+msgid "Device open error"
msgstr ""
-#: ../plugins/dfinput/dfinput.glade2:118
-msgid "Analog"
+#: ../plugins/dfinput/cfg-gtk2.c:384
+msgid "Unable to open Joystick Device"
msgstr ""
-#: ../plugins/dfinput/dfinput.glade2:155
-msgid "<b>Button Configuration</b>"
+#: ../plugins/dfinput/cfg-gtk2.c:475
+msgid "None"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:517
+msgid "Gamepad/Keyboard Input Configuration"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:523 ../plugins/dfinput/cfg-gtk2.c:543
+msgid "Key"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:529 ../plugins/dfinput/cfg-gtk2.c:549
+msgid "Button"
+msgstr ""
+
+#: ../plugins/dfinput/pad.c:23
+msgid "Gamepad/Keyboard Input (ePSXe)"
+msgstr ""
+
+#: ../plugins/dfinput/pad.c:25
+msgid "Gamepad/Keyboard Input"
+msgstr ""
+
+#: ../plugins/dfinput/dfinput.glade2:34 ../plugins/dfinput/dfinput.glade2:231
+msgid "Device:"
+msgstr ""
+
+#: ../plugins/dfinput/dfinput.glade2:65 ../plugins/dfinput/dfinput.glade2:262
+msgid "Type:"
+msgstr ""
+
+#: ../plugins/dfinput/dfinput.glade2:77 ../plugins/dfinput/dfinput.glade2:274
+msgid ""
+"Digital Pad\n"
+"Analog Pad"
+msgstr ""
+
+#: ../plugins/dfinput/dfinput.glade2:148 ../plugins/dfinput/dfinput.glade2:345
+msgid "Change"
+msgstr ""
+
+#: ../plugins/dfinput/dfinput.glade2:184 ../plugins/dfinput/dfinput.glade2:381
+msgid "Reset"
msgstr ""
#: ../plugins/dfinput/dfinput.glade2:209
-msgid "Based on PadJoy by Erich Kitzmüller (ammoq@ammoq.com)"
+msgid "Controller 1"
+msgstr ""
+
+#: ../plugins/dfinput/dfinput.glade2:411
+msgid "Controller 2"
+msgstr ""
+
+#: ../plugins/dfinput/dfinput.glade2:426
+msgid "Multi-Threaded (Recommended)"
msgstr ""
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
index e4b5ff4c..29bd55fa 100644
--- a/po/pt_BR.gmo
+++ b/po/pt_BR.gmo
Binary files differ
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 22ccea9d..6ef19fc1 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -5,8 +5,8 @@ msgid ""
msgstr ""
"Project-Id-Version: pcsx-df\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-10-01 18:26+0800\n"
-"PO-Revision-Date: 2009-10-01 18:27+0700\n"
+"POT-Creation-Date: 2009-10-25 21:49+0800\n"
+"PO-Revision-Date: 2009-10-09 22:27+0700\n"
"Last-Translator: Wei Mingzhi <whistler@openoffice.org>\n"
"Language-Team: PoBRE <romhackers@gmail.com>\n"
"MIME-Version: 1.0\n"
@@ -52,19 +52,14 @@ msgstr ""
"\n"
"http://www.codeplex.com/pcsxr"
-#: ../win32/gui/AboutDlg.c:46
-#: ../plugins/peopsxgl/gpucfg/interface.c:831
+#: ../win32/gui/AboutDlg.c:46 ../plugins/peopsxgl/gpucfg/interface.c:831
msgid "About"
msgstr "Sobre"
-#: ../win32/gui/AboutDlg.c:48
-#: ../win32/gui/AboutDlg.c:52
-#: ../win32/gui/CheatDlg.c:70
-#: ../win32/gui/CheatDlg.c:120
-#: ../win32/gui/ConfigurePlugins.c:464
-#: ../win32/gui/ConfigurePlugins.c:595
-#: ../win32/gui/WndMain.c:963
-#: ../win32/gui/WndMain.c:1199
+#: ../win32/gui/AboutDlg.c:48 ../win32/gui/AboutDlg.c:52
+#: ../win32/gui/CheatDlg.c:70 ../win32/gui/CheatDlg.c:120
+#: ../win32/gui/ConfigurePlugins.c:470 ../win32/gui/ConfigurePlugins.c:601
+#: ../win32/gui/WndMain.c:963 ../win32/gui/WndMain.c:1199
#: ../plugins/peopsxgl/gpucfg/interface.c:130
#: ../plugins/peopsxgl/gpucfg/interface.c:843
msgid "OK"
@@ -74,60 +69,46 @@ msgstr "OK"
msgid "PCSX EMU\n"
msgstr "EMULADOR PCSX\n"
-#: ../win32/gui/CheatDlg.c:52
-#: ../win32/gui/CheatDlg.c:224
+#: ../win32/gui/CheatDlg.c:52 ../win32/gui/CheatDlg.c:224
#: ../win32/gui/CheatDlg.c:271
msgid "Yes"
msgstr "Sim"
-#: ../win32/gui/CheatDlg.c:52
-#: ../win32/gui/CheatDlg.c:224
+#: ../win32/gui/CheatDlg.c:52 ../win32/gui/CheatDlg.c:224
#: ../win32/gui/CheatDlg.c:271
msgid "No"
msgstr "Não"
-#: ../win32/gui/CheatDlg.c:67
-#: ../gui/Cheat.c:193
+#: ../win32/gui/CheatDlg.c:67 ../gui/Cheat.c:193
msgid "Edit Cheat"
msgstr "Editar Trapaça"
-#: ../win32/gui/CheatDlg.c:68
-#: ../win32/gui/CheatDlg.c:118
-#: ../gui/Cheat.c:633
+#: ../win32/gui/CheatDlg.c:68 ../win32/gui/CheatDlg.c:118 ../gui/Cheat.c:633
msgid "Description:"
msgstr "Descrição:"
-#: ../win32/gui/CheatDlg.c:69
-#: ../win32/gui/CheatDlg.c:119
-#: ../gui/Cheat.c:125
+#: ../win32/gui/CheatDlg.c:69 ../win32/gui/CheatDlg.c:119 ../gui/Cheat.c:125
#: ../gui/Cheat.c:210
msgid "Cheat Code:"
msgstr "Código de Trapaça:"
-#: ../win32/gui/CheatDlg.c:71
-#: ../win32/gui/CheatDlg.c:121
-#: ../win32/gui/ConfigurePlugins.c:465
-#: ../win32/gui/ConfigurePlugins.c:596
-#: ../win32/gui/WndMain.c:964
-#: ../win32/gui/WndMain.c:1200
+#: ../win32/gui/CheatDlg.c:71 ../win32/gui/CheatDlg.c:121
+#: ../win32/gui/ConfigurePlugins.c:471 ../win32/gui/ConfigurePlugins.c:602
+#: ../win32/gui/WndMain.c:964 ../win32/gui/WndMain.c:1200
#: ../plugins/peopsxgl/gpucfg/interface.c:338
msgid "Cancel"
msgstr "Cancelar"
-#: ../win32/gui/CheatDlg.c:92
-#: ../win32/gui/CheatDlg.c:133
-#: ../gui/Cheat.c:155
+#: ../win32/gui/CheatDlg.c:92 ../win32/gui/CheatDlg.c:133 ../gui/Cheat.c:155
#: ../gui/Cheat.c:250
msgid "Invalid cheat code!"
msgstr "Código de trapaça inválido!"
-#: ../win32/gui/CheatDlg.c:117
-#: ../gui/Cheat.c:109
+#: ../win32/gui/CheatDlg.c:117 ../gui/Cheat.c:109
msgid "Add New Cheat"
msgstr "Adicionar nova Trapaça"
-#: ../win32/gui/CheatDlg.c:167
-#: ../data/pcsx.glade2:2332
+#: ../win32/gui/CheatDlg.c:167 ../data/pcsx.glade2:2332
msgid "Edit Cheat Codes"
msgstr "Editar Códigos de Trapaça"
@@ -159,8 +140,7 @@ msgstr "&Salvar como..."
msgid "&Close"
msgstr "&Fechar"
-#: ../win32/gui/CheatDlg.c:186
-#: ../gui/Cheat.c:411
+#: ../win32/gui/CheatDlg.c:186 ../gui/Cheat.c:411
msgid "Description"
msgstr "Descrição"
@@ -168,8 +148,7 @@ msgstr "Descrição"
msgid "Enabled"
msgstr "Ligado"
-#: ../win32/gui/CheatDlg.c:283
-#: ../win32/gui/CheatDlg.c:312
+#: ../win32/gui/CheatDlg.c:283 ../win32/gui/CheatDlg.c:312
msgid "PCSX Cheat Code Files"
msgstr "Arquivos de trapaça do PCSX"
@@ -209,8 +188,7 @@ msgstr "Diferentes"
msgid "No Change"
msgstr "Sem mudanças"
-#: ../win32/gui/CheatDlg.c:449
-#: ../gui/Cheat.c:583
+#: ../win32/gui/CheatDlg.c:449 ../gui/Cheat.c:583
msgid "Enter the values and start your search."
msgstr "Digite algum número para começar a pesquisa."
@@ -218,50 +196,40 @@ msgstr "Digite algum número para começar a pesquisa."
msgid "No addresses found."
msgstr "Nenhum endereço encontrado com esse número."
-#: ../win32/gui/CheatDlg.c:458
-#: ../gui/Cheat.c:541
+#: ../win32/gui/CheatDlg.c:458 ../gui/Cheat.c:541
msgid "Too many addresses found."
msgstr "Muitos endereços encontrados com esse número, refine a pesquisa."
-#: ../win32/gui/CheatDlg.c:467
-#: ../gui/Cheat.c:550
+#: ../win32/gui/CheatDlg.c:467 ../gui/Cheat.c:550
#, c-format
msgid "%.8X Current: %u (%.2X), Previous: %u (%.2X)"
msgstr "%.8X Atual: %u (%.2X), Anterior: %u (%.2X)"
-#: ../win32/gui/CheatDlg.c:472
-#: ../gui/Cheat.c:555
+#: ../win32/gui/CheatDlg.c:472 ../gui/Cheat.c:555
#, c-format
msgid "%.8X Current: %u (%.4X), Previous: %u (%.4X)"
msgstr "%.8X Atual: %u (%.4X), Anterior: %u (%.4X)"
-#: ../win32/gui/CheatDlg.c:477
-#: ../gui/Cheat.c:560
+#: ../win32/gui/CheatDlg.c:477 ../gui/Cheat.c:560
#, c-format
msgid "%.8X Current: %u (%.8X), Previous: %u (%.8X)"
msgstr "%.8X Atual: %u (%.8X), Anterior: %u (%.8X)"
-#: ../win32/gui/CheatDlg.c:493
-#: ../gui/Cheat.c:575
+#: ../win32/gui/CheatDlg.c:493 ../gui/Cheat.c:575
#, c-format
msgid "Founded Addresses: %d"
msgstr "Endereços com o número: %d"
-#: ../win32/gui/CheatDlg.c:505
-#: ../data/pcsx.glade2:2729
+#: ../win32/gui/CheatDlg.c:505 ../data/pcsx.glade2:2729
msgid "Freeze"
msgstr "Parar"
-#: ../win32/gui/CheatDlg.c:506
-#: ../win32/gui/CheatDlg.c:597
+#: ../win32/gui/CheatDlg.c:506 ../win32/gui/CheatDlg.c:597
msgid "Address:"
msgstr "Endereço:"
-#: ../win32/gui/CheatDlg.c:507
-#: ../win32/gui/CheatDlg.c:598
-#: ../win32/gui/CheatDlg.c:683
-#: ../gui/Cheat.c:644
-#: ../data/pcsx.glade2:2573
+#: ../win32/gui/CheatDlg.c:507 ../win32/gui/CheatDlg.c:598
+#: ../win32/gui/CheatDlg.c:683 ../gui/Cheat.c:644 ../data/pcsx.glade2:2573
msgid "Value:"
msgstr "Valor:"
@@ -270,34 +238,27 @@ msgstr "Valor:"
msgid "Freeze %.8X"
msgstr "Parar %.8X"
-#: ../win32/gui/CheatDlg.c:596
-#: ../data/pcsx.glade2:2765
+#: ../win32/gui/CheatDlg.c:596 ../data/pcsx.glade2:2765
msgid "Modify"
msgstr "Modificar"
-#: ../win32/gui/CheatDlg.c:679
-#: ../gui/Cheat.c:1126
-#: ../data/pcsx.glade2:2502
+#: ../win32/gui/CheatDlg.c:679 ../gui/Cheat.c:1126 ../data/pcsx.glade2:2502
msgid "Cheat Search"
msgstr "Procurar por trapaça"
-#: ../win32/gui/CheatDlg.c:681
-#: ../data/pcsx.glade2:2551
+#: ../win32/gui/CheatDlg.c:681 ../data/pcsx.glade2:2551
msgid "Search For:"
msgstr "Buscar por:"
-#: ../win32/gui/CheatDlg.c:682
-#: ../data/pcsx.glade2:2561
+#: ../win32/gui/CheatDlg.c:682 ../data/pcsx.glade2:2561
msgid "Data Type:"
msgstr "Tipo de dados:"
-#: ../win32/gui/CheatDlg.c:684
-#: ../data/pcsx.glade2:2585
+#: ../win32/gui/CheatDlg.c:684 ../data/pcsx.glade2:2585
msgid "Data Base:"
msgstr "Banco de dados:"
-#: ../win32/gui/CheatDlg.c:685
-#: ../data/pcsx.glade2:2645
+#: ../win32/gui/CheatDlg.c:685 ../data/pcsx.glade2:2645
msgid "To:"
msgstr "Para:"
@@ -345,133 +306,120 @@ msgstr "Decimal"
msgid "Hexadecimal"
msgstr "Hexadecimal"
-#: ../win32/gui/ConfigurePlugins.c:200
-#: ../gui/Gtk2Gui.c:2237
+#: ../win32/gui/ConfigurePlugins.c:206 ../gui/Gtk2Gui.c:2228
msgid "Internal HLE Bios"
msgstr "BIOS HLE interna"
-#: ../win32/gui/ConfigurePlugins.c:286
+#: ../win32/gui/ConfigurePlugins.c:292
msgid "Configuration not OK!"
msgstr "Não configurou corretamente!"
-#: ../win32/gui/ConfigurePlugins.c:286
-#: ../gui/Cheat.c:155
-#: ../gui/Cheat.c:250
+#: ../win32/gui/ConfigurePlugins.c:292 ../gui/Cheat.c:155 ../gui/Cheat.c:250
#: ../gui/LnxMain.c:405
msgid "Error"
msgstr "Erro"
-#: ../win32/gui/ConfigurePlugins.c:387
+#: ../win32/gui/ConfigurePlugins.c:393
msgid "This plugin reports that should work correctly"
msgstr "Esta extensão informou que deve funcionar corretamente."
-#: ../win32/gui/ConfigurePlugins.c:388
+#: ../win32/gui/ConfigurePlugins.c:394
msgid "This plugin reports that should not work correctly"
msgstr "Esta extensão informou que não deve funcionar corretamente."
-#: ../win32/gui/ConfigurePlugins.c:444
+#: ../win32/gui/ConfigurePlugins.c:450
msgid "Select Plugins Directory"
msgstr "Escolha o diretório das extensões"
-#: ../win32/gui/ConfigurePlugins.c:453
+#: ../win32/gui/ConfigurePlugins.c:459
msgid "Select Bios Directory"
msgstr "Escolha o diretório da BIOS"
-#: ../win32/gui/ConfigurePlugins.c:462
+#: ../win32/gui/ConfigurePlugins.c:468
msgid "Configuration"
msgstr "Configuração"
-#: ../win32/gui/ConfigurePlugins.c:466
+#: ../win32/gui/ConfigurePlugins.c:472
msgid "Graphics"
msgstr "Gráficos"
-#: ../win32/gui/ConfigurePlugins.c:467
+#: ../win32/gui/ConfigurePlugins.c:473
msgid "First Controller"
msgstr "Controle 1"
-#: ../win32/gui/ConfigurePlugins.c:468
+#: ../win32/gui/ConfigurePlugins.c:474
msgid "Second Controller"
msgstr "Controle 2"
-#: ../win32/gui/ConfigurePlugins.c:469
+#: ../win32/gui/ConfigurePlugins.c:475
msgid "Sound"
msgstr "Áudio"
-#: ../win32/gui/ConfigurePlugins.c:470
+#: ../win32/gui/ConfigurePlugins.c:476
msgid "Cdrom"
msgstr "CDROM"
-#: ../win32/gui/ConfigurePlugins.c:471
+#: ../win32/gui/ConfigurePlugins.c:477
msgid "Bios"
msgstr "BIOS"
-#: ../win32/gui/ConfigurePlugins.c:472
+#: ../win32/gui/ConfigurePlugins.c:478
msgid "Set Bios Directory"
msgstr "Escolher o diretório da BIOS"
-#: ../win32/gui/ConfigurePlugins.c:473
+#: ../win32/gui/ConfigurePlugins.c:479
msgid "Set Plugins Directory"
msgstr "Escolher o diretório das extensões"
-#: ../win32/gui/ConfigurePlugins.c:474
-#: ../win32/gui/ConfigurePlugins.c:477
-#: ../win32/gui/ConfigurePlugins.c:480
-#: ../win32/gui/ConfigurePlugins.c:483
-#: ../win32/gui/ConfigurePlugins.c:486
-#: ../win32/gui/ConfigurePlugins.c:598
+#: ../win32/gui/ConfigurePlugins.c:480 ../win32/gui/ConfigurePlugins.c:483
+#: ../win32/gui/ConfigurePlugins.c:486 ../win32/gui/ConfigurePlugins.c:489
+#: ../win32/gui/ConfigurePlugins.c:492 ../win32/gui/ConfigurePlugins.c:604
msgid "Configure..."
msgstr "Configurar..."
-#: ../win32/gui/ConfigurePlugins.c:475
-#: ../win32/gui/ConfigurePlugins.c:478
-#: ../win32/gui/ConfigurePlugins.c:481
-#: ../win32/gui/ConfigurePlugins.c:484
-#: ../win32/gui/ConfigurePlugins.c:487
-#: ../win32/gui/ConfigurePlugins.c:599
+#: ../win32/gui/ConfigurePlugins.c:481 ../win32/gui/ConfigurePlugins.c:484
+#: ../win32/gui/ConfigurePlugins.c:487 ../win32/gui/ConfigurePlugins.c:490
+#: ../win32/gui/ConfigurePlugins.c:493 ../win32/gui/ConfigurePlugins.c:605
msgid "Test..."
msgstr "Testar..."
-#: ../win32/gui/ConfigurePlugins.c:476
-#: ../win32/gui/ConfigurePlugins.c:479
-#: ../win32/gui/ConfigurePlugins.c:482
-#: ../win32/gui/ConfigurePlugins.c:485
-#: ../win32/gui/ConfigurePlugins.c:488
-#: ../win32/gui/ConfigurePlugins.c:600
+#: ../win32/gui/ConfigurePlugins.c:482 ../win32/gui/ConfigurePlugins.c:485
+#: ../win32/gui/ConfigurePlugins.c:488 ../win32/gui/ConfigurePlugins.c:491
+#: ../win32/gui/ConfigurePlugins.c:494 ../win32/gui/ConfigurePlugins.c:606
msgid "About..."
msgstr "Sobre..."
-#: ../win32/gui/ConfigurePlugins.c:593
+#: ../win32/gui/ConfigurePlugins.c:599
msgid "NetPlay Configuration"
msgstr "Configuração do jogo em rede"
-#: ../win32/gui/ConfigurePlugins.c:597
+#: ../win32/gui/ConfigurePlugins.c:603
msgid "NetPlay"
msgstr "Jogo em rede"
-#: ../win32/gui/ConfigurePlugins.c:601
-msgid "Note: The NetPlay Plugin Directory should be the same as the other Plugins."
-msgstr "Observação: o diretório da extensão de jogo em rede deve ser o mesmo que odas outras extensões."
+#: ../win32/gui/ConfigurePlugins.c:607
+msgid ""
+"Note: The NetPlay Plugin Directory should be the same as the other Plugins."
+msgstr ""
+"Observação: o diretório da extensão de jogo em rede deve ser o mesmo que "
+"odas outras extensões."
-#: ../win32/gui/plugin.c:90
-#: ../win32/gui/WndMain.c:278
+#: ../win32/gui/plugin.c:90 ../win32/gui/WndMain.c:278
#, c-format
msgid "*PCSX*: Saved State %d"
msgstr "PCSX: Estado \"%d\" salvo."
-#: ../win32/gui/plugin.c:91
-#: ../win32/gui/WndMain.c:279
+#: ../win32/gui/plugin.c:91 ../win32/gui/WndMain.c:279
#, c-format
msgid "*PCSX*: Error Saving State %d"
msgstr "PCSX: Erro ao salvar o estado \"%d\"!"
-#: ../win32/gui/plugin.c:107
-#: ../win32/gui/WndMain.c:256
+#: ../win32/gui/plugin.c:107 ../win32/gui/WndMain.c:256
#, c-format
msgid "*PCSX*: Loaded State %d"
msgstr "PCSX: Estado \"%d\" carregado."
-#: ../win32/gui/plugin.c:108
-#: ../win32/gui/WndMain.c:257
+#: ../win32/gui/plugin.c:108 ../win32/gui/WndMain.c:257
#, c-format
msgid "*PCSX*: Error Loading State %d"
msgstr "PCSX: Erro ao carregar o estado \"%d\"!"
@@ -518,8 +466,7 @@ msgstr "PCSX: Bandeja do CDROM fechada."
msgid "Connecting..."
msgstr "Conectando..."
-#: ../win32/gui/plugin.c:179
-#: ../win32/gui/plugin.c:186
+#: ../win32/gui/plugin.c:179 ../win32/gui/plugin.c:186
#, c-format
msgid "Please wait while connecting... %c\n"
msgstr "Por favor, espere enquanto o emulador se conecta... %c\n"
@@ -614,9 +561,8 @@ msgstr "Alemão"
msgid "Greek"
msgstr "Grego"
-#: ../win32/gui/WndMain.c:80
-#: ../win32/gui/WndMain.c:1522
-#: ../win32/gui/WndMain.c:1524
+#: ../win32/gui/WndMain.c:80 ../win32/gui/WndMain.c:1556
+#: ../win32/gui/WndMain.c:1558
msgid "English"
msgstr "Inglês"
@@ -660,8 +606,7 @@ msgstr "Japonês"
msgid "Korean"
msgstr "Coreano"
-#: ../win32/gui/WndMain.c:297
-#: ../win32/gui/WndMain.c:349
+#: ../win32/gui/WndMain.c:297 ../win32/gui/WndMain.c:349
msgid "PCSX State Format"
msgstr "Formato dos estados salvos do PCSX"
@@ -685,17 +630,13 @@ msgstr "PCSX: Arquivo de estado \"%s\" salvo."
msgid "*PCSX*: Error Saving State %s"
msgstr "PCSX: Erro ao salvar o arquivo de estado \"%s\"!"
-#: ../win32/gui/WndMain.c:426
-#: ../win32/gui/WndMain.c:475
-#: ../gui/Gtk2Gui.c:580
-#: ../gui/Gtk2Gui.c:707
+#: ../win32/gui/WndMain.c:426 ../win32/gui/WndMain.c:475 ../gui/Gtk2Gui.c:575
+#: ../gui/Gtk2Gui.c:700
msgid "The CD does not appear to be a valid Playstation CD"
msgstr "Esse CD não parece ser um CD de PlayStation!"
-#: ../win32/gui/WndMain.c:432
-#: ../win32/gui/WndMain.c:481
-#: ../gui/Gtk2Gui.c:588
-#: ../gui/Gtk2Gui.c:715
+#: ../win32/gui/WndMain.c:432 ../win32/gui/WndMain.c:481 ../gui/Gtk2Gui.c:583
+#: ../gui/Gtk2Gui.c:708
msgid "Could not load CD-ROM!"
msgstr "Não pôde carregar o CDROM!"
@@ -703,13 +644,11 @@ msgstr "Não pôde carregar o CDROM!"
msgid "Running BIOS is not supported with Internal HLE Bios."
msgstr "Iniciar pela BIOS não é suportado com a BIOS HLE interna."
-#: ../win32/gui/WndMain.c:661
-#: ../gui/Gtk2Gui.c:1080
+#: ../win32/gui/WndMain.c:661 ../gui/Gtk2Gui.c:1068
msgid "Title"
msgstr "Título"
-#: ../win32/gui/WndMain.c:667
-#: ../gui/Gtk2Gui.c:1086
+#: ../win32/gui/WndMain.c:667 ../gui/Gtk2Gui.c:1074
msgid "Status"
msgstr "Estado"
@@ -729,20 +668,16 @@ msgstr "bloco de ligação intermediário"
msgid "terminiting link block"
msgstr "bloco final da ligação"
-#: ../win32/gui/WndMain.c:864
-#: ../gui/Gtk2Gui.c:1160
+#: ../win32/gui/WndMain.c:864 ../gui/Gtk2Gui.c:1148
msgid "Deleted"
msgstr "Apagado"
-#: ../win32/gui/WndMain.c:865
-#: ../win32/gui/WndMain.c:868
-#: ../gui/Gtk2Gui.c:1162
-#: ../gui/Gtk2Gui.c:1166
+#: ../win32/gui/WndMain.c:865 ../win32/gui/WndMain.c:868 ../gui/Gtk2Gui.c:1150
+#: ../gui/Gtk2Gui.c:1154
msgid "Free"
msgstr "Liberado"
-#: ../win32/gui/WndMain.c:867
-#: ../gui/Gtk2Gui.c:1164
+#: ../win32/gui/WndMain.c:867 ../gui/Gtk2Gui.c:1152
msgid "Used"
msgstr "Usado"
@@ -750,18 +685,15 @@ msgstr "Usado"
msgid "Memcard Manager"
msgstr "Gerenciador de cartões de memória"
-#: ../win32/gui/WndMain.c:965
-#: ../win32/gui/WndMain.c:968
+#: ../win32/gui/WndMain.c:965 ../win32/gui/WndMain.c:968
msgid "Select Mcd"
msgstr "Selecionar cartão"
-#: ../win32/gui/WndMain.c:966
-#: ../win32/gui/WndMain.c:969
+#: ../win32/gui/WndMain.c:966 ../win32/gui/WndMain.c:969
msgid "Format Mcd"
msgstr "Formatar cartão"
-#: ../win32/gui/WndMain.c:967
-#: ../win32/gui/WndMain.c:970
+#: ../win32/gui/WndMain.c:967 ../win32/gui/WndMain.c:970
msgid "Reload Mcd"
msgstr "Reiniciar cartão"
@@ -797,14 +729,12 @@ msgstr "Cartão de memória 2"
msgid "Are you sure you want to paste this selection?"
msgstr "Você tem certeza que quer colar o selecionado?"
-#: ../win32/gui/WndMain.c:1033
-#: ../win32/gui/WndMain.c:1144
+#: ../win32/gui/WndMain.c:1033 ../win32/gui/WndMain.c:1144
#: ../win32/gui/WndMain.c:1151
msgid "Confirmation"
msgstr "Confirmação"
-#: ../win32/gui/WndMain.c:1144
-#: ../win32/gui/WndMain.c:1151
+#: ../win32/gui/WndMain.c:1144 ../win32/gui/WndMain.c:1151
msgid "Are you sure you want to format this Memory Card?"
msgstr "Você tem certeza que quer formatar esse Cartão de Memória?"
@@ -828,8 +758,7 @@ msgstr "Filmes em preto e branco"
msgid "Disable Cd audio"
msgstr "Desativar áudio de CD"
-#: ../win32/gui/WndMain.c:1206
-#: ../data/pcsx.glade2:1427
+#: ../win32/gui/WndMain.c:1206 ../data/pcsx.glade2:1427
msgid "Autodetect"
msgstr "Detectar Automaticamente"
@@ -837,222 +766,213 @@ msgstr "Detectar Automaticamente"
msgid "Enable Interpreter Cpu"
msgstr "Ativar interpretador da CPU"
-#: ../win32/gui/WndMain.c:1208
-#: ../data/pcsx.glade2:1283
+#: ../win32/gui/WndMain.c:1208 ../data/pcsx.glade2:1283
msgid "Enable Console Output"
msgstr "Ativar saída no terminal"
-#: ../win32/gui/WndMain.c:1209
+#: ../win32/gui/WndMain.c:1209 ../data/pcsx.glade2:1233
+msgid "Enable Debugger"
+msgstr "Ligar debugger"
+
+#: ../win32/gui/WndMain.c:1210
msgid "Spu Irq Always Enabled"
msgstr "IRQ da SPU sempre ligada"
-#: ../win32/gui/WndMain.c:1210
-#: ../data/pcsx.glade2:1370
+#: ../win32/gui/WndMain.c:1211 ../data/pcsx.glade2:1370
msgid "Parasite Eve 2, Vandal Hearts 1/2 Fix"
msgstr "Correção para Parasite Eve 2, Vandal Hearts..."
-#: ../win32/gui/WndMain.c:1211
-#: ../data/pcsx.glade2:1385
+#: ../win32/gui/WndMain.c:1212 ../data/pcsx.glade2:1385
msgid "InuYasha Sengoku Battle Fix"
msgstr "Correção para InuYasha, Sengoku Battle..."
-#: ../win32/gui/WndMain.c:1213
-#: ../plugins/dfcdrom/interface.c:194
+#: ../win32/gui/WndMain.c:1214 ../plugins/dfcdrom/interface.c:194
+#: ../plugins/dfinput/dfinput.glade2:447
msgid "Options"
msgstr "Opções"
-#: ../win32/gui/WndMain.c:1214
+#: ../win32/gui/WndMain.c:1215
msgid "Psx System Type"
msgstr "Tipo de sistema do PSX"
-#: ../win32/gui/WndMain.c:1286
+#: ../win32/gui/WndMain.c:1320
msgid "Psx Mcd Format (*.mcr;*.mc;*.mem;*.vgs;*.mcd;*.gme;*.ddf)"
msgstr "Qualquer formato (*.mcr;*.mc;*.mem;*.vgs;*.mcd;*.gme;*.ddf)"
-#: ../win32/gui/WndMain.c:1291
+#: ../win32/gui/WndMain.c:1325
msgid "Psx Memory Card (*.mcr;*.mc)"
msgstr "Cartão de memória binário (*.mcr;*.mc)"
-#: ../win32/gui/WndMain.c:1296
+#: ../win32/gui/WndMain.c:1330
msgid "CVGS Memory Card (*.mem;*.vgs)"
msgstr "Cartão de memória do CVGS (*.mem;*.vgs)"
-#: ../win32/gui/WndMain.c:1301
+#: ../win32/gui/WndMain.c:1335
msgid "Bleem Memory Card (*.mcd)"
msgstr "Cartão de memória do Bleem (*.mcd)"
-#: ../win32/gui/WndMain.c:1306
+#: ../win32/gui/WndMain.c:1340
msgid "DexDrive Memory Card (*.gme)"
msgstr "Cartão de memória do DexDrive (*.gme)"
-#: ../win32/gui/WndMain.c:1311
+#: ../win32/gui/WndMain.c:1345
msgid "DataDeck Memory Card (*.ddf)"
msgstr "Cartão de memória do DataDeck (*.ddf)"
-#: ../win32/gui/WndMain.c:1316
-#: ../win32/gui/WndMain.c:1397
-#: ../gui/Cheat.c:319
-#: ../gui/Gtk2Gui.c:516
-#: ../gui/Gtk2Gui.c:658
+#: ../win32/gui/WndMain.c:1350 ../win32/gui/WndMain.c:1431 ../gui/Cheat.c:319
+#: ../gui/Gtk2Gui.c:512 ../gui/Gtk2Gui.c:651
msgid "All Files"
msgstr "Todos os arquivos"
-#: ../win32/gui/WndMain.c:1355
+#: ../win32/gui/WndMain.c:1389
msgid "Psx Exe Format"
msgstr "Formato executável do PSX"
-#: ../win32/gui/WndMain.c:1392
+#: ../win32/gui/WndMain.c:1426
msgid "Psx Isos (*.iso;*.mdf;*.img;*.bin)"
msgstr "Imagens de CD (*.iso;*.mdf;*.img;*.bin)"
-#: ../win32/gui/WndMain.c:1468
+#: ../win32/gui/WndMain.c:1502
msgid "&File"
msgstr "&Arquivo"
-#: ../win32/gui/WndMain.c:1469
+#: ../win32/gui/WndMain.c:1503
msgid "E&xit"
msgstr "&Sair"
-#: ../win32/gui/WndMain.c:1471
+#: ../win32/gui/WndMain.c:1505
msgid "Run &EXE..."
msgstr "Rodar &EXE..."
-#: ../win32/gui/WndMain.c:1472
+#: ../win32/gui/WndMain.c:1506
msgid "Run &BIOS"
msgstr "Iniciar pela &BIOS"
-#: ../win32/gui/WndMain.c:1473
+#: ../win32/gui/WndMain.c:1507
msgid "Run &ISO..."
msgstr "Rodar &imagem de CD..."
-#: ../win32/gui/WndMain.c:1474
+#: ../win32/gui/WndMain.c:1508
msgid "Run &CD"
msgstr "Rodar &CD"
-#: ../win32/gui/WndMain.c:1476
+#: ../win32/gui/WndMain.c:1510
msgid "&Emulator"
msgstr "&Emulador"
-#: ../win32/gui/WndMain.c:1477
+#: ../win32/gui/WndMain.c:1511
msgid "&States"
msgstr "&Estados"
-#: ../win32/gui/WndMain.c:1479
+#: ../win32/gui/WndMain.c:1513
msgid "S&witch ISO..."
msgstr "T&rocar de imagem de CD..."
-#: ../win32/gui/WndMain.c:1481
+#: ../win32/gui/WndMain.c:1515
msgid "Re&set"
msgstr "Re&iniciar"
-#: ../win32/gui/WndMain.c:1482
+#: ../win32/gui/WndMain.c:1516
msgid "&Run"
msgstr "&Executar"
-#: ../win32/gui/WndMain.c:1483
+#: ../win32/gui/WndMain.c:1517
msgid "&Save"
msgstr "&Salvar"
-#: ../win32/gui/WndMain.c:1484
+#: ../win32/gui/WndMain.c:1518
msgid "&Load"
msgstr "&Carregar"
-#: ../win32/gui/WndMain.c:1485
-#: ../win32/gui/WndMain.c:1491
+#: ../win32/gui/WndMain.c:1519 ../win32/gui/WndMain.c:1525
msgid "&Other..."
msgstr "&Outros..."
-#: ../win32/gui/WndMain.c:1486
-#: ../win32/gui/WndMain.c:1492
+#: ../win32/gui/WndMain.c:1520 ../win32/gui/WndMain.c:1526
msgid "Slot &5"
msgstr "Unidade &5"
-#: ../win32/gui/WndMain.c:1487
-#: ../win32/gui/WndMain.c:1493
+#: ../win32/gui/WndMain.c:1521 ../win32/gui/WndMain.c:1527
msgid "Slot &4"
msgstr "Unidade &4"
-#: ../win32/gui/WndMain.c:1488
-#: ../win32/gui/WndMain.c:1494
+#: ../win32/gui/WndMain.c:1522 ../win32/gui/WndMain.c:1528
msgid "Slot &3"
msgstr "Unidade &3"
-#: ../win32/gui/WndMain.c:1489
-#: ../win32/gui/WndMain.c:1495
+#: ../win32/gui/WndMain.c:1523 ../win32/gui/WndMain.c:1529
msgid "Slot &2"
msgstr "Unidade &2"
-#: ../win32/gui/WndMain.c:1490
-#: ../win32/gui/WndMain.c:1496
+#: ../win32/gui/WndMain.c:1524 ../win32/gui/WndMain.c:1530
msgid "Slot &1"
msgstr "Unidade &1"
-#: ../win32/gui/WndMain.c:1498
+#: ../win32/gui/WndMain.c:1532
msgid "&Configuration"
msgstr "&Configuração"
-#: ../win32/gui/WndMain.c:1499
+#: ../win32/gui/WndMain.c:1533
msgid "Cheat &Search..."
msgstr "Procurar por &trapaça..."
-#: ../win32/gui/WndMain.c:1500
+#: ../win32/gui/WndMain.c:1534
msgid "Ch&eat Code..."
msgstr "&Código de trapaça..."
-#: ../win32/gui/WndMain.c:1503
+#: ../win32/gui/WndMain.c:1537
msgid "&Language"
msgstr "&Linguagem"
-#: ../win32/gui/WndMain.c:1528
+#: ../win32/gui/WndMain.c:1562
msgid "&Memory cards..."
msgstr "&Cartões de memória..."
-#: ../win32/gui/WndMain.c:1529
+#: ../win32/gui/WndMain.c:1563
msgid "C&PU..."
msgstr "C&PU..."
-#: ../win32/gui/WndMain.c:1531
+#: ../win32/gui/WndMain.c:1565
msgid "&NetPlay..."
msgstr "&Jogo em rede..."
-#: ../win32/gui/WndMain.c:1533
+#: ../win32/gui/WndMain.c:1567
msgid "&Controllers..."
msgstr "&Controles..."
-#: ../win32/gui/WndMain.c:1534
+#: ../win32/gui/WndMain.c:1568
msgid "CD-&ROM..."
msgstr "CD&ROM..."
-#: ../win32/gui/WndMain.c:1535
+#: ../win32/gui/WndMain.c:1569
msgid "&Sound..."
msgstr "Á&udio..."
-#: ../win32/gui/WndMain.c:1536
+#: ../win32/gui/WndMain.c:1570
msgid "&Graphics..."
msgstr "&Gráficos..."
-#: ../win32/gui/WndMain.c:1538
+#: ../win32/gui/WndMain.c:1572
msgid "&Plugins && Bios..."
msgstr "&Extensões e BIOS..."
-#: ../win32/gui/WndMain.c:1540
+#: ../win32/gui/WndMain.c:1574
msgid "&Help"
msgstr "&Ajuda"
-#: ../win32/gui/WndMain.c:1541
+#: ../win32/gui/WndMain.c:1575
msgid "&About..."
msgstr "&Sobre..."
-#: ../win32/gui/WndMain.c:1723
+#: ../win32/gui/WndMain.c:1761
msgid "Pcsx Msg"
msgstr "Mensagens do PCSX"
-#: ../win32/gui/WndMain.c:1726
+#: ../win32/gui/WndMain.c:1764
msgid "Error Loading Symbol"
msgstr "Erro ao carregar símbolo"
-#: ../gui/Cheat.c:117
-#: ../gui/Cheat.c:201
+#: ../gui/Cheat.c:117 ../gui/Cheat.c:201
msgid "Cheat Description:"
msgstr "Descrição da trapaça:"
@@ -1060,8 +980,7 @@ msgstr "Descrição da trapaça:"
msgid "Open Cheat File"
msgstr "Abrir arquivo de trapaça"
-#: ../gui/Cheat.c:314
-#: ../gui/Cheat.c:354
+#: ../gui/Cheat.c:314 ../gui/Cheat.c:354
msgid "PCSX Cheat Code Files (*.cht)"
msgstr "Arquivos de trapaça do PCSX (*.cht)"
@@ -1073,10 +992,8 @@ msgstr "Salvar um arquivo de trapaça"
msgid "All Files (*.*)"
msgstr "Todos os arquivos (*.*)"
-#: ../gui/Cheat.c:392
-#: ../gui/Cheat.c:1121
-#: ../gui/Gtk2Gui.c:404
-#: ../gui/Gtk2Gui.c:1032
+#: ../gui/Cheat.c:392 ../gui/Cheat.c:1121 ../gui/Gtk2Gui.c:400
+#: ../gui/Gtk2Gui.c:1020
msgid "Error: Glade interface could not be loaded!"
msgstr "Erro: o ambiente Glade não pôde ser carregado!"
@@ -1104,138 +1021,129 @@ msgstr "Novo valor:"
msgid "Search Results"
msgstr "Resultados da busca"
-#: ../gui/Gtk2Gui.c:412
-#: ../data/pcsx.glade2:605
+#: ../gui/Gtk2Gui.c:408 ../data/pcsx.glade2:605
msgid "Configure PCSX"
msgstr "Configurar PCSX"
-#: ../gui/Gtk2Gui.c:498
+#: ../gui/Gtk2Gui.c:494
msgid "Select PSX EXE File"
msgstr "Selecione o arquivo executável de PSX"
-#: ../gui/Gtk2Gui.c:512
+#: ../gui/Gtk2Gui.c:508
msgid "PlayStation Executable Files"
msgstr "Arquivos executáveis do PlayStation"
-#: ../gui/Gtk2Gui.c:549
+#: ../gui/Gtk2Gui.c:544
msgid "Not a valid PSX file"
msgstr "Não é um arquivo válido de PSX"
-#: ../gui/Gtk2Gui.c:549
+#: ../gui/Gtk2Gui.c:544
msgid "The file does not appear to be a valid Playstation executable"
msgstr "Esse arquivo não parece ser um executável válido de PlayStation!"
-#: ../gui/Gtk2Gui.c:580
-#: ../gui/Gtk2Gui.c:707
+#: ../gui/Gtk2Gui.c:575 ../gui/Gtk2Gui.c:700
msgid "CD ROM failed"
msgstr "CDROM falhou"
-#: ../gui/Gtk2Gui.c:588
+#: ../gui/Gtk2Gui.c:583
msgid "The CD ROM could not be loaded"
msgstr "O CDROM não pôde ser carregado!"
-#: ../gui/Gtk2Gui.c:603
+#: ../gui/Gtk2Gui.c:597
msgid "Could not run BIOS"
msgstr "Não conseguiu iniciar a BIOS"
-#: ../gui/Gtk2Gui.c:603
+#: ../gui/Gtk2Gui.c:597
msgid "Running BIOS is not supported with Internal HLE BIOS."
msgstr "Iniciar pela BIOS não é suportado com a BIOS HLE interno."
-#: ../gui/Gtk2Gui.c:633
+#: ../gui/Gtk2Gui.c:626
msgid "Open PSX Disc Image File"
msgstr "Abrir arquivo de imagem de CD de PSX"
-#: ../gui/Gtk2Gui.c:653
+#: ../gui/Gtk2Gui.c:646
msgid "PSX Image Files (*.bin, *.img, *.mdf, *.iso)"
msgstr "Arquivo de imagens de CD de PSX (*.bin, *.img, *.mdf, *.iso)"
-#: ../gui/Gtk2Gui.c:891
+#: ../gui/Gtk2Gui.c:880
#, c-format
msgid "Loaded state %s."
msgstr "Arquivo de estado \"%s\" carregado."
-#: ../gui/Gtk2Gui.c:896
+#: ../gui/Gtk2Gui.c:884
#, c-format
msgid "Error loading state %s!"
msgstr "Erro ao carregar o arquivo de estado \"%s\"!"
-#: ../gui/Gtk2Gui.c:907
+#: ../gui/Gtk2Gui.c:895
#, c-format
msgid "Saved state %s."
msgstr "Arquivo de estado \"%s\" salvo."
-#: ../gui/Gtk2Gui.c:909
+#: ../gui/Gtk2Gui.c:897
#, c-format
msgid "Error saving state %s!"
msgstr "Erro ao salvar o arquivo de estado \"%s\"!"
-#: ../gui/Gtk2Gui.c:943
-#: ../gui/Gtk2Gui.c:970
+#: ../gui/Gtk2Gui.c:931 ../gui/Gtk2Gui.c:958
msgid "Select State File"
msgstr "Selecione o arquivo de estado"
-#: ../gui/Gtk2Gui.c:1074
+#: ../gui/Gtk2Gui.c:1062
msgid "Icon"
msgstr "Ícone"
-#: ../gui/Gtk2Gui.c:1092
+#: ../gui/Gtk2Gui.c:1080
msgid "ID"
msgstr "ID"
-#: ../gui/Gtk2Gui.c:1098
+#: ../gui/Gtk2Gui.c:1086
msgid "Name"
msgstr "Nome"
-#: ../gui/Gtk2Gui.c:1258
+#: ../gui/Gtk2Gui.c:1246
msgid "Format this Memory Card?"
msgstr "Formatar esse cartão de memória?"
-#: ../gui/Gtk2Gui.c:1260
-msgid "If you format the memory card, the card will be empty, and any existing data overwritten."
+#: ../gui/Gtk2Gui.c:1248
+msgid ""
+"If you format the memory card, the card will be empty, and any existing data "
+"overwritten."
msgstr "Ao formatar o cartão de memória, todo o conteúdo será zerado."
-#: ../gui/Gtk2Gui.c:1263
+#: ../gui/Gtk2Gui.c:1251
msgid "Format card"
msgstr "Formatar cartão"
-#: ../gui/Gtk2Gui.c:1378
+#: ../gui/Gtk2Gui.c:1366
msgid "No space available in the target memory card!"
msgstr "Não há espaço suficiente no cartão de memória selecionado!"
-#: ../gui/Gtk2Gui.c:1520
-#: ../gui/Gtk2Gui.c:1541
-#: ../gui/Gtk2Gui.c:1562
-#: ../gui/Gtk2Gui.c:1583
-#: ../gui/Gtk2Gui.c:1889
+#: ../gui/Gtk2Gui.c:1508 ../gui/Gtk2Gui.c:1529 ../gui/Gtk2Gui.c:1550
+#: ../gui/Gtk2Gui.c:1571 ../gui/Gtk2Gui.c:1880
msgid "No configuration required"
msgstr "Não necessita de configuração"
-#: ../gui/Gtk2Gui.c:1520
-#: ../gui/Gtk2Gui.c:1541
-#: ../gui/Gtk2Gui.c:1562
-#: ../gui/Gtk2Gui.c:1583
-#: ../gui/Gtk2Gui.c:1889
+#: ../gui/Gtk2Gui.c:1508 ../gui/Gtk2Gui.c:1529 ../gui/Gtk2Gui.c:1550
+#: ../gui/Gtk2Gui.c:1571 ../gui/Gtk2Gui.c:1880
msgid "This plugin doesn't need to be configured."
msgstr "Esta extensão não pode ser configurada."
-#: ../gui/Gtk2Gui.c:1620
+#: ../gui/Gtk2Gui.c:1608
msgid "Memory Card Manager"
msgstr "Gerenciador de cartões de memória"
-#: ../gui/Gtk2Gui.c:2143
+#: ../gui/Gtk2Gui.c:2134
#, c-format
msgid "Could not open BIOS directory: '%s'\n"
msgstr "Não conseguiu abrir o diretório \"%s\", da BIOS!\n"
-#: ../gui/Gtk2Gui.c:2173
-#: ../gui/Gtk2Gui.c:2266
-#: ../gui/LnxMain.c:170
+#: ../gui/Gtk2Gui.c:2164 ../gui/Gtk2Gui.c:2257 ../gui/LnxMain.c:170
#, c-format
msgid "Could not open directory: '%s'\n"
msgstr "Não conseguiu abrir o diretório \"%s\"!\n"
-#: ../gui/Gtk2Gui.c:2327
+#: ../gui/Gtk2Gui.c:2318
msgid "Notice"
msgstr "Aviso"
@@ -1262,7 +1170,8 @@ msgstr ""
"\t-runcd\t\tExecuta direto pelo CD-ROM\n"
"\t-cdfile ARQUIVO\tRoda um arquivo de imagem de CD\n"
"\t-nogui\t\tNão abre o GUI da GTK\n"
-"\t-cfg ARQUIVO\tCarrega uma configuração alternativa (padrão: ~/.pcsx/pcsx.cfg)\n"
+"\t-cfg ARQUIVO\tCarrega uma configuração alternativa (padrão: ~/.pcsx/pcsx."
+"cfg)\n"
"\t-psxout\t\tAtiva a saída do PSX no console\n"
"\t-load NÚMERO_ESTADO\tCarrega um estado entre 1-5\n"
"\t-h -help\tMostra essa mensagem\n"
@@ -1270,8 +1179,11 @@ msgstr ""
#: ../gui/LnxMain.c:350
#, c-format
-msgid "PCSX cannot be configured without using the GUI -- you should restart without -nogui.\n"
-msgstr "PCSX não pode ser configurado sem o GUI -- reinicie sem a opção -nogui.\n"
+msgid ""
+"PCSX cannot be configured without using the GUI -- you should restart "
+"without -nogui.\n"
+msgstr ""
+"PCSX não pode ser configurado sem o GUI -- reinicie sem a opção -nogui.\n"
#: ../gui/LnxMain.c:405
msgid "Failed loading plugins!"
@@ -1287,8 +1199,7 @@ msgstr "Não pôde carregar o CD-ROM!\n"
msgid "PSX emulator couldn't be initialized.\n"
msgstr "O emulador não pôde ser inicializado.\n"
-#: ../gui/Plugin.c:204
-#: ../data/pcsx.glade2:1319
+#: ../gui/Plugin.c:204 ../data/pcsx.glade2:1319
#, c-format
msgid "SIO IRQ Always Enabled"
msgstr "IRQ SIO sempre ativada"
@@ -1358,7 +1269,7 @@ msgstr "Erro ao fechar a extensão de Controle 2!"
msgid "Error closing GPU plugin!"
msgstr "Erro ao fechar a extensão de GPU!"
-#: ../libpcsxcore/cdriso.c:631
+#: ../libpcsxcore/cdriso.c:639
#, c-format
msgid "Loaded CD Image: %s"
msgstr "Carregou a imagem de CD \"%s\"."
@@ -1373,11 +1284,26 @@ msgstr "Trapaças de \"%s\" carregadas.\n"
msgid "Cheats saved to: %s\n"
msgstr "Trapaças salvas para \"%s\".\n"
-#: ../libpcsxcore/cheat.c:323
-#: ../libpcsxcore/cheat.c:444
+#: ../libpcsxcore/cheat.c:323 ../libpcsxcore/cheat.c:444
msgid "(Untitled)"
msgstr "(Sem título)"
+#: ../libpcsxcore/debug.c:317
+msgid "Error allocating memory"
+msgstr "Erro ao alocar memória"
+
+#: ../libpcsxcore/debug.c:322
+msgid "Unable to start debug server.\n"
+msgstr ""
+
+#: ../libpcsxcore/debug.c:326
+msgid "Debugger started.\n"
+msgstr ""
+
+#: ../libpcsxcore/debug.c:333
+msgid "Debugger stopped.\n"
+msgstr ""
+
#: ../libpcsxcore/misc.c:380
#, c-format
msgid "Error opening file: %s.\n"
@@ -1523,19 +1449,19 @@ msgstr "Pete Bernert e a equipe do P.E.Op.S."
msgid "Configure X11 Video"
msgstr "Configurar vídeo do X11"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:39
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:44
msgid "Initial Window Size:"
msgstr "Tamanho inicial da janela:"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:50
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:55
msgid "Stretching:"
msgstr "Escalonamento:"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:63
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:68
msgid "Dithering:"
msgstr "Colorização:"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:76
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:81
msgid ""
"320x240\n"
"640x480\n"
@@ -1553,7 +1479,7 @@ msgstr ""
"1280x1024\n"
"1600x1200"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:95
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:100
msgid ""
"0: None\n"
"1: 2xSai\n"
@@ -1573,7 +1499,7 @@ msgstr ""
"6: HQ2X\n"
"7: HQ3X"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:117
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:122
msgid ""
"0: Off (fastest)\n"
"1: Game dependant\n"
@@ -1583,185 +1509,150 @@ msgstr ""
"1: Depende do Jogo\n"
"2: Sempre"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:139
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:145
msgid "Maintain 4:3 Aspect Ratio"
msgstr "Manter proporção 4:3"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:153
-msgid "Toggle windowed/fullscreen mode."
-msgstr "Alternar entre tela cheia e janela."
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:154
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:160
#: ../plugins/peopsxgl/gpucfg/interface.c:322
msgid "Fullscreen"
msgstr "Tela cheia"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:177
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:164
+msgid "Toggle windowed/fullscreen mode."
+msgstr "Alternar entre tela cheia e janela."
+
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:186
msgid "<b>Screen</b>"
msgstr "<b>Tela</b>"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:203
-msgid "Toggle whether the FPS will be shown."
-msgstr "Ligar ou desligar a exibição da taxa de FPS."
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:204
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:215
msgid "Show FPS"
msgstr "Mostrar taxa de FPS"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:218
-msgid "Enable this if games display too quickly."
-msgstr "Ligue isso se os jogos ficarem rápidos demais."
-
#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:219
+msgid "Toggle whether the FPS will be shown."
+msgstr "Ligar ou desligar a exibição da taxa de FPS."
+
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:231
msgid "Autodetect FPS limit"
msgstr "Detectar automaticamente limite de FPS"
#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:235
-msgid "Skip frames when rendering."
-msgstr "Pula quadros ao exibir."
+msgid "Enable this if games display too quickly."
+msgstr "Ligue isso se os jogos ficarem rápidos demais."
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:236
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:248
msgid "Enable frame skipping"
msgstr "Ligar pulo de quadros"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:257
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:252
+msgid "Skip frames when rendering."
+msgstr "Pula quadros ao exibir."
+
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:269
msgid "Set FPS"
msgstr "Limite de FPS"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:272
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:286
msgid "200.0"
msgstr "200.0"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:295
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:309
msgid "<b>Framerate</b>"
msgstr "<b>Taxa de FPS</b>"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:324
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:338
#: ../plugins/peopsxgl/gpucfg/interface.c:568
msgid "Use game fixes"
msgstr "Usar consertos específicos"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:348
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:365
msgid "better g-colors, worse textures"
msgstr "Transparências melhores, texturas piores."
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:363
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:380
msgid "Needed by Dark Forces"
msgstr "Necessário para Dark Forces."
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:378
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:393
msgid "Draw quads with triangles"
msgstr "Desenhar quadrados com triângulos"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:394
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:409
msgid "Repeated flat tex triangles"
msgstr "Triângulos de textura plana repetidos"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:410
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:425
msgid "Disable CPU Saving"
msgstr "Desativar salvamento da CPU"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:426
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:441
msgid "Odd/even bit hack"
msgstr "Hack do bit ímpar/par"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:440
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:457
msgid "For precise framerate"
msgstr "Para uma taxa de FPS precisa."
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:455
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:472
msgid "Better FPS limit in some"
msgstr "Melhor limitação de FPS em alguns jogos."
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:470
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:485
msgid "PC FPS calculation"
msgstr "Cálculo de FPS feito pelo PC"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:486
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:503
msgid "Pandemonium 2"
msgstr "Para Pandemonium 2."
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:501
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:516
msgid "Lazy screen update"
msgstr "Atualização tardia da tela"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:517
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:534
msgid "Skip every second frame"
msgstr "Pula cada segundo quadro de uma taxa."
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:532
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:547
#: ../plugins/peopsxgl/gpucfg/interface.c:640
msgid "Old frame skipping"
msgstr "Pulo de quadros antigo"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:548
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:563
msgid "Expand screen width"
msgstr "Expandir largura da tela"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:564
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:579
msgid "Ignore brightness color"
msgstr "Ignorar brilho das cores"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:580
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:595
msgid "Disable coordinate check"
msgstr "Desativar checagem de coordenadas"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:596
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:613
msgid "Chrono Cross"
msgstr "Para Chrono Cross."
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:609
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:626
msgid "Capcom fighting games"
msgstr "Para jogos de luta da Capcom."
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:624
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:641
msgid "Black screens in Lunar"
msgstr "Telas pretas de Lunar."
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:639
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:656
msgid "Compatibility mode"
msgstr "Modo de compatibilidade."
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:664
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:428
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:681
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:267
msgid "<b>Compatibility</b>"
msgstr "<b>Compatibilidade</b>"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:701
-msgid "About X11 Video Plugin"
-msgstr "Sobre a extensão de vídeo do X11"
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:714
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:516
-msgid "Coded by: Pete Bernert and the P.E.Op.S. team"
-msgstr "Programada por Pete Bernert e a equipe do P.E.Op.S."
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:725
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:541
-msgid "Homepage: http://home.t-online.de/home/PeteBernert/"
-msgstr "Página: http://home.t-online.de/home/PeteBernert/"
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:737
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:566
-msgid "EMail: BlackDove@addcom.de"
-msgstr "EMail: BlackDove@addcom.de"
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:750
-msgid "Version: 1.15"
-msgstr "Versão: 1.15"
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:762
-msgid "Release date: 2003"
-msgstr "Data de Lançamento: 2003"
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:774
-msgid "<b>PCSX-df Video Plugin Adaption</b>"
-msgstr "<b>Adaptação da extensão de vídeo do PCSX-df</b>"
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:787
-msgid "XVideo Support: Stephen Chao"
-msgstr "Suporte ao XVideo: Stephen Chao"
-
#: ../data/pcsx.glade2:9
msgid "PCSX"
msgstr "PCSX"
@@ -1810,33 +1701,27 @@ msgstr "_Trocar de imagem de CD..."
msgid "_Save State"
msgstr "_Salvar estado"
-#: ../data/pcsx.glade2:200
-#: ../data/pcsx.glade2:281
+#: ../data/pcsx.glade2:200 ../data/pcsx.glade2:281
msgid "Slot _1"
msgstr "Unidade _1"
-#: ../data/pcsx.glade2:209
-#: ../data/pcsx.glade2:290
+#: ../data/pcsx.glade2:209 ../data/pcsx.glade2:290
msgid "Slot _2"
msgstr "Unidade _2"
-#: ../data/pcsx.glade2:218
-#: ../data/pcsx.glade2:299
+#: ../data/pcsx.glade2:218 ../data/pcsx.glade2:299
msgid "Slot _3"
msgstr "Unidade _3"
-#: ../data/pcsx.glade2:227
-#: ../data/pcsx.glade2:308
+#: ../data/pcsx.glade2:227 ../data/pcsx.glade2:308
msgid "Slot _4"
msgstr "Unidade _4"
-#: ../data/pcsx.glade2:236
-#: ../data/pcsx.glade2:317
+#: ../data/pcsx.glade2:236 ../data/pcsx.glade2:317
msgid "Slot _5"
msgstr "Unidade _5"
-#: ../data/pcsx.glade2:244
-#: ../data/pcsx.glade2:325
+#: ../data/pcsx.glade2:244 ../data/pcsx.glade2:325
msgid "_Other..."
msgstr "_Outros..."
@@ -1940,10 +1825,6 @@ msgstr "<b>BIOS</b>"
msgid "Configure CPU"
msgstr "Configurar CPU"
-#: ../data/pcsx.glade2:1233
-msgid "Enable Debugger"
-msgstr "Ligar debugger"
-
#: ../data/pcsx.glade2:1251
msgid "SPU IRQ Always Enabled"
msgstr "IRQ da SPU sempre ativada"
@@ -1992,13 +1873,11 @@ msgstr "<b>Jogo em rede</b>"
msgid "Configure Memory Cards"
msgstr "Configurar cartões de memória"
-#: ../data/pcsx.glade2:1722
-#: ../data/pcsx.glade2:2118
+#: ../data/pcsx.glade2:1722 ../data/pcsx.glade2:2118
msgid "Format"
msgstr "Formatar"
-#: ../data/pcsx.glade2:1772
-#: ../data/pcsx.glade2:2168
+#: ../data/pcsx.glade2:1772 ../data/pcsx.glade2:2168
msgid "Reload"
msgstr "Recarregar"
@@ -2006,14 +1885,11 @@ msgstr "Recarregar"
msgid "<b>Memory Card 1</b>"
msgstr "<b>Cartão de memória 1</b>"
-#: ../data/pcsx.glade2:1876
-#: ../data/pcsx.glade2:1926
-#: ../data/pcsx.glade2:2801
+#: ../data/pcsx.glade2:1876 ../data/pcsx.glade2:1926 ../data/pcsx.glade2:2801
msgid "Copy"
msgstr "Copiar"
-#: ../data/pcsx.glade2:1976
-#: ../data/pcsx.glade2:2026
+#: ../data/pcsx.glade2:1976 ../data/pcsx.glade2:2026
msgid "Un/Delete"
msgstr "Apagar/Desfazer"
@@ -2076,9 +1952,9 @@ msgstr ""
"the Free Software Foundation, Inc."
#: ../data/pcsx.glade2:2310
-#: ../plugins/dfinput/dfinput.glade2:212
msgid "translator-credits"
-msgstr "Tradução para português brasileiro por Tibério Vítor (tvtoon@gmail.com)"
+msgstr ""
+"Tradução para português brasileiro por Tibério Vítor (tvtoon@gmail.com)"
#: ../data/pcsx.glade2:2371
msgid "<b>Cheat Codes</b>"
@@ -2160,23 +2036,23 @@ msgstr ""
"Extensão OSS P.E.Op.S. V1.7\n"
"Programada por Pete Bernert e a equipe do P.E.Op.S.\n"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:9
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:8
msgid "Configure Sound"
msgstr "Configurar áudio"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:62
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:41
msgid "Volume:"
msgstr "Volume:"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:90
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:53
msgid "Interpolation:"
msgstr "Interpolação:"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:118
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:67
msgid "Reverb:"
msgstr "Reversão:"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:146
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:80
msgid ""
"Low\n"
"Medium\n"
@@ -2188,7 +2064,7 @@ msgstr ""
"Alto\n"
"Máximo"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:165
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:94
msgid ""
"Off\n"
"Simple\n"
@@ -2198,7 +2074,7 @@ msgstr ""
"Simples\n"
"PlayStation"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:184
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:110
msgid ""
"None\n"
"Simple\n"
@@ -2210,69 +2086,45 @@ msgstr ""
"Gaussiana\n"
"Cúbica"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:208
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:131
msgid "<b>General</b>"
msgstr "<b>Geral</b>"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:264
-msgid "Enable or disable XA music."
-msgstr "Liga ou desliga música XA."
-
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:266
-msgid "Enable XA"
-msgstr "Ligar XA"
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:162
+msgid "Adjust XA speed"
+msgstr "Ajustar velocidade da XA"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:284
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:166
msgid "Choose this if XA music is played too quickly."
msgstr "Selecione isso se a música XA estiver tocando rápido demais."
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:286
-msgid "Adjust XA speed"
-msgstr "Ajustar velocidade da XA"
-
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:308
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:183
msgid "<b>XA Music</b>"
msgstr "<b>Música XA</b>"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:364
-msgid "Use the asynchronous SPU interface."
-msgstr "Usar o ambiente assíncrono da SPU."
-
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:366
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:214
msgid "High compatibility mode"
msgstr "Modo de alta compatibilidade"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:384
-msgid "Wait for CPU; only useful for some games."
-msgstr "Esperar pela CPU; útil apenas em alguns jogos."
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:218
+msgid "Use the asynchronous SPU interface."
+msgstr "Usar o ambiente assíncrono da SPU."
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:386
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:230
msgid "SPU IRQ Wait"
msgstr "Esperar pela IRQ da SPU"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:404
-msgid "Play only one channel for a performance boost."
-msgstr "Tocar apenas um canal para melhorar o desempenho."
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:234
+msgid "Wait for CPU; only useful for some games."
+msgstr "Esperar pela CPU; útil apenas em alguns jogos."
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:406
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:246
msgid "Single channel sound"
msgstr "Som em canal único"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:486
-msgid "About Sound Plugin"
-msgstr "Sobre a extensão de áudio"
-
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:592
-msgid "Version: 1.6"
-msgstr "Versão: 1.6"
-
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:617
-msgid "Release date: 05.04.2003"
-msgstr "Data de Lançamento: 05.04.2003"
-
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:642
-msgid "<b>PCSX-df Sound Plugin Adaption</b>"
-msgstr "<b>Adaptação da extensão de áudio do PCSX-df</b>"
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:250
+msgid "Play only one channel for a performance boost."
+msgstr "Tocar apenas um canal para melhorar o desempenho."
#: ../plugins/dfcdrom/cdr.c:58
msgid "CD-ROM Drive Reader"
@@ -2288,7 +2140,8 @@ msgstr "Configuração do CDROM"
#: ../plugins/dfcdrom/interface.c:99
msgid "Choose your CD-ROM device or type its path if it's not listed"
-msgstr "Escolha sua unidade de CDROM ou digite o dispositivo caso não esteja listado."
+msgstr ""
+"Escolha sua unidade de CDROM ou digite o dispositivo caso não esteja listado."
#: ../plugins/dfcdrom/interface.c:102
msgid "Select CD-ROM device"
@@ -2676,74 +2529,343 @@ msgstr "Página: http://www.pbernert.com"
msgid "Version: 1.78"
msgstr "Versão: 1.78"
-#: ../plugins/dfinput/pad.c:59
-msgid "Gamepad/Keyboard Input"
-msgstr "Entrada do gamepad ou teclado"
+#: ../plugins/dfinput/cfg-gtk2.c:48
+msgid "D-Pad Up"
+msgstr ""
-#: ../plugins/dfinput/pad.c:61
-msgid "Keyboard Input"
-msgstr "Entrada do teclado"
+#: ../plugins/dfinput/cfg-gtk2.c:49
+msgid "D-Pad Down"
+msgstr ""
-#: ../plugins/dfinput/dfinput.glade2:7
-msgid "Configure Gamepad/Keyboard"
-msgstr "Configurar gamepad ou teclado"
+#: ../plugins/dfinput/cfg-gtk2.c:50
+msgid "D-Pad Left"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:51
+msgid "D-Pad Right"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:52
+#, fuzzy
+msgid "Cross"
+msgstr "CDROM"
+
+#: ../plugins/dfinput/cfg-gtk2.c:53
+msgid "Circle"
+msgstr ""
-#: ../plugins/dfinput/dfinput.glade2:25
-msgid "Pad number:"
-msgstr "Número do controle:"
+#: ../plugins/dfinput/cfg-gtk2.c:54
+msgid "Square"
+msgstr ""
-#: ../plugins/dfinput/dfinput.glade2:36
-msgid "1"
+#: ../plugins/dfinput/cfg-gtk2.c:55
+#, fuzzy
+msgid "Triangle"
+msgstr "Intervalo"
+
+#: ../plugins/dfinput/cfg-gtk2.c:56
+#, fuzzy
+msgid "L1"
+msgstr "1"
+
+#: ../plugins/dfinput/cfg-gtk2.c:57
+#, fuzzy
+msgid "R1"
msgstr "1"
-#: ../plugins/dfinput/dfinput.glade2:51
-msgid "2"
+#: ../plugins/dfinput/cfg-gtk2.c:58
+#, fuzzy
+msgid "L2"
msgstr "2"
-#: ../plugins/dfinput/dfinput.glade2:73
-msgid "Device file:"
+#: ../plugins/dfinput/cfg-gtk2.c:59
+#, fuzzy
+msgid "R2"
+msgstr "2"
+
+#: ../plugins/dfinput/cfg-gtk2.c:60
+msgid "L3"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:61
+msgid "R3"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:62
+#, fuzzy
+msgid "Select"
+msgstr "Selecionar cartão"
+
+#: ../plugins/dfinput/cfg-gtk2.c:63
+#, fuzzy
+msgid "Start"
+msgstr "Estado"
+
+#: ../plugins/dfinput/cfg-gtk2.c:67
+msgid "L-Stick X"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:68
+msgid "L-Stick Y"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:69
+msgid "R-Stick X"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:70
+msgid "R-Stick Y"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:98
+msgid "Centered"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:98
+msgid "Up"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:98
+#, fuzzy
+msgid "Right"
+msgstr "Altura:"
+
+#: ../plugins/dfinput/cfg-gtk2.c:98
+msgid "Rightup"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:99
+msgid "Down"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:99
+msgid "Rightdown"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:99
+msgid "Left"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:99
+msgid "Leftup"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:100
+msgid "Leftdown"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:104
+#, c-format
+msgid "Joystick: Button %d"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:108
+#, c-format
+msgid "Joystick: Axis %d%c"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:113
+#, c-format
+msgid "Joystick: Hat %d %s"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:128
+#, fuzzy
+msgid "Keyboard:"
+msgstr "Entrada do teclado"
+
+#: ../plugins/dfinput/cfg-gtk2.c:132 ../plugins/dfinput/cfg-gtk2.c:140
+#, c-format
+msgid "(Not Set)"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:142
+#, c-format
+msgid "Joystick: Axis %d%s"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:142
+msgid " (Reversed)"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:378
+#, fuzzy
+msgid "Device not set"
msgstr "Arquivo de dispositivo:"
-#: ../plugins/dfinput/dfinput.glade2:104
-msgid "Multi-threaded"
-msgstr "Multiprocesso"
+#: ../plugins/dfinput/cfg-gtk2.c:378
+msgid "Please select a valid Joystick Device"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:384
+msgid "Device open error"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:384
+msgid "Unable to open Joystick Device"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:475
+#, fuzzy
+msgid "None"
+msgstr "0: Nenhum"
+
+#: ../plugins/dfinput/cfg-gtk2.c:517
+#, fuzzy
+msgid "Gamepad/Keyboard Input Configuration"
+msgstr "Entrada do gamepad ou teclado"
+
+#: ../plugins/dfinput/cfg-gtk2.c:523 ../plugins/dfinput/cfg-gtk2.c:543
+msgid "Key"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:529 ../plugins/dfinput/cfg-gtk2.c:549
+msgid "Button"
+msgstr ""
+
+#: ../plugins/dfinput/pad.c:23
+#, fuzzy
+msgid "Gamepad/Keyboard Input (ePSXe)"
+msgstr "Entrada do gamepad ou teclado"
+
+#: ../plugins/dfinput/pad.c:25
+msgid "Gamepad/Keyboard Input"
+msgstr "Entrada do gamepad ou teclado"
-#: ../plugins/dfinput/dfinput.glade2:118
-msgid "Analog"
-msgstr "Analógico"
+#: ../plugins/dfinput/dfinput.glade2:34 ../plugins/dfinput/dfinput.glade2:231
+#, fuzzy
+msgid "Device:"
+msgstr "Arquivo de dispositivo:"
+
+#: ../plugins/dfinput/dfinput.glade2:65 ../plugins/dfinput/dfinput.glade2:262
+#, fuzzy
+msgid "Type:"
+msgstr "Tipo de dados:"
+
+#: ../plugins/dfinput/dfinput.glade2:77 ../plugins/dfinput/dfinput.glade2:274
+msgid ""
+"Digital Pad\n"
+"Analog Pad"
+msgstr ""
+
+#: ../plugins/dfinput/dfinput.glade2:148 ../plugins/dfinput/dfinput.glade2:345
+#, fuzzy
+msgid "Change"
+msgstr "Sem mudanças"
-#: ../plugins/dfinput/dfinput.glade2:155
-msgid "<b>Button Configuration</b>"
-msgstr "<b>Configuração dos botões</b>"
+#: ../plugins/dfinput/dfinput.glade2:184 ../plugins/dfinput/dfinput.glade2:381
+#, fuzzy
+msgid "Reset"
+msgstr "Re&iniciar"
#: ../plugins/dfinput/dfinput.glade2:209
-msgid "Based on PadJoy by Erich Kitzmüller (ammoq@ammoq.com)"
-msgstr "Baseado no PadJoy por Erich Kitzmüller (ammoq@ammoq.com)"
+#, fuzzy
+msgid "Controller 1"
+msgstr "Controle 2:"
+
+#: ../plugins/dfinput/dfinput.glade2:411
+#, fuzzy
+msgid "Controller 2"
+msgstr "Controle 2:"
+
+#: ../plugins/dfinput/dfinput.glade2:426
+#, fuzzy
+msgid "Multi-Threaded (Recommended)"
+msgstr "Multiprocesso"
+
+#~ msgid "Configure Gamepad/Keyboard"
+#~ msgstr "Configurar gamepad ou teclado"
+
+#~ msgid "Pad number:"
+#~ msgstr "Número do controle:"
+
+#~ msgid "Analog"
+#~ msgstr "Analógico"
+
+#~ msgid "<b>Button Configuration</b>"
+#~ msgstr "<b>Configuração dos botões</b>"
+
+#~ msgid "Based on PadJoy by Erich Kitzmüller (ammoq@ammoq.com)"
+#~ msgstr "Baseado no PadJoy por Erich Kitzmüller (ammoq@ammoq.com)"
+
+#~ msgid "About X11 Video Plugin"
+#~ msgstr "Sobre a extensão de vídeo do X11"
+
+#~ msgid "Coded by: Pete Bernert and the P.E.Op.S. team"
+#~ msgstr "Programada por Pete Bernert e a equipe do P.E.Op.S."
+
+#~ msgid "Homepage: http://home.t-online.de/home/PeteBernert/"
+#~ msgstr "Página: http://home.t-online.de/home/PeteBernert/"
+
+#~ msgid "EMail: BlackDove@addcom.de"
+#~ msgstr "EMail: BlackDove@addcom.de"
+
+#~ msgid "Version: 1.15"
+#~ msgstr "Versão: 1.15"
+
+#~ msgid "Release date: 2003"
+#~ msgstr "Data de Lançamento: 2003"
+
+#~ msgid "<b>PCSX-df Video Plugin Adaption</b>"
+#~ msgstr "<b>Adaptação da extensão de vídeo do PCSX-df</b>"
+
+#~ msgid "XVideo Support: Stephen Chao"
+#~ msgstr "Suporte ao XVideo: Stephen Chao"
+
+#~ msgid "Enable or disable XA music."
+#~ msgstr "Liga ou desliga música XA."
+
+#~ msgid "Enable XA"
+#~ msgstr "Ligar XA"
+
+#~ msgid "About Sound Plugin"
+#~ msgstr "Sobre a extensão de áudio"
+
+#~ msgid "Version: 1.6"
+#~ msgstr "Versão: 1.6"
+
+#~ msgid "Release date: 05.04.2003"
+#~ msgstr "Data de Lançamento: 05.04.2003"
+
+#~ msgid "<b>PCSX-df Sound Plugin Adaption</b>"
+#~ msgstr "<b>Adaptação da extensão de áudio do PCSX-df</b>"
#~ msgid "Controller _1..."
#~ msgstr "Controle _1..."
+
#~ msgid "Controller _2..."
#~ msgstr "Controle _2..."
+
#~ msgid "_Graphics"
#~ msgstr "_Gráficos"
+
#~ msgid "_Sound"
#~ msgstr "Á_udio"
+
#~ msgid "CD-_ROM"
#~ msgstr "CD-_ROM"
+
#~ msgid " Yes"
#~ msgstr "Sim"
+
#~ msgid "Disable"
#~ msgstr "Desativar"
+
#~ msgid "Pcsx needs to be configured"
#~ msgstr "O PCSX precisa ser configurado."
+
#~ msgid "Pcsx now will quit, restart it"
#~ msgstr "PCSX irá agora se desligar, reinicie ele."
+
#~ msgid "Could not open %s.\n"
#~ msgstr "Não conseguiu abrir %s.\n"
+
#~ msgid "CPE files not supported."
#~ msgstr "Arquivos CPE não são suportados!"
+
#~ msgid "_Switch ISO"
#~ msgstr "_Trocar de Imagem de CD"
+
#~ msgid ""
#~ "Unsigned 8-bit\n"
#~ "Unsigned 16-bit\n"
@@ -2758,26 +2880,34 @@ msgstr "Baseado no PadJoy por Erich Kitzmüller (ammoq@ammoq.com)"
#~ "8-bit Com sinal\n"
#~ "16-bit Com sinal\n"
#~ "32-bit Com sinal"
+
#~ msgid "Big-Endian"
#~ msgstr "Alta Finalização"
+
#~ msgid "Paste this selection?"
#~ msgstr "Copiar este selecionado?"
+
#~ msgid "This plugin reports that it won't work correctly."
#~ msgstr "Esta extensão informou que não deve funcionar corretamente."
+
#~ msgid "Saved state %d!"
#~ msgstr "Estado %d salvo!"
+
#~ msgid "Loaded state %d!"
#~ msgstr "Estado %d carregado!"
+
#~ msgid "Run CD Through BIOS"
#~ msgstr "Executar o CD pelo BIOS"
+
#~ msgid "PCSX 1.7df"
#~ msgstr "PCSX 1.10df"
+
#~ msgid ""
#~ "PCSX is licensed under the GNU GPL; see the included COPYING file for "
#~ "more detail."
#~ msgstr ""
#~ "PCSX é licenciado pela GPL da GNU; veja o arquivo COPYING para maiores "
#~ "detalhes."
+
#~ msgid "PCSX-df Development"
#~ msgstr "Desenvolvimento do PCSX-df"
-
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
index 05fea5cd..6b05b4ff 100644
--- a/po/zh_CN.gmo
+++ b/po/zh_CN.gmo
Binary files differ
diff --git a/po/zh_CN.po b/po/zh_CN.po
index a821728e..5f2f673b 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: pcsxr 1.0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-10-01 18:26+0800\n"
-"PO-Revision-Date: 2009-10-01 18:27+0700\n"
+"POT-Creation-Date: 2009-10-25 21:49+0800\n"
+"PO-Revision-Date: 2009-10-25 21:55+0700\n"
"Last-Translator: Wei Mingzhi <whistler@openoffice.org>\n"
"Language-Team: Simplified Chinese <whistler@openoffice.org>\n"
"MIME-Version: 1.0\n"
@@ -62,8 +62,8 @@ msgstr "关于 PCSX"
#: ../win32/gui/AboutDlg.c:52
#: ../win32/gui/CheatDlg.c:70
#: ../win32/gui/CheatDlg.c:120
-#: ../win32/gui/ConfigurePlugins.c:464
-#: ../win32/gui/ConfigurePlugins.c:595
+#: ../win32/gui/ConfigurePlugins.c:470
+#: ../win32/gui/ConfigurePlugins.c:601
#: ../win32/gui/WndMain.c:963
#: ../win32/gui/WndMain.c:1199
#: ../plugins/peopsxgl/gpucfg/interface.c:130
@@ -107,8 +107,8 @@ msgstr "作弊码:"
#: ../win32/gui/CheatDlg.c:71
#: ../win32/gui/CheatDlg.c:121
-#: ../win32/gui/ConfigurePlugins.c:465
-#: ../win32/gui/ConfigurePlugins.c:596
+#: ../win32/gui/ConfigurePlugins.c:471
+#: ../win32/gui/ConfigurePlugins.c:602
#: ../win32/gui/WndMain.c:964
#: ../win32/gui/WndMain.c:1200
#: ../plugins/peopsxgl/gpucfg/interface.c:338
@@ -346,110 +346,110 @@ msgstr "十进制"
msgid "Hexadecimal"
msgstr "十六进制"
-#: ../win32/gui/ConfigurePlugins.c:200
-#: ../gui/Gtk2Gui.c:2237
+#: ../win32/gui/ConfigurePlugins.c:206
+#: ../gui/Gtk2Gui.c:2228
msgid "Internal HLE Bios"
msgstr "内部 HLE-Bios"
-#: ../win32/gui/ConfigurePlugins.c:286
+#: ../win32/gui/ConfigurePlugins.c:292
msgid "Configuration not OK!"
msgstr "配置不正确!"
-#: ../win32/gui/ConfigurePlugins.c:286
+#: ../win32/gui/ConfigurePlugins.c:292
#: ../gui/Cheat.c:155
#: ../gui/Cheat.c:250
#: ../gui/LnxMain.c:405
msgid "Error"
msgstr "错误"
-#: ../win32/gui/ConfigurePlugins.c:387
+#: ../win32/gui/ConfigurePlugins.c:393
msgid "This plugin reports that should work correctly"
msgstr "此插件报告其可正常工作。"
-#: ../win32/gui/ConfigurePlugins.c:388
+#: ../win32/gui/ConfigurePlugins.c:394
msgid "This plugin reports that should not work correctly"
msgstr "此插件报告其不可正常工作。"
-#: ../win32/gui/ConfigurePlugins.c:444
+#: ../win32/gui/ConfigurePlugins.c:450
msgid "Select Plugins Directory"
msgstr "选择插件目录"
-#: ../win32/gui/ConfigurePlugins.c:453
+#: ../win32/gui/ConfigurePlugins.c:459
msgid "Select Bios Directory"
msgstr "选择 BIOS 目录"
-#: ../win32/gui/ConfigurePlugins.c:462
+#: ../win32/gui/ConfigurePlugins.c:468
msgid "Configuration"
msgstr "配置"
-#: ../win32/gui/ConfigurePlugins.c:466
+#: ../win32/gui/ConfigurePlugins.c:472
msgid "Graphics"
msgstr "图像"
-#: ../win32/gui/ConfigurePlugins.c:467
+#: ../win32/gui/ConfigurePlugins.c:473
msgid "First Controller"
msgstr "主控制器"
-#: ../win32/gui/ConfigurePlugins.c:468
+#: ../win32/gui/ConfigurePlugins.c:474
msgid "Second Controller"
msgstr "辅控制器"
-#: ../win32/gui/ConfigurePlugins.c:469
+#: ../win32/gui/ConfigurePlugins.c:475
msgid "Sound"
msgstr "声音"
-#: ../win32/gui/ConfigurePlugins.c:470
+#: ../win32/gui/ConfigurePlugins.c:476
msgid "Cdrom"
msgstr "CD-ROM"
-#: ../win32/gui/ConfigurePlugins.c:471
+#: ../win32/gui/ConfigurePlugins.c:477
msgid "Bios"
msgstr "BIOS"
-#: ../win32/gui/ConfigurePlugins.c:472
+#: ../win32/gui/ConfigurePlugins.c:478
msgid "Set Bios Directory"
msgstr "设置 BIOS 目录"
-#: ../win32/gui/ConfigurePlugins.c:473
+#: ../win32/gui/ConfigurePlugins.c:479
msgid "Set Plugins Directory"
msgstr "设置插件目录"
-#: ../win32/gui/ConfigurePlugins.c:474
-#: ../win32/gui/ConfigurePlugins.c:477
#: ../win32/gui/ConfigurePlugins.c:480
#: ../win32/gui/ConfigurePlugins.c:483
#: ../win32/gui/ConfigurePlugins.c:486
-#: ../win32/gui/ConfigurePlugins.c:598
+#: ../win32/gui/ConfigurePlugins.c:489
+#: ../win32/gui/ConfigurePlugins.c:492
+#: ../win32/gui/ConfigurePlugins.c:604
msgid "Configure..."
msgstr "配置..."
-#: ../win32/gui/ConfigurePlugins.c:475
-#: ../win32/gui/ConfigurePlugins.c:478
#: ../win32/gui/ConfigurePlugins.c:481
#: ../win32/gui/ConfigurePlugins.c:484
#: ../win32/gui/ConfigurePlugins.c:487
-#: ../win32/gui/ConfigurePlugins.c:599
+#: ../win32/gui/ConfigurePlugins.c:490
+#: ../win32/gui/ConfigurePlugins.c:493
+#: ../win32/gui/ConfigurePlugins.c:605
msgid "Test..."
msgstr "测试..."
-#: ../win32/gui/ConfigurePlugins.c:476
-#: ../win32/gui/ConfigurePlugins.c:479
#: ../win32/gui/ConfigurePlugins.c:482
#: ../win32/gui/ConfigurePlugins.c:485
#: ../win32/gui/ConfigurePlugins.c:488
-#: ../win32/gui/ConfigurePlugins.c:600
+#: ../win32/gui/ConfigurePlugins.c:491
+#: ../win32/gui/ConfigurePlugins.c:494
+#: ../win32/gui/ConfigurePlugins.c:606
msgid "About..."
msgstr "关于..."
-#: ../win32/gui/ConfigurePlugins.c:593
+#: ../win32/gui/ConfigurePlugins.c:599
msgid "NetPlay Configuration"
msgstr "联网游戏配置"
-#: ../win32/gui/ConfigurePlugins.c:597
+#: ../win32/gui/ConfigurePlugins.c:603
msgid "NetPlay"
msgstr "联网游戏"
-#: ../win32/gui/ConfigurePlugins.c:601
+#: ../win32/gui/ConfigurePlugins.c:607
msgid "Note: The NetPlay Plugin Directory should be the same as the other Plugins."
msgstr "注意: 联网游戏插件应和其它插件放在同一目录中。"
@@ -616,8 +616,8 @@ msgid "Greek"
msgstr "希腊语"
#: ../win32/gui/WndMain.c:80
-#: ../win32/gui/WndMain.c:1522
-#: ../win32/gui/WndMain.c:1524
+#: ../win32/gui/WndMain.c:1556
+#: ../win32/gui/WndMain.c:1558
msgid "English"
msgstr "英语"
@@ -688,15 +688,15 @@ msgstr "*PCSX*: Error Saving State %s"
#: ../win32/gui/WndMain.c:426
#: ../win32/gui/WndMain.c:475
-#: ../gui/Gtk2Gui.c:580
-#: ../gui/Gtk2Gui.c:707
+#: ../gui/Gtk2Gui.c:575
+#: ../gui/Gtk2Gui.c:700
msgid "The CD does not appear to be a valid Playstation CD"
msgstr "此光盘不是一张合法的 PlayStation 光盘。"
#: ../win32/gui/WndMain.c:432
#: ../win32/gui/WndMain.c:481
-#: ../gui/Gtk2Gui.c:588
-#: ../gui/Gtk2Gui.c:715
+#: ../gui/Gtk2Gui.c:583
+#: ../gui/Gtk2Gui.c:708
msgid "Could not load CD-ROM!"
msgstr "无法加载光盘!"
@@ -705,12 +705,12 @@ msgid "Running BIOS is not supported with Internal HLE Bios."
msgstr "内部 HLE BIOS 不支持直接运行。"
#: ../win32/gui/WndMain.c:661
-#: ../gui/Gtk2Gui.c:1080
+#: ../gui/Gtk2Gui.c:1068
msgid "Title"
msgstr "标题"
#: ../win32/gui/WndMain.c:667
-#: ../gui/Gtk2Gui.c:1086
+#: ../gui/Gtk2Gui.c:1074
msgid "Status"
msgstr "状态"
@@ -731,19 +731,19 @@ msgid "terminiting link block"
msgstr "terminiting link block"
#: ../win32/gui/WndMain.c:864
-#: ../gui/Gtk2Gui.c:1160
+#: ../gui/Gtk2Gui.c:1148
msgid "Deleted"
msgstr "已删除"
#: ../win32/gui/WndMain.c:865
#: ../win32/gui/WndMain.c:868
-#: ../gui/Gtk2Gui.c:1162
-#: ../gui/Gtk2Gui.c:1166
+#: ../gui/Gtk2Gui.c:1150
+#: ../gui/Gtk2Gui.c:1154
msgid "Free"
msgstr "空闲"
#: ../win32/gui/WndMain.c:867
-#: ../gui/Gtk2Gui.c:1164
+#: ../gui/Gtk2Gui.c:1152
msgid "Used"
msgstr "已使用"
@@ -844,211 +844,217 @@ msgid "Enable Console Output"
msgstr "启用控制台输出"
#: ../win32/gui/WndMain.c:1209
+#: ../data/pcsx.glade2:1233
+msgid "Enable Debugger"
+msgstr "启用调试器"
+
+#: ../win32/gui/WndMain.c:1210
msgid "Spu Irq Always Enabled"
msgstr "SPU IRQ 总是启用"
-#: ../win32/gui/WndMain.c:1210
+#: ../win32/gui/WndMain.c:1211
#: ../data/pcsx.glade2:1370
msgid "Parasite Eve 2, Vandal Hearts 1/2 Fix"
msgstr "Parasite Eve 2, Vandal Hearts 1/2 修正"
-#: ../win32/gui/WndMain.c:1211
+#: ../win32/gui/WndMain.c:1212
#: ../data/pcsx.glade2:1385
msgid "InuYasha Sengoku Battle Fix"
msgstr "InuYasha Sengoku 战斗修正"
-#: ../win32/gui/WndMain.c:1213
+#: ../win32/gui/WndMain.c:1214
#: ../plugins/dfcdrom/interface.c:194
+#: ../plugins/dfinput/dfinput.glade2:447
msgid "Options"
msgstr "选项"
-#: ../win32/gui/WndMain.c:1214
+#: ../win32/gui/WndMain.c:1215
msgid "Psx System Type"
msgstr "Psx 系统类型"
-#: ../win32/gui/WndMain.c:1286
+#: ../win32/gui/WndMain.c:1320
msgid "Psx Mcd Format (*.mcr;*.mc;*.mem;*.vgs;*.mcd;*.gme;*.ddf)"
msgstr "Psx 记忆卡格式 (*.mcr;*.mc;*.mem;*.vgs;*.mcd;*.gme;*.ddf)"
-#: ../win32/gui/WndMain.c:1291
+#: ../win32/gui/WndMain.c:1325
msgid "Psx Memory Card (*.mcr;*.mc)"
msgstr "Psx 记忆卡 (*.mcr;*.mc)"
-#: ../win32/gui/WndMain.c:1296
+#: ../win32/gui/WndMain.c:1330
msgid "CVGS Memory Card (*.mem;*.vgs)"
msgstr "VGS 记忆卡 (*.mem;*.vgs)"
-#: ../win32/gui/WndMain.c:1301
+#: ../win32/gui/WndMain.c:1335
msgid "Bleem Memory Card (*.mcd)"
msgstr "Bleem 记忆卡 (*.mcd)"
-#: ../win32/gui/WndMain.c:1306
+#: ../win32/gui/WndMain.c:1340
msgid "DexDrive Memory Card (*.gme)"
msgstr "DexDrive 记忆卡 (*.gme)"
-#: ../win32/gui/WndMain.c:1311
+#: ../win32/gui/WndMain.c:1345
msgid "DataDeck Memory Card (*.ddf)"
msgstr "DataDeck 记忆卡 (*.ddl)"
-#: ../win32/gui/WndMain.c:1316
-#: ../win32/gui/WndMain.c:1397
+#: ../win32/gui/WndMain.c:1350
+#: ../win32/gui/WndMain.c:1431
#: ../gui/Cheat.c:319
-#: ../gui/Gtk2Gui.c:516
-#: ../gui/Gtk2Gui.c:658
+#: ../gui/Gtk2Gui.c:512
+#: ../gui/Gtk2Gui.c:651
msgid "All Files"
msgstr "所有文件"
-#: ../win32/gui/WndMain.c:1355
+#: ../win32/gui/WndMain.c:1389
msgid "Psx Exe Format"
msgstr "PSX EXE 格式"
-#: ../win32/gui/WndMain.c:1392
+#: ../win32/gui/WndMain.c:1426
msgid "Psx Isos (*.iso;*.mdf;*.img;*.bin)"
msgstr "Psx 光盘镜像 (*.iso;*.mdf;*.img;*.bin)"
-#: ../win32/gui/WndMain.c:1468
+#: ../win32/gui/WndMain.c:1502
msgid "&File"
msgstr "文件(&F)"
-#: ../win32/gui/WndMain.c:1469
+#: ../win32/gui/WndMain.c:1503
msgid "E&xit"
msgstr "退出(&X)"
-#: ../win32/gui/WndMain.c:1471
+#: ../win32/gui/WndMain.c:1505
msgid "Run &EXE..."
msgstr "运行 &EXE..."
-#: ../win32/gui/WndMain.c:1472
+#: ../win32/gui/WndMain.c:1506
msgid "Run &BIOS"
msgstr "运行 BIOS(&B)"
-#: ../win32/gui/WndMain.c:1473
+#: ../win32/gui/WndMain.c:1507
msgid "Run &ISO..."
msgstr "运行 &ISO..."
-#: ../win32/gui/WndMain.c:1474
+#: ../win32/gui/WndMain.c:1508
msgid "Run &CD"
msgstr "运行光碟(&C)"
-#: ../win32/gui/WndMain.c:1476
+#: ../win32/gui/WndMain.c:1510
msgid "&Emulator"
msgstr "模拟器(&E)"
-#: ../win32/gui/WndMain.c:1477
+#: ../win32/gui/WndMain.c:1511
msgid "&States"
msgstr "存档(&S)"
-#: ../win32/gui/WndMain.c:1479
+#: ../win32/gui/WndMain.c:1513
msgid "S&witch ISO..."
msgstr "更换 ISO(&W)..."
-#: ../win32/gui/WndMain.c:1481
+#: ../win32/gui/WndMain.c:1515
msgid "Re&set"
msgstr "复位(&S)"
-#: ../win32/gui/WndMain.c:1482
+#: ../win32/gui/WndMain.c:1516
msgid "&Run"
msgstr "运行(&R)"
-#: ../win32/gui/WndMain.c:1483
+#: ../win32/gui/WndMain.c:1517
msgid "&Save"
msgstr "保存(&S)"
-#: ../win32/gui/WndMain.c:1484
+#: ../win32/gui/WndMain.c:1518
msgid "&Load"
msgstr "读取(&L)"
-#: ../win32/gui/WndMain.c:1485
-#: ../win32/gui/WndMain.c:1491
+#: ../win32/gui/WndMain.c:1519
+#: ../win32/gui/WndMain.c:1525
msgid "&Other..."
msgstr "其它(&O)..."
-#: ../win32/gui/WndMain.c:1486
-#: ../win32/gui/WndMain.c:1492
+#: ../win32/gui/WndMain.c:1520
+#: ../win32/gui/WndMain.c:1526
msgid "Slot &5"
msgstr "存档 5(&5)"
-#: ../win32/gui/WndMain.c:1487
-#: ../win32/gui/WndMain.c:1493
+#: ../win32/gui/WndMain.c:1521
+#: ../win32/gui/WndMain.c:1527
msgid "Slot &4"
msgstr "存档 4(&4)"
-#: ../win32/gui/WndMain.c:1488
-#: ../win32/gui/WndMain.c:1494
+#: ../win32/gui/WndMain.c:1522
+#: ../win32/gui/WndMain.c:1528
msgid "Slot &3"
msgstr "存档 3(&3)"
-#: ../win32/gui/WndMain.c:1489
-#: ../win32/gui/WndMain.c:1495
+#: ../win32/gui/WndMain.c:1523
+#: ../win32/gui/WndMain.c:1529
msgid "Slot &2"
msgstr "存档 2(&2)"
-#: ../win32/gui/WndMain.c:1490
-#: ../win32/gui/WndMain.c:1496
+#: ../win32/gui/WndMain.c:1524
+#: ../win32/gui/WndMain.c:1530
msgid "Slot &1"
msgstr "存档 1(&1)"
-#: ../win32/gui/WndMain.c:1498
+#: ../win32/gui/WndMain.c:1532
msgid "&Configuration"
msgstr "配置(&C)"
-#: ../win32/gui/WndMain.c:1499
+#: ../win32/gui/WndMain.c:1533
msgid "Cheat &Search..."
msgstr "查找作弊码(&S)..."
-#: ../win32/gui/WndMain.c:1500
+#: ../win32/gui/WndMain.c:1534
msgid "Ch&eat Code..."
msgstr "作弊码(&E)..."
-#: ../win32/gui/WndMain.c:1503
+#: ../win32/gui/WndMain.c:1537
msgid "&Language"
msgstr "语言(&L)"
-#: ../win32/gui/WndMain.c:1528
+#: ../win32/gui/WndMain.c:1562
msgid "&Memory cards..."
msgstr "记忆卡(&M)..."
-#: ../win32/gui/WndMain.c:1529
+#: ../win32/gui/WndMain.c:1563
msgid "C&PU..."
msgstr "C&PU..."
-#: ../win32/gui/WndMain.c:1531
+#: ../win32/gui/WndMain.c:1565
msgid "&NetPlay..."
msgstr "联网游戏(&N)..."
-#: ../win32/gui/WndMain.c:1533
+#: ../win32/gui/WndMain.c:1567
msgid "&Controllers..."
msgstr "控制器(&C)..."
-#: ../win32/gui/WndMain.c:1534
+#: ../win32/gui/WndMain.c:1568
msgid "CD-&ROM..."
msgstr "CD-&ROM..."
-#: ../win32/gui/WndMain.c:1535
+#: ../win32/gui/WndMain.c:1569
msgid "&Sound..."
msgstr "声音(&S)..."
-#: ../win32/gui/WndMain.c:1536
+#: ../win32/gui/WndMain.c:1570
msgid "&Graphics..."
msgstr "图像(&G)..."
-#: ../win32/gui/WndMain.c:1538
+#: ../win32/gui/WndMain.c:1572
msgid "&Plugins && Bios..."
msgstr "插件及 BIOS(&P)..."
-#: ../win32/gui/WndMain.c:1540
+#: ../win32/gui/WndMain.c:1574
msgid "&Help"
msgstr "帮助(&H)"
-#: ../win32/gui/WndMain.c:1541
+#: ../win32/gui/WndMain.c:1575
msgid "&About..."
msgstr "关于(&A)..."
-#: ../win32/gui/WndMain.c:1723
+#: ../win32/gui/WndMain.c:1761
msgid "Pcsx Msg"
msgstr "PCSX 消息"
-#: ../win32/gui/WndMain.c:1726
+#: ../win32/gui/WndMain.c:1764
msgid "Error Loading Symbol"
msgstr "无法加载符号"
@@ -1076,8 +1082,8 @@ msgstr "所有文件 (*.*)"
#: ../gui/Cheat.c:392
#: ../gui/Cheat.c:1121
-#: ../gui/Gtk2Gui.c:404
-#: ../gui/Gtk2Gui.c:1032
+#: ../gui/Gtk2Gui.c:400
+#: ../gui/Gtk2Gui.c:1020
msgid "Error: Glade interface could not be loaded!"
msgstr "错误:无法加载 Glade 界面!"
@@ -1105,138 +1111,138 @@ msgstr "新值:"
msgid "Search Results"
msgstr "查找结果"
-#: ../gui/Gtk2Gui.c:412
+#: ../gui/Gtk2Gui.c:408
#: ../data/pcsx.glade2:605
msgid "Configure PCSX"
msgstr "配置 PCSX"
-#: ../gui/Gtk2Gui.c:498
+#: ../gui/Gtk2Gui.c:494
msgid "Select PSX EXE File"
msgstr "选择 PSX EXE 文件"
-#: ../gui/Gtk2Gui.c:512
+#: ../gui/Gtk2Gui.c:508
msgid "PlayStation Executable Files"
msgstr "PlayStation 可执行文件"
-#: ../gui/Gtk2Gui.c:549
+#: ../gui/Gtk2Gui.c:544
msgid "Not a valid PSX file"
msgstr "不是一个合法的 PSX 文件"
-#: ../gui/Gtk2Gui.c:549
+#: ../gui/Gtk2Gui.c:544
msgid "The file does not appear to be a valid Playstation executable"
msgstr "此文件不是一个合法的 PlayStation 可执行文件"
-#: ../gui/Gtk2Gui.c:580
-#: ../gui/Gtk2Gui.c:707
+#: ../gui/Gtk2Gui.c:575
+#: ../gui/Gtk2Gui.c:700
msgid "CD ROM failed"
msgstr "CD-ROM 失败"
-#: ../gui/Gtk2Gui.c:588
+#: ../gui/Gtk2Gui.c:583
msgid "The CD ROM could not be loaded"
msgstr "无法加载 CD-ROM"
-#: ../gui/Gtk2Gui.c:603
+#: ../gui/Gtk2Gui.c:597
msgid "Could not run BIOS"
msgstr "无法运行 BIOS"
-#: ../gui/Gtk2Gui.c:603
+#: ../gui/Gtk2Gui.c:597
msgid "Running BIOS is not supported with Internal HLE BIOS."
msgstr "内部 HLE BIOS 不支持直接运行。"
-#: ../gui/Gtk2Gui.c:633
+#: ../gui/Gtk2Gui.c:626
msgid "Open PSX Disc Image File"
msgstr "打开 PSX 光盘镜像文件"
-#: ../gui/Gtk2Gui.c:653
+#: ../gui/Gtk2Gui.c:646
msgid "PSX Image Files (*.bin, *.img, *.mdf, *.iso)"
msgstr "PS 镜像文件 (*.bin, *.img, *.mdf, *.iso)"
-#: ../gui/Gtk2Gui.c:891
+#: ../gui/Gtk2Gui.c:880
#, c-format
msgid "Loaded state %s."
msgstr "已读取存档 %s。"
-#: ../gui/Gtk2Gui.c:896
+#: ../gui/Gtk2Gui.c:884
#, c-format
msgid "Error loading state %s!"
msgstr "读取存档 %s 时出错。"
-#: ../gui/Gtk2Gui.c:907
+#: ../gui/Gtk2Gui.c:895
#, c-format
msgid "Saved state %s."
msgstr "已保存存档 %s"
-#: ../gui/Gtk2Gui.c:909
+#: ../gui/Gtk2Gui.c:897
#, c-format
msgid "Error saving state %s!"
msgstr "保存存档 %s 时出错。"
-#: ../gui/Gtk2Gui.c:943
-#: ../gui/Gtk2Gui.c:970
+#: ../gui/Gtk2Gui.c:931
+#: ../gui/Gtk2Gui.c:958
msgid "Select State File"
msgstr "选择存档文件"
-#: ../gui/Gtk2Gui.c:1074
+#: ../gui/Gtk2Gui.c:1062
msgid "Icon"
msgstr "图标"
-#: ../gui/Gtk2Gui.c:1092
+#: ../gui/Gtk2Gui.c:1080
msgid "ID"
msgstr "ID"
-#: ../gui/Gtk2Gui.c:1098
+#: ../gui/Gtk2Gui.c:1086
msgid "Name"
msgstr "名称"
-#: ../gui/Gtk2Gui.c:1258
+#: ../gui/Gtk2Gui.c:1246
msgid "Format this Memory Card?"
msgstr "格式化此记忆卡?"
-#: ../gui/Gtk2Gui.c:1260
+#: ../gui/Gtk2Gui.c:1248
msgid "If you format the memory card, the card will be empty, and any existing data overwritten."
msgstr "如果您选择格式化记忆卡,记忆卡将被清空,并且任何现有数据都将被覆盖。"
-#: ../gui/Gtk2Gui.c:1263
+#: ../gui/Gtk2Gui.c:1251
msgid "Format card"
msgstr "格式化记忆卡"
-#: ../gui/Gtk2Gui.c:1378
+#: ../gui/Gtk2Gui.c:1366
msgid "No space available in the target memory card!"
msgstr "目标记忆卡没有空余位置!"
-#: ../gui/Gtk2Gui.c:1520
-#: ../gui/Gtk2Gui.c:1541
-#: ../gui/Gtk2Gui.c:1562
-#: ../gui/Gtk2Gui.c:1583
-#: ../gui/Gtk2Gui.c:1889
+#: ../gui/Gtk2Gui.c:1508
+#: ../gui/Gtk2Gui.c:1529
+#: ../gui/Gtk2Gui.c:1550
+#: ../gui/Gtk2Gui.c:1571
+#: ../gui/Gtk2Gui.c:1880
msgid "No configuration required"
msgstr "不需要配置"
-#: ../gui/Gtk2Gui.c:1520
-#: ../gui/Gtk2Gui.c:1541
-#: ../gui/Gtk2Gui.c:1562
-#: ../gui/Gtk2Gui.c:1583
-#: ../gui/Gtk2Gui.c:1889
+#: ../gui/Gtk2Gui.c:1508
+#: ../gui/Gtk2Gui.c:1529
+#: ../gui/Gtk2Gui.c:1550
+#: ../gui/Gtk2Gui.c:1571
+#: ../gui/Gtk2Gui.c:1880
msgid "This plugin doesn't need to be configured."
msgstr "此插件需要被配置。"
-#: ../gui/Gtk2Gui.c:1620
+#: ../gui/Gtk2Gui.c:1608
msgid "Memory Card Manager"
msgstr "记忆卡管理器"
-#: ../gui/Gtk2Gui.c:2143
+#: ../gui/Gtk2Gui.c:2134
#, c-format
msgid "Could not open BIOS directory: '%s'\n"
msgstr "无法打开 BIOS 目录: \"%s\"\n"
-#: ../gui/Gtk2Gui.c:2173
-#: ../gui/Gtk2Gui.c:2266
+#: ../gui/Gtk2Gui.c:2164
+#: ../gui/Gtk2Gui.c:2257
#: ../gui/LnxMain.c:170
#, c-format
msgid "Could not open directory: '%s'\n"
msgstr "无法打开目录: \"%s\"\n"
-#: ../gui/Gtk2Gui.c:2327
+#: ../gui/Gtk2Gui.c:2318
msgid "Notice"
msgstr "警告"
@@ -1359,7 +1365,7 @@ msgstr "无法关闭 \"控制器 2\" 插件!"
msgid "Error closing GPU plugin!"
msgstr "无法关闭 GPU 插件!"
-#: ../libpcsxcore/cdriso.c:631
+#: ../libpcsxcore/cdriso.c:639
#, c-format
msgid "Loaded CD Image: %s"
msgstr "已加载 CD 镜像: %s"
@@ -1379,6 +1385,22 @@ msgstr "作弊码己保存: %s\n"
msgid "(Untitled)"
msgstr "(未命名)"
+#: ../libpcsxcore/debug.c:317
+msgid "Error allocating memory"
+msgstr "分配内存错误"
+
+#: ../libpcsxcore/debug.c:322
+msgid "Unable to start debug server.\n"
+msgstr "无法启动调试服务器。\n"
+
+#: ../libpcsxcore/debug.c:326
+msgid "Debugger started.\n"
+msgstr "调试器已启动。\n"
+
+#: ../libpcsxcore/debug.c:333
+msgid "Debugger stopped.\n"
+msgstr "调试器已停止。\n"
+
#: ../libpcsxcore/misc.c:380
#, c-format
msgid "Error opening file: %s.\n"
@@ -1524,19 +1546,19 @@ msgstr "Pete Bernert 及 P.E.Op.S. 开发组"
msgid "Configure X11 Video"
msgstr "配置 X11 视频"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:39
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:44
msgid "Initial Window Size:"
msgstr "初始窗口大小:"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:50
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:55
msgid "Stretching:"
msgstr "拉抻:"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:63
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:68
msgid "Dithering:"
msgstr "抖动:"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:76
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:81
msgid ""
"320x240\n"
"640x480\n"
@@ -1554,7 +1576,7 @@ msgstr ""
"1280x1024\n"
"1600x1200"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:95
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:100
msgid ""
"0: None\n"
"1: 2xSai\n"
@@ -1574,7 +1596,7 @@ msgstr ""
"6: HQ2X\n"
"7: HQ3X"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:117
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:122
msgid ""
"0: Off (fastest)\n"
"1: Game dependant\n"
@@ -1584,185 +1606,150 @@ msgstr ""
"1: 取决于游戏\n"
"2: 总是"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:139
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:145
msgid "Maintain 4:3 Aspect Ratio"
msgstr "维持 4:3 宽高比"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:153
-msgid "Toggle windowed/fullscreen mode."
-msgstr "切换窗口/全屏模式"
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:154
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:160
#: ../plugins/peopsxgl/gpucfg/interface.c:322
msgid "Fullscreen"
msgstr "全屏"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:177
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:164
+msgid "Toggle windowed/fullscreen mode."
+msgstr "切换窗口/全屏模式"
+
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:186
msgid "<b>Screen</b>"
msgstr "<b>屏幕</b>"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:203
-msgid "Toggle whether the FPS will be shown."
-msgstr "切换 FPS (每秒帧数) 是否将被显示。"
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:204
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:215
msgid "Show FPS"
msgstr "显示 FPS"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:218
-msgid "Enable this if games display too quickly."
-msgstr "如果游戏运行得过快,请启用此项。"
-
#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:219
+msgid "Toggle whether the FPS will be shown."
+msgstr "切换 FPS (每秒帧数) 是否将被显示。"
+
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:231
msgid "Autodetect FPS limit"
msgstr "自动检测 FPS 界限"
#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:235
-msgid "Skip frames when rendering."
-msgstr "渲染时跳帧。"
+msgid "Enable this if games display too quickly."
+msgstr "如果游戏运行得过快,请启用此项。"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:236
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:248
msgid "Enable frame skipping"
msgstr "启用跳帧"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:257
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:252
+msgid "Skip frames when rendering."
+msgstr "渲染时跳帧。"
+
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:269
msgid "Set FPS"
msgstr "设置 FPS"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:272
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:286
msgid "200.0"
msgstr "200.0"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:295
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:309
msgid "<b>Framerate</b>"
msgstr "<b>帧率</b>"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:324
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:338
#: ../plugins/peopsxgl/gpucfg/interface.c:568
msgid "Use game fixes"
msgstr "使用特定游戏修正"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:348
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:365
msgid "better g-colors, worse textures"
msgstr "较好的 g-colors, 较差的纹理"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:363
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:380
msgid "Needed by Dark Forces"
msgstr "Dark Forces 运行需要"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:378
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:393
msgid "Draw quads with triangles"
msgstr "使用 quad 绘制三角形"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:394
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:409
msgid "Repeated flat tex triangles"
msgstr "重复平滑多边形纹理"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:410
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:425
msgid "Disable CPU Saving"
msgstr "禁用 CPU 保存"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:426
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:441
msgid "Odd/even bit hack"
msgstr "奇/偶位 hack"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:440
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:457
msgid "For precise framerate"
msgstr "精确帧率"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:455
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:472
msgid "Better FPS limit in some"
msgstr "某些游戏中可取得较好的 FPS 界限值"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:470
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:485
msgid "PC FPS calculation"
msgstr "PC FPS 计算"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:486
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:503
msgid "Pandemonium 2"
msgstr "Pandemonium 2"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:501
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:516
msgid "Lazy screen update"
msgstr "懒惰的屏幕更新"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:517
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:534
msgid "Skip every second frame"
msgstr "每两帧跳过一帧"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:532
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:547
#: ../plugins/peopsxgl/gpucfg/interface.c:640
msgid "Old frame skipping"
msgstr "旧的跳帧方式"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:548
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:563
msgid "Expand screen width"
msgstr "扩展屏幕宽度"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:564
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:579
msgid "Ignore brightness color"
msgstr "忽略亮色"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:580
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:595
msgid "Disable coordinate check"
msgstr "禁用坐标检查"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:596
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:613
msgid "Chrono Cross"
msgstr "Chrono Cross"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:609
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:626
msgid "Capcom fighting games"
msgstr "Capcom 格斗游戏"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:624
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:641
msgid "Black screens in Lunar"
msgstr "Lunar 中黑屏"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:639
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:656
msgid "Compatibility mode"
msgstr "兼容模式"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:664
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:428
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:681
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:267
msgid "<b>Compatibility</b>"
msgstr "<b>兼容性</b>"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:701
-msgid "About X11 Video Plugin"
-msgstr "关于 X11 视频插件"
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:714
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:516
-msgid "Coded by: Pete Bernert and the P.E.Op.S. team"
-msgstr "编写: Pete Bernert 以及 P.E.Op.S. 开发组"
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:725
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:541
-msgid "Homepage: http://home.t-online.de/home/PeteBernert/"
-msgstr "主页: http://home.t-online.de/home/PeteBernert/"
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:737
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:566
-msgid "EMail: BlackDove@addcom.de"
-msgstr "EMail: BlackDove@addcom.de"
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:750
-msgid "Version: 1.15"
-msgstr "版本: 1.15"
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:762
-msgid "Release date: 2003"
-msgstr "发布日期: 2003"
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:774
-msgid "<b>PCSX-df Video Plugin Adaption</b>"
-msgstr "<b>PCSX-df 视频插件</b>"
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:787
-msgid "XVideo Support: Stephen Chao"
-msgstr "XVideo 支持: Stephen Chao"
-
#: ../data/pcsx.glade2:9
msgid "PCSX"
msgstr "PCSX"
@@ -1941,10 +1928,6 @@ msgstr "<b>BIOS</b>"
msgid "Configure CPU"
msgstr "配置 CPU"
-#: ../data/pcsx.glade2:1233
-msgid "Enable Debugger"
-msgstr "启用调试器"
-
#: ../data/pcsx.glade2:1251
msgid "SPU IRQ Always Enabled"
msgstr "SPU IRQ 总是启用"
@@ -2060,9 +2043,23 @@ msgid ""
"Public License along with this program; if not, write to\n"
"the Free Software Foundation, Inc."
msgstr ""
+"This program is free software; you can redistribute it\n"
+"and/or modify it under the terms of the GNU General\n"
+"Public License as published by the Free Software\n"
+"Foundation; either version 2 of the License, or (at your\n"
+"option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be\n"
+"useful, but WITHOUT ANY WARRANTY; without even\n"
+"the implied warranty of MERCHANTABILITY or\n"
+"FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+"You should have received a copy of the GNU General\n"
+"Public License along with this program; if not, write to\n"
+"the Free Software Foundation, Inc."
#: ../data/pcsx.glade2:2310
-#: ../plugins/dfinput/dfinput.glade2:212
msgid "translator-credits"
msgstr "Wei Mingzhi <whistler@openoffice.org>"
@@ -2146,23 +2143,23 @@ msgstr ""
"P.E.Op.S OSS 驱动程序 V1.7\n"
"编写: Pete Bernert 以及 P.E.Op.S. 开发组\n"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:9
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:8
msgid "Configure Sound"
msgstr "配置音频"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:62
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:41
msgid "Volume:"
msgstr "音量:"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:90
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:53
msgid "Interpolation:"
msgstr "插值:"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:118
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:67
msgid "Reverb:"
msgstr "回响:"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:146
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:80
msgid ""
"Low\n"
"Medium\n"
@@ -2174,7 +2171,7 @@ msgstr ""
"高\n"
"最高"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:165
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:94
msgid ""
"Off\n"
"Simple\n"
@@ -2184,7 +2181,7 @@ msgstr ""
"简易\n"
"Playstation"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:184
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:110
msgid ""
"None\n"
"Simple\n"
@@ -2196,69 +2193,45 @@ msgstr ""
"高斯\n"
"立方"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:208
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:131
msgid "<b>General</b>"
msgstr "<b>一般</b>"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:264
-msgid "Enable or disable XA music."
-msgstr "启用或禁用 XA 音乐。"
-
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:266
-msgid "Enable XA"
-msgstr "启用 XA"
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:162
+msgid "Adjust XA speed"
+msgstr "调整 XA 速度"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:284
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:166
msgid "Choose this if XA music is played too quickly."
msgstr "如 XA 音乐播放得太快,请选择此项。"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:286
-msgid "Adjust XA speed"
-msgstr "调整 XA 速度"
-
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:308
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:183
msgid "<b>XA Music</b>"
msgstr "<b>XA 音乐</b>"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:364
-msgid "Use the asynchronous SPU interface."
-msgstr "使用异步 SPU 接口。"
-
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:366
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:214
msgid "High compatibility mode"
msgstr "高兼容性模式"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:384
-msgid "Wait for CPU; only useful for some games."
-msgstr "等待 CPU; 仅在部分游戏中有用处。"
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:218
+msgid "Use the asynchronous SPU interface."
+msgstr "使用异步 SPU 接口。"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:386
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:230
msgid "SPU IRQ Wait"
msgstr "SPU IRQ 等待"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:404
-msgid "Play only one channel for a performance boost."
-msgstr "仅播放一个声道以提升性能。"
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:234
+msgid "Wait for CPU; only useful for some games."
+msgstr "等待 CPU; 仅在部分游戏中有用处。"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:406
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:246
msgid "Single channel sound"
msgstr "单声道"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:486
-msgid "About Sound Plugin"
-msgstr "关于音频插件"
-
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:592
-msgid "Version: 1.6"
-msgstr "版本: 1.6"
-
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:617
-msgid "Release date: 05.04.2003"
-msgstr "发布日期: 05.04.2003"
-
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:642
-msgid "<b>PCSX-df Sound Plugin Adaption</b>"
-msgstr "<b>PCSX-df 音频插件</b>"
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:250
+msgid "Play only one channel for a performance boost."
+msgstr "仅播放一个声道以提升性能。"
#: ../plugins/dfcdrom/cdr.c:58
msgid "CD-ROM Drive Reader"
@@ -2662,50 +2635,277 @@ msgstr "主页: http://www.pbernert.com"
msgid "Version: 1.78"
msgstr "版本: 1.78"
-#: ../plugins/dfinput/pad.c:59
-msgid "Gamepad/Keyboard Input"
-msgstr "手柄/键盘输入"
+#: ../plugins/dfinput/cfg-gtk2.c:48
+msgid "D-Pad Up"
+msgstr "方向键上"
-#: ../plugins/dfinput/pad.c:61
-msgid "Keyboard Input"
-msgstr "键盘输入"
+#: ../plugins/dfinput/cfg-gtk2.c:49
+msgid "D-Pad Down"
+msgstr "方向键下"
-#: ../plugins/dfinput/dfinput.glade2:7
-msgid "Configure Gamepad/Keyboard"
-msgstr "配置手柄/键盘"
+#: ../plugins/dfinput/cfg-gtk2.c:50
+msgid "D-Pad Left"
+msgstr "方向键左"
-#: ../plugins/dfinput/dfinput.glade2:25
-msgid "Pad number:"
-msgstr "手柄编号:"
+#: ../plugins/dfinput/cfg-gtk2.c:51
+msgid "D-Pad Right"
+msgstr "方向键右"
-#: ../plugins/dfinput/dfinput.glade2:36
-msgid "1"
-msgstr "1"
+#: ../plugins/dfinput/cfg-gtk2.c:52
+msgid "Cross"
+msgstr "叉号键"
-#: ../plugins/dfinput/dfinput.glade2:51
-msgid "2"
-msgstr "2"
+#: ../plugins/dfinput/cfg-gtk2.c:53
+msgid "Circle"
+msgstr "圆圈键"
-#: ../plugins/dfinput/dfinput.glade2:73
-msgid "Device file:"
-msgstr "设备文件:"
+#: ../plugins/dfinput/cfg-gtk2.c:54
+msgid "Square"
+msgstr "方块键"
-#: ../plugins/dfinput/dfinput.glade2:104
-msgid "Multi-threaded"
-msgstr "多线程"
+#: ../plugins/dfinput/cfg-gtk2.c:55
+msgid "Triangle"
+msgstr "三角键"
-#: ../plugins/dfinput/dfinput.glade2:118
-msgid "Analog"
-msgstr "模拟"
+#: ../plugins/dfinput/cfg-gtk2.c:56
+msgid "L1"
+msgstr "L1"
-#: ../plugins/dfinput/dfinput.glade2:155
-msgid "<b>Button Configuration</b>"
-msgstr "<b>按键配置</b>"
+#: ../plugins/dfinput/cfg-gtk2.c:57
+msgid "R1"
+msgstr "1R1"
-#: ../plugins/dfinput/dfinput.glade2:209
-msgid "Based on PadJoy by Erich Kitzmüller (ammoq@ammoq.com)"
-msgstr "基于由 Erich Kitzmüller (ammoq@ammoq.com) 编写的 PadJoy"
+#: ../plugins/dfinput/cfg-gtk2.c:58
+msgid "L2"
+msgstr "L2"
+
+#: ../plugins/dfinput/cfg-gtk2.c:59
+msgid "R2"
+msgstr "R2"
+
+#: ../plugins/dfinput/cfg-gtk2.c:60
+msgid "L3"
+msgstr "L3"
+
+#: ../plugins/dfinput/cfg-gtk2.c:61
+msgid "R3"
+msgstr "R3"
+
+#: ../plugins/dfinput/cfg-gtk2.c:62
+msgid "Select"
+msgstr "选择键"
+#: ../plugins/dfinput/cfg-gtk2.c:63
+msgid "Start"
+msgstr "开始键"
+
+#: ../plugins/dfinput/cfg-gtk2.c:67
+msgid "L-Stick X"
+msgstr "左旋钮 X"
+
+#: ../plugins/dfinput/cfg-gtk2.c:68
+msgid "L-Stick Y"
+msgstr "左旋钮 Y"
+
+#: ../plugins/dfinput/cfg-gtk2.c:69
+msgid "R-Stick X"
+msgstr "右旋钮 X"
+
+#: ../plugins/dfinput/cfg-gtk2.c:70
+msgid "R-Stick Y"
+msgstr "右旋钮 Y"
+
+#: ../plugins/dfinput/cfg-gtk2.c:98
+msgid "Centered"
+msgstr "居中"
+
+#: ../plugins/dfinput/cfg-gtk2.c:98
+msgid "Up"
+msgstr "上"
+
+#: ../plugins/dfinput/cfg-gtk2.c:98
+msgid "Right"
+msgstr "右方向键"
+
+#: ../plugins/dfinput/cfg-gtk2.c:98
+msgid "Rightup"
+msgstr "右上"
+
+#: ../plugins/dfinput/cfg-gtk2.c:99
+msgid "Down"
+msgstr "下"
+
+#: ../plugins/dfinput/cfg-gtk2.c:99
+msgid "Rightdown"
+msgstr "右下"
+
+#: ../plugins/dfinput/cfg-gtk2.c:99
+msgid "Left"
+msgstr "左"
+
+#: ../plugins/dfinput/cfg-gtk2.c:99
+msgid "Leftup"
+msgstr "左上"
+
+#: ../plugins/dfinput/cfg-gtk2.c:100
+msgid "Leftdown"
+msgstr "左下"
+
+#: ../plugins/dfinput/cfg-gtk2.c:104
+#, c-format
+msgid "Joystick: Button %d"
+msgstr "手柄: 按钮 %d"
+
+#: ../plugins/dfinput/cfg-gtk2.c:108
+#, c-format
+msgid "Joystick: Axis %d%c"
+msgstr "手柄: 轴 %d%c"
+
+#: ../plugins/dfinput/cfg-gtk2.c:113
+#, c-format
+msgid "Joystick: Hat %d %s"
+msgstr "Joystick: 操纵杆 %d %s"
+
+#: ../plugins/dfinput/cfg-gtk2.c:128
+msgid "Keyboard:"
+msgstr "键盘:"
+
+#: ../plugins/dfinput/cfg-gtk2.c:132
+#: ../plugins/dfinput/cfg-gtk2.c:140
+#, c-format
+msgid "(Not Set)"
+msgstr "(未设定)"
+
+#: ../plugins/dfinput/cfg-gtk2.c:142
+#, c-format
+msgid "Joystick: Axis %d%s"
+msgstr "手柄: 轴 %d%s"
+
+#: ../plugins/dfinput/cfg-gtk2.c:142
+msgid " (Reversed)"
+msgstr " (反向)"
+
+#: ../plugins/dfinput/cfg-gtk2.c:378
+msgid "Device not set"
+msgstr "设备未设置"
+
+#: ../plugins/dfinput/cfg-gtk2.c:378
+msgid "Please select a valid Joystick Device"
+msgstr "请选择一个合法的手柄设备"
+
+#: ../plugins/dfinput/cfg-gtk2.c:384
+msgid "Device open error"
+msgstr "设备打开错误"
+
+#: ../plugins/dfinput/cfg-gtk2.c:384
+msgid "Unable to open Joystick Device"
+msgstr "无法打开手柄设备"
+
+#: ../plugins/dfinput/cfg-gtk2.c:475
+msgid "None"
+msgstr "无"
+
+#: ../plugins/dfinput/cfg-gtk2.c:517
+msgid "Gamepad/Keyboard Input Configuration"
+msgstr "手柄/键盘输入配置"
+
+#: ../plugins/dfinput/cfg-gtk2.c:523
+#: ../plugins/dfinput/cfg-gtk2.c:543
+msgid "Key"
+msgstr "按钮"
+
+#: ../plugins/dfinput/cfg-gtk2.c:529
+#: ../plugins/dfinput/cfg-gtk2.c:549
+msgid "Button"
+msgstr "按键"
+
+#: ../plugins/dfinput/pad.c:23
+msgid "Gamepad/Keyboard Input (ePSXe)"
+msgstr "手柄/键盘输入 (ePSXe)"
+
+#: ../plugins/dfinput/pad.c:25
+msgid "Gamepad/Keyboard Input"
+msgstr "手柄/键盘输入"
+
+#: ../plugins/dfinput/dfinput.glade2:34
+#: ../plugins/dfinput/dfinput.glade2:231
+msgid "Device:"
+msgstr "设备:"
+
+#: ../plugins/dfinput/dfinput.glade2:65
+#: ../plugins/dfinput/dfinput.glade2:262
+msgid "Type:"
+msgstr "类型:"
+
+#: ../plugins/dfinput/dfinput.glade2:77
+#: ../plugins/dfinput/dfinput.glade2:274
+msgid ""
+"Digital Pad\n"
+"Analog Pad"
+msgstr ""
+"数字手柄\n"
+"模拟手柄"
+
+#: ../plugins/dfinput/dfinput.glade2:148
+#: ../plugins/dfinput/dfinput.glade2:345
+msgid "Change"
+msgstr "更改"
+
+#: ../plugins/dfinput/dfinput.glade2:184
+#: ../plugins/dfinput/dfinput.glade2:381
+msgid "Reset"
+msgstr "重置"
+
+#: ../plugins/dfinput/dfinput.glade2:209
+msgid "Controller 1"
+msgstr "控制器 1"
+
+#: ../plugins/dfinput/dfinput.glade2:411
+msgid "Controller 2"
+msgstr "控制器 2"
+
+#: ../plugins/dfinput/dfinput.glade2:426
+msgid "Multi-Threaded (Recommended)"
+msgstr "多线程 (推荐)"
+
+#~ msgid "Configure Gamepad/Keyboard"
+#~ msgstr "配置手柄/键盘"
+#~ msgid "Pad number:"
+#~ msgstr "手柄编号:"
+#~ msgid "Analog"
+#~ msgstr "模拟"
+#~ msgid "<b>Button Configuration</b>"
+#~ msgstr "<b>按键配置</b>"
+#~ msgid "Based on PadJoy by Erich Kitzmüller (ammoq@ammoq.com)"
+#~ msgstr "基于由 Erich Kitzmüller (ammoq@ammoq.com) 编写的 PadJoy"
+#~ msgid "About X11 Video Plugin"
+#~ msgstr "关于 X11 视频插件"
+#~ msgid "Coded by: Pete Bernert and the P.E.Op.S. team"
+#~ msgstr "编写: Pete Bernert 以及 P.E.Op.S. 开发组"
+#~ msgid "Homepage: http://home.t-online.de/home/PeteBernert/"
+#~ msgstr "主页: http://home.t-online.de/home/PeteBernert/"
+#~ msgid "EMail: BlackDove@addcom.de"
+#~ msgstr "EMail: BlackDove@addcom.de"
+#~ msgid "Version: 1.15"
+#~ msgstr "版本: 1.15"
+#~ msgid "Release date: 2003"
+#~ msgstr "发布日期: 2003"
+#~ msgid "<b>PCSX-df Video Plugin Adaption</b>"
+#~ msgstr "<b>PCSX-df 视频插件</b>"
+#~ msgid "XVideo Support: Stephen Chao"
+#~ msgstr "XVideo 支持: Stephen Chao"
+#~ msgid "Enable or disable XA music."
+#~ msgstr "启用或禁用 XA 音乐。"
+#~ msgid "Enable XA"
+#~ msgstr "启用 XA"
+#~ msgid "About Sound Plugin"
+#~ msgstr "关于音频插件"
+#~ msgid "Version: 1.6"
+#~ msgstr "版本: 1.6"
+#~ msgid "Release date: 05.04.2003"
+#~ msgstr "发布日期: 05.04.2003"
+#~ msgid "<b>PCSX-df Sound Plugin Adaption</b>"
+#~ msgstr "<b>PCSX-df 音频插件</b>"
#~ msgid "Controller _1..."
#~ msgstr "控制器 _1..."
#~ msgid "Controller _2..."
diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo
index e28a391a..c4509572 100644
--- a/po/zh_TW.gmo
+++ b/po/zh_TW.gmo
Binary files differ
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 1ccd8770..ec14d340 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pcsxr 1.0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-10-01 18:26+0800\n"
+"POT-Creation-Date: 2009-10-25 21:49+0800\n"
"PO-Revision-Date: 2009-10-01 18:27+0700\n"
"Last-Translator: Wei Mingzhi <whistler@openoffice.org>\n"
"Language-Team: Traditional Chinese <whistler@openoffice.org>\n"
@@ -53,19 +53,14 @@ msgstr ""
"\n"
"http://www.codeplex.com/pcsxr"
-#: ../win32/gui/AboutDlg.c:46
-#: ../plugins/peopsxgl/gpucfg/interface.c:831
+#: ../win32/gui/AboutDlg.c:46 ../plugins/peopsxgl/gpucfg/interface.c:831
msgid "About"
msgstr "關於 PCSX"
-#: ../win32/gui/AboutDlg.c:48
-#: ../win32/gui/AboutDlg.c:52
-#: ../win32/gui/CheatDlg.c:70
-#: ../win32/gui/CheatDlg.c:120
-#: ../win32/gui/ConfigurePlugins.c:464
-#: ../win32/gui/ConfigurePlugins.c:595
-#: ../win32/gui/WndMain.c:963
-#: ../win32/gui/WndMain.c:1199
+#: ../win32/gui/AboutDlg.c:48 ../win32/gui/AboutDlg.c:52
+#: ../win32/gui/CheatDlg.c:70 ../win32/gui/CheatDlg.c:120
+#: ../win32/gui/ConfigurePlugins.c:470 ../win32/gui/ConfigurePlugins.c:601
+#: ../win32/gui/WndMain.c:963 ../win32/gui/WndMain.c:1199
#: ../plugins/peopsxgl/gpucfg/interface.c:130
#: ../plugins/peopsxgl/gpucfg/interface.c:843
msgid "OK"
@@ -75,60 +70,46 @@ msgstr "確定"
msgid "PCSX EMU\n"
msgstr "PCSX 模擬器\n"
-#: ../win32/gui/CheatDlg.c:52
-#: ../win32/gui/CheatDlg.c:224
+#: ../win32/gui/CheatDlg.c:52 ../win32/gui/CheatDlg.c:224
#: ../win32/gui/CheatDlg.c:271
msgid "Yes"
msgstr "是"
-#: ../win32/gui/CheatDlg.c:52
-#: ../win32/gui/CheatDlg.c:224
+#: ../win32/gui/CheatDlg.c:52 ../win32/gui/CheatDlg.c:224
#: ../win32/gui/CheatDlg.c:271
msgid "No"
msgstr "否"
-#: ../win32/gui/CheatDlg.c:67
-#: ../gui/Cheat.c:193
+#: ../win32/gui/CheatDlg.c:67 ../gui/Cheat.c:193
msgid "Edit Cheat"
msgstr "編輯金手指"
-#: ../win32/gui/CheatDlg.c:68
-#: ../win32/gui/CheatDlg.c:118
-#: ../gui/Cheat.c:633
+#: ../win32/gui/CheatDlg.c:68 ../win32/gui/CheatDlg.c:118 ../gui/Cheat.c:633
msgid "Description:"
msgstr "描述:"
-#: ../win32/gui/CheatDlg.c:69
-#: ../win32/gui/CheatDlg.c:119
-#: ../gui/Cheat.c:125
+#: ../win32/gui/CheatDlg.c:69 ../win32/gui/CheatDlg.c:119 ../gui/Cheat.c:125
#: ../gui/Cheat.c:210
msgid "Cheat Code:"
msgstr "金手指碼:"
-#: ../win32/gui/CheatDlg.c:71
-#: ../win32/gui/CheatDlg.c:121
-#: ../win32/gui/ConfigurePlugins.c:465
-#: ../win32/gui/ConfigurePlugins.c:596
-#: ../win32/gui/WndMain.c:964
-#: ../win32/gui/WndMain.c:1200
+#: ../win32/gui/CheatDlg.c:71 ../win32/gui/CheatDlg.c:121
+#: ../win32/gui/ConfigurePlugins.c:471 ../win32/gui/ConfigurePlugins.c:602
+#: ../win32/gui/WndMain.c:964 ../win32/gui/WndMain.c:1200
#: ../plugins/peopsxgl/gpucfg/interface.c:338
msgid "Cancel"
msgstr "取消"
-#: ../win32/gui/CheatDlg.c:92
-#: ../win32/gui/CheatDlg.c:133
-#: ../gui/Cheat.c:155
+#: ../win32/gui/CheatDlg.c:92 ../win32/gui/CheatDlg.c:133 ../gui/Cheat.c:155
#: ../gui/Cheat.c:250
msgid "Invalid cheat code!"
msgstr "非法金手指碼!"
-#: ../win32/gui/CheatDlg.c:117
-#: ../gui/Cheat.c:109
+#: ../win32/gui/CheatDlg.c:117 ../gui/Cheat.c:109
msgid "Add New Cheat"
msgstr "添加新金手指"
-#: ../win32/gui/CheatDlg.c:167
-#: ../data/pcsx.glade2:2332
+#: ../win32/gui/CheatDlg.c:167 ../data/pcsx.glade2:2332
msgid "Edit Cheat Codes"
msgstr "編輯金手指"
@@ -160,8 +141,7 @@ msgstr "存儲為(&S)..."
msgid "&Close"
msgstr "關閉(&C)"
-#: ../win32/gui/CheatDlg.c:186
-#: ../gui/Cheat.c:411
+#: ../win32/gui/CheatDlg.c:186 ../gui/Cheat.c:411
msgid "Description"
msgstr "描述"
@@ -169,8 +149,7 @@ msgstr "描述"
msgid "Enabled"
msgstr "開啟"
-#: ../win32/gui/CheatDlg.c:283
-#: ../win32/gui/CheatDlg.c:312
+#: ../win32/gui/CheatDlg.c:283 ../win32/gui/CheatDlg.c:312
msgid "PCSX Cheat Code Files"
msgstr "PCSX 金手指檔 (*.cht)"
@@ -210,8 +189,7 @@ msgstr "不同"
msgid "No Change"
msgstr "無改變"
-#: ../win32/gui/CheatDlg.c:449
-#: ../gui/Cheat.c:583
+#: ../win32/gui/CheatDlg.c:449 ../gui/Cheat.c:583
msgid "Enter the values and start your search."
msgstr "輸入數值並開始搜索。"
@@ -219,50 +197,40 @@ msgstr "輸入數值並開始搜索。"
msgid "No addresses found."
msgstr "未找到位址。"
-#: ../win32/gui/CheatDlg.c:458
-#: ../gui/Cheat.c:541
+#: ../win32/gui/CheatDlg.c:458 ../gui/Cheat.c:541
msgid "Too many addresses found."
msgstr "找到過多位址。"
-#: ../win32/gui/CheatDlg.c:467
-#: ../gui/Cheat.c:550
+#: ../win32/gui/CheatDlg.c:467 ../gui/Cheat.c:550
#, c-format
msgid "%.8X Current: %u (%.2X), Previous: %u (%.2X)"
msgstr "%.8X 當前值: %u (%.2X), 前次值: %u (%.2X)"
-#: ../win32/gui/CheatDlg.c:472
-#: ../gui/Cheat.c:555
+#: ../win32/gui/CheatDlg.c:472 ../gui/Cheat.c:555
#, c-format
msgid "%.8X Current: %u (%.4X), Previous: %u (%.4X)"
msgstr "%.8X 當前值: %u (%.4X), 前次值: %u (%.4X)"
-#: ../win32/gui/CheatDlg.c:477
-#: ../gui/Cheat.c:560
+#: ../win32/gui/CheatDlg.c:477 ../gui/Cheat.c:560
#, c-format
msgid "%.8X Current: %u (%.8X), Previous: %u (%.8X)"
msgstr "%.8X 當前值: %u (%.8X), 前次值: %u (%.8X)"
-#: ../win32/gui/CheatDlg.c:493
-#: ../gui/Cheat.c:575
+#: ../win32/gui/CheatDlg.c:493 ../gui/Cheat.c:575
#, c-format
msgid "Founded Addresses: %d"
msgstr "找到位址: %d"
-#: ../win32/gui/CheatDlg.c:505
-#: ../data/pcsx.glade2:2729
+#: ../win32/gui/CheatDlg.c:505 ../data/pcsx.glade2:2729
msgid "Freeze"
msgstr "固定"
-#: ../win32/gui/CheatDlg.c:506
-#: ../win32/gui/CheatDlg.c:597
+#: ../win32/gui/CheatDlg.c:506 ../win32/gui/CheatDlg.c:597
msgid "Address:"
msgstr "位址:"
-#: ../win32/gui/CheatDlg.c:507
-#: ../win32/gui/CheatDlg.c:598
-#: ../win32/gui/CheatDlg.c:683
-#: ../gui/Cheat.c:644
-#: ../data/pcsx.glade2:2573
+#: ../win32/gui/CheatDlg.c:507 ../win32/gui/CheatDlg.c:598
+#: ../win32/gui/CheatDlg.c:683 ../gui/Cheat.c:644 ../data/pcsx.glade2:2573
msgid "Value:"
msgstr "值:"
@@ -271,34 +239,27 @@ msgstr "值:"
msgid "Freeze %.8X"
msgstr "固定 %.8X"
-#: ../win32/gui/CheatDlg.c:596
-#: ../data/pcsx.glade2:2765
+#: ../win32/gui/CheatDlg.c:596 ../data/pcsx.glade2:2765
msgid "Modify"
msgstr "更改"
-#: ../win32/gui/CheatDlg.c:679
-#: ../gui/Cheat.c:1126
-#: ../data/pcsx.glade2:2502
+#: ../win32/gui/CheatDlg.c:679 ../gui/Cheat.c:1126 ../data/pcsx.glade2:2502
msgid "Cheat Search"
msgstr "搜尋金手指碼"
-#: ../win32/gui/CheatDlg.c:681
-#: ../data/pcsx.glade2:2551
+#: ../win32/gui/CheatDlg.c:681 ../data/pcsx.glade2:2551
msgid "Search For:"
msgstr "搜尋:"
-#: ../win32/gui/CheatDlg.c:682
-#: ../data/pcsx.glade2:2561
+#: ../win32/gui/CheatDlg.c:682 ../data/pcsx.glade2:2561
msgid "Data Type:"
msgstr "數值類型:"
-#: ../win32/gui/CheatDlg.c:684
-#: ../data/pcsx.glade2:2585
+#: ../win32/gui/CheatDlg.c:684 ../data/pcsx.glade2:2585
msgid "Data Base:"
msgstr "數值基:"
-#: ../win32/gui/CheatDlg.c:685
-#: ../data/pcsx.glade2:2645
+#: ../win32/gui/CheatDlg.c:685 ../data/pcsx.glade2:2645
msgid "To:"
msgstr "至:"
@@ -346,133 +307,118 @@ msgstr "十進制"
msgid "Hexadecimal"
msgstr "十六進制"
-#: ../win32/gui/ConfigurePlugins.c:200
-#: ../gui/Gtk2Gui.c:2237
+#: ../win32/gui/ConfigurePlugins.c:206 ../gui/Gtk2Gui.c:2228
msgid "Internal HLE Bios"
msgstr "內部 HLE-Bios"
-#: ../win32/gui/ConfigurePlugins.c:286
+#: ../win32/gui/ConfigurePlugins.c:292
msgid "Configuration not OK!"
msgstr "配置不正確!"
-#: ../win32/gui/ConfigurePlugins.c:286
-#: ../gui/Cheat.c:155
-#: ../gui/Cheat.c:250
+#: ../win32/gui/ConfigurePlugins.c:292 ../gui/Cheat.c:155 ../gui/Cheat.c:250
#: ../gui/LnxMain.c:405
msgid "Error"
msgstr "錯誤"
-#: ../win32/gui/ConfigurePlugins.c:387
+#: ../win32/gui/ConfigurePlugins.c:393
msgid "This plugin reports that should work correctly"
msgstr "此外掛報告其可正常工作。"
-#: ../win32/gui/ConfigurePlugins.c:388
+#: ../win32/gui/ConfigurePlugins.c:394
msgid "This plugin reports that should not work correctly"
msgstr "此外掛報告其不可正常工作。"
-#: ../win32/gui/ConfigurePlugins.c:444
+#: ../win32/gui/ConfigurePlugins.c:450
msgid "Select Plugins Directory"
msgstr "選擇外掛目錄"
-#: ../win32/gui/ConfigurePlugins.c:453
+#: ../win32/gui/ConfigurePlugins.c:459
msgid "Select Bios Directory"
msgstr "選擇 BIOS 目錄"
-#: ../win32/gui/ConfigurePlugins.c:462
+#: ../win32/gui/ConfigurePlugins.c:468
msgid "Configuration"
msgstr "配置"
-#: ../win32/gui/ConfigurePlugins.c:466
+#: ../win32/gui/ConfigurePlugins.c:472
msgid "Graphics"
msgstr "圖像"
-#: ../win32/gui/ConfigurePlugins.c:467
+#: ../win32/gui/ConfigurePlugins.c:473
msgid "First Controller"
msgstr "主控制器"
-#: ../win32/gui/ConfigurePlugins.c:468
+#: ../win32/gui/ConfigurePlugins.c:474
msgid "Second Controller"
msgstr "輔控制器"
-#: ../win32/gui/ConfigurePlugins.c:469
+#: ../win32/gui/ConfigurePlugins.c:475
msgid "Sound"
msgstr "聲音"
-#: ../win32/gui/ConfigurePlugins.c:470
+#: ../win32/gui/ConfigurePlugins.c:476
msgid "Cdrom"
msgstr "CD-ROM"
-#: ../win32/gui/ConfigurePlugins.c:471
+#: ../win32/gui/ConfigurePlugins.c:477
msgid "Bios"
msgstr "BIOS"
-#: ../win32/gui/ConfigurePlugins.c:472
+#: ../win32/gui/ConfigurePlugins.c:478
msgid "Set Bios Directory"
msgstr "設置 BIOS 目錄"
-#: ../win32/gui/ConfigurePlugins.c:473
+#: ../win32/gui/ConfigurePlugins.c:479
msgid "Set Plugins Directory"
msgstr "設置外掛目錄"
-#: ../win32/gui/ConfigurePlugins.c:474
-#: ../win32/gui/ConfigurePlugins.c:477
-#: ../win32/gui/ConfigurePlugins.c:480
-#: ../win32/gui/ConfigurePlugins.c:483
-#: ../win32/gui/ConfigurePlugins.c:486
-#: ../win32/gui/ConfigurePlugins.c:598
+#: ../win32/gui/ConfigurePlugins.c:480 ../win32/gui/ConfigurePlugins.c:483
+#: ../win32/gui/ConfigurePlugins.c:486 ../win32/gui/ConfigurePlugins.c:489
+#: ../win32/gui/ConfigurePlugins.c:492 ../win32/gui/ConfigurePlugins.c:604
msgid "Configure..."
msgstr "配置..."
-#: ../win32/gui/ConfigurePlugins.c:475
-#: ../win32/gui/ConfigurePlugins.c:478
-#: ../win32/gui/ConfigurePlugins.c:481
-#: ../win32/gui/ConfigurePlugins.c:484
-#: ../win32/gui/ConfigurePlugins.c:487
-#: ../win32/gui/ConfigurePlugins.c:599
+#: ../win32/gui/ConfigurePlugins.c:481 ../win32/gui/ConfigurePlugins.c:484
+#: ../win32/gui/ConfigurePlugins.c:487 ../win32/gui/ConfigurePlugins.c:490
+#: ../win32/gui/ConfigurePlugins.c:493 ../win32/gui/ConfigurePlugins.c:605
msgid "Test..."
msgstr "測試..."
-#: ../win32/gui/ConfigurePlugins.c:476
-#: ../win32/gui/ConfigurePlugins.c:479
-#: ../win32/gui/ConfigurePlugins.c:482
-#: ../win32/gui/ConfigurePlugins.c:485
-#: ../win32/gui/ConfigurePlugins.c:488
-#: ../win32/gui/ConfigurePlugins.c:600
+#: ../win32/gui/ConfigurePlugins.c:482 ../win32/gui/ConfigurePlugins.c:485
+#: ../win32/gui/ConfigurePlugins.c:488 ../win32/gui/ConfigurePlugins.c:491
+#: ../win32/gui/ConfigurePlugins.c:494 ../win32/gui/ConfigurePlugins.c:606
msgid "About..."
msgstr "關於..."
-#: ../win32/gui/ConfigurePlugins.c:593
+#: ../win32/gui/ConfigurePlugins.c:599
msgid "NetPlay Configuration"
msgstr "聯網遊戲配置"
-#: ../win32/gui/ConfigurePlugins.c:597
+#: ../win32/gui/ConfigurePlugins.c:603
msgid "NetPlay"
msgstr "聯網遊戲"
-#: ../win32/gui/ConfigurePlugins.c:601
-msgid "Note: The NetPlay Plugin Directory should be the same as the other Plugins."
+#: ../win32/gui/ConfigurePlugins.c:607
+msgid ""
+"Note: The NetPlay Plugin Directory should be the same as the other Plugins."
msgstr "注意: 聯網遊戲外掛應和其它外掛放在同一資料夾中。"
-#: ../win32/gui/plugin.c:90
-#: ../win32/gui/WndMain.c:278
+#: ../win32/gui/plugin.c:90 ../win32/gui/WndMain.c:278
#, c-format
msgid "*PCSX*: Saved State %d"
msgstr "*PCSX*: Saved State %d"
-#: ../win32/gui/plugin.c:91
-#: ../win32/gui/WndMain.c:279
+#: ../win32/gui/plugin.c:91 ../win32/gui/WndMain.c:279
#, c-format
msgid "*PCSX*: Error Saving State %d"
msgstr "*PCSX*: Error Saving State %d"
-#: ../win32/gui/plugin.c:107
-#: ../win32/gui/WndMain.c:256
+#: ../win32/gui/plugin.c:107 ../win32/gui/WndMain.c:256
#, c-format
msgid "*PCSX*: Loaded State %d"
msgstr "*PCSX*: Loaded State %d"
-#: ../win32/gui/plugin.c:108
-#: ../win32/gui/WndMain.c:257
+#: ../win32/gui/plugin.c:108 ../win32/gui/WndMain.c:257
#, c-format
msgid "*PCSX*: Error Loading State %d"
msgstr "*PCSX*: Error Loading State %d"
@@ -519,8 +465,7 @@ msgstr "*PCSX*: CdRom Case Closed"
msgid "Connecting..."
msgstr "正在連接..."
-#: ../win32/gui/plugin.c:179
-#: ../win32/gui/plugin.c:186
+#: ../win32/gui/plugin.c:179 ../win32/gui/plugin.c:186
#, c-format
msgid "Please wait while connecting... %c\n"
msgstr "請稍候,正在連接... %c\n"
@@ -615,9 +560,8 @@ msgstr "德語"
msgid "Greek"
msgstr "希臘語"
-#: ../win32/gui/WndMain.c:80
-#: ../win32/gui/WndMain.c:1522
-#: ../win32/gui/WndMain.c:1524
+#: ../win32/gui/WndMain.c:80 ../win32/gui/WndMain.c:1556
+#: ../win32/gui/WndMain.c:1558
msgid "English"
msgstr "英語"
@@ -661,8 +605,7 @@ msgstr "日語"
msgid "Korean"
msgstr "韓國語"
-#: ../win32/gui/WndMain.c:297
-#: ../win32/gui/WndMain.c:349
+#: ../win32/gui/WndMain.c:297 ../win32/gui/WndMain.c:349
msgid "PCSX State Format"
msgstr "PCSX 記錄格式"
@@ -686,17 +629,13 @@ msgstr "*PCSX*: Saved State %s"
msgid "*PCSX*: Error Saving State %s"
msgstr "*PCSX*: Error Saving State %s"
-#: ../win32/gui/WndMain.c:426
-#: ../win32/gui/WndMain.c:475
-#: ../gui/Gtk2Gui.c:580
-#: ../gui/Gtk2Gui.c:707
+#: ../win32/gui/WndMain.c:426 ../win32/gui/WndMain.c:475 ../gui/Gtk2Gui.c:575
+#: ../gui/Gtk2Gui.c:700
msgid "The CD does not appear to be a valid Playstation CD"
msgstr "此光碟不是一張合法的 PlayStation 光碟。"
-#: ../win32/gui/WndMain.c:432
-#: ../win32/gui/WndMain.c:481
-#: ../gui/Gtk2Gui.c:588
-#: ../gui/Gtk2Gui.c:715
+#: ../win32/gui/WndMain.c:432 ../win32/gui/WndMain.c:481 ../gui/Gtk2Gui.c:583
+#: ../gui/Gtk2Gui.c:708
msgid "Could not load CD-ROM!"
msgstr "無法加載光碟!"
@@ -704,13 +643,11 @@ msgstr "無法加載光碟!"
msgid "Running BIOS is not supported with Internal HLE Bios."
msgstr "內部 HLE BIOS 不支援直接執行。"
-#: ../win32/gui/WndMain.c:661
-#: ../gui/Gtk2Gui.c:1080
+#: ../win32/gui/WndMain.c:661 ../gui/Gtk2Gui.c:1068
msgid "Title"
msgstr "標題"
-#: ../win32/gui/WndMain.c:667
-#: ../gui/Gtk2Gui.c:1086
+#: ../win32/gui/WndMain.c:667 ../gui/Gtk2Gui.c:1074
msgid "Status"
msgstr "狀態"
@@ -730,20 +667,16 @@ msgstr "mid link block"
msgid "terminiting link block"
msgstr "terminiting link block"
-#: ../win32/gui/WndMain.c:864
-#: ../gui/Gtk2Gui.c:1160
+#: ../win32/gui/WndMain.c:864 ../gui/Gtk2Gui.c:1148
msgid "Deleted"
msgstr "已刪除"
-#: ../win32/gui/WndMain.c:865
-#: ../win32/gui/WndMain.c:868
-#: ../gui/Gtk2Gui.c:1162
-#: ../gui/Gtk2Gui.c:1166
+#: ../win32/gui/WndMain.c:865 ../win32/gui/WndMain.c:868 ../gui/Gtk2Gui.c:1150
+#: ../gui/Gtk2Gui.c:1154
msgid "Free"
msgstr "空閑"
-#: ../win32/gui/WndMain.c:867
-#: ../gui/Gtk2Gui.c:1164
+#: ../win32/gui/WndMain.c:867 ../gui/Gtk2Gui.c:1152
msgid "Used"
msgstr "已使用"
@@ -751,18 +684,15 @@ msgstr "已使用"
msgid "Memcard Manager"
msgstr "記憶卡管理器"
-#: ../win32/gui/WndMain.c:965
-#: ../win32/gui/WndMain.c:968
+#: ../win32/gui/WndMain.c:965 ../win32/gui/WndMain.c:968
msgid "Select Mcd"
msgstr "選擇"
-#: ../win32/gui/WndMain.c:966
-#: ../win32/gui/WndMain.c:969
+#: ../win32/gui/WndMain.c:966 ../win32/gui/WndMain.c:969
msgid "Format Mcd"
msgstr "格式化"
-#: ../win32/gui/WndMain.c:967
-#: ../win32/gui/WndMain.c:970
+#: ../win32/gui/WndMain.c:967 ../win32/gui/WndMain.c:970
msgid "Reload Mcd"
msgstr "重新加載"
@@ -798,14 +728,12 @@ msgstr "記憶卡 2"
msgid "Are you sure you want to paste this selection?"
msgstr "是否確認粘貼此選中內容?"
-#: ../win32/gui/WndMain.c:1033
-#: ../win32/gui/WndMain.c:1144
+#: ../win32/gui/WndMain.c:1033 ../win32/gui/WndMain.c:1144
#: ../win32/gui/WndMain.c:1151
msgid "Confirmation"
msgstr "確認"
-#: ../win32/gui/WndMain.c:1144
-#: ../win32/gui/WndMain.c:1151
+#: ../win32/gui/WndMain.c:1144 ../win32/gui/WndMain.c:1151
msgid "Are you sure you want to format this Memory Card?"
msgstr "是否確認格式化此記憶卡?"
@@ -829,8 +757,7 @@ msgstr "黑白電影"
msgid "Disable Cd audio"
msgstr "禁用 CD 音頻"
-#: ../win32/gui/WndMain.c:1206
-#: ../data/pcsx.glade2:1427
+#: ../win32/gui/WndMain.c:1206 ../data/pcsx.glade2:1427
msgid "Autodetect"
msgstr "自動檢測"
@@ -838,222 +765,213 @@ msgstr "自動檢測"
msgid "Enable Interpreter Cpu"
msgstr "啟用解釋執行 CPU"
-#: ../win32/gui/WndMain.c:1208
-#: ../data/pcsx.glade2:1283
+#: ../win32/gui/WndMain.c:1208 ../data/pcsx.glade2:1283
msgid "Enable Console Output"
msgstr "啟用控制台輸出"
-#: ../win32/gui/WndMain.c:1209
+#: ../win32/gui/WndMain.c:1209 ../data/pcsx.glade2:1233
+msgid "Enable Debugger"
+msgstr "啟用調試器"
+
+#: ../win32/gui/WndMain.c:1210
msgid "Spu Irq Always Enabled"
msgstr "SPU IRQ 總是啟用"
-#: ../win32/gui/WndMain.c:1210
-#: ../data/pcsx.glade2:1370
+#: ../win32/gui/WndMain.c:1211 ../data/pcsx.glade2:1370
msgid "Parasite Eve 2, Vandal Hearts 1/2 Fix"
msgstr "Parasite Eve 2, Vandal Hearts 1/2 修正"
-#: ../win32/gui/WndMain.c:1211
-#: ../data/pcsx.glade2:1385
+#: ../win32/gui/WndMain.c:1212 ../data/pcsx.glade2:1385
msgid "InuYasha Sengoku Battle Fix"
msgstr "InuYasha Sengoku 戰斗修正"
-#: ../win32/gui/WndMain.c:1213
-#: ../plugins/dfcdrom/interface.c:194
+#: ../win32/gui/WndMain.c:1214 ../plugins/dfcdrom/interface.c:194
+#: ../plugins/dfinput/dfinput.glade2:447
msgid "Options"
msgstr "選項"
-#: ../win32/gui/WndMain.c:1214
+#: ../win32/gui/WndMain.c:1215
msgid "Psx System Type"
msgstr "Psx 系統類型"
-#: ../win32/gui/WndMain.c:1286
+#: ../win32/gui/WndMain.c:1320
msgid "Psx Mcd Format (*.mcr;*.mc;*.mem;*.vgs;*.mcd;*.gme;*.ddf)"
msgstr "Psx 記憶卡格式 (*.mcr;*.mc;*.mem;*.vgs;*.mcd;*.gme;*.ddf)"
-#: ../win32/gui/WndMain.c:1291
+#: ../win32/gui/WndMain.c:1325
msgid "Psx Memory Card (*.mcr;*.mc)"
msgstr "Psx 記憶卡 (*.mcr;*.mc)"
-#: ../win32/gui/WndMain.c:1296
+#: ../win32/gui/WndMain.c:1330
msgid "CVGS Memory Card (*.mem;*.vgs)"
msgstr "VGS 記憶卡 (*.mem;*.vgs)"
-#: ../win32/gui/WndMain.c:1301
+#: ../win32/gui/WndMain.c:1335
msgid "Bleem Memory Card (*.mcd)"
msgstr "Bleem 記憶卡 (*.mcd)"
-#: ../win32/gui/WndMain.c:1306
+#: ../win32/gui/WndMain.c:1340
msgid "DexDrive Memory Card (*.gme)"
msgstr "DexDrive 記憶卡 (*.gme)"
-#: ../win32/gui/WndMain.c:1311
+#: ../win32/gui/WndMain.c:1345
msgid "DataDeck Memory Card (*.ddf)"
msgstr "DataDeck 記憶卡 (*.ddl)"
-#: ../win32/gui/WndMain.c:1316
-#: ../win32/gui/WndMain.c:1397
-#: ../gui/Cheat.c:319
-#: ../gui/Gtk2Gui.c:516
-#: ../gui/Gtk2Gui.c:658
+#: ../win32/gui/WndMain.c:1350 ../win32/gui/WndMain.c:1431 ../gui/Cheat.c:319
+#: ../gui/Gtk2Gui.c:512 ../gui/Gtk2Gui.c:651
msgid "All Files"
msgstr "所有檔案"
-#: ../win32/gui/WndMain.c:1355
+#: ../win32/gui/WndMain.c:1389
msgid "Psx Exe Format"
msgstr "PSX EXE 格式"
-#: ../win32/gui/WndMain.c:1392
+#: ../win32/gui/WndMain.c:1426
msgid "Psx Isos (*.iso;*.mdf;*.img;*.bin)"
msgstr "Psx 鏡像檔 (*.iso;*.mdf;*.img;*.bin)"
-#: ../win32/gui/WndMain.c:1468
+#: ../win32/gui/WndMain.c:1502
msgid "&File"
msgstr "檔案(&F)"
-#: ../win32/gui/WndMain.c:1469
+#: ../win32/gui/WndMain.c:1503
msgid "E&xit"
msgstr "離開(&X)"
-#: ../win32/gui/WndMain.c:1471
+#: ../win32/gui/WndMain.c:1505
msgid "Run &EXE..."
msgstr "執行 EXE(&E)..."
-#: ../win32/gui/WndMain.c:1472
+#: ../win32/gui/WndMain.c:1506
msgid "Run &BIOS"
msgstr "執行 BIOS(&B)"
-#: ../win32/gui/WndMain.c:1473
+#: ../win32/gui/WndMain.c:1507
msgid "Run &ISO..."
msgstr "執行 ISO(&I)..."
-#: ../win32/gui/WndMain.c:1474
+#: ../win32/gui/WndMain.c:1508
msgid "Run &CD"
msgstr "執行光碟(&C)"
-#: ../win32/gui/WndMain.c:1476
+#: ../win32/gui/WndMain.c:1510
msgid "&Emulator"
msgstr "模擬器(&E)"
-#: ../win32/gui/WndMain.c:1477
+#: ../win32/gui/WndMain.c:1511
msgid "&States"
msgstr "記錄(&S)"
-#: ../win32/gui/WndMain.c:1479
+#: ../win32/gui/WndMain.c:1513
msgid "S&witch ISO..."
msgstr "更換 ISO(&W)..."
-#: ../win32/gui/WndMain.c:1481
+#: ../win32/gui/WndMain.c:1515
msgid "Re&set"
msgstr "複位(&S)"
-#: ../win32/gui/WndMain.c:1482
+#: ../win32/gui/WndMain.c:1516
msgid "&Run"
msgstr "執行(&R)"
-#: ../win32/gui/WndMain.c:1483
+#: ../win32/gui/WndMain.c:1517
msgid "&Save"
msgstr "存儲(&S)"
-#: ../win32/gui/WndMain.c:1484
+#: ../win32/gui/WndMain.c:1518
msgid "&Load"
msgstr "讀取(&L)"
-#: ../win32/gui/WndMain.c:1485
-#: ../win32/gui/WndMain.c:1491
+#: ../win32/gui/WndMain.c:1519 ../win32/gui/WndMain.c:1525
msgid "&Other..."
msgstr "其它(&O)..."
-#: ../win32/gui/WndMain.c:1486
-#: ../win32/gui/WndMain.c:1492
+#: ../win32/gui/WndMain.c:1520 ../win32/gui/WndMain.c:1526
msgid "Slot &5"
msgstr "記錄 5(&5)"
-#: ../win32/gui/WndMain.c:1487
-#: ../win32/gui/WndMain.c:1493
+#: ../win32/gui/WndMain.c:1521 ../win32/gui/WndMain.c:1527
msgid "Slot &4"
msgstr "記錄 4(&4)"
-#: ../win32/gui/WndMain.c:1488
-#: ../win32/gui/WndMain.c:1494
+#: ../win32/gui/WndMain.c:1522 ../win32/gui/WndMain.c:1528
msgid "Slot &3"
msgstr "記錄 3(&3)"
-#: ../win32/gui/WndMain.c:1489
-#: ../win32/gui/WndMain.c:1495
+#: ../win32/gui/WndMain.c:1523 ../win32/gui/WndMain.c:1529
msgid "Slot &2"
msgstr "記錄 2(&2)"
-#: ../win32/gui/WndMain.c:1490
-#: ../win32/gui/WndMain.c:1496
+#: ../win32/gui/WndMain.c:1524 ../win32/gui/WndMain.c:1530
msgid "Slot &1"
msgstr "記錄 1(&1)"
-#: ../win32/gui/WndMain.c:1498
+#: ../win32/gui/WndMain.c:1532
msgid "&Configuration"
msgstr "配置(&C)"
-#: ../win32/gui/WndMain.c:1499
+#: ../win32/gui/WndMain.c:1533
msgid "Cheat &Search..."
msgstr "搜尋金手指碼(&S)..."
-#: ../win32/gui/WndMain.c:1500
+#: ../win32/gui/WndMain.c:1534
msgid "Ch&eat Code..."
msgstr "金手指碼(&E)..."
-#: ../win32/gui/WndMain.c:1503
+#: ../win32/gui/WndMain.c:1537
msgid "&Language"
msgstr "語言(&L)"
-#: ../win32/gui/WndMain.c:1528
+#: ../win32/gui/WndMain.c:1562
msgid "&Memory cards..."
msgstr "記憶卡(&M)..."
-#: ../win32/gui/WndMain.c:1529
+#: ../win32/gui/WndMain.c:1563
msgid "C&PU..."
msgstr "CPU(&P)..."
-#: ../win32/gui/WndMain.c:1531
+#: ../win32/gui/WndMain.c:1565
msgid "&NetPlay..."
msgstr "聯網遊戲(&N)..."
-#: ../win32/gui/WndMain.c:1533
+#: ../win32/gui/WndMain.c:1567
msgid "&Controllers..."
msgstr "控制器(&C)..."
-#: ../win32/gui/WndMain.c:1534
+#: ../win32/gui/WndMain.c:1568
msgid "CD-&ROM..."
msgstr "CD-ROM(&R)..."
-#: ../win32/gui/WndMain.c:1535
+#: ../win32/gui/WndMain.c:1569
msgid "&Sound..."
msgstr "聲音(&S)..."
-#: ../win32/gui/WndMain.c:1536
+#: ../win32/gui/WndMain.c:1570
msgid "&Graphics..."
msgstr "圖像(&G)..."
-#: ../win32/gui/WndMain.c:1538
+#: ../win32/gui/WndMain.c:1572
msgid "&Plugins && Bios..."
msgstr "外掛及 BIOS(&P)..."
-#: ../win32/gui/WndMain.c:1540
+#: ../win32/gui/WndMain.c:1574
msgid "&Help"
msgstr "說明(&H)"
-#: ../win32/gui/WndMain.c:1541
+#: ../win32/gui/WndMain.c:1575
msgid "&About..."
msgstr "關於(&A)..."
-#: ../win32/gui/WndMain.c:1723
+#: ../win32/gui/WndMain.c:1761
msgid "Pcsx Msg"
msgstr "Pcsx 消息"
-#: ../win32/gui/WndMain.c:1726
+#: ../win32/gui/WndMain.c:1764
msgid "Error Loading Symbol"
msgstr "無法加載符號"
-#: ../gui/Cheat.c:117
-#: ../gui/Cheat.c:201
+#: ../gui/Cheat.c:117 ../gui/Cheat.c:201
msgid "Cheat Description:"
msgstr "金手指描述:"
@@ -1061,8 +979,7 @@ msgstr "金手指描述:"
msgid "Open Cheat File"
msgstr "打開金手指檔"
-#: ../gui/Cheat.c:314
-#: ../gui/Cheat.c:354
+#: ../gui/Cheat.c:314 ../gui/Cheat.c:354
msgid "PCSX Cheat Code Files (*.cht)"
msgstr "PCSX 金手指檔 (*.cht)"
@@ -1074,10 +991,8 @@ msgstr "儲存金手指檔"
msgid "All Files (*.*)"
msgstr "所有檔案 (*.*)"
-#: ../gui/Cheat.c:392
-#: ../gui/Cheat.c:1121
-#: ../gui/Gtk2Gui.c:404
-#: ../gui/Gtk2Gui.c:1032
+#: ../gui/Cheat.c:392 ../gui/Cheat.c:1121 ../gui/Gtk2Gui.c:400
+#: ../gui/Gtk2Gui.c:1020
msgid "Error: Glade interface could not be loaded!"
msgstr "錯誤:無法加載 Glade 界面!"
@@ -1105,138 +1020,129 @@ msgstr "新值:"
msgid "Search Results"
msgstr "搜尋結果"
-#: ../gui/Gtk2Gui.c:412
-#: ../data/pcsx.glade2:605
+#: ../gui/Gtk2Gui.c:408 ../data/pcsx.glade2:605
msgid "Configure PCSX"
msgstr "配置 PCSX"
-#: ../gui/Gtk2Gui.c:498
+#: ../gui/Gtk2Gui.c:494
msgid "Select PSX EXE File"
msgstr "選擇 PS EXE 檔案"
-#: ../gui/Gtk2Gui.c:512
+#: ../gui/Gtk2Gui.c:508
msgid "PlayStation Executable Files"
msgstr "PlayStation 執行檔"
-#: ../gui/Gtk2Gui.c:549
+#: ../gui/Gtk2Gui.c:544
msgid "Not a valid PSX file"
msgstr "不是一個合法的 PSX 檔"
-#: ../gui/Gtk2Gui.c:549
+#: ../gui/Gtk2Gui.c:544
msgid "The file does not appear to be a valid Playstation executable"
msgstr "此文件不是一個合法的 PlayStation 執行檔"
-#: ../gui/Gtk2Gui.c:580
-#: ../gui/Gtk2Gui.c:707
+#: ../gui/Gtk2Gui.c:575 ../gui/Gtk2Gui.c:700
msgid "CD ROM failed"
msgstr "CD-ROM 失敗"
-#: ../gui/Gtk2Gui.c:588
+#: ../gui/Gtk2Gui.c:583
msgid "The CD ROM could not be loaded"
msgstr "無法加載 CD-ROM"
-#: ../gui/Gtk2Gui.c:603
+#: ../gui/Gtk2Gui.c:597
msgid "Could not run BIOS"
msgstr "無法執行 BIOS"
-#: ../gui/Gtk2Gui.c:603
+#: ../gui/Gtk2Gui.c:597
msgid "Running BIOS is not supported with Internal HLE BIOS."
msgstr "內部 HLE BIOS 不支援直接執行。"
-#: ../gui/Gtk2Gui.c:633
+#: ../gui/Gtk2Gui.c:626
msgid "Open PSX Disc Image File"
msgstr "打開 PSX 光碟映像檔"
-#: ../gui/Gtk2Gui.c:653
+#: ../gui/Gtk2Gui.c:646
msgid "PSX Image Files (*.bin, *.img, *.mdf, *.iso)"
msgstr "PSX 鏡像檔 (*.bin, *.img, *.mdf, *.iso)"
-#: ../gui/Gtk2Gui.c:891
+#: ../gui/Gtk2Gui.c:880
#, c-format
msgid "Loaded state %s."
msgstr "已讀取記錄 %s。"
-#: ../gui/Gtk2Gui.c:896
+#: ../gui/Gtk2Gui.c:884
#, c-format
msgid "Error loading state %s!"
msgstr "讀取記錄 %s 時出錯。"
-#: ../gui/Gtk2Gui.c:907
+#: ../gui/Gtk2Gui.c:895
#, c-format
msgid "Saved state %s."
msgstr "已存儲記錄 %s"
-#: ../gui/Gtk2Gui.c:909
+#: ../gui/Gtk2Gui.c:897
#, c-format
msgid "Error saving state %s!"
msgstr "存儲記錄 %s 時出錯。"
-#: ../gui/Gtk2Gui.c:943
-#: ../gui/Gtk2Gui.c:970
+#: ../gui/Gtk2Gui.c:931 ../gui/Gtk2Gui.c:958
msgid "Select State File"
msgstr "選擇記錄檔案"
-#: ../gui/Gtk2Gui.c:1074
+#: ../gui/Gtk2Gui.c:1062
msgid "Icon"
msgstr "圖符"
-#: ../gui/Gtk2Gui.c:1092
+#: ../gui/Gtk2Gui.c:1080
msgid "ID"
msgstr "ID"
-#: ../gui/Gtk2Gui.c:1098
+#: ../gui/Gtk2Gui.c:1086
msgid "Name"
msgstr "名稱"
-#: ../gui/Gtk2Gui.c:1258
+#: ../gui/Gtk2Gui.c:1246
msgid "Format this Memory Card?"
msgstr "格式化此記憶卡?"
-#: ../gui/Gtk2Gui.c:1260
-msgid "If you format the memory card, the card will be empty, and any existing data overwritten."
+#: ../gui/Gtk2Gui.c:1248
+msgid ""
+"If you format the memory card, the card will be empty, and any existing data "
+"overwritten."
msgstr "如果您選擇格式化記憶卡,記憶卡將被清空,並且任何現有資料都將被覆蓋。"
-#: ../gui/Gtk2Gui.c:1263
+#: ../gui/Gtk2Gui.c:1251
msgid "Format card"
msgstr "格式化記憶卡"
-#: ../gui/Gtk2Gui.c:1378
+#: ../gui/Gtk2Gui.c:1366
msgid "No space available in the target memory card!"
msgstr "目標記憶卡沒有空餘位置!"
-#: ../gui/Gtk2Gui.c:1520
-#: ../gui/Gtk2Gui.c:1541
-#: ../gui/Gtk2Gui.c:1562
-#: ../gui/Gtk2Gui.c:1583
-#: ../gui/Gtk2Gui.c:1889
+#: ../gui/Gtk2Gui.c:1508 ../gui/Gtk2Gui.c:1529 ../gui/Gtk2Gui.c:1550
+#: ../gui/Gtk2Gui.c:1571 ../gui/Gtk2Gui.c:1880
msgid "No configuration required"
msgstr "不需要配置"
-#: ../gui/Gtk2Gui.c:1520
-#: ../gui/Gtk2Gui.c:1541
-#: ../gui/Gtk2Gui.c:1562
-#: ../gui/Gtk2Gui.c:1583
-#: ../gui/Gtk2Gui.c:1889
+#: ../gui/Gtk2Gui.c:1508 ../gui/Gtk2Gui.c:1529 ../gui/Gtk2Gui.c:1550
+#: ../gui/Gtk2Gui.c:1571 ../gui/Gtk2Gui.c:1880
msgid "This plugin doesn't need to be configured."
msgstr "此外掛需要被配置。"
-#: ../gui/Gtk2Gui.c:1620
+#: ../gui/Gtk2Gui.c:1608
msgid "Memory Card Manager"
msgstr "記憶卡管理器"
-#: ../gui/Gtk2Gui.c:2143
+#: ../gui/Gtk2Gui.c:2134
#, c-format
msgid "Could not open BIOS directory: '%s'\n"
msgstr "無法開啟 BIOS 目錄: \"%s\"\n"
-#: ../gui/Gtk2Gui.c:2173
-#: ../gui/Gtk2Gui.c:2266
-#: ../gui/LnxMain.c:170
+#: ../gui/Gtk2Gui.c:2164 ../gui/Gtk2Gui.c:2257 ../gui/LnxMain.c:170
#, c-format
msgid "Could not open directory: '%s'\n"
msgstr "無法開啟目錄: \"%s\"\n"
-#: ../gui/Gtk2Gui.c:2327
+#: ../gui/Gtk2Gui.c:2318
msgid "Notice"
msgstr "警告"
@@ -1271,7 +1177,9 @@ msgstr ""
#: ../gui/LnxMain.c:350
#, c-format
-msgid "PCSX cannot be configured without using the GUI -- you should restart without -nogui.\n"
+msgid ""
+"PCSX cannot be configured without using the GUI -- you should restart "
+"without -nogui.\n"
msgstr "PCSX 不能在字符界面下配置 -- 請不使用 -nogui 參數重新啟動程式\n"
#: ../gui/LnxMain.c:405
@@ -1288,8 +1196,7 @@ msgstr "無法加載光碟。\n"
msgid "PSX emulator couldn't be initialized.\n"
msgstr "PSX 模擬器無法初期化。\n"
-#: ../gui/Plugin.c:204
-#: ../data/pcsx.glade2:1319
+#: ../gui/Plugin.c:204 ../data/pcsx.glade2:1319
#, c-format
msgid "SIO IRQ Always Enabled"
msgstr "SIO IRQ 總是啟用"
@@ -1359,7 +1266,7 @@ msgstr "無法關閉 \"控制器 2\" 外掛!"
msgid "Error closing GPU plugin!"
msgstr "無法關閉 GPU 外掛!"
-#: ../libpcsxcore/cdriso.c:631
+#: ../libpcsxcore/cdriso.c:639
#, c-format
msgid "Loaded CD Image: %s"
msgstr "已加載 CD 映像: %s"
@@ -1374,11 +1281,27 @@ msgstr "金手指碼已加載: %s\n"
msgid "Cheats saved to: %s\n"
msgstr "金手指碼已保存: %s\n"
-#: ../libpcsxcore/cheat.c:323
-#: ../libpcsxcore/cheat.c:444
+#: ../libpcsxcore/cheat.c:323 ../libpcsxcore/cheat.c:444
msgid "(Untitled)"
msgstr "(未定名)"
+#: ../libpcsxcore/debug.c:317
+#, fuzzy
+msgid "Error allocating memory"
+msgstr "分配內存錯誤!"
+
+#: ../libpcsxcore/debug.c:322
+msgid "Unable to start debug server.\n"
+msgstr ""
+
+#: ../libpcsxcore/debug.c:326
+msgid "Debugger started.\n"
+msgstr ""
+
+#: ../libpcsxcore/debug.c:333
+msgid "Debugger stopped.\n"
+msgstr ""
+
#: ../libpcsxcore/misc.c:380
#, c-format
msgid "Error opening file: %s.\n"
@@ -1524,19 +1447,19 @@ msgstr "Pete Bernert 和 P.E.Op.S. 開發組"
msgid "Configure X11 Video"
msgstr "設定 X11 Video"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:39
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:44
msgid "Initial Window Size:"
msgstr "初始視窗大小:"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:50
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:55
msgid "Stretching:"
msgstr "拉抻:"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:63
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:68
msgid "Dithering:"
msgstr "抖動:"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:76
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:81
msgid ""
"320x240\n"
"640x480\n"
@@ -1554,7 +1477,7 @@ msgstr ""
"1280x1024\n"
"1600x1200"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:95
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:100
msgid ""
"0: None\n"
"1: 2xSai\n"
@@ -1574,7 +1497,7 @@ msgstr ""
"6: HQ2X\n"
"7: HQ3X"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:117
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:122
msgid ""
"0: Off (fastest)\n"
"1: Game dependant\n"
@@ -1584,185 +1507,150 @@ msgstr ""
"1: 取決于遊戲\n"
"2: 總是開啟"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:139
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:145
msgid "Maintain 4:3 Aspect Ratio"
msgstr "維持 4:3 縱橫比"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:153
-msgid "Toggle windowed/fullscreen mode."
-msgstr "切換視窗/全螢幕方式。"
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:154
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:160
#: ../plugins/peopsxgl/gpucfg/interface.c:322
msgid "Fullscreen"
msgstr "全螢幕"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:177
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:164
+msgid "Toggle windowed/fullscreen mode."
+msgstr "切換視窗/全螢幕方式。"
+
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:186
msgid "<b>Screen</b>"
msgstr "<b>螢幕</b>"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:203
-msgid "Toggle whether the FPS will be shown."
-msgstr "切換 FPS 是否將被顯示。"
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:204
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:215
msgid "Show FPS"
msgstr "顯示 FPS"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:218
-msgid "Enable this if games display too quickly."
-msgstr "如遊戲顯示過快,請開啟此項。"
-
#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:219
+msgid "Toggle whether the FPS will be shown."
+msgstr "切換 FPS 是否將被顯示。"
+
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:231
msgid "Autodetect FPS limit"
msgstr "自動偵測 FPS 界限"
#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:235
-msgid "Skip frames when rendering."
-msgstr ""
+msgid "Enable this if games display too quickly."
+msgstr "如遊戲顯示過快,請開啟此項。"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:236
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:248
msgid "Enable frame skipping"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:257
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:252
+msgid "Skip frames when rendering."
+msgstr ""
+
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:269
msgid "Set FPS"
msgstr "設定 FPS"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:272
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:286
msgid "200.0"
msgstr "200.0"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:295
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:309
msgid "<b>Framerate</b>"
msgstr "<b>幀率</b>"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:324
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:338
#: ../plugins/peopsxgl/gpucfg/interface.c:568
msgid "Use game fixes"
msgstr "啟用遊戲修補"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:348
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:365
msgid "better g-colors, worse textures"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:363
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:380
msgid "Needed by Dark Forces"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:378
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:393
msgid "Draw quads with triangles"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:394
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:409
msgid "Repeated flat tex triangles"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:410
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:425
msgid "Disable CPU Saving"
msgstr "禁用 CPU Saving"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:426
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:441
msgid "Odd/even bit hack"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:440
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:457
msgid "For precise framerate"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:455
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:472
msgid "Better FPS limit in some"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:470
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:485
msgid "PC FPS calculation"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:486
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:503
msgid "Pandemonium 2"
msgstr "Pandemonium 2"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:501
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:516
msgid "Lazy screen update"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:517
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:534
msgid "Skip every second frame"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:532
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:547
#: ../plugins/peopsxgl/gpucfg/interface.c:640
msgid "Old frame skipping"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:548
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:563
msgid "Expand screen width"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:564
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:579
msgid "Ignore brightness color"
msgstr ""
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:580
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:595
msgid "Disable coordinate check"
msgstr "禁用坐標檢查"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:596
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:613
msgid "Chrono Cross"
msgstr "Chrono Cross"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:609
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:626
msgid "Capcom fighting games"
msgstr "Capcom 格鬥遊戲"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:624
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:641
msgid "Black screens in Lunar"
msgstr "Lunar 中黑螢幕"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:639
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:656
msgid "Compatibility mode"
msgstr "相容方式"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:664
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:428
+#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:681
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:267
msgid "<b>Compatibility</b>"
msgstr "<b>相容性</b>"
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:701
-msgid "About X11 Video Plugin"
-msgstr "關於 X11 Video 外掛"
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:714
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:516
-msgid "Coded by: Pete Bernert and the P.E.Op.S. team"
-msgstr "編寫者: Pete Bernert 及 P.E.Op.S. 開發組"
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:725
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:541
-msgid "Homepage: http://home.t-online.de/home/PeteBernert/"
-msgstr "網址: http://home.t-online.de/home/PeteBernert/"
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:737
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:566
-msgid "EMail: BlackDove@addcom.de"
-msgstr "EMail: BlackDove@addcom.de"
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:750
-msgid "Version: 1.15"
-msgstr "版本: 1.15"
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:762
-msgid "Release date: 2003"
-msgstr "釋出日期: 2003"
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:774
-msgid "<b>PCSX-df Video Plugin Adaption</b>"
-msgstr "<b>PCSX-df 圖像外掛</b>"
-
-#: ../plugins/dfxvideo/gpucfg-0.1df/dfxvideo.glade2:787
-msgid "XVideo Support: Stephen Chao"
-msgstr "XVideo 支援: Stephen Chao"
-
#: ../data/pcsx.glade2:9
msgid "PCSX"
msgstr "PCSX"
@@ -1811,33 +1699,27 @@ msgstr "更換 ISO(_W)"
msgid "_Save State"
msgstr "存儲記錄(_S)"
-#: ../data/pcsx.glade2:200
-#: ../data/pcsx.glade2:281
+#: ../data/pcsx.glade2:200 ../data/pcsx.glade2:281
msgid "Slot _1"
msgstr "記錄 _1"
-#: ../data/pcsx.glade2:209
-#: ../data/pcsx.glade2:290
+#: ../data/pcsx.glade2:209 ../data/pcsx.glade2:290
msgid "Slot _2"
msgstr "記錄 _2"
-#: ../data/pcsx.glade2:218
-#: ../data/pcsx.glade2:299
+#: ../data/pcsx.glade2:218 ../data/pcsx.glade2:299
msgid "Slot _3"
msgstr "記錄 _3"
-#: ../data/pcsx.glade2:227
-#: ../data/pcsx.glade2:308
+#: ../data/pcsx.glade2:227 ../data/pcsx.glade2:308
msgid "Slot _4"
msgstr "記錄 _4"
-#: ../data/pcsx.glade2:236
-#: ../data/pcsx.glade2:317
+#: ../data/pcsx.glade2:236 ../data/pcsx.glade2:317
msgid "Slot _5"
msgstr "記錄 _5"
-#: ../data/pcsx.glade2:244
-#: ../data/pcsx.glade2:325
+#: ../data/pcsx.glade2:244 ../data/pcsx.glade2:325
msgid "_Other..."
msgstr "其它(_O)..."
@@ -1941,10 +1823,6 @@ msgstr "<b>BIOS</b>"
msgid "Configure CPU"
msgstr "配置 CPU"
-#: ../data/pcsx.glade2:1233
-msgid "Enable Debugger"
-msgstr "啟用調試器"
-
#: ../data/pcsx.glade2:1251
msgid "SPU IRQ Always Enabled"
msgstr "SPU IRQ 總是啟用"
@@ -1993,13 +1871,11 @@ msgstr "<b>聯網遊戲</b>"
msgid "Configure Memory Cards"
msgstr "配置記憶卡"
-#: ../data/pcsx.glade2:1722
-#: ../data/pcsx.glade2:2118
+#: ../data/pcsx.glade2:1722 ../data/pcsx.glade2:2118
msgid "Format"
msgstr "格式化"
-#: ../data/pcsx.glade2:1772
-#: ../data/pcsx.glade2:2168
+#: ../data/pcsx.glade2:1772 ../data/pcsx.glade2:2168
msgid "Reload"
msgstr "重新加載"
@@ -2007,14 +1883,11 @@ msgstr "重新加載"
msgid "<b>Memory Card 1</b>"
msgstr "<b>記憶卡 1</b>"
-#: ../data/pcsx.glade2:1876
-#: ../data/pcsx.glade2:1926
-#: ../data/pcsx.glade2:2801
+#: ../data/pcsx.glade2:1876 ../data/pcsx.glade2:1926 ../data/pcsx.glade2:2801
msgid "Copy"
msgstr "複制"
-#: ../data/pcsx.glade2:1976
-#: ../data/pcsx.glade2:2026
+#: ../data/pcsx.glade2:1976 ../data/pcsx.glade2:2026
msgid "Un/Delete"
msgstr "刪除/恢複"
@@ -2077,7 +1950,6 @@ msgstr ""
"the Free Software Foundation, Inc."
#: ../data/pcsx.glade2:2310
-#: ../plugins/dfinput/dfinput.glade2:212
msgid "translator-credits"
msgstr "Wei Mingzhi <whistler@openoffice.org>"
@@ -2148,23 +2020,23 @@ msgid ""
"Coded by Pete Bernert and the P.E.Op.S. team\n"
msgstr ""
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:9
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:8
msgid "Configure Sound"
msgstr "設定聲音"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:62
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:41
msgid "Volume:"
msgstr "音量:"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:90
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:53
msgid "Interpolation:"
msgstr ""
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:118
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:67
msgid "Reverb:"
msgstr "回響:"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:146
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:80
msgid ""
"Low\n"
"Medium\n"
@@ -2176,7 +2048,7 @@ msgstr ""
"高\n"
"最高"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:165
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:94
msgid ""
"Off\n"
"Simple\n"
@@ -2186,7 +2058,7 @@ msgstr ""
"簡易\n"
"Playstation"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:184
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:110
msgid ""
"None\n"
"Simple\n"
@@ -2194,68 +2066,44 @@ msgid ""
"Cubic"
msgstr ""
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:208
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:131
msgid "<b>General</b>"
msgstr "<b>一般</b>"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:264
-msgid "Enable or disable XA music."
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:162
+msgid "Adjust XA speed"
msgstr ""
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:266
-msgid "Enable XA"
-msgstr "開啟 XA"
-
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:284
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:166
msgid "Choose this if XA music is played too quickly."
msgstr ""
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:286
-msgid "Adjust XA speed"
-msgstr ""
-
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:308
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:183
msgid "<b>XA Music</b>"
msgstr "<b>XA 音樂</b>"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:364
-msgid "Use the asynchronous SPU interface."
-msgstr ""
-
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:366
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:214
msgid "High compatibility mode"
msgstr ""
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:384
-msgid "Wait for CPU; only useful for some games."
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:218
+msgid "Use the asynchronous SPU interface."
msgstr ""
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:386
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:230
msgid "SPU IRQ Wait"
msgstr "SPU IRQ 等待"
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:404
-msgid "Play only one channel for a performance boost."
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:234
+msgid "Wait for CPU; only useful for some games."
msgstr ""
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:406
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:246
msgid "Single channel sound"
msgstr ""
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:486
-msgid "About Sound Plugin"
-msgstr ""
-
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:592
-msgid "Version: 1.6"
-msgstr "版本: 1.6"
-
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:617
-msgid "Release date: 05.04.2003"
-msgstr "釋出日期: 05.04.2003"
-
-#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:642
-msgid "<b>PCSX-df Sound Plugin Adaption</b>"
+#: ../plugins/dfsound/spucfg-0.1df/dfsound.glade2:250
+msgid "Play only one channel for a performance boost."
msgstr ""
#: ../plugins/dfcdrom/cdr.c:58
@@ -2658,74 +2506,326 @@ msgstr "網址: http://www.pbernert.com"
msgid "Version: 1.78"
msgstr "版本: 1.78"
-#: ../plugins/dfinput/pad.c:59
-msgid "Gamepad/Keyboard Input"
-msgstr "手把/鍵盤輸入"
+#: ../plugins/dfinput/cfg-gtk2.c:48
+msgid "D-Pad Up"
+msgstr ""
-#: ../plugins/dfinput/pad.c:61
-msgid "Keyboard Input"
-msgstr "鍵盤輸入"
+#: ../plugins/dfinput/cfg-gtk2.c:49
+msgid "D-Pad Down"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:50
+msgid "D-Pad Left"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:51
+msgid "D-Pad Right"
+msgstr ""
-#: ../plugins/dfinput/dfinput.glade2:7
-msgid "Configure Gamepad/Keyboard"
-msgstr "設定手把/鍵盤"
+#: ../plugins/dfinput/cfg-gtk2.c:52
+#, fuzzy
+msgid "Cross"
+msgstr "CD-ROM"
+
+#: ../plugins/dfinput/cfg-gtk2.c:53
+msgid "Circle"
+msgstr ""
-#: ../plugins/dfinput/dfinput.glade2:25
-msgid "Pad number:"
+#: ../plugins/dfinput/cfg-gtk2.c:54
+msgid "Square"
msgstr ""
-#: ../plugins/dfinput/dfinput.glade2:36
-msgid "1"
+#: ../plugins/dfinput/cfg-gtk2.c:55
+#, fuzzy
+msgid "Triangle"
+msgstr "範圍"
+
+#: ../plugins/dfinput/cfg-gtk2.c:56
+#, fuzzy
+msgid "L1"
+msgstr "1"
+
+#: ../plugins/dfinput/cfg-gtk2.c:57
+#, fuzzy
+msgid "R1"
msgstr "1"
-#: ../plugins/dfinput/dfinput.glade2:51
-msgid "2"
+#: ../plugins/dfinput/cfg-gtk2.c:58
+#, fuzzy
+msgid "L2"
msgstr "2"
-#: ../plugins/dfinput/dfinput.glade2:73
-msgid "Device file:"
+#: ../plugins/dfinput/cfg-gtk2.c:59
+#, fuzzy
+msgid "R2"
+msgstr "2"
+
+#: ../plugins/dfinput/cfg-gtk2.c:60
+msgid "L3"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:61
+msgid "R3"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:62
+#, fuzzy
+msgid "Select"
+msgstr "選擇"
+
+#: ../plugins/dfinput/cfg-gtk2.c:63
+#, fuzzy
+msgid "Start"
+msgstr "狀態"
+
+#: ../plugins/dfinput/cfg-gtk2.c:67
+msgid "L-Stick X"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:68
+msgid "L-Stick Y"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:69
+msgid "R-Stick X"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:70
+msgid "R-Stick Y"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:98
+msgid "Centered"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:98
+msgid "Up"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:98
+msgid "Right"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:98
+msgid "Rightup"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:99
+msgid "Down"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:99
+msgid "Rightdown"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:99
+msgid "Left"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:99
+msgid "Leftup"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:100
+msgid "Leftdown"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:104
+#, c-format
+msgid "Joystick: Button %d"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:108
+#, c-format
+msgid "Joystick: Axis %d%c"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:113
+#, c-format
+msgid "Joystick: Hat %d %s"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:128
+#, fuzzy
+msgid "Keyboard:"
+msgstr "鍵盤輸入"
+
+#: ../plugins/dfinput/cfg-gtk2.c:132 ../plugins/dfinput/cfg-gtk2.c:140
+#, c-format
+msgid "(Not Set)"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:142
+#, c-format
+msgid "Joystick: Axis %d%s"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:142
+msgid " (Reversed)"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:378
+#, fuzzy
+msgid "Device not set"
msgstr "裝置檔案:"
-#: ../plugins/dfinput/dfinput.glade2:104
-msgid "Multi-threaded"
-msgstr "多執行緒"
+#: ../plugins/dfinput/cfg-gtk2.c:378
+msgid "Please select a valid Joystick Device"
+msgstr ""
-#: ../plugins/dfinput/dfinput.glade2:118
-msgid "Analog"
+#: ../plugins/dfinput/cfg-gtk2.c:384
+msgid "Device open error"
msgstr ""
-#: ../plugins/dfinput/dfinput.glade2:155
-msgid "<b>Button Configuration</b>"
-msgstr "<b>按鍵設定</b>"
+#: ../plugins/dfinput/cfg-gtk2.c:384
+msgid "Unable to open Joystick Device"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:475
+#, fuzzy
+msgid "None"
+msgstr "否"
+
+#: ../plugins/dfinput/cfg-gtk2.c:517
+#, fuzzy
+msgid "Gamepad/Keyboard Input Configuration"
+msgstr "手把/鍵盤輸入"
+
+#: ../plugins/dfinput/cfg-gtk2.c:523 ../plugins/dfinput/cfg-gtk2.c:543
+msgid "Key"
+msgstr ""
+
+#: ../plugins/dfinput/cfg-gtk2.c:529 ../plugins/dfinput/cfg-gtk2.c:549
+msgid "Button"
+msgstr ""
+
+#: ../plugins/dfinput/pad.c:23
+#, fuzzy
+msgid "Gamepad/Keyboard Input (ePSXe)"
+msgstr "手把/鍵盤輸入"
+
+#: ../plugins/dfinput/pad.c:25
+msgid "Gamepad/Keyboard Input"
+msgstr "手把/鍵盤輸入"
+
+#: ../plugins/dfinput/dfinput.glade2:34 ../plugins/dfinput/dfinput.glade2:231
+#, fuzzy
+msgid "Device:"
+msgstr "裝置檔案:"
+
+#: ../plugins/dfinput/dfinput.glade2:65 ../plugins/dfinput/dfinput.glade2:262
+#, fuzzy
+msgid "Type:"
+msgstr "數值類型:"
+
+#: ../plugins/dfinput/dfinput.glade2:77 ../plugins/dfinput/dfinput.glade2:274
+msgid ""
+"Digital Pad\n"
+"Analog Pad"
+msgstr ""
+
+#: ../plugins/dfinput/dfinput.glade2:148 ../plugins/dfinput/dfinput.glade2:345
+#, fuzzy
+msgid "Change"
+msgstr "無改變"
+
+#: ../plugins/dfinput/dfinput.glade2:184 ../plugins/dfinput/dfinput.glade2:381
+#, fuzzy
+msgid "Reset"
+msgstr "複位(&S)"
#: ../plugins/dfinput/dfinput.glade2:209
-msgid "Based on PadJoy by Erich Kitzmüller (ammoq@ammoq.com)"
-msgstr "基於由 Erich Kitzmüller (ammoq@ammoq.com) 編寫的 PadJoy"
+#, fuzzy
+msgid "Controller 1"
+msgstr "控制器 2:"
+
+#: ../plugins/dfinput/dfinput.glade2:411
+#, fuzzy
+msgid "Controller 2"
+msgstr "控制器 2:"
+
+#: ../plugins/dfinput/dfinput.glade2:426
+#, fuzzy
+msgid "Multi-Threaded (Recommended)"
+msgstr "多執行緒"
+
+#~ msgid "Configure Gamepad/Keyboard"
+#~ msgstr "設定手把/鍵盤"
+
+#~ msgid "<b>Button Configuration</b>"
+#~ msgstr "<b>按鍵設定</b>"
+
+#~ msgid "Based on PadJoy by Erich Kitzmüller (ammoq@ammoq.com)"
+#~ msgstr "基於由 Erich Kitzmüller (ammoq@ammoq.com) 編寫的 PadJoy"
+
+#~ msgid "About X11 Video Plugin"
+#~ msgstr "關於 X11 Video 外掛"
+
+#~ msgid "Coded by: Pete Bernert and the P.E.Op.S. team"
+#~ msgstr "編寫者: Pete Bernert 及 P.E.Op.S. 開發組"
+
+#~ msgid "Homepage: http://home.t-online.de/home/PeteBernert/"
+#~ msgstr "網址: http://home.t-online.de/home/PeteBernert/"
+
+#~ msgid "EMail: BlackDove@addcom.de"
+#~ msgstr "EMail: BlackDove@addcom.de"
+
+#~ msgid "Version: 1.15"
+#~ msgstr "版本: 1.15"
+
+#~ msgid "Release date: 2003"
+#~ msgstr "釋出日期: 2003"
+
+#~ msgid "<b>PCSX-df Video Plugin Adaption</b>"
+#~ msgstr "<b>PCSX-df 圖像外掛</b>"
+
+#~ msgid "XVideo Support: Stephen Chao"
+#~ msgstr "XVideo 支援: Stephen Chao"
+
+#~ msgid "Enable XA"
+#~ msgstr "開啟 XA"
+
+#~ msgid "Version: 1.6"
+#~ msgstr "版本: 1.6"
+
+#~ msgid "Release date: 05.04.2003"
+#~ msgstr "釋出日期: 05.04.2003"
#~ msgid "Controller _1..."
#~ msgstr "控制器 _1..."
+
#~ msgid "Controller _2..."
#~ msgstr "控制器 _2..."
+
#~ msgid "_Graphics"
#~ msgstr "圖像(_G)"
+
#~ msgid "_Sound"
#~ msgstr "聲音(_S)"
+
#~ msgid "CD-_ROM"
#~ msgstr "CD-_ROM"
+
#~ msgid " Yes"
#~ msgstr " 是"
+
#~ msgid "gtk-add"
#~ msgstr "gtk-add"
+
#~ msgid "gtk-edit"
#~ msgstr "gtk-edit"
+
#~ msgid "gtk-delete"
#~ msgstr "gtk-delete"
+
#~ msgid "Disable"
#~ msgstr "禁用"
+
#~ msgid "gtk-open"
#~ msgstr "gtk-open"
+
#~ msgid "gtk-save-as"
#~ msgstr "gtk-save-as"
+
#~ msgid "gtk-close"
#~ msgstr "gtk-close"
-