diff options
| author | SND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2009-10-25 14:21:02 +0000 |
|---|---|---|
| committer | SND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2009-10-25 14:21:02 +0000 |
| commit | 7d0f136239c4dcee9f27adf9f7a8c262fcbfe95f (patch) | |
| tree | 18b5c5292a39fcda65327e2dd32e44e70ef8e5ff | |
| parent | 5408345d8b1cde19a19ddf324d3439ead6e80709 (diff) | |
| download | pcsxr-7d0f136239c4dcee9f27adf9f7a8c262fcbfe95f.tar.gz | |
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@32889 e17a0e51-4ae3-4d35-97c3-1a29b211df97
33 files changed, 4877 insertions, 3996 deletions
@@ -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@ @@ -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, µ) != 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 @@ -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, µ) != 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"><b>Button Configuration</b></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üller (ammoq@ammoq.com)</property> - <property name="authors">Erich Kitzmü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 Binary files differindex e4b5ff4c..29bd55fa 100644 --- a/po/pt_BR.gmo +++ b/po/pt_BR.gmo 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 Binary files differindex 05fea5cd..6b05b4ff 100644 --- a/po/zh_CN.gmo +++ b/po/zh_CN.gmo 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 Binary files differindex e28a391a..c4509572 100644 --- a/po/zh_TW.gmo +++ b/po/zh_TW.gmo 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" - |
