Merge pull request #1 from libretro/master

Rebase
This commit is contained in:
Wes Smith 2019-04-15 22:27:52 -04:00 committed by GitHub
commit b6bb24e016
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
125 changed files with 22925 additions and 21669 deletions

3
.gitignore vendored
View File

@ -6,10 +6,13 @@ src/wx/cmdtab.cpp
src/wx/wxvbam.xrs src/wx/wxvbam.xrs
build/* build/*
build32/* build32/*
vsbuild/*
dependencies/* dependencies/*
vcpkg/*
.vs/* .vs/*
*.o *.o
*.so *.so
*.dll
*.exe *.exe
# vim swap files # vim swap files

3
.gitmodules vendored
View File

@ -1,3 +1,6 @@
[submodule "dependencies"] [submodule "dependencies"]
path = dependencies path = dependencies
url = https://github.com/visualboyadvance-m/dependencies.git url = https://github.com/visualboyadvance-m/dependencies.git
[submodule "vcpkg"]
path = vcpkg
url = https://github.com/Microsoft/vcpkg.git

View File

@ -1,6 +1,9 @@
--- ---
sudo: required sudo: required
services:
- xvfb
matrix: matrix:
fast_finish: true fast_finish: true
include: include:
@ -15,38 +18,38 @@ matrix:
- cd build - cd build
- cmake .. - cmake ..
- make -j2 - make -j2
# - ./visualboyadvance-m --help # - xvfb-run ./visualboyadvance-m --help
cache:
directories:
- "$HOME/.ccache"
- env: BUILD_ENV=mingw-w64
language: cpp
os: linux
dist: trusty
before_script:
- ./installdeps MinGW-w64-x86_64
script:
- mkdir build
- cd build
- /usr/lib/mxe/usr/bin/x86_64-w64-mingw32.static-cmake ..
- make -j2
cache:
directories:
- "$HOME/.ccache"
- env: BUILD_ENV=mingw-w32
language: cpp
os: linux
dist: trusty
before_script:
- ./installdeps MinGW-w64-i686
script:
- mkdir build
- cd build
- /usr/lib/mxe/usr/bin/i686-w64-mingw32.static-cmake ..
- make -j2
cache: cache:
directories: directories:
- "$HOME/.ccache" - "$HOME/.ccache"
# - env: BUILD_ENV=mingw-w64
# language: cpp
# os: linux
# dist: trusty
# before_script:
# - ./installdeps MinGW-w64-x86_64
# script:
# - mkdir build
# - cd build
# - /usr/lib/mxe/usr/bin/x86_64-w64-mingw32.static-cmake ..
# - make -j2
# cache:
# directories:
# - "$HOME/.ccache"
# - env: BUILD_ENV=mingw-w32
# language: cpp
# os: linux
# dist: trusty
# before_script:
# - ./installdeps MinGW-w64-i686
# script:
# - mkdir build
# - cd build
# - /usr/lib/mxe/usr/bin/i686-w64-mingw32.static-cmake ..
# - make -j2
# cache:
# directories:
# - "$HOME/.ccache"
- env: BUILD_ENV=libretro - env: BUILD_ENV=libretro
language: cpp language: cpp
os: linux os: linux

View File

@ -1,3 +1,25 @@
if(COMMAND cmake_policy)
cmake_policy(SET CMP0003 NEW) # link to full path of libs
cmake_policy(SET CMP0005 NEW) # escapes in add_definitions
if(POLICY CMP0077)
cmake_policy(SET CMP0077 NEW) # use vars for options
endif()
if(NOT CMAKE_VERSION VERSION_LESS 3.0)
cmake_policy(SET CMP0043 NEW) # for wxWidgets, use generator expressions
endif()
endif()
option(ENABLE_VCPKG "Use dependencies for Visual Studio from vcpkg" ON)
set(NLS_DEFAULT ON)
# get win32 deps before project declaration, because toolchain is set for vcpkg
set(VCPKG_DEPS zlib libpng SDL2 SFML gettext wxWidgets)
include(${CMAKE_SOURCE_DIR}/cmake/Win32Deps.cmake)
project(VBA-M C CXX) project(VBA-M C CXX)
cmake_minimum_required(VERSION 2.8.12) cmake_minimum_required(VERSION 2.8.12)
@ -12,19 +34,13 @@ endif()
set(ALL_TARGETS fex visualboyadvance-m vbamcore vbam) set(ALL_TARGETS fex visualboyadvance-m vbamcore vbam)
if(COMMAND cmake_policy) set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
cmake_policy(SET CMP0003 NEW) # link to full path of libs
cmake_policy(SET CMP0005 NEW) # escapes in add_definitions
endif()
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
#Output all binaries at top level #Output all binaries at top level
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}) set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR})
option(ENABLE_SDL "Build the SDL port" OFF) option(ENABLE_SDL "Build the SDL port" OFF)
option(ENABLE_WX "Build the wxWidgets port" ON) option(ENABLE_WX "Build the wxWidgets port" ON)
option(ENABLE_DEBUGGER "Enable the debugger" ON) option(ENABLE_DEBUGGER "Enable the debugger" ON)
option(ENABLE_NLS "Enable translations" ON)
option(ENABLE_ASAN "Enable -fsanitize=<option>, address by default, requires debug build" OFF) option(ENABLE_ASAN "Enable -fsanitize=<option>, address by default, requires debug build" OFF)
option(VBAM_STATIC "Try to link all libraries statically" OFF) option(VBAM_STATIC "Try to link all libraries statically" OFF)
@ -37,7 +53,15 @@ if(VBAM_STATIC)
set(OPENAL_STATIC ON) set(OPENAL_STATIC ON)
endif() endif()
set(ASM_DEFAULT OFF) set(ENABLE_BUNDLED_LIBS_DEFAULT OFF)
# on visual studio use all bundled stuff
if(MSVC)
set(ENABLE_BUNDLED_LIBS_DEFAULT ON)
endif()
# XXX: do some stuff with this
#option(ENABLE_BUNDLED_LIBS "Use bundled libraries instead of system libraries" ${ENABLE_BUNDLED_LIBS_DEFAULT})
# use ccache if available, and not already enabled on the command line # use ccache if available, and not already enabled on the command line
# but not with ninja and msys ccache on msys2 # but not with ninja and msys ccache on msys2
@ -51,32 +75,14 @@ if(NOT (WIN32 AND (NOT $ENV{MSYSTEM} STREQUAL "") AND CMAKE_GENERATOR STREQUAL N
endif() endif()
endif() endif()
if(NOT CMAKE_SYSTEM_PROCESSOR)
if(NOT CMAKE_TOOLCHAIN_FILE AND CMAKE_HOST_SYSTEM_PROCESSOR)
set(CMAKE_SYSTEM_PROCESSOR ${CMAKE_HOST_SYSTEM_PROCESSOR})
elseif(CMAKE_TOOLCHAIN_FILE MATCHES mxe)
if(CMAKE_TOOLCHAIN_FILE MATCHES "i[3-9]86")
set(CMAKE_SYSTEM_PROCESSOR i686)
else()
set(CMAKE_SYSTEM_PROCESSOR x86_64)
endif()
endif()
endif()
# turn asm on by default on 32bit x86
if(CMAKE_SYSTEM_PROCESSOR MATCHES "[xX]86|i[3-9]86|[aA][mM][dD]64")
if(CMAKE_C_SIZEOF_DATA_PTR EQUAL 4) # 32 bit
set(ASM_DEFAULT ON)
set(X86_32 ON)
else()
set(AMD64 ON)
endif()
endif()
set(SSP_DEFAULT OFF) set(SSP_DEFAULT OFF)
option(ENABLE_SSP "Enable gcc stack protector support" ${SSP_DEFAULT}) option(ENABLE_SSP "Enable gcc stack protector support" ${SSP_DEFAULT})
set(ASM_DEFAULT OFF)
include(Architecture)
option(ENABLE_ASM "Enable x86 ASM related options" ${ASM_DEFAULT}) option(ENABLE_ASM "Enable x86 ASM related options" ${ASM_DEFAULT})
# The ARM ASM core seems to be very buggy, see #98 and #54. Default to it being # The ARM ASM core seems to be very buggy, see #98 and #54. Default to it being
@ -110,8 +116,9 @@ option(ENABLE_FFMPEG "Enable ffmpeg A/V recording" ${FFMPEG_DEFAULT})
set(LTO_DEFAULT ON) set(LTO_DEFAULT ON)
if(WIN32 AND CMAKE_COMPILER_IS_GNUCXX AND AMD64) # lto produces buggy binaries for 64 bit win32
# lto produces buggy binaries for 64 bit win32 # and we generally don't want it when debugging because it makes linking slow
if((WIN32 AND CMAKE_COMPILER_IS_GNUCXX AND AMD64) OR CMAKE_BUILD_TYPE MATCHES Debug)
set(LTO_DEFAULT OFF) set(LTO_DEFAULT OFF)
endif() endif()
@ -123,15 +130,22 @@ endif()
option(ENABLE_GBA_LOGGING "Enable extended GBA logging" ON) option(ENABLE_GBA_LOGGING "Enable extended GBA logging" ON)
if(ENABLE_GBA_LOGGING) if(ENABLE_GBA_LOGGING)
add_definitions(-DGBA_LOGGING ) add_definitions(-DGBA_LOGGING )
endif() endif()
if(ENABLE_MMX) if(ENABLE_MMX)
add_definitions(-DMMX) add_definitions(-DMMX)
endif() endif()
# The SDL port can't be built without debugging support # The SDL port can't be built without debugging support
if(NOT ENABLE_DEBUGGER AND ENABLE_SDL) if(NOT ENABLE_DEBUGGER AND ENABLE_SDL)
message(SEND_ERROR "The SDL port can't be built without debugging support") message(SEND_ERROR "The SDL port can't be built without debugging support")
endif()
# this has to run after the toolchain is initialized so it can't be in
# Win32deps.cmake
if(MINGW)
include_directories("${CMAKE_SOURCE_DIR}/dependencies/mingw-include")
include_directories("${CMAKE_SOURCE_DIR}/dependencies/mingw-xaudio/include")
endif() endif()
find_package(Git) find_package(Git)
@ -155,7 +169,7 @@ endif()
include_directories(${CMAKE_BINARY_DIR}) include_directories(${CMAKE_BINARY_DIR})
configure_file("${CMAKE_SOURCE_DIR}/src/version.h.in" "${CMAKE_BINARY_DIR}/version.h" @ONLY) configure_file("${CMAKE_SOURCE_DIR}/src/version.h.in" "${CMAKE_BINARY_DIR}/version.h" @ONLY)
if(CMAKE_BUILD_TYPE STREQUAL "Debug") if(CMAKE_BUILD_TYPE MATCHES Debug)
add_definitions(-DDEBUG) add_definitions(-DDEBUG)
else() else()
add_definitions(-DNDEBUG) add_definitions(-DNDEBUG)
@ -183,7 +197,11 @@ endif()
# Look for some dependencies using CMake scripts # Look for some dependencies using CMake scripts
find_package(ZLIB REQUIRED) find_package(ZLIB REQUIRED)
set(OpenGL_GL_PREFERENCE GLVND)
find_package(OpenGL REQUIRED) find_package(OpenGL REQUIRED)
find_package(PNG REQUIRED) find_package(PNG REQUIRED)
if(EXISTS /etc/redhat-release) if(EXISTS /etc/redhat-release)
@ -204,14 +222,21 @@ add_definitions(${SDL2_DEFINITIONS})
if(ENABLE_LINK) if(ENABLE_LINK)
# msys2 does not have static sfml libs atm # msys2 does not have static sfml libs atm
# while on mxe we use static libs # while on mxe we use static libs
if(WIN32 AND ((NOT (MINGW AND MSYS)) OR CMAKE_TOOLCHAIN_FILE MATCHES mxe)) if(WIN32 AND ((NOT (MINGW AND MSYS)) OR CMAKE_TOOLCHAIN_FILE MATCHES mxe) AND NOT CMAKE_TOOLCHAIN_FILE MATCHES vcpkg)
set(SFML_STATIC_LIBRARIES TRUE) set(SFML_STATIC_LIBRARIES TRUE)
endif() endif()
find_package(SFML 2 COMPONENTS network system REQUIRED)
find_package(SFML 2 COMPONENTS network system)
if(NOT SFML_FOUND)
message(WARNING "SFML not found, LINK will be disabled")
set(ENABLE_LINK NO)
endif()
endif() endif()
# set the standard libraries all ports use # set the standard libraries all ports use
set(VBAMCORE_LIBS set(
VBAMCORE_LIBS
vbamcore vbamcore
fex fex
${SDL2_LIBRARY} ${SDL2_LIBRARY}
@ -244,9 +269,9 @@ if(NOT ENABLE_FFMPEG)
endif() endif()
if(ENABLE_LIRC) if(ENABLE_LIRC)
set(WITHLIRC 1) set(WITHLIRC 1)
else() else()
set(WITHLIRC 0) set(WITHLIRC 0)
endif() endif()
include(GNUInstallDirs) include(GNUInstallDirs)
@ -297,6 +322,8 @@ if(NOT ENABLE_ASM_CORE)
add_definitions(-DC_CORE) add_definitions(-DC_CORE)
endif() endif()
option(ENABLE_NLS "Enable translations" ${NLS_DEFAULT})
# Enable internationalization # Enable internationalization
if(ENABLE_NLS) if(ENABLE_NLS)
set(LOCALEDIR ${CMAKE_INSTALL_PREFIX}/share/locale) set(LOCALEDIR ${CMAKE_INSTALL_PREFIX}/share/locale)
@ -332,37 +359,17 @@ if(ENABLE_NLS)
endif() endif()
endif() endif()
# Win32 deps submodule
if(WIN32)
if(NOT EXISTS "${CMAKE_SOURCE_DIR}/dependencies/mingw-xaudio/include")
set(git_checkout FALSE)
find_package(Git)
if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git")
set(git_checkout TRUE)
execute_process(COMMAND "${GIT_EXECUTABLE}" submodule update --init --remote --recursive RESULT_VARIABLE git_status WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}")
endif()
if(NOT (git_checkout AND git_status EQUAL 0))
message(FATAL_ERROR "Please pull in git submodules, e.g.\nrun: git submodule update --init --remote --recursive")
endif()
endif()
if(MINGW)
include_directories("${CMAKE_SOURCE_DIR}/dependencies/mingw-include")
include_directories("${CMAKE_SOURCE_DIR}/dependencies/mingw-xaudio/include")
elseif(MSVC)
set(DEPS_MSVC "${CMAKE_SOURCE_DIR}/dependencies/msvc")
include_directories("${DEPS_MSVC}") # for GL/glext.h and getopt.h
endif()
endif()
include(ProcessorCount) include(ProcessorCount)
ProcessorCount(num_cpus) ProcessorCount(num_cpus)
# Compiler flags # Compiler stuff
if(CMAKE_C_COMPILER_ID STREQUAL Clang AND CMAKE_CXX_COMPILER_ID STREQUAL Clang)
include(LLVMToolchain)
endif()
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL Clang) if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL Clang)
set(LTO_FLAGS "") unset(LTO_FLAGS)
if(ENABLE_LTO) if(ENABLE_LTO)
if(CMAKE_COMPILER_IS_GNUCXX) if(CMAKE_COMPILER_IS_GNUCXX)
if(num_cpus GREATER 1) if(num_cpus GREATER 1)
@ -373,6 +380,21 @@ if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL Clang)
else() else()
set(LTO_FLAGS -flto) set(LTO_FLAGS -flto)
endif() endif()
# check that LTO is not broken before enabling it
set(ORIG_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${LTO_FLAGS}")
include(CheckCXXSourceCompiles)
check_cxx_source_compiles("int main(int argc, char** argv) { return 0; }" LTO_WORKS)
set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS})
if(NOT LTO_WORKS)
message(WARNING "LTO does not seem to be working on your system, if using clang make sure LLVMGold is installed")
unset(LTO_FLAGS)
set(ENABLE_LTO OFF)
endif()
endif() endif()
unset(MY_C_OPT_FLAGS) unset(MY_C_OPT_FLAGS)
@ -441,20 +463,34 @@ if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL Clang)
endif() endif()
endif() endif()
set(MY_C_FLAGS ${MY_C_FLAGS} -fopenmp) set(MY_C_FLAGS ${MY_C_FLAGS} -fopenmp)
endif() endif()
check_cxx_compiler_flag(-fdiagnostics-color=auto COMPILER_COLOR_OUTPUT) if(CMAKE_CXX_COMPILER_ID STREQUAL GNU)
if(COMPILER_COLOR_OUTPUT) unset(COMPILER_COLOR_DIAGNOSTICS)
add_compile_options(-fdiagnostics-color=auto) check_cxx_compiler_flag(-fdiagnostics-color=always COMPILER_COLOR_DIAGNOSTICS)
if(COMPILER_COLOR_DIAGNOSTICS)
add_compile_options(-fdiagnostics-color=always)
else()
unset(COMPILER_COLOR_DIAGNOSTICS)
check_cxx_compiler_flag(-fdiagnostics-color COMPILER_COLOR_DIAGNOSTICS)
if(COMPILER_COLOR_DIAGNOSTICS)
add_compile_options(-fdiagnostics-color)
endif()
endif()
elseif(CMAKE_CXX_COMPILER_ID STREQUAL Clang)
unset(COMPILER_COLOR_DIAGNOSTICS)
check_cxx_compiler_flag(-fcolor-diagnostics COMPILER_COLOR_DIAGNOSTICS)
if(COMPILER_COLOR_DIAGNOSTICS)
add_compile_options(-fcolor-diagnostics)
endif()
endif() endif()
if(MINGW) if(MINGW)
set(MY_C_FLAGS ${MY_C_FLAGS} -static-libgcc -static-libstdc++) set(MY_C_FLAGS ${MY_C_FLAGS} -static-libgcc -static-libstdc++)
endif() endif()
if(CMAKE_BUILD_TYPE STREQUAL Debug) if(CMAKE_BUILD_TYPE MATCHES Debug)
set(MY_C_FLAGS ${MY_C_FLAGS} ${MY_C_DBG_FLAGS} -Wall -Wextra) set(MY_C_FLAGS ${MY_C_FLAGS} ${MY_C_DBG_FLAGS} -Wall -Wextra)
else() else()
set(MY_C_FLAGS ${MY_C_FLAGS} ${MY_C_OPT_FLAGS} -Wno-error) set(MY_C_FLAGS ${MY_C_FLAGS} ${MY_C_OPT_FLAGS} -Wno-error)
@ -537,7 +573,8 @@ endif()
add_subdirectory (fex) add_subdirectory (fex)
set(SRC_MAIN set(
SRC_MAIN
src/Util.cpp src/Util.cpp
src/common/ConfigManager.cpp src/common/ConfigManager.cpp
src/common/dictionary.c src/common/dictionary.c
@ -551,7 +588,8 @@ if(MSVC)
set(SRC_MAIN ${SRC_MAIN} "dependencies/msvc/getopt.c") set(SRC_MAIN ${SRC_MAIN} "dependencies/msvc/getopt.c")
endif() endif()
set(HDR_MAIN set(
HDR_MAIN
src/System.h src/System.h
src/Util.h src/Util.h
src/common/array.h src/common/array.h
@ -577,7 +615,8 @@ if(ENABLE_NLS)
set(HDR_MAIN ${HDR_MAIN} src/NLS.h) set(HDR_MAIN ${HDR_MAIN} src/NLS.h)
endif() endif()
set(SRC_GBA set(
SRC_GBA
src/gba/agbprint.cpp src/gba/agbprint.cpp
src/gba/bios.cpp src/gba/bios.cpp
src/gba/BreakpointStructures.cpp src/gba/BreakpointStructures.cpp
@ -607,7 +646,8 @@ set(SRC_GBA
src/gba/Sram.cpp src/gba/Sram.cpp
) )
set(HDR_GBA set(
HDR_GBA
src/gba/agbprint.h src/gba/agbprint.h
src/gba/bios.h src/gba/bios.h
src/gba/BreakpointStructures.h src/gba/BreakpointStructures.h
@ -630,7 +670,8 @@ set(HDR_GBA
src/gba/Sram.h src/gba/Sram.h
) )
set(SRC_GB set(
SRC_GB
src/gb/GB.cpp src/gb/GB.cpp
src/gb/gbCheats.cpp src/gb/gbCheats.cpp
src/gb/gbDis.cpp src/gb/gbDis.cpp
@ -642,7 +683,8 @@ set(SRC_GB
src/gb/gbSound.cpp src/gb/gbSound.cpp
) )
set(HDR_GB set(
HDR_GB
src/gb/gb.h src/gb/gb.h
src/gb/gbCheats.h src/gb/gbCheats.h
src/gb/gbCodes.h src/gb/gbCodes.h
@ -654,7 +696,8 @@ set(HDR_GB
src/gb/gbSound.h src/gb/gbSound.h
) )
set(SRC_APU set(
SRC_APU
src/apu/Blip_Buffer.cpp src/apu/Blip_Buffer.cpp
src/apu/Effects_Buffer.cpp src/apu/Effects_Buffer.cpp
src/apu/Gb_Apu.cpp src/apu/Gb_Apu.cpp
@ -663,7 +706,8 @@ set(SRC_APU
src/apu/Multi_Buffer.cpp src/apu/Multi_Buffer.cpp
) )
set(HDR_APU set(
HDR_APU
src/apu/blargg_common.h #Unused(?) but in the VS projects src/apu/blargg_common.h #Unused(?) but in the VS projects
src/apu/blargg_config.h #Unused(?) but in the VS projects src/apu/blargg_config.h #Unused(?) but in the VS projects
src/apu/blargg_source.h src/apu/blargg_source.h
@ -674,7 +718,8 @@ set(HDR_APU
src/apu/Multi_Buffer.h src/apu/Multi_Buffer.h
) )
set(SRC_SDL set(
SRC_SDL
src/sdl/SDL.cpp src/sdl/SDL.cpp
src/sdl/filters.cpp src/sdl/filters.cpp
src/sdl/text.cpp src/sdl/text.cpp
@ -684,7 +729,8 @@ set(SRC_SDL
src/sdl/expr-lex.cpp src/sdl/expr-lex.cpp
) )
set(HDR_SDL set(
HDR_SDL
src/sdl/filters.h src/sdl/filters.h
src/sdl/text.h src/sdl/text.h
src/sdl/inputSDL.h src/sdl/inputSDL.h
@ -692,7 +738,8 @@ set(HDR_SDL
src/sdl/exprNode.h src/sdl/exprNode.h
) )
set(SRC_FILTERS set(
SRC_FILTERS
src/filters/2xSaI.cpp src/filters/2xSaI.cpp
src/filters/admame.cpp src/filters/admame.cpp
src/filters/bilinear.cpp src/filters/bilinear.cpp
@ -705,7 +752,8 @@ set(SRC_FILTERS
src/filters/xBRZ/xbrz.cpp src/filters/xBRZ/xbrz.cpp
) )
set(HDR_FILTERS set(
HDR_FILTERS
src/filters/hq2x.h src/filters/hq2x.h
src/filters/interp.h src/filters/interp.h
src/filters/lq2x.h src/filters/lq2x.h
@ -713,18 +761,21 @@ set(HDR_FILTERS
src/filters/xBRZ/xbrz.h src/filters/xBRZ/xbrz.h
) )
set(SRC_HQ_C set(
SRC_HQ_C
src/filters/hq/c/hq_implementation.cpp src/filters/hq/c/hq_implementation.cpp
) )
set(HDR_HQ_C set(
HDR_HQ_C
src/filters/hq/c/hq3x_pattern.h src/filters/hq/c/hq3x_pattern.h
src/filters/hq/c/hq4x_pattern.h src/filters/hq/c/hq4x_pattern.h
src/filters/hq/c/hq_base.h src/filters/hq/c/hq_base.h
src/filters/hq/c/hq_shared.h src/filters/hq/c/hq_shared.h
) )
set(SRC_HQ_ASM set(
SRC_HQ_ASM
src/filters/hq/asm/hq3x_16.asm src/filters/hq/asm/hq3x_16.asm
src/filters/hq/asm/hq3x_32.asm src/filters/hq/asm/hq3x_32.asm
src/filters/hq/asm/hq4x_16.asm src/filters/hq/asm/hq4x_16.asm
@ -744,12 +795,14 @@ else()
endif() endif()
if(ENABLE_DEBUGGER) if(ENABLE_DEBUGGER)
set(SRC_DEBUGGER set(
SRC_DEBUGGER
src/gba/armdis.cpp src/gba/armdis.cpp
src/gba/elf.cpp src/gba/elf.cpp
src/gba/remote.cpp src/gba/remote.cpp
) )
set(HDR_DEBUGGER set(
HDR_DEBUGGER
src/gba/armdis.h src/gba/armdis.h
src/gba/elf.h src/gba/elf.h
src/gba/remote.h src/gba/remote.h
@ -816,13 +869,17 @@ if(ENABLE_SDL)
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/vbam${CMAKE_EXECUTABLE_SUFFIX} DESTINATION ${CMAKE_INSTALL_FULL_BINDIR}) install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/vbam${CMAKE_EXECUTABLE_SUFFIX} DESTINATION ${CMAKE_INSTALL_FULL_BINDIR})
if(WIN32) if(WIN32)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/sdl/vbam.cfg-example install(
DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR} FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/sdl/vbam.cfg-example
RENAME vbam.cfg) DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR}
RENAME vbam.cfg
)
else() else()
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/sdl/vbam.cfg-example install(
DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR} FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/sdl/vbam.cfg-example
RENAME vbam.cfg) DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR}
RENAME vbam.cfg
)
endif() endif()
endif() endif()
@ -864,4 +921,5 @@ set(CPACK_PACKAGE_VERSION_MAJOR "2")
set(CPACK_PACKAGE_VERSION_MINOR "0") set(CPACK_PACKAGE_VERSION_MINOR "0")
set(CPACK_PACKAGE_VERSION_PATCH "0-Git-" ${COMMITHASH}) set(CPACK_PACKAGE_VERSION_PATCH "0-Git-" ${COMMITHASH})
list(APPEND CPACK_SOURCE_IGNORE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/dependencies") list(APPEND CPACK_SOURCE_IGNORE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/dependencies")
list(APPEND CPACK_SOURCE_IGNORE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/vcpkg")
include(CPack) include(CPack)

53
CMakeSettings.json Normal file
View File

@ -0,0 +1,53 @@
{
"configurations": [
{
"name": "x64-Debug",
"generator": "Ninja",
"configurationType": "Debug",
"inheritEnvironments": [
"msvc_x64"
],
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "-v",
"ctestCommandArgs": ""
}, {
"name": "x64-Release",
"generator": "Ninja",
"configurationType": "Release",
"inheritEnvironments": [
"msvc_x64"
],
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "-v",
"ctestCommandArgs": ""
}, {
"name": "x86-Debug",
"generator": "Ninja",
"configurationType": "Debug",
"inheritEnvironments": [
"msvc_x86"
],
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "-v",
"ctestCommandArgs": ""
}, {
"name": "x86-Release",
"generator": "Ninja",
"configurationType": "Release",
"inheritEnvironments": [
"msvc_x86"
],
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "-v",
"ctestCommandArgs": ""
}
]
}

View File

@ -60,10 +60,23 @@ cmake ..
make -j`nproc` make -j`nproc`
``` ```
`./installdeps` is supported on MSys2, Linux (Debian/Ubuntu, Fedora, Arch or `./installdeps` is supported on MSys2, Linux (Debian/Ubuntu, Fedora, Arch,
Solus) and Mac OS X (homebrew, macports or fink.) Solus and RHEL/CentOS) and Mac OS X (homebrew, macports or fink.)
The Ninja cmake generator is also now supported, including on msys2. The Ninja cmake generator is also now supported, including on msys2 and Visual Studio.
### Visual Studio Support
For visual studio, dependency management is handled automatically with vcpkg,
just clone the repository with git and build with cmake. You can do this from
the developer command line as well. 2019 will not work yet for building
dependencies, but you can build the dependencies in 2017 and then use the
project from 2019.
Using your own user-wide installation of vcpkg is supported, just make sure the
environment variable `VCPKG_ROOT` is set.
### Dependencies
If your OS is not supported, you will need the following: If your OS is not supported, you will need the following:

24
cmake/Architecture.cmake Normal file
View File

@ -0,0 +1,24 @@
if(NOT CMAKE_SYSTEM_PROCESSOR)
if(NOT CMAKE_TOOLCHAIN_FILE AND CMAKE_HOST_SYSTEM_PROCESSOR)
set(CMAKE_SYSTEM_PROCESSOR ${CMAKE_HOST_SYSTEM_PROCESSOR})
elseif(CMAKE_TOOLCHAIN_FILE MATCHES mxe)
if(CMAKE_TOOLCHAIN_FILE MATCHES "i[3-9]86")
set(CMAKE_SYSTEM_PROCESSOR i686)
else()
set(CMAKE_SYSTEM_PROCESSOR x86_64)
endif()
endif()
endif()
# turn asm on by default on 32bit x86
# and set WINARCH for windows stuff
if(CMAKE_SYSTEM_PROCESSOR MATCHES "[xX]86|i[3-9]86|[aA][mM][dD]64")
if(CMAKE_C_SIZEOF_DATA_PTR EQUAL 4) # 32 bit
if(NOT (MSVC AND CMAKE_TOOLCHAIN_FILE MATCHES vcpkg))
set(ASM_DEFAULT ON)
endif()
set(X86_32 ON)
else()
set(AMD64 ON)
endif()
endif()

32
cmake/LLVMToolchain.cmake Normal file
View File

@ -0,0 +1,32 @@
function(use_llvm_toolchain)
if(CMAKE_C_COMPILER_ID STREQUAL Clang)
set(compiler "${CMAKE_C_COMPILER}")
elseif(CMAKE_CXX_COMPILER_ID STREQUAL Clang)
set(compiler "${CMAKE_CXX_COMPILER}")
else()
return()
endif()
foreach(tool ar ranlib ld nm objdump as)
execute_process(
COMMAND "${compiler}" -print-prog-name=llvm-${tool}
OUTPUT_VARIABLE prog_path
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(prog_path MATCHES "^/")
if(tool STREQUAL ld)
set(tool linker)
elseif(tool STREQUAL as)
set(tool asm_compiler)
endif()
string(TOUPPER ${tool} utool)
set(CMAKE_${utool} "${prog_path}" PARENT_SCOPE)
set(CMAKE_${utool} "${prog_path}" CACHE FILEPATH "${tool}" FORCE)
endif()
endforeach()
endfunction()
use_llvm_toolchain()

62
cmake/Win32Deps.cmake Normal file
View File

@ -0,0 +1,62 @@
if(WIN32)
# compiler has not been detected yet maybe
if(CMAKE_C_COMPILER MATCHES "cl\\.exe" OR CMAKE_CXX_COMPILER MATCHES "cl\\.exe" OR MSVC OR DEFINED ENV{VisualStudioVersion})
set(VS TRUE)
endif()
set(WINARCH x86)
if(CMAKE_C_COMPILER MATCHES x64 OR CMAKE_CXX_COMPILER MATCHES x64 OR "$ENV{VSCMD_ARG_TGT_ARCH}" MATCHES x64)
set(WINARCH x64)
endif()
# Win32 deps submodules (dependencies and vcpkg)
if(NOT EXISTS "${CMAKE_SOURCE_DIR}/dependencies/mingw-xaudio/include" OR NOT EXISTS "${CMAKE_SOURCE_DIR}/vcpkg/scripts/buildsystems/vcpkg.cmake")
set(git_checkout FALSE)
# find_package(Git)
#if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git")
if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
set(git_checkout TRUE)
execute_process(COMMAND git submodule update --init --remote --recursive RESULT_VARIABLE git_status WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}")
endif()
if(NOT (git_checkout AND git_status EQUAL 0))
message(FATAL_ERROR "Please pull in git submodules, e.g.\nrun: git submodule update --init --remote --recursive")
endif()
endif()
if(VS)
set(DEPS_MSVC "${CMAKE_SOURCE_DIR}/dependencies/msvc")
include_directories("${DEPS_MSVC}") # for GL/glext.h and getopt.h
endif()
if(VS AND ENABLE_VCPKG)
if(NOT DEFINED ENV{VCPKG_ROOT})
set(ENV{VCPKG_ROOT} "${CMAKE_SOURCE_DIR}/vcpkg")
endif()
# build vcpkg if not built
if(NOT EXISTS $ENV{VCPKG_ROOT}/vcpkg.exe)
execute_process(
COMMAND bootstrap-vcpkg.bat
WORKING_DIRECTORY $ENV{VCPKG_ROOT}
)
endif()
foreach(pkg ${VCPKG_DEPS})
#list(APPEND VCPKG_DEPS_QUALIFIED ${pkg}:${WINARCH}-windows-static)
list(APPEND VCPKG_DEPS_QUALIFIED ${pkg}:${WINARCH}-windows)
endforeach()
# build our deps
execute_process(
COMMAND vcpkg install ${VCPKG_DEPS_QUALIFIED}
WORKING_DIRECTORY $ENV{VCPKG_ROOT}
)
set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" CACHE FILEPATH '' FORCE)
include("$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake")
set(NLS_DEFAULT OFF)
set(ENABLE_NLS OFF) # not sure why this is necessary
endif()
endif()

View File

@ -20,6 +20,7 @@ int g_allocCountTemp = 0;
void* SzAlloc(void* p, size_t size) void* SzAlloc(void* p, size_t size)
{ {
(void)p; // unused param
if (size == 0) if (size == 0)
return 0; return 0;
#ifdef _SZ_ALLOC_DEBUG #ifdef _SZ_ALLOC_DEBUG
@ -31,6 +32,7 @@ void* SzAlloc(void* p, size_t size)
void SzFree(void* p, void* address) void SzFree(void* p, void* address)
{ {
(void)p; // unused param
#ifdef _SZ_ALLOC_DEBUG #ifdef _SZ_ALLOC_DEBUG
if (address != 0) { if (address != 0) {
g_allocCount--; g_allocCount--;
@ -42,6 +44,7 @@ void SzFree(void* p, void* address)
void* SzAllocTemp(void* p, size_t size) void* SzAllocTemp(void* p, size_t size)
{ {
(void)p; // unused param
if (size == 0) if (size == 0)
return 0; return 0;
#ifdef _SZ_ALLOC_DEBUG #ifdef _SZ_ALLOC_DEBUG
@ -56,6 +59,7 @@ void* SzAllocTemp(void* p, size_t size)
void SzFreeTemp(void* p, void* address) void SzFreeTemp(void* p, void* address)
{ {
(void)p; // unused param
#ifdef _SZ_ALLOC_DEBUG #ifdef _SZ_ALLOC_DEBUG
if (address != 0) { if (address != 0) {
g_allocCountTemp--; g_allocCountTemp--;

View File

@ -325,24 +325,30 @@ size_t utf8_encode_char( unsigned wide, char * target )
target[5] = 0x80 | ( wide & 0x3F ); target[5] = 0x80 | ( wide & 0x3F );
wide = wide >> 6; wide = wide >> 6;
wide |= 0x4000000; wide |= 0x4000000;
break;
case 5: case 5:
target[4] = 0x80 | ( wide & 0x3F ); target[4] = 0x80 | ( wide & 0x3F );
wide = wide >> 6; wide = wide >> 6;
wide |= 0x200000; wide |= 0x200000;
break;
case 4: case 4:
target[3] = 0x80 | ( wide & 0x3F ); target[3] = 0x80 | ( wide & 0x3F );
wide = wide >> 6; wide = wide >> 6;
wide |= 0x10000; wide |= 0x10000;
break;
case 3: case 3:
target[2] = 0x80 | ( wide & 0x3F ); target[2] = 0x80 | ( wide & 0x3F );
wide = wide >> 6; wide = wide >> 6;
wide |= 0x800; wide |= 0x800;
break;
case 2: case 2:
target[1] = 0x80 | ( wide & 0x3F ); target[1] = 0x80 | ( wide & 0x3F );
wide = wide >> 6; wide = wide >> 6;
wide |= 0xC0; wide |= 0xC0;
case 1: break;
case 1:
target[0] = wide; target[0] = wide;
break;
} }
return count; return count;

File diff suppressed because it is too large Load Diff

View File

@ -155,6 +155,8 @@ linux_installdeps() {
debian_installdeps debian_installdeps
elif [ -f /etc/fedora-release ]; then elif [ -f /etc/fedora-release ]; then
fedora_installdeps fedora_installdeps
elif [ -f /etc/redhat-release ] || [ -f /etc/centos-release ]; then
rhel_installdeps
elif [ -f /etc/arch-release ]; then elif [ -f /etc/arch-release ]; then
archlinux_installdeps archlinux_installdeps
elif [ -f /etc/solus-release ]; then elif [ -f /etc/solus-release ]; then
@ -280,7 +282,7 @@ debian_installdeps() {
installing installing
if [ -z "$target" ]; then if [ -z "$target" ]; then
sudo apt-get -qq update sudo apt-get -qq -y update
sfml_libs=$(apt-cache search libsfml | grep -E 'graphics|window|network' | sed 's/ - .*//') sfml_libs=$(apt-cache search libsfml | grep -E 'graphics|window|network' | sed 's/ - .*//')
@ -302,13 +304,44 @@ debian_installdeps() {
;; ;;
esac esac
mxe_apt_sources='/etc/apt/sources.list.d/mxeapt.list' # if on the travis ubuntu trusty, add xenial sources for newer gnutls
# otherwise the mxe pkg server does not work
if [ -n "$TRAVIS" ]; then
if grep -q trusty /etc/apt/sources.list 2>/dev/null; then
sudo sh -c "sed 's/trusty/xenial/g' /etc/apt/sources.list > /etc/apt/sources.list.d/xenial.list"
fi
fi
sudo apt-get -qq -y update
curl_gnutls_lib=$(apt-cache search libcurl | grep -E '^libcurl[0-9]+-gnutls - ' | sed 's/ - .*//' | sort | tail -1)
sudo apt-get -qy install apt apt-transport-https ca-certificates $curl_gnutls_lib curl
# this is necessary to upgrade libcurl from trusty to xenial on travis
sudo apt-get -qy -f install
debian_rel=trusty
apt_ssl_exceptions=/etc/apt/apt.conf.d/80ssl-exceptions
if ! grep -Eq '(pkg|mirror)\.mxe\.cc' $apt_ssl_exceptions 2>/dev/null; then
sudo sh -c "cat >> $apt_ssl_exceptions" <<EOF
Acquire::https::pkg.mxe.cc::Verify-Peer "false";
Acquire::https::pkg.mxe.cc::Verify-Host "false";
Acquire::https::mirror.mxe.cc::Verify-Peer "false";
Acquire::https::mirror.mxe.cc::Verify-Host "false";
EOF
fi
mxe_apt_sources=/etc/apt/sources.list.d/mxeapt.list
sudo apt-get -qq -y update
sudo apt-get -qq update
if [ -z "$(apt-cache search '^mxe-source$')" ]; then if [ -z "$(apt-cache search '^mxe-source$')" ]; then
if [ ! -f "$mxe_apt_sources" ]; then if [ ! -f "$mxe_apt_sources" ]; then
echo "deb http://pkg.mxe.cc/repos/apt/debian wheezy main" | sudo -- sh -c "cat > $mxe_apt_sources" echo "deb https://pkg.mxe.cc/repos/apt $debian_rel main" | sudo -- sh -c "cat > $mxe_apt_sources"
check sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys D43A795B73B16ABE9643FE1AFD8FFF16DB45C6AB sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C6BF758A33A3A276 || :
else else
error "$mxe_apt_sources exists but mxe packages are not found in apt, either delete it or fix it" error "$mxe_apt_sources exists but mxe packages are not found in apt, either delete it or fix it"
fi fi
@ -318,9 +351,9 @@ debian_installdeps() {
for dep in gcc zlib ffmpeg gettext sdl2 sfml openal wxwidgets; do for dep in gcc zlib ffmpeg gettext sdl2 sfml openal wxwidgets; do
set -- "$@" "mxe-${target}-$dep" set -- "$@" "mxe-${target}-$dep"
done done
check sudo apt-get -qq update check sudo apt-get --allow-unauthenticated -qq -y update
# native wx-common needed for wxrc executable # native wx-common needed for wxrc executable
check sudo apt-get -qy install build-essential cmake ccache wx-common "$@" check sudo apt-get --allow-unauthenticated -qy install build-essential cmake ccache wx-common "$@"
fi fi
build_instructions build_instructions
@ -376,7 +409,7 @@ fedora_installdeps() {
fi fi
# non-multiarch packages first # non-multiarch packages first
check sudo dnf -y --nogpgcheck --best --allowerasing install gcc gcc-c++ make cmake ccache git nasm redhat-rpm-config pkgconfig ccache check sudo dnf -y --nogpgcheck --best --allowerasing install gcc gcc-c++ make cmake ccache git nasm redhat-rpm-config pkgconfig ccache ninja-build
# try to install multiarch libgcc, glibc-devel and pkgconfig if available # try to install multiarch libgcc, glibc-devel and pkgconfig if available
if [ -n "$amd64" ]; then if [ -n "$amd64" ]; then
@ -396,7 +429,7 @@ fedora_installdeps() {
# this is sometimes necessary for rawhide # this is sometimes necessary for rawhide
set -- --exclude='glibc32*' set -- --exclude='glibc32*'
fi fi
for pkg in zlib-devel mesa-libGL-devel ffmpeg-devel gettext-devel libpng-devel SDL2-devel SFML-devel openal-soft-devel wxGTK3-devel gtk2-devel gtk3-devel; do for pkg in zlib-devel mesa-libGL-devel ffmpeg-devel gettext-devel libpng-devel SDL2-devel SFML-devel openal-soft-devel wxGTK3-devel gtk3-devel; do
case $pkg in case $pkg in
*ffmpeg*) *ffmpeg*)
[ -n "$no_ffmpeg" ] && continue [ -n "$no_ffmpeg" ] && continue
@ -504,6 +537,190 @@ fedora_installdeps() {
build_instructions build_instructions
} }
rhel_installdeps() {
rhel=1
ffmpeg=ffmpeg-devel
no_ffmpeg=
rpms_installed=
check_cross
installing
warning=
rhel_release=$(rpm -E %rhel)
tries=3
curdir=$(pwd)
# this source is necessary for mingw packages on rhel, and may be for other things in the future
check sudo yum -y install epel-release
# make sure rpmfusion is installed for ffmpeg
while [ $tries -gt 0 ]; do
mkdir -p "${tmp}/fusion"
cd "${tmp}/fusion"
if ! curl -fLO https://download1.rpmfusion.org/free/el/rpmfusion-free-release-${rhel_release}.noarch.rpm; then
rhel_release=$((rhel_release - 1))
tries=$((tries - 1))
continue
fi
if ! curl -fLO https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-${rhel_release}.noarch.rpm; then
tries=0
break
fi
# check if already installed
if rpm -q rpmfusion-free-release-${rhel_release} >/dev/null 2>&1 && rpm -q rpmfusion-nonfree-release-${rhel_release} >/dev/null 2>&1; then
info_msg 'rpmfusion already installed, good'
break
fi
# otherwise try to install
if ! sudo rpm --nodeps -Uvh ./rpmfusion-*.rpm; then
tries=0
break
fi
break
done
cd "$curdir"
if [ $tries -eq 0 ]; then
warning 'installing rpmfusion repos failed, continuing without ffmpeg'
no_ffmpeg=1
cmake_flags="$cmake_flags -DENABLE_FFMPEG=NO"
fi
# non-multiarch packages first
CMAKE=cmake3
check sudo yum -y install gcc gcc-c++ make cmake3 ccache git nasm redhat-rpm-config pkgconfig ccache ninja-build
# try to install multiarch libgcc, glibc-devel and pkgconfig if available
if [ -n "$amd64" ]; then
for pkg in pkgconfig libgcc glibc-devel; do
if [ "$target" = m32 ]; then
sudo yum -y install "$pkg".i686
else
sudo yum -y install "$pkg".x86_64
fi
done
fi
set --
if [ -z "$target" -o "$target" = m32 ]; then
# try to install both 64 bit and 32 bit versions on 64 bit hosts (see below)
if [ -n "$amd64" ]; then
# this is sometimes necessary for rawhide
set -- --exclude='glibc32*'
fi
warning='RHEL does not currently have SFML packages, LINK support will be disabled'
cmake_flags="$cmake_flags -DENABLE_LINK=NO"
for pkg in zlib-devel mesa-libGL-devel ffmpeg-devel gettext-devel libpng-devel SDL2-devel openal-soft-devel wxGTK3-devel gtk3-devel; do
case $pkg in
*ffmpeg*)
[ -n "$no_ffmpeg" ] && continue
;;
esac
if [ -n "$amd64" ]; then
if [ "$target" = m32 ]; then
set -- "$@" "${pkg}.i686"
else
set -- "$@" "${pkg}.x86_64"
fi
else
set -- "$@" "$pkg"
fi
done
# redhat has a bug where all necessary -devel packages are not pulled in for 32 bit direct -devel deps
# this hack adds them to the list
if [ -n "$amd64" -a "$target" = m32 ]; then
info_msg 'Calculating dependencies, this will take a while..'
curdeps=
newdeps=$@
while [ "$curdeps" != "$newdeps" ]; do
curdeps=$newdeps
set -- $(echo "$@" $(repoquery --deplist "$@" 2>/dev/null | sed -n 's/\.x86_64$/.i686/; s/^ *provider: *\([^ ]*-devel-.*\)$/\1/p' | sort -u) | sed 's/ */\n/g' | sort -u)
newdeps=$@
printf '%s' .
done
echo
info_msg 'Done'
## install the RPMs with rpm --force get around file conflicts
host_rpms=$(echo "$@" | sed 's/\.i686//g')
# first update the host arch versions to reduce chances of conflicts
check sudo yum -y install $host_rpms
oldcwd=$PWD
mkdir "$tmp/rpms"
cd "$tmp/rpms"
check sudo yum -y download "$@"
# first try installing with yum to pull in deps
check sudo yum -y --skip-broken install *.rpm
# follow up with rpm --force to ignore conflicts
check sudo rpm -Uvh --force *.rpm
rm -f *.rpm
# reinstall the host rpms to make sure any overwritten files are the host version
check sudo yum -y download $host_rpms
check sudo yum -y --skip-broken install *.rpm
check sudo rpm -Uvh --force *.rpm
cd "$oldcwd"
rm -rf "$tmp/rpms"
ffmpeg=ffmpeg-devel.i686
rpms_installed=1
fi
else # mingw build
set -- "$@" pkgconfig
case "$target" in
mingw-w64-i686)
target=mingw32
cmake_flags="$cmake_flags -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-cross-MinGW-w64-i686.cmake -DENABLE_LINK=NO"
;;
mingw-w64-x86_64)
target=mingw64
cmake_flags="$cmake_flags -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-cross-MinGW-w64-x86_64.cmake -DENABLE_LINK=NO"
;;
*)
error 'unknown cross target (this should not happen)'
;;
esac
# install static deps
for pkg in zlib gettext libpng SDL2 wxWidgets; do
set -- "$@" "${target}-${pkg}-static"
done
# install deps that are not available as static
for pkg in openal-soft; do
set -- "$@" "${target}-${pkg}"
done
warning='SFML is required for LINK support, RHEL/EPEL does not currently have a MinGW SFML package, if you want LINK support you will need to install it manually'
fi
[ -z "$rpms_installed" ] && check sudo yum -y install "$@"
if ! rpm -q $ffmpeg >/dev/null 2>&1; then
warning 'ffmpeg failed to install (probably due to conflicts)'
cmake_flags="$cmake_flags -DENABLE_FFMPEG=NO"
fi
[ -n "$warning" ] && warning "$warning"
build_instructions
}
suse_installdeps() { suse_installdeps() {
suse=1 suse=1
check_cross check_cross

View File

@ -64,6 +64,62 @@ bool FileExists(const char *filename)
#endif #endif
} }
// Get user-specific config dir manually.
// apple: ~/Library/Application Support/
// windows: %APPDATA%/
// unix: ${XDG_CONFIG_HOME:-~/.config}/
std::string get_xdg_user_config_home()
{
std::string path;
#ifdef __APPLE__
std::string home(getenv("HOME"));
path = home + "/Library/Application Support";
#elif _WIN32
std::string app_data(getenv("LOCALAPPDATA"));
path = app_data;
#else // Unix
char *xdg_var = getenv("XDG_CONFIG_HOME");
if (!xdg_var || !*xdg_var)
{
std::string xdg_default(getenv("HOME"));
path = xdg_default + "/.config";
}
else
{
path = xdg_var;
}
#endif
return path + FILE_SEP;
}
// Get user-specific data dir manually.
// apple: ~/Library/Application Support/
// windows: %APPDATA%/
// unix: ${XDG_DATA_HOME:-~/.local/share}/
std::string get_xdg_user_data_home()
{
std::string path;
#ifdef __APPLE__
std::string home(getenv("HOME"));
path = home + "/Library/Application Support";
#elif _WIN32
std::string app_data(getenv("LOCALAPPDATA"));
path = app_data;
#else // Unix
char *xdg_var = getenv("XDG_DATA_HOME");
if (!xdg_var || !*xdg_var)
{
std::string xdg_default(getenv("HOME"));
path = xdg_default + "/.local/share";
}
else
{
path = xdg_var;
}
#endif
return path + FILE_SEP;
}
void utilReadScreenPixels(uint8_t *dest, int w, int h) void utilReadScreenPixels(uint8_t *dest, int w, int h)
{ {
uint8_t *b = dest; uint8_t *b = dest;

View File

@ -1,8 +1,17 @@
#ifndef UTIL_H #ifndef UTIL_H
#define UTIL_H #define UTIL_H
#include <string>
#include "System.h" #include "System.h"
#ifdef _WIN32
#define FILE_SEP '\\'
#else // MacOS, Unix
#define FILE_SEP '/'
#endif
#define FREAD_UNCHECKED(A,B,C,D) (void)(fread(A,B,C,D) + 1)
enum IMAGE_TYPE { IMAGE_UNKNOWN = -1, IMAGE_GBA = 0, IMAGE_GB = 1 }; enum IMAGE_TYPE { IMAGE_UNKNOWN = -1, IMAGE_GBA = 0, IMAGE_GB = 1 };
// save game // save game
@ -13,6 +22,9 @@ typedef struct {
bool FileExists(const char *filename); bool FileExists(const char *filename);
std::string get_xdg_user_config_home();
std::string get_xdg_user_data_home();
void utilReadScreenPixels(uint8_t *dest, int w, int h); void utilReadScreenPixels(uint8_t *dest, int w, int h);
bool utilWritePNGFile(const char *, int, int, uint8_t *); bool utilWritePNGFile(const char *, int, int, uint8_t *);
bool utilWriteBMPFile(const char *, int, int, uint8_t *); bool utilWriteBMPFile(const char *, int, int, uint8_t *);

File diff suppressed because it is too large Load Diff

View File

@ -1,181 +1,183 @@
#ifndef _CONFIGMANAGER_H #ifndef _CONFIGMANAGER_H
#define _CONFIGMANAGER_H #define _CONFIGMANAGER_H
#pragma once #pragma once
#include "../sdl/filters.h" #include "../sdl/filters.h"
#include <stdio.h> #include <stdio.h>
#ifndef __GNUC__ #ifndef __GNUC__
#define HAVE_DECL_GETOPT 0 #define HAVE_DECL_GETOPT 0
#define __STDC__ 1 #define __STDC__ 1
#ifndef __LIBRETRO__ #ifndef __LIBRETRO__
#include "getopt.h" #include "getopt.h"
#endif #endif
#else // ! __GNUC__ #else // ! __GNUC__
#define HAVE_DECL_GETOPT 1 #define HAVE_DECL_GETOPT 1
#ifndef __LIBRETRO__ #ifndef __LIBRETRO__
#include <getopt.h> #include <getopt.h>
#endif #endif
#endif // ! __GNUC__ #endif // ! __GNUC__
#define MAX_CHEATS 16384 #define MAX_CHEATS 16384
extern bool cpuIsMultiBoot; extern bool cpuIsMultiBoot;
extern bool mirroringEnable; extern bool mirroringEnable;
extern bool parseDebug; extern bool parseDebug;
extern bool speedHack; extern bool speedHack;
extern bool speedup; extern bool speedup;
extern char *rewindMemory; extern char *rewindMemory;
extern const char *aviRecordDir; extern const char *aviRecordDir;
extern const char *biosFileNameGB; extern const char *biosFileNameGB;
extern const char *biosFileNameGBA; extern const char *biosFileNameGBA;
extern const char *biosFileNameGBC; extern const char *biosFileNameGBC;
extern const char *loadDotCodeFile; extern const char *loadDotCodeFile;
extern const char *saveDotCodeFile; extern const char *saveDotCodeFile;
extern const char *linkHostAddr; extern const char *linkHostAddr;
extern const char *movieRecordDir; extern const char *movieRecordDir;
extern const char *romDirGB; extern const char *romDirGB;
extern const char *romDirGBA; extern const char *romDirGBA;
extern const char *romDirGBC; extern const char *romDirGBC;
extern const char *soundRecordDir; extern const char *soundRecordDir;
extern int *rewindSerials; extern int *rewindSerials;
extern int active; extern int active;
extern int agbPrint; extern int agbPrint;
extern int autoFire; extern int autoFire;
extern int autoFireMaxCount; extern int autoFireMaxCount;
extern int autoFireToggle; extern int autoFireToggle;
extern int autoFrameSkip; extern int autoFrameSkip;
extern int autoLoadMostRecent; extern int autoLoadMostRecent;
extern int autoPatch; extern int autoPatch;
extern int autoSaveLoadCheatList; extern int autoSaveLoadCheatList;
extern int aviRecording; extern int aviRecording;
extern int captureFormat; extern int captureFormat;
extern int cheatsEnabled; extern int cheatsEnabled;
extern int cpuDisableSfx; extern int cpuDisableSfx;
extern int cpuSaveType; extern int cpuSaveType;
extern int dinputKeyFocus; extern int dinputKeyFocus;
extern int disableMMX; extern int disableMMX;
extern int disableStatusMessages; extern int disableStatusMessages;
extern int dsoundDisableHardwareAcceleration; extern int dsoundDisableHardwareAcceleration;
extern int filterHeight; extern int filterHeight;
extern int filterMagnification; extern int filterMagnification;
extern int filterMT; // enable multi-threading for pixel filters extern int filterMT; // enable multi-threading for pixel filters
extern int filter; extern int filter;
extern int filterWidth; extern int filterWidth;
extern int frameSkip; extern int frameSkip;
extern int frameskipadjust; extern int frameskipadjust;
extern int fsAdapter; extern int fsAdapter;
extern int fsColorDepth; extern int fsColorDepth;
extern int fsForceChange; extern int fsForceChange;
extern int fsFrequency; extern int fsFrequency;
extern int fsHeight; extern int fsHeight;
extern int fsWidth; extern int fsWidth;
extern int fullScreen; extern int fullScreen;
extern int fullScreenStretch; extern int fullScreenStretch;
extern int gdbBreakOnLoad; extern int gdbBreakOnLoad;
extern int gdbPort; extern int gdbPort;
extern int glFilter; extern int glFilter;
extern int ifbType; extern int ifbType;
extern int joypadDefault; extern int joypadDefault;
extern int languageOption; extern int languageOption;
extern int layerEnable; extern int layerEnable;
extern int layerSettings; extern int layerSettings;
extern int linkAuto; extern int linkAuto;
extern int linkHacks; extern int linkHacks;
extern int linkMode; extern int linkMode;
extern int linkNumPlayers; extern int linkNumPlayers;
extern int linkTimeout; extern int linkTimeout;
extern int maxScale; extern int maxScale;
extern int movieFrame; extern int movieFrame;
extern int moviePlayFrame; extern int moviePlayFrame;
extern int moviePlaying; extern int moviePlaying;
extern int movieRecording; extern int movieRecording;
extern int openGL; extern int openGL;
extern int autoPatch; extern int autoPatch;
extern int optFlashSize; extern int optFlashSize;
extern int optPrintUsage; extern int optPrintUsage;
extern int paused; extern int paused;
extern int pauseWhenInactive; extern int pauseWhenInactive;
extern int recentFreeze; extern int recentFreeze;
extern int renderedFrames; extern int renderedFrames;
extern int rewindCount; extern int rewindCount;
extern int rewindCounter; extern int rewindCounter;
extern int rewindPos; extern int rewindPos;
extern int rewindSaveNeeded; extern int rewindSaveNeeded;
extern int rewindTimer; extern int rewindTimer;
extern int rewindTopPos; extern int rewindTopPos;
// extern int romSize; // extern int romSize;
extern int rtcEnabled; extern int rtcEnabled;
extern int saveType; extern int saveType;
extern int screenMessage; extern int screenMessage;
extern int sensorX; extern int sensorX;
extern int sensorY; extern int sensorY;
extern int showRenderedFrames; extern int showRenderedFrames;
extern int showSpeed; extern int showSpeed;
extern int showSpeedTransparent; extern int showSpeedTransparent;
extern int sizeX; extern int sizeX;
extern int sizeY; extern int sizeY;
extern int skipBios; extern int skipBios;
extern int skipSaveGameBattery; extern int skipSaveGameBattery;
extern int skipSaveGameCheats; extern int skipSaveGameCheats;
extern int soundRecording; extern int soundRecording;
extern int speedupToggle; extern int speedupToggle;
extern int sunBars; extern int sunBars;
extern int surfaceSizeX; extern int surfaceSizeX;
extern int surfaceSizeY; extern int surfaceSizeY;
extern int threadPriority; extern int threadPriority;
extern int tripleBuffering; extern int tripleBuffering;
extern int useBios; extern int useBios;
extern int useBiosFileGB; extern int useBiosFileGB;
extern int useBiosFileGBA; extern int useBiosFileGBA;
extern int useBiosFileGBC; extern int useBiosFileGBC;
extern int videoOption; extern int videoOption;
extern int vsync; extern int vsync;
extern int wasPaused; extern int wasPaused;
extern int windowPositionX; extern uint32_t windowHeight;
extern int windowPositionY; extern int windowPositionX;
extern int winFlashSize; extern int windowPositionY;
extern int winGbBorderOn; extern uint32_t windowWidth;
extern int winGbPrinterEnabled; extern int winFlashSize;
extern int winPauseNextFrame; extern int winGbBorderOn;
extern uint32_t autoFrameSkipLastTime; extern int winGbPrinterEnabled;
extern uint32_t movieLastJoypad; extern int winPauseNextFrame;
extern uint32_t movieNextJoypad; extern uint32_t autoFrameSkipLastTime;
extern uint32_t throttle; extern uint32_t movieLastJoypad;
extern uint32_t speedup_throttle; extern uint32_t movieNextJoypad;
extern uint32_t speedup_frame_skip; extern uint32_t throttle;
extern uint32_t speedup_throttle;
extern int preparedCheats; extern uint32_t speedup_frame_skip;
extern const char *preparedCheatCodes[MAX_CHEATS];
extern int preparedCheats;
// allow up to 100 IPS/UPS/PPF patches given on commandline extern const char *preparedCheatCodes[MAX_CHEATS];
#define PATCH_MAX_NUM 100
extern int patchNum; // allow up to 100 IPS/UPS/PPF patches given on commandline
extern char *patchNames[PATCH_MAX_NUM]; // and so on #define PATCH_MAX_NUM 100
extern int patchNum;
extern int mouseCounter; extern char *patchNames[PATCH_MAX_NUM]; // and so on
extern FilterFunc filterFunction; extern int mouseCounter;
extern IFBFilterFunc ifbFunction;
extern FilterFunc filterFunction;
extern char *homeDir; extern IFBFilterFunc ifbFunction;
extern const char *screenShotDir;
extern const char *saveDir; extern char *homeDir;
extern const char *batteryDir; extern const char *screenShotDir;
extern const char *saveDir;
// Directory within homedir to use for default save location. extern const char *batteryDir;
#define DOT_DIR ".vbam"
// Directory within homedir to use for default save location.
void SetHome(char *_arg0); #define DOT_DIR "visualboyadvance-m"
void SaveConfigFile();
void CloseConfig(); void SetHome(char *_arg0);
uint32_t ReadPrefHex(const char *pref_key, int default_value); void SaveConfigFile();
uint32_t ReadPrefHex(const char *pref_key); void CloseConfig();
uint32_t ReadPref(const char *pref_key, int default_value); uint32_t ReadPrefHex(const char *pref_key, int default_value);
uint32_t ReadPref(const char *pref_key); uint32_t ReadPrefHex(const char *pref_key);
const char *ReadPrefString(const char *pref_key, const char *default_value); uint32_t ReadPref(const char *pref_key, int default_value);
const char *ReadPrefString(const char *pref_key); uint32_t ReadPref(const char *pref_key);
void LoadConfigFile(int argc, char **argv); const char *ReadPrefString(const char *pref_key, const char *default_value);
void LoadConfig(); const char *ReadPrefString(const char *pref_key);
int ReadOpts(int argc, char **argv); void LoadConfigFile(int argc, char **argv);
#endif void LoadConfig();
int ReadOpts(int argc, char **argv);
#endif

View File

@ -58,7 +58,7 @@ class SoundDriver
*/ */
virtual void write(uint16_t *finalWave, int length) = 0; virtual void write(uint16_t *finalWave, int length) = 0;
virtual void setThrottle(unsigned short throttle){}; virtual void setThrottle(unsigned short throttle) = 0;
}; };
#endif // __VBA_SOUND_DRIVER_H__ #endif // __VBA_SOUND_DRIVER_H__

View File

@ -60,11 +60,12 @@ void SoundSDL::read(uint16_t* stream, int length) {
if (!initialized || !emulating) if (!initialized || !emulating)
return; return;
if (!buffer_size()) if (!buffer_size()) {
if (should_wait()) if (should_wait())
SDL_SemWait(data_available); SDL_SemWait(data_available);
else else
return; return;
}
SDL_LockMutex(mutex); SDL_LockMutex(mutex);
@ -136,7 +137,7 @@ bool SoundSDL::init(long sampleRate) {
sound_device = SDL_OpenAudioDevice(NULL, 0, &audio, &audio_spec, SDL_AUDIO_ALLOW_ANY_CHANGE); sound_device = SDL_OpenAudioDevice(NULL, 0, &audio, &audio_spec, SDL_AUDIO_ALLOW_ANY_CHANGE);
if(sound_device < 0) { if(sound_device == 0) {
std::cerr << "Failed to open audio: " << SDL_GetError() << std::endl; std::cerr << "Failed to open audio: " << SDL_GetError() << std::endl;
return false; return false;
} }

View File

@ -45,7 +45,7 @@ protected:
private: private:
RingBuffer<uint16_t> samples_buf; RingBuffer<uint16_t> samples_buf;
SDL_AudioDeviceID sound_device = -1; SDL_AudioDeviceID sound_device = 0;
SDL_mutex* mutex; SDL_mutex* mutex;
SDL_sem* data_available; SDL_sem* data_available;

View File

@ -643,7 +643,7 @@ dictionary *iniparser_load(const char *ininame)
char line[ASCIILINESZ + 1]; char line[ASCIILINESZ + 1];
char section[ASCIILINESZ + 1]; char section[ASCIILINESZ + 1];
char key[ASCIILINESZ + 1]; char key[ASCIILINESZ + 1];
char tmp[ASCIILINESZ + 1]; char tmp[2 * ASCIILINESZ + 3];
char val[ASCIILINESZ + 1]; char val[ASCIILINESZ + 1];
int last = 0; int last = 0;

View File

@ -157,10 +157,10 @@ static inline uint32_t INTERPOLATE (uint32_t A, uint32_t B)
static inline uint32_t Q_INTERPOLATE (uint32_t A, uint32_t B, uint32_t C, uint32_t D) static inline uint32_t Q_INTERPOLATE (uint32_t A, uint32_t B, uint32_t C, uint32_t D)
{ {
register uint32_t x = ((A & qcolorMask) >> 2) + uint32_t x = ((A & qcolorMask) >> 2) +
((B & qcolorMask) >> 2) + ((B & qcolorMask) >> 2) +
((C & qcolorMask) >> 2) + ((D & qcolorMask) >> 2); ((C & qcolorMask) >> 2) + ((D & qcolorMask) >> 2);
register uint32_t y = (A & qlowpixelMask) + uint32_t y = (A & qlowpixelMask) +
(B & qlowpixelMask) + (C & qlowpixelMask) + (D & qlowpixelMask); (B & qlowpixelMask) + (C & qlowpixelMask) + (D & qlowpixelMask);
y = (y >> 2) & qlowpixelMask; y = (y >> 2) & qlowpixelMask;
@ -283,7 +283,7 @@ void Super2xSaI (uint8_t *srcPtr, uint32_t srcPitch,
} else if (color5 == color3 && color2 != color6) { } else if (color5 == color3 && color2 != color6) {
product2b = product1b = color5; product2b = product1b = color5;
} else if (color5 == color3 && color2 == color6) { } else if (color5 == color3 && color2 == color6) {
register int r = 0; int r = 0;
r += GetResult (color6, color5, color1, colorA1); r += GetResult (color6, color5, color1, colorA1);
r += GetResult (color6, color5, color4, colorB1); r += GetResult (color6, color5, color4, colorB1);
@ -415,7 +415,7 @@ void Super2xSaI32 (uint8_t *srcPtr, uint32_t srcPitch,
} else if (color5 == color3 && color2 != color6) { } else if (color5 == color3 && color2 != color6) {
product2b = product1b = color5; product2b = product1b = color5;
} else if (color5 == color3 && color2 == color6) { } else if (color5 == color3 && color2 == color6) {
register int r = 0; int r = 0;
r += GetResult (color6, color5, color1, colorA1); r += GetResult (color6, color5, color1, colorA1);
r += GetResult (color6, color5, color4, colorB1); r += GetResult (color6, color5, color4, colorB1);
@ -575,7 +575,7 @@ void SuperEagle (uint8_t *srcPtr, uint32_t srcPitch, uint8_t *deltaPtr,
} }
} else if (color5 == color3 && color2 == color6) { } else if (color5 == color3 && color2 == color6) {
register int r = 0; int r = 0;
r += GetResult (color6, color5, color1, colorA1); r += GetResult (color6, color5, color1, colorA1);
r += GetResult (color6, color5, color4, colorB1); r += GetResult (color6, color5, color4, colorB1);
@ -710,7 +710,7 @@ void SuperEagle32 (uint8_t *srcPtr, uint32_t srcPitch, uint8_t *deltaPtr,
} }
} else if (color5 == color3 && color2 == color6) { } else if (color5 == color3 && color2 == color6) {
register int r = 0; int r = 0;
r += GetResult (color6, color5, color1, colorA1); r += GetResult (color6, color5, color1, colorA1);
r += GetResult (color6, color5, color4, colorB1); r += GetResult (color6, color5, color4, colorB1);
@ -790,7 +790,7 @@ void _2xSaI (uint8_t *srcPtr, uint32_t srcPitch, uint8_t *deltaPtr,
for (uint32_t finish = width; finish; finish -= inc_bP) { for (uint32_t finish = width; finish; finish -= inc_bP) {
register uint32_t colorA, colorB; uint32_t colorA, colorB;
uint32_t colorC, colorD, uint32_t colorC, colorD,
colorE, colorF, colorG, colorH, colorE, colorF, colorG, colorH,
colorI, colorJ, colorK, colorL, colorI, colorJ, colorK, colorL,
@ -863,7 +863,7 @@ void _2xSaI (uint8_t *srcPtr, uint32_t srcPitch, uint8_t *deltaPtr,
product1 = colorA; product1 = colorA;
product2 = colorA; product2 = colorA;
} else { } else {
register int r = 0; int r = 0;
product1 = INTERPOLATE (colorA, colorC); product1 = INTERPOLATE (colorA, colorC);
product = INTERPOLATE (colorA, colorB); product = INTERPOLATE (colorA, colorB);
@ -950,7 +950,7 @@ void _2xSaI32 (uint8_t *srcPtr, uint32_t srcPitch, uint8_t * /* deltaPtr */,
dP = (uint32_t *) dstPtr; dP = (uint32_t *) dstPtr;
for (uint32_t finish = width; finish; finish -= inc_bP) { for (uint32_t finish = width; finish; finish -= inc_bP) {
register uint32_t colorA, colorB; uint32_t colorA, colorB;
uint32_t colorC, colorD, uint32_t colorC, colorD,
colorE, colorF, colorG, colorH, colorE, colorF, colorG, colorH,
colorI, colorJ, colorK, colorL, colorI, colorJ, colorK, colorL,
@ -1023,7 +1023,7 @@ void _2xSaI32 (uint8_t *srcPtr, uint32_t srcPitch, uint8_t * /* deltaPtr */,
product1 = colorA; product1 = colorA;
product2 = colorA; product2 = colorA;
} else { } else {
register int r = 0; int r = 0;
product1 = INTERPOLATE (colorA, colorC); product1 = INTERPOLATE (colorA, colorC);
product = INTERPOLATE (colorA, colorB); product = INTERPOLATE (colorA, colorB);

View File

@ -152,7 +152,7 @@ inline unsigned int RGBtoYUV_32(unsigned int c)
{ {
// Division through 3 slows down the emulation about 10% !!! // Division through 3 slows down the emulation about 10% !!!
register unsigned char r, g, b; unsigned char r, g, b;
b = c & 0x0000FF; b = c & 0x0000FF;
g = (c & 0x00FF00) >> 8; g = (c & 0x00FF00) >> 8;
r = c >> 16; r = c >> 16;
@ -254,7 +254,7 @@ inline unsigned int RGBtoYUV_16(unsigned short c)
{ {
// Division through 3 slows down the emulation about 10% !!! // Division through 3 slows down the emulation about 10% !!!
register unsigned char r, g, b; unsigned char r, g, b;
#ifdef RGB555 #ifdef RGB555
r = (c & 0x7C00) >> 7; r = (c & 0x7C00) >> 7;
g = (c & 0x03E0) >> 2; g = (c & 0x03E0) >> 2;

View File

@ -20,7 +20,7 @@ static uint8_t *frm3 = NULL;
extern uint32_t qRGB_COLOR_MASK[2]; extern uint32_t qRGB_COLOR_MASK[2];
static void Init() void InterframeFilterInit()
{ {
frm1 = (uint8_t *)calloc(322*242,4); frm1 = (uint8_t *)calloc(322*242,4);
// 1 frame ago // 1 frame ago
@ -163,8 +163,9 @@ static void SmartIB_MMX(uint8_t *srcPtr, uint32_t srcPitch, int width, int start
void SmartIB(uint8_t *srcPtr, uint32_t srcPitch, int width, int starty, int height) void SmartIB(uint8_t *srcPtr, uint32_t srcPitch, int width, int starty, int height)
{ {
(void)width; // unused param
if(frm1 == NULL) { if(frm1 == NULL) {
Init(); InterframeFilterInit();
} }
#ifdef MMX #ifdef MMX
if(cpu_mmx) { if(cpu_mmx) {
@ -329,8 +330,9 @@ static void SmartIB32_MMX(uint8_t *srcPtr, uint32_t srcPitch, int width, int sta
void SmartIB32(uint8_t *srcPtr, uint32_t srcPitch, int width, int starty, int height) void SmartIB32(uint8_t *srcPtr, uint32_t srcPitch, int width, int starty, int height)
{ {
(void)width; // unused param
if(frm1 == NULL) { if(frm1 == NULL) {
Init(); InterframeFilterInit();
} }
#ifdef MMX #ifdef MMX
if(cpu_mmx) { if(cpu_mmx) {
@ -445,8 +447,9 @@ static void MotionBlurIB_MMX(uint8_t *srcPtr, uint32_t srcPitch, int width, int
void MotionBlurIB(uint8_t *srcPtr, uint32_t srcPitch, int width, int starty, int height) void MotionBlurIB(uint8_t *srcPtr, uint32_t srcPitch, int width, int starty, int height)
{ {
(void)width; // unused param
if(frm1 == NULL) { if(frm1 == NULL) {
Init(); InterframeFilterInit();
} }
#ifdef MMX #ifdef MMX
@ -550,8 +553,9 @@ static void MotionBlurIB32_MMX(uint8_t *srcPtr, uint32_t srcPitch, int width, in
void MotionBlurIB32(uint8_t *srcPtr, uint32_t srcPitch, int width, int starty, int height) void MotionBlurIB32(uint8_t *srcPtr, uint32_t srcPitch, int width, int starty, int height)
{ {
(void)width; // unused param
if(frm1 == NULL) { if(frm1 == NULL) {
Init(); InterframeFilterInit();
} }
#ifdef MMX #ifdef MMX
@ -569,7 +573,7 @@ void MotionBlurIB32(uint8_t *srcPtr, uint32_t srcPitch, int width, int starty, i
int sPitch = srcPitch >> 2; int sPitch = srcPitch >> 2;
int pos = 0; int pos = 0;
for (int j = 0; j < height; j++) for (int j = 0; j < height; j++)
for (int i = 0; i < sPitch; i++) { for (int i = 0; i < sPitch; i++) {
uint32_t color = src0[pos]; uint32_t color = src0[pos];
src0[pos] = (((color & colorMask) >> 1) + src0[pos] = (((color & colorMask) >> 1) +

View File

@ -5,7 +5,7 @@
extern int RGB_LOW_BITS_MASK; extern int RGB_LOW_BITS_MASK;
static void Init(); void InterframeFilterInit();
// call ifc to ignore previous frame / when starting new // call ifc to ignore previous frame / when starting new
void InterframeCleanup(); void InterframeCleanup();

View File

@ -1,38 +1,38 @@
// **************************************************************************** // ****************************************************************************
// * This file is part of the HqMAME project. It is distributed under * // * This file is part of the HqMAME project. It is distributed under *
// * GNU General Public License: http://www.gnu.org/licenses/gpl-3.0 * // * GNU General Public License: http://www.gnu.org/licenses/gpl-3.0 *
// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * // * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *
// * * // * *
// * Additionally and as a special exception, the author gives permission * // * Additionally and as a special exception, the author gives permission *
// * to link the code of this program with the MAME library (or with modified * // * to link the code of this program with the MAME library (or with modified *
// * versions of MAME that use the same license as MAME), and distribute * // * versions of MAME that use the same license as MAME), and distribute *
// * linked combinations including the two. You must obey the GNU General * // * linked combinations including the two. You must obey the GNU General *
// * Public License in all respects for all of the code used other than MAME. * // * Public License in all respects for all of the code used other than MAME. *
// * If you modify this file, you may extend this exception to your version * // * If you modify this file, you may extend this exception to your version *
// * of the file, but you are not obligated to do so. If you do not wish to * // * of the file, but you are not obligated to do so. If you do not wish to *
// * do so, delete this exception statement from your version. * // * do so, delete this exception statement from your version. *
// **************************************************************************** // ****************************************************************************
#ifndef XBRZ_CONFIG_HEADER_284578425345 #ifndef XBRZ_CONFIG_HEADER_284578425345
#define XBRZ_CONFIG_HEADER_284578425345 #define XBRZ_CONFIG_HEADER_284578425345
// do NOT include any headers here! used by xBRZ_dll!!! // do NOT include any headers here! used by xBRZ_dll!!!
namespace xbrz namespace xbrz
{ {
struct ScalerCfg { struct ScalerCfg {
ScalerCfg() ScalerCfg()
: luminanceWeight(1), equalColorTolerance(30), dominantDirectionThreshold(3.6), : luminanceWeight(1), equalColorTolerance(30), dominantDirectionThreshold(3.6),
steepDirectionThreshold(2.2), newTestAttribute(0) steepDirectionThreshold(2.2), newTestAttribute(0)
{ {
} }
double luminanceWeight; double luminanceWeight;
double equalColorTolerance; double equalColorTolerance;
double dominantDirectionThreshold; double dominantDirectionThreshold;
double steepDirectionThreshold; double steepDirectionThreshold;
double newTestAttribute; // unused; test new parameters double newTestAttribute; // unused; test new parameters
}; };
} }
#endif #endif

File diff suppressed because it is too large Load Diff

View File

@ -1,102 +1,102 @@
// **************************************************************************** // ****************************************************************************
// * This file is part of the HqMAME project. It is distributed under * // * This file is part of the HqMAME project. It is distributed under *
// * GNU General Public License: http://www.gnu.org/licenses/gpl-3.0 * // * GNU General Public License: http://www.gnu.org/licenses/gpl-3.0 *
// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * // * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *
// * * // * *
// * Additionally and as a special exception, the author gives permission * // * Additionally and as a special exception, the author gives permission *
// * to link the code of this program with the MAME library (or with modified * // * to link the code of this program with the MAME library (or with modified *
// * versions of MAME that use the same license as MAME), and distribute * // * versions of MAME that use the same license as MAME), and distribute *
// * linked combinations including the two. You must obey the GNU General * // * linked combinations including the two. You must obey the GNU General *
// * Public License in all respects for all of the code used other than MAME. * // * Public License in all respects for all of the code used other than MAME. *
// * If you modify this file, you may extend this exception to your version * // * If you modify this file, you may extend this exception to your version *
// * of the file, but you are not obligated to do so. If you do not wish to * // * of the file, but you are not obligated to do so. If you do not wish to *
// * do so, delete this exception statement from your version. * // * do so, delete this exception statement from your version. *
// **************************************************************************** // ****************************************************************************
#ifndef XBRZ_HEADER_3847894708239054 #ifndef XBRZ_HEADER_3847894708239054
#define XBRZ_HEADER_3847894708239054 #define XBRZ_HEADER_3847894708239054
#include "config.h" #include "config.h"
#include <cstddef> //size_t #include <cstddef> //size_t
#include <limits> #include <limits>
#include <stdint.h> //uint32_t #include <stdint.h> //uint32_t
namespace xbrz namespace xbrz
{ {
/* /*
------------------------------------------------------------------------- -------------------------------------------------------------------------
| xBRZ: "Scale by rules" - high quality image upscaling filter by Zenju | | xBRZ: "Scale by rules" - high quality image upscaling filter by Zenju |
------------------------------------------------------------------------- -------------------------------------------------------------------------
using a modified approach of xBR: using a modified approach of xBR:
http://board.byuu.org/viewtopic.php?f=10&t=2248 http://board.byuu.org/viewtopic.php?f=10&t=2248
- new rule set preserving small image features - new rule set preserving small image features
- highly optimized for performance - highly optimized for performance
- support alpha channel - support alpha channel
- support multithreading - support multithreading
- support 64-bit architectures - support 64-bit architectures
- support processing image slices - support processing image slices
- support scaling up to 6xBRZ - support scaling up to 6xBRZ
*/ */
enum ColorFormat // from high bits -> low bits, 8 bit per channel enum ColorFormat // from high bits -> low bits, 8 bit per channel
{ RGB, // 8 bit for each red, green, blue, upper 8 bits unused { RGB, // 8 bit for each red, green, blue, upper 8 bits unused
ARGB, // including alpha channel, BGRA byte order on little-endian machines ARGB, // including alpha channel, BGRA byte order on little-endian machines
}; };
/* /*
-> map source (srcWidth * srcHeight) to target (scale * width x scale * height) image, optionally -> map source (srcWidth * srcHeight) to target (scale * width x scale * height) image, optionally
processing a half-open slice of rows [yFirst, yLast) only processing a half-open slice of rows [yFirst, yLast) only
-> support for source/target pitch in bytes! -> support for source/target pitch in bytes!
-> if your emulator changes only a few image slices during each cycle (e.g. DOSBox) then there's no -> if your emulator changes only a few image slices during each cycle (e.g. DOSBox) then there's no
need to run xBRZ on the complete image: need to run xBRZ on the complete image:
Just make sure you enlarge the source image slice by 2 rows on top and 2 on bottom (this is the Just make sure you enlarge the source image slice by 2 rows on top and 2 on bottom (this is the
additional range the xBRZ algorithm is using during analysis) additional range the xBRZ algorithm is using during analysis)
Caveat: If there are multiple changed slices, make sure they do not overlap after adding these Caveat: If there are multiple changed slices, make sure they do not overlap after adding these
additional rows in order to avoid a memory race condition additional rows in order to avoid a memory race condition
in the target image data if you are using multiple threads for processing each enlarged slice! in the target image data if you are using multiple threads for processing each enlarged slice!
THREAD-SAFETY: - parts of the same image may be scaled by multiple threads as long as the [yFirst, THREAD-SAFETY: - parts of the same image may be scaled by multiple threads as long as the [yFirst,
yLast) ranges do not overlap! yLast) ranges do not overlap!
- there is a minor inefficiency for the first row of a slice, so avoid processing - there is a minor inefficiency for the first row of a slice, so avoid processing
single rows only; suggestion: process 8-16 rows at least single rows only; suggestion: process 8-16 rows at least
*/ */
void scale(size_t factor, // valid range: 2 - 6 void scale(size_t factor, // valid range: 2 - 6
const uint32_t *src, int srcWidth, int srcHeight, int srcPitch, uint32_t *trg, const uint32_t *src, int srcWidth, int srcHeight, int srcPitch, uint32_t *trg,
int trgPitch, ColorFormat colFmt, const ScalerCfg &cfg = ScalerCfg(), int yFirst = 0, int trgPitch, ColorFormat colFmt, const ScalerCfg &cfg = ScalerCfg(), int yFirst = 0,
int yLast = std::numeric_limits<int>::max()); // slice of source image int yLast = std::numeric_limits<int>::max()); // slice of source image
void nearestNeighborScale(const uint32_t *src, int srcWidth, int srcHeight, uint32_t *trg, void nearestNeighborScale(const uint32_t *src, int srcWidth, int srcHeight, uint32_t *trg,
int trgWidth, int trgHeight); int trgWidth, int trgHeight);
enum SliceType { enum SliceType {
NN_SCALE_SLICE_SOURCE, NN_SCALE_SLICE_SOURCE,
NN_SCALE_SLICE_TARGET, NN_SCALE_SLICE_TARGET,
}; };
void nearestNeighborScale(const uint32_t *src, int srcWidth, int srcHeight, void nearestNeighborScale(const uint32_t *src, int srcWidth, int srcHeight,
int srcPitch, // pitch in bytes! int srcPitch, // pitch in bytes!
uint32_t *trg, int trgWidth, int trgHeight, int trgPitch, SliceType st, uint32_t *trg, int trgWidth, int trgHeight, int trgPitch, SliceType st,
int yFirst, int yLast); int yFirst, int yLast);
// parameter tuning // parameter tuning
bool equalColorTest(uint32_t col1, uint32_t col2, ColorFormat colFmt, double luminanceWeight, bool equalColorTest(uint32_t col1, uint32_t col2, ColorFormat colFmt, double luminanceWeight,
double equalColorTolerance); double equalColorTolerance);
//########################### implementation ########################### //########################### implementation ###########################
inline void nearestNeighborScale(const uint32_t *src, int srcWidth, int srcHeight, uint32_t *trg, inline void nearestNeighborScale(const uint32_t *src, int srcWidth, int srcHeight, uint32_t *trg,
int trgWidth, int trgHeight) int trgWidth, int trgHeight)
{ {
nearestNeighborScale(src, nearestNeighborScale(src,
srcWidth, srcWidth,
srcHeight, srcHeight,
srcWidth * sizeof(uint32_t), srcWidth * sizeof(uint32_t),
trg, trg,
trgWidth, trgWidth,
trgHeight, trgHeight,
trgWidth * sizeof(uint32_t), trgWidth * sizeof(uint32_t),
NN_SCALE_SLICE_TARGET, NN_SCALE_SLICE_TARGET,
0, 0,
trgHeight); trgHeight);
} }
} }
#endif #endif

View File

@ -900,7 +900,7 @@ void gbCompareLYToLYC()
} }
} }
void gbWriteMemory(register uint16_t address, register uint8_t value) void gbWriteMemory(uint16_t address, uint8_t value)
{ {
if (address < 0x8000) { if (address < 0x8000) {
@ -1720,7 +1720,7 @@ void gbWriteMemory(register uint16_t address, register uint8_t value)
gbMemory[address] = value; gbMemory[address] = value;
} }
uint8_t gbReadMemory(register uint16_t address) uint8_t gbReadMemory(uint16_t address)
{ {
if (gbCheatMap[address]) if (gbCheatMap[address])
return gbCheatRead(address); return gbCheatRead(address);
@ -2189,7 +2189,7 @@ static void gbSelectColorizationPalette()
} }
// Check if the checksum is in the list. // Check if the checksum is in the list.
int idx; size_t idx;
for (idx = 0; idx < sizeof(gbColorizationChecksums); idx++) { for (idx = 0; idx < sizeof(gbColorizationChecksums); idx++) {
if (gbColorizationChecksums[idx] == checksum) { if (gbColorizationChecksums[idx] == checksum) {
break; break;
@ -2201,7 +2201,7 @@ static void gbSelectColorizationPalette()
// Indexes above 0x40 have to be disambiguated. // Indexes above 0x40 have to be disambiguated.
if (idx > 0x40) { if (idx > 0x40) {
// No idea how that works. But it works. // No idea how that works. But it works.
for (int i = idx - 0x41, j = 0; i < sizeof(gbColorizationDisambigChars); i += 14, j += 14) { for (size_t i = idx - 0x41, j = 0; i < sizeof(gbColorizationDisambigChars); i += 14, j += 14) {
if (gbRom[0x0137] == gbColorizationDisambigChars[i]) { if (gbRom[0x0137] == gbColorizationDisambigChars[i]) {
infoIdx = idx + j; infoIdx = idx + j;
break; break;
@ -3430,7 +3430,7 @@ bool gbReadGSASnapshot(const char* fileName)
fseek(file, 0x4, SEEK_SET); fseek(file, 0x4, SEEK_SET);
char buffer[16]; char buffer[16];
char buffer2[16]; char buffer2[16];
fread(buffer, 1, 15, file); FREAD_UNCHECKED(buffer, 1, 15, file);
buffer[15] = 0; buffer[15] = 0;
memcpy(buffer2, &gbRom[0x134], 15); memcpy(buffer2, &gbRom[0x134], 15);
buffer2[15] = 0; buffer2[15] = 0;
@ -3443,8 +3443,6 @@ bool gbReadGSASnapshot(const char* fileName)
return false; return false;
} }
fseek(file, 0x13, SEEK_SET); fseek(file, 0x13, SEEK_SET);
size_t read = 0;
int toRead = 0;
switch (gbRomType) { switch (gbRomType) {
case 0x03: case 0x03:
case 0x0f: case 0x0f:
@ -3453,13 +3451,11 @@ bool gbReadGSASnapshot(const char* fileName)
case 0x1b: case 0x1b:
case 0x1e: case 0x1e:
case 0xff: case 0xff:
read = fread(gbRam, 1, (gbRamSizeMask + 1), file); FREAD_UNCHECKED(gbRam, 1, (gbRamSizeMask + 1), file);
toRead = (gbRamSizeMask + 1);
break; break;
case 0x06: case 0x06:
case 0x22: case 0x22:
read = fread(&gbMemory[0xa000], 1, 256, file); FREAD_UNCHECKED(&gbMemory[0xa000], 1, 256, file);
toRead = 256;
break; break;
default: default:
systemMessage(MSG_UNSUPPORTED_SNAPSHOT_FILE, systemMessage(MSG_UNSUPPORTED_SNAPSHOT_FILE,
@ -4509,7 +4505,7 @@ void gbEmulate(int ticksToStop)
clockTicks = 0; clockTicks = 0;
gbDmaTicks = 0; gbDmaTicks = 0;
register int opcode = 0; int opcode = 0;
int opcode1 = 0; int opcode1 = 0;
int opcode2 = 0; int opcode2 = 0;

View File

@ -24,7 +24,7 @@ int gbDis(char*, uint16_t);
bool gbLoadRom(const char*); bool gbLoadRom(const char*);
bool gbUpdateSizes(); bool gbUpdateSizes();
void gbEmulate(int); void gbEmulate(int);
void gbWriteMemory(register uint16_t, register uint8_t); void gbWriteMemory(uint16_t, uint8_t);
void gbDrawLine(); void gbDrawLine();
bool gbIsGameboyRom(const char*); bool gbIsGameboyRom(const char*);
void gbGetHardwareType(); void gbGetHardwareType();

View File

@ -416,10 +416,10 @@ bool gbCheatReadGSCodeFile(const char* fileName)
char code[9]; char code[9];
int i; int i;
for (i = 0; i < count; i++) { for (i = 0; i < count; i++) {
fread(&dummy, 1, 2, file); FREAD_UNCHECKED(&dummy, 1, 2, file);
fread(desc, 1, 12, file); FREAD_UNCHECKED(desc, 1, 12, file);
desc[12] = 0; desc[12] = 0;
fread(code, 1, 8, file); FREAD_UNCHECKED(code, 1, 8, file);
code[8] = 0; code[8] = 0;
gbAddGsCheat(code, desc); gbAddGsCheat(code, desc);
} }

View File

@ -991,8 +991,17 @@ mapperHuC3 gbDataHuC3 = {
1, // ROM bank 1, // ROM bank
0, // RAM bank 0, // RAM bank
0, // RAM address 0, // RAM address
0, // Address
0, // RAM flag 0, // RAM flag
0 // RAM read value 0, // RAM read value
0, // Register 1
0, // Register 2
0, // Register 3
0, // Register 4
0, // Register 5
0, // Register 6
0, // Register 7
0 // Register 8
}; };
// HuC3 ROM write registers // HuC3 ROM write registers

View File

@ -67,7 +67,7 @@ void gbSgbReset()
gbSgbNextController = 0x0f; gbSgbNextController = 0x0f;
gbSgbReadingController = 0; gbSgbReadingController = 0;
memset(gbSgbSCPPalette, 0, 512 * 4); memset(gbSgbSCPPalette, 0, 512 * 4 * sizeof(uint16_t));
memset(gbSgbATF, 0, 20 * 18); memset(gbSgbATF, 0, 20 * 18);
memset(gbSgbATFList, 0, 45 * 20 * 18); memset(gbSgbATFList, 0, 45 * 20 * 18);
memset(gbSgbPacket, 0, 16 * 7); memset(gbSgbPacket, 0, 16 * 7);
@ -119,7 +119,7 @@ void gbSgbFillScreen(uint16_t color)
int yLine = (y + gbBorderRowSkip + 1) * (gbBorderLineSkip + 2) + gbBorderColumnSkip; int yLine = (y + gbBorderRowSkip + 1) * (gbBorderLineSkip + 2) + gbBorderColumnSkip;
#endif #endif
uint16_t* dest = (uint16_t*)pix + yLine; uint16_t* dest = (uint16_t*)pix + yLine;
for (register int x = 0; x < 160; x++) for (int x = 0; x < 160; x++)
gbSgbDraw16Bit(dest++, color); gbSgbDraw16Bit(dest++, color);
} }
} break; } break;
@ -127,7 +127,7 @@ void gbSgbFillScreen(uint16_t color)
for (int y = 0; y < 144; y++) { for (int y = 0; y < 144; y++) {
int yLine = (y + gbBorderRowSkip) * gbBorderLineSkip + gbBorderColumnSkip; int yLine = (y + gbBorderRowSkip) * gbBorderLineSkip + gbBorderColumnSkip;
uint8_t* dest = (uint8_t*)pix + yLine * 3; uint8_t* dest = (uint8_t*)pix + yLine * 3;
for (register int x = 0; x < 160; x++) { for (int x = 0; x < 160; x++) {
gbSgbDraw24Bit(dest, color); gbSgbDraw24Bit(dest, color);
dest += 3; dest += 3;
} }
@ -141,7 +141,7 @@ void gbSgbFillScreen(uint16_t color)
int yLine = (y + gbBorderRowSkip + 1) * (gbBorderLineSkip + 1) + gbBorderColumnSkip; int yLine = (y + gbBorderRowSkip + 1) * (gbBorderLineSkip + 1) + gbBorderColumnSkip;
#endif #endif
uint32_t* dest = (uint32_t*)pix + yLine; uint32_t* dest = (uint32_t*)pix + yLine;
for (register int x = 0; x < 160; x++) { for (int x = 0; x < 160; x++) {
gbSgbDraw32Bit(dest++, color); gbSgbDraw32Bit(dest++, color);
} }
} }

View File

@ -37,7 +37,7 @@ uint8_t gbSoundRead(uint16_t address)
return gbMemory[address]; return gbMemory[address];
} }
void gbSoundEvent(register uint16_t address, register int data) void gbSoundEvent(uint16_t address, int data)
{ {
gbMemory[address] = data; gbMemory[address] = data;

File diff suppressed because it is too large Load Diff

View File

@ -2055,15 +2055,15 @@ bool cheatsImportGSACodeFile(const char* name, int game, bool v3)
found = true; found = true;
break; break;
} }
fread(&len, 1, 4, f); FREAD_UNCHECKED(&len, 1, 4, f);
fseek(f, len, SEEK_CUR); fseek(f, len, SEEK_CUR);
int codes = 0; int codes = 0;
fread(&codes, 1, 4, f); FREAD_UNCHECKED(&codes, 1, 4, f);
while (codes > 0) { while (codes > 0) {
fread(&len, 1, 4, f); FREAD_UNCHECKED(&len, 1, 4, f);
fseek(f, len, SEEK_CUR); fseek(f, len, SEEK_CUR);
fseek(f, 8, SEEK_CUR); fseek(f, 8, SEEK_CUR);
fread(&len, 1, 4, f); FREAD_UNCHECKED(&len, 1, 4, f);
fseek(f, len * 12, SEEK_CUR); fseek(f, len * 12, SEEK_CUR);
codes--; codes--;
} }
@ -2073,26 +2073,26 @@ bool cheatsImportGSACodeFile(const char* name, int game, bool v3)
if (found) { if (found) {
char desc[256]; char desc[256];
char code[17]; char code[17];
fread(&len, 1, 4, f); FREAD_UNCHECKED(&len, 1, 4, f);
fseek(f, len, SEEK_CUR); fseek(f, len, SEEK_CUR);
int codes = 0; int codes = 0;
fread(&codes, 1, 4, f); FREAD_UNCHECKED(&codes, 1, 4, f);
while (codes > 0) { while (codes > 0) {
fread(&len, 1, 4, f); FREAD_UNCHECKED(&len, 1, 4, f);
if (len > 255) if (len > 255)
goto evil_gsa_code_file; //XXX: this functione needs a rewrite in general, so for the short this is better than nothing goto evil_gsa_code_file; //XXX: this functione needs a rewrite in general, so for the short this is better than nothing
fread(desc, 1, len, f); FREAD_UNCHECKED(desc, 1, len, f);
desc[len] = 0; desc[len] = 0;
desc[31] = 0; desc[31] = 0;
fread(&len, 1, 4, f); FREAD_UNCHECKED(&len, 1, 4, f);
fseek(f, len, SEEK_CUR); fseek(f, len, SEEK_CUR);
fseek(f, 4, SEEK_CUR); fseek(f, 4, SEEK_CUR);
fread(&len, 1, 4, f); FREAD_UNCHECKED(&len, 1, 4, f);
while (len) { while (len) {
fseek(f, 4, SEEK_CUR); fseek(f, 4, SEEK_CUR);
fread(code, 1, 8, f); FREAD_UNCHECKED(code, 1, 8, f);
fseek(f, 4, SEEK_CUR); fseek(f, 4, SEEK_CUR);
fread(&code[8], 1, 8, f); FREAD_UNCHECKED(&code[8], 1, 8, f);
code[16] = 0; code[16] = 0;
cheatsAddGSACode(code, desc, v3); cheatsAddGSACode(code, desc, v3);
len -= 2; len -= 2;
@ -2734,16 +2734,16 @@ bool cheatsLoadCheatList(const char* file)
} }
} else if (type == 0) { } else if (type == 0) {
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
fread(&cheatsList[i].code, 1, sizeof(int), f); FREAD_UNCHECKED(&cheatsList[i].code, 1, sizeof(int), f);
fread(&cheatsList[i].size, 1, sizeof(int), f); FREAD_UNCHECKED(&cheatsList[i].size, 1, sizeof(int), f);
fread(&cheatsList[i].status, 1, sizeof(int), f); FREAD_UNCHECKED(&cheatsList[i].status, 1, sizeof(int), f);
fread(&cheatsList[i].enabled, 1, sizeof(int), f); FREAD_UNCHECKED(&cheatsList[i].enabled, 1, sizeof(int), f);
cheatsList[i].enabled = cheatsList[i].enabled ? true : false; cheatsList[i].enabled = cheatsList[i].enabled ? true : false;
fread(&cheatsList[i].address, 1, sizeof(uint32_t), f); FREAD_UNCHECKED(&cheatsList[i].address, 1, sizeof(uint32_t), f);
cheatsList[i].rawaddress = cheatsList[i].address; cheatsList[i].rawaddress = cheatsList[i].address;
fread(&cheatsList[i].value, 1, sizeof(uint32_t), f); FREAD_UNCHECKED(&cheatsList[i].value, 1, sizeof(uint32_t), f);
fread(&cheatsList[i].oldValue, 1, sizeof(uint32_t), f); FREAD_UNCHECKED(&cheatsList[i].oldValue, 1, sizeof(uint32_t), f);
fread(&cheatsList[i].codestring, 1, 20 * sizeof(char), f); FREAD_UNCHECKED(&cheatsList[i].codestring, 1, 20 * sizeof(char), f);
if (fread(&cheatsList[i].desc, 1, 32 * sizeof(char), f) != 32 * sizeof(char)) { if (fread(&cheatsList[i].desc, 1, 32 * sizeof(char), f) != 32 * sizeof(char)) {
fclose(f); fclose(f);
return false; return false;

View File

@ -144,8 +144,8 @@ static void count(uint32_t opcode, int cond_res)
//#ifdef __POWERPC__ //#ifdef __POWERPC__
#define OP_SUBS \ #define OP_SUBS \
{ \ { \
register int Flags; \ int Flags; \
register int Result; \ int Result; \
asm volatile("subco. %0, %2, %3\n" \ asm volatile("subco. %0, %2, %3\n" \
"mcrxr cr1\n" \ "mcrxr cr1\n" \
"mfcr %1\n" \ "mfcr %1\n" \
@ -161,8 +161,8 @@ static void count(uint32_t opcode, int cond_res)
} }
#define OP_RSBS \ #define OP_RSBS \
{ \ { \
register int Flags; \ int Flags; \
register int Result; \ int Result; \
asm volatile("subfco. %0, %2, %3\n" \ asm volatile("subfco. %0, %2, %3\n" \
"mcrxr cr1\n" \ "mcrxr cr1\n" \
"mfcr %1\n" \ "mfcr %1\n" \
@ -178,8 +178,8 @@ static void count(uint32_t opcode, int cond_res)
} }
#define OP_ADDS \ #define OP_ADDS \
{ \ { \
register int Flags; \ int Flags; \
register int Result; \ int Result; \
asm volatile("addco. %0, %2, %3\n" \ asm volatile("addco. %0, %2, %3\n" \
"mcrxr cr1\n" \ "mcrxr cr1\n" \
"mfcr %1\n" \ "mfcr %1\n" \
@ -195,8 +195,8 @@ static void count(uint32_t opcode, int cond_res)
} }
#define OP_ADCS \ #define OP_ADCS \
{ \ { \
register int Flags; \ int Flags; \
register int Result; \ int Result; \
asm volatile("mtspr xer, %4\n" \ asm volatile("mtspr xer, %4\n" \
"addeo. %0, %2, %3\n" \ "addeo. %0, %2, %3\n" \
"mcrxr cr1\n" \ "mcrxr cr1\n" \
@ -214,8 +214,8 @@ static void count(uint32_t opcode, int cond_res)
} }
#define OP_SBCS \ #define OP_SBCS \
{ \ { \
register int Flags; \ int Flags; \
register int Result; \ int Result; \
asm volatile("mtspr xer, %4\n" \ asm volatile("mtspr xer, %4\n" \
"subfeo. %0, %3, %2\n" \ "subfeo. %0, %3, %2\n" \
"mcrxr cr1\n" \ "mcrxr cr1\n" \
@ -233,8 +233,8 @@ static void count(uint32_t opcode, int cond_res)
} }
#define OP_RSCS \ #define OP_RSCS \
{ \ { \
register int Flags; \ int Flags; \
register int Result; \ int Result; \
asm volatile("mtspr xer, %4\n" \ asm volatile("mtspr xer, %4\n" \
"subfeo. %0, %2, %3\n" \ "subfeo. %0, %2, %3\n" \
"mcrxr cr1\n" \ "mcrxr cr1\n" \
@ -252,8 +252,8 @@ static void count(uint32_t opcode, int cond_res)
} }
#define OP_CMP \ #define OP_CMP \
{ \ { \
register int Flags; \ int Flags; \
register int Result; \ int Result; \
asm volatile("subco. %0, %2, %3\n" \ asm volatile("subco. %0, %2, %3\n" \
"mcrxr cr1\n" \ "mcrxr cr1\n" \
"mfcr %1\n" \ "mfcr %1\n" \
@ -268,8 +268,8 @@ static void count(uint32_t opcode, int cond_res)
} }
#define OP_CMN \ #define OP_CMN \
{ \ { \
register int Flags; \ int Flags; \
register int Result; \ int Result; \
asm volatile("addco. %0, %2, %3\n" \ asm volatile("addco. %0, %2, %3\n" \
"mcrxr cr1\n" \ "mcrxr cr1\n" \
"mfcr %1\n" \ "mfcr %1\n" \

View File

@ -89,8 +89,8 @@ static INSN_REGPARM void thumbBreakpoint(uint32_t opcode)
#ifdef __POWERPC__ #ifdef __POWERPC__
#define ADD_RD_RS_RN(N) \ #define ADD_RD_RS_RN(N) \
{ \ { \
register int Flags; \ int Flags; \
register int Result; \ int Result; \
asm volatile("addco. %0, %2, %3\n" \ asm volatile("addco. %0, %2, %3\n" \
"mcrxr cr1\n" \ "mcrxr cr1\n" \
"mfcr %1\n" \ "mfcr %1\n" \
@ -106,8 +106,8 @@ static INSN_REGPARM void thumbBreakpoint(uint32_t opcode)
} }
#define ADD_RD_RS_O3(N) \ #define ADD_RD_RS_O3(N) \
{ \ { \
register int Flags; \ int Flags; \
register int Result; \ int Result; \
asm volatile("addco. %0, %2, %3\n" \ asm volatile("addco. %0, %2, %3\n" \
"mcrxr cr1\n" \ "mcrxr cr1\n" \
"mfcr %1\n" \ "mfcr %1\n" \
@ -124,8 +124,8 @@ static INSN_REGPARM void thumbBreakpoint(uint32_t opcode)
#define ADD_RD_RS_O3_0 ADD_RD_RS_O3 #define ADD_RD_RS_O3_0 ADD_RD_RS_O3
#define ADD_RN_O8(d) \ #define ADD_RN_O8(d) \
{ \ { \
register int Flags; \ int Flags; \
register int Result; \ int Result; \
asm volatile("addco. %0, %2, %3\n" \ asm volatile("addco. %0, %2, %3\n" \
"mcrxr cr1\n" \ "mcrxr cr1\n" \
"mfcr %1\n" \ "mfcr %1\n" \
@ -141,8 +141,8 @@ static INSN_REGPARM void thumbBreakpoint(uint32_t opcode)
} }
#define CMN_RD_RS \ #define CMN_RD_RS \
{ \ { \
register int Flags; \ int Flags; \
register int Result; \ int Result; \
asm volatile("addco. %0, %2, %3\n" \ asm volatile("addco. %0, %2, %3\n" \
"mcrxr cr1\n" \ "mcrxr cr1\n" \
"mfcr %1\n" \ "mfcr %1\n" \
@ -157,8 +157,8 @@ static INSN_REGPARM void thumbBreakpoint(uint32_t opcode)
} }
#define ADC_RD_RS \ #define ADC_RD_RS \
{ \ { \
register int Flags; \ int Flags; \
register int Result; \ int Result; \
asm volatile("mtspr 1, %4\n" \ /* reg 1 is xer */ asm volatile("mtspr 1, %4\n" \ /* reg 1 is xer */
"addeo. %0, %2, %3\n" \ "addeo. %0, %2, %3\n" \
"mcrxr cr1\n" \ "mcrxr cr1\n" \
@ -177,8 +177,8 @@ static INSN_REGPARM void thumbBreakpoint(uint32_t opcode)
} }
#define SUB_RD_RS_RN(N) \ #define SUB_RD_RS_RN(N) \
{ \ { \
register int Flags; \ int Flags; \
register int Result; \ int Result; \
asm volatile("subco. %0, %2, %3\n" \ asm volatile("subco. %0, %2, %3\n" \
"mcrxr cr1\n" \ "mcrxr cr1\n" \
"mfcr %1\n" \ "mfcr %1\n" \
@ -194,8 +194,8 @@ static INSN_REGPARM void thumbBreakpoint(uint32_t opcode)
} }
#define SUB_RD_RS_O3(N) \ #define SUB_RD_RS_O3(N) \
{ \ { \
register int Flags; \ int Flags; \
register int Result; \ int Result; \
asm volatile("subco. %0, %2, %3\n" \ asm volatile("subco. %0, %2, %3\n" \
"mcrxr cr1\n" \ "mcrxr cr1\n" \
"mfcr %1\n" \ "mfcr %1\n" \
@ -212,8 +212,8 @@ static INSN_REGPARM void thumbBreakpoint(uint32_t opcode)
#define SUB_RD_RS_O3_0 SUB_RD_RS_O3 #define SUB_RD_RS_O3_0 SUB_RD_RS_O3
#define SUB_RN_O8(d) \ #define SUB_RN_O8(d) \
{ \ { \
register int Flags; \ int Flags; \
register int Result; \ int Result; \
asm volatile("subco. %0, %2, %3\n" \ asm volatile("subco. %0, %2, %3\n" \
"mcrxr cr1\n" \ "mcrxr cr1\n" \
"mfcr %1\n" \ "mfcr %1\n" \
@ -229,8 +229,8 @@ static INSN_REGPARM void thumbBreakpoint(uint32_t opcode)
} }
#define CMP_RN_O8(d) \ #define CMP_RN_O8(d) \
{ \ { \
register int Flags; \ int Flags; \
register int Result; \ int Result; \
asm volatile("subco. %0, %2, %3\n" \ asm volatile("subco. %0, %2, %3\n" \
"mcrxr cr1\n" \ "mcrxr cr1\n" \
"mfcr %1\n" \ "mfcr %1\n" \
@ -245,8 +245,8 @@ static INSN_REGPARM void thumbBreakpoint(uint32_t opcode)
} }
#define SBC_RD_RS \ #define SBC_RD_RS \
{ \ { \
register int Flags; \ int Flags; \
register int Result; \ int Result; \
asm volatile("mtspr 1, %4\n" \ /* reg 1 is xer */ asm volatile("mtspr 1, %4\n" \ /* reg 1 is xer */
"subfeo. %0, %3, %2\n" \ "subfeo. %0, %3, %2\n" \
"mcrxr cr1\n" \ "mcrxr cr1\n" \
@ -265,8 +265,8 @@ static INSN_REGPARM void thumbBreakpoint(uint32_t opcode)
} }
#define NEG_RD_RS \ #define NEG_RD_RS \
{ \ { \
register int Flags; \ int Flags; \
register int Result; \ int Result; \
asm volatile("subfco. %0, %2, %3\n" \ asm volatile("subfco. %0, %2, %3\n" \
"mcrxr cr1\n" \ "mcrxr cr1\n" \
"mfcr %1\n" \ "mfcr %1\n" \
@ -282,8 +282,8 @@ static INSN_REGPARM void thumbBreakpoint(uint32_t opcode)
} }
#define CMP_RD_RS \ #define CMP_RD_RS \
{ \ { \
register int Flags; \ int Flags; \
register int Result; \ int Result; \
asm volatile("subco. %0, %2, %3\n" \ asm volatile("subco. %0, %2, %3\n" \
"mcrxr cr1\n" \ "mcrxr cr1\n" \
"mfcr %1\n" \ "mfcr %1\n" \

View File

@ -1007,21 +1007,21 @@ bool CPUReadGSASnapshot(const char* fileName)
// long size = ftell(file); // long size = ftell(file);
fseek(file, 0x0, SEEK_SET); fseek(file, 0x0, SEEK_SET);
fread(&i, 1, 4, file); FREAD_UNCHECKED(&i, 1, 4, file);
fseek(file, i, SEEK_CUR); // Skip SharkPortSave fseek(file, i, SEEK_CUR); // Skip SharkPortSave
fseek(file, 4, SEEK_CUR); // skip some sort of flag fseek(file, 4, SEEK_CUR); // skip some sort of flag
fread(&i, 1, 4, file); // name length FREAD_UNCHECKED(&i, 1, 4, file); // name length
fseek(file, i, SEEK_CUR); // skip name fseek(file, i, SEEK_CUR); // skip name
fread(&i, 1, 4, file); // desc length FREAD_UNCHECKED(&i, 1, 4, file); // desc length
fseek(file, i, SEEK_CUR); // skip desc fseek(file, i, SEEK_CUR); // skip desc
fread(&i, 1, 4, file); // notes length FREAD_UNCHECKED(&i, 1, 4, file); // notes length
fseek(file, i, SEEK_CUR); // skip notes fseek(file, i, SEEK_CUR); // skip notes
int saveSize; int saveSize;
fread(&saveSize, 1, 4, file); // read length FREAD_UNCHECKED(&saveSize, 1, 4, file); // read length
saveSize -= 0x1c; // remove header size saveSize -= 0x1c; // remove header size
char buffer[17]; char buffer[17];
char buffer2[17]; char buffer2[17];
fread(buffer, 1, 16, file); FREAD_UNCHECKED(buffer, 1, 16, file);
buffer[16] = 0; buffer[16] = 0;
for (i = 0; i < 16; i++) for (i = 0; i < 16; i++)
if (buffer[i] < 32) if (buffer[i] < 32)
@ -1074,7 +1074,7 @@ bool CPUReadGSASPSnapshot(const char* fileName)
// read save name // read save name
fseek(file, namepos, SEEK_SET); fseek(file, namepos, SEEK_SET);
fread(savename, 1, namesz, file); FREAD_UNCHECKED(savename, 1, namesz, file);
savename[namesz] = 0; savename[namesz] = 0;
memcpy(romname, &rom[0xa0], namesz); memcpy(romname, &rom[0xa0], namesz);
@ -1091,7 +1091,7 @@ bool CPUReadGSASPSnapshot(const char* fileName)
// read footer tag // read footer tag
fseek(file, footerpos, SEEK_SET); fseek(file, footerpos, SEEK_SET);
fread(footer, 1, footersz, file); FREAD_UNCHECKED(footer, 1, footersz, file);
footer[footersz] = 0; footer[footersz] = 0;
if (memcmp(footer, gsvfooter, footersz)) { if (memcmp(footer, gsvfooter, footersz)) {
@ -1106,7 +1106,7 @@ bool CPUReadGSASPSnapshot(const char* fileName)
} }
// Read up to 128k save // Read up to 128k save
fread(flashSaveMemory, 1, FLASH_128K_SZ, file); FREAD_UNCHECKED(flashSaveMemory, 1, FLASH_128K_SZ, file);
fclose(file); fclose(file);
CPUReset(); CPUReset();

View File

@ -3,6 +3,7 @@
#include "../common/Types.h" #include "../common/Types.h"
#include "../System.h" #include "../System.h"
#include "../Util.h"
const uint64_t TICKS_PER_SECOND = 16777216; const uint64_t TICKS_PER_SECOND = 16777216;

View File

@ -609,6 +609,7 @@ void EnableSpeedHacks(bool enable)
void BootLink(int m_type, const char* hostAddr, int timeout, bool m_hacks, int m_numplayers) void BootLink(int m_type, const char* hostAddr, int timeout, bool m_hacks, int m_numplayers)
{ {
(void)m_numplayers; // unused param
if (linkDriver) { if (linkDriver) {
// Connection has already been established // Connection has already been established
return; return;
@ -888,7 +889,7 @@ bool CableServer::RecvGB(void)
if (counter == 1) if (counter == 1)
return false; return false;
int numbytes; int numbytes = 0;
if (lanlink.type == 0) { // TCP if (lanlink.type == 0) { // TCP
fdset.clear(); fdset.clear();
@ -1230,6 +1231,7 @@ void StartCableSocket(uint16_t value)
static void UpdateCableSocket(int ticks) static void UpdateCableSocket(int ticks)
{ {
(void)ticks; // unused param
if (linkid && transfer_direction == SENDING && lc.transferring && linktime >= transfer_start_time_from_master) { if (linkid && transfer_direction == SENDING && lc.transferring && linktime >= transfer_start_time_from_master) {
cable_data[linkid] = READ16LE(&ioMem[COMM_SIODATA8]); cable_data[linkid] = READ16LE(&ioMem[COMM_SIODATA8]);
@ -2199,7 +2201,8 @@ static void StartRFUSocket(uint16_t value)
case 0x24: // send [non-important] data (used by server often) case 0x24: // send [non-important] data (used by server often)
rfu_data.rfu_linktime[linkid] = linktime; //save the ticks before reseted to zero rfu_data.rfu_linktime[linkid] = linktime; //save the ticks before reseted to zero
if (rfu_cansend && rfu_qsend2 >= 0) { // rfu_qsend2 >= 0 due to being `uint8_t`
if (rfu_cansend) {
if (rfu_ishost) { if (rfu_ishost) {
for (int j = 0; j < rfu_data.numgbas; j++) for (int j = 0; j < rfu_data.numgbas; j++)
if (j != linkid) { if (j != linkid) {
@ -2560,7 +2563,7 @@ uint16_t gbLinkUpdate(uint8_t b, int gbSerialOn) //used on external clock
rfu_enabled = false; rfu_enabled = false;
if (gbSerialOn) { if (gbSerialOn) {
if (gba_link_enabled) if (gba_link_enabled) {
//Single Computer //Single Computer
if (GetLinkMode() == LINK_GAMEBOY_IPC) { if (GetLinkMode() == LINK_GAMEBOY_IPC) {
#if (defined __WIN32__ || defined _WIN32) #if (defined __WIN32__ || defined _WIN32)
@ -2595,7 +2598,7 @@ uint16_t gbLinkUpdate(uint8_t b, int gbSerialOn) //used on external clock
} }
} }
} }
}
if (dat == 0xff /*||dat==0x00||b==0x00*/) //dat==0xff||dat==0x00 if (dat == 0xff /*||dat==0x00||b==0x00*/) //dat==0xff||dat==0x00
LinkFirstTime = true; LinkFirstTime = true;
} }

View File

@ -59,6 +59,7 @@ char GBASockClient::ReceiveCmd(char* data_in, bool block)
void GBASockClient::ReceiveClock(bool block) void GBASockClient::ReceiveClock(bool block)
{ {
(void)block; // unused param
if (IsDisconnected()) if (IsDisconnected())
return; return;

View File

@ -56,7 +56,7 @@ static inline uint32_t CPUReadMemory(uint32_t address)
} }
} }
#endif #endif
uint32_t value; uint32_t value = 0;
uint32_t oldAddress = address; uint32_t oldAddress = address;
if (address & 3) { if (address & 3) {

View File

@ -701,9 +701,9 @@ extern int dexp_lex(void);
*/ */
YY_DECL YY_DECL
{ {
register yy_state_type yy_current_state; yy_state_type yy_current_state;
register char *yy_cp, *yy_bp; char *yy_cp, *yy_bp;
register int yy_act; int yy_act;
#line 31 "debugger-expr.l" #line 31 "debugger-expr.l"
@ -748,7 +748,7 @@ YY_DECL
yy_current_state = (yy_start); yy_current_state = (yy_start);
yy_match: yy_match:
do { do {
register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
if (yy_accept[yy_current_state]) { if (yy_accept[yy_current_state]) {
(yy_last_accepting_state) = yy_current_state; (yy_last_accepting_state) = yy_current_state;
(yy_last_accepting_cpos) = yy_cp; (yy_last_accepting_cpos) = yy_cp;
@ -1073,9 +1073,9 @@ YY_DECL
*/ */
static int yy_get_next_buffer(void) static int yy_get_next_buffer(void)
{ {
register char* dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; char* dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
register char* source = (yytext_ptr); char* source = (yytext_ptr);
register int number_to_move, i; int number_to_move, i;
int ret_val; int ret_val;
if ((yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1]) if ((yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1])
@ -1192,13 +1192,13 @@ static int yy_get_next_buffer(void)
static yy_state_type yy_get_previous_state(void) static yy_state_type yy_get_previous_state(void)
{ {
register yy_state_type yy_current_state; yy_state_type yy_current_state;
register char* yy_cp; char* yy_cp;
yy_current_state = (yy_start); yy_current_state = (yy_start);
for (yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp) { for (yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp) {
register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
if (yy_accept[yy_current_state]) { if (yy_accept[yy_current_state]) {
(yy_last_accepting_state) = yy_current_state; (yy_last_accepting_state) = yy_current_state;
(yy_last_accepting_cpos) = yy_cp; (yy_last_accepting_cpos) = yy_cp;
@ -1221,10 +1221,10 @@ static yy_state_type yy_get_previous_state(void)
*/ */
static yy_state_type yy_try_NUL_trans(yy_state_type yy_current_state) static yy_state_type yy_try_NUL_trans(yy_state_type yy_current_state)
{ {
register int yy_is_jam; int yy_is_jam;
register char* yy_cp = (yy_c_buf_p); char* yy_cp = (yy_c_buf_p);
register YY_CHAR yy_c = 1; YY_CHAR yy_c = 1;
if (yy_accept[yy_current_state]) { if (yy_accept[yy_current_state]) {
(yy_last_accepting_state) = yy_current_state; (yy_last_accepting_state) = yy_current_state;
(yy_last_accepting_cpos) = yy_cp; (yy_last_accepting_cpos) = yy_cp;
@ -1240,9 +1240,9 @@ static yy_state_type yy_try_NUL_trans(yy_state_type yy_current_state)
return yy_is_jam ? 0 : yy_current_state; return yy_is_jam ? 0 : yy_current_state;
} }
static void yyunput(int c, register char* yy_bp) static void yyunput(int c, char* yy_bp)
{ {
register char* yy_cp; char* yy_cp;
yy_cp = (yy_c_buf_p); yy_cp = (yy_c_buf_p);
@ -1251,9 +1251,9 @@ static void yyunput(int c, register char* yy_bp)
if (yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2) { /* need to shift things up to make room */ if (yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2) { /* need to shift things up to make room */
/* +2 for EOB chars. */ /* +2 for EOB chars. */
register int number_to_move = (yy_n_chars) + 2; int number_to_move = (yy_n_chars) + 2;
register char* dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; char* dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
register char* source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; char* source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
while (source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf) while (source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf)
*--dest = *--source; *--dest = *--source;
@ -1849,7 +1849,7 @@ int dexp_lex_destroy(void)
#ifndef yytext_ptr #ifndef yytext_ptr
static void yy_flex_strncpy(char* s1, yyconst char* s2, int n) static void yy_flex_strncpy(char* s1, yyconst char* s2, int n)
{ {
register int i; int i;
for (i = 0; i < n; ++i) for (i = 0; i < n; ++i)
s1[i] = s2[i]; s1[i] = s2[i];
} }
@ -1858,7 +1858,7 @@ static void yy_flex_strncpy(char* s1, yyconst char* s2, int n)
#ifdef YY_NEED_STRLEN #ifdef YY_NEED_STRLEN
static int yy_flex_strlen(yyconst char* s) static int yy_flex_strlen(yyconst char* s)
{ {
register int n; int n;
for (n = 0; s[n]; ++n) for (n = 0; s[n]; ++n)
; ;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,9 @@
extern unsigned char* DotCodeData; extern unsigned char* DotCodeData;
extern char filebuffer[]; extern char filebuffer[];
int OpenDotCodeFile(void); int OpenDotCodeFile(void);
int CheckEReaderRegion(void); int CheckEReaderRegion(void);
int LoadDotCodeData(int size, uint32_t* DCdata, unsigned long MEM1, unsigned long MEM2); int LoadDotCodeData(int size, uint32_t* DCdata, unsigned long MEM1, unsigned long MEM2);
void EReaderWriteMemory(uint32_t address, uint32_t value); void EReaderWriteMemory(uint32_t address, uint32_t value);
void BIOS_EReader_ScanCard(int swi_num); void BIOS_EReader_ScanCard(int swi_num);

View File

@ -349,6 +349,7 @@ void debuggerDontBreak(int n, char** args)
void debuggerDontBreakClear(int n, char** args) void debuggerDontBreakClear(int n, char** args)
{ {
(void)args; // unused params
if (n == 1) { if (n == 1) {
debuggerNumOfDontBreak = 0; debuggerNumOfDontBreak = 0;
{ {
@ -782,7 +783,7 @@ unsigned int AddressToGBA(uint8_t* mem)
void debuggerDoSearch() void debuggerDoSearch()
{ {
int count = 0; unsigned int count = 0;
while (true) { while (true) {
unsigned int final = SearchStart + SearchLength - 1; unsigned int final = SearchStart + SearchLength - 1;
@ -1882,6 +1883,8 @@ void debuggerSymbols(int argc, char** argv)
void debuggerWhere(int n, char** args) void debuggerWhere(int n, char** args)
{ {
(void)n; // unused params
(void)args; // unused params
void elfPrintCallChain(uint32_t); void elfPrintCallChain(uint32_t);
elfPrintCallChain(armNextPC); elfPrintCallChain(armNextPC);
} }
@ -1958,6 +1961,7 @@ void debuggerVar(int n, char** args)
bool debuggerBreakOnExecution(uint32_t address, uint8_t state) bool debuggerBreakOnExecution(uint32_t address, uint8_t state)
{ {
(void)state; // unused params
if (dontBreakNow) if (dontBreakNow)
return false; return false;
if (debuggerInDB(address)) if (debuggerInDB(address))
@ -1975,6 +1979,7 @@ bool debuggerBreakOnExecution(uint32_t address, uint8_t state)
bool debuggerBreakOnRead(uint32_t address, int size) bool debuggerBreakOnRead(uint32_t address, int size)
{ {
(void)size; // unused params
if (dontBreakNow) if (dontBreakNow)
return false; return false;
if (debuggerInDB(armState ? reg[15].I - 4 : reg[15].I - 2)) if (debuggerInDB(armState ? reg[15].I - 4 : reg[15].I - 2))
@ -1996,6 +2001,8 @@ bool debuggerBreakOnRead(uint32_t address, int size)
bool debuggerBreakOnWrite(uint32_t address, uint32_t value, int size) bool debuggerBreakOnWrite(uint32_t address, uint32_t value, int size)
{ {
(void)value; // unused params
(void)size; // unused params
if (dontBreakNow) if (dontBreakNow)
return false; return false;
if (debuggerInDB(armState ? reg[15].I - 4 : reg[15].I - 2)) if (debuggerInDB(armState ? reg[15].I - 4 : reg[15].I - 2))
@ -2019,6 +2026,8 @@ bool debuggerBreakOnWrite(uint32_t address, uint32_t value, int size)
void debuggerBreakOnWrite(uint32_t address, uint32_t oldvalue, uint32_t value, int size, int t) void debuggerBreakOnWrite(uint32_t address, uint32_t oldvalue, uint32_t value, int size, int t)
{ {
(void)oldvalue; // unused params
(void)t; // unused params
debuggerBreakOnWrite(address, value, size); debuggerBreakOnWrite(address, value, size);
//uint32_t lastValue; //uint32_t lastValue;
//dexp_eval("old_value", &lastValue); //dexp_eval("old_value", &lastValue);
@ -2677,6 +2686,8 @@ void deleteBreak(uint32_t address, uint8_t flags, char** expression, int howToDe
} }
void clearBreaks(uint32_t address, uint8_t flags, char** expression, int howToClear) void clearBreaks(uint32_t address, uint8_t flags, char** expression, int howToClear)
{ {
(void)address; // unused params
(void)expression; // unused params
if (howToClear == 2) { if (howToClear == 2) {
removeConditionalWithFlag(flags, true); removeConditionalWithFlag(flags, true);
removeConditionalWithFlag(flags << 4, true); removeConditionalWithFlag(flags << 4, true);
@ -2692,6 +2703,7 @@ void clearBreaks(uint32_t address, uint8_t flags, char** expression, int howToCl
void listBreaks(uint32_t address, uint8_t flags, char** expression, int howToList) void listBreaks(uint32_t address, uint8_t flags, char** expression, int howToList)
{ {
(void)expression; // unused params
flags |= (flags << 4); flags |= (flags << 4);
if (howToList) { if (howToList) {
printAllFlagConditionalsWithAddress(address, flags, true); printAllFlagConditionalsWithAddress(address, flags, true);
@ -2896,8 +2908,7 @@ void executeBreakCommands(int n, char** cmd)
operation(address, flag, cmd + 1, n - 1); operation(address, flag, cmd + 1, n - 1);
return; return;
} }
//brkcmd_special_register:
brkcmd_special_register:
switch (command[4]) { switch (command[4]) {
case 'l': case 'l':
debuggerBreakRegisterList((n > 0) && (tolower(cmd[0][0]) == 'v')); debuggerBreakRegisterList((n > 0) && (tolower(cmd[0][0]) == 'v'));
@ -3528,7 +3539,7 @@ void remotePutPacket(const char* packet)
const char* hex = "0123456789abcdef"; const char* hex = "0123456789abcdef";
size_t count = strlen(packet); size_t count = strlen(packet);
char buffer[count + 5]; char* buffer = new char[count + 5];
unsigned char csum = 0; unsigned char csum = 0;
@ -3548,10 +3559,15 @@ void remotePutPacket(const char* packet)
char c = 0; char c = 0;
while (c != '+') { while (c != '+') {
remoteSendFnc(buffer, (int)count + 4); remoteSendFnc(buffer, (int)count + 4);
if (remoteRecvFnc(&c, 1) < 0)
if (remoteRecvFnc(&c, 1) < 0) {
delete[] buffer;
return; return;
}
// fprintf(stderr,"sent:%s recieved:%c\n",buffer,c); // fprintf(stderr,"sent:%s recieved:%c\n",buffer,c);
} }
delete[] buffer;
} }
void remoteOutput(const char* s, uint32_t addr) void remoteOutput(const char* s, uint32_t addr)
@ -3684,7 +3700,7 @@ void remoteMemoryRead(char* p)
sscanf(p, "%x,%x:", &address, &count); sscanf(p, "%x,%x:", &address, &count);
// monprintf("Memory read for %08x %d\n", address, count); // monprintf("Memory read for %08x %d\n", address, count);
char buffer[(count*2)+1]; char* buffer = new char[(count*2)+1];
char* s = buffer; char* s = buffer;
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
@ -3695,6 +3711,8 @@ void remoteMemoryRead(char* p)
} }
*s = 0; *s = 0;
remotePutPacket(buffer); remotePutPacket(buffer);
delete[] buffer;
} }
void remoteQuery(char* p) void remoteQuery(char* p)
@ -3779,7 +3797,7 @@ void remoteSetBreakPoint(char* p)
void remoteClearBreakPoint(char* p) void remoteClearBreakPoint(char* p)
{ {
int result; int result = 0;
uint32_t address; uint32_t address;
int count; int count;
sscanf(p, ",%x,%x#", &address, &count); sscanf(p, ",%x,%x#", &address, &count);
@ -3968,6 +3986,7 @@ void remoteReadRegister(char* p)
void remoteReadRegisters(char* p) void remoteReadRegisters(char* p)
{ {
(void)p; // unused params
char buffer[1024]; char buffer[1024];
char* s = buffer; char* s = buffer;
@ -4226,6 +4245,7 @@ void remoteStubMain()
void remoteStubSignal(int sig, int number) void remoteStubSignal(int sig, int number)
{ {
(void)number; // unused params
remoteSignal = sig; remoteSignal = sig;
remoteResumed = false; remoteResumed = false;
remoteSendStatus(); remoteSendStatus();

View File

@ -1,79 +1,79 @@
#ifndef REMOTE_H #ifndef REMOTE_H
#define REMOTE_H #define REMOTE_H
#include "GBA.h" #include "GBA.h"
#define BitSet(array, bit) ((uint8_t*)(array))[(bit) >> 3] |= (1 << ((bit)&7)) #define BitSet(array, bit) ((uint8_t*)(array))[(bit) >> 3] |= (1 << ((bit)&7))
#define BitClear(array, bit) ((uint8_t*)(array))[(bit) >> 3] &= ~(1 << ((bit)&7)) #define BitClear(array, bit) ((uint8_t*)(array))[(bit) >> 3] &= ~(1 << ((bit)&7))
#define BitGet(array, bit) ((uint8_t)((array)[(bit) >> 3]) & (uint8_t)(1 << ((bit)&7))) #define BitGet(array, bit) ((uint8_t)((array)[(bit) >> 3]) & (uint8_t)(1 << ((bit)&7)))
#define BreakSet(array, addr, flag) \ #define BreakSet(array, addr, flag) \
((uint8_t*)(array))[(addr) >> 1] |= ((addr & 1) ? (flag << 4) : (flag & 0xf)) ((uint8_t*)(array))[(addr) >> 1] |= ((addr & 1) ? (flag << 4) : (flag & 0xf))
#define BreakClear(array, addr, flag) \ #define BreakClear(array, addr, flag) \
((uint8_t*)(array))[(addr) >> 1] &= ~((addr & 1) ? (flag << 4) : (flag & 0xf)) ((uint8_t*)(array))[(addr) >> 1] &= ~((addr & 1) ? (flag << 4) : (flag & 0xf))
// check // check
#define BreakThumbCheck(array, addr) ((uint8_t*)(array))[(addr) >> 1] & ((addr & 1) ? 0x80 : 0x8) #define BreakThumbCheck(array, addr) ((uint8_t*)(array))[(addr) >> 1] & ((addr & 1) ? 0x80 : 0x8)
#define BreakARMCheck(array, addr) ((uint8_t*)(array))[(addr) >> 1] & ((addr & 1) ? 0x40 : 0x4) #define BreakARMCheck(array, addr) ((uint8_t*)(array))[(addr) >> 1] & ((addr & 1) ? 0x40 : 0x4)
#define BreakReadCheck(array, addr) ((uint8_t*)(array))[(addr) >> 1] & ((addr & 1) ? 0x20 : 0x2) #define BreakReadCheck(array, addr) ((uint8_t*)(array))[(addr) >> 1] & ((addr & 1) ? 0x20 : 0x2)
#define BreakWriteCheck(array, addr) ((uint8_t*)(array))[(addr) >> 1] & ((addr & 1) ? 0x10 : 0x1) #define BreakWriteCheck(array, addr) ((uint8_t*)(array))[(addr) >> 1] & ((addr & 1) ? 0x10 : 0x1)
#define BreakCheck(array, addr, flag) \ #define BreakCheck(array, addr, flag) \
((uint8_t*)(array))[(addr) >> 1] & ((addr & 1) ? (flag << 4) : (flag & 0xf)) ((uint8_t*)(array))[(addr) >> 1] & ((addr & 1) ? (flag << 4) : (flag & 0xf))
extern bool debugger; extern bool debugger;
extern bool dexp_eval(char*, uint32_t*); extern bool dexp_eval(char*, uint32_t*);
extern void dexp_setVar(char*, uint32_t); extern void dexp_setVar(char*, uint32_t);
extern void dexp_listVars(); extern void dexp_listVars();
extern void dexp_saveVars(char*); extern void dexp_saveVars(char*);
extern void dexp_loadVars(char*); extern void dexp_loadVars(char*);
void debuggerOutput(const char* s, uint32_t addr); void debuggerOutput(const char* s, uint32_t addr);
bool debuggerBreakOnExecution(uint32_t address, uint8_t state); bool debuggerBreakOnExecution(uint32_t address, uint8_t state);
bool debuggerBreakOnWrite(uint32_t address, uint32_t value, int size); bool debuggerBreakOnWrite(uint32_t address, uint32_t value, int size);
void debuggerBreakOnWrite(uint32_t address, uint32_t oldvalue, uint32_t value, int size, int t); void debuggerBreakOnWrite(uint32_t address, uint32_t oldvalue, uint32_t value, int size, int t);
bool debuggerBreakOnRead(uint32_t address, int size); bool debuggerBreakOnRead(uint32_t address, int size);
struct regBreak { struct regBreak {
// uint8_t regNum; /No longer needed // uint8_t regNum; /No longer needed
// bit 0 = equal // bit 0 = equal
// bit 1 = greater // bit 1 = greater
// bit 2 = smaller // bit 2 = smaller
// bit 3 = signed // bit 3 = signed
uint8_t flags; uint8_t flags;
uint32_t intVal; uint32_t intVal;
struct regBreak* next; struct regBreak* next;
}; };
extern uint8_t lowRegBreakCounter[4]; //(r0-r3) extern uint8_t lowRegBreakCounter[4]; //(r0-r3)
extern uint8_t medRegBreakCounter[4]; //(r4-r7) extern uint8_t medRegBreakCounter[4]; //(r4-r7)
extern uint8_t highRegBreakCounter[4]; //(r8-r11) extern uint8_t highRegBreakCounter[4]; //(r8-r11)
extern uint8_t statusRegBreakCounter[4]; //(r12-r15) extern uint8_t statusRegBreakCounter[4]; //(r12-r15)
extern bool enableRegBreak; extern bool enableRegBreak;
extern regBreak* breakRegList[16]; extern regBreak* breakRegList[16];
extern void breakReg_check(int i); extern void breakReg_check(int i);
struct regBreak* getFromBreakRegList(uint8_t regnum, int location); struct regBreak* getFromBreakRegList(uint8_t regnum, int location);
void clearBreakRegList(); void clearBreakRegList();
void clearParticularRegListBreaks(int reg); void clearParticularRegListBreaks(int reg);
void deleteFromBreakRegList(uint8_t regnum, int location); void deleteFromBreakRegList(uint8_t regnum, int location);
void addBreakRegToList(uint8_t regnum, uint8_t flags, uint32_t value); void addBreakRegToList(uint8_t regnum, uint8_t flags, uint32_t value);
void printBreakRegList(bool verbose); void printBreakRegList(bool verbose);
void remoteStubMain(); void remoteStubMain();
void remoteStubSignal(int sig, int number); void remoteStubSignal(int sig, int number);
void remoteOutput(const char* s, uint32_t addr); void remoteOutput(const char* s, uint32_t addr);
void remoteSetProtocol(int p); void remoteSetProtocol(int p);
void remoteSetPort(int port); void remoteSetPort(int port);
#endif // REMOTE_H #endif // REMOTE_H

View File

@ -33,6 +33,7 @@ void SoundRetro::write(uint16_t* finalWave, int length)
bool SoundRetro::init(long sampleRate) bool SoundRetro::init(long sampleRate)
{ {
(void)sampleRate; // unused param
return true; return true;
} }
@ -51,3 +52,8 @@ void SoundRetro::resume()
void SoundRetro::reset() void SoundRetro::reset()
{ {
} }
void SoundRetro::setThrottle(unsigned short throttle)
{
(void)throttle; // unused param
}

View File

@ -30,6 +30,7 @@ public:
virtual void reset(); virtual void reset();
virtual void resume(); virtual void resume();
virtual void write(uint16_t* finalWave, int length); virtual void write(uint16_t* finalWave, int length);
virtual void setThrottle(unsigned short throttle);
}; };
#endif // __VBA_SOUND_RETRO_H__ #endif // __VBA_SOUND_RETRO_H__

View File

@ -192,7 +192,7 @@ uint8_t *utilLoad(const char *file, bool (*accept)(const char *), uint8_t *data,
} }
} }
fread(image, 1, size, fp); // read into buffer FREAD_UNCHECKED(image, 1, size, fp); // read into buffer
fclose(fp); fclose(fp);
return image; return image;
} }

View File

@ -31,6 +31,8 @@
#include "../gb/gbSGB.h" #include "../gb/gbSGB.h"
#include "../gb/gbSound.h" #include "../gb/gbSound.h"
#define VBA_CURRENT_VERSION "2.1.1"
static retro_log_printf_t log_cb; static retro_log_printf_t log_cb;
static retro_video_refresh_t video_cb; static retro_video_refresh_t video_cb;
static retro_input_poll_t poll_cb; static retro_input_poll_t poll_cb;
@ -536,9 +538,9 @@ void retro_get_system_info(struct retro_system_info *info)
info->need_fullpath = false; info->need_fullpath = false;
info->valid_extensions = "dmg|gb|gbc|cgb|sgb|gba"; info->valid_extensions = "dmg|gb|gbc|cgb|sgb|gba";
#ifdef GIT_VERSION #ifdef GIT_VERSION
info->library_version = "2.1.0" GIT_VERSION; info->library_version = VBA_CURRENT_VERSION GIT_VERSION;
#else #else
info->library_version = "2.1.0-GIT"; info->library_version = VBA_CURRENT_VERSION;
#endif #endif
info->library_name = "VBA-M"; info->library_name = "VBA-M";
info->block_extract = false; info->block_extract = false;

View File

@ -64,13 +64,27 @@
#include "inputSDL.h" #include "inputSDL.h"
#include "text.h" #include "text.h"
// from: https://stackoverflow.com/questions/7608714/why-is-my-pointer-not-null-after-free
#define freeSafe(ptr) free(ptr); ptr = NULL;
#ifndef _WIN32 #ifndef _WIN32
#include <unistd.h> #include <unistd.h>
#define GETCWD getcwd #define GETCWD getcwd
#else // _WIN32 #else // _WIN32
#include <direct.h> #include <direct.h>
#include <io.h>
#define GETCWD _getcwd #define GETCWD _getcwd
#define snprintf sprintf #define snprintf sprintf
#define stat _stat
#define access _access
#ifndef W_OK
#define W_OK 2
#endif
#define mkdir(X,Y) (_mkdir(X))
// from: https://www.linuxquestions.org/questions/programming-9/porting-to-win32-429334/
#ifndef S_ISDIR
#define S_ISDIR(mode) (((mode) & _S_IFMT) == _S_IFDIR)
#endif
#endif // _WIN32 #endif // _WIN32
#ifndef __GNUC__ #ifndef __GNUC__
@ -202,6 +216,8 @@ int sdlMirroringEnable = 1;
void systemConsoleMessage(const char*); void systemConsoleMessage(const char*);
char* home; char* home;
char homeConfigDir[1024];
char homeDataDir[1024];
char screenMessageBuffer[21]; char screenMessageBuffer[21];
uint32_t screenMessageTime = 0; uint32_t screenMessageTime = 0;
@ -246,7 +262,7 @@ void StartLirc(void)
fprintf(stdout, "Success\n"); fprintf(stdout, "Success\n");
//read the config file //read the config file
char LIRCConfigLoc[2048]; char LIRCConfigLoc[2048];
sprintf(LIRCConfigLoc, "%s/%s/%s", homeDir, DOT_DIR, "lircrc"); sprintf(LIRCConfigLoc, "%s%c%s", homeConfigDir, FILE_SEP, "lircrc");
fprintf(stdout, "LIRC Config file:"); fprintf(stdout, "LIRC Config file:");
if (lirc_readconfig(LIRCConfigLoc, &LIRCConfigInfo, NULL) == 0) { if (lirc_readconfig(LIRCConfigLoc, &LIRCConfigInfo, NULL) == 0) {
//check vbam dir for lircrc //check vbam dir for lircrc
@ -284,59 +300,47 @@ void StopLirc(void)
bool sdlCheckDirectory(const char* dir) bool sdlCheckDirectory(const char* dir)
{ {
bool res = false;
if (!dir || !dir[0]) {
return false;
}
struct stat buf; struct stat buf;
int len = strlen(dir); if (!dir || !dir[0])
return false;
char* p = (char*)dir + len - 1; if (stat(dir, &buf) == 0)
{
while (p != dir && (*p == '/' || *p == '\\')) { if (!(buf.st_mode & S_IFDIR))
*p = 0; {
p--; fprintf(stderr, "Error: %s is not a directory\n", dir);
return false;
}
return true;
} }
else
if (stat(dir, &buf) == 0) { {
if (!(buf.st_mode & S_IFDIR)) { fprintf(stderr, "Error: %s does not exist\n", dir);
fprintf(stderr, "Error: %s is not a directory\n", dir); return false;
}
res = true;
} else {
fprintf(stderr, "Error: %s does not exist\n", dir);
} }
return res;
} }
char* sdlGetFilename(char* name) char* sdlGetFilename(char* name)
{ {
static char filebuffer[2048]; char path[1024] = ""; // avoid warning about uninitialised value
char *filename = strrchr(name, FILE_SEP);
int len = strlen(name); if (filename)
strncpy(path, filename + 1, strlen(filename));
char* p = name + len - 1;
while (true) {
if (*p == '/' || *p == '\\') {
p++;
break;
}
len--;
p--;
if (len == 0)
break;
}
if (len == 0)
strcpy(filebuffer, name);
else else
strcpy(filebuffer, p); sprintf(path, "%s", name);
return filebuffer; return strdup(path);
}
char* sdlGetFilePath(char* name)
{
char path[1024] = ""; // avoid warning about uninitialised value
char *filename = strrchr(name, FILE_SEP);
if (filename)
strncpy(path, name, strlen(name) - strlen(filename));
else
sprintf(path, "%c%c", '.', FILE_SEP);
return strdup(path);
} }
FILE* sdlFindFile(const char* name) FILE* sdlFindFile(const char* name)
@ -366,8 +370,8 @@ FILE* sdlFindFile(const char* name)
} }
if (homeDir) { if (homeDir) {
fprintf(stdout, "Searching home directory: %s%c%s\n", homeDir, FILE_SEP, DOT_DIR); fprintf(stdout, "Searching home directory: %s\n", homeDataDir);
sprintf(path, "%s%c%s%c%s", homeDir, FILE_SEP, DOT_DIR, FILE_SEP, name); sprintf(path, "%s%c%s", homeDataDir, FILE_SEP, name);
f = fopen(path, "r"); f = fopen(path, "r");
if (f != NULL) if (f != NULL)
return f; return f;
@ -488,7 +492,8 @@ static void sdlOpenGLVideoResize()
void sdlOpenGLInit(int w, int h) void sdlOpenGLInit(int w, int h)
{ {
(void)w; // unused params
(void)h; // unused params
#if 0 #if 0
float screenAspect = (float) sizeX / sizeY, float screenAspect = (float) sizeX / sizeY,
windowAspect = (float) w / h; windowAspect = (float) w / h;
@ -654,15 +659,18 @@ static int sdlCalculateShift(uint32_t mask)
static char* sdlStateName(int num) static char* sdlStateName(int num)
{ {
static char stateName[2048]; static char stateName[2048];
char *gameDir = sdlGetFilePath(filename);
char *gameFile = sdlGetFilename(filename);
if (saveDir) if (saveDir)
sprintf(stateName, "%s/%s%d.sgm", saveDir, sdlGetFilename(filename), sprintf(stateName, "%s%c%s%d.sgm", saveDir, FILE_SEP, gameFile, num + 1);
num + 1); else if (access(gameDir, W_OK) == 0)
else if (homeDir) sprintf(stateName, "%s%c%s%d.sgm", gameDir, FILE_SEP, gameFile, num + 1);
sprintf(stateName, "%s/%s/%s%d.sgm", homeDir, DOT_DIR, sdlGetFilename(filename), num + 1);
else else
sprintf(stateName, "%s%d.sgm", filename, num + 1); sprintf(stateName, "%s%c%s%d.sgm", homeDataDir, FILE_SEP, gameFile, num + 1);
freeSafe(gameDir);
freeSafe(gameFile);
return stateName; return stateName;
} }
@ -753,37 +761,46 @@ void sdlWriteBackupStateExchange(int from, int to, int backup)
void sdlWriteBattery() void sdlWriteBattery()
{ {
char buffer[1048]; char buffer[2048];
char *gameDir = sdlGetFilePath(filename);
char *gameFile = sdlGetFilename(filename);
if (batteryDir) if (batteryDir)
sprintf(buffer, "%s/%s.sav", batteryDir, sdlGetFilename(filename)); sprintf(buffer, "%s%c%s.sav", batteryDir, FILE_SEP, gameFile);
else if (homeDir) else if (access(gameDir, W_OK) == 0)
sprintf(buffer, "%s/%s/%s.sav", homeDir, DOT_DIR, sdlGetFilename(filename)); sprintf(buffer, "%s%c%s.sav", gameDir, FILE_SEP, gameFile);
else else
sprintf(buffer, "%s.sav", filename); sprintf(buffer, "%s%c%s.sav", homeDataDir, FILE_SEP, gameFile);
emulator.emuWriteBattery(buffer); bool result = emulator.emuWriteBattery(buffer);
systemScreenMessage("Wrote battery"); if (result)
systemMessage(0, "Wrote battery '%s'", buffer);
freeSafe(gameFile);
freeSafe(gameDir);
} }
void sdlReadBattery() void sdlReadBattery()
{ {
char buffer[1048]; char buffer[2048];
char *gameDir = sdlGetFilePath(filename);
char *gameFile = sdlGetFilename(filename);
if (batteryDir) if (batteryDir)
sprintf(buffer, "%s/%s.sav", batteryDir, sdlGetFilename(filename)); sprintf(buffer, "%s%c%s.sav", batteryDir, FILE_SEP, gameFile);
else if (homeDir) else if (access(gameDir, W_OK) == 0)
sprintf(buffer, "%s/%s/%s.sav", homeDir, DOT_DIR, sdlGetFilename(filename)); sprintf(buffer, "%s%c%s.sav", gameDir, FILE_SEP, gameFile);
else else
sprintf(buffer, "%s.sav", filename); sprintf(buffer, "%s%c%s.sav", homeDataDir, FILE_SEP, gameFile);
bool res = false; bool result = emulator.emuReadBattery(buffer);
res = emulator.emuReadBattery(buffer); if (result)
systemMessage(0, "Loaded battery '%s'", buffer);
if (res) freeSafe(gameFile);
systemScreenMessage("Loaded battery"); freeSafe(gameDir);
} }
void sdlReadDesktopVideoMode() void sdlReadDesktopVideoMode()
@ -1637,12 +1654,30 @@ void handleRewinds()
} }
} }
void SetHomeConfigDir()
{
sprintf(homeConfigDir, "%s%s", get_xdg_user_config_home().c_str(), DOT_DIR);
struct stat s;
if (stat(homeDataDir, &s) == -1 || !S_ISDIR(s.st_mode))
mkdir(homeDataDir, 0755);
}
void SetHomeDataDir()
{
sprintf(homeDataDir, "%s%s", get_xdg_user_data_home().c_str(), DOT_DIR);
struct stat s;
if (stat(homeDataDir, &s) == -1 || !S_ISDIR(s.st_mode))
mkdir(homeDataDir, 0755);
}
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
fprintf(stdout, "%s\n", VBA_NAME_AND_SUBVERSION); fprintf(stdout, "%s\n", VBA_NAME_AND_SUBVERSION);
home = argv[0]; home = argv[0];
SetHome(home); SetHome(home);
SetHomeConfigDir();
SetHomeDataDir();
frameSkip = 2; frameSkip = 2;
gbBorderOn = 0; gbBorderOn = 0;
@ -2024,6 +2059,7 @@ int main(int argc, char** argv)
void systemMessage(int num, const char* msg, ...) void systemMessage(int num, const char* msg, ...)
{ {
(void)num; // unused params
va_list valist; va_list valist;
va_start(valist, msg); va_start(valist, msg);
@ -2208,27 +2244,35 @@ void system10Frames(int rate)
void systemScreenCapture(int a) void systemScreenCapture(int a)
{ {
char buffer[2048]; char buffer[2048];
bool result = false;
char *gameDir = sdlGetFilePath(filename);
char *gameFile = sdlGetFilename(filename);
if (captureFormat) { if (captureFormat) {
if (screenShotDir) if (screenShotDir)
sprintf(buffer, "%s/%s%02d.bmp", screenShotDir, sdlGetFilename(filename), a); sprintf(buffer, "%s%c%s%02d.bmp", screenShotDir, FILE_SEP, gameFile, a);
else if (homeDir) else if (access(gameDir, W_OK) == 0)
sprintf(buffer, "%s/%s/%s%02d.bmp", homeDir, DOT_DIR, sdlGetFilename(filename), a); sprintf(buffer, "%s%c%s%02d.bmp", gameDir, FILE_SEP, gameFile, a);
else else
sprintf(buffer, "%s%02d.bmp", filename, a); sprintf(buffer, "%s%c%s%02d.bmp", homeDataDir, FILE_SEP, gameFile, a);
emulator.emuWriteBMP(buffer); result = emulator.emuWriteBMP(buffer);
} else { } else {
if (screenShotDir) if (screenShotDir)
sprintf(buffer, "%s/%s%02d.png", screenShotDir, sdlGetFilename(filename), a); sprintf(buffer, "%s%c%s%02d.png", screenShotDir, FILE_SEP, gameFile, a);
else if (homeDir) else if (access(gameDir, W_OK) == 0)
sprintf(buffer, "%s/%s/%s%02d.png", homeDir, DOT_DIR, sdlGetFilename(filename), a); sprintf(buffer, "%s%c%s%02d.png", gameDir, FILE_SEP, gameFile, a);
else else
sprintf(buffer, "%s%02d.png", filename, a); sprintf(buffer, "%s%c%s%02d.png", homeDataDir, FILE_SEP, gameFile, a);
emulator.emuWritePNG(buffer);
result = emulator.emuWritePNG(buffer);
} }
systemScreenMessage("Screen capture"); if (result)
systemScreenMessage("Screen capture");
freeSafe(gameFile);
freeSafe(gameDir);
} }
void systemSaveOldest() void systemSaveOldest()
@ -2248,6 +2292,12 @@ uint32_t systemGetClock()
void systemGbPrint(uint8_t* data, int len, int pages, int feed, int palette, int contrast) void systemGbPrint(uint8_t* data, int len, int pages, int feed, int palette, int contrast)
{ {
(void)data; // unused params
(void)len; // unused params
(void)pages; // unused params
(void)feed; // unused params
(void)palette; // unused params
(void)contrast; // unused params
} }
/* xKiv: added timestamp */ /* xKiv: added timestamp */
@ -2370,6 +2420,8 @@ void systemOnSoundShutdown()
void systemOnWriteDataToSoundBuffer(const uint16_t* finalWave, int length) void systemOnWriteDataToSoundBuffer(const uint16_t* finalWave, int length)
{ {
(void)finalWave; // unused params
(void)length; // unused params
} }
void log(const char* defaultMsg, ...) void log(const char* defaultMsg, ...)

View File

@ -634,9 +634,9 @@ extern int yylex(void);
*/ */
YY_DECL YY_DECL
{ {
register yy_state_type yy_current_state; yy_state_type yy_current_state;
register char *yy_cp, *yy_bp; char *yy_cp, *yy_bp;
register int yy_act; int yy_act;
#line 33 "expr.l" #line 33 "expr.l"
@ -681,7 +681,7 @@ YY_DECL
yy_current_state = (yy_start); yy_current_state = (yy_start);
yy_match: yy_match:
do { do {
register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
if (yy_accept[yy_current_state]) { if (yy_accept[yy_current_state]) {
(yy_last_accepting_state) = yy_current_state; (yy_last_accepting_state) = yy_current_state;
(yy_last_accepting_cpos) = yy_cp; (yy_last_accepting_cpos) = yy_cp;
@ -912,9 +912,9 @@ YY_DECL
*/ */
static int yy_get_next_buffer(void) static int yy_get_next_buffer(void)
{ {
register char* dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; char* dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
register char* source = (yytext_ptr); char* source = (yytext_ptr);
register int number_to_move, i; int number_to_move, i;
int ret_val; int ret_val;
if ((yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1]) if ((yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1])
@ -1031,13 +1031,13 @@ static int yy_get_next_buffer(void)
static yy_state_type yy_get_previous_state(void) static yy_state_type yy_get_previous_state(void)
{ {
register yy_state_type yy_current_state; yy_state_type yy_current_state;
register char* yy_cp; char* yy_cp;
yy_current_state = (yy_start); yy_current_state = (yy_start);
for (yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp) { for (yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp) {
register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
if (yy_accept[yy_current_state]) { if (yy_accept[yy_current_state]) {
(yy_last_accepting_state) = yy_current_state; (yy_last_accepting_state) = yy_current_state;
(yy_last_accepting_cpos) = yy_cp; (yy_last_accepting_cpos) = yy_cp;
@ -1060,10 +1060,10 @@ static yy_state_type yy_get_previous_state(void)
*/ */
static yy_state_type yy_try_NUL_trans(yy_state_type yy_current_state) static yy_state_type yy_try_NUL_trans(yy_state_type yy_current_state)
{ {
register int yy_is_jam; int yy_is_jam;
register char* yy_cp = (yy_c_buf_p); char* yy_cp = (yy_c_buf_p);
register YY_CHAR yy_c = 1; YY_CHAR yy_c = 1;
if (yy_accept[yy_current_state]) { if (yy_accept[yy_current_state]) {
(yy_last_accepting_state) = yy_current_state; (yy_last_accepting_state) = yy_current_state;
(yy_last_accepting_cpos) = yy_cp; (yy_last_accepting_cpos) = yy_cp;
@ -1655,7 +1655,7 @@ int yylex_destroy(void)
#ifndef yytext_ptr #ifndef yytext_ptr
static void yy_flex_strncpy(char* s1, yyconst char* s2, int n) static void yy_flex_strncpy(char* s1, yyconst char* s2, int n)
{ {
register int i; int i;
for (i = 0; i < n; ++i) for (i = 0; i < n; ++i)
s1[i] = s2[i]; s1[i] = s2[i];
} }
@ -1664,7 +1664,7 @@ static void yy_flex_strncpy(char* s1, yyconst char* s2, int n)
#ifdef YY_NEED_STRLEN #ifdef YY_NEED_STRLEN
static int yy_flex_strlen(yyconst char* s) static int yy_flex_strlen(yyconst char* s)
{ {
register int n; int n;
for (n = 0; s[n]; ++n) for (n = 0; s[n]; ++n)
; ;

View File

@ -1530,6 +1530,7 @@ yyreturn:
int yyerror(const char* s) int yyerror(const char* s)
{ {
(void)s; // unused params
return 0; return 0;
} }

View File

@ -97,6 +97,9 @@ Node* exprNodeNumber()
bool exprNodeNumberResolve(Node* n, Function* f, CompileUnit* u) bool exprNodeNumberResolve(Node* n, Function* f, CompileUnit* u)
{ {
(void)n; // unused params
(void)f; // unused params
(void)u; // unused params
return true; return true;
} }

View File

@ -605,6 +605,7 @@ void (*sdlStretcher24[4])(uint8_t*, uint8_t*, int) = {
bool sdlStretchInit(int colorDepth, int sizeMultiplier, int srcWidth) bool sdlStretchInit(int colorDepth, int sizeMultiplier, int srcWidth)
{ {
(void)srcWidth; // unused params
#ifndef C_CORE #ifndef C_CORE
sdlMakeStretcher(srcWidth, sizeMultiplier); sdlMakeStretcher(srcWidth, sizeMultiplier);
#else #else

View File

@ -340,7 +340,7 @@ static void exchange(argv) char** argv;
if (top - middle > middle - bottom) { if (top - middle > middle - bottom) {
/* Bottom segment is the short one. */ /* Bottom segment is the short one. */
int len = middle - bottom; int len = middle - bottom;
register int i; int i;
/* Swap it with the top part of the top segment. */ /* Swap it with the top part of the top segment. */
for (i = 0; i < len; i++) { for (i = 0; i < len; i++) {
@ -354,7 +354,7 @@ static void exchange(argv) char** argv;
} else { } else {
/* Top segment is the short one. */ /* Top segment is the short one. */
int len = top - middle; int len = top - middle;
register int i; int i;
/* Swap it with the bottom part of the bottom segment. */ /* Swap it with the bottom part of the bottom segment. */
for (i = 0; i < len; i++) { for (i = 0; i < len; i++) {

File diff suppressed because it is too large Load Diff

View File

@ -50,7 +50,7 @@ void MainFrame::GetMenuOptionBool(const char* menuName, bool& field)
field = !field; field = !field;
int id = wxXmlResource::GetXRCID(wxString(menuName, wxConvUTF8)); int id = wxXmlResource::GetXRCID(wxString(menuName, wxConvUTF8));
for (int i = 0; i < checkable_mi.size(); i++) { for (size_t i = 0; i < checkable_mi.size(); i++) {
if (checkable_mi[i].cmd != id) if (checkable_mi[i].cmd != id)
continue; continue;
@ -65,7 +65,7 @@ void MainFrame::GetMenuOptionInt(const char* menuName, int& field, int mask)
bool is_checked = ((field) & (mask)) != (value); bool is_checked = ((field) & (mask)) != (value);
int id = wxXmlResource::GetXRCID(wxString(menuName, wxConvUTF8)); int id = wxXmlResource::GetXRCID(wxString(menuName, wxConvUTF8));
for (int i = 0; i < checkable_mi.size(); i++) { for (size_t i = 0; i < checkable_mi.size(); i++) {
if (checkable_mi[i].cmd != id) if (checkable_mi[i].cmd != id)
continue; continue;
@ -80,7 +80,7 @@ void MainFrame::SetMenuOption(const char* menuName, int value)
{ {
int id = wxXmlResource::GetXRCID(wxString(menuName, wxConvUTF8)); int id = wxXmlResource::GetXRCID(wxString(menuName, wxConvUTF8));
for (int i = 0; i < checkable_mi.size(); i++) { for (size_t i = 0; i < checkable_mi.size(); i++) {
if (checkable_mi[i].cmd != id) if (checkable_mi[i].cmd != id)
continue; continue;
@ -506,6 +506,7 @@ static bool maker_lt(const rom_maker& r1, const rom_maker& r2)
void SetDialogLabel(wxDialog* dlg, const wxString& id, wxString ts, size_t l) void SetDialogLabel(wxDialog* dlg, const wxString& id, wxString ts, size_t l)
{ {
(void)l; // unused params
ts.Replace(wxT("&"), wxT("&&"), true); ts.Replace(wxT("&"), wxT("&&"), true);
(dynamic_cast<wxControl*>((*dlg).FindWindow(wxXmlResource::GetXRCID(id))))->SetLabel(ts); (dynamic_cast<wxControl*>((*dlg).FindWindow(wxXmlResource::GetXRCID(id))))->SetLabel(ts);
} }
@ -527,7 +528,7 @@ EVT_HANDLER_MASK(RomInformation, "ROM information...", CMDEN_GB | CMDEN_GBA)
} while (0) } while (0)
#define setblabs(id, b, ts) \ #define setblabs(id, b, ts) \
do { \ do { \
s.Printf(wxT("%02x (%s)"), (unsigned int)b, ts); \ s.Printf(wxT("%02x (%s)"), (unsigned int)b, ts.c_str()); \
setlab(id); \ setlab(id); \
} while (0) } while (0)
#define setlabs(id, ts, l) \ #define setlabs(id, ts, l) \
@ -548,7 +549,7 @@ EVT_HANDLER_MASK(RomInformation, "ROM information...", CMDEN_GB | CMDEN_GBA)
s.Printf(wxT("%02x"), gbRom[0x14b]); s.Printf(wxT("%02x"), gbRom[0x14b]);
setlab("MakerCode"); setlab("MakerCode");
const rom_maker m = { s }, *rm; const rom_maker m = { s, wxString() }, *rm;
rm = std::lower_bound(&makers[0], &makers[num_makers], m, maker_lt); rm = std::lower_bound(&makers[0], &makers[num_makers], m, maker_lt);
if (rm < &makers[num_makers] && !wxStrcmp(m.code, rm->code)) if (rm < &makers[num_makers] && !wxStrcmp(m.code, rm->code))
@ -776,7 +777,7 @@ EVT_HANDLER_MASK(RomInformation, "ROM information...", CMDEN_GB | CMDEN_GBA)
SetDialogLabel(dlg, wxT("CRC32"), rom_crc32, 8); SetDialogLabel(dlg, wxT("CRC32"), rom_crc32, 8);
setlabs("GameCode", rom[0xac], 4); setlabs("GameCode", rom[0xac], 4);
setlabs("MakerCode", rom[0xb0], 2); setlabs("MakerCode", rom[0xb0], 2);
const rom_maker m = { s }, *rm; const rom_maker m = { s, wxString() }, *rm;
rm = std::lower_bound(&makers[0], &makers[num_makers], m, maker_lt); rm = std::lower_bound(&makers[0], &makers[num_makers], m, maker_lt);
if (rm < &makers[num_makers] && !wxStrcmp(m.code, rm->code)) if (rm < &makers[num_makers] && !wxStrcmp(m.code, rm->code))
@ -804,6 +805,9 @@ EVT_HANDLER_MASK(RomInformation, "ROM information...", CMDEN_GB | CMDEN_GBA)
dlg->Fit(); dlg->Fit();
ShowModal(dlg); ShowModal(dlg);
} break; } break;
default:
break;
} }
} }
@ -865,9 +869,9 @@ EVT_HANDLER_MASK(ImportBatteryFile, "Import battery file...", CMDEN_GB | CMDEN_G
wxString msg; wxString msg;
if (panel->emusys->emuReadBattery(fn.mb_fn_str())) if (panel->emusys->emuReadBattery(fn.mb_fn_str()))
msg.Printf(_("Loaded battery %s"), fn.mb_str()); msg.Printf(_("Loaded battery %s"), fn.c_str());
else else
msg.Printf(_("Error loading battery %s"), fn.mb_str()); msg.Printf(_("Error loading battery %s"), fn.c_str());
systemScreenMessage(msg); systemScreenMessage(msg);
} }
@ -903,7 +907,7 @@ EVT_HANDLER_MASK(ImportGamesharkCodeFile, "Import GameShark code file...", CMDEN
wxFFile f(fn, wxT("rb")); wxFFile f(fn, wxT("rb"));
if (!f.IsOpened()) { if (!f.IsOpened()) {
wxLogError(_("Cannot open file %s"), fn.mb_str()); wxLogError(_("Cannot open file %s"), fn.c_str());
return; return;
} }
@ -913,7 +917,7 @@ EVT_HANDLER_MASK(ImportGamesharkCodeFile, "Import GameShark code file...", CMDEN
char buf[14]; char buf[14];
if (f.Read(&len, sizeof(len)) != sizeof(len) || wxUINT32_SWAP_ON_BE(len) != 14 || f.Read(buf, 14) != 14 || memcmp(buf, "SharkPortCODES", 14)) { if (f.Read(&len, sizeof(len)) != sizeof(len) || wxUINT32_SWAP_ON_BE(len) != 14 || f.Read(buf, 14) != 14 || memcmp(buf, "SharkPortCODES", 14)) {
wxLogError(_("Unsupported code file %s"), fn.mb_str()); wxLogError(_("Unsupported code file %s"), fn.c_str());
return; return;
} }
@ -971,7 +975,7 @@ EVT_HANDLER_MASK(ImportGamesharkCodeFile, "Import GameShark code file...", CMDEN
game = lst->GetSelection(); game = lst->GetSelection();
if (game == wxNOT_FOUND) if ((int)game == wxNOT_FOUND)
game = 0; game = 0;
} }
@ -983,9 +987,9 @@ EVT_HANDLER_MASK(ImportGamesharkCodeFile, "Import GameShark code file...", CMDEN
} }
if (res) if (res)
msg.Printf(_("Loaded code file %s"), fn.mb_str()); msg.Printf(_("Loaded code file %s"), fn.c_str());
else else
msg.Printf(_("Error loading code file %s"), fn.mb_str()); msg.Printf(_("Error loading code file %s"), fn.c_str());
systemScreenMessage(msg); systemScreenMessage(msg);
} }
@ -1031,9 +1035,9 @@ EVT_HANDLER_MASK(ImportGamesharkActionReplaySnapshot,
} }
if (res) if (res)
msg.Printf(_("Loaded snapshot file %s"), fn.mb_str()); msg.Printf(_("Loaded snapshot file %s"), fn.c_str());
else else
msg.Printf(_("Error loading snapshot file %s"), fn.mb_str()); msg.Printf(_("Error loading snapshot file %s"), fn.c_str());
systemScreenMessage(msg); systemScreenMessage(msg);
} }
@ -1056,9 +1060,9 @@ EVT_HANDLER_MASK(ExportBatteryFile, "Export battery file...", CMDEN_GB | CMDEN_G
wxString msg; wxString msg;
if (panel->emusys->emuWriteBattery(fn.mb_fn_str())) if (panel->emusys->emuWriteBattery(fn.mb_fn_str()))
msg.Printf(_("Wrote battery %s"), fn.mb_str()); msg.Printf(_("Wrote battery %s"), fn.c_str());
else else
msg.Printf(_("Error writing battery %s"), fn.mb_str()); msg.Printf(_("Error writing battery %s"), fn.c_str());
systemScreenMessage(msg); systemScreenMessage(msg);
} }
@ -1097,11 +1101,11 @@ EVT_HANDLER_MASK(ExportGamesharkSnapshot, "Export GameShark snapshot...", CMDEN_
// FIXME: this will fail on big-endian machines if file format is // FIXME: this will fail on big-endian machines if file format is
// little-endian // little-endian
// fix in GBA.cpp // fix in GBA.cpp
if (CPUWriteGSASnapshot(fn.mb_str(), tit->GetValue().mb_str(), if (CPUWriteGSASnapshot(fn.utf8_str(), tit->GetValue().utf8_str(),
dsc->GetValue().mb_str(), n->GetValue().mb_str())) dsc->GetValue().utf8_str(), n->GetValue().utf8_str()))
msg.Printf(_("Saved snapshot file %s"), fn.mb_str()); msg.Printf(_("Saved snapshot file %s"), fn.c_str());
else else
msg.Printf(_("Error saving snapshot file %s"), fn.mb_str()); msg.Printf(_("Error saving snapshot file %s"), fn.c_str());
systemScreenMessage(msg); systemScreenMessage(msg);
} }
@ -1141,7 +1145,7 @@ EVT_HANDLER_MASK(ScreenCapture, "Screen capture...", CMDEN_GB | CMDEN_GBA)
panel->emusys->emuWriteBMP(fn.mb_fn_str()); panel->emusys->emuWriteBMP(fn.mb_fn_str());
wxString msg; wxString msg;
msg.Printf(_("Wrote snapshot %s"), fn.mb_str()); msg.Printf(_("Wrote snapshot %s"), fn.c_str());
systemScreenMessage(msg); systemScreenMessage(msg);
} }
@ -1606,7 +1610,7 @@ EVT_HANDLER_MASK(Rewind, "Rewind", CMDEN_REWIND)
// if within 5 seconds of last one, and > 1 state, delete last state & move back // if within 5 seconds of last one, and > 1 state, delete last state & move back
// FIXME: 5 should actually be user-configurable // FIXME: 5 should actually be user-configurable
// maybe instead of 5, 10% of rewind_interval // maybe instead of 5, 10% of rewind_interval
if (panel->num_rewind_states > 1 && (gopts.rewind_interval <= 5 || panel->rewind_time / 6 > gopts.rewind_interval - 5)) { if (panel->num_rewind_states > 1 && (gopts.rewind_interval <= 5 || (int)panel->rewind_time / 6 > gopts.rewind_interval - 5)) {
--panel->num_rewind_states; --panel->num_rewind_states;
panel->next_rewind_state = rew_st; panel->next_rewind_state = rew_st;
@ -1713,7 +1717,7 @@ EVT_HANDLER_MASK(VideoLayersReset, "Show all video layers", CMDEN_GB | CMDEN_GBA
#define set_vl(s) \ #define set_vl(s) \
do { \ do { \
int id = XRCID(s); \ int id = XRCID(s); \
for (int i = 0; i < checkable_mi.size(); i++) \ for (size_t i = 0; i < checkable_mi.size(); i++) \
if (checkable_mi[i].cmd == id) { \ if (checkable_mi[i].cmd == id) { \
checkable_mi[i].mi->Check(true); \ checkable_mi[i].mi->Check(true); \
break; \ break; \
@ -1937,7 +1941,7 @@ void MainFrame::GDBBreak()
if (!debugOpenPty()) if (!debugOpenPty())
return; return;
msg.Printf(_("Waiting for connection at %s"), debugGetSlavePty().mb_str()); msg.Printf(_("Waiting for connection at %s"), debugGetSlavePty().c_str());
} else } else
#endif #endif
{ {
@ -2242,7 +2246,7 @@ EVT_HANDLER(GameBoyAdvanceConfigure, "Game Boy Advance options...")
vba_over.append(wxTextFile::GetEOL()); vba_over.append(wxTextFile::GetEOL());
fn.Mkdir(0777, wxPATH_MKDIR_FULL); fn.Mkdir(0777, wxPATH_MKDIR_FULL);
wxTempFileOutputStream fos(fn.GetFullPath()); wxTempFileOutputStream fos(fn.GetFullPath());
fos.Write(vba_over.mb_str(), vba_over.size()); fos.Write(vba_over.c_str(), vba_over.size());
fos.Commit(); fos.Commit();
} }
} }
@ -2291,7 +2295,7 @@ EVT_HANDLER_MASK(ChangeFilter, "Change Pixel Filter", CMDEN_NREC_ANY)
{ {
int filt = gopts.filter; int filt = gopts.filter;
if (filt == FF_PLUGIN || ++gopts.filter == FF_PLUGIN && gopts.filter_plugin.empty()) { if ((filt == FF_PLUGIN || ++gopts.filter == FF_PLUGIN) && gopts.filter_plugin.empty()) {
gopts.filter = 0; gopts.filter = 0;
} }

View File

@ -18,7 +18,7 @@ SET(EVLINES )
FOREACH(EV ${MW}) FOREACH(EV ${MW})
# stripping the wxID_ makes it look better, but it's still all-caps # stripping the wxID_ makes it look better, but it's still all-caps
STRING(REGEX REPLACE "^[^\"]*\\((wxID_|)([^,]*),[^\"]*(\"[^\"]*\")[^,)]*(,[^)]*|).*" STRING(REGEX REPLACE "^[^\"]*\\((wxID_|)([^,]*),[^\"]*(\"[^\"]*\")[^,)]*(,[^)]*|).*"
" {wxT(\"\\2\"), wxTRANSLATE(\\3), XRCID(\"\\1\\2\")\\4 }" " new_cmditem(wxT(\"\\2\"), wxTRANSLATE(\\3), XRCID(\"\\1\\2\")\\4 )"
EV "${EV}") EV "${EV}")
STRING(REGEX REPLACE "XRCID\\(\"(wxID_[^\"]*)\"\\)" "\\1" EV ${EV}) STRING(REGEX REPLACE "XRCID\\(\"(wxID_[^\"]*)\"\\)" "\\1" EV ${EV})
LIST(APPEND EVLINES "${EV},\n") LIST(APPEND EVLINES "${EV},\n")

View File

@ -69,7 +69,7 @@ bool GetFADevices(wxArrayString& names, wxArrayString& ids)
} }
GetFADevices(fa, &names, &ids, NULL); GetFADevices(fa, &names, &ids, NULL);
//fa->Release(); //fa->Release();
FAudio_Release(fa); FAudio_Release(fa);
return true; return true;
} }
@ -371,7 +371,7 @@ bool FAudio_Output::init(long sampleRate)
wfx.nBlockAlign = wfx.nChannels * (wfx.wBitsPerSample / 8); wfx.nBlockAlign = wfx.nChannels * (wfx.wBitsPerSample / 8);
wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign; wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign;
// create sound receiver // create sound receiver
hr = FAudio_CreateMasteringVoice( hr = FAudio_CreateMasteringVoice(
faud, faud,
&mVoice, &mVoice,
FAUDIO_DEFAULT_CHANNELS, FAUDIO_DEFAULT_CHANNELS,
@ -386,9 +386,9 @@ bool FAudio_Output::init(long sampleRate)
return false; return false;
} }
// create sound emitter // create sound emitter
//This should be FAudio_CreateSourceVoice() //This should be FAudio_CreateSourceVoice()
//hr = faud->CreateSourceVoice(&sVoice, &wfx, 0, 4.0f, &notify); //hr = faud->CreateSourceVoice(&sVoice, &wfx, 0, 4.0f, &notify);
hr = FAudio_CreateSourceVoice(faud, &sVoice, (const FAudioWaveFormatEx*)&wfx, 0, 4.0f, &notify, NULL, NULL); hr = FAudio_CreateSourceVoice(faud, &sVoice, (const FAudioWaveFormatEx*)&wfx, 0, 4.0f, &notify, NULL, NULL);
if (hr != S_OK) { if (hr != S_OK) {
@ -516,7 +516,7 @@ bool FAudio_Output::init(long sampleRate)
} }
void FAudio_Output::write(uint16_t* finalWave, int length) void FAudio_Output::write(uint16_t* finalWave, int length)
{ {
UINT32 flags = 0; UINT32 flags = 0;
if (!initialized || failed) if (!initialized || failed)
return; return;

View File

@ -229,7 +229,7 @@ public:
s.Printf(wxT("0x%08X"), address); s.Printf(wxT("0x%08X"), address);
addr->SetLabel(s); addr->SetLabel(s);
if (!mode || (mode < 3 || mode > 5) && bg < 2) { if ((!mode || (mode < 3 || mode > 5)) && bg < 2) {
uint16_t value = *((uint16_t*)&vram[address - 0x6000000]); uint16_t value = *((uint16_t*)&vram[address - 0x6000000]);
s.Printf(wxT("%d"), value & 1023); s.Printf(wxT("%d"), value & 1023);
tile->SetLabel(s); tile->SetLabel(s);
@ -738,6 +738,10 @@ void MainFrame::MapViewer()
case IMAGE_GB: case IMAGE_GB:
LoadXRCViewer(GBMap); LoadXRCViewer(GBMap);
break; break;
case IMAGE_UNKNOWN:
// do nothing
break;
} }
} }
@ -1113,6 +1117,10 @@ void MainFrame::OAMViewer()
case IMAGE_GB: case IMAGE_GB:
LoadXRCViewer(GBOAM); LoadXRCViewer(GBOAM);
break; break;
case IMAGE_UNKNOWN:
// do nothing
break;
} }
} }
@ -1233,11 +1241,13 @@ public:
} }
void SelBG(wxMouseEvent& ev) void SelBG(wxMouseEvent& ev)
{ {
(void)ev; // unused params
spv->SetSel(-1, -1, false); spv->SetSel(-1, -1, false);
ShowSel(); ShowSel();
} }
void SelSprite(wxMouseEvent& ev) void SelSprite(wxMouseEvent& ev)
{ {
(void)ev; // unused params
bpv->SetSel(-1, -1, false); bpv->SetSel(-1, -1, false);
ShowSel(); ShowSel();
} }
@ -1273,14 +1283,17 @@ public:
} }
void SaveBG(wxCommandEvent& ev) void SaveBG(wxCommandEvent& ev)
{ {
(void)ev; // unused params
savepal(this, colbmp, 16 * 16, wxT("bg")); savepal(this, colbmp, 16 * 16, wxT("bg"));
} }
void SaveOBJ(wxCommandEvent& ev) void SaveOBJ(wxCommandEvent& ev)
{ {
(void)ev; // unused params
savepal(this, colbmp + 16 * 16 * 3, 16 * 16, wxT("obj")); savepal(this, colbmp + 16 * 16 * 3, 16 * 16, wxT("obj"));
} }
void ChangeBackdrop(wxCommandEvent& ev) void ChangeBackdrop(wxCommandEvent& ev)
{ {
(void)ev; // unused params
// FIXME: this should really be a preference // FIXME: this should really be a preference
// should also have some way of indicating selection // should also have some way of indicating selection
// perhaps replace w/ checkbox + colorpickerctrl // perhaps replace w/ checkbox + colorpickerctrl
@ -1294,7 +1307,7 @@ public:
*cd = dlg.GetColourData(); *cd = dlg.GetColourData();
wxColour c = cd->GetColour(); wxColour c = cd->GetColour();
//Binary or the upper 5 bits of each color choice //Binary or the upper 5 bits of each color choice
customBackdropColor = (c.Red() >> 3) || ((c.Green() >> 3) << 5) || ((c.Blue() >> 3) << 10); customBackdropColor = ((c.Red() >> 3) != 0) || (((c.Green() >> 3) << 5) != 0) || (((c.Blue() >> 3) << 10) != 0);
} else } else
// kind of an unintuitive way to turn it off... // kind of an unintuitive way to turn it off...
customBackdropColor = -1; customBackdropColor = -1;
@ -1347,11 +1360,13 @@ public:
} }
void SelBG(wxMouseEvent& ev) void SelBG(wxMouseEvent& ev)
{ {
(void)ev; // unused params
spv->SetSel(-1, -1, false); spv->SetSel(-1, -1, false);
ShowSel(); ShowSel();
} }
void SelSprite(wxMouseEvent& ev) void SelSprite(wxMouseEvent& ev)
{ {
(void)ev; // unused params
bpv->SetSel(-1, -1, false); bpv->SetSel(-1, -1, false);
ShowSel(); ShowSel();
} }
@ -1386,10 +1401,12 @@ public:
} }
void SaveBG(wxCommandEvent& ev) void SaveBG(wxCommandEvent& ev)
{ {
(void)ev; // unused params
savepal(this, colbmp, 4 * 8, wxT("bg")); savepal(this, colbmp, 4 * 8, wxT("bg"));
} }
void SaveOBJ(wxCommandEvent& ev) void SaveOBJ(wxCommandEvent& ev)
{ {
(void)ev; // unused params
savepal(this, colbmp + 4 * 8 * 3, 4 * 8, wxT("obj")); savepal(this, colbmp + 4 * 8 * 3, 4 * 8, wxT("obj"));
} }
@ -1419,6 +1436,10 @@ void MainFrame::PaletteViewer()
case IMAGE_GB: case IMAGE_GB:
LoadXRCViewer(GBPalette); LoadXRCViewer(GBPalette);
break; break;
case IMAGE_UNKNOWN:
// do nothing
break;
} }
} }
@ -1687,5 +1708,9 @@ void MainFrame::TileViewer()
case IMAGE_GB: case IMAGE_GB:
LoadXRCViewer(GBTile); LoadXRCViewer(GBTile);
break; break;
case IMAGE_UNKNOWN:
// do nothing
break;
} }
} }

View File

@ -17,7 +17,6 @@
#include <wx/filepicker.h> #include <wx/filepicker.h>
#include <wx/progdlg.h> #include <wx/progdlg.h>
#include <wx/spinctrl.h> #include <wx/spinctrl.h>
#include <wx/valnum.h>
#include <wx/stockitem.h> #include <wx/stockitem.h>
#include <wx/tokenzr.h> #include <wx/tokenzr.h>
#include <wx/txtstrm.h> #include <wx/txtstrm.h>
@ -73,10 +72,12 @@ public:
wxButton* okb; wxButton* okb;
void ServerOKButton(wxCommandEvent& ev) void ServerOKButton(wxCommandEvent& ev)
{ {
(void)ev; // unused params
okb->SetLabel(_("Start!")); okb->SetLabel(_("Start!"));
} }
void ClientOKButton(wxCommandEvent& ev) void ClientOKButton(wxCommandEvent& ev)
{ {
(void)ev; // unused params
okb->SetLabel(_("Connect")); okb->SetLabel(_("Connect"));
} }
// attached to OK, so skip when OK // attached to OK, so skip when OK
@ -88,7 +89,7 @@ public:
return; return;
if (!server) { if (!server) {
bool valid = SetLinkServerHost(gopts.link_host.mb_str()); bool valid = SetLinkServerHost(gopts.link_host.c_str());
if (!valid) { if (!valid) {
wxMessageBox(_("You must enter a valid host name"), wxMessageBox(_("You must enter a valid host name"),
@ -111,10 +112,10 @@ public:
char host[length]; char host[length];
GetLinkServerHost(host, length); GetLinkServerHost(host, length);
title.Printf(_("Waiting for clients...")); title.Printf(_("Waiting for clients..."));
connmsg.Printf(_("Server IP address is: %s\n"), wxString(host, wxConvLibc).mb_str()); connmsg.Printf(_("Server IP address is: %s\n"), wxString(host, wxConvLibc).c_str());
} else { } else {
title.Printf(_("Waiting for connection...")); title.Printf(_("Waiting for connection..."));
connmsg.Printf(_("Connecting to %s\n"), gopts.link_host.mb_str()); connmsg.Printf(_("Connecting to %s\n"), gopts.link_host.c_str());
} }
// Init link // Init link
@ -306,7 +307,7 @@ public:
} break; } break;
case wxID_REMOVE: { case wxID_REMOVE: {
bool asked = false, restore; bool asked = false, restore = false;
for (int i = list->GetItemCount() - 1; i >= 0; i--) for (int i = list->GetItemCount() - 1; i >= 0; i--)
if (list->GetItemState(i, wxLIST_STATE_SELECTED)) { if (list->GetItemState(i, wxLIST_STATE_SELECTED)) {
@ -436,9 +437,9 @@ public:
if (isgb) { if (isgb) {
if (!ce_type) if (!ce_type)
gbAddGsCheat(tok.mb_str(), ce_desc.mb_str()); gbAddGsCheat(tok.utf8_str(), ce_desc.utf8_str());
else else
gbAddGgCheat(tok.mb_str(), ce_desc.mb_str()); gbAddGgCheat(tok.utf8_str(), ce_desc.utf8_str());
} else { } else {
// Flashcart CHT format // Flashcart CHT format
if (tok.Contains(wxT("="))) { if (tok.Contains(wxT("="))) {
@ -446,16 +447,16 @@ public:
} }
// Generic Code // Generic Code
else if (tok.Contains(wxT(":"))) else if (tok.Contains(wxT(":")))
cheatsAddCheatCode(tok.mb_str(), ce_desc.mb_str()); cheatsAddCheatCode(tok.utf8_str(), ce_desc.utf8_str());
// following determination of type by lengths is // following determination of type by lengths is
// same used by win32 and gtk code // same used by win32 and gtk code
// and like win32/gtk code, user-chosen fmt is ignored // and like win32/gtk code, user-chosen fmt is ignored
else if (tok.size() == 12) { else if (tok.size() == 12) {
tok = tok.substr(0, 8) + wxT(' ') + tok.substr(8); tok = tok.substr(0, 8) + wxT(' ') + tok.substr(8);
cheatsAddCBACode(tok.mb_str(), ce_desc.mb_str()); cheatsAddCBACode(tok.utf8_str(), ce_desc.utf8_str());
} else if (tok.size() == 16) } else if (tok.size() == 16)
// not sure why 1-tok is !v3 and 2-tok is v3.. // not sure why 1-tok is !v3 and 2-tok is v3..
cheatsAddGSACode(tok.mb_str(), ce_desc.mb_str(), false); cheatsAddGSACode(tok.utf8_str(), ce_desc.utf8_str(), false);
// CBA codes are assumed to be N+4, and anything else // CBA codes are assumed to be N+4, and anything else
// is assumed to be GSA v3 (although I assume the // is assumed to be GSA v3 (although I assume the
// actual formats should be 8+4 and 8+8) // actual formats should be 8+4 and 8+8)
@ -463,18 +464,18 @@ public:
if (!tk.HasMoreTokens()) { if (!tk.HasMoreTokens()) {
// throw an error appropriate to chosen type // throw an error appropriate to chosen type
if (ce_type == 1) // GSA if (ce_type == 1) // GSA
cheatsAddGSACode(tok.mb_str(), ce_desc.mb_str(), false); cheatsAddGSACode(tok.utf8_str(), ce_desc.utf8_str(), false);
else else
cheatsAddCBACode(tok.mb_str(), ce_desc.mb_str()); cheatsAddCBACode(tok.utf8_str(), ce_desc.utf8_str());
} else { } else {
wxString tok2 = tk.GetNextToken(); wxString tok2 = tk.GetNextToken();
if (tok2.size() == 4) { if (tok2.size() == 4) {
tok += wxT(' ') + tok2; tok += wxT(' ') + tok2;
cheatsAddCBACode(tok.mb_str(), ce_desc.mb_str()); cheatsAddCBACode(tok.utf8_str(), ce_desc.utf8_str());
} else { } else {
tok += tok2; tok += tok2;
cheatsAddGSACode(tok.mb_str(), ce_desc.mb_str(), true); cheatsAddGSACode(tok.utf8_str(), ce_desc.utf8_str(), true);
} }
} }
} }
@ -624,7 +625,7 @@ public:
} else if (ce_desc != odesc) { } else if (ce_desc != odesc) {
*dirty = true; *dirty = true;
char* p = isgb ? gbCheatList[id].cheatDesc : cheatsList[id].desc; char* p = isgb ? gbCheatList[id].cheatDesc : cheatsList[id].desc;
strncpy(p, ce_desc.mb_str(), sizeof(cheatsList[0].desc)); strncpy(p, ce_desc.utf8_str(), sizeof(cheatsList[0].desc));
p[sizeof(cheatsList[0].desc) - 1] = 0; p[sizeof(cheatsList[0].desc) - 1] = 0;
item1.SetId(id); item1.SetId(id);
item1.SetText(wxString(p, wxConvUTF8)); item1.SetText(wxString(p, wxConvUTF8));
@ -674,7 +675,7 @@ void CheatList_t::ParseChtLine(wxString desc, wxString tok)
wxString cheat_value; wxString cheat_value;
uint32_t address = 0; uint32_t address = 0;
uint32_t value = 0; uint32_t value = 0;
sscanf(cheat_addr.mb_str(), "%8x", &address); sscanf(cheat_addr.utf8_str(), "%8x", &address);
if (address < 0x40000) if (address < 0x40000)
address += 0x2000000; address += 0x2000000;
@ -685,11 +686,11 @@ void CheatList_t::ParseChtLine(wxString desc, wxString tok)
while (value_tk.HasMoreTokens()) { while (value_tk.HasMoreTokens()) {
wxString value_token = value_tk.GetNextToken(); wxString value_token = value_tk.GetNextToken();
sscanf(value_token.mb_str(), "%2x", &value); sscanf(value_token.utf8_str(), "%2x", &value);
cheat_line.Printf(wxT("%08X"), address); cheat_line.Printf(wxT("%08X"), address);
cheat_value.Printf(wxT("%02X"), value); cheat_value.Printf(wxT("%02X"), value);
cheat_line = cheat_line + wxT(":") + cheat_value; cheat_line = cheat_line + wxT(":") + cheat_value;
cheatsAddCheatCode(cheat_line.mb_str(), cheat_desc.mb_str()); cheatsAddCheatCode(cheat_line.utf8_str(), cheat_desc.utf8_str());
address++; address++;
} }
} }
@ -705,10 +706,14 @@ public:
CheatListFill(const CheatListFill& e) CheatListFill(const CheatListFill& e)
: wxValidator() : wxValidator()
{ {
(void)e; // unused params
} }
wxObject* Clone() const { return new CheatListFill(*this); } wxObject* Clone() const { return new CheatListFill(*this); }
bool TransferFromWindow() { return true; } bool TransferFromWindow() { return true; }
bool Validate(wxWindow* p) { return true; } bool Validate(wxWindow* p) {
(void)p; // unused params
return true;
}
bool TransferToWindow() bool TransferToWindow()
{ {
CheatList_t& clh = cheat_list_handler; CheatList_t& clh = cheat_list_handler;
@ -886,6 +891,7 @@ public:
void UpdateVals(wxCommandEvent& ev) void UpdateVals(wxCommandEvent& ev)
{ {
(void)ev; // unused params
if (cheatSearchData.count) { if (cheatSearchData.count) {
cheatSearchUpdateValues(&cheatSearchData); cheatSearchUpdateValues(&cheatSearchData);
@ -898,6 +904,7 @@ public:
void ResetSearch(wxCommandEvent& ev) void ResetSearch(wxCommandEvent& ev)
{ {
(void)ev; // unused params
if (!cheatSearchData.count) { if (!cheatSearchData.count) {
CheatSearchBlock* block = cheatSearchData.blocks; CheatSearchBlock* block = cheatSearchData.blocks;
@ -989,6 +996,7 @@ public:
void AddCheatB(wxCommandEvent& ev) void AddCheatB(wxCommandEvent& ev)
{ {
(void)ev; // unused params
int idx = list->GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); int idx = list->GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
if (idx >= 0) if (idx >= 0)
@ -1070,7 +1078,7 @@ public:
for (int i = 0; i < (1 << size); i++) { for (int i = 0; i < (1 << size); i++) {
addr_s.Printf(wxT("%02X%02X%02X%02X"), bank, val & 0xff, addr_s.Printf(wxT("%02X%02X%02X%02X"), bank, val & 0xff,
addr & 0xff, addr >> 8); addr & 0xff, addr >> 8);
gbAddGsCheat(addr_s.mb_str(), ca_desc.mb_str()); gbAddGsCheat(addr_s.utf8_str(), ca_desc.utf8_str());
val >>= 8; val >>= 8;
addr++; addr++;
} }
@ -1092,7 +1100,7 @@ public:
} }
addr_s.append(s); addr_s.append(s);
cheatsAddCheatCode(addr_s.mb_str(), ca_desc.mb_str()); cheatsAddCheatCode(addr_s.utf8_str(), ca_desc.utf8_str());
} }
} }
@ -1195,6 +1203,7 @@ public:
void UpdateView(wxCommandEvent& ev) void UpdateView(wxCommandEvent& ev)
{ {
(void)ev; // unused params
dlg->TransferDataFromWindow(); dlg->TransferDataFromWindow();
if (ofmt != fmt && !val_s.empty()) { if (ofmt != fmt && !val_s.empty()) {
@ -1283,10 +1292,14 @@ public:
CheatFindFill(const CheatFindFill& e) CheatFindFill(const CheatFindFill& e)
: wxValidator() : wxValidator()
{ {
(void)e; // unused params
} }
wxObject* Clone() const { return new CheatFindFill(*this); } wxObject* Clone() const { return new CheatFindFill(*this); }
bool TransferFromWindow() { return true; } bool TransferFromWindow() { return true; }
bool Validate(wxWindow* p) { return true; } bool Validate(wxWindow* p) {
(void)p; // unused params
return true;
}
bool TransferToWindow() bool TransferToWindow()
{ {
CheatFind_t& cfh = cheat_find_handler; CheatFind_t& cfh = cheat_find_handler;
@ -1314,7 +1327,7 @@ wxString CheatListCtrl::OnGetItemText(long item, long column) const
off = (item & ((1 << (cap_size - size)) - 1)) << size; off = (item & ((1 << (cap_size - size)) - 1)) << size;
item >>= cap_size - size; item >>= cap_size - size;
} else if (cap_size < size) { } else if (cap_size < size) {
for (int i = 0; i < addrs.size(); i++) { for (size_t i = 0; i < addrs.size(); i++) {
if (!(addrs[i] & ((1 << size) - 1)) && !item--) { if (!(addrs[i] & ((1 << size) - 1)) && !item--) {
item = i; item = i;
break; break;
@ -1419,6 +1432,7 @@ public:
} }
void ColorReset(wxCommandEvent& ev) void ColorReset(wxCommandEvent& ev)
{ {
(void)ev; // unused params
const uint16_t* color = &systemGbPalette[pno * 8]; const uint16_t* color = &systemGbPalette[pno * 8];
for (int i = 0; i < 8; i++, color++) for (int i = 0; i < 8; i++, color++)
@ -1429,6 +1443,7 @@ public:
void ColorButton(wxCommandEvent& ev) void ColorButton(wxCommandEvent& ev)
{ {
(void)ev; // unused params
c->SetSelection(0); c->SetSelection(0);
} }
} GBColorConfigHandler[3]; } GBColorConfigHandler[3];
@ -1443,10 +1458,14 @@ public:
GBACtrlEnabler(const GBACtrlEnabler& e) GBACtrlEnabler(const GBACtrlEnabler& e)
: wxValidator() : wxValidator()
{ {
(void)e; // unused params
} }
wxObject* Clone() const { return new GBACtrlEnabler(*this); } wxObject* Clone() const { return new GBACtrlEnabler(*this); }
bool TransferFromWindow() { return true; } bool TransferFromWindow() { return true; }
bool Validate(wxWindow* p) { return true; } bool Validate(wxWindow* p) {
(void)p; // unused params
return true;
}
bool TransferToWindow() bool TransferToWindow()
{ {
GetWindow()->Enable(wxGetApp().frame->GetPanel()->game_type() == IMAGE_GBA); GetWindow()->Enable(wxGetApp().frame->GetPanel()->game_type() == IMAGE_GBA);
@ -1465,6 +1484,7 @@ public:
} }
void Detect(wxCommandEvent& ev) void Detect(wxCommandEvent& ev)
{ {
(void)ev; // unused params
uint32_t sz = wxGetApp().frame->GetPanel()->game_size(); uint32_t sz = wxGetApp().frame->GetPanel()->game_size();
utilGBAFindSave(sz); utilGBAFindSave(sz);
type->SetSelection(saveType); type->SetSelection(saveType);
@ -1490,6 +1510,7 @@ public:
void FullVol(wxCommandEvent& ev) void FullVol(wxCommandEvent& ev)
{ {
(void)ev; // unused params
vol->SetValue(100); vol->SetValue(100);
} }
void AdjustFrames(int count) void AdjustFrames(int count)
@ -1500,6 +1521,7 @@ public:
} }
void AdjustFramesEv(wxCommandEvent& ev) void AdjustFramesEv(wxCommandEvent& ev)
{ {
(void)ev; // unused params
AdjustFrames(bufs->GetValue()); AdjustFrames(bufs->GetValue());
} }
@ -1549,7 +1571,7 @@ public:
dev->SetSelection(0); dev->SetSelection(0);
for (int i = 0; i < names.size(); i++) { for (size_t i = 0; i < names.size(); i++) {
dev->Append(names[i]); dev->Append(names[i]);
if (api == gopts.audio_api && gopts.audio_dev == dev_ids[i]) if (api == gopts.audio_api && gopts.audio_dev == dev_ids[i])
@ -1572,7 +1594,7 @@ public:
if (newapi == lastapi) if (newapi == lastapi)
return; return;
gopts.audio_dev = ""; gopts.audio_dev = wxT("");
FillDev(newapi); FillDev(newapi);
} }
} sound_config_handler; } sound_config_handler;
@ -1587,9 +1609,13 @@ public:
SoundConfigLoad(const SoundConfigLoad& e) SoundConfigLoad(const SoundConfigLoad& e)
: wxValidator() : wxValidator()
{ {
(void)e; // unused params
} }
wxObject* Clone() const { return new SoundConfigLoad(*this); } wxObject* Clone() const { return new SoundConfigLoad(*this); }
bool Validate(wxWindow* p) { return true; } bool Validate(wxWindow* p) {
(void)p; // unused params
return true;
}
bool TransferToWindow() bool TransferToWindow()
{ {
SoundConfig_t& sch = sound_config_handler; SoundConfig_t& sch = sound_config_handler;
@ -1650,9 +1676,13 @@ public:
ScreenModeList(const ScreenModeList& e) ScreenModeList(const ScreenModeList& e)
: wxValidator() : wxValidator()
{ {
(void)e; // unused params
} }
wxObject* Clone() const { return new ScreenModeList(*this); } wxObject* Clone() const { return new ScreenModeList(*this); }
bool Validate(wxWindow* p) { return true; } bool Validate(wxWindow* p) {
(void)p; // unused params
return true;
}
bool TransferToWindow() bool TransferToWindow()
{ {
wxChoice* c = wxStaticCast(GetWindow(), wxChoice); wxChoice* c = wxStaticCast(GetWindow(), wxChoice);
@ -1666,7 +1696,7 @@ public:
vm = d.GetModes(); vm = d.GetModes();
wxString s; wxString s;
for (int i = 0; i < vm.size(); i++) { for (size_t i = 0; i < vm.size(); i++) {
s.Printf(_("%d x %d - %dbpp @ %dHz"), vm[i].w, vm[i].h, vm[i].bpp, vm[i].refresh); s.Printf(_("%d x %d - %dbpp @ %dHz"), vm[i].w, vm[i].h, vm[i].bpp, vm[i].refresh);
c->Append(s); c->Append(s);
@ -1724,10 +1754,14 @@ public:
PluginEnabler(const PluginEnabler& e) PluginEnabler(const PluginEnabler& e)
: wxValidator() : wxValidator()
{ {
(void)e; // unused params
} }
wxObject* Clone() const { return new PluginEnabler(*this); } wxObject* Clone() const { return new PluginEnabler(*this); }
bool TransferFromWindow() { return true; } bool TransferFromWindow() { return true; }
bool Validate(wxWindow* p) { return true; } bool Validate(wxWindow* p) {
(void)p; // unused params
return true;
}
bool TransferToWindow() bool TransferToWindow()
{ {
GetWindow()->Enable(gopts.filter == FF_PLUGIN); GetWindow()->Enable(gopts.filter == FF_PLUGIN);
@ -1752,22 +1786,25 @@ class PluginListFiller : public PluginEnabler {
public: public:
PluginListFiller(wxDialog* parent, wxControl* lab, wxChoice* ch) PluginListFiller(wxDialog* parent, wxControl* lab, wxChoice* ch)
: PluginEnabler() : PluginEnabler()
, dlg(parent)
, txt(lab) , txt(lab)
, dlg(parent)
, plugins()
, filtch(ch) , filtch(ch)
, plugins()
{ {
} }
PluginListFiller(const PluginListFiller& e) PluginListFiller(const PluginListFiller& e)
: PluginEnabler() : PluginEnabler()
, dlg(e.dlg)
, txt(e.txt) , txt(e.txt)
, dlg(e.dlg)
, plugins(e.plugins)
, filtch(e.filtch) , filtch(e.filtch)
, plugins(e.plugins)
{ {
} }
wxObject* Clone() const { return new PluginListFiller(*this); } wxObject* Clone() const { return new PluginListFiller(*this); }
bool Validate(wxWindow* p) { return true; } bool Validate(wxWindow* p) {
(void)p; // unused params
return true;
}
bool TransferToWindow() bool TransferToWindow()
{ {
PluginEnabler::TransferToWindow(); PluginEnabler::TransferToWindow();
@ -1775,13 +1812,13 @@ public:
ch->Clear(); ch->Clear();
ch->Append(_("None")); ch->Append(_("None"));
plugins.clear(); plugins.clear();
const wxString& plpath = wxStandardPaths::Get().GetPluginsDir(); const wxString plpath = wxGetApp().GetPluginsDir();
wxDir::GetAllFiles(plpath, &plugins, wxT("*.rpi")); wxDir::GetAllFiles(plpath, &plugins, wxT("*.rpi"), wxDIR_FILES | wxDIR_DIRS);
for (int i = 0; i < plugins.size(); i++) { for (size_t i = 0; i < plugins.size(); i++) {
wxDynamicLibrary dl(plugins[i], wxDL_VERBATIM | wxDL_NOW); wxDynamicLibrary dl(plugins[i], wxDL_VERBATIM | wxDL_NOW);
RENDPLUG_GetInfo GetInfo; RENDPLUG_GetInfo GetInfo;
const RENDER_PLUGIN_INFO* rpi; const RENDER_PLUGIN_INFO* rpi = NULL;
if (dl.IsLoaded() && (GetInfo = (RENDPLUG_GetInfo)dl.GetSymbol(wxT("RenderPluginGetInfo"))) && if (dl.IsLoaded() && (GetInfo = (RENDPLUG_GetInfo)dl.GetSymbol(wxT("RenderPluginGetInfo"))) &&
// note that in actual kega fusion plugins, rpi->Output is // note that in actual kega fusion plugins, rpi->Output is
@ -1798,13 +1835,15 @@ public:
s += wxT(": "); s += wxT(": ");
s += wxString(rpi->Name, wxConvUTF8, sizeof(rpi->Name)); s += wxString(rpi->Name, wxConvUTF8, sizeof(rpi->Name));
fn.MakeRelativeTo(plpath); fn.MakeRelativeTo(plpath);
plugins[i] = fn.GetFullName(); plugins[i] = fn.GetFullPath();
ch->Append(s); ch->Append(s);
if (plugins[i] == gopts.filter_plugin) if (plugins[i] == gopts.filter_plugin)
ch->SetSelection(i + 1); ch->SetSelection(i + 1);
} else }
else {
plugins.RemoveAt(i--); plugins.RemoveAt(i--);
}
} }
if (ch->GetCount() == 1) { if (ch->GetCount() == 1) {
@ -1812,7 +1851,7 @@ public:
// to put the plugins... it depends on where program was // to put the plugins... it depends on where program was
// installed, and of course OS // installed, and of course OS
wxString msg; wxString msg;
msg.Printf(_("No usable rpi plugins found in %s"), plpath.mb_str()); msg.Printf(_("No usable rpi plugins found in %s"), plpath.c_str());
systemScreenMessage(msg); systemScreenMessage(msg);
ch->Hide(); ch->Hide();
txt->Hide(); txt->Hide();
@ -1994,7 +2033,7 @@ public:
asb->Enable(!key->GetValue().empty()); asb->Enable(!key->GetValue().empty());
int cmd = id->val; int cmd = id->val;
for (int i = 0; i < accels.size(); i++) for (size_t i = 0; i < accels.size(); i++)
if (accels[i].GetCommand() == cmdtab[cmd].cmd_id) if (accels[i].GetCommand() == cmdtab[cmd].cmd_id)
lb->Append(wxKeyTextCtrl::ToString(accels[i].GetFlags(), lb->Append(wxKeyTextCtrl::ToString(accels[i].GetFlags(),
accels[i].GetKeyCode())); accels[i].GetKeyCode()));
@ -2003,12 +2042,14 @@ public:
// after selecting a key in key list, enable Remove button // after selecting a key in key list, enable Remove button
void KeySel(wxCommandEvent& ev) void KeySel(wxCommandEvent& ev)
{ {
(void)ev; // unused params
remb->Enable(lb->GetSelection() != wxNOT_FOUND); remb->Enable(lb->GetSelection() != wxNOT_FOUND);
} }
// remove selected binding // remove selected binding
void Remove(wxCommandEvent& ev) void Remove(wxCommandEvent& ev)
{ {
(void)ev; // unused params
int lsel = lb->GetSelection(); int lsel = lb->GetSelection();
if (lsel == wxNOT_FOUND) if (lsel == wxNOT_FOUND)
@ -2039,7 +2080,7 @@ public:
// if it's a system accel, disable by assigning to NOOP // if it's a system accel, disable by assigning to NOOP
wxAcceleratorEntry_v& sys_accels = wxGetApp().frame->sys_accels; wxAcceleratorEntry_v& sys_accels = wxGetApp().frame->sys_accels;
for (int i = 0; i < sys_accels.size(); i++) for (size_t i = 0; i < sys_accels.size(); i++)
if (sys_accels[i].GetFlags() == selmod && sys_accels[i].GetKeyCode() == selkey) { if (sys_accels[i].GetFlags() == selmod && sys_accels[i].GetKeyCode() == selkey) {
wxAcceleratorEntry ne(selmod, selkey, XRCID("NOOP")); wxAcceleratorEntry ne(selmod, selkey, XRCID("NOOP"));
user_accels.push_back(ne); user_accels.push_back(ne);
@ -2057,6 +2098,7 @@ public:
// wipe out all user bindings // wipe out all user bindings
void ResetAll(wxCommandEvent& ev) void ResetAll(wxCommandEvent& ev)
{ {
(void)ev; // unused params
if (user_accels.empty() || wxMessageBox(_("This will clear all user-defined accelerators. Are you sure?"), _("Confirm"), wxYES_NO) != wxYES) if (user_accels.empty() || wxMessageBox(_("This will clear all user-defined accelerators. Are you sure?"), _("Confirm"), wxYES_NO) != wxYES)
return; return;
@ -2072,6 +2114,7 @@ public:
// remove old key binding, add new key binding, and update GUI // remove old key binding, add new key binding, and update GUI
void Assign(wxCommandEvent& ev) void Assign(wxCommandEvent& ev)
{ {
(void)ev; // unused params
wxTreeItemId csel = tc->GetSelection(); wxTreeItemId csel = tc->GetSelection();
wxString accel = key->GetValue(); wxString accel = key->GetValue();
@ -2083,7 +2126,7 @@ public:
if (!wxKeyTextCtrl::FromString(accel, acmod, ackey)) if (!wxKeyTextCtrl::FromString(accel, acmod, ackey))
return; // this should never happen return; // this should never happen
for (int i = 0; i < lb->GetCount(); i++) for (unsigned int i = 0; i < lb->GetCount(); i++)
if (lb->GetString(i) == accel) if (lb->GetString(i) == accel)
return; // ignore attempts to add twice return; // ignore attempts to add twice
@ -2112,6 +2155,7 @@ public:
// update curas and maybe enable asb // update curas and maybe enable asb
void CheckKey(wxCommandEvent& ev) void CheckKey(wxCommandEvent& ev)
{ {
(void)ev; // unused params
wxString nkey = key->GetValue(); wxString nkey = key->GetValue();
if (nkey.empty()) { if (nkey.empty()) {
@ -2132,7 +2176,7 @@ public:
asb->Enable(tc->GetSelection().IsOk()); asb->Enable(tc->GetSelection().IsOk());
int cmd = -1; int cmd = -1;
for (int i = 0; i < accels.size(); i++) for (size_t i = 0; i < accels.size(); i++)
if (accels[i].GetFlags() == acmod && accels[i].GetKeyCode() == ackey) { if (accels[i].GetFlags() == acmod && accels[i].GetKeyCode() == ackey) {
int cmdid = accels[i].GetCommand(); int cmdid = accels[i].GetCommand();
@ -2219,6 +2263,7 @@ public:
// set thrsel from thr // set thrsel from thr
void SetThrottleSel(wxSpinEvent& evt) void SetThrottleSel(wxSpinEvent& evt)
{ {
(void)evt; // unused params
DoSetThrottleSel(thr->GetValue()); DoSetThrottleSel(thr->GetValue());
} }
@ -2233,6 +2278,7 @@ public:
// set thr from thrsel // set thr from thrsel
void SetThrottle(wxCommandEvent& evt) void SetThrottle(wxCommandEvent& evt)
{ {
(void)evt; // unused params
uint32_t val = thrsel->GetSelection() * 25; uint32_t val = thrsel->GetSelection() * 25;
if (val <= 600) if (val <= 600)
@ -2272,6 +2318,7 @@ public:
// set speedup_throttle_sel from speedup_throttle // set speedup_throttle_sel from speedup_throttle
void SetSpeedupThrottleSel(wxSpinEvent& evt) void SetSpeedupThrottleSel(wxSpinEvent& evt)
{ {
(void)evt; // unused params
DoSetSpeedupThrottleSel(speedup_throttle_spin->GetValue()); DoSetSpeedupThrottleSel(speedup_throttle_spin->GetValue());
} }
@ -2290,6 +2337,7 @@ public:
// set speedup_throttle from speedup_throttle_sel // set speedup_throttle from speedup_throttle_sel
void SetSpeedupThrottle(wxCommandEvent& evt) void SetSpeedupThrottle(wxCommandEvent& evt)
{ {
(void)evt; // unused params
uint32_t val = speedup_throttle_sel->GetSelection() * 25; uint32_t val = speedup_throttle_sel->GetSelection() * 25;
if (val > 0 && val <= 600) { if (val > 0 && val <= 600) {
@ -2312,6 +2360,7 @@ public:
// set speedup_frame_skip_sel from speedup_frame_skip // set speedup_frame_skip_sel from speedup_frame_skip
void SpeedupFrameSkipCtrl_t::SetSpeedupFrameSkipSel(wxSpinEvent& evt) void SpeedupFrameSkipCtrl_t::SetSpeedupFrameSkipSel(wxSpinEvent& evt)
{ {
(void)evt; // unused params
DoSetSpeedupFrameSkipSel(speedup_frame_skip_spin->GetValue()); DoSetSpeedupFrameSkipSel(speedup_frame_skip_spin->GetValue());
} }
@ -2330,6 +2379,7 @@ void SpeedupFrameSkipCtrl_t::DoSetSpeedupFrameSkipSel(uint32_t val)
// set speedup_frame_skip from speedup_frame_skip_sel // set speedup_frame_skip from speedup_frame_skip_sel
void SpeedupFrameSkipCtrl_t::SetSpeedupFrameSkip(wxCommandEvent& evt) void SpeedupFrameSkipCtrl_t::SetSpeedupFrameSkip(wxCommandEvent& evt)
{ {
(void)evt; // unused params
uint32_t val = speedup_frame_skip_sel->GetSelection(); uint32_t val = speedup_frame_skip_sel->GetSelection();
if (val > 0 && val <= 30) { if (val > 0 && val <= 30) {
@ -2357,7 +2407,7 @@ void CheckThrowXRCError(T pointer, const wxString& name)
std::string errormessage = "Unable to load a \""; std::string errormessage = "Unable to load a \"";
errormessage += typeid(pointer).name(); errormessage += typeid(pointer).name();
errormessage += "\" from the builtin xrc file: "; errormessage += "\" from the builtin xrc file: ";
errormessage += name.mb_str(); errormessage += name.utf8_str();
throw std::runtime_error(errormessage); throw std::runtime_error(errormessage);
} }
} }
@ -2451,7 +2501,7 @@ wxAcceleratorEntry_v MainFrame::get_accels(wxAcceleratorEntry_v user_accels)
// then user overrides // then user overrides
// silently keep only last defined binding // silently keep only last defined binding
// same horribly inefficent O(n*m) search for duplicates as above.. // same horribly inefficent O(n*m) search for duplicates as above..
for (int i = 0; i < user_accels.size(); i++) { for (size_t i = 0; i < user_accels.size(); i++) {
const wxAcceleratorEntry& ae = user_accels[i]; const wxAcceleratorEntry& ae = user_accels[i];
for (wxAcceleratorEntry_v::iterator e = accels.begin(); e < accels.end(); ++e) for (wxAcceleratorEntry_v::iterator e = accels.begin(); e < accels.end(); ++e)
@ -2477,7 +2527,7 @@ void MainFrame::set_global_accels()
// the menus will be added now // the menus will be added now
// first, zero out menu item on all accels // first, zero out menu item on all accels
for (int i = 0; i < accels.size(); i++) for (size_t i = 0; i < accels.size(); i++)
accels[i].Set(accels[i].GetFlags(), accels[i].GetKeyCode(), accels[i].Set(accels[i].GetFlags(), accels[i].GetKeyCode(),
accels[i].GetCommand()); accels[i].GetCommand());
@ -2495,7 +2545,7 @@ void MainFrame::set_global_accels()
int cmd = cmdtab[i].cmd_id; int cmd = cmdtab[i].cmd_id;
int last_accel = -1; int last_accel = -1;
for (int j = 0; j < accels.size(); j++) for (size_t j = 0; j < accels.size(); j++)
if (cmd == accels[j].GetCommand()) if (cmd == accels[j].GetCommand())
last_accel = j; last_accel = j;
@ -2512,14 +2562,14 @@ void MainFrame::set_global_accels()
// Finally, install a global accelerator table for any non-menu accels // Finally, install a global accelerator table for any non-menu accels
int len = 0; int len = 0;
for (int i = 0; i < accels.size(); i++) for (size_t i = 0; i < accels.size(); i++)
if (!accels[i].GetMenuItem()) if (!accels[i].GetMenuItem())
len++; len++;
if (len) { if (len) {
wxAcceleratorEntry tab[1000]; wxAcceleratorEntry tab[1000];
for (int i = 0, j = 0; i < accels.size(); i++) for (size_t i = 0, j = 0; i < accels.size(); i++)
if (!accels[i].GetMenuItem()) if (!accels[i].GetMenuItem())
tab[j++] = accels[i]; tab[j++] = accels[i];
@ -2534,7 +2584,7 @@ void MainFrame::set_global_accels()
for (int i = 0; i < 10; i++) for (int i = 0; i < 10; i++)
recent_accel[i] = wxAcceleratorEntry(); recent_accel[i] = wxAcceleratorEntry();
for (int i = 0; i < accels.size(); i++) for (size_t i = 0; i < accels.size(); i++)
if (accels[i].GetCommand() >= wxID_FILE1 && accels[i].GetCommand() <= wxID_FILE10) if (accels[i].GetCommand() >= wxID_FILE1 && accels[i].GetCommand() <= wxID_FILE10)
recent_accel[accels[i].GetCommand() - wxID_FILE1] = accels[i]; recent_accel[accels[i].GetCommand() - wxID_FILE1] = accels[i];
@ -2545,7 +2595,7 @@ void MainFrame::MenuOptionBool(const char* menuName, bool& field)
{ {
int id = wxXmlResource::GetXRCID(wxString(menuName, wxConvUTF8)); int id = wxXmlResource::GetXRCID(wxString(menuName, wxConvUTF8));
for (int i = 0; i < checkable_mi.size(); i++) { for (size_t i = 0; i < checkable_mi.size(); i++) {
if (checkable_mi[i].cmd != id) if (checkable_mi[i].cmd != id)
continue; continue;
@ -2560,7 +2610,7 @@ void MainFrame::MenuOptionIntMask(const char* menuName, int& field, int mask)
int id = wxXmlResource::GetXRCID(wxString(menuName, wxConvUTF8)); int id = wxXmlResource::GetXRCID(wxString(menuName, wxConvUTF8));
int value = mask; int value = mask;
for (int i = 0; i < checkable_mi.size(); i++) { for (size_t i = 0; i < checkable_mi.size(); i++) {
if (checkable_mi[i].cmd != id) if (checkable_mi[i].cmd != id)
continue; continue;
@ -2576,7 +2626,7 @@ void MainFrame::MenuOptionIntRadioValue(const char* menuName, int& field, int va
{ {
int id = wxXmlResource::GetXRCID(wxString(menuName, wxConvUTF8)); int id = wxXmlResource::GetXRCID(wxString(menuName, wxConvUTF8));
for (int i = 0; i < checkable_mi.size(); i++) { for (size_t i = 0; i < checkable_mi.size(); i++) {
if (checkable_mi[i].cmd != id) if (checkable_mi[i].cmd != id)
continue; continue;
@ -2760,9 +2810,9 @@ bool MainFrame::BindControls()
if (a->GetFlags() == e->GetFlags() && a->GetKeyCode() == e->GetKeyCode()) { if (a->GetFlags() == e->GetFlags() && a->GetKeyCode() == e->GetKeyCode()) {
if (e->GetMenuItem()) { if (e->GetMenuItem()) {
wxLogInfo(_("Duplicate menu accelerator: %s for %s and %s; keeping first"), wxLogInfo(_("Duplicate menu accelerator: %s for %s and %s; keeping first"),
wxKeyTextCtrl::ToString(a->GetFlags(), a->GetKeyCode()).mb_str(), wxKeyTextCtrl::ToString(a->GetFlags(), a->GetKeyCode()).c_str(),
e->GetMenuItem()->GetItemLabelText().mb_str(), e->GetMenuItem()->GetItemLabelText().c_str(),
mi->GetItemLabelText().mb_str()); mi->GetItemLabelText().c_str());
delete a; delete a;
a = 0; a = 0;
} else { } else {
@ -2774,9 +2824,9 @@ bool MainFrame::BindControls()
break; break;
wxLogInfo(_("Menu accelerator %s for %s overrides default for %s ; keeping menu"), wxLogInfo(_("Menu accelerator %s for %s overrides default for %s ; keeping menu"),
wxKeyTextCtrl::ToString(a->GetFlags(), a->GetKeyCode()).mb_str(), wxKeyTextCtrl::ToString(a->GetFlags(), a->GetKeyCode()).c_str(),
mi->GetItemLabelText().mb_str(), mi->GetItemLabelText().c_str(),
cmdtab[cmd].cmd); cmdtab[cmd].cmd.c_str());
} }
sys_accels.erase(e); sys_accels.erase(e);
@ -2794,7 +2844,7 @@ bool MainFrame::BindControls()
// store checkable items // store checkable items
if (mi->IsCheckable()) { if (mi->IsCheckable()) {
checkable_mi_t cmi = { cmdtab[i].cmd_id, mi }; checkable_mi_t cmi = { cmdtab[i].cmd_id, mi, NULL, NULL, 0, 0 };
checkable_mi.push_back(cmi); checkable_mi.push_back(cmi);
for (int j = 0; j < num_opts; j++) { for (int j = 0; j < num_opts; j++) {
@ -2877,10 +2927,10 @@ bool MainFrame::BindControls()
MenuOptionIntRadioValue("LinkType4Gameboy", gopts.gba_link_type, 4); MenuOptionIntRadioValue("LinkType4Gameboy", gopts.gba_link_type, 4);
} }
for (int i = 0; i < checkable_mi.size(); i++) for (size_t i = 0; i < checkable_mi.size(); i++)
if (!checkable_mi[i].boolopt && !checkable_mi[i].intopt) { if (!checkable_mi[i].boolopt && !checkable_mi[i].intopt) {
wxLogError(_("Invalid menu item %s; removing"), wxLogError(_("Invalid menu item %s; removing"),
checkable_mi[i].mi->GetItemLabelText().mb_str()); checkable_mi[i].mi->GetItemLabelText().c_str());
checkable_mi[i].mi->GetMenu()->Remove(checkable_mi[i].mi); checkable_mi[i].mi->GetMenu()->Remove(checkable_mi[i].mi);
checkable_mi[i].mi = NULL; checkable_mi[i].mi = NULL;
} }
@ -3314,6 +3364,7 @@ bool MainFrame::BindControls()
} }
#define getcbbe(n, o) getbe(n, o, cb, wxCheckBox, CB) #define getcbbe(n, o) getbe(n, o, cb, wxCheckBox, CB)
wxBoolIntEnValidator* bienval; wxBoolIntEnValidator* bienval;
(void)bienval; // not used yet
#define getbie(n, o, v, cv, t, wt) \ #define getbie(n, o, v, cv, t, wt) \
do { \ do { \
cv = SafeXRCCTRL<t>(d, n); \ cv = SafeXRCCTRL<t>(d, n); \
@ -3656,7 +3707,7 @@ bool MainFrame::BindControls()
if (menubar) { if (menubar) {
wxTreeItemId mid = tc->AppendItem(rid, _("Menu commands")); wxTreeItemId mid = tc->AppendItem(rid, _("Menu commands"));
for (int i = 0; i < menubar->GetMenuCount(); i++) { for (size_t i = 0; i < menubar->GetMenuCount(); i++) {
#if wxCHECK_VERSION(2, 8, 8) #if wxCHECK_VERSION(2, 8, 8)
wxTreeItemId id = tc->AppendItem(mid, menubar->GetMenuLabelText(i)); wxTreeItemId id = tc->AppendItem(mid, menubar->GetMenuLabelText(i));
#else #else
@ -3784,7 +3835,7 @@ bool MainFrame::BindControls()
bool isv = !gopts.link_host.empty(); bool isv = !gopts.link_host.empty();
if (isv) { if (isv) {
isv = SetLinkServerHost(gopts.link_host.mb_str()); isv = SetLinkServerHost(gopts.link_host.c_str());
} }
if (!isv) { if (!isv) {

View File

@ -27,7 +27,8 @@
#ifdef winlog #ifdef winlog
#undef winlog #undef winlog
#endif #endif
#define winlog // // https://stackoverflow.com/a/1306690/262458
#define winlog(x,...) do {} while(0)
#define debugState() // #define debugState() //
#endif #endif
@ -133,6 +134,7 @@ void OpenAL::debugState()
break; break;
} }
alGetSourcei(source, AL_BUFFERS_QUEUED, &value); alGetSourcei(source, AL_BUFFERS_QUEUED, &value);
ASSERT_SUCCESS; ASSERT_SUCCESS;
winlog(" Buffers in queue: %i\n", value); winlog(" Buffers in queue: %i\n", value);
@ -148,7 +150,7 @@ bool OpenAL::init(long sampleRate)
assert(initialized == false); assert(initialized == false);
if (!gopts.audio_dev.empty()) { if (!gopts.audio_dev.empty()) {
device = alcOpenDevice(gopts.audio_dev.mb_str()); device = alcOpenDevice(gopts.audio_dev.utf8_str());
} else { } else {
device = alcOpenDevice(NULL); device = alcOpenDevice(NULL);
} }
@ -252,6 +254,7 @@ void OpenAL::reset()
void OpenAL::write(uint16_t* finalWave, int length) void OpenAL::write(uint16_t* finalWave, int length)
{ {
(void)length; // unused param
if (!initialized) if (!initialized)
return; return;

View File

@ -13,31 +13,30 @@
-p/--profile=hz -p/--profile=hz
*/ */
#define WJKB newWxJoyKeyBinding
/* not sure how well other compilers support field-init syntax */ /* not sure how well other compilers support field-init syntax */
#define STROPT(c, n, d, v) \ #define STROPT(c, n, d, v) \
{ \ new_opt_desc(wxT(c), (n), d, &v)
wxT(c), (n), d, &v \
} #define INTOPT(c, n, d, v, min, max) \
#define INTOPT(c, n, d, v, min, max) \ new_opt_desc(wxT(c), (n), d, NULL, &v, wxT(""), min, max)
{ \
wxT(c), (n), d, NULL, &v, wxT(""), min, max \ #define DOUBLEOPT(c, n, d, v, min, max) \
} new_opt_desc(wxT(c), (n), d, NULL, NULL, wxT(""), min, max, NULL, &v)
#define DOUBLEOPT(c, n, d, v, min, max) \
{ \ #define UINTOPT(c, n, d, v, min, max) \
wxT(c), (n), d, NULL, NULL, wxT(""), min, max, NULL, &v \ new_opt_desc(wxT(c), (n), d, NULL, NULL, wxT(""), min, max, NULL, NULL, &v)
}
#define UINTOPT(c, n, d, v, min, max) \ #define BOOLOPT(c, n, d, v) \
{ \ new_opt_desc(wxT(c), (n), d, NULL, NULL, wxT(""), 0, 0, &v)
wxT(c), (n), d, NULL, NULL, wxT(""), min, max, NULL, NULL, &v \
} #define ENUMOPT(c, n, d, v, e) \
#define BOOLOPT(c, n, d, v) \ new_opt_desc(wxT(c), (n), d, NULL, &v, e)
{ \
wxT(c), (n), d, NULL, NULL, wxT(""), 0, 0, &v \ #define NOOPT(c, n, d) \
} new_opt_desc(c, (n), d)
#define ENUMOPT(c, n, d, v, e) \
{ \
wxT(c), (n), d, NULL, &v, e \
}
opts_t gopts; opts_t gopts;
@ -137,21 +136,34 @@ const wxString joynames[NUM_KEYS] = {
}; };
wxJoyKeyBinding defkeys[NUM_KEYS * 2] = { wxJoyKeyBinding defkeys[NUM_KEYS * 2] = {
{ WXK_UP }, { 1, WXJB_AXIS_MINUS, 1 }, { WXK_DOWN }, { 1, WXJB_AXIS_PLUS, 1 }, WJKB(WXK_UP), WJKB(1, WXJB_AXIS_MINUS, 1), WJKB(WXK_DOWN), WJKB(1, WXJB_AXIS_PLUS, 1),
{ WXK_LEFT }, { 0, WXJB_AXIS_MINUS, 1 }, { WXK_RIGHT }, { 0, WXJB_AXIS_PLUS, 1 }, WJKB(WXK_LEFT), WJKB(0, WXJB_AXIS_MINUS, 1), WJKB(WXK_RIGHT), WJKB(0, WXJB_AXIS_PLUS, 1),
{ wxT('X') }, { 0, WXJB_BUTTON, 1 }, { wxT('Z') }, { 1, WXJB_BUTTON, 1 }, WJKB(wxT('X')), WJKB(0, WXJB_BUTTON, 1), WJKB(wxT('Z')), WJKB(1, WXJB_BUTTON, 1),
{ wxT('A') }, { 2, WXJB_BUTTON, 1 }, { wxT('S') }, { 3, WXJB_BUTTON, 1 }, WJKB(wxT('A')), WJKB(2, WXJB_BUTTON, 1), WJKB(wxT('S')), WJKB(3, WXJB_BUTTON, 1),
{ WXK_BACK }, { 4, WXJB_BUTTON, 1 }, { WXK_RETURN }, { 5, WXJB_BUTTON, 1 }, WJKB(WXK_BACK), WJKB(4, WXJB_BUTTON, 1), WJKB(WXK_RETURN), WJKB(5, WXJB_BUTTON, 1),
{ WXK_NUMPAD_UP }, { 0 }, { WXK_NUMPAD_DOWN }, { 0 }, WJKB(WXK_NUMPAD_UP), WJKB(0), WJKB(WXK_NUMPAD_DOWN), WJKB(0),
{ WXK_NUMPAD_LEFT }, { 0 }, { WXK_NUMPAD_RIGHT }, { 0 }, WJKB(WXK_NUMPAD_LEFT), WJKB(0), WJKB(WXK_NUMPAD_RIGHT), WJKB(0),
{ WXK_NUMPAD_PAGEUP }, { 0 }, { WXK_NUMPAD_PAGEDOWN }, { 0 }, WJKB(WXK_NUMPAD_PAGEUP), WJKB(0), WJKB(WXK_NUMPAD_PAGEDOWN), WJKB(0),
{ wxT('W') }, { 0 }, { wxT('Q') }, { 0 }, WJKB(wxT('W')), WJKB(0), WJKB(wxT('Q')), WJKB(0),
{ WXK_SPACE }, { 0 }, { 0 }, { 0 }, WJKB(WXK_SPACE), WJKB(0), WJKB(0), WJKB(0),
{ 0 }, { 0 } WJKB(0), WJKB(0)
}; };
wxAcceleratorEntry_v sys_accels; wxAcceleratorEntry_v sys_accels;
// Initializer for struct opt_desc
opt_desc new_opt_desc(wxString opt, const char* cmd, wxString desc,
wxString* stropt, int* intopt, wxString enumvals,
double min, double max, bool* boolopt,
double* doubleopt, uint32_t* uintopt, wxString curstr,
int curint, double curdouble, uint32_t curuint)
{
struct opt_desc new_opt = {opt, cmd, desc, stropt, intopt, enumvals,
min, max, boolopt, doubleopt, uintopt,
curstr, curint, curdouble, curuint};
return new_opt;
}
// Note: this table must be sorted in option name order // Note: this table must be sorted in option name order
// Both for better user display and for (fast) searching by name // Both for better user display and for (fast) searching by name
opt_desc opts[] = { opt_desc opts[] = {
@ -178,9 +190,9 @@ opt_desc opts[] = {
/// GB /// GB
STROPT("GB/BiosFile", "", wxTRANSLATE("BIOS file to use for GB, if enabled"), gopts.gb_bios), STROPT("GB/BiosFile", "", wxTRANSLATE("BIOS file to use for GB, if enabled"), gopts.gb_bios),
STROPT("GB/GBCBiosFile", "", wxTRANSLATE("BIOS file to use for GBC, if enabled"), gopts.gbc_bios), STROPT("GB/GBCBiosFile", "", wxTRANSLATE("BIOS file to use for GBC, if enabled"), gopts.gbc_bios),
{ wxT("GB/Palette0"), "", wxTRANSLATE("The default palette, as 8 comma-separated 4-digit hex integers (rgb555).") }, NOOPT(wxT("GB/Palette0"), "", wxTRANSLATE("The default palette, as 8 comma-separated 4-digit hex integers (rgb555).")),
{ wxT("GB/Palette1"), "", wxTRANSLATE("The first user palette, as 8 comma-separated 4-digit hex integers (rgb555).") }, NOOPT(wxT("GB/Palette1"), "", wxTRANSLATE("The first user palette, as 8 comma-separated 4-digit hex integers (rgb555).")),
{ wxT("GB/Palette2"), "", wxTRANSLATE("The second user palette, as 8 comma-separated 4-digit hex integers (rgb555).") }, NOOPT(wxT("GB/Palette2"), "", wxTRANSLATE("The second user palette, as 8 comma-separated 4-digit hex integers (rgb555).")),
BOOLOPT("GB/PrintAutoPage", "PrintGather", wxTRANSLATE("Automatically gather a full page before printing"), gopts.print_auto_page), BOOLOPT("GB/PrintAutoPage", "PrintGather", wxTRANSLATE("Automatically gather a full page before printing"), gopts.print_auto_page),
BOOLOPT("GB/PrintScreenCap", "PrintSnap", wxTRANSLATE("Automatically save printouts as screen captures with -print suffix"), gopts.print_screen_cap), BOOLOPT("GB/PrintScreenCap", "PrintSnap", wxTRANSLATE("Automatically save printouts as screen captures with -print suffix"), gopts.print_screen_cap),
STROPT("GB/ROMDir", "", wxTRANSLATE("Directory to look for ROM files"), gopts.gb_rom_dir), STROPT("GB/ROMDir", "", wxTRANSLATE("Directory to look for ROM files"), gopts.gb_rom_dir),
@ -210,14 +222,14 @@ opt_desc opts[] = {
INTOPT("General/StatusBar", "StatusBar", wxTRANSLATE("Enable status bar"), gopts.statusbar, 0, 1), INTOPT("General/StatusBar", "StatusBar", wxTRANSLATE("Enable status bar"), gopts.statusbar, 0, 1),
/// Joypad /// Joypad
{ wxT("Joypad/*/*"), "", wxTRANSLATE("The parameter Joypad/<n>/<button> contains a comma-separated list of key names which map to joypad #<n> button <button>. Button is one of Up, Down, Left, Right, A, B, L, R, Select, Start, MotionUp, MotionDown, MotionLeft, MotionRight, AutoA, AutoB, Speed, Capture, GS") }, NOOPT(wxT("Joypad/*/*"), "", wxTRANSLATE("The parameter Joypad/<n>/<button> contains a comma-separated list of key names which map to joypad #<n> button <button>. Button is one of Up, Down, Left, Right, A, B, L, R, Select, Start, MotionUp, MotionDown, MotionLeft, MotionRight, AutoA, AutoB, Speed, Capture, GS")),
INTOPT("Joypad/AutofireThrottle", "", wxTRANSLATE("The autofire toggle period, in frames (1/60 s)"), gopts.autofire_rate, 1, 1000), INTOPT("Joypad/AutofireThrottle", "", wxTRANSLATE("The autofire toggle period, in frames (1/60 s)"), gopts.autofire_rate, 1, 1000),
/// Keyboard /// Keyboard
INTOPT("Joypad/Default", "", wxTRANSLATE("The number of the stick to use in single-player mode"), gopts.default_stick, 1, 4), INTOPT("Joypad/Default", "", wxTRANSLATE("The number of the stick to use in single-player mode"), gopts.default_stick, 1, 4),
/// Keyboard /// Keyboard
{ wxT("Keyboard/*"), "", wxTRANSLATE("The parameter Keyboard/<cmd> contains a comma-separated list of key names (e.g. Alt-Shift-F1). When the named key is pressed, the command <cmd> is executed.") }, NOOPT(wxT("Keyboard/*"), "", wxTRANSLATE("The parameter Keyboard/<cmd> contains a comma-separated list of key names (e.g. Alt-Shift-F1). When the named key is pressed, the command <cmd> is executed.")),
// Core // Core
INTOPT("preferences/agbPrint", "AGBPrinter", wxTRANSLATE("Enable AGB debug print"), agbPrint, 0, 1), INTOPT("preferences/agbPrint", "AGBPrinter", wxTRANSLATE("Enable AGB debug print"), agbPrint, 0, 1),
@ -239,7 +251,6 @@ opt_desc opts[] = {
INTOPT("preferences/fsFrequency", "", wxTRANSLATE("Fullscreen mode frequency (0 = any)"), fsFrequency, 0, 999), INTOPT("preferences/fsFrequency", "", wxTRANSLATE("Fullscreen mode frequency (0 = any)"), fsFrequency, 0, 999),
INTOPT("preferences/fsHeight", "", wxTRANSLATE("Fullscreen mode height (0 = desktop)"), fsHeight, 0, 99999), INTOPT("preferences/fsHeight", "", wxTRANSLATE("Fullscreen mode height (0 = desktop)"), fsHeight, 0, 99999),
INTOPT("preferences/fsWidth", "", wxTRANSLATE("Fullscreen mode width (0 = desktop)"), fsWidth, 0, 99999), INTOPT("preferences/fsWidth", "", wxTRANSLATE("Fullscreen mode width (0 = desktop)"), fsWidth, 0, 99999),
INTOPT("preferences/fullScreen", "Fullscreen", wxTRANSLATE("Enter fullscreen mode at startup"), fullScreen, 0, 1),
INTOPT("preferences/gbPaletteOption", "", wxTRANSLATE("The palette to use"), gbPaletteOption, 0, 2), INTOPT("preferences/gbPaletteOption", "", wxTRANSLATE("The palette to use"), gbPaletteOption, 0, 2),
INTOPT("preferences/gbPrinter", "Printer", wxTRANSLATE("Enable printer emulation"), winGbPrinterEnabled, 0, 1), INTOPT("preferences/gbPrinter", "Printer", wxTRANSLATE("Enable printer emulation"), winGbPrinterEnabled, 0, 1),
INTOPT("preferences/gdbBreakOnLoad", "DebugGDBBreakOnLoad", wxTRANSLATE("Break into GDB after loading the game."), gdbBreakOnLoad, 0, 1), INTOPT("preferences/gdbBreakOnLoad", "DebugGDBBreakOnLoad", wxTRANSLATE("Break into GDB after loading the game."), gdbBreakOnLoad, 0, 1),
@ -264,8 +275,14 @@ opt_desc opts[] = {
INTOPT("preferences/useBiosGBC", "BootRomGBC", wxTRANSLATE("Use the specified BIOS file for GBC"), useBiosFileGBC, 0, 1), INTOPT("preferences/useBiosGBC", "BootRomGBC", wxTRANSLATE("Use the specified BIOS file for GBC"), useBiosFileGBC, 0, 1),
INTOPT("preferences/vsync", "VSync", wxTRANSLATE("Wait for vertical sync"), vsync, 0, 1), INTOPT("preferences/vsync", "VSync", wxTRANSLATE("Wait for vertical sync"), vsync, 0, 1),
/// Sound /// Geometry
INTOPT("geometry/fullScreen", "Fullscreen", wxTRANSLATE("Enter fullscreen mode at startup"), fullScreen, 0, 1),
UINTOPT("geometry/windowHeight", "Height", wxTRANSLATE("Window height at startup"), windowHeight, 0, 99999),
UINTOPT("geometry/windowWidth", "Width", wxTRANSLATE("Window width at startup"), windowWidth, 0, 99999),
INTOPT("geometry/windowX", "X", wxTRANSLATE("Window axis X position at startup"), windowPositionX, -1, 99999),
INTOPT("geometry/windowY", "Y", wxTRANSLATE("Window axis Y position at startup"), windowPositionY, -1, 99999),
/// Sound
ENUMOPT("Sound/AudioAPI", "", wxTRANSLATE("Sound API; if unsupported, default API will be used"), gopts.audio_api, wxTRANSLATE("sdl|openal|directsound|xaudio2|faudio")), ENUMOPT("Sound/AudioAPI", "", wxTRANSLATE("Sound API; if unsupported, default API will be used"), gopts.audio_api, wxTRANSLATE("sdl|openal|directsound|xaudio2|faudio")),
STROPT("Sound/AudioDevice", "", wxTRANSLATE("Device ID of chosen audio device for chosen driver"), gopts.audio_dev), STROPT("Sound/AudioDevice", "", wxTRANSLATE("Device ID of chosen audio device for chosen driver"), gopts.audio_dev),
INTOPT("Sound/Buffers", "", wxTRANSLATE("Number of sound buffers"), gopts.audio_buffers, 2, 10), INTOPT("Sound/Buffers", "", wxTRANSLATE("Number of sound buffers"), gopts.audio_buffers, 2, 10),
@ -339,7 +356,6 @@ bool opt_lt(const opt_desc& opt1, const opt_desc& opt2)
} }
// FIXME: simulate MakeInstanceFilename(vbam.ini) using subkeys (Slave%d/*) // FIXME: simulate MakeInstanceFilename(vbam.ini) using subkeys (Slave%d/*)
void load_opts() void load_opts()
{ {
// just for sanity... // just for sanity...
@ -369,7 +385,7 @@ void load_opts()
for (cont = cfg->GetFirstEntry(s, grp_idx); cont; for (cont = cfg->GetFirstEntry(s, grp_idx); cont;
cont = cfg->GetNextEntry(s, grp_idx)) { cont = cfg->GetNextEntry(s, grp_idx)) {
//wxLogWarning(_("Invalid option %s present; removing if possible"), s.mb_str()); //wxLogWarning(_("Invalid option %s present; removing if possible"), s.c_str());
item_del.push_back(s); item_del.push_back(s);
} }
@ -407,7 +423,7 @@ void load_opts()
for (cont = cfg->GetFirstGroup(e, key_idx); cont; for (cont = cfg->GetFirstGroup(e, key_idx); cont;
cont = cfg->GetNextGroup(e, key_idx)) { cont = cfg->GetNextGroup(e, key_idx)) {
s.append(e); s.append(e);
//wxLogWarning(_("Invalid option group %s present; removing if possible"), s.mb_str()); //wxLogWarning(_("Invalid option group %s present; removing if possible"), s.c_str());
grp_del.push_back(s); grp_del.push_back(s);
s.resize(poff2); s.resize(poff2);
} }
@ -422,7 +438,7 @@ void load_opts()
if (i == NUM_KEYS) { if (i == NUM_KEYS) {
s.append(e); s.append(e);
//wxLogWarning(_("Invalid option %s present; removing if possible"), s.mb_str()); //wxLogWarning(_("Invalid option %s present; removing if possible"), s.c_str());
item_del.push_back(s); item_del.push_back(s);
s.resize(poff2); s.resize(poff2);
} }
@ -434,7 +450,7 @@ void load_opts()
} else { } else {
s.append(wxT('/')); s.append(wxT('/'));
s.append(e); s.append(e);
//wxLogWarning(_("Invalid option group %s present; removing if possible"), s.mb_str()); //wxLogWarning(_("Invalid option group %s present; removing if possible"), s.c_str());
grp_del.push_back(s); grp_del.push_back(s);
s.resize(poff); s.resize(poff);
} }
@ -444,23 +460,23 @@ void load_opts()
cont = cfg->GetNextEntry(e, entry_idx)) { cont = cfg->GetNextEntry(e, entry_idx)) {
// kb options come from a different list // kb options come from a different list
if (s == wxT("Keyboard")) { if (s == wxT("Keyboard")) {
const cmditem dummy = { e }; const cmditem dummy = new_cmditem(e);
if (!std::binary_search(&cmdtab[0], &cmdtab[ncmds], dummy, cmditem_lt)) { if (!std::binary_search(&cmdtab[0], &cmdtab[ncmds], dummy, cmditem_lt)) {
s.append(wxT('/')); s.append(wxT('/'));
s.append(e); s.append(e);
//wxLogWarning(_("Invalid option %s present; removing if possible"), s.mb_str()); //wxLogWarning(_("Invalid option %s present; removing if possible"), s.c_str());
item_del.push_back(s); item_del.push_back(s);
s.resize(poff); s.resize(poff);
} }
} else { } else {
s.append(wxT('/')); s.append(wxT('/'));
s.append(e); s.append(e);
const opt_desc dummy = { s }; opt_desc dummy = new_opt_desc(s);
wxString opt_name(dummy.opt); wxString opt_name(dummy.opt);
if (!std::binary_search(&opts[0], &opts[num_opts], dummy, opt_lt) && opt_name != wxT("General/LastUpdated") && opt_name != wxT("General/LastUpdatedFileName")) { if (!std::binary_search(&opts[0], &opts[num_opts], dummy, opt_lt) && opt_name != wxT("General/LastUpdated") && opt_name != wxT("General/LastUpdatedFileName")) {
//wxLogWarning(_("Invalid option %s present; removing if possible"), s.mb_str()); //wxLogWarning(_("Invalid option %s present; removing if possible"), s.c_str());
item_del.push_back(s); item_del.push_back(s);
} }
@ -471,10 +487,10 @@ void load_opts()
cfg->SetPath(wxT("/")); cfg->SetPath(wxT("/"));
} }
for (int i = 0; i < item_del.size(); i++) for (size_t i = 0; i < item_del.size(); i++)
cfg->DeleteEntry(item_del[i]); cfg->DeleteEntry(item_del[i]);
for (int i = 0; i < grp_del.size(); i++) for (size_t i = 0; i < grp_del.size(); i++)
cfg->DeleteGroup(grp_del[i]); cfg->DeleteGroup(grp_del[i]);
// now read actual values and set to default if unset // now read actual values and set to default if unset
@ -495,7 +511,7 @@ void load_opts()
if (gotit && !s.empty()) { if (gotit && !s.empty()) {
const auto found_pos = vec_find(enum_opts, s); const auto found_pos = vec_find(enum_opts, s);
const bool matched = found_pos != wxNOT_FOUND; const bool matched = ((int)found_pos != wxNOT_FOUND);
if (!matched) { if (!matched) {
opt.curint = 0; opt.curint = 0;
@ -505,9 +521,9 @@ void load_opts()
// technically, the translation for this string could incorproate // technically, the translation for this string could incorproate
// the equals sign if necessary instead of doing it this way // the equals sign if necessary instead of doing it this way
wxLogWarning(_("Invalid value %s for option %s; valid values are %s%s%s"), wxLogWarning(_("Invalid value %s for option %s; valid values are %s%s%s"),
s, opt.opt, ev, s.c_str(), opt.opt.c_str(), ev.c_str(),
isx ? wxT(" = ") : wxT(""), isx ? wxT(" = ") : wxEmptyString,
isx ? evx : wxT("")); isx ? evx.c_str() : wxEmptyString);
// write first option // write first option
cfg->Write(opt.opt, enum_opts[0]); cfg->Write(opt.opt, enum_opts[0]);
} else } else
@ -521,14 +537,14 @@ void load_opts()
cfg->Read(opt.opt, &opt.curint, *opt.intopt); cfg->Read(opt.opt, &opt.curint, *opt.intopt);
if (opt.curint < opt.min || opt.curint > opt.max) { if (opt.curint < opt.min || opt.curint > opt.max) {
wxLogWarning(_("Invalid value %d for option %s; valid values are %d - %d"), opt.curint, opt.opt, opt.min, opt.max); wxLogWarning(_("Invalid value %d for option %s; valid values are %d - %d"), opt.curint, opt.opt.c_str(), opt.min, opt.max);
} else } else
*opt.intopt = opt.curint; *opt.intopt = opt.curint;
} else if (opt.doubleopt) { } else if (opt.doubleopt) {
cfg->Read(opt.opt, &opt.curdouble, *opt.doubleopt); cfg->Read(opt.opt, &opt.curdouble, *opt.doubleopt);
if (opt.curdouble < opt.min || opt.curdouble > opt.max) { if (opt.curdouble < opt.min || opt.curdouble > opt.max) {
wxLogWarning(_("Invalid value %f for option %s; valid values are %f - %f"), opt.curdouble, opt.opt, opt.min, opt.max); wxLogWarning(_("Invalid value %f for option %s; valid values are %f - %f"), opt.curdouble, opt.opt.c_str(), opt.min, opt.max);
} else } else
*opt.doubleopt = opt.curdouble; *opt.doubleopt = opt.curdouble;
} else if (opt.uintopt) { } else if (opt.uintopt) {
@ -537,7 +553,7 @@ void load_opts()
opt.curuint = val; opt.curuint = val;
if (opt.curuint < opt.min || opt.curuint > opt.max) { if (opt.curuint < opt.min || opt.curuint > opt.max) {
wxLogWarning(_("Invalid value %f for option %s; valid values are %f - %f"), opt.curuint, opt.opt, opt.min, opt.max); wxLogWarning(_("Invalid value %f for option %s; valid values are %f - %f"), opt.curuint, opt.opt.c_str(), opt.min, opt.max);
} else } else
*opt.uintopt = opt.curuint; *opt.uintopt = opt.curuint;
} else if (opt.boolopt) { } else if (opt.boolopt) {
@ -551,7 +567,7 @@ void load_opts()
wxString optn; wxString optn;
optn.Printf(wxT("GB/Palette%d"), i); optn.Printf(wxT("GB/Palette%d"), i);
wxString val; wxString val;
const opt_desc dummy = { optn }; const opt_desc dummy = new_opt_desc(optn);
opt_desc* opt = std::lower_bound(&opts[0], &opts[num_opts], dummy, opt_lt); opt_desc* opt = std::lower_bound(&opts[0], &opts[num_opts], dummy, opt_lt);
wxString entry; wxString entry;
@ -569,7 +585,7 @@ void load_opts()
int start = cpos; int start = cpos;
cpos = val.find(wxT(','), cpos); cpos = val.find(wxT(','), cpos);
if (cpos == wxString::npos) if ((size_t)cpos == wxString::npos)
cpos = val.size(); cpos = val.size();
long ival; long ival;
@ -580,7 +596,7 @@ void load_opts()
entry.ToLong(&ival, 16); entry.ToLong(&ival, 16);
systemGbPalette[i * 8 + j] = ival; systemGbPalette[i * 8 + j] = ival;
if (cpos != val.size()) if ((size_t)cpos != val.size())
cpos++; cpos++;
} }
} }
@ -589,14 +605,14 @@ void load_opts()
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
for (int j = 0; j < NUM_KEYS; j++) { for (int j = 0; j < NUM_KEYS; j++) {
wxString optname; wxString optname;
optname.Printf(wxT("Joypad/%d/%s"), i + 1, joynames[j]); optname.Printf(wxT("Joypad/%d/%s"), i + 1, joynames[j].c_str());
bool gotit = cfg->Read(optname, &s); bool gotit = cfg->Read(optname, &s);
if (gotit) { if (gotit) {
gopts.joykey_bindings[i][j] = wxJoyKeyTextCtrl::FromString(s); gopts.joykey_bindings[i][j] = wxJoyKeyTextCtrl::FromString(s);
if (s.size() && !gopts.joykey_bindings[i][j].size()) if (s.size() && !gopts.joykey_bindings[i][j].size())
wxLogWarning(_("Invalid key binding %s for %s"), s.mb_str(), optname.mb_str()); wxLogWarning(_("Invalid key binding %s for %s"), s.c_str(), optname.c_str());
} else { } else {
s = wxJoyKeyTextCtrl::ToString(gopts.joykey_bindings[i][j]); s = wxJoyKeyTextCtrl::ToString(gopts.joykey_bindings[i][j]);
cfg->Write(optname, s); cfg->Write(optname, s);
@ -617,9 +633,9 @@ void load_opts()
wxAcceleratorEntry_v val = wxKeyTextCtrl::FromString(s); wxAcceleratorEntry_v val = wxKeyTextCtrl::FromString(s);
if (!val.size()) if (!val.size())
wxLogWarning(_("Invalid key binding %s for %s"), s.mb_str(), kbopt.mb_str()); wxLogWarning(_("Invalid key binding %s for %s"), s.c_str(), kbopt.c_str());
else { else {
for (int j = 0; j < val.size(); j++) for (size_t j = 0; j < val.size(); j++)
val[j].Set(val[j].GetFlags(), val[j].GetKeyCode(), val[j].Set(val[j].GetFlags(), val[j].GetKeyCode(),
cmdtab[i].cmd_id); cmdtab[i].cmd_id);
@ -665,7 +681,7 @@ void update_opts()
cfg->Write(opt.opt, (opt.curdouble = *opt.doubleopt)); cfg->Write(opt.opt, (opt.curdouble = *opt.doubleopt));
} else if (opt.uintopt) { } else if (opt.uintopt) {
if (*opt.uintopt != opt.curuint) if (*opt.uintopt != opt.curuint)
cfg->Write(opt.opt, (opt.curuint = *opt.uintopt)); cfg->Write(opt.opt, (long)(opt.curuint = *opt.uintopt));
} else if (opt.boolopt) { } else if (opt.boolopt) {
if (*opt.boolopt != opt.curbool) if (*opt.boolopt != opt.curbool)
cfg->Write(opt.opt, (opt.curbool = *opt.boolopt)); cfg->Write(opt.opt, (opt.curbool = *opt.boolopt));
@ -677,7 +693,7 @@ void update_opts()
for (int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
wxString optn; wxString optn;
optn.Printf(wxT("GB/Palette%d"), i); optn.Printf(wxT("GB/Palette%d"), i);
const opt_desc dummy = { optn }; const opt_desc dummy = new_opt_desc(optn);
opt_desc* opt = std::lower_bound(&opts[0], &opts[num_opts], dummy, opt_lt); opt_desc* opt = std::lower_bound(&opts[0], &opts[num_opts], dummy, opt_lt);
wxString val; wxString val;
wxString entry; wxString entry;
@ -703,7 +719,7 @@ void update_opts()
for (int j = 0; j < NUM_KEYS; j++) { for (int j = 0; j < NUM_KEYS; j++) {
wxString s, o; wxString s, o;
wxString optname; wxString optname;
optname.Printf(wxT("Joypad/%d/%s"), i + 1, joynames[j]); optname.Printf(wxT("Joypad/%d/%s"), i + 1, joynames[j].c_str());
s = wxJoyKeyTextCtrl::ToString(gopts.joykey_bindings[i][j]); s = wxJoyKeyTextCtrl::ToString(gopts.joykey_bindings[i][j]);
cfg->Read(optname, &o); cfg->Read(optname, &o);
@ -721,9 +737,9 @@ void update_opts()
for (bool cont = cfg->GetFirstEntry(s, entry_idx); cont; for (bool cont = cfg->GetFirstEntry(s, entry_idx); cont;
cont = cfg->GetNextEntry(s, entry_idx)) { cont = cfg->GetNextEntry(s, entry_idx)) {
const cmditem dummy = { s }; const cmditem dummy = new_cmditem(s);
cmditem* cmd = std::lower_bound(&cmdtab[0], &cmdtab[ncmds], dummy, cmditem_lt); cmditem* cmd = std::lower_bound(&cmdtab[0], &cmdtab[ncmds], dummy, cmditem_lt);
int i; size_t i;
for (i = 0; i < gopts.accels.size(); i++) for (i = 0; i < gopts.accels.size(); i++)
if (gopts.accels[i].GetCommand() == cmd->cmd_id) if (gopts.accels[i].GetCommand() == cmd->cmd_id)
@ -733,7 +749,7 @@ void update_opts()
item_del.push_back(s); item_del.push_back(s);
} }
for (int i = 0; i < item_del.size(); i++) for (size_t i = 0; i < item_del.size(); i++)
cfg->DeleteEntry(item_del[i]); cfg->DeleteEntry(item_del[i]);
} }
@ -772,7 +788,7 @@ void update_opts()
bool opt_set(const wxString& name, const wxString& val) bool opt_set(const wxString& name, const wxString& val)
{ {
const opt_desc dummy = { name }; const opt_desc dummy = new_opt_desc(name);
const opt_desc* opt = std::lower_bound(&opts[0], &opts[num_opts], dummy, opt_lt); const opt_desc* opt = std::lower_bound(&opts[0], &opts[num_opts], dummy, opt_lt);
if (!wxStrcmp(name, opt->opt)) { if (!wxStrcmp(name, opt->opt)) {
@ -781,7 +797,7 @@ bool opt_set(const wxString& name, const wxString& val)
else if (opt->boolopt) { else if (opt->boolopt) {
if (!(val == wxT('0') || val == wxT('1'))) if (!(val == wxT('0') || val == wxT('1')))
wxLogWarning(_("Invalid flag option %s - %s ignored"), wxLogWarning(_("Invalid flag option %s - %s ignored"),
name, val); name.c_str(), val.c_str());
else else
*opt->boolopt = val == wxT('1'); *opt->boolopt = val == wxT('1');
} else if (!opt->enumvals.empty()) { } else if (!opt->enumvals.empty()) {
@ -790,7 +806,7 @@ bool opt_set(const wxString& name, const wxString& val)
auto enum_opts = str_split(ev, wxT("|")); auto enum_opts = str_split(ev, wxT("|"));
const std::size_t found_pos = vec_find(enum_opts, s); const std::size_t found_pos = vec_find(enum_opts, s);
const bool matched = found_pos != wxNOT_FOUND; const bool matched = ((int)found_pos != wxNOT_FOUND);
if (!matched) { if (!matched) {
const wxString evx = wxGetTranslation(opt->enumvals); const wxString evx = wxGetTranslation(opt->enumvals);
@ -798,9 +814,9 @@ bool opt_set(const wxString& name, const wxString& val)
// technically, the translation for this string could incorproate // technically, the translation for this string could incorproate
// the equals sign if necessary instead of doing it this way // the equals sign if necessary instead of doing it this way
wxLogWarning(_("Invalid value %s for option %s; valid values are %s%s%s"), wxLogWarning(_("Invalid value %s for option %s; valid values are %s%s%s"),
s, opt->opt, opt->enumvals, s.c_str(), opt->opt.c_str(), opt->enumvals.c_str(),
isx ? wxT(" = ") : wxT(""), isx ? wxT(" = ") : wxEmptyString,
isx ? evx : wxT("")); isx ? evx.c_str() : wxEmptyString);
} else { } else {
*opt->intopt = found_pos; *opt->intopt = found_pos;
} }
@ -809,7 +825,7 @@ bool opt_set(const wxString& name, const wxString& val)
long ival; long ival;
if (!s.ToLong(&ival) || ival < opt->min || ival > opt->max) if (!s.ToLong(&ival) || ival < opt->min || ival > opt->max)
wxLogWarning(_("Invalid value %d for option %s; valid values are %d - %d"), ival, name, opt->min, opt->max); wxLogWarning(_("Invalid value %d for option %s; valid values are %d - %d"), ival, name.c_str(), opt->min, opt->max);
else else
*opt->intopt = ival; *opt->intopt = ival;
} else if (opt->doubleopt) { } else if (opt->doubleopt) {
@ -817,7 +833,7 @@ bool opt_set(const wxString& name, const wxString& val)
double dval; double dval;
if (!s.ToDouble(&dval) || dval < opt->min || dval > opt->max) if (!s.ToDouble(&dval) || dval < opt->min || dval > opt->max)
wxLogWarning(_("Invalid value %f for option %s; valid values are %f - %f"), dval, name, opt->min, opt->max); wxLogWarning(_("Invalid value %f for option %s; valid values are %f - %f"), dval, name.c_str(), opt->min, opt->max);
else else
*opt->doubleopt = dval; *opt->doubleopt = dval;
} else if (opt->uintopt) { } else if (opt->uintopt) {
@ -825,7 +841,7 @@ bool opt_set(const wxString& name, const wxString& val)
unsigned long uival; unsigned long uival;
if (!s.ToULong(&uival) || uival < opt->min || uival > opt->max) if (!s.ToULong(&uival) || uival < opt->min || uival > opt->max)
wxLogWarning(_("Invalid value %f for option %s; valid values are %f - %f"), uival, name, opt->min, opt->max); wxLogWarning(_("Invalid value %f for option %s; valid values are %f - %f"), uival, name.c_str(), opt->min, opt->max);
else else
*opt->uintopt = (uint32_t)uival; *opt->uintopt = (uint32_t)uival;
} else { } else {
@ -839,7 +855,7 @@ bool opt_set(const wxString& name, const wxString& val)
wxString vals(val); wxString vals(val);
for (int j = 0, cpos = 0; j < 8; j++) { for (size_t j = 0, cpos = 0; j < 8; j++) {
int start = cpos; int start = cpos;
cpos = vals.find(wxT(','), cpos); cpos = vals.find(wxT(','), cpos);
@ -868,7 +884,7 @@ bool opt_set(const wxString& name, const wxString& val)
auto parts = str_split(name, wxT("/")); auto parts = str_split(name, wxT("/"));
if (parts[0] != wxT("Keyboard")) { if (parts[0] != wxT("Keyboard")) {
cmditem* cmd = std::lower_bound(&cmdtab[0], &cmdtab[ncmds], cmditem{parts[1]}, cmditem_lt); cmditem* cmd = std::lower_bound(&cmdtab[0], &cmdtab[ncmds], cmditem{parts[1],wxString(),0,0,NULL}, cmditem_lt);
if (cmd == &cmdtab[ncmds] || wxStrcmp(parts[1], cmd->cmd)) if (cmd == &cmdtab[ncmds] || wxStrcmp(parts[1], cmd->cmd))
return false; return false;
@ -889,12 +905,12 @@ bool opt_set(const wxString& name, const wxString& val)
if (!val.empty()) { if (!val.empty()) {
auto aval = wxKeyTextCtrl::FromString(val); auto aval = wxKeyTextCtrl::FromString(val);
for (int i = 0; i < aval.size(); i++) for (size_t i = 0; i < aval.size(); i++)
aval[i].Set(aval[i].GetFlags(), aval[i].GetKeyCode(), aval[i].Set(aval[i].GetFlags(), aval[i].GetKeyCode(),
cmd->cmd_id); cmd->cmd_id);
if (!aval.size()) if (!aval.size())
wxLogWarning(_("Invalid key binding %s for %s"), val, name); wxLogWarning(_("Invalid key binding %s for %s"), val.c_str(), name.c_str());
else else
gopts.accels.insert(gopts.accels.end(), aval.begin(), aval.end()); gopts.accels.insert(gopts.accels.end(), aval.begin(), aval.end());
} }
@ -920,7 +936,7 @@ bool opt_set(const wxString& name, const wxString& val)
auto b = wxJoyKeyTextCtrl::FromString(val); auto b = wxJoyKeyTextCtrl::FromString(val);
if (!b.size()) if (!b.size())
wxLogWarning(_("Invalid key binding %s for %s"), val, name); wxLogWarning(_("Invalid key binding %s for %s"), val.c_str(), name.c_str());
else else
gopts.joykey_bindings[jno][kno] = b; gopts.joykey_bindings[jno][kno] = b;
} }

View File

@ -101,6 +101,14 @@ extern struct opt_desc {
uint32_t curuint; uint32_t curuint;
#define curbool curint #define curbool curint
} opts[]; } opts[];
// Initializer for struct opt_desc
opt_desc new_opt_desc(wxString opt = "", const char* cmd = NULL, wxString desc = "",
wxString* stropt = NULL, int* intopt = NULL, wxString enumvals = "",
double min = 0, double max = 0, bool* boolopt = NULL,
double* doubleopt = NULL, uint32_t* uintopt = NULL, wxString curstr = "",
int curint = 0, double curdouble = 0, uint32_t curuint = 0);
extern const int num_opts; extern const int num_opts;
extern const wxAcceleratorEntry default_accels[]; extern const wxAcceleratorEntry default_accels[];

View File

@ -22,17 +22,17 @@ IMPLEMENT_DYNAMIC_CLASS(GameArea, wxPanel)
GameArea::GameArea() GameArea::GameArea()
: wxPanel() : wxPanel()
, loaded(IMAGE_UNKNOWN)
, panel(NULL) , panel(NULL)
, emusys(NULL) , emusys(NULL)
, basic_width(GBAWidth)
, basic_height(GBAHeight)
, fullscreen(false)
, paused(false)
, was_paused(false) , was_paused(false)
, rewind_time(0) , rewind_time(0)
, do_rewind(false) , do_rewind(false)
, rewind_mem(0) , rewind_mem(0)
, loaded(IMAGE_UNKNOWN)
, basic_width(GBAWidth)
, basic_height(GBAHeight)
, fullscreen(false)
, paused(false)
, pointer_blanked(false) , pointer_blanked(false)
, mouse_active_time(0) , mouse_active_time(0)
{ {
@ -83,7 +83,7 @@ void GameArea::LoadGame(const wxString& name)
if (t == IMAGE_UNKNOWN) { if (t == IMAGE_UNKNOWN) {
wxString s; wxString s;
s.Printf(_("%s is not a valid ROM file"), name.mb_str()); s.Printf(_("%s is not a valid ROM file"), name.c_str());
wxMessageDialog dlg(GetParent(), s, _("Problem loading file"), wxOK | wxICON_ERROR); wxMessageDialog dlg(GetParent(), s, _("Problem loading file"), wxOK | wxICON_ERROR);
dlg.ShowModal(); dlg.ShowModal();
return; return;
@ -140,7 +140,7 @@ void GameArea::LoadGame(const wxString& name)
if (t == IMAGE_GB) { if (t == IMAGE_GB) {
if (!gbLoadRom(fn)) { if (!gbLoadRom(fn)) {
wxString s; wxString s;
s.Printf(_("Unable to load Game Boy ROM %s"), name.mb_str()); s.Printf(_("Unable to load Game Boy ROM %s"), name.c_str());
wxMessageDialog dlg(GetParent(), s, _("Problem loading file"), wxOK | wxICON_ERROR); wxMessageDialog dlg(GetParent(), s, _("Problem loading file"), wxOK | wxICON_ERROR);
dlg.ShowModal(); dlg.ShowModal();
return; return;
@ -155,7 +155,7 @@ void GameArea::LoadGame(const wxString& name)
wxCharBuffer pfnb(pfn.GetFullPath().mb_fn_str()); wxCharBuffer pfnb(pfn.GetFullPath().mb_fn_str());
applyPatch(pfnb.data(), &gbRom, &size); applyPatch(pfnb.data(), &gbRom, &size);
if (size != rom_size) if (size != (int)rom_size)
gbUpdateSizes(); gbUpdateSizes();
rom_size = size; rom_size = size;
@ -192,7 +192,7 @@ void GameArea::LoadGame(const wxString& name)
gbCPUInit(fn, use_bios); gbCPUInit(fn, use_bios);
if (use_bios && !useBios) { if (use_bios && !useBios) {
wxLogError(_("Could not load BIOS %s"), (gbCgbMode ? gopts.gbc_bios : gopts.gb_bios).mb_str()); wxLogError(_("Could not load BIOS %s"), (gbCgbMode ? gopts.gbc_bios : gopts.gb_bios).c_str());
// could clear use flag & file name now, but better to force // could clear use flag & file name now, but better to force
// user to do it // user to do it
} }
@ -215,7 +215,7 @@ void GameArea::LoadGame(const wxString& name)
{ {
if (!(rom_size = CPULoadRom(fn))) { if (!(rom_size = CPULoadRom(fn))) {
wxString s; wxString s;
s.Printf(_("Unable to load Game Boy Advance ROM %s"), name.mb_str()); s.Printf(_("Unable to load Game Boy Advance ROM %s"), name.c_str());
wxMessageDialog dlg(GetParent(), s, _("Problem loading file"), wxOK | wxICON_ERROR); wxMessageDialog dlg(GetParent(), s, _("Problem loading file"), wxOK | wxICON_ERROR);
dlg.ShowModal(); dlg.ShowModal();
return; return;
@ -285,7 +285,7 @@ void GameArea::LoadGame(const wxString& name)
CPUInit(gopts.gba_bios.mb_fn_str(), useBiosFileGBA); CPUInit(gopts.gba_bios.mb_fn_str(), useBiosFileGBA);
if (useBiosFileGBA && !useBios) { if (useBiosFileGBA && !useBios) {
wxLogError(_("Could not load BIOS %s"), gopts.gba_bios.mb_str()); wxLogError(_("Could not load BIOS %s"), gopts.gba_bios.c_str());
// could clear use flag & file name now, but better to force // could clear use flag & file name now, but better to force
// user to do it // user to do it
} }
@ -302,7 +302,8 @@ void GameArea::LoadGame(const wxString& name)
loaded = t; loaded = t;
SetFrameTitle(); SetFrameTitle();
SetFocus(); SetFocus();
AdjustSize(true); // Use custom geometry
AdjustSize(false);
emulating = true; emulating = true;
was_paused = true; was_paused = true;
MainFrame* mf = wxGetApp().frame; MainFrame* mf = wxGetApp().frame;
@ -354,7 +355,7 @@ void GameArea::LoadGame(const wxString& name)
if (emusys->emuReadBattery(fnb.data())) { if (emusys->emuReadBattery(fnb.data())) {
wxString msg; wxString msg;
msg.Printf(_("Loaded battery %s"), bat.GetFullPath().mb_str()); msg.Printf(_("Loaded battery %s"), bat.GetFullPath().c_str());
systemScreenMessage(msg); systemScreenMessage(msg);
if (cpuSaveType == 0 && ovSaveType == 0 && t == IMAGE_GBA) { if (cpuSaveType == 0 && ovSaveType == 0 && t == IMAGE_GBA) {
@ -371,6 +372,7 @@ void GameArea::LoadGame(const wxString& name)
case 0x10000: case 0x10000:
if (saveType == GBA_SAVE_EEPROM || saveType == GBA_SAVE_SRAM) if (saveType == GBA_SAVE_EEPROM || saveType == GBA_SAVE_SRAM)
break; break;
break;
case 0x20000: case 0x20000:
saveType = GBA_SAVE_FLASH; saveType = GBA_SAVE_FLASH;
@ -461,6 +463,10 @@ void GameArea::recompute_dirs()
batdir = wxGetApp().GetAbsolutePath(gopts.battery_dir); batdir = wxGetApp().GetAbsolutePath(gopts.battery_dir);
} }
if (!wxIsWritable(batdir)) {
batdir = wxGetApp().GetDataDir();
}
statedir = gopts.state_dir; statedir = gopts.state_dir;
if (!statedir.size()) { if (!statedir.size()) {
@ -469,11 +475,9 @@ void GameArea::recompute_dirs()
statedir = wxGetApp().GetAbsolutePath(gopts.state_dir); statedir = wxGetApp().GetAbsolutePath(gopts.state_dir);
} }
if (!wxIsWritable(batdir)) if (!wxIsWritable(statedir)) {
batdir = wxGetApp().GetConfigurationPath(); statedir = wxGetApp().GetDataDir();
}
if (!wxIsWritable(statedir))
statedir = wxGetApp().GetConfigurationPath();
} }
void GameArea::UnloadGame(bool destruct) void GameArea::UnloadGame(bool destruct)
@ -570,7 +574,7 @@ bool GameArea::LoadState()
bool GameArea::LoadState(int slot) bool GameArea::LoadState(int slot)
{ {
wxString fname; wxString fname;
fname.Printf(SAVESLOT_FMT, game_name().mb_str(), slot); fname.Printf(SAVESLOT_FMT, game_name().c_str(), slot);
return LoadState(wxFileName(statedir, fname)); return LoadState(wxFileName(statedir, fname));
} }
@ -604,7 +608,7 @@ bool GameArea::LoadState(const wxFileName& fname)
wxString msg; wxString msg;
msg.Printf(ret ? _("Loaded state %s") : _("Error loading state %s"), msg.Printf(ret ? _("Loaded state %s") : _("Error loading state %s"),
fname.GetFullPath().mb_str()); fname.GetFullPath().c_str());
systemScreenMessage(msg); systemScreenMessage(msg);
return ret; return ret;
} }
@ -617,7 +621,7 @@ bool GameArea::SaveState()
bool GameArea::SaveState(int slot) bool GameArea::SaveState(int slot)
{ {
wxString fname; wxString fname;
fname.Printf(SAVESLOT_FMT, game_name().mb_str(), slot); fname.Printf(SAVESLOT_FMT, game_name().c_str(), slot);
return SaveState(wxFileName(statedir, fname)); return SaveState(wxFileName(statedir, fname));
} }
@ -628,7 +632,7 @@ bool GameArea::SaveState(const wxFileName& fname)
wxGetApp().frame->update_state_ts(true); wxGetApp().frame->update_state_ts(true);
wxString msg; wxString msg;
msg.Printf(ret ? _("Saved state %s") : _("Error saving state %s"), msg.Printf(ret ? _("Saved state %s") : _("Error saving state %s"),
fname.GetFullPath().mb_str()); fname.GetFullPath().c_str());
systemScreenMessage(msg); systemScreenMessage(msg);
return ret; return ret;
} }
@ -658,7 +662,7 @@ void GameArea::SaveBattery()
// of course some games just write battery way too often for such // of course some games just write battery way too often for such
// a thing to be useful // a thing to be useful
if (!emusys->emuWriteBattery(fnb.data())) if (!emusys->emuWriteBattery(fnb.data()))
wxLogError(_("Error writing battery %s"), fn); wxLogError(_("Error writing battery %s"), fn.c_str());
systemSaveUpdateCounter = SYSTEM_SAVE_NOT_UPDATED; systemSaveUpdateCounter = SYSTEM_SAVE_NOT_UPDATED;
} }
@ -840,7 +844,7 @@ void GameArea::ShowFullScreen(bool full)
// in particular, unix does Matches() in wrong direction // in particular, unix does Matches() in wrong direction
wxArrayVideoModes vm = d.GetModes(); wxArrayVideoModes vm = d.GetModes();
int best_mode = -1; int best_mode = -1;
int i; size_t i;
for (i = 0; i < vm.size(); i++) { for (i = 0; i < vm.size(); i++) {
if (vm[i].w != gopts.fs_mode.w || vm[i].h != gopts.fs_mode.h) if (vm[i].w != gopts.fs_mode.w || vm[i].h != gopts.fs_mode.h)
@ -997,7 +1001,7 @@ void GameArea::OnIdle(wxIdleEvent& event)
panel = new GLDrawingPanel(this, basic_width, basic_height); panel = new GLDrawingPanel(this, basic_width, basic_height);
break; break;
#endif #endif
#ifdef __WXMSW__ #if defined(__WXMSW__) && !defined(NO_D3D)
case RND_DIRECT3D: case RND_DIRECT3D:
panel = new DXDrawingPanel(this, basic_width, basic_height); panel = new DXDrawingPanel(this, basic_width, basic_height);
break; break;
@ -1016,7 +1020,6 @@ void GameArea::OnIdle(wxIdleEvent& event)
// set userdata so we know it's the panel and not the frame being resized // set userdata so we know it's the panel and not the frame being resized
// the userdata is freed on disconnect/destruction // the userdata is freed on disconnect/destruction
w->Connect(wxEVT_SIZE, wxSizeEventHandler(GameArea::OnSize), new wxObject, this);
this->Connect(wxEVT_SIZE, wxSizeEventHandler(GameArea::OnSize), NULL, this); this->Connect(wxEVT_SIZE, wxSizeEventHandler(GameArea::OnSize), NULL, this);
w->SetBackgroundStyle(wxBG_STYLE_CUSTOM); w->SetBackgroundStyle(wxBG_STYLE_CUSTOM);
@ -1030,10 +1033,28 @@ void GameArea::OnIdle(wxIdleEvent& event)
AdjustMinSize(); AdjustMinSize();
AdjustSize(false); AdjustSize(false);
unsigned frame_priority = 0;
// add spacers on top and bottom to center panel vertically // add spacers on top and bottom to center panel vertically
// but not on 2.8 which does not handle this correctly
#if wxCHECK_VERSION(2, 9, 0)
GetSizer()->Add(0, 0, 1, wxEXPAND); GetSizer()->Add(0, 0, 1, wxEXPAND);
GetSizer()->Add(w, 0, gopts.retain_aspect ? (wxSHAPED | wxALIGN_CENTER | wxEXPAND) : wxEXPAND); #else
frame_priority = 1;
#endif
// On windows with the vcpkg version of wxWidgets which is 3.1.2, the
// wxEXPAND flag throws an XRC error, but it is necessary on earlier versions of wxWidgets
#if defined(__WXMSW__) && wxCHECK_VERSION(3, 1, 2)
GetSizer()->Add(w, frame_priority, gopts.retain_aspect ? (wxSHAPED | wxALIGN_CENTER_HORIZONTAL) : wxEXPAND);
#else
GetSizer()->Add(w, frame_priority, gopts.retain_aspect ? (wxSHAPED | wxALIGN_CENTER_HORIZONTAL | wxEXPAND) : wxEXPAND);
#endif
#if wxCHECK_VERSION(2, 9, 0)
GetSizer()->Add(0, 0, 1, wxEXPAND); GetSizer()->Add(0, 0, 1, wxEXPAND);
#endif
Layout(); Layout();
if (pointer_blanked) if (pointer_blanked)
@ -1136,9 +1157,9 @@ static std::vector<game_key>* game_keys_pressed(int key, int mod, int joy)
for (int key_num = 0; key_num < NUM_KEYS; key_num++) { for (int key_num = 0; key_num < NUM_KEYS; key_num++) {
wxJoyKeyBinding_v& b = gopts.joykey_bindings[player][key_num]; wxJoyKeyBinding_v& b = gopts.joykey_bindings[player][key_num];
for (int bind_num = 0; bind_num < b.size(); bind_num++) for (size_t bind_num = 0; bind_num < b.size(); bind_num++)
if (b[bind_num].key == key && b[bind_num].mod == mod && b[bind_num].joy == joy) if (b[bind_num].key == key && b[bind_num].mod == mod && b[bind_num].joy == joy)
vec->push_back({player, key_num, bind_num, b}); vec->push_back({player, key_num, (int)bind_num, b});
} }
return vec; return vec;
@ -1166,7 +1187,7 @@ static bool process_key_press(bool down, int key, int mod, int joy = 0)
} }
// check if key is already pressed // check if key is already pressed
int kpno; size_t kpno;
for (kpno = 0; kpno < keys_pressed.size(); kpno++) for (kpno = 0; kpno < keys_pressed.size(); kpno++)
if (keys_pressed[kpno].key == key && keys_pressed[kpno].mod == mod && keys_pressed[kpno].joy == joy) if (keys_pressed[kpno].key == key && keys_pressed[kpno].mod == mod && keys_pressed[kpno].joy == joy)
@ -1199,11 +1220,11 @@ static bool process_key_press(bool down, int key, int mod, int joy = 0)
} }
else { else {
// only release if no others pressed // only release if no others pressed
int bind2; size_t bind2;
auto b = game_key.b; auto b = game_key.b;
for (bind2 = 0; bind2 < game_key.b.size(); bind2++) { for (bind2 = 0; bind2 < game_key.b.size(); bind2++) {
if (game_key.bind_num == bind2 || (b[bind2].key == key && b[bind2].mod == mod && b[bind2].joy == joy)) if ((size_t)game_key.bind_num == bind2 || (b[bind2].key == key && b[bind2].mod == mod && b[bind2].joy == joy))
continue; continue;
for (kpno = 0; kpno < keys_pressed.size(); kpno++) for (kpno = 0; kpno < keys_pressed.size(); kpno++)
@ -1269,10 +1290,8 @@ void GameArea::EraseBackground(wxEraseEvent& ev)
void GameArea::OnSize(wxSizeEvent& ev) void GameArea::OnSize(wxSizeEvent& ev)
{ {
if (!ev.GetEventUserData()) { // is frame draw_black_background(this);
draw_black_background(this); Layout();
Layout();
}
// panel may resize // panel may resize
if (panel) if (panel)
@ -1281,6 +1300,14 @@ void GameArea::OnSize(wxSizeEvent& ev)
ev.Skip(true); ev.Skip(true);
} }
#if defined(__WXGTK__) && defined(HAVE_XSS)
#include <X11/Xlib.h>
#define Status int
#include <X11/extensions/scrnsaver.h>
#include <gdk/gdkx.h>
#include <gtk/gtk.h>
#endif
void GameArea::OnSDLJoy(wxSDLJoyEvent& ev) void GameArea::OnSDLJoy(wxSDLJoyEvent& ev)
{ {
int key = ev.GetControlIndex(); int key = ev.GetControlIndex();
@ -1302,6 +1329,16 @@ void GameArea::OnSDLJoy(wxSDLJoyEvent& ev)
process_key_press(value & SDL_HAT_LEFT, key, WXJB_HAT_W, joy); process_key_press(value & SDL_HAT_LEFT, key, WXJB_HAT_W, joy);
} else } else
process_key_press(ev.GetControlValue() != 0, key, mod, joy); process_key_press(ev.GetControlValue() != 0, key, mod, joy);
// tell Linux to turn off the screensaver/screen-blank if joystick button was pressed
// this shouldn't be necessary of course
#if defined(__WXGTK__) && defined(HAVE_XSS)
if (!wxGetApp().UsingWayland()) {
Display* display = GDK_WINDOW_XDISPLAY(gtk_widget_get_window(wxGetApp().frame->GetHandle()));
XResetScreenSaver(display);
XFlush(display);
}
#endif
} }
BEGIN_EVENT_TABLE(GameArea, wxPanel) BEGIN_EVENT_TABLE(GameArea, wxPanel)
@ -1320,8 +1357,8 @@ DrawingPanelBase::DrawingPanelBase(int _width, int _height)
, todraw(0) , todraw(0)
, pixbuf1(0) , pixbuf1(0)
, pixbuf2(0) , pixbuf2(0)
, rpi(0)
, nthreads(0) , nthreads(0)
, rpi(0)
{ {
memset(delta, 0xff, sizeof(delta)); memset(delta, 0xff, sizeof(delta));
@ -1336,7 +1373,7 @@ DrawingPanelBase::DrawingPanelBase(int _width, int _height)
break; break;
wxFileName fpn(gopts.filter_plugin); wxFileName fpn(gopts.filter_plugin);
fpn.MakeAbsolute(wxStandardPaths::Get().GetPluginsDir()); fpn.MakeAbsolute(wxGetApp().GetPluginsDir());
if (!filt_plugin.Load(fpn.GetFullPath(), wxDL_VERBATIM | wxDL_NOW)) if (!filt_plugin.Load(fpn.GetFullPath(), wxDL_VERBATIM | wxDL_NOW))
break; break;
@ -1417,6 +1454,7 @@ void DrawingPanelBase::DrawingPanelInit()
void DrawingPanelBase::PaintEv(wxPaintEvent& ev) void DrawingPanelBase::PaintEv(wxPaintEvent& ev)
{ {
(void)ev; // unused params
wxPaintDC dc(GetWindow()); wxPaintDC dc(GetWindow());
if (!todraw) { if (!todraw) {
@ -1434,6 +1472,7 @@ void DrawingPanelBase::PaintEv(wxPaintEvent& ev)
void DrawingPanelBase::EraseBackground(wxEraseEvent& ev) void DrawingPanelBase::EraseBackground(wxEraseEvent& ev)
{ {
(void)ev; // unused params
// do nothing, do not allow propagation // do nothing, do not allow propagation
} }
@ -1783,7 +1822,7 @@ void DrawingPanelBase::DrawArea(uint8_t** data)
if (panel->osdstat.size()) if (panel->osdstat.size())
drawText(todraw + outstride * (systemColorDepth != 24), outstride, drawText(todraw + outstride * (systemColorDepth != 24), outstride,
10, 20, panel->osdstat.mb_str(), showSpeedTransparent); 10, 20, panel->osdstat.utf8_str(), showSpeedTransparent);
if (!disableStatusMessages && !panel->osdtext.empty()) { if (!disableStatusMessages && !panel->osdtext.empty()) {
if (systemGetClock() - panel->osdtime < OSD_TIME) { if (systemGetClock() - panel->osdtime < OSD_TIME) {
@ -1791,7 +1830,7 @@ void DrawingPanelBase::DrawArea(uint8_t** data)
int linelen = std::ceil(width * scale - 20) / 8; int linelen = std::ceil(width * scale - 20) / 8;
int nlines = (message.size() + linelen - 1) / linelen; int nlines = (message.size() + linelen - 1) / linelen;
int cury = height - 14 - nlines * 10; int cury = height - 14 - nlines * 10;
char* buf = strdup(message.mb_str()); char* buf = strdup(message.utf8_str());
char* ptr = buf; char* ptr = buf;
while (nlines > 1) { while (nlines > 1) {
@ -1875,7 +1914,7 @@ void DrawingPanelBase::DrawOSD(wxWindowDC& dc)
// find amt of text that will fit on a line is to search // find amt of text that will fit on a line is to search
wxArrayInt llen; // length of each line, in chars wxArrayInt llen; // length of each line, in chars
for (int off = 0; off < msg.size();) { for (size_t off = 0; off < msg.size();) {
// One way would be to bsearch on GetTextExtent() looking for // One way would be to bsearch on GetTextExtent() looking for
// best fit. // best fit.
// Another would be to use GetPartialTextExtents and search // Another would be to use GetPartialTextExtents and search
@ -2202,6 +2241,7 @@ void GLDrawingPanel::AdjustViewport()
void GLDrawingPanel::DrawArea(wxWindowDC& dc) void GLDrawingPanel::DrawArea(wxWindowDC& dc)
{ {
(void)dc; // unused params
#ifndef wxGL_IMPLICIT_CONTEXT #ifndef wxGL_IMPLICIT_CONTEXT
SetCurrent(*ctx); SetCurrent(*ctx);
#else #else
@ -2294,7 +2334,7 @@ void GameArea::StartVidRecording(const wxString& fname)
if ((ret = vid_rec.Record(fnb.data(), basic_width, basic_height, if ((ret = vid_rec.Record(fnb.data(), basic_width, basic_height,
systemColorDepth)) systemColorDepth))
!= MRET_OK) != MRET_OK)
wxLogError(_("Unable to begin recording to %s (%s)"), fname.mb_str(), wxLogError(_("Unable to begin recording to %s (%s)"), fname.c_str(),
media_err(ret)); media_err(ret));
else { else {
MainFrame* mf = wxGetApp().frame; MainFrame* mf = wxGetApp().frame;
@ -2325,7 +2365,7 @@ void GameArea::StartSoundRecording(const wxString& fname)
MediaRet ret; MediaRet ret;
if ((ret = snd_rec.Record(fnb.data())) != MRET_OK) if ((ret = snd_rec.Record(fnb.data())) != MRET_OK)
wxLogError(_("Unable to begin recording to %s (%s)"), fname.mb_str(), wxLogError(_("Unable to begin recording to %s (%s)"), fname.c_str(),
media_err(ret)); media_err(ret));
else { else {
MainFrame* mf = wxGetApp().frame; MainFrame* mf = wxGetApp().frame;

View File

@ -1,36 +1,26 @@
#include <algorithm>
#include <wx/string.h>
#include <string>
#include <vector>
#include "strutils.h" #include "strutils.h"
// From: https://stackoverflow.com/a/7408245/262458 // From: https://stackoverflow.com/a/7408245/262458
// //
// modified to ignore empty tokens // modified to ignore empty tokens
std::vector<wxString> str_split(const wxString& text, const wxString& sep) { wxArrayString str_split(const wxString& text, const wxString& sep) {
std::vector<wxString> tokens; wxArrayString tokens;
std::size_t start = 0, end = 0; size_t start = 0, end = 0;
while ((end = text.find(sep, start)) != std::string::npos) { while ((end = text.find(sep, start)) != std::string::npos) {
wxString token = text.substr(start, end - start); wxString token = text.substr(start, end - start);
if (token.length()) if (token.length())
tokens.push_back(token); tokens.Add(token);
start = end + 1; start = end + 1;
} }
tokens.push_back(text.substr(start)); tokens.Add(text.substr(start));
return tokens; return tokens;
} }
// From: https://stackoverflow.com/a/15099743/262458 size_t vec_find(wxArrayString& opts, const wxString& val) {
std::size_t vec_find(std::vector<wxString>& opts, const wxString& val) { return opts.Index(val);
auto it = std::find(opts.begin(), opts.end(), val);
if (it == opts.end())
return wxNOT_FOUND;
return std::distance(opts.begin(), it);
} }

View File

@ -1,15 +1,13 @@
#ifndef STRUTILS_H #ifndef STRUTILS_H
#define STRUTILS_H #define STRUTILS_H
#include <algorithm>
#include <wx/string.h> #include <wx/string.h>
#include <string> #include <wx/arrstr.h>
#include <vector>
// From: https://stackoverflow.com/a/7408245/262458 // From: https://stackoverflow.com/a/7408245/262458
std::vector<wxString> str_split(const wxString& text, const wxString& sep); wxArrayString str_split(const wxString& text, const wxString& sep);
// From: https://stackoverflow.com/a/15099743/262458 // From: https://stackoverflow.com/a/15099743/262458
std::size_t vec_find(std::vector<wxString>& opts, const wxString& val); size_t vec_find(wxArrayString& opts, const wxString& val);
#endif #endif

View File

@ -39,12 +39,13 @@ bool soundBufferLow;
void systemMessage(int id, const char* fmt, ...) void systemMessage(int id, const char* fmt, ...)
{ {
(void)id; // unused params
static char* buf = NULL; static char* buf = NULL;
static int buflen = 80; static int buflen = 80;
va_list args; va_list args;
// auto-conversion of wxCharBuffer to const char * seems broken // auto-conversion of wxCharBuffer to const char * seems broken
// so save underlying wxCharBuffer (or create one of none is used) // so save underlying wxCharBuffer (or create one of none is used)
wxCharBuffer _fmt(wxString(wxGetTranslation(wxString(fmt, wxConvLibc))).mb_str()); wxCharBuffer _fmt(wxString(wxGetTranslation(wxString(fmt, wxConvLibc))).utf8_str());
if (!buf) { if (!buf) {
buf = (char*)malloc(buflen); buf = (char*)malloc(buflen);
@ -71,7 +72,7 @@ void systemMessage(int id, const char* fmt, ...)
exit(1); exit(1);
} }
wxLogError(wxT("%s"), wxString(buf, wxConvLibc).mb_str()); wxLogError(wxT("%s"), wxString(buf, wxConvLibc).c_str());
} }
static int frames = 0; static int frames = 0;
@ -129,7 +130,7 @@ void systemStartGameRecording(const wxString& fname)
uint32_t version = 1; uint32_t version = 1;
if (!game_file.Open(fn, wxT("wb")) || game_file.Write(&version, sizeof(version)) != sizeof(version)) { if (!game_file.Open(fn, wxT("wb")) || game_file.Write(&version, sizeof(version)) != sizeof(version)) {
wxLogError(_("Cannot open output file %s"), fname.mb_str()); wxLogError(_("Cannot open output file %s"), fname.c_str());
return; return;
} }
@ -190,7 +191,7 @@ void systemStartGamePlayback(const wxString& fname)
uint32_t version; uint32_t version;
if (!game_file.Open(fn, wxT("rb")) || game_file.Read(&version, sizeof(version)) != sizeof(version) || wxUINT32_SWAP_ON_BE(version) != 1) { if (!game_file.Open(fn, wxT("rb")) || game_file.Read(&version, sizeof(version)) != sizeof(version) || wxUINT32_SWAP_ON_BE(version) != 1) {
wxLogError(_("Cannot open recording file %s"), fname.mb_str()); wxLogError(_("Cannot open recording file %s"), fname.c_str());
return; return;
} }
@ -359,7 +360,7 @@ void system10Frames(int rate)
static int speedadj = 0; static int speedadj = 0;
uint32_t t = systemGetClock(); uint32_t t = systemGetClock();
if (!panel->was_paused && prevclock && (t - prevclock) != 10000 / rate) { if (!panel->was_paused && prevclock && (t - prevclock) != (uint32_t)(10000 / rate)) {
int speed = t == prevclock ? 100 * 10000 / rate - (t - prevclock) : 100; int speed = t == prevclock ? 100 * 10000 / rate - (t - prevclock) : 100;
// why 98?? // why 98??
@ -415,7 +416,7 @@ void systemScreenCapture(int num)
do { do {
wxString bfn; wxString bfn;
bfn.Printf(wxT("%s%02d"), panel->game_name().mb_str(), bfn.Printf(wxT("%s%02d"), panel->game_name().c_str(),
num++); num++);
if (captureFormat == 0) if (captureFormat == 0)
@ -434,7 +435,7 @@ void systemScreenCapture(int num)
panel->emusys->emuWriteBMP(fn.GetFullPath().mb_fn_str()); panel->emusys->emuWriteBMP(fn.GetFullPath().mb_fn_str());
wxString msg; wxString msg;
msg.Printf(_("Wrote snapshot %s"), fn.GetFullPath().mb_str()); msg.Printf(_("Wrote snapshot %s"), fn.GetFullPath().c_str());
systemScreenMessage(msg); systemScreenMessage(msg);
} }
@ -691,11 +692,11 @@ private:
IMPLEMENT_CLASS(PrintDialog, wxEvtHandler) IMPLEMENT_CLASS(PrintDialog, wxEvtHandler)
PrintDialog::PrintDialog(const uint16_t* data, int lines, bool cont) PrintDialog::PrintDialog(const uint16_t* data, int lines, bool cont):
: img(160, lines) wxPrintout(wxGetApp().frame->GetPanel()->game_name() + wxT(" Printout")),
, npw(1) img(160, lines),
, nph(1) npw(1),
, wxPrintout(wxGetApp().frame->GetPanel()->game_name() + wxT(" Printout")) nph(1)
{ {
dlg = wxStaticCast(wxGetApp().frame->FindWindow(XRCID("GBPrinter")), wxDialog); dlg = wxStaticCast(wxGetApp().frame->FindWindow(XRCID("GBPrinter")), wxDialog);
p = XRCCTRL(*dlg, "Preview", wxPanel); p = XRCCTRL(*dlg, "Preview", wxPanel);
@ -769,6 +770,7 @@ void PrintDialog::ShowImg(wxPaintEvent& evt)
void PrintDialog::ChangeMag(wxCommandEvent& evt) void PrintDialog::ChangeMag(wxCommandEvent& evt)
{ {
(void)evt; // unused params
int m = mag->GetSelection() + 1; int m = mag->GetSelection() + 1;
wxScrolledWindow* pp = wxStaticCast(p->GetParent(), wxScrolledWindow); wxScrolledWindow* pp = wxStaticCast(p->GetParent(), wxScrolledWindow);
wxSize sz(m * 160, m * img.GetHeight()); wxSize sz(m * 160, m * img.GetHeight());
@ -805,7 +807,7 @@ void PrintDialog::DoSave(wxCommandEvent&)
if (scimg.SaveFile(of)) { if (scimg.SaveFile(of)) {
wxString msg; wxString msg;
msg.Printf(_("Wrote printer output to %s"), of.mb_str()); msg.Printf(_("Wrote printer output to %s"), of.c_str());
systemScreenMessage(msg); systemScreenMessage(msg);
wxButton* cb = wxStaticCast(dlg->FindWindow(wxID_CANCEL), wxButton); wxButton* cb = wxStaticCast(dlg->FindWindow(wxID_CANCEL), wxButton);
@ -891,6 +893,8 @@ void PrintDialog::DoPrint(wxCommandEvent&)
void systemGbPrint(uint8_t* data, int len, int pages, int feed, int pal, int cont) void systemGbPrint(uint8_t* data, int len, int pages, int feed, int pal, int cont)
{ {
(void)pages; // unused params
(void)cont; // unused params
ModalPause mp; // this might take a while, so signal a pause ModalPause mp; // this might take a while, so signal a pause
GameArea* panel = wxGetApp().frame->GetPanel(); GameArea* panel = wxGetApp().frame->GetPanel();
static uint16_t* accum_prdata; static uint16_t* accum_prdata;
@ -963,7 +967,7 @@ void systemGbPrint(uint8_t* data, int len, int pages, int feed, int pal, int con
do { do {
wxString bfn; wxString bfn;
bfn.Printf(wxT("%s-print%02d"), panel->game_name().mb_str(), bfn.Printf(wxT("%s-print%02d"), panel->game_name().c_str(),
num++); num++);
if (captureFormat == 0) if (captureFormat == 0)
@ -986,7 +990,7 @@ void systemGbPrint(uint8_t* data, int len, int pages, int feed, int pal, int con
if (ret) { if (ret) {
wxString msg; wxString msg;
msg.Printf(_("Wrote printer output to %s"), of.mb_str()); msg.Printf(_("Wrote printer output to %s"), of.c_str());
systemScreenMessage(msg); systemScreenMessage(msg);
} }
@ -1111,6 +1115,8 @@ SoundDriver* systemSoundInit()
void systemOnWriteDataToSoundBuffer(const uint16_t* finalWave, int length) void systemOnWriteDataToSoundBuffer(const uint16_t* finalWave, int length)
{ {
(void)finalWave; // unused params
(void)length; // unused params
#ifndef NO_FFMPEG #ifndef NO_FFMPEG
GameArea* panel = wxGetApp().frame->GetPanel(); GameArea* panel = wxGetApp().frame->GetPanel();
@ -1174,7 +1180,7 @@ bool debugOpenPty()
if ((pty_master = posix_openpt(O_RDWR | O_NOCTTY)) < 0 || grantpt(pty_master) < 0 || unlockpt(pty_master) < 0 || !(slave_name = ptsname(pty_master))) { if ((pty_master = posix_openpt(O_RDWR | O_NOCTTY)) < 0 || grantpt(pty_master) < 0 || unlockpt(pty_master) < 0 || !(slave_name = ptsname(pty_master))) {
wxLogError(_("Error opening pseudo tty: %s"), wxString(strerror(errno), wxLogError(_("Error opening pseudo tty: %s"), wxString(strerror(errno),
wxConvLibc) wxConvLibc)
.mb_str()); .c_str());
if (pty_master >= 0) { if (pty_master >= 0) {
close(pty_master); close(pty_master);
@ -1311,7 +1317,7 @@ void log(const char* defaultMsg, ...)
if (out == NULL) { if (out == NULL) {
// FIXME: this should be an option // FIXME: this should be an option
wxFileName trace_log(wxGetApp().GetConfigurationPath(), wxT("trace.log")); wxFileName trace_log(wxGetApp().GetConfigurationPath(), wxT("trace.log"));
out = fopen(trace_log.GetFullPath().mb_str(), "w"); out = fopen(trace_log.GetFullPath().utf8_str(), "w");
if (!out) if (!out)
return; return;

View File

@ -82,11 +82,13 @@ public:
} }
void Next(wxCommandEvent& ev) void Next(wxCommandEvent& ev)
{ {
(void)ev; // unused params
CPULoop(1); CPULoop(1);
GotoPC(); GotoPC();
} }
void Goto(wxCommandEvent& ev) void Goto(wxCommandEvent& ev)
{ {
(void)ev; // unused params
wxString as = goto_addr->GetValue(); wxString as = goto_addr->GetValue();
if (!as.size()) if (!as.size())
@ -100,6 +102,7 @@ public:
// wx-2.8.4 or MacOSX compiler can't resolve overloads in evt table // wx-2.8.4 or MacOSX compiler can't resolve overloads in evt table
void GotoPCEv(wxCommandEvent& ev) void GotoPCEv(wxCommandEvent& ev)
{ {
(void)ev; // unused params
GotoPC(); GotoPC();
} }
void GotoPC() void GotoPC()
@ -120,6 +123,7 @@ public:
} }
void RefreshCmd(wxCommandEvent& ev) void RefreshCmd(wxCommandEvent& ev)
{ {
(void)ev; // unused params
UpdateDis(); UpdateDis();
} }
void UpdateDis() void UpdateDis()
@ -143,6 +147,7 @@ public:
void RefillListEv(wxCommandEvent& ev) void RefillListEv(wxCommandEvent& ev)
{ {
(void)ev; // unused params
// what an unsafe calling convention // what an unsafe calling convention
// examination of disArm shows that max len is 69 chars // examination of disArm shows that max len is 69 chars
// (e.g. 0x081cb6db), and I assume disThumb is shorter // (e.g. 0x081cb6db), and I assume disThumb is shorter
@ -221,11 +226,13 @@ public:
} }
void Next(wxCommandEvent& ev) void Next(wxCommandEvent& ev)
{ {
(void)ev; // unused params
gbEmulate(1); gbEmulate(1);
GotoPC(); GotoPC();
} }
void Goto(wxCommandEvent& ev) void Goto(wxCommandEvent& ev)
{ {
(void)ev; // unused params
wxString as = goto_addr->GetValue(); wxString as = goto_addr->GetValue();
if (!as.size()) if (!as.size())
@ -239,6 +246,7 @@ public:
// wx-2.8.4 or MacOSX compiler can't resolve overloads in evt table // wx-2.8.4 or MacOSX compiler can't resolve overloads in evt table
void GotoPCEv(wxCommandEvent& ev) void GotoPCEv(wxCommandEvent& ev)
{ {
(void)ev; // unused params
GotoPC(); GotoPC();
} }
void GotoPC() void GotoPC()
@ -248,6 +256,7 @@ public:
} }
void RefreshCmd(wxCommandEvent& ev) void RefreshCmd(wxCommandEvent& ev)
{ {
(void)ev; // unused params
UpdateDis(); UpdateDis();
} }
void UpdateDis() void UpdateDis()
@ -278,6 +287,7 @@ public:
void RefillListEv(wxCommandEvent& ev) void RefillListEv(wxCommandEvent& ev)
{ {
(void)ev; // unused params
// what an unsafe calling convention // what an unsafe calling convention
// examination of gbDis shows that max len is 26 chars // examination of gbDis shows that max len is 26 chars
// (e.g. 0xe2) // (e.g. 0xe2)
@ -322,6 +332,10 @@ void MainFrame::Disassemble(void)
case IMAGE_GB: case IMAGE_GB:
LoadXRCViewer(GBDisassemble); LoadXRCViewer(GBDisassemble);
break; break;
case IMAGE_UNKNOWN:
// do nothing
break;
} }
} }
@ -357,7 +371,7 @@ public:
wxString longline = lline; wxString longline = lline;
int lwidth = 0; int lwidth = 0;
for (int i = 0; i < NUM_IOREGS; i++) { for (long unsigned int i = 0; i < NUM_IOREGS; i++) {
addr->Append(wxGetTranslation(ioregs[i].name)); addr->Append(wxGetTranslation(ioregs[i].name));
// find longest label // find longest label
@ -391,6 +405,7 @@ public:
void SelectEv(wxCommandEvent& ev) void SelectEv(wxCommandEvent& ev)
{ {
(void)ev; // unused params
Select(addr->GetSelection()); Select(addr->GetSelection());
} }
@ -450,11 +465,13 @@ public:
void RefreshEv(wxCommandEvent& ev) void RefreshEv(wxCommandEvent& ev)
{ {
(void)ev; // unused params
Update(); Update();
} }
void Apply(wxCommandEvent& ev) void Apply(wxCommandEvent& ev)
{ {
(void)ev; // unused params
int sel = addr->GetSelection(); int sel = addr->GetSelection();
uint16_t* addr = ioregs[sel].address ? ioregs[sel].address : (uint16_t*)&ioMem[ioregs[sel].offset]; uint16_t* addr = ioregs[sel].address ? ioregs[sel].address : (uint16_t*)&ioMem[ioregs[sel].offset];
uint16_t mask, reg = *addr; uint16_t mask, reg = *addr;
@ -534,6 +551,7 @@ void LogDialog::Update()
void LogDialog::Save(wxCommandEvent& ev) void LogDialog::Save(wxCommandEvent& ev)
{ {
(void)ev; // unused params
static wxString logdir = wxEmptyString, def_name = wxEmptyString; static wxString logdir = wxEmptyString, def_name = wxEmptyString;
if (def_name.empty()) if (def_name.empty())
@ -560,6 +578,7 @@ void LogDialog::Save(wxCommandEvent& ev)
void LogDialog::Clear(wxCommandEvent& ev) void LogDialog::Clear(wxCommandEvent& ev)
{ {
(void)ev; // unused params
wxGetApp().log.clear(); wxGetApp().log.clear();
Update(); Update();
} }
@ -641,12 +660,14 @@ public:
} }
void BlockStart(wxCommandEvent& ev) void BlockStart(wxCommandEvent& ev)
{ {
(void)ev; // unused params
unsigned long l; unsigned long l;
bs->GetStringSelection().ToULong(&l, 0); bs->GetStringSelection().ToULong(&l, 0);
Goto(l); Goto(l);
} }
void GotoEv(wxCommandEvent& ev) void GotoEv(wxCommandEvent& ev)
{ {
(void)ev; // unused params
unsigned long l; unsigned long l;
wxString v = goto_addr->GetValue(); wxString v = goto_addr->GetValue();
@ -662,6 +683,7 @@ public:
} }
void RefreshCmd(wxCommandEvent& ev) void RefreshCmd(wxCommandEvent& ev)
{ {
(void)ev; // unused params
Update(); Update();
} }
@ -669,6 +691,7 @@ public:
void Load(wxCommandEvent& ev) void Load(wxCommandEvent& ev)
{ {
(void)ev; // unused params
if (memsave_fn.empty()) if (memsave_fn.empty())
memsave_fn = wxGetApp().frame->GetPanel()->game_name() + wxT(".dmp"); memsave_fn = wxGetApp().frame->GetPanel()->game_name() + wxT(".dmp");
@ -686,7 +709,7 @@ public:
wxFileName fn(memsave_fn); wxFileName fn(memsave_fn);
if (!fn.IsFileReadable()) { if (!fn.IsFileReadable()) {
wxLogError(wxT("Can't open file %s"), memsave_fn.mb_str()); wxLogError(wxT("Can't open file %s"), memsave_fn.c_str());
return; return;
} }
@ -720,6 +743,7 @@ public:
void Save(wxCommandEvent& ev) void Save(wxCommandEvent& ev)
{ {
(void)ev; // unused params
wxString s; wxString s;
s.Printf(addrlen == 4 ? wxT("%04X") : wxT("%08X"), mv->GetAddr()); s.Printf(addrlen == 4 ? wxT("%04X") : wxT("%08X"), mv->GetAddr());
selreg_addr->SetValue(s); selreg_addr->SetValue(s);
@ -802,6 +826,7 @@ public:
// wx-2.8.4 or MacOSX compiler can't resolve overloads in evt table // wx-2.8.4 or MacOSX compiler can't resolve overloads in evt table
void RefillListEv(wxCommandEvent& ev) void RefillListEv(wxCommandEvent& ev)
{ {
(void)ev; // unused params
Update(); Update();
} }
@ -823,6 +848,7 @@ public:
void WriteVal(wxCommandEvent& ev) void WriteVal(wxCommandEvent& ev)
{ {
(void)ev; // unused params
switch (mv->fmt) { switch (mv->fmt) {
case 0: case 0:
CPUWriteByteQuick(mv->writeaddr, mv->writeval); CPUWriteByteQuick(mv->writeaddr, mv->writeval);
@ -849,7 +875,7 @@ public:
while (len > 0) { while (len > 0) {
memoryMap m = map[addr >> 24]; memoryMap m = map[addr >> 24];
uint32_t off = addr & m.mask; uint32_t off = addr & m.mask;
uint32_t wlen = (off + len) > m.mask ? m.mask + 1 - off : len; int wlen = (off + len) > m.mask ? m.mask + 1 - off : len;
wlen = f.Read(m.address + off, wlen); wlen = f.Read(m.address + off, wlen);
if (wlen < 0) if (wlen < 0)
@ -871,7 +897,7 @@ public:
while (len > 0) { while (len > 0) {
memoryMap m = map[addr >> 24]; memoryMap m = map[addr >> 24];
uint32_t off = addr & m.mask; uint32_t off = addr & m.mask;
uint32_t wlen = (off + len) > m.mask ? m.mask + 1 - off : len; int wlen = (off + len) > m.mask ? m.mask + 1 - off : len;
wlen = f.Write(m.address + off, wlen); wlen = f.Write(m.address + off, wlen);
if (wlen < 0) if (wlen < 0)
@ -910,6 +936,7 @@ public:
// wx-2.8.4 or MacOSX compiler can't resolve overloads in evt table // wx-2.8.4 or MacOSX compiler can't resolve overloads in evt table
void RefillListEv(wxCommandEvent& ev) void RefillListEv(wxCommandEvent& ev)
{ {
(void)ev; // unused params
Update(); Update();
} }
@ -931,6 +958,7 @@ public:
void WriteVal(wxCommandEvent& ev) void WriteVal(wxCommandEvent& ev)
{ {
(void)ev; // unused params
switch (mv->fmt) { switch (mv->fmt) {
case 0: case 0:
GBWriteByteQuick(mv->writeaddr, mv->writeval); GBWriteByteQuick(mv->writeaddr, mv->writeval);
@ -957,7 +985,7 @@ public:
while (len > 0) { while (len > 0) {
uint8_t* maddr = gbMemoryMap[addr >> 12]; uint8_t* maddr = gbMemoryMap[addr >> 12];
uint32_t off = addr & 0xfff; uint32_t off = addr & 0xfff;
uint32_t wlen = (off + len) > 0xfff ? 0x1000 - off : len; int wlen = (off + len) > 0xfff ? 0x1000 - off : len;
wlen = f.Read(maddr + off, wlen); wlen = f.Read(maddr + off, wlen);
if (wlen < 0) if (wlen < 0)
@ -979,7 +1007,7 @@ public:
while (len > 0) { while (len > 0) {
uint8_t* maddr = gbMemoryMap[addr >> 12]; uint8_t* maddr = gbMemoryMap[addr >> 12];
uint32_t off = addr & 0xfff; uint32_t off = addr & 0xfff;
uint32_t wlen = (off + len) > 0xfff ? 0x1000 - off : len; int wlen = (off + len) > 0xfff ? 0x1000 - off : len;
wlen = f.Write(maddr + off, wlen); wlen = f.Write(maddr + off, wlen);
if (wlen < 0) if (wlen < 0)
@ -1009,5 +1037,8 @@ void MainFrame::MemViewer()
case IMAGE_GB: case IMAGE_GB:
LoadXRCViewer(GBMem); LoadXRCViewer(GBMem);
break; break;
default:
break;
} }
} }

View File

@ -5,6 +5,7 @@
namespace Viewers { namespace Viewers {
void Viewer::CloseDlg(wxCloseEvent& ev) void Viewer::CloseDlg(wxCloseEvent& ev)
{ {
(void)ev; // unused params
// stop tracking dialog // stop tracking dialog
MainFrame* f = wxGetApp().frame; MainFrame* f = wxGetApp().frame;
@ -76,12 +77,12 @@ IMPLEMENT_DYNAMIC_CLASS(DisList, wxPanel)
DisList::DisList() DisList::DisList()
: wxPanel() : wxPanel()
, nlines(0)
, topaddr(0)
, tc() , tc()
, sb() , sb()
, didinit(false) , didinit(false)
, nlines(0)
, issel(false) , issel(false)
, topaddr(0)
{ {
} }
@ -191,7 +192,7 @@ void DisList::Refill()
MoveSB(); MoveSB();
wxString val; wxString val;
for (int i = 0; i < nlines && i < strings.size(); i++) { for (size_t i = 0; i < (size_t)nlines && i < strings.size(); i++) {
val += strings[i]; val += strings[i];
val += wxT('\n'); val += wxT('\n');
} }
@ -203,6 +204,7 @@ void DisList::Refill()
// on resize, recompute shown lines and refill if necessary // on resize, recompute shown lines and refill if necessary
void DisList::Resize(wxSizeEvent& ev) void DisList::Resize(wxSizeEvent& ev)
{ {
(void)ev; // unused params
if (!didinit) // prevent crash on win32 if (!didinit) // prevent crash on win32
return; return;
@ -215,10 +217,10 @@ void DisList::Resize(wxSizeEvent& ev)
wxString val; wxString val;
tc.SetSize(sz.GetWidth(), (nlines + 1) * lineheight + extraheight); tc.SetSize(sz.GetWidth(), (nlines + 1) * lineheight + extraheight);
if (nlines > strings.size()) if ((size_t)nlines > strings.size())
RefillNeeded(); RefillNeeded();
else { else {
for (int i = 0; i < nlines && i < strings.size(); i++) { for (size_t i = 0; i < (size_t)nlines && i < strings.size(); i++) {
val += strings[i]; val += strings[i];
val += wxT('\n'); val += wxT('\n');
} }
@ -236,7 +238,7 @@ void DisList::SetSel()
if (!issel) if (!issel)
return; return;
if (nlines > addrs.size() || (uint32_t)addrs[0] > seladdr || (uint32_t)addrs[nlines - 1] <= seladdr) if ((size_t)nlines > addrs.size() || (uint32_t)addrs[0] > seladdr || (uint32_t)addrs[nlines - 1] <= seladdr)
return; return;
for (int i = 0, start = 0; i < nlines; i++) { for (int i = 0, start = 0; i < nlines; i++) {
@ -262,7 +264,7 @@ void DisList::SetSel(uint32_t addr)
seladdr = addr; seladdr = addr;
issel = true; issel = true;
if (addrs.size() < 4 || addrs.size() < nlines || topaddr > addr || (uint32_t)addrs[addrs.size() - 4] < addr) { if (addrs.size() < 4 || addrs.size() < (size_t)nlines || topaddr > addr || (uint32_t)addrs[addrs.size() - 4] < addr) {
topaddr = addr; topaddr = addr;
strings.clear(); strings.clear();
addrs.clear(); addrs.clear();
@ -282,13 +284,13 @@ IMPLEMENT_DYNAMIC_CLASS(MemView, wxPanel)
MemView::MemView() MemView::MemView()
: wxPanel() : wxPanel()
, nlines(0)
, topaddr(0)
, addrlab(0)
, disp() , disp()
, sb() , sb()
, didinit(false) , didinit(false)
, nlines(0)
, selnib(-1) , selnib(-1)
, topaddr(0)
, addrlab(0)
{ {
} }
@ -370,7 +372,7 @@ void MemView::MouseEvent(wxMouseEvent& ev)
void MemView::ShowCaret() void MemView::ShowCaret()
{ {
if (seladdr < topaddr || seladdr >= topaddr + nlines * 16) if (seladdr < (int)topaddr || seladdr >= (int)topaddr + nlines * 16)
selnib = -1; selnib = -1;
if (selnib < 0) { if (selnib < 0) {
@ -429,7 +431,7 @@ void MemView::KeyEvent(wxKeyEvent& ev)
selnib--; selnib--;
if (selnib >= 32) { if (selnib >= 32) {
if (seladdr == maxaddr - 16) if (seladdr == (int)maxaddr - 16)
selnib = 32 - nnib; selnib = 32 - nnib;
else { else {
selnib -= 32; selnib -= 32;
@ -461,7 +463,7 @@ void MemView::KeyEvent(wxKeyEvent& ev)
case WXK_DOWN: case WXK_DOWN:
case WXK_NUMPAD_DOWN: case WXK_NUMPAD_DOWN:
if (seladdr < maxaddr - 16) if (seladdr < (int)maxaddr - 16)
seladdr += 16; seladdr += 16;
break; break;
@ -493,7 +495,7 @@ void MemView::KeyEvent(wxKeyEvent& ev)
selnib--; selnib--;
if (selnib >= 32) { if (selnib >= 32) {
if (seladdr == maxaddr - 16) if (seladdr == (int)maxaddr - 16)
selnib = 32 - nnib; selnib = 32 - nnib;
else { else {
selnib -= 32; selnib -= 32;
@ -507,7 +509,7 @@ void MemView::KeyEvent(wxKeyEvent& ev)
mask = 0xff << bno * 8; mask = 0xff << bno * 8;
val = k << bno * 8; val = k << bno * 8;
} else { } else {
mask = 0xf << bno * 8 + nibno * 4; mask = 8 * (0xf << bno) + 4 * nibno;
val = isdigit(k) ? k - '0' : tolower(k) + 10 - 'a'; val = isdigit(k) ? k - '0' : tolower(k) + 10 - 'a';
val <<= bno * 8 + nibno * 4; val <<= bno * 8 + nibno * 4;
} }
@ -515,7 +517,7 @@ void MemView::KeyEvent(wxKeyEvent& ev)
if ((words[wno] & mask) == val) if ((words[wno] & mask) == val)
break; break;
words[wno] = words[wno] & ~mask | val; words[wno] = ((words[wno] & ~mask) | val);
writeaddr = topaddr + 4 * wno; writeaddr = topaddr + 4 * wno;
val = words[wno]; val = words[wno];
@ -631,6 +633,7 @@ void MemView::Repaint()
void MemView::RepaintEv(wxPaintEvent& ev) void MemView::RepaintEv(wxPaintEvent& ev)
{ {
(void)ev; // unused params
wxPaintDC dc(&disp); wxPaintDC dc(&disp);
dc.SetBackgroundMode(wxSOLID); dc.SetBackgroundMode(wxSOLID);
Refill(dc); Refill(dc);
@ -644,7 +647,7 @@ void MemView::Refill(wxDC& dc)
// doesn't seem to inherit font properly // doesn't seem to inherit font properly
dc.SetFont(GetFont()); dc.SetFont(GetFont());
for (int i = 0; i < nlines && i < words.size() / 4; i++) { for (size_t i = 0; i < (size_t)nlines && i < words.size() / 4; i++) {
wxString line, word; wxString line, word;
line.Printf(maxaddr > 0xffff ? wxT("%08X ") : wxT("%04X "), topaddr + i * 16); line.Printf(maxaddr > 0xffff ? wxT("%08X ") : wxT("%04X "), topaddr + i * 16);
@ -693,6 +696,7 @@ void MemView::Refill(wxDC& dc)
// on resize, recompute shown lines and refill if necessary // on resize, recompute shown lines and refill if necessary
void MemView::Resize(wxSizeEvent& ev) void MemView::Resize(wxSizeEvent& ev)
{ {
(void)ev; // unused params
if (!didinit) // prevent crash on win32 if (!didinit) // prevent crash on win32
return; return;
@ -705,7 +709,7 @@ void MemView::Resize(wxSizeEvent& ev)
wxString val; wxString val;
disp.SetSize(sz.GetWidth(), (nlines + 1) * charheight); disp.SetSize(sz.GetWidth(), (nlines + 1) * charheight);
if (nlines > words.size() / 4) { if ((size_t)nlines > words.size() / 4) {
if (topaddr + nlines * 16 > maxaddr) if (topaddr + nlines * 16 > maxaddr)
topaddr = maxaddr - nlines * 16 + 1; topaddr = maxaddr - nlines * 16 + 1;
@ -889,6 +893,7 @@ void PixView::SetSel(int x, int y, bool desel_cview_update)
void PixView::Redraw(wxPaintEvent& ev) void PixView::Redraw(wxPaintEvent& ev)
{ {
(void)ev; // unused params
if (!bm) if (!bm)
return; return;
@ -988,6 +993,7 @@ void PixViewEvt::click()
IMPLEMENT_DYNAMIC_CLASS(GfxPanel, wxPanel) IMPLEMENT_DYNAMIC_CLASS(GfxPanel, wxPanel)
void GfxPanel::DrawBitmap(wxPaintEvent& ev) void GfxPanel::DrawBitmap(wxPaintEvent& ev)
{ {
(void)ev; // unused params
if (!bm) if (!bm)
return; return;
@ -1122,6 +1128,7 @@ void GfxViewer::BMPSize(int w, int h)
void GfxViewer::StretchTog(wxCommandEvent& ev) void GfxViewer::StretchTog(wxCommandEvent& ev)
{ {
(void)ev; // unused params
wxSize sz; wxSize sz;
if (str->GetValue()) { if (str->GetValue()) {
@ -1138,6 +1145,7 @@ void GfxViewer::StretchTog(wxCommandEvent& ev)
void GfxViewer::SaveBMP(wxCommandEvent& ev) void GfxViewer::SaveBMP(wxCommandEvent& ev)
{ {
(void)ev; // unused params
GameArea* panel = wxGetApp().frame->GetPanel(); GameArea* panel = wxGetApp().frame->GetPanel();
bmp_save_dir = wxGetApp().frame->GetGamePath(gopts.scrshot_dir); bmp_save_dir = wxGetApp().frame->GetGamePath(gopts.scrshot_dir);
// no attempt is made here to translate the dialog type name // no attempt is made here to translate the dialog type name
@ -1175,6 +1183,7 @@ void GfxViewer::SaveBMP(wxCommandEvent& ev)
void GfxViewer::RefreshEv(wxCommandEvent& ev) void GfxViewer::RefreshEv(wxCommandEvent& ev)
{ {
(void)ev; // unused params
Update(); Update();
} }

View File

@ -58,7 +58,7 @@ protected:
// on errors, abort program // on errors, abort program
#define baddialog() \ #define baddialog() \
do { \ do { \
wxLogError(_("Unable to load dialog %s from resources"), dname); \ wxLogError(_("Unable to load dialog %s from resources"), dname.c_str()); \
wxGetApp().frame->Close(true); \ wxGetApp().frame->Close(true); \
return; \ return; \
} while (0) } while (0)
@ -141,6 +141,7 @@ protected:
// assigned to textctrl to avoid mouse input // assigned to textctrl to avoid mouse input
void MouseEvent(wxMouseEvent& ev) void MouseEvent(wxMouseEvent& ev)
{ {
(void)ev; // unused param
} }
// the subwidgets // the subwidgets
wxTextCtrl tc; wxTextCtrl tc;
@ -412,6 +413,7 @@ public:
} }
void MouseEvent(wxMouseEvent& ev) void MouseEvent(wxMouseEvent& ev)
{ {
(void)ev; // unused param
} }
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
DECLARE_DYNAMIC_CLASS(DispCheckBox) DECLARE_DYNAMIC_CLASS(DispCheckBox)

View File

@ -8,6 +8,13 @@ BEGIN_EVENT_TABLE(wxJoyKeyTextCtrl, wxKeyTextCtrl)
EVT_SDLJOY(wxJoyKeyTextCtrl::OnJoy) EVT_SDLJOY(wxJoyKeyTextCtrl::OnJoy)
END_EVENT_TABLE() END_EVENT_TABLE()
// Initializer for struct wxJoyKeyBinding
wxJoyKeyBinding newWxJoyKeyBinding(int key, int mod, int joy)
{
struct wxJoyKeyBinding tmp = {key, mod, joy};
return tmp;
}
int wxJoyKeyTextCtrl::DigitalButton(wxSDLJoyEvent& event) int wxJoyKeyTextCtrl::DigitalButton(wxSDLJoyEvent& event)
{ {
int sdlval = event.GetControlValue(); int sdlval = event.GetControlValue();
@ -151,7 +158,7 @@ wxString wxJoyKeyTextCtrl::ToString(wxJoyKeyBinding_v keys, wxChar sep)
{ {
wxString ret; wxString ret;
for (int i = 0; i < keys.size(); i++) { for (size_t i = 0; i < keys.size(); i++) {
if (i > 0) if (i > 0)
ret += sep; ret += sep;
@ -213,7 +220,7 @@ static bool ParseJoy(const wxString& s, int len, int& mod, int& key, int& joy)
return false; return false;
const wxString p = s.Mid(l); const wxString p = s.Mid(l);
int alen = len - l; size_t alen = len - l;
joyre.GetMatch(&b, &l, 1); joyre.GetMatch(&b, &l, 1);
joy = simple_atoi(s.Mid(b), l); joy = simple_atoi(s.Mid(b), l);
#define is_ctrl(re) re.Matches(p) && re.GetMatch(&b, &l) && l == alen && !b #define is_ctrl(re) re.Matches(p) && re.GetMatch(&b, &l) && l == alen && !b
@ -268,12 +275,12 @@ wxJoyKeyBinding_v wxJoyKeyTextCtrl::FromString(const wxString& s, wxChar sep)
{ {
wxJoyKeyBinding_v ret, empty; wxJoyKeyBinding_v ret, empty;
int mod, key, joy; int mod, key, joy;
int len = s.size(); size_t len = s.size();
if (!len) if (!len)
return empty; return empty;
for (int lastkey = len - 1; (lastkey = s.rfind(sep, lastkey)) != wxString::npos; lastkey--) { for (size_t lastkey = len - 1; (lastkey = s.rfind(sep, lastkey)) != wxString::npos; lastkey--) {
if (lastkey == len - 1) { if (lastkey == len - 1) {
// sep as accel // sep as accel
if (!lastkey) if (!lastkey)

View File

@ -16,6 +16,7 @@ void wxKeyTextCtrl::OnKeyDown(wxKeyEvent& event)
void wxKeyTextCtrl::OnKeyUp(wxKeyEvent& event) void wxKeyTextCtrl::OnKeyUp(wxKeyEvent& event)
{ {
(void)event; // unused param
int mod = lastmod; int mod = lastmod;
int key = lastkey; int key = lastkey;
lastmod = lastkey = 0; lastmod = lastkey = 0;
@ -30,7 +31,7 @@ void wxKeyTextCtrl::OnKeyUp(wxKeyEvent& event)
// if blank or backspace is modified, add normally instead // if blank or backspace is modified, add normally instead
if (clearable && !mod && key == WXK_BACK && !GetValue().empty()) { if (clearable && !mod && key == WXK_BACK && !GetValue().empty()) {
wxString val = GetValue(); wxString val = GetValue();
int lastkey = val.rfind(multikey); size_t lastkey = val.rfind(multikey);
if (lastkey && lastkey != wxString::npos) { if (lastkey && lastkey != wxString::npos) {
// if this was actually a ,-accel, delete instead // if this was actually a ,-accel, delete instead
@ -79,7 +80,7 @@ wxString wxKeyTextCtrl::ToString(int mod, int key)
wxString s = ae.ToString(); wxString s = ae.ToString();
if (char_override || mod_override) { if (char_override || mod_override) {
int l = s.rfind(wxT('-')); size_t l = s.rfind(wxT('-'));
if (l == wxString::npos) if (l == wxString::npos)
l = 0; l = 0;
@ -150,7 +151,7 @@ wxString wxKeyTextCtrl::ToString(wxAcceleratorEntry_v keys, wxChar sep)
{ {
wxString ret; wxString ret;
for (int i = 0; i < keys.size(); i++) { for (size_t i = 0; i < keys.size(); i++) {
if (i > 0) if (i > 0)
ret += sep; ret += sep;
@ -176,16 +177,16 @@ bool wxKeyTextCtrl::ParseString(const wxString& s, int len, int& mod, int& key)
a.Append(s.Left(len)); a.Append(s.Left(len));
wxAcceleratorEntry ae; wxAcceleratorEntry ae;
#ifndef __WXMAC__ #ifndef __WXMAC__
#define check_meta(str) \ #define check_meta(str) \
do { \ do { \
wxString meta = str; \ wxString meta = str; \
for (int ml = 0; (ml = a.find(meta, ml)) != wxString::npos; ml++) { \ for (size_t ml = 0; (ml = a.find(meta, ml)) != wxString::npos; ml++) { \
if (!ml || a[ml - 1] == wxT('-') || a[ml - 1] == wxT('+')) { \ if (!ml || a[ml - 1] == wxT('-') || a[ml - 1] == wxT('+')) { \
mod |= wxMOD_META; \ mod |= wxMOD_META; \
a.erase(ml, meta.size()); \ a.erase(ml, meta.size()); \
ml = -1; \ ml = -1; \
} \ } \
} \ } \
} while (0) } while (0)
check_meta(wxT("Meta-")); check_meta(wxT("Meta-"));
check_meta(wxT("Meta+")); check_meta(wxT("Meta+"));
@ -252,9 +253,9 @@ wxAcceleratorEntry_v wxKeyTextCtrl::FromString(const wxString& s, wxChar sep)
{ {
wxAcceleratorEntry_v ret, empty; wxAcceleratorEntry_v ret, empty;
int mod, key; int mod, key;
int len = s.size(); size_t len = s.size();
for (int lastkey = len - 1; (lastkey = s.rfind(sep, lastkey)) != wxString::npos; lastkey--) { for (size_t lastkey = len - 1; (lastkey = s.rfind(sep, lastkey)) != wxString::npos; lastkey--) {
if (lastkey == len - 1) { if (lastkey == len - 1) {
// sep as accel // sep as accel
if (!lastkey) if (!lastkey)

View File

@ -14,13 +14,19 @@ struct wxSDLJoyState {
if (dev) if (dev)
SDL_JoystickClose(dev); SDL_JoystickClose(dev);
} }
wxSDLJoyState()
{
dev = NULL;
nax = nhat = nbut = 0;
curval = NULL;
}
}; };
wxSDLJoy::wxSDLJoy(bool analog) wxSDLJoy::wxSDLJoy(bool analog)
: wxTimer() : wxTimer()
, digital(!analog) , digital(!analog)
, evthandler(0)
, joystate(0) , joystate(0)
, evthandler(0)
, nosticks(true) , nosticks(true)
{ {
// Start up joystick if not already started // Start up joystick if not already started
@ -36,8 +42,7 @@ wxSDLJoy::wxSDLJoy(bool analog)
if (!njoy) if (!njoy)
return; return;
joystate = new wxSDLJoyState_t[njoy]; joystate = new wxSDLJoyState[njoy];
memset(joystate, 0, njoy * sizeof(*joystate));
for (int i = 0; i < njoy; i++) { for (int i = 0; i < njoy; i++) {
SDL_Joystick* dev = joystate[i].dev = SDL_JoystickOpen(i); SDL_Joystick* dev = joystate[i].dev = SDL_JoystickOpen(i);
@ -45,7 +50,17 @@ wxSDLJoy::wxSDLJoy(bool analog)
nctrl += joystate[i].nax = SDL_JoystickNumAxes(dev); nctrl += joystate[i].nax = SDL_JoystickNumAxes(dev);
nctrl += joystate[i].nhat = SDL_JoystickNumHats(dev); nctrl += joystate[i].nhat = SDL_JoystickNumHats(dev);
nctrl += joystate[i].nbut = SDL_JoystickNumButtons(dev); nctrl += joystate[i].nbut = SDL_JoystickNumButtons(dev);
joystate[i].curval = new short[nctrl]; joystate[i].curval = new short[nctrl]{0};
// initialize axis previous value to initial state
#if SDL_VERSION_ATLEAST(2, 0, 6)
for (int j = 0; j < joystate[i].nax; j++) {
int16_t initial_state = 0;
SDL_JoystickGetAxisInitialState(dev, j, &initial_state);
joystate[i].curval[j] = initial_state;
}
#endif
memset(joystate[i].curval, 0, sizeof(short) * nctrl); memset(joystate[i].curval, 0, sizeof(short) * nctrl);
} }
} }
@ -134,13 +149,6 @@ void wxSDLJoy::Notify()
for (int j = 0; j < nax; j++) { for (int j = 0; j < nax; j++) {
val = SDL_JoystickGetAxis(dev, j); val = SDL_JoystickGetAxis(dev, j);
// trigger axes always return max negative value, we ignore these
#if SDL_VERSION_ATLEAST(2, 0, 6)
int16_t initial_state;
if (SDL_JoystickGetAxisInitialState(dev, j, &initial_state) && val == initial_state)
continue;
#endif
if (digital) { if (digital) {
if (val > 0x3fff) if (val > 0x3fff)
val = 0x7fff; val = 0x7fff;

View File

@ -15,6 +15,9 @@ typedef struct wxJoyKeyBinding {
// if joy is non-0, key = control number, and mod = control type // if joy is non-0, key = control number, and mod = control type
} wxJoyKeyBinding; } wxJoyKeyBinding;
// Initializer for struct wxJoyKeyBinding
wxJoyKeyBinding newWxJoyKeyBinding(int key = 0, int mod = 0, int joy = 0);
typedef std::vector<wxJoyKeyBinding> wxJoyKeyBinding_v; typedef std::vector<wxJoyKeyBinding> wxJoyKeyBinding_v;
// joystick control types // joystick control types
@ -87,6 +90,7 @@ public:
bool TransferFromWindow(); bool TransferFromWindow();
bool Validate(wxWindow* p) bool Validate(wxWindow* p)
{ {
(void)p; // unused params
return true; return true;
} }

View File

@ -99,6 +99,7 @@ public:
bool TransferFromWindow(); bool TransferFromWindow();
bool Validate(wxWindow* p) bool Validate(wxWindow* p)
{ {
(void)p; // unused params
return true; return true;
} }

View File

@ -13,7 +13,7 @@
#include <wx/event.h> #include <wx/event.h>
#include <wx/timer.h> #include <wx/timer.h>
typedef struct wxSDLJoyState wxSDLJoyState_t; struct wxSDLJoyState;
class wxSDLJoy : public wxTimer { class wxSDLJoy : public wxTimer {
public: public:
@ -61,7 +61,7 @@ public:
protected: protected:
bool digital; bool digital;
int njoy; int njoy;
wxSDLJoyState_t* joystate; wxSDLJoyState* joystate;
wxEvtHandler* evthandler; wxEvtHandler* evthandler;
bool nosticks; bool nosticks;
void Notify(); void Notify();

View File

@ -33,16 +33,16 @@ class wxBoolIntValidator : public wxValidator {
public: public:
wxBoolIntValidator(int* _vptr, int _val, int _mask = ~0) wxBoolIntValidator(int* _vptr, int _val, int _mask = ~0)
: wxValidator() : wxValidator()
, vptr(_vptr)
, val(_val) , val(_val)
, mask(_mask) , mask(_mask)
, vptr(_vptr)
{ {
} }
wxBoolIntValidator(const wxBoolIntValidator& v) wxBoolIntValidator(const wxBoolIntValidator& v)
: wxValidator() : wxValidator()
, vptr(v.vptr)
, val(v.val) , val(v.val)
, mask(v.mask) , mask(v.mask)
, vptr(v.vptr)
{ {
} }
wxObject* Clone() const wxObject* Clone() const
@ -53,6 +53,7 @@ public:
bool TransferFromWindow(); bool TransferFromWindow();
bool Validate(wxWindow* p) bool Validate(wxWindow* p)
{ {
(void)p; // unused params
return true; return true;
} }
@ -105,6 +106,7 @@ public:
bool TransferFromWindow(); bool TransferFromWindow();
bool Validate(wxWindow* p) bool Validate(wxWindow* p)
{ {
(void)p; // unused params
return true; return true;
} }
@ -133,6 +135,7 @@ public:
bool TransferFromWindow(); bool TransferFromWindow();
bool Validate(wxWindow* p) bool Validate(wxWindow* p)
{ {
(void)p; // unused params
return true; return true;
} }
@ -156,8 +159,8 @@ public:
} }
wxColorValidator(uint16_t* vptr) wxColorValidator(uint16_t* vptr)
: wxValidator() : wxValidator()
, ptr16(vptr)
, ptr32(0) , ptr32(0)
, ptr16(vptr)
{ {
} }
wxColorValidator(const wxColorValidator& v) wxColorValidator(const wxColorValidator& v)
@ -174,6 +177,7 @@ public:
bool TransferFromWindow(); bool TransferFromWindow();
bool Validate(wxWindow* p) bool Validate(wxWindow* p)
{ {
(void)p; // unused params
return true; return true;
} }

View File

@ -289,7 +289,7 @@ bool wxColorValidator::TransferFromWindow()
static void enable(wxWindow_v controls, std::vector<int> reverse, bool en) static void enable(wxWindow_v controls, std::vector<int> reverse, bool en)
{ {
for (int i = 0; i < controls.size(); i++) for (size_t i = 0; i < controls.size(); i++)
controls[i]->Enable(reverse.size() <= i || !reverse[i] ? en : !en); controls[i]->Enable(reverse.size() <= i || !reverse[i] ? en : !en);
} }
@ -461,6 +461,7 @@ bool wxUIntValidator::TransferFromWindow()
bool wxUIntValidator::Validate(wxWindow* parent) bool wxUIntValidator::Validate(wxWindow* parent)
{ {
(void)parent; // unused params
wxSpinCtrl* ctrl = wxDynamicCast(GetWindow(), wxSpinCtrl); wxSpinCtrl* ctrl = wxDynamicCast(GetWindow(), wxSpinCtrl);
if (ctrl) { if (ctrl) {

View File

@ -32,24 +32,12 @@
IMPLEMENT_APP(wxvbamApp) IMPLEMENT_APP(wxvbamApp)
IMPLEMENT_DYNAMIC_CLASS(MainFrame, wxFrame) IMPLEMENT_DYNAMIC_CLASS(MainFrame, wxFrame)
// Get XDG_CONFIG_HOME dir manually // Initializer for struct cmditem
// only native support for XDG config when wxWidgets >= 3.1 cmditem new_cmditem(const wxString cmd, const wxString name, int cmd_id,
static wxString get_xdg_user_config_home() int mask_flags, wxMenuItem* mi)
{ {
wxString path; struct cmditem tmp = {cmd, name, cmd_id, mask_flags, mi};
char *xdg_config_home = getenv("XDG_CONFIG_HOME"); return tmp;
// Default for XDG_CONFIG_HOME is '$HOME/.config'
if (!xdg_config_home || !*xdg_config_home)
{
wxString xdg_default(getenv("HOME"));
xdg_default += "/.config";
path = xdg_default;
}
else
{
path = xdg_config_home;
}
return path + "/";
} }
// generate config file path // generate config file path
@ -68,38 +56,48 @@ static void get_config_path(wxPathList& path, bool exists = true)
if ((wxDirExists(s) && wxIsWritable(s)) || ((!exists || !wxDirExists(s)) && parent.IsDirWritable())) \ if ((wxDirExists(s) && wxIsWritable(s)) || ((!exists || !wxDirExists(s)) && parent.IsDirWritable())) \
path.Add(s); \ path.Add(s); \
} while (0) } while (0)
#define add_nonstandard_path(p) \
do { \
const wxString& s = p; \
wxFileName parent = wxFileName::DirName(s + wxT("//..")); \
parent.MakeAbsolute(); \
if ((wxDirExists(s) && wxIsWritable(s)) || ((!exists || !wxDirExists(s)) && parent.IsDirWritable())) \
path.Add(s); \
} while (0)
static bool debug_dumped = false; static bool debug_dumped = false;
if (!debug_dumped) { if (!debug_dumped) {
wxLogDebug(wxT("GetUserLocalDataDir(): %s"), stdp.GetUserLocalDataDir().mb_str()); wxLogDebug(wxT("GetUserLocalDataDir(): %s"), stdp.GetUserLocalDataDir().c_str());
wxLogDebug(wxT("GetUserDataDir(): %s"), stdp.GetUserDataDir().mb_str()); wxLogDebug(wxT("GetUserDataDir(): %s"), stdp.GetUserDataDir().c_str());
wxLogDebug(wxT("GetLocalizedResourcesDir(wxGetApp().locale.GetCanonicalName()): %s"), stdp.GetLocalizedResourcesDir(wxGetApp().locale.GetCanonicalName()).mb_str()); wxLogDebug(wxT("GetLocalizedResourcesDir(wxGetApp().locale.GetCanonicalName()): %s"), stdp.GetLocalizedResourcesDir(wxGetApp().locale.GetCanonicalName()).c_str());
wxLogDebug(wxT("GetResourcesDir(): %s"), stdp.GetResourcesDir().mb_str()); wxLogDebug(wxT("GetResourcesDir(): %s"), stdp.GetResourcesDir().c_str());
wxLogDebug(wxT("GetDataDir(): %s"), stdp.GetDataDir().mb_str()); wxLogDebug(wxT("GetDataDir(): %s"), stdp.GetDataDir().c_str());
wxLogDebug(wxT("GetLocalDataDir(): %s"), stdp.GetLocalDataDir().mb_str()); wxLogDebug(wxT("GetLocalDataDir(): %s"), stdp.GetLocalDataDir().c_str());
wxLogDebug(wxT("GetPluginsDir(): %s"), stdp.GetPluginsDir().mb_str()); wxLogDebug(wxT("plugins_dir: %s"), wxGetApp().GetPluginsDir().c_str());
#if defined(__LINUX__) wxLogDebug(wxT("XdgConfigDir: %s"), (wxString(get_xdg_user_config_home().c_str(), wxConvLibc) + current_app_name).c_str());
wxLogDebug(wxT("XdgConfigDir: %s"), get_xdg_user_config_home() + current_app_name);
#endif
debug_dumped = true; debug_dumped = true;
} }
// When native support for XDG dirs is available (wxWidgets >= 3.1), // When native support for XDG dirs is available (wxWidgets >= 3.1),
// this will be no longer necessary // this will be no longer necessary
#if defined(__LINUX__) #if defined(__WXGTK__)
// XDG spec manual support // XDG spec manual support
// ${XDG_CONFIG_HOME:-$HOME/.config}/`appname` // ${XDG_CONFIG_HOME:-$HOME/.config}/`appname`
wxString old_config = wxString(getenv("HOME")) + "/.vbam"; wxString old_config = wxString(getenv("HOME"), wxConvLibc) + wxT(FILE_SEP) + wxT(".vbam");
wxString new_config = get_xdg_user_config_home(); wxString new_config(get_xdg_user_config_home().c_str(), wxConvLibc);
if (!wxDirExists(old_config) && wxIsWritable(new_config)) if (!wxDirExists(old_config) && wxIsWritable(new_config))
{ {
path.Add(new_config + current_app_name); wxFileName new_path(new_config, wxEmptyString);
new_path.AppendDir(current_app_name);
new_path.MakeAbsolute();
add_nonstandard_path(new_path.GetFullPath());
} }
else else
{ {
// config is in $HOME/.vbam/vbam.conf // config is in $HOME/.vbam/
path.Add(old_config); add_nonstandard_path(old_config);
} }
#endif #endif
@ -110,7 +108,7 @@ static void get_config_path(wxPathList& path, bool exists = true)
add_path(GetResourcesDir()); add_path(GetResourcesDir());
add_path(GetDataDir()); add_path(GetDataDir());
add_path(GetLocalDataDir()); add_path(GetLocalDataDir());
add_path(GetPluginsDir()); add_nonstandard_path(wxGetApp().GetPluginsDir());
} }
static void tack_full_path(wxString& s, const wxString& app = wxEmptyString) static void tack_full_path(wxString& s, const wxString& app = wxEmptyString)
@ -119,17 +117,18 @@ static void tack_full_path(wxString& s, const wxString& app = wxEmptyString)
wxPathList full_config_path; wxPathList full_config_path;
get_config_path(full_config_path, false); get_config_path(full_config_path, false);
for (int i = 0; i < full_config_path.size(); i++) for (size_t i = 0; i < full_config_path.size(); i++)
s += wxT("\n\t") + full_config_path[i] + app; s += wxT("\n\t") + full_config_path[i] + app;
} }
const wxString wxvbamApp::GetPluginsDir()
{
return wxStandardPaths::Get().GetPluginsDir();
}
wxString wxvbamApp::GetConfigurationPath() wxString wxvbamApp::GetConfigurationPath()
{ {
#if defined(__WXMSW__) || defined(__APPLE__) wxString config(wxT("vbam.ini"));
wxString config("vbam.ini");
#else
wxString config("vbam.conf");
#endif
// first check if config files exists in reverse order // first check if config files exists in reverse order
// (from system paths to more local paths.) // (from system paths to more local paths.)
if (data_path.empty()) { if (data_path.empty()) {
@ -149,7 +148,7 @@ wxString wxvbamApp::GetConfigurationPath()
// dir or parent to create it in in OnInit in normal order // dir or parent to create it in in OnInit in normal order
// (from user paths to system paths.) // (from user paths to system paths.)
if (data_path.empty()) { if (data_path.empty()) {
for (int i = 0; i < config_path.size(); i++) { for (size_t i = 0; i < config_path.size(); i++) {
// Check if path is writeable // Check if path is writeable
if (wxIsWritable(config_path[i])) { if (wxIsWritable(config_path[i])) {
data_path = config_path[i]; data_path = config_path[i];
@ -215,6 +214,9 @@ bool wxvbamApp::OnInit()
if (!wxApp::OnInit()) if (!wxApp::OnInit())
return false; return false;
if (console_mode)
return true;
// prepare for loading xrc files // prepare for loading xrc files
wxXmlResource* xr = wxXmlResource::Get(); wxXmlResource* xr = wxXmlResource::Get();
// note: if linking statically, next 2 pull in lot of unused code // note: if linking statically, next 2 pull in lot of unused code
@ -227,7 +229,7 @@ bool wxvbamApp::OnInit()
// 2.9 has LoadAllFiles(), but this is 2.8, so we'll do it manually // 2.9 has LoadAllFiles(), but this is 2.8, so we'll do it manually
wxString cwd = wxGetCwd(); wxString cwd = wxGetCwd();
for (int i = 0; i < config_path.size(); i++) for (size_t i = 0; i < config_path.size(); i++)
if (wxDirExists(config_path[i]) && wxSetWorkingDirectory(config_path[i])) { if (wxDirExists(config_path[i]) && wxSetWorkingDirectory(config_path[i])) {
// *.xr[cs] doesn't work (double the number of scans) // *.xr[cs] doesn't work (double the number of scans)
// 2.9 gives errors for no files found, so manual precheck needed // 2.9 gives errors for no files found, so manual precheck needed
@ -253,12 +255,22 @@ bool wxvbamApp::OnInit()
// this needs to be in a subdir to support other config as well // this needs to be in a subdir to support other config as well
// but subdir flag behaves differently 2.8 vs. 2.9. Oh well. // but subdir flag behaves differently 2.8 vs. 2.9. Oh well.
// NOTE: this does not support XDG (freedesktop.org) paths // NOTE: this does not support XDG (freedesktop.org) paths
#if defined(__WXMSW__) || defined(__APPLE__) wxString confname(wxT("vbam.ini"));
wxString confname("vbam.ini");
#else
wxString confname("vbam.conf");
#endif
wxFileName vbamconf(GetConfigurationPath(), confname); wxFileName vbamconf(GetConfigurationPath(), confname);
// /MIGRATION
// migrate from 'vbam.{cfg,conf}' to 'vbam.ini' to manage a single config
// file for all platforms.
#if !defined(__WXMSW__) && !defined(__APPLE__)
wxString oldConf(GetConfigurationPath() + wxT(FILE_SEP) + wxT("vbam.conf"));
#else
wxString oldConf(GetConfigurationPath() + wxT(FILE_SEP) + wxT("vbam.cfg"));
#endif
wxString newConf(GetConfigurationPath() + wxT(FILE_SEP) + wxT("vbam.ini"));
if (wxFileExists(oldConf))
{
wxRenameFile(oldConf, newConf, false);
}
// /END_MIGRATION
cfg = new wxFileConfig(wxT("vbam"), wxEmptyString, cfg = new wxFileConfig(wxT("vbam"), wxEmptyString,
vbamconf.GetFullPath(), vbamconf.GetFullPath(),
wxEmptyString, wxCONFIG_USE_LOCAL_FILE); wxEmptyString, wxCONFIG_USE_LOCAL_FILE);
@ -295,7 +307,7 @@ bool wxvbamApp::OnInit()
} }
// process command-line options // process command-line options
for (int i = 0; i < pending_optset.size(); i++) { for (size_t i = 0; i < pending_optset.size(); i++) {
auto parts = str_split(pending_optset[i], wxT('=')); auto parts = str_split(pending_optset[i], wxT('='));
opt_set(parts[0], parts[1]); opt_set(parts[0], parts[1]);
} }
@ -395,6 +407,11 @@ bool wxvbamApp::OnInit()
} }
// create the main window // create the main window
int x = windowPositionX;
int y = windowPositionY;
int width = windowWidth;
int height = windowHeight;
int isFullscreen = fullScreen;
frame = wxDynamicCast(xr->LoadFrame(NULL, wxT("MainFrame")), MainFrame); frame = wxDynamicCast(xr->LoadFrame(NULL, wxT("MainFrame")), MainFrame);
if (!frame) { if (!frame) {
@ -406,10 +423,43 @@ bool wxvbamApp::OnInit()
if (!frame->BindControls()) if (!frame->BindControls())
return false; return false;
if (x >= 0 && y >= 0 && width > 0 && height > 0)
frame->SetSize(x, y, width, height);
if (isFullscreen && wxGetApp().pending_load != wxEmptyString)
frame->ShowFullScreen(isFullscreen);
frame->Show(true); frame->Show(true);
return true; return true;
} }
int wxvbamApp::OnRun()
{
if (console_mode)
{
// we could check for our own error codes here...
return console_status;
}
else
{
return wxApp::OnRun();
}
}
bool wxvbamApp::OnCmdLineHelp(wxCmdLineParser& parser)
{
wxApp::OnCmdLineHelp(parser);
console_mode = true;
return true;
}
bool wxvbamApp::OnCmdLineError(wxCmdLineParser& parser)
{
wxApp::OnCmdLineError(parser);
console_mode = true;
console_status = 1;
return true;
}
void wxvbamApp::OnInitCmdLine(wxCmdLineParser& cl) void wxvbamApp::OnInitCmdLine(wxCmdLineParser& cl)
{ {
wxApp::OnInitCmdLine(cl); wxApp::OnInitCmdLine(cl);
@ -428,28 +478,33 @@ void wxvbamApp::OnInitCmdLine(wxCmdLineParser& cl)
// locale // locale
static wxCmdLineEntryDesc opttab[] = { static wxCmdLineEntryDesc opttab[] = {
{ wxCMD_LINE_OPTION, NULL, t("save-xrc"), { wxCMD_LINE_OPTION, NULL, t("save-xrc"),
N_("Save built-in XRC file and exit") }, N_("Save built-in XRC file and exit"),
wxCMD_LINE_VAL_NONE, wxCMD_LINE_VAL_NONE },
{ wxCMD_LINE_OPTION, NULL, t("save-over"), { wxCMD_LINE_OPTION, NULL, t("save-over"),
N_("Save built-in vba-over.ini and exit") }, N_("Save built-in vba-over.ini and exit"),
wxCMD_LINE_VAL_NONE, wxCMD_LINE_VAL_NONE },
{ wxCMD_LINE_SWITCH, NULL, t("print-cfg-path"), { wxCMD_LINE_SWITCH, NULL, t("print-cfg-path"),
N_("Print configuration path and exit") }, N_("Print configuration path and exit"),
wxCMD_LINE_VAL_NONE, wxCMD_LINE_VAL_NONE },
{ wxCMD_LINE_SWITCH, t("f"), t("fullscreen"), { wxCMD_LINE_SWITCH, t("f"), t("fullscreen"),
N_("Start in full-screen mode") }, N_("Start in full-screen mode"),
wxCMD_LINE_VAL_NONE, wxCMD_LINE_VAL_NONE },
#if !defined(NO_LINK) && !defined(__WXMSW__) #if !defined(NO_LINK) && !defined(__WXMSW__)
{ wxCMD_LINE_SWITCH, t("s"), t("delete-shared-state"), { wxCMD_LINE_SWITCH, t("s"), t("delete-shared-state"),
N_("Delete shared link state first, if it exists") }, N_("Delete shared link state first, if it exists"),
wxCMD_LINE_VAL_NONE, wxCMD_LINE_VAL_NONE },
#endif #endif
// stupid wx cmd line parser doesn't support duplicate options // stupid wx cmd line parser doesn't support duplicate options
// { wxCMD_LINE_OPTION, t("o"), t("option"), // { wxCMD_LINE_OPTION, t("o"), t("option"),
// _("Set configuration option; <opt>=<value> or help for list"), // _("Set configuration option; <opt>=<value> or help for list"),
{ { wxCMD_LINE_SWITCH, t("o"), t("list-options"),
wxCMD_LINE_SWITCH, t("o"), t("list-options"), N_("List all settable options and exit"),
N_("List all settable options and exit") }, wxCMD_LINE_VAL_NONE, wxCMD_LINE_VAL_NONE },
{ wxCMD_LINE_PARAM, NULL, NULL, { wxCMD_LINE_PARAM, NULL, NULL,
N_("ROM file"), wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL }, N_("ROM file"), wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL },
{ wxCMD_LINE_PARAM, NULL, NULL, { wxCMD_LINE_PARAM, NULL, NULL,
N_("<config>=<value>"), wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_MULTIPLE | wxCMD_LINE_PARAM_OPTIONAL }, N_("<config>=<value>"), wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_MULTIPLE | wxCMD_LINE_PARAM_OPTIONAL },
{ wxCMD_LINE_NONE } { wxCMD_LINE_NONE, NULL, NULL, NULL, wxCMD_LINE_VAL_NONE, wxCMD_LINE_VAL_NONE }
}; };
// 2.9 automatically translates desc, but 2.8 doesn't // 2.9 automatically translates desc, but 2.8 doesn't
#if !wxCHECK_VERSION(2, 9, 0) #if !wxCHECK_VERSION(2, 9, 0)
@ -491,10 +546,11 @@ bool wxvbamApp::OnCmdLineParsed(wxCmdLineParser& cl)
"To override, remove all but changed root node(s). " "To override, remove all but changed root node(s). "
"First found root node of correct name in any .xrc or " "First found root node of correct name in any .xrc or "
".xrs files in following search path overrides built-in:"), ".xrs files in following search path overrides built-in:"),
s.mb_str()); s.c_str());
tack_full_path(lm); tack_full_path(lm);
wxLogMessage(lm); wxLogMessage(lm);
return false; console_mode = true;
return true;
} }
if (cl.Found(wxT("print-cfg-path"))) { if (cl.Found(wxT("print-cfg-path"))) {
@ -504,7 +560,8 @@ bool wxvbamApp::OnCmdLineParsed(wxCmdLineParser& cl)
wxString lm(_("Configuration is read from, in order:")); wxString lm(_("Configuration is read from, in order:"));
tack_full_path(lm); tack_full_path(lm);
wxLogMessage(lm); wxLogMessage(lm);
return false; console_mode = true;
return true;
} }
if (cl.Found(wxT("save-over"), &s)) { if (cl.Found(wxT("save-over"), &s)) {
@ -516,13 +573,14 @@ bool wxvbamApp::OnCmdLineParsed(wxCmdLineParser& cl)
wxString lm; wxString lm;
lm.Printf(_("Wrote built-in override file to %s\n" lm.Printf(_("Wrote built-in override file to %s\n"
"To override, delete all but changed section. First found section is used from search path:"), "To override, delete all but changed section. First found section is used from search path:"),
s.mb_str()); s.c_str());
wxString oi = wxFileName::GetPathSeparator(); wxString oi = wxFileName::GetPathSeparator();
oi += wxT("vba-over.ini"); oi += wxT("vba-over.ini");
tack_full_path(lm, oi); tack_full_path(lm, oi);
lm.append(_("\n\tbuilt-in")); lm.append(_("\n\tbuilt-in"));
wxLogMessage(lm); wxLogMessage(lm);
return false; console_mode = true;
return true;
} }
if (cl.Found(wxT("f"))) { if (cl.Found(wxT("f"))) {
@ -535,17 +593,17 @@ bool wxvbamApp::OnCmdLineParsed(wxCmdLineParser& cl)
"For flag options, true and false are specified as 1 and 0, respectively.\n\n")); "For flag options, true and false are specified as 1 and 0, respectively.\n\n"));
for (int i = 0; i < num_opts; i++) { for (int i = 0; i < num_opts; i++) {
wxPrintf(wxT("%s (%s"), opts[i].opt, wxPrintf(wxT("%s (%s"), opts[i].opt.c_str(),
opts[i].boolopt ? wxT("flag") : opts[i].stropt ? wxT("string") : !opts[i].enumvals.empty() ? opts[i].enumvals : (wxString)(opts[i].intopt ? wxT("int") : opts[i].doubleopt ? wxT("decimal") : wxT("string"))); opts[i].boolopt ? wxT("flag") : opts[i].stropt ? wxT("string") : !opts[i].enumvals.empty() ? opts[i].enumvals.c_str() : (opts[i].intopt ? wxT("int") : opts[i].doubleopt ? wxT("decimal") : wxT("string")));
if (!opts[i].enumvals.empty()) { if (!opts[i].enumvals.empty()) {
const wxString evx = wxGetTranslation(opts[i].enumvals); const wxString evx = wxGetTranslation(opts[i].enumvals);
if (wxStrcmp(evx, opts[i].enumvals)) if (wxStrcmp(evx, opts[i].enumvals))
wxPrintf(wxT(" = %s"), evx); wxPrintf(wxT(" = %s"), evx.c_str());
} }
wxPrintf(wxT(")\n\t%s\n\n"), opts[i].desc); wxPrintf(wxT(")\n\t%s\n\n"), opts[i].desc.c_str());
if (!opts[i].enumvals.empty()) if (!opts[i].enumvals.empty())
opts[i].enumvals = wxGetTranslation(opts[i].enumvals); opts[i].enumvals = wxGetTranslation(opts[i].enumvals);
@ -554,9 +612,10 @@ bool wxvbamApp::OnCmdLineParsed(wxCmdLineParser& cl)
wxPrintf(_("The commands available for the Keyboard/* option are:\n\n")); wxPrintf(_("The commands available for the Keyboard/* option are:\n\n"));
for (int i = 0; i < ncmds; i++) for (int i = 0; i < ncmds; i++)
wxPrintf(wxT("%s (%s)\n"), cmdtab[i].cmd, cmdtab[i].name); wxPrintf(wxT("%s (%s)\n"), cmdtab[i].cmd.c_str(), cmdtab[i].name.c_str());
return false; console_mode = true;
return true;
} }
#if !defined(NO_LINK) && !defined(__WXMSW__) #if !defined(NO_LINK) && !defined(__WXMSW__)
@ -585,11 +644,11 @@ bool wxvbamApp::OnCmdLineParsed(wxCmdLineParser& cl)
} else { } else {
if (!complained) { if (!complained) {
wxFprintf(stderr, _("Bad configuration option or multiple ROM files given:\n")); wxFprintf(stderr, _("Bad configuration option or multiple ROM files given:\n"));
wxFprintf(stderr, wxT("%s\n"), pending_load.mb_str()); wxFprintf(stderr, wxT("%s\n"), pending_load.c_str());
complained = true; complained = true;
} }
wxFprintf(stderr, wxT("%s\n"), p); wxFprintf(stderr, wxT("%s\n"), p.c_str());
} }
} }
} }
@ -601,16 +660,30 @@ bool wxvbamApp::OnCmdLineParsed(wxCmdLineParser& cl)
return true; return true;
} }
wxString wxvbamApp::GetConfigDir()
{
return GetAbsolutePath(wxString((get_xdg_user_config_home() + DOT_DIR).c_str(), wxConvLibc));
}
wxString wxvbamApp::GetDataDir()
{
return GetAbsolutePath(wxString((get_xdg_user_data_home() + DOT_DIR).c_str(), wxConvLibc));
}
wxvbamApp::~wxvbamApp() { wxvbamApp::~wxvbamApp() {
free(home); if (home != NULL)
{
free(home);
home = NULL;
}
} }
MainFrame::MainFrame() MainFrame::MainFrame()
: wxFrame() : wxFrame()
, focused(false)
, paused(false) , paused(false)
, menus_opened(0) , menus_opened(0)
, dialog_opened(0) , dialog_opened(0)
, focused(false)
{ {
} }
@ -629,6 +702,9 @@ EVT_ACTIVATE(MainFrame::OnActivate)
// requires DragAcceptFiles(true); even then may not do anything // requires DragAcceptFiles(true); even then may not do anything
EVT_DROP_FILES(MainFrame::OnDropFile) EVT_DROP_FILES(MainFrame::OnDropFile)
// for window geometry
EVT_MOVE(MainFrame::OnMove)
EVT_SIZE(MainFrame::OnSize)
// pause game if menu pops up // pause game if menu pops up
// //
// This is a feature most people don't like, and it causes problems with // This is a feature most people don't like, and it causes problems with
@ -684,6 +760,40 @@ void MainFrame::OnMenu(wxContextMenuEvent& event)
} }
} }
void MainFrame::OnMove(wxMoveEvent& event)
{
(void)event; // unused params
wxRect pos = GetRect();
int x = pos.GetX(), y = pos.GetY();
if (x >= 0 && y >= 0 && !IsFullScreen())
{
windowPositionX = x;
windowPositionY = y;
update_opts();
}
}
void MainFrame::OnSize(wxSizeEvent& event)
{
wxFrame::OnSize(event);
wxRect pos = GetRect();
int height = pos.GetHeight(), width = pos.GetWidth();
int x = pos.GetX(), y = pos.GetY();
bool isFullscreen = IsFullScreen();
if (height > 0 && width > 0 && !isFullscreen)
{
windowHeight = height;
windowWidth = width;
}
if (x >= 0 && y >= 0 && !isFullscreen)
{
windowPositionX = x;
windowPositionY = y;
}
fullScreen = isFullscreen;
update_opts();
}
wxString MainFrame::GetGamePath(wxString path) wxString MainFrame::GetGamePath(wxString path)
{ {
wxString game_path = path; wxString game_path = path;
@ -699,7 +809,10 @@ wxString MainFrame::GetGamePath(wxString path)
game_path = wxFileName::GetCwd(); game_path = wxFileName::GetCwd();
if (!wxIsWritable(game_path)) if (!wxIsWritable(game_path))
game_path = wxGetApp().GetConfigurationPath(); {
game_path = wxGetApp().GetAbsolutePath(wxString((get_xdg_user_data_home() + DOT_DIR).c_str(), wxConvLibc));
wxFileName::Mkdir(game_path, 0777, wxPATH_MKDIR_FULL);
}
return game_path; return game_path;
} }
@ -716,7 +829,7 @@ void MainFrame::SetJoystick()
for (int j = 0; j < NUM_KEYS; j++) { for (int j = 0; j < NUM_KEYS; j++) {
wxJoyKeyBinding_v b = gopts.joykey_bindings[i][j]; wxJoyKeyBinding_v b = gopts.joykey_bindings[i][j];
for (int k = 0; k < b.size(); k++) { for (size_t k = 0; k < b.size(); k++) {
int jn = b[k].joy; int jn = b[k].joy;
if (jn) { if (jn) {
@ -766,7 +879,7 @@ void MainFrame::update_state_ts(bool force)
if (panel->game_type() != IMAGE_UNKNOWN) { if (panel->game_type() != IMAGE_UNKNOWN) {
wxString fn; wxString fn;
fn.Printf(SAVESLOT_FMT, panel->game_name().mb_str(), i + 1); fn.Printf(SAVESLOT_FMT, panel->game_name().c_str(), i + 1);
wxFileName fp(panel->state_dir(), fn); wxFileName fp(panel->state_dir(), fn);
wxDateTime ts; // = wxInvalidDateTime wxDateTime ts; // = wxInvalidDateTime
@ -785,7 +898,7 @@ void MainFrame::update_state_ts(bool force)
wxString df = fts.Format(wxT("0&0 %x %X")); wxString df = fts.Format(wxT("0&0 %x %X"));
if (!ts.IsValid()) if (!ts.IsValid())
for (int j = 0; j < df.size(); j++) for (size_t j = 0; j < df.size(); j++)
if (wxIsdigit(df[j])) if (wxIsdigit(df[j]))
df[j] = wxT('-'); df[j] = wxT('-');

View File

@ -83,10 +83,16 @@ public:
{ {
} }
virtual bool OnInit(); virtual bool OnInit();
virtual int OnRun();
virtual bool OnCmdLineHelp(wxCmdLineParser&);
virtual bool OnCmdLineError(wxCmdLineParser&);
virtual bool UsingWayland() { return using_wayland; } virtual bool UsingWayland() { return using_wayland; }
virtual void OnInitCmdLine(wxCmdLineParser&); virtual void OnInitCmdLine(wxCmdLineParser&);
virtual bool OnCmdLineParsed(wxCmdLineParser&); virtual bool OnCmdLineParsed(wxCmdLineParser&);
virtual wxString GetConfigDir();
virtual wxString GetDataDir();
wxString GetConfigurationPath(); wxString GetConfigurationPath();
const wxString GetPluginsDir();
wxString GetAbsolutePath(wxString path); wxString GetAbsolutePath(wxString path);
// name of a file to load at earliest opportunity // name of a file to load at earliest opportunity
wxString pending_load; wxString pending_load;
@ -139,10 +145,12 @@ public:
protected: protected:
bool using_wayland; bool using_wayland;
bool console_mode = false;
int console_status = 0;
private: private:
wxPathList config_path; wxPathList config_path;
char* home; char* home = NULL;
}; };
DECLARE_APP(wxvbamApp); DECLARE_APP(wxvbamApp);
@ -355,6 +363,9 @@ private:
void OnDropFile(wxDropFilesEvent&); void OnDropFile(wxDropFilesEvent&);
// pop up menu in fullscreen mode // pop up menu in fullscreen mode
void OnMenu(wxContextMenuEvent&); void OnMenu(wxContextMenuEvent&);
// window geometry
void OnMove(wxMoveEvent& event);
void OnSize(wxSizeEvent& event);
// Load a named wxDialog from the XRC file // Load a named wxDialog from the XRC file
wxDialog* LoadXRCDialog(const char* name); wxDialog* LoadXRCDialog(const char* name);
// Load a named wxDialog from the XRC file // Load a named wxDialog from the XRC file
@ -645,6 +656,11 @@ extern struct cmditem {
wxMenuItem* mi; // the menu item to invoke command, if present wxMenuItem* mi; // the menu item to invoke command, if present
} cmdtab[]; } cmdtab[];
extern const int ncmds; extern const int ncmds;
// Initializer for struct cmditem
cmditem new_cmditem(const wxString cmd = "", const wxString name = "",
int cmd_id = 0, int mask_flags = 0, wxMenuItem* mi = NULL);
// for binary search // for binary search
extern bool cmditem_lt(const struct cmditem& cmd1, const struct cmditem& cmd2); extern bool cmditem_lt(const struct cmditem& cmd1, const struct cmditem& cmd2);

View File

@ -1,128 +1,128 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0"> <resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0">
<object class="wxDialog" name="AccelConfig"> <object class="wxDialog" name="AccelConfig">
<title>Key Shortcuts</title> <title>Key Shortcuts</title>
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxFlexGridSizer"> <object class="wxFlexGridSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Co_mmands:</label> <label>Co_mmands:</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxTreeCtrl" name="Commands"> <object class="wxTreeCtrl" name="Commands">
<style>wxTR_HAS_BUTTONS|wxTR_NO_LINES|wxTR_FULL_ROW_HIGHLIGHT|wxTR_HIDE_ROOT</style> <style>wxTR_HAS_BUTTONS|wxTR_NO_LINES|wxTR_FULL_ROW_HIGHLIGHT|wxTR_HIDE_ROOT</style>
<size>300,300</size> <size>300,300</size>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
</object> </object>
<flag>wxEXPAND</flag> <flag>wxEXPAND</flag>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Current Keys:</label> <label>Current Keys:</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxListBox" name="Current"/> <object class="wxListBox" name="Current"/>
<option>1</option> <option>1</option>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
</object> </object>
<flag>wxEXPAND</flag> <flag>wxEXPAND</flag>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxButton" name="Assign"> <object class="wxButton" name="Assign">
<label>_Assign</label> <label>_Assign</label>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxButton" name="Remove"> <object class="wxButton" name="Remove">
<label>_Remove</label> <label>_Remove</label>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxButton" name="ResetAll"> <object class="wxButton" name="ResetAll">
<label>Re_set All</label> <label>Re_set All</label>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
</object> </object>
<flag>wxEXPAND</flag> <flag>wxEXPAND</flag>
</object> </object>
<cols>3</cols> <cols>3</cols>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Currently assigned to:</label> <label>Currently assigned to:</label>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="AlreadyThere"/> <object class="wxStaticText" name="AlreadyThere"/>
</object> </object>
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Shortcut Key:</label> <label>Shortcut Key:</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxTextCtrl" name="Shortcut" subclass="wxKeyTextCtrl"> <object class="wxTextCtrl" name="Shortcut" subclass="wxKeyTextCtrl">
<style>wxTE_PROCESS_ENTER|wxTE_PROCESS_TAB</style> <style>wxTE_PROCESS_ENTER|wxTE_PROCESS_TAB</style>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
</object> </object>
<flag>wxEXPAND</flag> <flag>wxEXPAND</flag>
</object> </object>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStdDialogButtonSizer"> <object class="wxStdDialogButtonSizer">
<object class="button"> <object class="button">
<object class="wxButton" name="wxID_OK"/> <object class="wxButton" name="wxID_OK"/>
</object> </object>
<object class="button"> <object class="button">
<object class="wxButton" name="wxID_CANCEL"/> <object class="wxButton" name="wxID_CANCEL"/>
</object> </object>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
</object> </object>
</object> </object>
</resource> </resource>

View File

@ -1,113 +1,113 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0"> <resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0">
<object class="wxDialog" name="CheatAdd"> <object class="wxDialog" name="CheatAdd">
<title>Add Cheat</title> <title>Add Cheat</title>
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>_Description</label> <label>_Description</label>
<font> <font>
<weight>bold</weight> <weight>bold</weight>
</font> </font>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxTextCtrl" name="Desc"/> <object class="wxTextCtrl" name="Desc"/>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Address</label> <label>Address</label>
<font> <font>
<weight>bold</weight> <weight>bold</weight>
</font> </font>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="Address"/> <object class="wxStaticText" name="Address"/>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>_Value</label> <label>_Value</label>
<font> <font>
<weight>bold</weight> <weight>bold</weight>
</font> </font>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
<option>1</option> <option>1</option>
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxHORIZONTAL</orient> <orient>wxHORIZONTAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxTextCtrl" name="Value"/> <object class="wxTextCtrl" name="Value"/>
<option>1</option> <option>1</option>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Format</label> <label>Format</label>
<font> <font>
<weight>bold</weight> <weight>bold</weight>
</font> </font>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="Format"/> <object class="wxStaticText" name="Format"/>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
<object class="wxStdDialogButtonSizer"> <object class="wxStdDialogButtonSizer">
<object class="button"> <object class="button">
<object class="wxButton" name="wxID_OK"> <object class="wxButton" name="wxID_OK">
<default>1</default> <default>1</default>
</object> </object>
</object> </object>
<object class="button"> <object class="button">
<object class="wxButton" name="wxID_CANCEL"/> <object class="wxButton" name="wxID_CANCEL"/>
</object> </object>
</object> </object>
</object> </object>
</object> </object>
</object> </object>
</resource> </resource>

View File

@ -1,218 +1,218 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0"> <resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0">
<object class="wxDialog" name="CheatCreate"> <object class="wxDialog" name="CheatCreate">
<title>Cheat Search</title> <title>Cheat Search</title>
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxListCtrl" name="CheatList" subclass="CheatListCtrl"> <object class="wxListCtrl" name="CheatList" subclass="CheatListCtrl">
<style>wxLC_REPORT|wxLC_SINGLE_SEL|wxLC_VIRTUAL</style> <style>wxLC_REPORT|wxLC_SINGLE_SEL|wxLC_VIRTUAL</style>
</object> </object>
<option>1</option> <option>1</option>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
<minsize>-1,200</minsize> <minsize>-1,200</minsize>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxHORIZONTAL</orient> <orient>wxHORIZONTAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticBoxSizer"> <object class="wxStaticBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxRadioButton" name="EQ"> <object class="wxRadioButton" name="EQ">
<label>E_qual</label> <label>E_qual</label>
<style>wxRB_GROUP</style> <style>wxRB_GROUP</style>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxRadioButton" name="NE"> <object class="wxRadioButton" name="NE">
<label>_Not equal</label> <label>_Not equal</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxRadioButton" name="LT"> <object class="wxRadioButton" name="LT">
<label>_Less than</label> <label>_Less than</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxRadioButton" name="LE"> <object class="wxRadioButton" name="LE">
<label>L_ess or equal</label> <label>L_ess or equal</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxRadioButton" name="GT"> <object class="wxRadioButton" name="GT">
<label>_Greater than</label> <label>_Greater than</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxRadioButton" name="GE"> <object class="wxRadioButton" name="GE">
<label>G_reater or equal</label> <label>G_reater or equal</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<label>Compare type</label> <label>Compare type</label>
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
</object> </object>
<option>1</option> <option>1</option>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticBoxSizer"> <object class="wxStaticBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxRadioButton" name="Signed"> <object class="wxRadioButton" name="Signed">
<label>S_igned</label> <label>S_igned</label>
<style>wxRB_GROUP</style> <style>wxRB_GROUP</style>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxRadioButton" name="Unsigned"> <object class="wxRadioButton" name="Unsigned">
<label>_Unsigned</label> <label>_Unsigned</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxRadioButton" name="Hexadecimal"> <object class="wxRadioButton" name="Hexadecimal">
<label>_Hexadecimal</label> <label>_Hexadecimal</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<label>Signed/Unsigned</label> <label>Signed/Unsigned</label>
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticBoxSizer"> <object class="wxStaticBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxRadioButton" name="Size8"> <object class="wxRadioButton" name="Size8">
<label>_8 bits</label> <label>_8 bits</label>
<style>wxRB_GROUP</style> <style>wxRB_GROUP</style>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxRadioButton" name="Size16"> <object class="wxRadioButton" name="Size16">
<label>_16 bits</label> <label>_16 bits</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxRadioButton" name="Size32"> <object class="wxRadioButton" name="Size32">
<label>_32 bits</label> <label>_32 bits</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<label>Data size</label> <label>Data size</label>
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
</object> </object>
<option>1</option> <option>1</option>
<flag>wxEXPAND</flag> <flag>wxEXPAND</flag>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticBoxSizer"> <object class="wxStaticBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxRadioButton" name="OldValue"> <object class="wxRadioButton" name="OldValue">
<label>Ol_d value</label> <label>Ol_d value</label>
<style>wxRB_GROUP</style> <style>wxRB_GROUP</style>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxRadioButton" name="SpecificValue"> <object class="wxRadioButton" name="SpecificValue">
<label>Specific _value</label> <label>Specific _value</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxTextCtrl" name="Value"/> <object class="wxTextCtrl" name="Value"/>
<option>1</option> <option>1</option>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<label>Search value</label> <label>Search value</label>
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
</object> </object>
<option>1</option> <option>1</option>
<flag>wxEXPAND</flag> <flag>wxEXPAND</flag>
</object> </object>
</object> </object>
<flag>wxEXPAND</flag> <flag>wxEXPAND</flag>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxButton" name="Search"> <object class="wxButton" name="Search">
<label>_Search</label> <label>_Search</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxButton" name="Update"> <object class="wxButton" name="Update">
<label>U_pdate Old</label> <label>U_pdate Old</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxButton" name="Clear"> <object class="wxButton" name="Clear">
<label>_Clear</label> <label>_Clear</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxButton" name="AddCheat"> <object class="wxButton" name="AddCheat">
<label>_Add cheat</label> <label>_Add cheat</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxButton" name="wxID_OK"/> <object class="wxButton" name="wxID_OK"/>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<orient>wxHORIZONTAL</orient> <orient>wxHORIZONTAL</orient>
</object> </object>
<flag>wxALIGN_CENTRE</flag> <flag>wxALIGN_CENTRE</flag>
</object> </object>
</object> </object>
</object> </object>
</resource> </resource>

View File

@ -1,93 +1,93 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0"> <resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0">
<object class="wxDialog" name="CheatEdit"> <object class="wxDialog" name="CheatEdit">
<title>Edit Cheat</title> <title>Edit Cheat</title>
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>_Description</label> <label>_Description</label>
<font> <font>
<weight>bold</weight> <weight>bold</weight>
</font> </font>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxTextCtrl" name="Desc"/> <object class="wxTextCtrl" name="Desc"/>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>_Type</label> <label>_Type</label>
<font> <font>
<weight>bold</weight> <weight>bold</weight>
</font> </font>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxChoice" name="Type"/> <object class="wxChoice" name="Type"/>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>C_odes</label> <label>C_odes</label>
<font> <font>
<weight>bold</weight> <weight>bold</weight>
</font> </font>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
<option>1</option> <option>1</option>
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxHORIZONTAL</orient> <orient>wxHORIZONTAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxTextCtrl" name="Codes"> <object class="wxTextCtrl" name="Codes">
<style>wxTE_MULTILINE|wxTE_DONTWRAP</style> <style>wxTE_MULTILINE|wxTE_DONTWRAP</style>
</object> </object>
<option>1</option> <option>1</option>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
<object class="wxStdDialogButtonSizer"> <object class="wxStdDialogButtonSizer">
<object class="button"> <object class="button">
<object class="wxButton" name="wxID_OK"> <object class="wxButton" name="wxID_OK">
<default>1</default> <default>1</default>
</object> </object>
</object> </object>
<object class="button"> <object class="button">
<object class="wxButton" name="wxID_CANCEL"/> <object class="wxButton" name="wxID_CANCEL"/>
</object> </object>
</object> </object>
</object> </object>
</object> </object>
</object> </object>
</resource> </resource>

View File

@ -1,62 +1,62 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0"> <resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0">
<object class="wxDialog" name="CheatList"> <object class="wxDialog" name="CheatList">
<title>Cheat List</title> <title>Cheat List</title>
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxToolBar"> <object class="wxToolBar">
<object class="tool" name="wxID_OPEN"> <object class="tool" name="wxID_OPEN">
<bitmap stock_id="wxART_FILE_OPEN"/> <bitmap stock_id="wxART_FILE_OPEN"/>
<tooltip>Open cheat list</tooltip> <tooltip>Open cheat list</tooltip>
</object> </object>
<object class="tool" name="wxID_SAVE"> <object class="tool" name="wxID_SAVE">
<bitmap stock_id="wxART_FILE_SAVE"/> <bitmap stock_id="wxART_FILE_SAVE"/>
<tooltip>Save cheat list</tooltip> <tooltip>Save cheat list</tooltip>
</object> </object>
<object class="separator"/> <object class="separator"/>
<object class="tool" name="wxID_ADD"> <object class="tool" name="wxID_ADD">
<bitmap stock_id="wxART_ADD_BOOKMARK"/> <bitmap stock_id="wxART_ADD_BOOKMARK"/>
<tooltip>Add new cheat</tooltip> <tooltip>Add new cheat</tooltip>
</object> </object>
<object class="tool" name="wxID_REMOVE"> <object class="tool" name="wxID_REMOVE">
<bitmap stock_id="wxART_DEL_BOOKMARK"/> <bitmap stock_id="wxART_DEL_BOOKMARK"/>
<tooltip>Delete selected cheat</tooltip> <tooltip>Delete selected cheat</tooltip>
</object> </object>
<object class="tool" name="wxID_CLEAR"> <object class="tool" name="wxID_CLEAR">
<bitmap platform="unix" stock_id="gtk-clear"/> <bitmap platform="unix" stock_id="gtk-clear"/>
<bitmap stock_id="wxART_DELETE"/> <bitmap stock_id="wxART_DELETE"/>
<tooltip>Delete all cheats</tooltip> <tooltip>Delete all cheats</tooltip>
</object> </object>
<object class="separator"/> <object class="separator"/>
<object class="tool" name="wxID_SELECTALL"> <object class="tool" name="wxID_SELECTALL">
<bitmap platform="unix" stock_id="gtk-select-all"/> <bitmap platform="unix" stock_id="gtk-select-all"/>
<bitmap stock_id="wxART_TICK_MARK"/> <bitmap stock_id="wxART_TICK_MARK"/>
<tooltip>Toggle all Cheats</tooltip> <tooltip>Toggle all Cheats</tooltip>
</object> </object>
</object> </object>
<flag>wxEXPAND</flag> <flag>wxEXPAND</flag>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxListCtrl" name="Cheats" subclass="wxCheckedListCtrl"> <object class="wxListCtrl" name="Cheats" subclass="wxCheckedListCtrl">
<style>wxLC_REPORT</style> <style>wxLC_REPORT</style>
</object> </object>
<option>1</option> <option>1</option>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
<minsize>200,100d</minsize> <minsize>200,100d</minsize>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
<object class="wxStdDialogButtonSizer"> <object class="wxStdDialogButtonSizer">
<object class="button"> <object class="button">
<object class="wxButton" name="wxID_OK"> <object class="wxButton" name="wxID_OK">
<default>1</default> <default>1</default>
</object> </object>
</object> </object>
</object> </object>
</object> </object>
</object> </object>
</object> </object>
</resource> </resource>

View File

@ -1,28 +1,28 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0"> <resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0">
<object class="wxDialog" name="CodeSelect"> <object class="wxDialog" name="CodeSelect">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxListBox" name="CodeList"> <object class="wxListBox" name="CodeList">
<style>wxLB_HSCROLL|wxLB_SORT</style> <style>wxLB_HSCROLL|wxLB_SORT</style>
</object> </object>
<option>1</option> <option>1</option>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStdDialogButtonSizer"> <object class="wxStdDialogButtonSizer">
<object class="button"> <object class="button">
<object class="wxButton" name="wxID_OK"/> <object class="wxButton" name="wxID_OK"/>
</object> </object>
<object class="button"> <object class="button">
<object class="wxButton" name="wxID_CANCEL"/> <object class="wxButton" name="wxID_CANCEL"/>
</object> </object>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
</object> </object>
</object> </object>
</resource> </resource>

View File

@ -1,135 +1,135 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0"> <resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0">
<object class="wxDialog" name="DirectoriesConfig"> <object class="wxDialog" name="DirectoriesConfig">
<title>Directories</title> <title>Directories</title>
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxFlexGridSizer"> <object class="wxFlexGridSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Game Boy Advance ROMs</label> <label>Game Boy Advance ROMs</label>
</object> </object>
<flag>wxALL|wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL</flag> <flag>wxALL|wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxDirPickerCtrl" name="GBARoms"> <object class="wxDirPickerCtrl" name="GBARoms">
<message>Game Boy Advance ROMs</message> <message>Game Boy Advance ROMs</message>
<style>wxDIRP_USE_TEXTCTRL|wxDIRP_DIR_MUST_EXIST</style> <style>wxDIRP_USE_TEXTCTRL|wxDIRP_DIR_MUST_EXIST</style>
<size>439,30</size> <size>439,30</size>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Game Boy ROMs</label> <label>Game Boy ROMs</label>
</object> </object>
<flag>wxALL|wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL</flag> <flag>wxALL|wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxDirPickerCtrl" name="GBRoms"> <object class="wxDirPickerCtrl" name="GBRoms">
<message>Game Boy ROMs</message> <message>Game Boy ROMs</message>
<style>wxDIRP_USE_TEXTCTRL|wxDIRP_DIR_MUST_EXIST</style> <style>wxDIRP_USE_TEXTCTRL|wxDIRP_DIR_MUST_EXIST</style>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Game Boy Color ROMs</label> <label>Game Boy Color ROMs</label>
</object> </object>
<flag>wxALL|wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL</flag> <flag>wxALL|wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxDirPickerCtrl" name="GBCRoms"> <object class="wxDirPickerCtrl" name="GBCRoms">
<message>Game Boy Color ROMs</message> <message>Game Boy Color ROMs</message>
<style>wxDIRP_USE_TEXTCTRL|wxDIRP_DIR_MUST_EXIST</style> <style>wxDIRP_USE_TEXTCTRL|wxDIRP_DIR_MUST_EXIST</style>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Native Saves</label> <label>Native Saves</label>
</object> </object>
<flag>wxALL|wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL</flag> <flag>wxALL|wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxDirPickerCtrl" name="BatSaves"> <object class="wxDirPickerCtrl" name="BatSaves">
<message>Native Saves</message> <message>Native Saves</message>
<style>wxDIRP_USE_TEXTCTRL|wxDIRP_DIR_MUST_EXIST</style> <style>wxDIRP_USE_TEXTCTRL|wxDIRP_DIR_MUST_EXIST</style>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Emulator Saves</label> <label>Emulator Saves</label>
</object> </object>
<flag>wxALL|wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL</flag> <flag>wxALL|wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxDirPickerCtrl" name="StateSaves"> <object class="wxDirPickerCtrl" name="StateSaves">
<message>Emulator Saves</message> <message>Emulator Saves</message>
<style>wxDIRP_USE_TEXTCTRL|wxDIRP_DIR_MUST_EXIST</style> <style>wxDIRP_USE_TEXTCTRL|wxDIRP_DIR_MUST_EXIST</style>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Screenshots</label> <label>Screenshots</label>
</object> </object>
<flag>wxALL|wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL</flag> <flag>wxALL|wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxDirPickerCtrl" name="Screenshots"> <object class="wxDirPickerCtrl" name="Screenshots">
<message>Screenshots</message> <message>Screenshots</message>
<style>wxDIRP_USE_TEXTCTRL|wxDIRP_DIR_MUST_EXIST</style> <style>wxDIRP_USE_TEXTCTRL|wxDIRP_DIR_MUST_EXIST</style>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Recordings</label> <label>Recordings</label>
</object> </object>
<flag>wxALL|wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL</flag> <flag>wxALL|wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxDirPickerCtrl" name="Recordings"> <object class="wxDirPickerCtrl" name="Recordings">
<message>Recordings</message> <message>Recordings</message>
<style>wxDIRP_USE_TEXTCTRL|wxDIRP_DIR_MUST_EXIST</style> <style>wxDIRP_USE_TEXTCTRL|wxDIRP_DIR_MUST_EXIST</style>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<cols>2</cols> <cols>2</cols>
<growablecols>1</growablecols> <growablecols>1</growablecols>
</object> </object>
<option>1</option> <option>1</option>
<flag>wxEXPAND</flag> <flag>wxEXPAND</flag>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStdDialogButtonSizer"> <object class="wxStdDialogButtonSizer">
<object class="button"> <object class="button">
<object class="wxButton" name="wxID_CANCEL"/> <object class="wxButton" name="wxID_CANCEL"/>
</object> </object>
<object class="button"> <object class="button">
<object class="wxButton" name="wxID_OK"/> <object class="wxButton" name="wxID_OK"/>
</object> </object>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
</object> </object>
</object> </object>
</resource> </resource>

View File

@ -1,482 +1,482 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0"> <resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0">
<object class="wxDialog" name="Disassemble"> <object class="wxDialog" name="Disassemble">
<title>Disassemble</title> <title>Disassemble</title>
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxRadioButton" name="InsAuto"> <object class="wxRadioButton" name="InsAuto">
<label>_Automatic</label> <label>_Automatic</label>
<style>wxRB_GROUP</style> <style>wxRB_GROUP</style>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxRadioButton" name="InsARM"> <object class="wxRadioButton" name="InsARM">
<label>A_RM</label> <label>A_RM</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxRadioButton" name="InsThumb"> <object class="wxRadioButton" name="InsThumb">
<label>_THUMB</label> <label>_THUMB</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxTextCtrl" name="GotoAddress"> <object class="wxTextCtrl" name="GotoAddress">
<style>wxTE_PROCESS_ENTER</style> <style>wxTE_PROCESS_ENTER</style>
</object> </object>
<option>1</option> <option>1</option>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxButton" name="Goto"> <object class="wxButton" name="Goto">
<label>_Go</label> <label>_Go</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<orient>wxHORIZONTAL</orient> <orient>wxHORIZONTAL</orient>
</object> </object>
<flag>wxEXPAND</flag> <flag>wxEXPAND</flag>
</object> </object>
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxPanel" name="Disassembly" subclass="DisList"> <object class="wxPanel" name="Disassembly" subclass="DisList">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
</object> </object>
<option>1</option> <option>1</option>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
</object> </object>
<option>1</option> <option>1</option>
<flag>wxEXPAND</flag> <flag>wxEXPAND</flag>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxFlexGridSizer"> <object class="wxFlexGridSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>R0:</label> <label>R0:</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="R0"> <object class="wxStaticText" name="R0">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
<label>00000000</label> <label>00000000</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>R1:</label> <label>R1:</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="R1"> <object class="wxStaticText" name="R1">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
<label>00000000</label> <label>00000000</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>R2:</label> <label>R2:</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="R2"> <object class="wxStaticText" name="R2">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
<label>00000000</label> <label>00000000</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>R3:</label> <label>R3:</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="R3"> <object class="wxStaticText" name="R3">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
<label>00000000</label> <label>00000000</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>R4:</label> <label>R4:</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="R4"> <object class="wxStaticText" name="R4">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
<label>00000000</label> <label>00000000</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>R5:</label> <label>R5:</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="R5"> <object class="wxStaticText" name="R5">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
<label>00000000</label> <label>00000000</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>R6:</label> <label>R6:</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="R6"> <object class="wxStaticText" name="R6">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
<label>00000000</label> <label>00000000</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>R7:</label> <label>R7:</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="R7"> <object class="wxStaticText" name="R7">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
<label>00000000</label> <label>00000000</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>R8:</label> <label>R8:</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="R8"> <object class="wxStaticText" name="R8">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
<label>00000000</label> <label>00000000</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>R9:</label> <label>R9:</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="R9"> <object class="wxStaticText" name="R9">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
<label>00000000</label> <label>00000000</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>R10:</label> <label>R10:</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="R10"> <object class="wxStaticText" name="R10">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
<label>00000000</label> <label>00000000</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>R11:</label> <label>R11:</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="R11"> <object class="wxStaticText" name="R11">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
<label>00000000</label> <label>00000000</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>R12:</label> <label>R12:</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="R12"> <object class="wxStaticText" name="R12">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
<label>00000000</label> <label>00000000</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>SP:</label> <label>SP:</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="R13"> <object class="wxStaticText" name="R13">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
<label>00000000</label> <label>00000000</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>LR:</label> <label>LR:</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="R14"> <object class="wxStaticText" name="R14">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
<label>00000000</label> <label>00000000</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>PC:</label> <label>PC:</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="R15"> <object class="wxStaticText" name="R15">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
<label>00000000</label> <label>00000000</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>CPSR:</label> <label>CPSR:</label>
</object> </object>
<flag>wxBOTTOM|wxRIGHT</flag> <flag>wxBOTTOM|wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="R16"> <object class="wxStaticText" name="R16">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
<label>00000000</label> <label>00000000</label>
</object> </object>
<flag>wxBOTTOM|wxLEFT</flag> <flag>wxBOTTOM|wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxCheckBox" name="N" subclass="DispCheckBox"> <object class="wxCheckBox" name="N" subclass="DispCheckBox">
<label>N</label> <label>N</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxCheckBox" name="I" subclass="DispCheckBox"> <object class="wxCheckBox" name="I" subclass="DispCheckBox">
<label>I</label> <label>I</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxCheckBox" name="Z" subclass="DispCheckBox"> <object class="wxCheckBox" name="Z" subclass="DispCheckBox">
<label>Z</label> <label>Z</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxCheckBox" name="F" subclass="DispCheckBox"> <object class="wxCheckBox" name="F" subclass="DispCheckBox">
<label>F</label> <label>F</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxCheckBox" name="C" subclass="DispCheckBox"> <object class="wxCheckBox" name="C" subclass="DispCheckBox">
<label>C</label> <label>C</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxCheckBox" name="T" subclass="DispCheckBox"> <object class="wxCheckBox" name="T" subclass="DispCheckBox">
<label>T</label> <label>T</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxCheckBox" name="V" subclass="DispCheckBox"> <object class="wxCheckBox" name="V" subclass="DispCheckBox">
<label>V</label> <label>V</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxGridSizer"> <object class="wxGridSizer">
<cols>2</cols> <cols>2</cols>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Mode:</label> <label>Mode:</label>
</object> </object>
<flag>wxLEFT|wxRIGHT</flag> <flag>wxLEFT|wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="Mode"> <object class="wxStaticText" name="Mode">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
<label>00</label> <label>00</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
</object> </object>
</object> </object>
<cols>2</cols> <cols>2</cols>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<orient>wxHORIZONTAL</orient> <orient>wxHORIZONTAL</orient>
</object> </object>
<option>1</option> <option>1</option>
<flag>wxEXPAND</flag> <flag>wxEXPAND</flag>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxCheckBox" name="AutoUpdate"> <object class="wxCheckBox" name="AutoUpdate">
<label>Automatic _update</label> <label>Automatic _update</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxGridSizer"> <object class="wxGridSizer">
<cols>4</cols> <cols>4</cols>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxButton" name="GotoPC"> <object class="wxButton" name="GotoPC">
<label>G_oto PC</label> <label>G_oto PC</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxButton" name="Refresh"> <object class="wxButton" name="Refresh">
<label>Re_fresh</label> <label>Re_fresh</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxButton" name="Next"> <object class="wxButton" name="Next">
<label>_Next</label> <label>_Next</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxButton" name="wxID_CLOSE"/> <object class="wxButton" name="wxID_CLOSE"/>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
</object> </object>
<flag>wxEXPAND</flag> <flag>wxEXPAND</flag>
</object> </object>
</object> </object>
</object> </object>
</resource> </resource>

View File

@ -1,303 +1,303 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0"> <resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0">
<object class="wxDialog" name="DisplayConfig"> <object class="wxDialog" name="DisplayConfig">
<title>Display settings</title> <title>Display settings</title>
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxNotebook"> <object class="wxNotebook">
<object class="notebookpage"> <object class="notebookpage">
<object class="wxPanel"> <object class="wxPanel">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Output module</label> <label>Output module</label>
<font> <font>
<weight>bold</weight> <weight>bold</weight>
</font> </font>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxHORIZONTAL</orient> <orient>wxHORIZONTAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxRadioButton" name="OutputSimple"> <object class="wxRadioButton" name="OutputSimple">
<label>Simple</label> <label>Simple</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxRadioButton" name="OutputQuartz2D"> <object class="wxRadioButton" name="OutputQuartz2D">
<label>Quartz2D</label> <label>Quartz2D</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxRadioButton" name="OutputOpenGL"> <object class="wxRadioButton" name="OutputOpenGL">
<label>OpenGL</label> <label>OpenGL</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxRadioButton" name="OutputDirect3D"> <object class="wxRadioButton" name="OutputDirect3D">
<label>Direct3D 9</label> <label>Direct3D 9</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
</object> </object>
</object> </object>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Filters</label> <label>Filters</label>
<font> <font>
<weight>bold</weight> <weight>bold</weight>
</font> </font>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxFlexGridSizer"> <object class="wxFlexGridSizer">
<object class="sizeritem"> <object class="sizeritem">
<flag>wxALL|wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL</flag> <flag>wxALL|wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL</flag>
<border>5</border> <border>5</border>
<object class="wxStaticText"> <object class="wxStaticText">
<label>Display filter :</label> <label>Display filter :</label>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxChoice" name="Filter"> <object class="wxChoice" name="Filter">
<content> <content>
<item>None</item> <item>None</item>
<item>2xSaI</item> <item>2xSaI</item>
<item>Super 2xSaI</item> <item>Super 2xSaI</item>
<item>Super Eagle</item> <item>Super Eagle</item>
<item>Pixelate</item> <item>Pixelate</item>
<item>Advance MAME Scale2x</item> <item>Advance MAME Scale2x</item>
<item>Bilinear</item> <item>Bilinear</item>
<item>Bilinear Plus</item> <item>Bilinear Plus</item>
<item>Scanlines</item> <item>Scanlines</item>
<item>TV Mode</item> <item>TV Mode</item>
<item>HQ 2x</item> <item>HQ 2x</item>
<item>LQ 2x</item> <item>LQ 2x</item>
<item>Simple 2x</item> <item>Simple 2x</item>
<item>Simple 3x</item> <item>Simple 3x</item>
<item>HQ 3x</item> <item>HQ 3x</item>
<item>Simple 4x</item> <item>Simple 4x</item>
<item>HQ 4x</item> <item>HQ 4x</item>
<item>xBRZ 2x</item> <item>xBRZ 2x</item>
<item>xBRZ 3x</item> <item>xBRZ 3x</item>
<item>xBRZ 4x</item> <item>xBRZ 4x</item>
<item>xBRZ 5x</item> <item>xBRZ 5x</item>
<item>xBRZ 6x</item> <item>xBRZ 6x</item>
<item>Plugin</item> <item>Plugin</item>
</content> </content>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="PluginLab"> <object class="wxStaticText" name="PluginLab">
<label>Plugin :</label> <label>Plugin :</label>
</object> </object>
<flag>wxALL|wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL</flag> <flag>wxALL|wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxChoice" name="Plugin"/> <object class="wxChoice" name="Plugin"/>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Interframe blending :</label> <label>Interframe blending :</label>
</object> </object>
<flag>wxRIGHT|wxALL|wxALIGN_CENTRE_VERTICAL</flag> <flag>wxRIGHT|wxALL|wxALIGN_CENTRE_VERTICAL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxChoice" name="IFB"> <object class="wxChoice" name="IFB">
<content> <content>
<item>None</item> <item>None</item>
<item>Smart interframe blending</item> <item>Smart interframe blending</item>
<item>Interframe motion blur</item> <item>Interframe motion blur</item>
</content> </content>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<cols>2</cols> <cols>2</cols>
<growablecols>1</growablecols> <growablecols>1</growablecols>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
</object> </object>
</object> </object>
<label>Basic</label> <label>Basic</label>
</object> </object>
<object class="notebookpage"> <object class="notebookpage">
<object class="wxPanel"> <object class="wxPanel">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Frame Skip</label> <label>Frame Skip</label>
<font> <font>
<weight>bold</weight> <weight>bold</weight>
</font> </font>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxHORIZONTAL</orient> <orient>wxHORIZONTAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="FrameSkipLab"> <object class="wxStaticText" name="FrameSkipLab">
<label>_Number of frames to skip :</label> <label>_Number of frames to skip :</label>
</object> </object>
<flag>wxALL|wxALIGN_CENTRE_VERTICAL</flag> <flag>wxALL|wxALIGN_CENTRE_VERTICAL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxSpinCtrl" name="FrameSkip"> <object class="wxSpinCtrl" name="FrameSkip">
<min>0</min> <min>0</min>
<max>9</max> <max>9</max>
</object> </object>
<option>1</option> <option>1</option>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
</object> </object>
</object> </object>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
</object> </object>
</object> </object>
<label>Speed</label> <label>Speed</label>
</object> </object>
<object class="notebookpage"> <object class="notebookpage">
<object class="wxPanel"> <object class="wxPanel">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<flag>wxEXPAND</flag> <flag>wxEXPAND</flag>
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxHORIZONTAL</orient> <orient>wxHORIZONTAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<flag>wxALL|wxALIGN_CENTRE_VERTICAL</flag> <flag>wxALL|wxALIGN_CENTRE_VERTICAL</flag>
<border>5</border> <border>5</border>
<object class="wxStaticText"> <object class="wxStaticText">
<label>Speed indicator :</label> <label>Speed indicator :</label>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxChoice" name="SpeedIndicator"> <object class="wxChoice" name="SpeedIndicator">
<content> <content>
<item>None</item> <item>None</item>
<item>Percentage</item> <item>Percentage</item>
<item>Detailed</item> <item>Detailed</item>
</content> </content>
</object> </object>
<option>1</option> <option>1</option>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
</object> </object>
</object> </object>
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
</object> </object>
</object> </object>
</object> </object>
</object> </object>
<label>On-Screen Display</label> <label>On-Screen Display</label>
</object> </object>
<object class="notebookpage"> <object class="notebookpage">
<object class="wxPanel"> <object class="wxPanel">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Default magnification :</label> <label>Default magnification :</label>
</object> </object>
<flag>wxALL|wxALIGN_CENTRE_VERTICAL</flag> <flag>wxALL|wxALIGN_CENTRE_VERTICAL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxTextCtrl" name="DefaultScale"> <object class="wxTextCtrl" name="DefaultScale">
</object> </object>
<option>1</option> <option>1</option>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<orient>wxHORIZONTAL</orient> <orient>wxHORIZONTAL</orient>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Maximum magnification factor :</label> <label>Maximum magnification factor :</label>
<tooltip>0 = no maximum</tooltip> <tooltip>0 = no maximum</tooltip>
</object> </object>
<flag>wxALL|wxALIGN_CENTRE_VERTICAL</flag> <flag>wxALL|wxALIGN_CENTRE_VERTICAL</flag>
<border>5</border> <border>5</border>
</object> </object>
<orient>wxHORIZONTAL</orient> <orient>wxHORIZONTAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxSpinCtrl" name="MaxScale"> <object class="wxSpinCtrl" name="MaxScale">
<tooltip>0 = no limit</tooltip> <tooltip>0 = no limit</tooltip>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
</object> </object>
<flag>wxEXPAND</flag> <flag>wxEXPAND</flag>
</object> </object>
</object> </object>
</object> </object>
<label>Zoom</label> <label>Zoom</label>
</object> </object>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
<object class="wxStdDialogButtonSizer"> <object class="wxStdDialogButtonSizer">
<object class="button"> <object class="button">
<object class="wxButton" name="wxID_OK"/> <object class="wxButton" name="wxID_OK"/>
</object> </object>
<object class="button"> <object class="button">
<object class="wxButton" name="wxID_CANCEL"/> <object class="wxButton" name="wxID_CANCEL"/>
</object> </object>
</object> </object>
</object> </object>
</object> </object>
</object> </object>
</resource> </resource>

View File

@ -1,69 +1,69 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0"> <resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0">
<object class="wxDialog" name="ExportSPS"> <object class="wxDialog" name="ExportSPS">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxFlexGridSizer"> <object class="wxFlexGridSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Title:</label> <label>Title:</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxTextCtrl" name="Title"/> <object class="wxTextCtrl" name="Title"/>
<flag>wxEXPAND|wxALL</flag> <flag>wxEXPAND|wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Description:</label> <label>Description:</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxTextCtrl" name="Description"/> <object class="wxTextCtrl" name="Description"/>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Notes:</label> <label>Notes:</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxTextCtrl" name="Notes"> <object class="wxTextCtrl" name="Notes">
<style>wxTE_PROCESS_ENTER|wxTE_MULTILINE|wxHSCROLL</style> <style>wxTE_PROCESS_ENTER|wxTE_MULTILINE|wxHSCROLL</style>
</object> </object>
<option>1</option> <option>1</option>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
<minsize>200,100</minsize> <minsize>200,100</minsize>
</object> </object>
<cols>2</cols> <cols>2</cols>
<growablecols>1</growablecols> <growablecols>1</growablecols>
<growablerows>2</growablerows> <growablerows>2</growablerows>
</object> </object>
<option>1</option> <option>1</option>
<flag>wxEXPAND</flag> <flag>wxEXPAND</flag>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStdDialogButtonSizer"> <object class="wxStdDialogButtonSizer">
<object class="button"> <object class="button">
<object class="wxButton" name="wxID_OK"/> <object class="wxButton" name="wxID_OK"/>
</object> </object>
<object class="button"> <object class="button">
<object class="wxButton" name="wxID_CANCEL"/> <object class="wxButton" name="wxID_CANCEL"/>
</object> </object>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
</object> </object>
</object> </object>
</resource> </resource>

View File

@ -1,170 +1,170 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0"> <resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0">
<object class="wxDialog" name="GBAROMInfo"> <object class="wxDialog" name="GBAROMInfo">
<title>Rom Information</title> <title>Rom Information</title>
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxFlexGridSizer"> <object class="wxFlexGridSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Game title:</label> <label>Game title:</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="Title"/> <object class="wxStaticText" name="Title"/>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Internal title:</label> <label>Internal title:</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="IntTitle"/> <object class="wxStaticText" name="IntTitle"/>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Scene Release:</label> <label>Scene Release:</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="Scene"/> <object class="wxStaticText" name="Scene"/>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Release Number:</label> <label>Release Number:</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="Release"/> <object class="wxStaticText" name="Release"/>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>CRC32:</label> <label>CRC32:</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="CRC32"/> <object class="wxStaticText" name="CRC32"/>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Game code:</label> <label>Game code:</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="GameCode"/> <object class="wxStaticText" name="GameCode"/>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Maker code:</label> <label>Maker code:</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="MakerCode"/> <object class="wxStaticText" name="MakerCode"/>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Maker name:</label> <label>Maker name:</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="MakerName"/> <object class="wxStaticText" name="MakerName"/>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Main unit code:</label> <label>Main unit code:</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="UnitCode"/> <object class="wxStaticText" name="UnitCode"/>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Device type:</label> <label>Device type:</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="DeviceType"/> <object class="wxStaticText" name="DeviceType"/>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>ROM version:</label> <label>ROM version:</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="Version"/> <object class="wxStaticText" name="Version"/>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>CRC:</label> <label>CRC:</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="CRC"> <object class="wxStaticText" name="CRC">
<label>ROM Information</label> <label>ROM Information</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<cols>2</cols> <cols>2</cols>
</object> </object>
<flag>wxEXPAND</flag> <flag>wxEXPAND</flag>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStdDialogButtonSizer"> <object class="wxStdDialogButtonSizer">
<object class="button"> <object class="button">
<object class="wxButton" name="wxID_OK"/> <object class="wxButton" name="wxID_OK"/>
</object> </object>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
</object> </object>
</object> </object>
</resource> </resource>

View File

@ -1,105 +1,105 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0"> <resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0">
<object class="wxPanel" name="GBColorPrefPanel"> <object class="wxPanel" name="GBColorPrefPanel">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxChoice" name="ColorSet"> <object class="wxChoice" name="ColorSet">
<content> <content>
<item/> <item/>
<item>Standard</item> <item>Standard</item>
<item>Blue Sea</item> <item>Blue Sea</item>
<item>Dark Night</item> <item>Dark Night</item>
<item>Green Forest</item> <item>Green Forest</item>
<item>Hot Desert</item> <item>Hot Desert</item>
<item>Pink Dreams</item> <item>Pink Dreams</item>
<item>Weird Colors</item> <item>Weird Colors</item>
<item>Real GB Colors</item> <item>Real GB Colors</item>
<item>Real 'GB on GBASP' Colors</item> <item>Real 'GB on GBASP' Colors</item>
</content> </content>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticBoxSizer"> <object class="wxStaticBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxColourPickerCtrl" name="Color0"/> <object class="wxColourPickerCtrl" name="Color0"/>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxColourPickerCtrl" name="Color1"/> <object class="wxColourPickerCtrl" name="Color1"/>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxColourPickerCtrl" name="Color2"/> <object class="wxColourPickerCtrl" name="Color2"/>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxColourPickerCtrl" name="Color3"/> <object class="wxColourPickerCtrl" name="Color3"/>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<label>Background</label> <label>Background</label>
<orient>wxHORIZONTAL</orient> <orient>wxHORIZONTAL</orient>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticBoxSizer"> <object class="wxStaticBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxColourPickerCtrl" name="Color4"/> <object class="wxColourPickerCtrl" name="Color4"/>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxColourPickerCtrl" name="Color5"/> <object class="wxColourPickerCtrl" name="Color5"/>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxColourPickerCtrl" name="Color6"/> <object class="wxColourPickerCtrl" name="Color6"/>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxColourPickerCtrl" name="Color7"/> <object class="wxColourPickerCtrl" name="Color7"/>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<label>Sprites</label> <label>Sprites</label>
<orient>wxHORIZONTAL</orient> <orient>wxHORIZONTAL</orient>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxCheckBox" name="UsePalette" subclass="wxFarRadio"> <object class="wxCheckBox" name="UsePalette" subclass="wxFarRadio">
<label>Use this palette</label> <label>Use this palette</label>
</object> </object>
<flag>wxALL|wxALIGN_CENTRE_VERTICAL</flag> <flag>wxALL|wxALIGN_CENTRE_VERTICAL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="spacer"> <object class="spacer">
<option>1</option> <option>1</option>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxButton" name="Reset"> <object class="wxButton" name="Reset">
<label>Restore</label> <label>Restore</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<orient>wxHORIZONTAL</orient> <orient>wxHORIZONTAL</orient>
</object> </object>
<flag>wxEXPAND</flag> <flag>wxEXPAND</flag>
</object> </object>
</object> </object>
</object> </object>
</resource> </resource>

View File

@ -1,251 +1,251 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0"> <resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0">
<object class="wxDialog" name="GBDisassemble"> <object class="wxDialog" name="GBDisassemble">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxTextCtrl" name="GotoAddress"> <object class="wxTextCtrl" name="GotoAddress">
<style>wxTE_PROCESS_ENTER</style> <style>wxTE_PROCESS_ENTER</style>
</object> </object>
<option>0</option> <option>0</option>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxButton" name="Goto"> <object class="wxButton" name="Goto">
<label>_Go</label> <label>_Go</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<orient>wxHORIZONTAL</orient> <orient>wxHORIZONTAL</orient>
</object> </object>
<flag>wxEXPAND</flag> <flag>wxEXPAND</flag>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxPanel" name="Disassembly" subclass="DisList"> <object class="wxPanel" name="Disassembly" subclass="DisList">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
</object> </object>
<option>1</option> <option>1</option>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxFlexGridSizer"> <object class="wxFlexGridSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>AF:</label> <label>AF:</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="AF"> <object class="wxStaticText" name="AF">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
<label>0000</label> <label>0000</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>BC:</label> <label>BC:</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="BC"> <object class="wxStaticText" name="BC">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
<label>0000</label> <label>0000</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>DE:</label> <label>DE:</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="DE"> <object class="wxStaticText" name="DE">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
<label>0000</label> <label>0000</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>HL:</label> <label>HL:</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="HL"> <object class="wxStaticText" name="HL">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
<label>0000</label> <label>0000</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>SP:</label> <label>SP:</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="SP"> <object class="wxStaticText" name="SP">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
<label>0000</label> <label>0000</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>PC:</label> <label>PC:</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="PC"> <object class="wxStaticText" name="PC">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
<label>0000</label> <label>0000</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>IFF:</label> <label>IFF:</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="IFF"> <object class="wxStaticText" name="IFF">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
<label>0000</label> <label>0000</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>LY:</label> <label>LY:</label>
</object> </object>
<flag>wxRIGHT</flag> <flag>wxRIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="LY"> <object class="wxStaticText" name="LY">
<font> <font>
<family>modern</family> <family>modern</family>
</font> </font>
<label>00</label> <label>00</label>
</object> </object>
<flag>wxLEFT</flag> <flag>wxLEFT</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxCheckBox" name="Z" subclass="DispCheckBox"> <object class="wxCheckBox" name="Z" subclass="DispCheckBox">
<label>Z</label> <label>Z</label>
</object> </object>
</object> </object>
<object class="spacer"/> <object class="spacer"/>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxCheckBox" name="N" subclass="DispCheckBox"> <object class="wxCheckBox" name="N" subclass="DispCheckBox">
<label>N</label> <label>N</label>
</object> </object>
</object> </object>
<object class="spacer"/> <object class="spacer"/>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxCheckBox" name="H" subclass="DispCheckBox"> <object class="wxCheckBox" name="H" subclass="DispCheckBox">
<label>H</label> <label>H</label>
</object> </object>
</object> </object>
<object class="spacer"/> <object class="spacer"/>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxCheckBox" name="C" subclass="DispCheckBox"> <object class="wxCheckBox" name="C" subclass="DispCheckBox">
<label>C</label> <label>C</label>
</object> </object>
</object> </object>
<cols>2</cols> <cols>2</cols>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<orient>wxHORIZONTAL</orient> <orient>wxHORIZONTAL</orient>
</object> </object>
<option>1</option> <option>1</option>
<flag>wxEXPAND</flag> <flag>wxEXPAND</flag>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxCheckBox" name="AutoUpdate"> <object class="wxCheckBox" name="AutoUpdate">
<label>Automatic _update</label> <label>Automatic _update</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxGridSizer"> <object class="wxGridSizer">
<cols>4</cols> <cols>4</cols>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxButton" name="GotoPC"> <object class="wxButton" name="GotoPC">
<label>G_oto PC</label> <label>G_oto PC</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxButton" name="Refresh"> <object class="wxButton" name="Refresh">
<label>Re_fresh</label> <label>Re_fresh</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxButton" name="Next"> <object class="wxButton" name="Next">
<label>_Next</label> <label>_Next</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxButton" name="wxID_CLOSE"/> <object class="wxButton" name="wxID_CLOSE"/>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
</object> </object>
<flag>wxEXPAND</flag> <flag>wxEXPAND</flag>
</object> </object>
</object> </object>
</object> </object>
</resource> </resource>

View File

@ -1,172 +1,172 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0"> <resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0">
<object class="wxDialog" name="GBMapViewer"> <object class="wxDialog" name="GBMapViewer">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxFlexGridSizer"> <object class="wxFlexGridSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticBoxSizer"> <object class="wxStaticBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxRadioButton" name="CharBase0"> <object class="wxRadioButton" name="CharBase0">
<label>0x8000</label> <label>0x8000</label>
<style>wxRB_GROUP</style> <style>wxRB_GROUP</style>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxRadioButton" name="CharBase1"> <object class="wxRadioButton" name="CharBase1">
<label>0x8800</label> <label>0x8800</label>
</object> </object>
</object> </object>
<label>Char Base</label> <label>Char Base</label>
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticBoxSizer"> <object class="wxStaticBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxRadioButton" name="MapBase0"> <object class="wxRadioButton" name="MapBase0">
<label>0x9800</label> <label>0x9800</label>
<style>wxRB_GROUP</style> <style>wxRB_GROUP</style>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxRadioButton" name="MapBase1"> <object class="wxRadioButton" name="MapBase1">
<label>0x9C00</label> <label>0x9C00</label>
</object> </object>
</object> </object>
<label>Map Base</label> <label>Map Base</label>
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
</object> </object>
<flag>wxLEFT|wxRIGHT|wxEXPAND</flag> <flag>wxLEFT|wxRIGHT|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="spacer"> <object class="spacer">
<option>1</option> <option>1</option>
<flag>wxEXPAND</flag> <flag>wxEXPAND</flag>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxCheckBox" name="Stretch"> <object class="wxCheckBox" name="Stretch">
<label>Stretch to _fit</label> <label>Stretch to _fit</label>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxCheckBox" name="AutoUpdate"> <object class="wxCheckBox" name="AutoUpdate">
<label>Auto _update</label> <label>Auto _update</label>
</object> </object>
</object> </object>
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
</object> </object>
<flag>wxEXPAND</flag> <flag>wxEXPAND</flag>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxFlexGridSizer"> <object class="wxFlexGridSizer">
<object class="spacer"/> <object class="spacer"/>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="Coords"/> <object class="wxStaticText" name="Coords"/>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Address:</label> <label>Address:</label>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="Address"/> <object class="wxStaticText" name="Address"/>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Tile:</label> <label>Tile:</label>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="Tile"/> <object class="wxStaticText" name="Tile"/>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Flip:</label> <label>Flip:</label>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="Flip"/> <object class="wxStaticText" name="Flip"/>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Palette:</label> <label>Palette:</label>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="Palette"/> <object class="wxStaticText" name="Palette"/>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Priority:</label> <label>Priority:</label>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="Priority"/> <object class="wxStaticText" name="Priority"/>
</object> </object>
<cols>2</cols> <cols>2</cols>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxScrolledWindow"> <object class="wxScrolledWindow">
<object class="wxPanel" name="GfxView" subclass="GfxPanel"> <object class="wxPanel" name="GfxView" subclass="GfxPanel">
<size>128,128d</size> <size>128,128d</size>
<style>wxFULL_REPAINT_ON_RESIZE</style> <style>wxFULL_REPAINT_ON_RESIZE</style>
</object> </object>
<size>128,128d</size> <size>128,128d</size>
<style>wxBORDER_SUNKEN|wxCLIP_CHILDREN</style> <style>wxBORDER_SUNKEN|wxCLIP_CHILDREN</style>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxPanel" name="Zoom" subclass="PixView"> <object class="wxPanel" name="Zoom" subclass="PixView">
<size>64,64d</size> <size>64,64d</size>
<style>wxBORDER_SUNKEN</style> <style>wxBORDER_SUNKEN</style>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="spacer"/> <object class="spacer"/>
<object class="sizeritem"> <object class="sizeritem">
<object class="unknown" name="Color"/> <object class="unknown" name="Color"/>
<flag>wxALL|wxALIGN_BOTTOM</flag> <flag>wxALL|wxALIGN_BOTTOM</flag>
<border>5</border> <border>5</border>
</object> </object>
<cols>3</cols> <cols>3</cols>
<growablecols>1</growablecols> <growablecols>1</growablecols>
</object> </object>
<flag>wxEXPAND</flag> <flag>wxEXPAND</flag>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxGridSizer"> <object class="wxGridSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxButton" name="Refresh"> <object class="wxButton" name="Refresh">
<label>_Refresh</label> <label>_Refresh</label>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxButton" name="Save"> <object class="wxButton" name="Save">
<label>_Save</label> <label>_Save</label>
</object> </object>
<flag>wxALIGN_CENTRE_HORIZONTAL</flag> <flag>wxALIGN_CENTRE_HORIZONTAL</flag>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxButton" name="wxID_CLOSE"/> <object class="wxButton" name="wxID_CLOSE"/>
<flag>wxALIGN_RIGHT</flag> <flag>wxALIGN_RIGHT</flag>
</object> </object>
<cols>3</cols> <cols>3</cols>
</object> </object>
<flag>wxEXPAND|wxALL</flag> <flag>wxEXPAND|wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
</object> </object>
</object> </object>
</resource> </resource>

View File

@ -1,165 +1,165 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0"> <resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0">
<object class="wxDialog" name="GBOAMViewer"> <object class="wxDialog" name="GBOAMViewer">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxHORIZONTAL</orient> <orient>wxHORIZONTAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Sprite:</label> <label>Sprite:</label>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxSpinCtrl" name="Sprite"> <object class="wxSpinCtrl" name="Sprite">
<min>0</min> <min>0</min>
<max>39</max> <max>39</max>
<style>wxSP_HORIZONTAL|wxSP_ARROW_KEYS</style> <style>wxSP_HORIZONTAL|wxSP_ARROW_KEYS</style>
</object> </object>
<flag>wxEXPAND</flag> <flag>wxEXPAND</flag>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxFlexGridSizer"> <object class="wxFlexGridSizer">
<cols>2</cols> <cols>2</cols>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Pos:</label> <label>Pos:</label>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="Pos"/> <object class="wxStaticText" name="Pos"/>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Tile:</label> <label>Tile:</label>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="Tile"/> <object class="wxStaticText" name="Tile"/>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Prio:</label> <label>Prio:</label>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="Priority"/> <object class="wxStaticText" name="Priority"/>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>OAP:</label> <label>OAP:</label>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="OAP"/> <object class="wxStaticText" name="OAP"/>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Pal:</label> <label>Pal:</label>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="Palette"/> <object class="wxStaticText" name="Palette"/>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Flags:</label> <label>Flags:</label>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="Flags"/> <object class="wxStaticText" name="Flags"/>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText"> <object class="wxStaticText">
<label>Bank:</label> <label>Bank:</label>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxStaticText" name="Bank"/> <object class="wxStaticText" name="Bank"/>
</object> </object>
</object> </object>
<flag>wxEXPAND</flag> <flag>wxEXPAND</flag>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxCheckBox" name="Stretch"> <object class="wxCheckBox" name="Stretch">
<label>Stretch to _fit</label> <label>Stretch to _fit</label>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxCheckBox" name="AutoUpdate"> <object class="wxCheckBox" name="AutoUpdate">
<label>Automatic _update</label> <label>Automatic _update</label>
</object> </object>
</object> </object>
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<orient>wxVERTICAL</orient> <orient>wxVERTICAL</orient>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxBoxSizer"> <object class="wxBoxSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxScrolledWindow"> <object class="wxScrolledWindow">
<object class="wxPanel" name="GfxView" subclass="GfxPanel"> <object class="wxPanel" name="GfxView" subclass="GfxPanel">
<size>64,64d</size> <size>64,64d</size>
<style>wxFULL_REPAINT_ON_RESIZE</style> <style>wxFULL_REPAINT_ON_RESIZE</style>
</object> </object>
<size>64,64d</size> <size>64,64d</size>
<style>wxBORDER_SUNKEN|wxCLIP_CHILDREN</style> <style>wxBORDER_SUNKEN|wxCLIP_CHILDREN</style>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxPanel" name="Zoom" subclass="PixView"> <object class="wxPanel" name="Zoom" subclass="PixView">
<size>64,64d</size> <size>64,64d</size>
<style>wxBORDER_SUNKEN</style> <style>wxBORDER_SUNKEN</style>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<orient>wxHORIZONTAL</orient> <orient>wxHORIZONTAL</orient>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="unknown" name="Color"/> <object class="unknown" name="Color"/>
<flag>wxALL|wxALIGN_BOTTOM</flag> <flag>wxALL|wxALIGN_BOTTOM</flag>
<border>5</border> <border>5</border>
</object> </object>
</object> </object>
</object> </object>
</object> </object>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxGridSizer"> <object class="wxGridSizer">
<object class="sizeritem"> <object class="sizeritem">
<object class="wxButton" name="Refresh"> <object class="wxButton" name="Refresh">
<label>_Refresh</label> <label>_Refresh</label>
</object> </object>
<flag>wxALL</flag> <flag>wxALL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxButton" name="wxID_SAVE"> <object class="wxButton" name="wxID_SAVE">
<label>_Save...</label> <label>_Save...</label>
</object> </object>
<flag>wxALL|wxALIGN_CENTRE_HORIZONTAL</flag> <flag>wxALL|wxALIGN_CENTRE_HORIZONTAL</flag>
<border>5</border> <border>5</border>
</object> </object>
<object class="sizeritem"> <object class="sizeritem">
<object class="wxButton" name="wxID_CLOSE"/> <object class="wxButton" name="wxID_CLOSE"/>
<flag>wxALL|wxALIGN_RIGHT</flag> <flag>wxALL|wxALIGN_RIGHT</flag>
<border>5</border> <border>5</border>
</object> </object>
<cols>3</cols> <cols>3</cols>
</object> </object>
<flag>wxEXPAND</flag> <flag>wxEXPAND</flag>
</object> </object>
</object> </object>
</object> </object>
</resource> </resource>

Some files were not shown because too many files have changed in this diff Show More