This commit is contained in:
Andre Leiradella 2017-08-30 23:14:44 +01:00
commit 863fd7b18d
426 changed files with 116997 additions and 2405 deletions

View File

@ -1,6 +1,35 @@
# 1.6.8 (future)
- GUI: (MaterialUI) Skip querying and drawing items that are not visible; Cache content height and bbox calculation.
- GUI: (XMB) Skip drawing the fading list when it is already transparent. Optimization.
- GUI: (XMB) Comment out visible item calculation in xmb_draw_items().
- GUI: (RGUI) Prevent crashes when using a non-English language reliant on UTF8.
- LOCALIZATION: Update Italian translation.
- LOCALIZATION: Update Portuguese-Brazilian translation.
- LOCALIZATION: Update Russian translation.
- LINUX/PI: Broadcom VC4: Add Videocore config option
- NETPLAY: Fix disconnection not fully deinitializing Netplay.
- COMMON: Fix clear/free loop conditionals in playlists.
- WINDOWS/GDI: Fix flickering of text.
- WINDOWS/WGL: Try to use wglSwapLayerBuffers instead of SwapBuffers if possible (for more optimal performance).
- WII: Use custom, embedded libogc SDK.
- WIIU: Initial touchscreen support for WiiU gamepad.
# 1.6.7
- SCANNER: Fix directory scanning.
- SCANNER: Fix file scanning.
- COMMON: Fix 'Disk Image Append' option.
- FREEBSD: Compatibility fixes for Video4Linux2 camera driver.
- GUI: (MaterialUI) Add disk image append icons.
- GUI: (MaterialUI) Improve word wrapping when menu icons are enabled.
- GUI: (MaterialUI) Add User Interface -> Appearance -> Menu Icons Enable. You can turn on/off the icons on the lefthand side of the menu entries.
- GUI: Performance optimizations for XMB menu driver - only calculates visible items.
- LOCALIZATION: Update Italian translation.
# 1.6.6 (future)
- 3DS: Fixes serious performance regression that affected every core; rewind was always implicitly enabled.
- AUDIO: MOD/S3M/XM sound should now be properly mixed in with the core's sound.
- GUI: Visual makeover of MaterialUI.
- GUI: Added 'Music', 'Images' and 'Video' collection options to RGUI/MaterialUI.
- GUI: Allow the user to add 'Favorites'.
- GUI: Allow the user to rename entries.
- GUI: Performance optimizations for XMB menu driver.
@ -8,6 +37,8 @@
- INPUT: Overlay controller response - when we press buttons on the gamepad or keyboard, the corresponding buttons on the overlay will be highlighted as well.
- NETBSD: Silence some compilation warnings.
- COMMON: Fixed bug 'Deleting an entry from a playlist would not update the list view inside XMB'.
- COMMON: Fix inet_ntop_compat on *nix
- LOBBY: Add skeleton to add help descriptions to lobbies
# 1.6.5
Skipped this one.

View File

@ -82,6 +82,7 @@ else ifeq ($(platform), ps3-cobra)
# NGC/Wii - libogc
else ifeq ($(libogc_platform), 1)
EXTERNAL_LIBOGC=0
CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT)
CXX = $(DEVKITPPC)/bin/powerpc-eabi-g++$(EXE_EXT)
LD = $(DEVKITPPC)/bin/powerpc-eabi-ld$(EXE_EXT)
@ -89,15 +90,36 @@ else ifeq ($(libogc_platform), 1)
EXT_TARGET := $(TARGET_NAME)_$(platform).dol
EXT_INTER_TARGET := $(TARGET_NAME)_$(platform).elf
INCLUDE += -I. -I$(DEVKITPRO)/libogc/include -Ideps/libz
INCLUDE += -I. -I$(DEVKITPRO)/libogc/include -Ideps/libz -Iwii/libogc/include
ifeq ($(EXTERNAL_LIBOGC), 1)
CFLAGS += -DEXTERNAL_LIBOGC
CXXFLAGS += -DEXTERNAL_LIBOGC
ifeq ($(platform), ngc)
LIBDIRS += -L$(DEVKITPRO)/libogc/lib/cube
else ifeq ($(platform), wii)
LIBDIRS += -L$(DEVKITPRO)/libogc/lib/wii
endif
else
CFLAGS += -DINTERNAL_LIBOGC
CXXFLAGS += -DINTERNAL_LIBOGC
ifeq ($(platform), ngc)
LIBDIRS += -Lwii/libogc/libs/cube
else ifeq ($(platform), wii)
LIBDIRS += -Lwii/libogc/libs/wii
endif
endif
ifeq ($(platform), ngc)
LIBDIRS += -L$(DEVKITPRO)/libogc/lib/cube
MACHDEP := -DHW_DOL -mogc
else ifeq ($(platform), wii)
LIBDIRS += -L$(DEVKITPRO)/libogc/lib/wii
MACHDEP := -DHW_RVL -mrvl
endif
LIBDIRS += -L.
MACHDEP += -DGEKKO -mcpu=750 -meabi -mhard-float -DMSB_FIRST
@ -112,7 +134,10 @@ ifeq ($(BIG_STACK), 1)
LDFLAGS += -T bootstrap/gx/rvl.ld
endif
endif
LIBS += -lfat -logc
LIBS += -logc
ifeq ($(EXTERNAL_LIBOGC), 1)
LIBS += -lfat
endif
ifeq ($(platform), wii)
LIBS += -lwiiuse -lbte

358
Makefile.libogc Normal file
View File

@ -0,0 +1,358 @@
#---------------------------------------------------------------------------------
.SUFFIXES:
#---------------------------------------------------------------------------------
ifeq ($(strip $(DEVKITPRO)),)
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>devkitPro")
endif
ifeq ($(strip $(DEVKITPPC)),)
$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=<path to>devkitPPC")
endif
export PATH := $(DEVKITPPC)/bin:$(PATH)
ifeq ($(PLATFORM),)
PLATFORM=wii
endif
#---------------------------------------------------------------------------------
# change shell on Snow Leopard
#---------------------------------------------------------------------------------
UNAME_S := $(shell uname -s)
UNAME_R := $(shell uname -r)
ifneq (,$(findstring Darwin,$(UNAME_S)))
ifneq (,$(findstring 10.8.0,$(UNAME_R)))
export SHELL=/bin/bash
endif
endif
#---------------------------------------------------------------------------------
# path to tools
#---------------------------------------------------------------------------------
export PORTLIBS := $(DEVKITPRO)/portlibs/ppc
export PATH := $(DEVKITPPC)/bin:$(PORTLIBS)/bin:$(PATH)
#---------------------------------------------------------------------------------
# the prefix on the compiler executables
#---------------------------------------------------------------------------------
PREFIX := powerpc-eabi-
export AS := $(PREFIX)as
export CC := $(PREFIX)gcc
export CXX := $(PREFIX)g++
export AR := $(PREFIX)ar
export OBJCOPY := $(PREFIX)objcopy
ISVC=$(or $(VCBUILDHELPER_COMMAND),$(MSBUILDEXTENSIONSPATH32),$(MSBUILDEXTENSIONSPATH))
#---------------------------------------------------------------------------------
%.a:
#---------------------------------------------------------------------------------
@rm -f $@
$(AR) -rc $@ $^
#---------------------------------------------------------------------------------
%.o: %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
#---------------------------------------------------------------------------------
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
#---------------------------------------------------------------------------------
%.o: %.m
$(CC) $(OBJCFLAGS) -c $< -o $@
#---------------------------------------------------------------------------------
%.o: %.s
$(CC) -x assembler-with-cpp $(ASFLAGS) -c $< -o $@
#---------------------------------------------------------------------------------
%.o: %.S
$(CC) -x assembler-with-cpp $(ASFLAGS) -c $< -o $@
#---------------------------------------------------------------------------------
# canned command sequence for binary data
#---------------------------------------------------------------------------------
define bin2o
bin2s -a 32 $< | $(AS) -o $(@)
echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end[];" > `(echo $(<F) | tr . _)`.h
echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"[];" >> `(echo $(<F) | tr . _)`.h
echo "extern const u32" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size";" >> `(echo $(<F) | tr . _)`.h
endef
BUILD := build
BUILD_LITE = 1
CURDIR = .
export BASEDIR := $(CURDIR)
export DEPSDIR := $(BASEDIR)/wii/libogc/deps
export LWIPDIR := $(BASEDIR)/wii/libogc/lwip
export OGCDIR := $(BASEDIR)/wii/libogc/libogc
export DBDIR := $(BASEDIR)/wii/libogc/libdb
export BTEDIR := $(BASEDIR)/wii/libogc/lwbt
export WIIUSEDIR := $(BASEDIR)/wii/libogc/wiiuse
export LIBWIIKEYB := $(BASEDIR)/wii/libogc/libwiikeyboard
export STUBSDIR := $(BASEDIR)/wii/libogc/lockstubs
export LIBS := $(BASEDIR)/wii/libogc/libs
export INCDIR := $(BASEDIR)/wii/libogc/include
export LIBDIR := $(LIBS)/$(PLATFORM)
#---------------------------------------------------------------------------------
BBALIB := $(LIBDIR)/libbba
OGCLIB := $(LIBDIR)/libogc
DBLIB := $(LIBDIR)/libdb
BTELIB := $(LIBDIR)/libbte
WIIUSELIB := $(LIBDIR)/libwiiuse
WIIKEYBLIB := $(LIBDIR)/libwiikeyboard
STUBSLIB := $(LIBDIR)/libgclibstubs
#---------------------------------------------------------------------------------
DEFAULTINCDIR := $(BASEDIR)/wii/libogc/include
DEFINCS := -I$(DEFAULTINCDIR)
INCLUDES := $(DEFINCS) \
-I$(BASEDIR)/wii/libogc \
-I$(DEFAULTINCDIR)/netif \
-I$(DEFAULTINCDIR)/ipv4 \
-I$(DEFAULTINCDIR)/sdcard \
-I$(DEFAULTINCDIR)/ogc \
-I$(DEFAULTINCDIR)/ogc/machine \
-I$(DEFAULTINCDIR)/bte \
-I$(DEFAULTINCDIR)/sdcard \
-I$(DEFAULTINCDIR)/wiikeyboard \
-I$(DEFAULTINCDIR)/wiiuse \
-I$(DEFAULTINCDIR)/di
MACHDEP := -DBIGENDIAN -DGEKKO -mcpu=750 -meabi -msdata=eabi -mhard-float -ffunction-sections -fdata-sections
ifeq ($(PLATFORM),wii)
MACHDEP += -DHW_RVL
endif
ifeq ($(PLATFORM),cube)
MACHDEP += -DHW_DOL
endif
CFLAGS := -DLIBOGC_INTERNAL -DNDEBUG -O2 -fno-strict-aliasing -mregnames -Wall $(MACHDEP) $(INCLUDES)
ASFLAGS := $(MACHDEP) -mregnames -D_LANGUAGE_ASSEMBLY $(INCLUDES)
#---------------------------------------------------------------------------------
VPATH := $(LWIPDIR) \
$(LWIPDIR)/arch/gc \
$(LWIPDIR)/arch/gc/netif \
$(LWIPDIR)/core \
$(LWIPDIR)/core/ipv4 \
$(LWIPDIR)/netif \
$(OGCDIR) \
$(DBDIR) \
$(DBDIR)/uIP \
$(BTEDIR) \
$(WIIUSEDIR) \
$(SDCARDDIR) \
$(LIBWIIKEYB) \
$(STUBSDIR)
#---------------------------------------------------------------------------------
SOURCES_LWIP := $(LWIPDIR)/network.c \
$(LWIPDIR)/netio.c \
$(LWIPDIR)/arch/gc/netif/gcif.c \
$(LWIPDIR)/core/inet.c \
$(LWIPDIR)/core/mem.c \
$(LWIPDIR)/core/dhcp.c \
$(LWIPDIR)/core/raw.c \
$(LWIPDIR)/core/memp.c \
$(LWIPDIR)/core/netif.c \
$(LWIPDIR)/core/pbuf.c \
$(LWIPDIR)/core/stats.c \
$(LWIPDIR)/core/sys.c \
$(LWIPDIR)/core/tcp.c \
$(LWIPDIR)/core/tcp_in.c \
$(LWIPDIR)/core/tcp_out.c \
$(LWIPDIR)/core/udp.c \
$(LWIPDIR)/core/ipv4/icmp.c \
$(LWIPDIR)/core/ipv4/ip.c \
$(LWIPDIR)/core/ipv4/ip_frag.c \
$(LWIPDIR)/core/ipv4/ip_addr.c \
$(LWIPDIR)/netif/etharp.c \
$(LWIPDIR)/netif/loopif.c
LWIPOBJ := $(SOURCES_LWIP:.c=.o)
#---------------------------------------------------------------------------------
SOURCES_OGC := \
$(OGCDIR)/console.c \
$(OGCDIR)/lwp_priority.c \
$(OGCDIR)/lwp_queue.c \
$(OGCDIR)/lwp_threadq.c \
$(OGCDIR)/lwp_threads.c \
$(OGCDIR)/lwp_sema.c \
$(OGCDIR)/lwp_messages.c \
$(OGCDIR)/lwp.c \
$(OGCDIR)/lwp_stack.c \
$(OGCDIR)/lwp_mutex.c \
$(OGCDIR)/lwp_watchdog.c \
$(OGCDIR)/lwp_wkspace.c \
$(OGCDIR)/lwp_objmgr.c \
$(OGCDIR)/lwp_heap.c \
$(OGCDIR)/sys_state.c \
$(OGCDIR)/exception.c \
$(OGCDIR)/irq.c \
$(OGCDIR)/semaphore.c \
$(OGCDIR)/video.c \
$(OGCDIR)/pad.c \
$(OGCDIR)/exi.c \
$(OGCDIR)/mutex.c \
$(OGCDIR)/arqueue.c \
$(OGCDIR)/arqmgr.c \
$(OGCDIR)/system.c \
$(OGCDIR)/cond.c \
$(OGCDIR)/gx.c \
$(OGCDIR)/gu.c \
$(OGCDIR)/audio.c \
$(OGCDIR)/cache.c \
$(OGCDIR)/decrementer.c \
$(OGCDIR)/message.c \
$(OGCDIR)/card.c \
$(OGCDIR)/aram.c \
$(OGCDIR)/depackrnc1.c \
$(OGCDIR)/dsp.c \
$(OGCDIR)/si.c \
$(OGCDIR)/tpl.c \
$(OGCDIR)/ipc.c \
$(OGCDIR)/console_font_8x16.c \
$(OGCDIR)/timesupp.c \
$(OGCDIR)/lock_supp.c \
$(OGCDIR)/newlibc.c \
$(OGCDIR)/usbgecko.c \
$(OGCDIR)/usbmouse.c \
$(OGCDIR)/sbrk.c \
$(OGCDIR)/malloc_lock.c \
$(OGCDIR)/kprintf.c \
$(OGCDIR)/stm.c \
$(OGCDIR)/ios.c \
$(OGCDIR)/es.c \
$(OGCDIR)/isfs.c \
$(OGCDIR)/usb.c \
$(OGCDIR)/network_common.c \
$(OGCDIR)/sdgecko_io.c \
$(OGCDIR)/sdgecko_buf.c \
$(OGCDIR)/gcsd.c \
$(OGCDIR)/argv.c \
$(OGCDIR)/network_wii.c \
$(OGCDIR)/wiisd.c \
$(OGCDIR)/conf.c \
$(OGCDIR)/usbstorage.c \
$(OGCDIR)/texconv.c \
$(OGCDIR)/wiilaunch.c
SOURCES_OGC_ASM := $(OGCDIR)/cache_asm.S \
$(OGCDIR)/decrementer_handler.S \
$(OGCDIR)/depackrnc.S \
$(OGCDIR)/exception_handler.S \
$(OGCDIR)/gu_psasm.S \
$(OGCDIR)/irq_handler.S \
$(OGCDIR)/lwp_handler.S \
$(OGCDIR)/ogc_crt0.S \
$(OGCDIR)/system_asm.S \
$(OGCDIR)/video_asm.S
ifneq ($(BUILD_LITE), 1)
SOURCES_OGC += $(OGCDIR)/dvd.c
endif
OGCOBJ := $(SOURCES_OGC:.c=.o) $(SOURCES_OGC_ASM:.S=.o)
#---------------------------------------------------------------------------------
SOURCES_DB := \
$(DBDIR)/uIP/uip_ip.c \
$(DBDIR)/uIP/uip_tcp.c \
$(DBDIR)/uIP/uip_pbuf.c \
$(DBDIR)/uIP/uip_netif.c \
$(DBDIR)/uIP/uip_arp.c \
$(DBDIR)/uIP/uip_arch.c \
$(DBDIR)/uIP/uip_icmp.c \
$(DBDIR)/uIP/memb.c \
$(DBDIR)/uIP/memr.c \
$(DBDIR)/uIP/bba.c \
$(DBDIR)/tcpip.c \
$(DBDIR)/debug.c \
$(DBDIR)/debug_handler.c \
$(DBDIR)/debug_supp.c \
$(DBDIR)/geckousb.c
DBOBJ := $(SOURCES_DB:.c=.o)
#---------------------------------------------------------------------------------
SOURCES_BTE := \
$(BTEDIR)/bte.c \
$(BTEDIR)/hci.c \
$(BTEDIR)/l2cap.c \
$(BTEDIR)/btmemb.c \
$(BTEDIR)/btmemr.c \
$(BTEDIR)/btpbuf.c \
$(BTEDIR)/physbusif.c
BTEOBJ := $(SOURCES_BTE:.c=.o)
#---------------------------------------------------------------------------------
SOURCES_WIIUSE := \
$(WIIUSEDIR)/classic.c \
$(WIIUSEDIR)/dynamics.c \
$(WIIUSEDIR)/events.c \
$(WIIUSEDIR)/io.c \
$(WIIUSEDIR)/io_wii.c \
$(WIIUSEDIR)/ir.c \
$(WIIUSEDIR)/nunchuk.c \
$(WIIUSEDIR)/wiiuse.c \
$(WIIUSEDIR)/speaker.c \
$(WIIUSEDIR)/wpad.c \
$(WIIUSEDIR)/motion_plus.c
WIIUSEOBJ := $(SOURCES_WIIUSE:.c=.o)
#---------------------------------------------------------------------------------
SOURCES_WIIKEYB = $(LIBWIIKEYB)/usbkeyboard.c \
$(LIBWIIKEYB)/keyboard.c \
$(LIBWIIKEYB)/ukbdmap.c \
$(LIBWIIKEYB)/wskbdutil.c
WIIKEYBLIBOBJ := $(SOURCES_WIIKEYB:.c=.o)
LIBRARIES := $(OGCLIB).a $(DBLIB).a
ifeq ($(PLATFORM),cube)
LIBRARIES += $(BBALIB).a
endif
ifeq ($(PLATFORM),wii)
LIBRARIES += $(BTELIB).a $(WIIUSELIB).a $(WIIKEYBLIB).a
endif
all: $(LIBRARIES)
#---------------------------------------------------------------------------------
$(BBALIB).a: $(LWIPOBJ)
#---------------------------------------------------------------------------------
$(OGCLIB).a: $(OGCOBJ)
#---------------------------------------------------------------------------------
$(DBLIB).a: $(DBOBJ)
#---------------------------------------------------------------------------------
$(WIIKEYBLIB).a: $(WIIKEYBLIBOBJ)
#---------------------------------------------------------------------------------
$(BTELIB).a: $(BTEOBJ)
#---------------------------------------------------------------------------------
$(WIIUSELIB).a: $(WIIUSEOBJ)
#---------------------------------------------------------------------------------
#---------------------------------------------------------------------------------
clean:
#---------------------------------------------------------------------------------
rm -fr $(LWIPOBJ) $(OGCOBJ) $(DBOBJ) $(BTEOBJ) $(WIIUSEOBJ) $(WIIKEYBLIBOBJ)
rm -f *.map

View File

@ -1,4 +1,4 @@
RARCH_VERSION = "0.9.9.3"
RARCH_VERSION = "1.6.7.0"
DEBUG = 0

View File

@ -1,4 +1,4 @@
RARCH_VERSION = "1.6.5.0"
RARCH_VERSION = "1.6.7.0"
#which compiler to build with - GCC or SNC
#set to GCC for debug builds for use with debugger

View File

@ -1,4 +1,4 @@
RARCH_VERSION = "0.9.9.3"
RARCH_VERSION = "1.6.7.0"
#which compiler to build with - GCC or SNC
#set to GCC for debug builds for use with debugger

View File

@ -1,4 +1,4 @@
RARCH_VERSION = "1.6.5.0"
RARCH_VERSION = "1.6.7.0"
DEBUG = 0
HAVE_LOGGER = 0

View File

@ -6,6 +6,7 @@
DEBUG = 0
HAVE_LOGGER = 0
HAVE_FILE_LOGGER = 0
EXTERNAL_LIBOGC = 0
# system platform
system_platform = unix
@ -29,13 +30,23 @@ ELF2DOL = $(DEVKITPPC)/bin/elf2dol$(EXE_EXT)
DOL_TARGET := retroarch-salamander_wii.dol
ELF_TARGET := retroarch-salamander_wii.elf
INCLUDE := -I. -I$(DEVKITPRO)/libogc/include -Ilibretro-common/include -Ideps/libz
INCLUDE := -I. -Ilibretro-common/include -Ideps/libz
ifeq ($(EXTERNAL_LIBOGC), 1)
INCLUDE += -I$(DEVKITPRO)/libogc/include
LIBDIRS := -L$(DEVKITPRO)/libogc/lib/wii -L.
else
INCLUDE += -Iwii/libogc/include
LIBDIRS := -Lwii/libogc/libs/wii -L.
endif
MACHDEP := -DGEKKO -DHW_RVL -mrvl -mcpu=750 -meabi -mhard-float
CFLAGS += -Wall -std=gnu99 $(MACHDEP) $(INCLUDE)
LDFLAGS := $(MACHDEP) -Wl,-Map,$(notdir $(ELF_TARGET)).map
LIBS := -lfat -lwiiuse -logc -lbte
LIBS := -lwiiuse -logc -lbte
ifeq ($(EXTERNAL_LIBOGC), 1)
LIBS += -lfat
endif
APP_BOOTER_DIR = wii/app_booter
@ -59,6 +70,20 @@ OBJ = frontend/frontend_salamander.o \
verbosity.o \
$(APP_BOOTER_DIR)/app_booter.binobj
ifeq ($(EXTERNAL_LIBOGC), 1)
else
OBJ += wii/libogc/libfat/cache.o \
wii/libogc/libfat/directory.o \
wii/libogc/libfat/disc.o \
wii/libogc/libfat/fatdir.o \
wii/libogc/libfat/fatfile.o \
wii/libogc/libfat/file_allocation_table.o \
wii/libogc/libfat/filetime.o \
wii/libogc/libfat/libfat.o \
wii/libogc/libfat/lock.o \
wii/libogc/libfat/partition.o
endif
ifeq ($(HAVE_LOGGER), 1)
CFLAGS += -DHAVE_LOGGER
CFLAGS += -DPC_DEVELOPMENT_IP_ADDRESS=\"$(PC_DEVELOPMENT_IP_ADDRESS)\" -DPC_DEVELOPMENT_UDP_PORT=$(PC_DEVELOPMENT_UDP_PORT)

View File

@ -8,6 +8,12 @@ Popular examples of implementations for this API includes videogame system emula
more generalized 3D programs.
These programs are instantiated as dynamic libraries. We refer to these as "libretro cores".
![XMB menu driver](http://i.imgur.com/BMR1xxr.png "XMB menu driver")
![rgui menu driver](http://i.imgur.com/X3CbBKa.png "rgui menu driver")
![glui menu driver](http://i.imgur.com/ooqv8rw.png "glui menu driver")
## libretro
[libretro](http://libretro.com) is an API that exposes generic audio/video/input callbacks.

View File

@ -16,7 +16,9 @@
*/
#include <stdio.h>
#if !defined(__FreeBSD__) || __FreeBSD__ < 5
#include <malloc.h>
#endif
#include <string.h>
#include <assert.h>
#include <stddef.h>
@ -28,7 +30,9 @@
#include <sys/time.h>
#include <sys/ioctl.h>
#ifndef __FreeBSD__
#include <asm/types.h>
#endif
#include <linux/videodev2.h>
#include <memmap.h>

View File

@ -2194,6 +2194,8 @@ TODO: Add a setting for these tweaks */
NULL,
NULL
);
playlist_write_file(g_defaults.content_favorites);
runloop_msg_queue_push(msg_hash_to_str(MSG_ADDED_TO_FAVORITES), 1, 180, true);
break;
case CMD_EVENT_RESTART_RETROARCH:
if (!frontend_driver_set_fork(FRONTEND_FORK_RESTART))

View File

@ -58,6 +58,10 @@ static bool bundle_assets_extract_enable = true;
static bool bundle_assets_extract_enable = false;
#endif
#ifdef HAVE_MATERIALUI
static bool materialui_icons_enable = true;
#endif
static const bool def_history_list_enable = true;
static const bool def_playlist_entry_remove = true;
@ -267,6 +271,8 @@ static bool xmb_show_add = true;
#endif
#endif
static float menu_framebuffer_opacity = 0.900;
static float menu_wallpaper_opacity = 0.300;
static float menu_footer_opacity = 1.000;
@ -314,6 +320,8 @@ static unsigned input_backtouch_enable = false;
static unsigned input_backtouch_toggle = false;
#endif
static bool show_physical_inputs = true;
static bool all_users_control_menu = false;
#if defined(ANDROID) || defined(_WIN32)

View File

@ -1192,6 +1192,9 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings,
SETTING_BOOL("menu_battery_level_enable", &settings->bools.menu_battery_level_enable, true, true, false);
SETTING_BOOL("menu_core_enable", &settings->bools.menu_core_enable, true, true, false);
SETTING_BOOL("menu_dynamic_wallpaper_enable", &settings->bools.menu_dynamic_wallpaper_enable, true, false, false);
#ifdef HAVE_MATERIALUI
SETTING_BOOL("materialui_icons_enable", &settings->bools.menu_materialui_icons_enable, true, materialui_icons_enable, false);
#endif
#ifdef HAVE_XMB
SETTING_BOOL("xmb_shadows_enable", &settings->bools.menu_xmb_shadows_enable, true, xmb_shadows_enable, false);
SETTING_BOOL("xmb_show_settings", &settings->bools.menu_xmb_show_settings, true, xmb_show_settings, false);
@ -1297,6 +1300,7 @@ static struct config_float_setting *populate_settings_float(settings_t *settings
#endif
#ifdef HAVE_MENU
SETTING_FLOAT("menu_wallpaper_opacity", &settings->floats.menu_wallpaper_opacity, true, menu_wallpaper_opacity, false);
SETTING_FLOAT("menu_framebuffer_opacity", &settings->floats.menu_framebuffer_opacity, true, menu_framebuffer_opacity, false);
SETTING_FLOAT("menu_footer_opacity", &settings->floats.menu_footer_opacity, true, menu_footer_opacity, false);
SETTING_FLOAT("menu_header_opacity", &settings->floats.menu_header_opacity, true, menu_header_opacity, false);
#endif

View File

@ -123,6 +123,7 @@ typedef struct settings
bool menu_horizontal_animation;
bool menu_show_online_updater;
bool menu_show_core_updater;
bool menu_materialui_icons_enable;
bool menu_xmb_shadows_enable;
bool menu_xmb_show_settings;
bool menu_xmb_show_favorites;
@ -238,6 +239,7 @@ typedef struct settings
float video_msg_color_b;
float menu_wallpaper_opacity;
float menu_framebuffer_opacity;
float menu_footer_opacity;
float menu_header_opacity;

View File

@ -1,6 +1,6 @@
#!/bin/sh
RARCH_VERSION=1.6.5
RARCH_VERSION=1.6.7
PLATFORM=$1
SALAMANDER=no
MAKEFILE_GRIFFIN=no

View File

@ -76,29 +76,29 @@ enum
#if defined(HAVE_LOGGER) || defined(HAVE_FILE_LOGGER)
static devoptab_t dotab_stdout = {
"stdout", // device name
0, // size of file structure
NULL, // device open
NULL, // device close
NULL, // device write
NULL, // device read
NULL, // device seek
NULL, // device fstat
NULL, // device stat
NULL, // device link
NULL, // device unlink
NULL, // device chdir
NULL, // device rename
NULL, // device mkdir
0, // dirStateSize
NULL, // device diropen_r
NULL, // device dirreset_r
NULL, // device dirnext_r
NULL, // device dirclose_r
NULL, // device statvfs_r
NULL, // device ftrunctate_r
NULL, // device fsync_r
NULL, // deviceData;
"stdout", /* device name */
0, /* size of file structure */
NULL, /* device open */
NULL, /* device close */
NULL, /* device write */
NULL, /* device read */
NULL, /* device seek */
NULL, /* device fstat */
NULL, /* device stat */
NULL, /* device link */
NULL, /* device unlink */
NULL, /* device chdir */
NULL, /* device rename */
NULL, /* device mkdir */
0, /* dirStateSize */
NULL, /* device diropen_r */
NULL, /* device dirreset_r */
NULL, /* device dirnext_r */
NULL, /* device dirclose_r */
NULL, /* device statvfs_r */
NULL, /* device ftrunctate_r */
NULL, /* device fsync_r */
NULL, /* deviceData; */
};
#endif
@ -309,7 +309,9 @@ static void frontend_gx_init(void *data)
__exception_setreload(8);
#endif
#ifdef HW_RVL
fatInitDefault();
#endif
#ifdef HAVE_LOGGER
devoptab_list[STD_OUT] = &dotab_stdout;

View File

@ -73,10 +73,15 @@ static void dol_copy_argv_path(const char *dolpath, const char *argpath)
len += t_len;
}
/* a relative path */
else if (strstr(dolpath, "sd:/") != dolpath && strstr(dolpath, "usb:/") != dolpath &&
strstr(dolpath, "carda:/") != dolpath && strstr(dolpath, "cardb:/") != dolpath)
else if (
(strstr(dolpath, "sd:/") != dolpath) &&
(strstr(dolpath, "usb:/") != dolpath) &&
(strstr(dolpath, "carda:/") != dolpath) &&
(strstr(dolpath, "cardb:/") != dolpath)
)
{
fill_pathname_parent_dir(tmp, __system_argv->argv[0], sizeof(tmp));
fill_pathname_parent_dir(tmp,
__system_argv->argv[0], sizeof(tmp));
t_len = strlen(tmp);
memcpy(cmdline, tmp, t_len);
len += t_len;

View File

@ -21,6 +21,14 @@
typedef struct gdi
{
WNDCLASSEX wndclass;
HDC winDC;
HDC memDC;
HBITMAP bmp;
HBITMAP bmp_old;
unsigned video_width;
unsigned video_height;
unsigned screen_width;
unsigned screen_height;
} gdi_t;
#endif

View File

@ -21,6 +21,7 @@
#endif
#include "win32_common.h"
#include "gdi_common.h"
#include "../../frontend/frontend_driver.h"
#include "../../configuration.h"
#include "../../verbosity.h"
@ -609,41 +610,47 @@ LRESULT CALLBACK WndProcGDI(HWND hwnd, UINT message,
{
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
gdi_t *gdi = (gdi_t*)video_driver_get_ptr(false);
if (gdi && gdi->memDC)
{
gdi->bmp_old = (HBITMAP)SelectObject(gdi->memDC, gdi->bmp);
#ifdef HAVE_MENU
if (menu_driver_is_alive() && !gdi_has_menu_frame())
{
RECT rect;
TRIVERTEX vertex[2];
GRADIENT_RECT gRect;
if (menu_driver_is_alive() && !gdi_has_menu_frame())
{
/* draw menu contents behind a gradient background */
if (gdi && gdi->memDC)
{
RECT rect;
GetClientRect(hwnd, &rect);
GetClientRect(hwnd, &rect);
StretchBlt(gdi->winDC,
0, 0,
gdi->screen_width, gdi->screen_height,
gdi->memDC, 0, 0, gdi->video_width, gdi->video_height, SRCCOPY);
vertex[0].x = rect.left;
vertex[0].y = rect.top;
vertex[0].Red = 1 << 8;
vertex[0].Green = 81 << 8;
vertex[0].Blue = 127 << 8;
vertex[0].Alpha = 0;
vertex[1].x = rect.right;
vertex[1].y = rect.bottom;
vertex[1].Red = 0;
vertex[1].Green = 1 << 8;
vertex[1].Blue = 33 << 8;
vertex[1].Alpha = 0;
gRect.LowerRight = 0;
gRect.UpperLeft = 1;
GradientFill(hdc, vertex, 2, &gRect, 1, GRADIENT_FILL_RECT_V);
}
HBRUSH brush = CreateSolidBrush(RGB(1,81,127));
FillRect(gdi->memDC, &rect, brush);
DeleteObject(brush);
}
}
else
#endif
{
/* draw video content */
gdi->bmp_old = (HBITMAP)SelectObject(gdi->memDC, gdi->bmp);
EndPaint(hwnd, &ps);
break;
StretchBlt(gdi->winDC,
0, 0,
gdi->screen_width, gdi->screen_height,
gdi->memDC, 0, 0, gdi->video_width, gdi->video_height, SRCCOPY);
}
SelectObject(gdi->memDC, gdi->bmp_old);
}
break;
}
case WM_DROPFILES:
case WM_SYSCOMMAND:

View File

@ -160,7 +160,6 @@ static bool gdi_gfx_frame(void *data, const void *frame,
unsigned pitch, const char *msg, video_frame_info_t *video_info)
{
gfx_ctx_mode_t mode;
RECT rect;
const void *frame_to_copy = frame;
unsigned width = 0;
unsigned height = 0;
@ -207,66 +206,77 @@ static bool gdi_gfx_frame(void *data, const void *frame,
draw = false;
}
GetClientRect(hwnd, &rect);
if (hwnd && !gdi->winDC)
{
gdi->winDC = GetDC(hwnd);
gdi->memDC = CreateCompatibleDC(gdi->winDC);
gdi->video_width = width;
gdi->video_height = height;
gdi->bmp = CreateCompatibleBitmap(gdi->winDC, gdi->video_width, gdi->video_height);
}
gdi->bmp_old = (HBITMAP)SelectObject(gdi->memDC, gdi->bmp);
if (gdi->video_width != width || gdi->video_height != height)
{
SelectObject(gdi->memDC, gdi->bmp_old);
DeleteObject(gdi->bmp);
gdi->video_width = width;
gdi->video_height = height;
gdi->bmp = CreateCompatibleBitmap(gdi->winDC, gdi->video_width, gdi->video_height);
gdi->bmp_old = (HBITMAP)SelectObject(gdi->memDC, gdi->bmp);
}
video_context_driver_get_video_size(&mode);
gdi->screen_width = mode.width;
gdi->screen_height = mode.height;
BITMAPINFO *info = (BITMAPINFO*)calloc(1, sizeof(*info) + (3 * sizeof(RGBQUAD)));
info->bmiHeader.biBitCount = bits;
info->bmiHeader.biWidth = pitch / (bits / 8);
info->bmiHeader.biHeight = -height;
info->bmiHeader.biPlanes = 1;
info->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
info->bmiHeader.biSizeImage = 0;
if (bits == 16)
{
unsigned *masks = (unsigned*)info->bmiColors;
info->bmiHeader.biCompression = BI_BITFIELDS;
/* default 16-bit format on Windows is XRGB1555 */
if (frame_to_copy == gdi_menu_frame)
{
/* map RGB444 color bits for RGUI */
masks[0] = 0xF000;
masks[1] = 0x0F00;
masks[2] = 0x00F0;
}
else
{
/* map RGB565 color bits for core */
masks[0] = 0xF800;
masks[1] = 0x07E0;
masks[2] = 0x001F;
}
}
else
info->bmiHeader.biCompression = BI_RGB;
if (draw)
{
HDC winDC = GetDC(hwnd);
HDC memDC = CreateCompatibleDC(winDC);
HBITMAP bmp = CreateCompatibleBitmap(winDC, width, height);
BITMAPINFO *info = (BITMAPINFO*)calloc(1, sizeof(*info) + (3 * sizeof(RGBQUAD)));
HBITMAP bmp_old = (HBITMAP)SelectObject(memDC, bmp);
info->bmiHeader.biBitCount = bits;
info->bmiHeader.biWidth = pitch / (bits / 8);
info->bmiHeader.biHeight = -height;
info->bmiHeader.biPlanes = 1;
info->bmiHeader.biSize = sizeof(BITMAPINFOHEADER) + (3 * sizeof(RGBQUAD));
info->bmiHeader.biSizeImage = 0;
if (bits == 16)
{
unsigned *masks = (unsigned*)info->bmiColors;
info->bmiHeader.biCompression = BI_BITFIELDS;
/* default 16-bit format on Windows is XRGB1555 */
if (frame_to_copy == gdi_menu_frame)
{
/* map RGB444 color bits for RGUI */
masks[0] = 0xF000;
masks[1] = 0x0F00;
masks[2] = 0x00F0;
}
else
{
/* map RGB565 color bits for core */
masks[0] = 0xF800;
masks[1] = 0x07E0;
masks[2] = 0x001F;
}
}
else
info->bmiHeader.biCompression = BI_RGB;
StretchDIBits(memDC, 0, 0, width, height, 0, 0, width, height,
StretchDIBits(gdi->memDC, 0, 0, width, height, 0, 0, width, height,
frame_to_copy, info, DIB_RGB_COLORS, SRCCOPY);
StretchBlt(winDC,
0, 0,
mode.width, mode.height,
memDC, 0, 0, width, height, SRCCOPY);
SelectObject(memDC, bmp_old);
DeleteObject(bmp);
DeleteDC(memDC);
ReleaseDC(hwnd, winDC);
free(info);
}
SelectObject(gdi->memDC, gdi->bmp_old);
free(info);
if (msg)
font_driver_render_msg(video_info, NULL, msg, NULL);
@ -330,6 +340,7 @@ static bool gdi_gfx_has_windowed(void *data)
static void gdi_gfx_free(void *data)
{
gdi_t *gdi = (gdi_t*)data;
HWND hwnd = win32_get_window();
if (gdi_menu_frame)
{
@ -340,6 +351,19 @@ static void gdi_gfx_free(void *data)
if (!gdi)
return;
if (gdi->memDC)
{
DeleteObject(gdi->bmp);
DeleteDC(gdi->memDC);
gdi->memDC = 0;
}
if (hwnd && gdi->winDC)
{
ReleaseDC(hwnd, gdi->winDC);
gdi->winDC = 0;
}
font_driver_free_osd();
video_context_driver_free();
free(gdi);

View File

@ -367,11 +367,8 @@ static void gfx_ctx_wgl_swap_buffers(void *data, void *data2)
switch (win32_api)
{
case GFX_CTX_OPENGL_API:
#ifdef HAVE_OPENGL
SwapBuffers(win32_hdc);
#endif
break;
case GFX_CTX_VULKAN_API:
#ifdef HAVE_VULKAN
vulkan_present(&win32_vk, win32_vk.context.current_swapchain_index);

View File

@ -84,13 +84,11 @@ static void gdi_render_msg(
void *data, const char *msg,
const void *userdata)
{
HDC hdc;
float x, y, scale;
gdi_raster_t *font = (gdi_raster_t*)data;
unsigned newX, newY, len;
unsigned align;
const struct font_params *params = (const struct font_params*)userdata;
HWND hwnd = win32_get_window();
unsigned width = video_info->width;
unsigned height = video_info->height;
@ -133,12 +131,18 @@ static void gdi_render_msg(
}
newY = height - (y * height * scale);
hdc = GetDC(hwnd);
SetBkMode(hdc, TRANSPARENT);
SetTextColor(hdc, RGB(255,255,255));
TextOut(hdc, newX, newY, msg, len);
ReleaseDC(hwnd, hdc);
uint64_t frame_count = 0;
bool is_alive = false;
bool is_focused = false;
video_driver_get_status(&frame_count, &is_alive, &is_focused);
font->gdi->bmp_old = (HBITMAP)SelectObject(font->gdi->memDC, font->gdi->bmp);
SetBkMode(font->gdi->memDC, TRANSPARENT);
SetTextColor(font->gdi->memDC, RGB(255,255,255));
TextOut(font->gdi->memDC, newX, newY, msg, len);
SelectObject(font->gdi->memDC, font->gdi->bmp_old);
}
static void gdi_font_flush_block(unsigned width, unsigned height, void* data)

View File

@ -2524,7 +2524,8 @@ void video_driver_build_info(video_frame_info_t *video_info)
video_info->battery_level_enable = settings->bools.menu_battery_level_enable;
video_info->xmb_shadows_enable = settings->bools.menu_xmb_shadows_enable;
video_info->xmb_alpha_factor = settings->uints.menu_xmb_alpha_factor;
video_info->menu_wallpaper_opacity = settings->floats.menu_wallpaper_opacity;
video_info->menu_wallpaper_opacity = settings->floats.menu_wallpaper_opacity;
video_info->menu_framebuffer_opacity = settings->floats.menu_framebuffer_opacity;
video_info->libretro_running = core_is_game_loaded();
#else
@ -2539,6 +2540,7 @@ void video_driver_build_info(video_frame_info_t *video_info)
video_info->battery_level_enable = false;
video_info->xmb_shadows_enable = false;
video_info->xmb_alpha_factor = 0.0f;
video_info->menu_framebuffer_opacity = 0.0f;
video_info->menu_wallpaper_opacity = 0.0f;
#endif

View File

@ -447,14 +447,15 @@ typedef struct video_frame_info
unsigned custom_vp_full_height;
float menu_wallpaper_opacity;
float menu_framebuffer_opacity;
float menu_header_opacity;
float menu_footer_opacity;
float refresh_rate;
float font_msg_pos_x;
float font_msg_pos_y;
float font_msg_color_r;
float font_msg_color_g;
float font_msg_color_b;
float menu_header_opacity;
float menu_footer_opacity;
float xmb_alpha_factor;
char fps_text[128];

View File

@ -45,6 +45,21 @@ CONSOLE EXTENSIONS
#include "../memory/ngc/ssaram.c"
#endif
#ifdef INTERNAL_LIBOGC
#ifdef HW_RVL
#include "../wii/libogc/libfat/cache.c"
#include "../wii/libogc/libfat/directory.c"
#include "../wii/libogc/libfat/disc.c"
#include "../wii/libogc/libfat/fatdir.c"
#include "../wii/libogc/libfat/fatfile.c"
#include "../wii/libogc/libfat/file_allocation_table.c"
#include "../wii/libogc/libfat/filetime.c"
#include "../wii/libogc/libfat/libfat.c"
#include "../wii/libogc/libfat/lock.c"
#include "../wii/libogc/libfat/partition.c"
#endif
#endif
#endif
/*============================================================

View File

@ -22,6 +22,7 @@
#include <retro_miscellaneous.h>
#include <wiiu/nsyskbd.h>
#include <wiiu/vpad.h>
#ifdef HAVE_CONFIG_H
#include "../../config.h"
@ -96,18 +97,37 @@ void kb_key_callback(KBDKeyEvent *key)
RETRO_DEVICE_KEYBOARD);
}
/* TODO: emulate a relative mouse. This is suprisingly
hard to get working nicely.
*/
static int16_t wiiu_pointer_device_state(wiiu_input_t* wiiu, unsigned id)
{
switch (id)
{
case RETRO_DEVICE_ID_POINTER_PRESSED:
return wiiu->joypad->get_buttons(0) & VPAD_BUTTON_TOUCH;
case RETRO_DEVICE_ID_POINTER_X:
return wiiu->joypad->axis(0, 0xFFFF0004UL);
case RETRO_DEVICE_ID_POINTER_Y:
return wiiu->joypad->axis(0, 0xFFFF0005UL);
}
return 0;
}
static void wiiu_input_poll(void *data)
{
wiiu_input_t *wiiu = (wiiu_input_t*)data;
if (wiiu && wiiu->joypad)
wiiu->joypad->poll();
wiiu->joypad->poll();
}
static bool wiiu_key_pressed(int key)
{
bool ret = false;
if (key >= RETROK_LAST)
return false;
@ -127,7 +147,7 @@ static int16_t wiiu_input_state(void *data,
if(!wiiu || !(port < MAX_PADS) || !binds || !binds[port])
return 0;
switch (device)
{
case RETRO_DEVICE_JOYPAD:
@ -140,6 +160,9 @@ static int16_t wiiu_input_state(void *data,
return input_joypad_analog(wiiu->joypad,
joypad_info, port, idx, id, binds[port]);
break;
case RETRO_DEVICE_POINTER:
case RARCH_DEVICE_POINTER_SCREEN:
return wiiu_pointer_device_state(wiiu, id);
}
return 0;
@ -151,7 +174,7 @@ static void wiiu_input_free_input(void *data)
if (wiiu && wiiu->joypad)
wiiu->joypad->destroy();
KBDTeardown();
free(data);
@ -165,10 +188,10 @@ static void* wiiu_input_init(const char *joypad_driver)
DEBUG_STR(joypad_driver);
wiiu->joypad = input_joypad_init_driver(joypad_driver, wiiu);
KBDSetup(&kb_connection_callback,
&kb_disconnection_callback,&kb_key_callback);
input_keymaps_init_keyboard_lut(rarch_key_map_wiiu);
return wiiu;
@ -186,9 +209,10 @@ static uint64_t wiiu_input_get_capabilities(void *data)
{
(void)data;
return (1 << RETRO_DEVICE_JOYPAD) |
(1 << RETRO_DEVICE_ANALOG) |
(1 << RETRO_DEVICE_KEYBOARD);
return (1 << RETRO_DEVICE_JOYPAD) |
(1 << RETRO_DEVICE_ANALOG) |
(1 << RETRO_DEVICE_KEYBOARD) |
(1 << RETRO_DEVICE_POINTER);
}
static const input_device_driver_t *wiiu_input_get_joypad_driver(void *data)

View File

@ -29,6 +29,7 @@
#include "../../tasks/tasks_internal.h"
#include "../../retroarch.h"
#include "../../command.h"
#include "../../gfx/video_driver.h"
#include "string.h"
#include "wiiu_dbg.h"
@ -57,7 +58,8 @@ static uint8_t pad_type[KPAD_COUNT] = {WIIUINPUT_TYPE_NONE, WIIUINPUT_TYPE_NONE,
static uint8_t hid_status[HID_COUNT];
static InputData hid_data[HID_COUNT];
static int16_t analog_state[MAX_PADS][2][2];
/* 3 axis - one for touch/future IR support? */
static int16_t analog_state[MAX_PADS][3][2];
static bool wiiu_pad_inited = false;
static char hidName[HID_COUNT][255];
@ -135,12 +137,12 @@ static int16_t wiiu_joypad_axis(unsigned port_num, uint32_t joyaxis)
if (joyaxis == AXIS_NONE || port_num >= MAX_PADS)
return 0;
if (AXIS_NEG_GET(joyaxis) < 4)
if (AXIS_NEG_GET(joyaxis) < 6)
{
axis = AXIS_NEG_GET(joyaxis);
is_neg = true;
}
else if (AXIS_POS_GET(joyaxis) < 4)
else if (AXIS_POS_GET(joyaxis) < 6)
{
axis = AXIS_POS_GET(joyaxis);
is_pos = true;
@ -163,6 +165,14 @@ static int16_t wiiu_joypad_axis(unsigned port_num, uint32_t joyaxis)
case 3:
val = analog_state[port_num][1][1];
break;
case 4:
val = analog_state[port_num][2][0];
break;
case 5:
val = analog_state[port_num][2][1];
break;
}
if (is_neg && val > 0)
@ -173,6 +183,12 @@ static int16_t wiiu_joypad_axis(unsigned port_num, uint32_t joyaxis)
return val;
}
static float scaleTP(float oldMin, float oldMax, float newMin, float newMax, float val) {
float oldRange = (oldMax - oldMin);
float newRange = (newMax - newMin);
return (((val - oldMin) * newRange) / oldRange) + newMin;
}
static void wiiu_joypad_poll(void)
{
int i, c, result;
@ -183,7 +199,7 @@ static void wiiu_joypad_poll(void)
if (!vpadError)
{
pad_state[0] = vpad.hold & ~0x7F800000; /* clear out emulated analog sticks */
pad_state[0] = vpad.hold & VPAD_MASK_BUTTONS; /* buttons only */
analog_state[0][RETRO_DEVICE_INDEX_ANALOG_LEFT] [RETRO_DEVICE_ID_ANALOG_X] = vpad.leftStick.x * 0x7FF0;
analog_state[0][RETRO_DEVICE_INDEX_ANALOG_LEFT] [RETRO_DEVICE_ID_ANALOG_Y] = vpad.leftStick.y * 0x7FF0;
analog_state[0][RETRO_DEVICE_INDEX_ANALOG_RIGHT] [RETRO_DEVICE_ID_ANALOG_X] = vpad.rightStick.x * 0x7FF0;
@ -191,8 +207,28 @@ static void wiiu_joypad_poll(void)
BIT64_CLEAR(lifecycle_state, RARCH_MENU_TOGGLE);
if ((vpad.tpNormal.touched) && (vpad.tpNormal.x > 200) && (vpad.tpNormal.validity) == 0)
BIT64_SET(lifecycle_state, RARCH_MENU_TOGGLE);
/* You can only call VPADData once every loop, else the second one
won't get any data. Thus; I had to hack touch support into the existing
joystick API. Woo-hoo? Misplaced requests for touch axis are filtered
out in wiiu_input.
*/
if (vpad.tpNormal.touched && vpad.tpNormal.validity == VPAD_VALID) {
struct video_viewport vp = {0};
video_driver_get_viewport_info(&vp);
VPADTouchData cal = {0};
/* Calibrates data to a 720p screen, seems to clamp outer 12px */
VPADGetTPCalibratedPoint(0, &cal, &(vpad.tpNormal));
/* Calibrate to viewport and save as axis 2 (idx 4,5) */
analog_state[0][2][0] = (int16_t)scaleTP(12.0f, 1268.0f, 0.0f, (float)(vp.full_width), (float)cal.x);
analog_state[0][2][1] = (int16_t)scaleTP(12.0f, 708.0f, 0.0f, (float)(vp.full_height), (float)cal.y);
/* Emulating a button for touch; lets people assign it to menu
for that traditional RetroArch Wii U feel */
pad_state[0] |= VPAD_BUTTON_TOUCH;
} else {
/* This is probably 0 anyway */
pad_state[0] &= ~VPAD_BUTTON_TOUCH;
}
/* panic button */
if ((vpad.hold & (VPAD_BUTTON_R | VPAD_BUTTON_L | VPAD_BUTTON_STICK_R | VPAD_BUTTON_STICK_L))

View File

@ -91,7 +91,7 @@ enum rarch_input_keyboard_ctl_state
struct retro_keybind
{
bool valid;
unsigned id;
uint16_t id;
enum msg_hash_enums enum_idx;
enum retro_key key;
@ -120,7 +120,7 @@ struct retro_keybind
typedef struct rarch_joypad_info
{
unsigned joy_idx;
uint16_t joy_idx;
const struct retro_keybind *auto_binds;
float axis_threshold;
} rarch_joypad_info_t;

View File

@ -3021,3 +3021,27 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME,
"Rename the title of the entry.")
MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME,
"Rename")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY,
"Framebuffer Opacity")
MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY,
"Modify the opacity of the framebuffer.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES,
"Favorites")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES,
"Content which you have added to 'Favorites' will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC,
"Music")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC,
"Music which has been previously played will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES,
"Image")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES,
"Images which have been previously viewed will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO,
"Video")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO,
"Videos which have been previously played will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE,
"Menu Icons")
MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE,
"Enable/disable the menu icons shown at the lefthand side of the menu entries.")

View File

@ -3021,3 +3021,27 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME,
"Rename the title of the entry.")
MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME,
"Rename")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY,
"Framebuffer Opacity")
MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY,
"Modify the opacity of the framebuffer.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES,
"Favorites")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES,
"Content which you have added to 'Favorites' will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC,
"Music")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC,
"Music which has been previously played will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES,
"Image")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES,
"Images which have been previously viewed will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO,
"Video")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO,
"Videos which have been previously played will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE,
"Menu Icons")
MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE,
"Enable/disable the menu icons shown at the lefthand side of the menu entries.")

View File

@ -3015,3 +3015,27 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME,
"Rename the title of the entry.")
MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME,
"Rename")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY,
"Framebuffer Opacity")
MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY,
"Modify the opacity of the framebuffer.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES,
"Favorites")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES,
"Content which you have added to 'Favorites' will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC,
"Music")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC,
"Music which has been previously played will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES,
"Image")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES,
"Images which have been previously viewed will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO,
"Video")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO,
"Videos which have been previously played will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE,
"Menu Icons")
MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE,
"Enable/disable the menu icons shown at the lefthand side of the menu entries.")

View File

@ -2884,3 +2884,27 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME,
"Rename the title of the entry.")
MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME,
"Rename")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY,
"Framebuffer Opacity")
MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY,
"Modify the opacity of the framebuffer.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES,
"Favorites")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES,
"Content which you have added to 'Favorites' will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC,
"Music")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC,
"Music which has been previously played will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES,
"Image")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES,
"Images which have been previously viewed will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO,
"Video")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO,
"Videos which have been previously played will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE,
"Menu Icons")
MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE,
"Enable/disable the menu icons shown at the lefthand side of the menu entries.")

View File

@ -3053,3 +3053,27 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME,
"Rename the title of the entry.")
MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME,
"Rename")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY,
"Framebuffer Opacity")
MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY,
"Modify the opacity of the framebuffer.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES,
"Favorites")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES,
"Content which you have added to 'Favorites' will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC,
"Music")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC,
"Music which has been previously played will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES,
"Image")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES,
"Images which have been previously viewed will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO,
"Video")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO,
"Videos which have been previously played will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE,
"Menu Icons")
MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE,
"Enable/disable the menu icons shown at the lefthand side of the menu entries.")

File diff suppressed because it is too large Load Diff

View File

@ -3007,3 +3007,27 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME,
"Rename the title of the entry.")
MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME,
"Rename")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY,
"Framebuffer Opacity")
MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY,
"Modify the opacity of the framebuffer.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES,
"Favorites")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES,
"Content which you have added to 'Favorites' will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC,
"Music")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC,
"Music which has been previously played will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES,
"Image")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES,
"Images which have been previously viewed will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO,
"Video")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO,
"Videos which have been previously played will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE,
"Menu Icons")
MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE,
"Enable/disable the menu icons shown at the lefthand side of the menu entries.")

View File

@ -3016,3 +3016,27 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME,
"Rename the title of the entry.")
MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME,
"Rename")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY,
"Framebuffer Opacity")
MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY,
"Modify the opacity of the framebuffer.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES,
"Favorites")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES,
"Content which you have added to 'Favorites' will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC,
"Music")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC,
"Music which has been previously played will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES,
"Image")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES,
"Images which have been previously viewed will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO,
"Video")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO,
"Videos which have been previously played will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE,
"Menu Icons")
MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE,
"Enable/disable the menu icons shown at the lefthand side of the menu entries.")

View File

@ -229,6 +229,14 @@ MSG_HASH(MENU_ENUM_LABEL_DATABASE_MANAGER,
"database_manager")
MSG_HASH(MENU_ENUM_LABEL_DATABASE_MANAGER_LIST,
"database_manager_list")
MSG_HASH(MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST,
"deferred_favorites_list")
MSG_HASH(MENU_ENUM_LABEL_DEFERRED_IMAGES_LIST,
"deferred_images_list")
MSG_HASH(MENU_ENUM_LABEL_DEFERRED_MUSIC_LIST,
"deferred_music_list")
MSG_HASH(MENU_ENUM_LABEL_DEFERRED_VIDEO_LIST,
"deferred_video_list")
MSG_HASH(MENU_ENUM_LABEL_DEFERRED_NETPLAY,
"deferred_netplay")
MSG_HASH(MENU_ENUM_LABEL_DEFERRED_MUSIC,
@ -1277,3 +1285,15 @@ MSG_HASH(MENU_ENUM_LABEL_CORE_DELETE,
"core_delete")
MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME,
"playlist_entry_rename")
MSG_HASH(MENU_ENUM_LABEL_MENU_FRAMEBUFFER_OPACITY,
"menu_framebuffer_opacity")
MSG_HASH(MENU_ENUM_LABEL_GOTO_FAVORITES,
"goto_favorites")
MSG_HASH(MENU_ENUM_LABEL_GOTO_MUSIC,
"goto_music")
MSG_HASH(MENU_ENUM_LABEL_GOTO_IMAGES,
"goto_images")
MSG_HASH(MENU_ENUM_LABEL_GOTO_VIDEO,
"goto_video")
MSG_HASH(MENU_ENUM_LABEL_MATERIALUI_ICONS_ENABLE,
"materialui_icons_enable")

View File

@ -2884,3 +2884,27 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME,
"Rename the title of the entry.")
MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME,
"Rename")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY,
"Framebuffer Opacity")
MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY,
"Modify the opacity of the framebuffer.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES,
"Favorites")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES,
"Content which you have added to 'Favorites' will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC,
"Music")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC,
"Music which has been previously played will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES,
"Image")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES,
"Images which have been previously viewed will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO,
"Video")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO,
"Videos which have been previously played will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE,
"Menu Icons")
MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE,
"Enable/disable the menu icons shown at the lefthand side of the menu entries.")

View File

@ -28,7 +28,15 @@
int menu_hash_get_help_pt_br_enum(enum msg_hash_enums msg, char *s, size_t len) {
uint32_t driver_hash = 0;
settings_t *settings = config_get_ptr();
if (msg == MENU_ENUM_LABEL_CONNECT_NETPLAY_ROOM)
{
snprintf(s, len,
"TODO/FIXME - Fill in message here."
);
return 0;
}
if (msg <= MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_END &&
msg >= MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN) {
unsigned idx = msg - MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN;
@ -293,6 +301,9 @@ int menu_hash_get_help_pt_br_enum(enum msg_hash_enums msg, char *s, size_t len)
"As imagens capturadas serão armazenadas dentro \n"
"do Diretório de Captura de Telas.");
break;
case MENU_ENUM_LABEL_ADD_TO_FAVORITES:
snprintf(s, len, "Adicionar o item aos seus Favoritos.");
break;
case MENU_ENUM_LABEL_RUN:
snprintf(s, len, "Iniciar o conteúdo.");
break;
@ -587,6 +598,16 @@ int menu_hash_get_help_pt_br_enum(enum msg_hash_enums msg, char *s, size_t len)
"Ocultar a exibição de Transparência \n"
"dentro do menu.");
break;
case MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS:
snprintf(s, len,
"Exibir comandos do teclado/controle na \n"
"transparência.");
break;
case MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS_PORT:
snprintf(s, len,
"Seleciona a porta de escuta dos comandos do controle \n"
"a serem exibidos na transparência.");
break;
case MENU_ENUM_LABEL_OVERLAY_PRESET:
snprintf(s, len,
"Caminho para predefinição de Transparência.");
@ -654,15 +675,15 @@ int menu_hash_get_help_pt_br_enum(enum msg_hash_enums msg, char *s, size_t len)
const char *t =
"O RetroArch utiliza uma forma única de \n"
"sincronização de áudio/video aonde ele \n"
"precisa ser calibrado pela taxa de \n"
"atualização da sua tela para um melhor \n"
"resultado no desempenho. \n"
" \n"
"Se você experimentar qualquer estalido \n"
"no áudio ou rasgo de vídeo, normalmente \n"
"isto significa que você precisa calibrar \n"
"as configurações. Algumas escolhas abaixo: \n"
" \n";
"precisa ser calibrado pela taxa de \n"
"atualização da sua tela para um melhor \n"
"resultado no desempenho. \n"
" \n"
"Se você experimentar qualquer estalido \n"
"no áudio ou rasgo de vídeo, normalmente \n"
"isto significa que você precisa calibrar \n"
"as configurações. Algumas escolhas abaixo: \n"
" \n";
snprintf(u, sizeof(u), /* can't inline this due to the printf arguments */
"a) Vá para '%s' -> '%s', e habilite \n"
"'Video Paralelizado'. A taxa de atualização \n"
@ -677,8 +698,8 @@ int menu_hash_get_help_pt_br_enum(enum msg_hash_enums msg, char *s, size_t len)
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SETTINGS),
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SETTINGS),
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE_AUTO));
strlcpy(s, t, len);
strlcat(s, u, len);
strlcpy(s, t, len);
strlcat(s, u, len);
}
break;
case MENU_ENUM_LABEL_VALUE_HELP_SCANNING_CONTENT_DESC:
@ -1055,7 +1076,7 @@ int menu_hash_get_help_pt_br_enum(enum msg_hash_enums msg, char *s, size_t len)
" libretro_log, ele é ignorado.\n"
" \n"
" Registros DEBUG são sempre ignorados a menos \n"
" que o modo detalhado esteja ativado (--verbose).\n"
" que o modo verboso esteja ativado (--verbose).\n"
" \n"
" DEBUG = 0\n"
" INFO = 1\n"
@ -1193,30 +1214,25 @@ int menu_hash_get_help_pt_br_enum(enum msg_hash_enums msg, char *s, size_t len)
"implementações de núcleo Libretro.");
break;
case MENU_ENUM_LABEL_VIDEO_REFRESH_RATE_AUTO:
{
const char *t =
snprintf(s, len,
"Taxa de Atualização Automática. \n"
" \n"
"A taxa de atualização estimada da tela (Hz). \n"
"É utilizado para calcular a taxa de entrada \n"
"de áudio com a fórmula: \n"
" \n"
"taxa de ent de áudio = taxa de ent do jogo * \n"
"taxa de atlz da tela / taxa de atlz do jogo \n"
" \n";
const char *u =
"Se a implementação não reportar nenhum \n"
"valor, os padrões NTSC serão usados para \n"
"garantir compatibilidade.\n"
" \n"
"Este valor deve ficar próximo de 60Hz para \n"
"evitar mudanças drásticas no timbre do som. \n"
"Se seu monitor não roda a 60Hz, ou próximo \n"
"disso, desative o V-Sync, e deixe este valor \n"
"no padrão.";
strlcpy(s, t, len);
strlcat(s, u, len);
}
" \n"
"A taxa de atualização estimada da tela (Hz). \n"
"É utilizado para calcular a taxa de entrada \n"
"de áudio com a fórmula: \n"
" \n"
"taxa de ent de áudio = taxa de ent do jogo * \n"
"taxa de atlz da tela / taxa de atlz do jogo \n"
" \n"
"Se a implementação não reportar nenhum \n"
"valor, os padrões NTSC serão usados para \n"
"garantir compatibilidade.\n"
" \n"
"Este valor deve ficar próximo de 60Hz para \n"
"evitar mudanças drásticas no timbre do som. \n"
"Se seu monitor não roda a 60Hz, ou próximo \n"
"disso, desative o V-Sync, e deixe este valor \n"
"no padrão.");
break;
case MENU_ENUM_LABEL_VIDEO_ROTATION:
snprintf(s, len,
@ -1321,7 +1337,7 @@ int menu_hash_get_help_pt_br_enum(enum msg_hash_enums msg, char *s, size_t len)
case MENU_ENUM_LABEL_LOG_VERBOSITY:
snprintf(s, len,
"Habilitar ou desabilitar o nível \n"
"de detalhamento do frontend.");
"de verbosidade do frontend.");
break;
case MENU_ENUM_LABEL_VOLUME_UP:
snprintf(s, len,
@ -1642,26 +1658,21 @@ int menu_hash_get_help_pt_br_enum(enum msg_hash_enums msg, char *s, size_t len)
"no Netplay.");
break;
case MENU_ENUM_LABEL_NETPLAY_CHECK_FRAMES:
{
const char *t =
snprintf(s, len,
"A frequência em quadros na qual o Netplay \n"
"irá verificar se o hospedeiro e o cliente \n"
"estão sincronizados. \n"
" \n"
"Com a maioria dos núcleos, este valor não \n"
"terá efeito perceptível e pode ser ignorado. \n";
const char *u =
"Com núcleos não determinísticos, este valor \n"
"define quão frequente os pares do Netplay \n"
"serão colocados em sincronia. Com núcleos \n"
"defeituosos, definir para qualquer valor que \n"
"não zero irá causar problemas de desempenho \n"
"severos. Defina como zero para desativar \n"
"verificações. Este valor é usado somente \n"
"no hospedeiro de Netplay.";
strlcpy(s, t, len);
strlcat(s, u, len);
}
"irá verificar se o hospedeiro e o cliente \n"
"estão sincronizados. \n"
" \n"
"Com a maioria dos núcleos, este valor não \n"
"terá efeito perceptível e pode ser ignorado. \n"
"Com núcleos não determinísticos, este valor \n"
"define quão frequente os pares do Netplay \n"
"serão colocados em sincronia. Com núcleos \n"
"defeituosos, definir para qualquer valor que \n"
"não zero irá causar problemas de desempenho \n"
"severos. Defina como zero para desativar \n"
"verificações. Este valor é usado somente \n"
"no hospedeiro de Netplay.");
break;
case MENU_ENUM_LABEL_NETPLAY_INPUT_LATENCY_FRAMES_MIN:
snprintf(s, len,

View File

@ -377,7 +377,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_SETTINGS,
"Menu Rápido"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIR,
"Downloads"
"Recursos de Núcleo"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIRECTORY,
"Downloads"
@ -553,6 +553,9 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_FALSE,
MSG_HASH(MENU_ENUM_LABEL_VALUE_FASTFORWARD_RATIO,
"Velocidade Máxima de Execução"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_FAVORITES_TAB,
"Favoritos"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_FPS_SHOW,
"Mostrar Taxa de Quadros"
)
@ -871,6 +874,12 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_ENABLE,
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_HIDE_IN_MENU,
"Ocultar Transparência no Menu"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS,
"Exibir Comandos Na Transparência"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS_PORT,
"Porta de Escuta do Exibir Comandos "
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR,
"Tipo de Comportamento da Chamada Seletiva"
)
@ -1010,7 +1019,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_LOGGING_SETTINGS,
"Registro de Eventos"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_LOG_VERBOSITY,
"Detalhamento do Registro de Eventos"
"Verbosidade do Registro de Eventos"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_MAIN_MENU,
"Menu Principal"
@ -1060,8 +1069,11 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS,
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_LINEAR_FILTER,
"Filtro Linear de Menu"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_HORIZONTAL_ANIMATION,
"Animação Horizontal"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_SETTINGS,
"Appearance"
"Aparência"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER,
"Plano de Fundo"
@ -1456,6 +1468,12 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_CORE,
MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_GAME,
"Salvar Arquivo de Remapeamento de Jogo"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE_REMOVE_CORE,
"Remover Arquivo de Remapeamento de Núcleo"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE_REMOVE_GAME,
"Remover Arquivo de Remapeamento de Jogo"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_REQUIRED,
"Obrigatório"
)
@ -1504,6 +1522,9 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_RGUI_SHOW_START_SCREEN,
MSG_HASH(MENU_ENUM_LABEL_VALUE_RIGHT_ANALOG,
"Analógico Direito"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_ADD_TO_FAVORITES,
"Adicionar aos Favoritos"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_RUN,
"Executar"
)
@ -1610,10 +1631,22 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_SLOWMOTION_RATIO,
"Taxa de Câmera Lenta"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_SORT_SAVEFILES_ENABLE,
"Ordenar Arquivos de Jogo-Salvo em Pastas"
"Classificar Arquivos de Jogo-Salvo em Pastas"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_SORT_SAVESTATES_ENABLE,
"Ordenar Arquivos de Estado de Jogo em Pastas"
"Classificar Arquivos de Estado de Jogo em Pastas"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATES_IN_CONTENT_DIR_ENABLE,
"Gravar Estados de Jogo no Diretório de Conteúdo"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVEFILES_IN_CONTENT_DIR_ENABLE,
"Gravar Jogos-Salvos no Diretório de Conteúdo"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEMFILES_IN_CONTENT_DIR_ENABLE,
"Arquivos de Sistema estão no Diretório de Conteúdo"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_SCREENSHOTS_IN_CONTENT_DIR_ENABLE,
"Salvar Capturas de Tela no Diretório de Conteúdo"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_SSH_ENABLE,
"Habilitar SSH"
@ -2230,6 +2263,9 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_HISTORY,
MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_ADD,
"Exibir Aba de Importação de Conteúdo"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_FAVORITES,
"Exibir Aba de Favoritos"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_IMAGES,
"Exibir Aba de Imagem"
)
@ -2264,8 +2300,8 @@ MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_HARDCORE_MODE_ENABLE,
"Habilitar ou desabilitar Estado de Jogo, Trapaças, Voltar Atrás, Avanço Rápido, Pausa e Câmera Lenta para todos os jogos."
)
MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_VERBOSE_ENABLE,
"Habilitar ou desabilitar detalhamento na tela das conquistas."
)
"Habilitar ou desabilitar detalhes das conquistas na tela."
)
MSG_HASH(MENU_ENUM_SUBLABEL_DRIVER_SETTINGS,
"Alterar os drivers utilizados pelo sistema."
)
@ -2407,6 +2443,9 @@ MSG_HASH(MENU_ENUM_SUBLABEL_WIFI_SETTINGS,
MSG_HASH(MENU_ENUM_SUBLABEL_HELP_LIST,
"Saiba mais sobre como o programa funciona."
)
MSG_HASH(MSG_ADDED_TO_FAVORITES,
"Adicionado aos favoritos"
)
MSG_HASH(MSG_APPENDED_DISK,
"Disco anexado"
)
@ -2548,6 +2587,9 @@ MSG_HASH(MSG_ERROR_SAVING_CORE_OPTIONS_FILE,
MSG_HASH(MSG_ERROR_SAVING_REMAP_FILE,
"Erro em salvar o arquivo de remapeamento."
)
MSG_HASH(MSG_ERROR_REMOVING_REMAP_FILE,
"Erro em remover o arquivo de remapeamento."
)
MSG_HASH(MSG_ERROR_SAVING_SHADER_PRESET,
"Erro em salvar a predefinição de Shader."
)
@ -2726,7 +2768,8 @@ MSG_HASH(MSG_INPUT_PRESET_FILENAME,
"Nome de Arquivo de Predefinição"
)
MSG_HASH(MSG_INPUT_RENAME_ENTRY,
"Rename Title")
"Renomear Título"
)
MSG_HASH(MSG_INTERFACE,
"Interface"
)
@ -2838,6 +2881,9 @@ MSG_HASH(MSG_REDIRECTING_SAVESTATE_TO,
MSG_HASH(MSG_REMAP_FILE_SAVED_SUCCESSFULLY,
"Arquivo de remapeamento salvo com sucesso."
)
MSG_HASH(MSG_REMAP_FILE_REMOVED_SUCCESSFULLY,
"Arquivo de remapeamento salvo com sucesso."
)
MSG_HASH(MSG_REMOVED_DISK_FROM_TRAY,
"Disco removido da bandeja."
)
@ -3267,6 +3313,12 @@ MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_FONT_SIZE,
MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_OVERLAY_HIDE_IN_MENU,
"Ocultar a Transparência enquanto estiver dentro do menu e exibir novamente ao sair."
)
MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS,
"Exibir comandos de teclado/controle na transparência."
)
MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS_PORT,
"Selecione a porta para a transparência escutar se Exibir Comandos na Transparência estiver habilitado."
)
MSG_HASH(MENU_ENUM_SUBLABEL_CONTENT_COLLECTION_LIST,
"O conteúdo analisado aparecerá aqui."
)
@ -3498,6 +3550,9 @@ MSG_HASH(MENU_ENUM_SUBLABEL_DELETE_ENTRY,
MSG_HASH(MENU_ENUM_SUBLABEL_INFORMATION,
"Visualizar mais informações sobre o conteúdo."
)
MSG_HASH(MENU_ENUM_SUBLABEL_ADD_TO_FAVORITES,
"Adicionar o item aos seus favoritos."
)
MSG_HASH(MENU_ENUM_SUBLABEL_RUN,
"Iniciar o conteúdo."
)
@ -3648,6 +3703,9 @@ MSG_HASH(MENU_ENUM_SUBLABEL_XMB_RIBBON_ENABLE,
MSG_HASH(MENU_ENUM_SUBLABEL_XMB_FONT,
"Selecionar uma fonte principal diferente para ser usada pelo menu."
)
MSG_HASH(MENU_ENUM_SUBLABEL_XMB_SHOW_FAVORITES,
"Exibir a aba de favoritos dentro do menu principal."
)
MSG_HASH(MENU_ENUM_SUBLABEL_XMB_SHOW_IMAGES,
"Exibir a aba de imagem dentro do menu principal."
)
@ -3853,12 +3911,53 @@ MSG_HASH(MENU_ENUM_SUBLABEL_MENU_SHOW_CORE_UPDATER,
"Exibir a opção de atualizar núcleos (e arquivos de informação de núcleo)."
)
MSG_HASH(MSG_PREPARING_FOR_CONTENT_SCAN,
"Preparando a busca de conteúdo...")
"Preparando a busca de conteúdo..."
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_DELETE,
"Delete core")
"Remover núcleo"
)
MSG_HASH(MENU_ENUM_SUBLABEL_CORE_DELETE,
"Remove this core from disk.")
"Remover este núcleo do disco."
)
MSG_HASH(MENU_ENUM_SUBLABEL_PLAYLIST_ENTRY_RENAME,
"Renomear o título do item."
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME,
"Rename the title of the entry.")
MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME,
"Rename")
"Renomear"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY,
"Opacidade do Framebuffer"
)
MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY,
"Modificar a opacidade do framebuffer."
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES,
"Favoritos"
)
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES,
"Conteúdo adicionado aos 'Favoritos' vai aparecer aqui."
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC,
"Músicas"
)
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC,
"Músicas que foram reproduzidas aparecem aqui."
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES,
"Imagens"
)
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES,
"Imagens que foram exibidas aparecem aqui."
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO,
"Vídeos"
)
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO,
"Vídeos que foram reproduzidos aparecem aqui."
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE,
"Ícones do Menu"
)
MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE,
"Habilitar/desabilitar os ícones exibidos do lado esquerdo dos itens de menu. "
)

View File

@ -2991,3 +2991,27 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME,
"Rename the title of the entry.")
MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME,
"Rename")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY,
"Framebuffer Opacity")
MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY,
"Modify the opacity of the framebuffer.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES,
"Favorites")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES,
"Content which you have added to 'Favorites' will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC,
"Music")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC,
"Music which has been previously played will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES,
"Image")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES,
"Images which have been previously viewed will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO,
"Video")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO,
"Videos which have been previously played will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE,
"Menu Icons")
MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE,
"Enable/disable the menu icons shown at the lefthand side of the menu entries.")

View File

@ -33,11 +33,11 @@ MSG_HASH(
)
MSG_HASH(
MSG_PUBLIC_ADDRESS,
"Public address"
"Публичный адрес"
)
MSG_HASH(
MSG_NO_ARGUMENTS_SUPPLIED_AND_NO_MENU_BUILTIN,
"Нет аргументов и встроенного меню,отображается справка..."
"Нет аргументов и встроенного меню, отображается справка..."
)
MSG_HASH(
MSG_NETPLAY_USERS_HAS_FLIPPED,
@ -53,55 +53,55 @@ MSG_HASH(
)
MSG_HASH(
MSG_NETPLAY_YOU_HAVE_LEFT_THE_GAME,
"You have left the game"
"Вы покинули игру"
)
MSG_HASH(
MSG_NETPLAY_YOU_HAVE_JOINED_AS_PLAYER_N,
"You have joined as player %d"
"Вы присоединились под именем %d"
)
MSG_HASH(
MSG_NETPLAY_IMPLEMENTATIONS_DIFFER,
"Implementations differ. Make sure you're using the exact same versions of RetroArch and the core."
"Реализации различаются. Убедитесь, что вы используете точные версии RetroArch и выбранного ядра."
)
MSG_HASH(
MSG_NETPLAY_ENDIAN_DEPENDENT,
"This core does not support inter-architecture netplay between these systems"
"Выбранное ядро не поддерживает архитектуру netplay между этими системами"
)
MSG_HASH(
MSG_NETPLAY_PLATFORM_DEPENDENT,
"This core does not support inter-architecture netplay"
"Выбранное ядро не поддерживает архитектуру netplay"
)
MSG_HASH(
MSG_NETPLAY_ENTER_PASSWORD,
"Enter netplay server password:"
"Введите пароль от сервера netplay:"
)
MSG_HASH(
MSG_NETPLAY_INCORRECT_PASSWORD,
"Incorrect password"
"Неверный пароль"
)
MSG_HASH(
MSG_NETPLAY_SERVER_NAMED_HANGUP,
"\"%s\" has disconnected"
"\"%s\" отключился"
)
MSG_HASH(
MSG_NETPLAY_SERVER_HANGUP,
"A netplay client has disconnected"
"Клиент netplay отключен"
)
MSG_HASH(
MSG_NETPLAY_CLIENT_HANGUP,
"Netplay disconnected"
"Netplay отключен"
)
MSG_HASH(
MSG_NETPLAY_CANNOT_PLAY_UNPRIVILEGED,
"You do not have permission to play"
"У вас недостаточно прав чтобы играть"
)
MSG_HASH(
MSG_NETPLAY_CANNOT_PLAY_NO_SLOTS,
"There are no free player slots"
"Недостаточно свободных слотов для игры"
)
MSG_HASH(
MSG_NETPLAY_CANNOT_PLAY,
"Cannot switch to play mode"
"Невозможно переключиться в режим игры"
)
MSG_HASH(
MSG_NETPLAY_PEER_PAUSED,
@ -109,11 +109,11 @@ MSG_HASH(
)
MSG_HASH(
MSG_NETPLAY_CHANGED_NICK,
"Your nickname changed to \"%s\""
"Ваш ник изменился на \"%s\""
)
MSG_HASH(
MENU_ENUM_SUBLABEL_VIDEO_SHARED_CONTEXT,
"Предоставьте аппаратно-рендерированным ядрам собственный контекст.Избегайте принятия изменений состояния оборудования между кадрами."
"Предоставьте аппаратно-рендерированным ядрам собственный контекст. Избегайте принятия изменений состояния оборудования между кадрами."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_MENU_SETTINGS,
@ -229,7 +229,7 @@ MSG_HASH(
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AUDIO_DSP_PLUGIN,
"Аудио DSP Plugin"
"Аудио плагин DSP"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AUDIO_ENABLE,
@ -253,7 +253,7 @@ MSG_HASH(
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AUDIO_MUTE,
"Выключить звук"
"Отключить звук"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AUDIO_OUTPUT_RATE,
@ -281,7 +281,7 @@ MSG_HASH(
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AUDIO_WASAPI_EXCLUSIVE_MODE,
"WASAPI Exclusive Mode"
"Эксклюзивный режим WASAPI"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AUDIO_WASAPI_FLOAT_FORMAT,
@ -381,7 +381,7 @@ MSG_HASH(
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_BLUETOOTH_ENABLE,
"Bluetooth Включить"
"Включить Bluetooth"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_BUILDBOT_ASSETS_URL,
@ -421,11 +421,11 @@ MSG_HASH(
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_CHEAT_FILE_SAVE_AS,
"Сохранить чит файл как:"
"Сохранить чит-файл как:"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_CHEAT_NUM_PASSES,
"Пропуск чита"
"Кол-во доступных чит-кодов"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_CHEEVOS_DESCRIPTION,
@ -499,9 +499,9 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_CONTENT_HISTORY_SIZE,
"Размер списка истории")
MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE,
"Allow to remove entries")
"Разрешить удалить контент с плейлиста")
MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_SETTINGS,
"Выйти из меню")
"Быстрые настройки")
MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIR,
"Загрузки")
MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIRECTORY,
@ -533,7 +533,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_SUPPORTED_EXTENSIONS,
MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_SYSTEM_MANUFACTURER,
"Разработчик системы")
MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_SYSTEM_NAME,
"Имя системы")
"Эмулирует системы")
MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INPUT_REMAPPING_OPTIONS,
"Элементы управления")
MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_LIST,
@ -549,7 +549,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_AUTO_EXTRACT_ARCHIVE,
MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_BUILDBOT_URL,
"Создание ботов URL")
MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_LIST,
"Обновление ядра")
"Обновить ядро")
MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_SETTINGS,
"Обновление")
MSG_HASH(MENU_ENUM_LABEL_VALUE_CPU_ARCHITECTURE,
@ -559,7 +559,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_CPU_CORES,
MSG_HASH(MENU_ENUM_LABEL_VALUE_CURSOR_DIRECTORY,
"Курсор")
MSG_HASH(MENU_ENUM_LABEL_VALUE_CURSOR_MANAGER,
"Курсор менеджер")
"Менеджер курсоров")
MSG_HASH(MENU_ENUM_LABEL_VALUE_CUSTOM_RATIO,
"Дополнительное значение")
MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_MANAGER,
@ -567,7 +567,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_MANAGER,
MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_SELECTION,
"Выбор баз данных")
MSG_HASH(MENU_ENUM_LABEL_VALUE_DELETE_ENTRY,
"Удаление")
"Удалить")
MSG_HASH(MENU_ENUM_LABEL_VALUE_FAVORITES,
"Избранное")
MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_CONTENT,
@ -605,7 +605,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_DRIVER_SETTINGS,
MSG_HASH(MENU_ENUM_LABEL_VALUE_DUMMY_ON_CORE_SHUTDOWN,
"Загрузка макета при выключении ядра")
MSG_HASH(MENU_ENUM_LABEL_VALUE_CHECK_FOR_MISSING_FIRMWARE,
"Check for Missing Firmware Before Loading")
"Проверять в отсутствие firmware перед загрузкой")
MSG_HASH(MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPER,
"Динамические обои")
MSG_HASH(MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPERS_DIRECTORY,
@ -711,7 +711,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DEVICE_INDEX,
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DEVICE_TYPE,
"Тип устройства")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_MOUSE_INDEX,
"Mouse Index")
"Индекс мыши")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DRIVER,
"Драйвер ввода")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DUTY_CYCLE,
@ -753,7 +753,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_X,
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_Y,
"Кнопка Y")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_KEY,
"(Ключ: %s)")
"(Клавиша: %s)")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_KEYBOARD_GAMEPAD_MAPPING_TYPE,
"Тип отображения клавиатуры для геймпада")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_MAX_USERS,
@ -773,7 +773,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_NEXT,
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_PREV,
"Предыдущий диск")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_ENABLE_HOTKEY,
"EВключить горячие клавиши")
"Включить горячие клавиши")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FAST_FORWARD_HOLD_KEY,
"Ускоренная перемотка вперед")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FAST_FORWARD_KEY,
@ -785,9 +785,9 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FULLSCREEN_TOGGLE_KEY,
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_GRAB_MOUSE_TOGGLE,
"Переключатель мыши")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_GAME_FOCUS_TOGGLE,
"Game focus toggle")
"Переключить игровой фокус")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_LOAD_STATE_KEY,
"Состояние загрузки")
"Загрузить сохранение игры")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_MENU_TOGGLE,
"Переключение меню")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_MOVIE_RECORD_TOGGLE,
@ -797,7 +797,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_MUTE,
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_NETPLAY_FLIP,
"Netplay отразить пользователей")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_NETPLAY_GAME_WATCH,
"Netplay toggle play/spectate mode")
"Переключить режим игры / наблюдателя Netplay")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_OSK,
"Переключение экранной клавиатуры")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_OVERLAY_NEXT,
@ -805,13 +805,13 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_OVERLAY_NEXT,
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_PAUSE_TOGGLE,
"Приостановить переключение")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_QUIT_KEY,
"Выход из RetroArch")
"Выйти из RetroArch")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_RESET,
"Сбросить игру")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_REWIND,
"Перемотка назад")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SAVE_STATE_KEY,
"Сохранить состояние")
"Сохранить игру")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SCREENSHOT,
"Сделать скриншот")
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SHADER_NEXT,
@ -869,43 +869,43 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_JOYPAD_DRIVER,
MSG_HASH(MENU_ENUM_LABEL_VALUE_LAKKA_SERVICES,
"Сервисы")
MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_CHINESE_SIMPLIFIED,
"Chinese (Simplified)")
"Китайский (Простой)")
MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_CHINESE_TRADITIONAL,
"Chinese (Traditional)")
"Китайский (Традициональный)")
MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_DUTCH,
"Dutch")
"Голландский")
MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_ENGLISH,
"English")
"Английский")
MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_ESPERANTO,
"Esperanto")
MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_FRENCH,
"French")
"Французский")
MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_GERMAN,
"German")
"Немецкий")
MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_ITALIAN,
"Italian")
"Итальянский")
MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_JAPANESE,
"Japanese")
"Японский")
MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_KOREAN,
"Korean")
"Корейский")
MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_POLISH,
"Polish")
"Польский")
MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_PORTUGUESE_BRAZIL,
"Portuguese (Brazil)")
"португальский (Бразилия)")
MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_PORTUGUESE_PORTUGAL,
"Portuguese (Portugal)")
"португальский (Португалия)")
MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_RUSSIAN,
"Русский")
MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_SPANISH,
"Spanish")
"Испанский")
MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_VIETNAMESE,
"Vietnamese")
"Вьетнамский")
MSG_HASH(MENU_ENUM_LABEL_VALUE_LEFT_ANALOG,
"Левый аналог")
MSG_HASH(MENU_ENUM_LABEL_VALUE_LIBRETRO_DIR_PATH,
"Ядро")
MSG_HASH(MENU_ENUM_LABEL_VALUE_LIBRETRO_INFO_PATH,
"Ядро инфо")
"Информация ядра")
MSG_HASH(MENU_ENUM_LABEL_VALUE_LIBRETRO_LOG_LEVEL,
"Уровень ведения журнала")
MSG_HASH(MENU_ENUM_LABEL_VALUE_LINEAR,
@ -941,7 +941,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_DARK_BLUE,
MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_GREEN,
"Зелёный")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_NVIDIA_SHIELD,
"Щит")
"NVIDIA Shield")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_RED,
"Красный")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_YELLOW,
@ -1007,25 +1007,25 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_DISABLE_HOST,
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_IP_ADDRESS,
"Адрес сервера")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_LAN_SCAN_SETTINGS,
"Scan local network")
"Сканировать локальную сеть")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_MODE,
"Включить клиент Netplay")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_NICKNAME,
"Имя пользователя")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_PASSWORD,
"Server Password")
"Пароль сервера")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_PUBLIC_ANNOUNCE,
"Publicly Announce Netplay")
"Публично анонсировать Netplay")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_REQUIRE_SLAVES,
"Disallow Non-Slave-Mode Clients")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_SETTINGS,
"Настройки Netplay")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_START_AS_SPECTATOR,
"Netplay Spectator Mode")
"Netplay режим наблюдателя")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_STATELESS_MODE,
"Netplay Stateless Mode")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_SPECTATE_PASSWORD,
"Server Spectate-Only Password")
"Пароль сервера режима Spectate-Only")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_SPECTATOR_MODE_ENABLE,
"Включить режим зрителя в Netplay")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_TCP_UDP_PORT,
@ -1069,9 +1069,9 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_INFORMATION_AVAILABLE,
MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_ITEMS,
"Нет элементов.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_NETPLAY_HOSTS_FOUND,
"No netplay hosts found.")
"Сетевыех хостов не найдено.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_NETWORKS_FOUND,
"No networks found.")
"Сетей не найдено.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_PERFORMANCE_COUNTERS,
"Нет счетчиков производительности.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_PLAYLISTS,
@ -1193,7 +1193,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_SERIAL,
MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_SHA1,
"SHA1")
MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_START_CONTENT,
"Запустить контент")
"Запустить игру")
MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_TGDB_RATING,
"Рейтинг TGDB")
MSG_HASH(MENU_ENUM_LABEL_VALUE_REBOOT,
@ -1257,7 +1257,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_RIGHT_ANALOG,
MSG_HASH(MENU_ENUM_LABEL_VALUE_RUN,
"Запустить")
MSG_HASH(MENU_ENUM_LABEL_VALUE_RUN_MUSIC,
"Run")
"Запустить")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SAMBA_ENABLE,
"Включить SAMBA")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVEFILE_DIRECTORY,
@ -1271,7 +1271,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_SAVE,
MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_DIRECTORY,
"Сохранить состояние")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_THUMBNAIL_ENABLE,
"Savestate Thumbnails")
"Обложка к сохранениями")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG,
"Сохранить текущую конфигурацию")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG_OVERRIDE_CORE,
@ -1327,7 +1327,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_SLOWMOTION_RATIO,
MSG_HASH(MENU_ENUM_LABEL_VALUE_SORT_SAVEFILES_ENABLE,
"Сохранить сортировку в папках")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SORT_SAVESTATES_ENABLE,
"Sort Savestates In Folders")
"Сортировать сохранения в папках")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SSH_ENABLE,
"SSH включён")
MSG_HASH(MENU_ENUM_LABEL_VALUE_START_CORE,
@ -1377,7 +1377,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_WIDTH,
MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DSOUND_SUPPORT,
"Поддержка DirectSound")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_WASAPI_SUPPORT,
"WASAPI support")
"Поддержка WASAPI")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DYLIB_SUPPORT,
"Поддержка динамических библиотек")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DYNAMIC_SUPPORT,
@ -1407,7 +1407,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_JACK_SUPPORT,
MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_KMS_SUPPORT,
"поддержка KMS/EGL")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LAKKA_VERSION,
"Lakka Version")
"Версия Lakka")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBRETRODB_SUPPORT,
"Поддержка LibretroDB")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT,
@ -1501,7 +1501,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAILS_DIRECTORY,
MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAILS_UPDATER_LIST,
"Обновление эскизов")
MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_BOXARTS,
"Boxarts")
"Артбоксы")
MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_SCREENSHOTS,
"Скриншоты")
MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_TITLE_SCREENS,
@ -1549,7 +1549,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_OVERLAYS,
MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_SLANG_SHADERS,
"Обновить сленговые шейдеры")
MSG_HASH(MENU_ENUM_LABEL_VALUE_USER,
"Пользователь")
"Аккаунт")
MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_INTERFACE_SETTINGS,
"Интерфейс пользователя")
MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_LANGUAGE,
@ -1565,7 +1565,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_USE_THIS_DIRECTORY,
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ALLOW_ROTATE,
"Разрешить вращение")
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO,
"Config Aspect Ratio")
"Настройки соотношения сторон")
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_AUTO,
"Автоотношение сторон")
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_INDEX,
@ -1675,13 +1675,13 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VSYNC,
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOWED_FULLSCREEN,
"Полноэкранный режим")
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_WIDTH,
"Window Width")
"Ширина окна")
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_HEIGHT,
"Window Height")
"Высота окна")
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FULLSCREEN_X,
"Fullscreen Width")
"Полноэкранная ширина")
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FULLSCREEN_Y,
"Fullscreen Height")
"Полноэкранная высота")
MSG_HASH(MENU_ENUM_LABEL_VALUE_WIFI_DRIVER,
"Wi-Fi драйвер")
MSG_HASH(MENU_ENUM_LABEL_VALUE_WIFI_SETTINGS,
@ -1819,7 +1819,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_LOG_VERBOSITY,
MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY,
"Присоединиться или создать сеанс netplay.")
MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY_LAN_SCAN_SETTINGS,
"Search for and connect to netplay hosts on the local network.")
"Поиск и подключение к серверу по локальной сети.")
MSG_HASH(MENU_ENUM_SUBLABEL_INFORMATION_LIST_LIST,
"Показать информацию о ядре, сети и системе.")
MSG_HASH(MENU_ENUM_SUBLABEL_ONLINE_UPDATER,
@ -1835,7 +1835,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_SSH_ENABLE,
MSG_HASH(MENU_ENUM_SUBLABEL_SUSPEND_SCREENSAVER_ENABLE,
"Запрещается активация заставки вашей системы.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_WINDOW_SCALE,
"Sets the window size relative to the core viewport size. Alternatively, you can set a window width and height below for a fixed window size.")
"Устанавливает размер окна относительно размера окна просмотра. Кроме того, вы можете установить ширину и высоту окна ниже для фиксации размера окна.")
MSG_HASH(MENU_ENUM_SUBLABEL_USER_LANGUAGE,
"Устанавливает язык интерфейса.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION,
@ -1885,7 +1885,7 @@ MSG_HASH(MSG_BYTES,
MSG_HASH(MSG_CANNOT_INFER_NEW_CONFIG_PATH,
"Вывод командного интерфейса на порт.")
MSG_HASH(MSG_CHEEVOS_HARDCORE_MODE_ENABLE,
"Режим Hardcore включен, режим сохранения и перемотки отключен.")
"Режим Hardcore включен, ваши сохранения и функция перемотки отключены.")
MSG_HASH(MSG_COMPARING_WITH_KNOWN_MAGIC_NUMBERS,
"Сравнение с известными магическими числами ...")
MSG_HASH(MSG_COMPILED_AGAINST_API,
@ -2055,9 +2055,9 @@ MSG_HASH(MSG_GOT_INVALID_DISK_INDEX,
MSG_HASH(MSG_GRAB_MOUSE_STATE,
"Режим перехвата мыши")
MSG_HASH(MSG_GAME_FOCUS_ON,
"Game focus on")
"Игровой фокус включен")
MSG_HASH(MSG_GAME_FOCUS_OFF,
"Game focus off")
"Игровой фокус выключен")
MSG_HASH(MSG_HW_RENDERED_MUST_USE_POSTSHADED_RECORDING,
"Ядро использует аппаратный рендеринг. Включите запись с GPU.")
MSG_HASH(MSG_INFLATED_CHECKSUM_DID_NOT_MATCH_CRC32,
@ -2069,7 +2069,7 @@ MSG_HASH(MSG_INPUT_CHEAT_FILENAME,
MSG_HASH(MSG_INPUT_PRESET_FILENAME,
"Имя настроек")
MSG_HASH(MSG_INPUT_RENAME_ENTRY,
"Rename Title")
"Переименовать заголовок")
MSG_HASH(MSG_INTERFACE,
"Интерфейс")
MSG_HASH(MSG_INTERNAL_STORAGE,
@ -2376,33 +2376,33 @@ MSG_HASH(
)
MSG_HASH(
MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_ORIGIN,
"Database - Filter : Origin")
"База Данных - Фильтр : по происхождению")
MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_FRANCHISE,
"Database - Filter : Franchise")
"База Данных - Фильтр : по франчайзу")
MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_ESRB_RATING,
"Database - Filter : ESRB Rating")
"База Данных - Фильтр : по рейтингу ESRB")
MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_ELSPA_RATING,
"Database - Filter : ELSPA Rating")
"База Данных - Фильтр : по рейтингу ELSPA")
MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_PEGI_RATING,
"Database - Filter : PEGI Rating")
"База Данных - Фильтрr : по рейтингу PEGI")
MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_CERO_RATING,
"Database - Filter : CERO Rating")
"База Данных - Фильтр : по рейтингу CERO")
MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_BBFC_RATING,
"Database - Filter : BBFC Rating")
"База Данных - Фильтр : по рейтингу BBFC")
MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_MAX_USERS,
"Database - Filter : Max Users")
"База Данных - Фильтр : по кол-во игроков")
MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_RELEASEDATE_BY_MONTH,
"Database - Filter : Releasedate By Month")
"База Данных - Фильтр : Вышедшие по месяцам")
MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_RELEASEDATE_BY_YEAR,
"Database - Filter : Releasedate By Year")
"База Данных - Фильтр : Вышедшие по годам")
MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_EDGE_MAGAZINE_ISSUE,
"Database - Filter : Edge Magazine Issue")
"База Данных - Фильтр : ошибки журнела Edge")
MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_EDGE_MAGAZINE_RATING,
"Database - Filter : Edge Magazine Rating")
"База Данных - Фильтрr : рейтинг журнала Edge")
MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_DATABASE_INFO,
"Database Info")
"Информация базы данных")
MSG_HASH(MSG_WIFI_SCAN_COMPLETE,
"Wi-Fi scan complete.")
"Сканирование Wi-Fi успешно завершен.")
MSG_HASH(MSG_SCANNING_WIRELESS_NETWORKS,
"Scanning wireless networks...")
MSG_HASH(MSG_NETPLAY_LAN_SCAN_COMPLETE,
@ -2428,15 +2428,15 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_USER_REMOTE_ENABLE,
MSG_HASH(MENU_ENUM_LABEL_VALUE_BATTERY_LEVEL_ENABLE,
"Показать заряд батареи")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SELECT_FILE,
"Select File")
"Выбрать файл")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SELECT_FROM_COLLECTION,
"Select From Collection")
"Выбрать файл с коллекции")
MSG_HASH(MENU_ENUM_LABEL_VALUE_FILTER,
"Filter")
"Фильтр")
MSG_HASH(MENU_ENUM_LABEL_VALUE_SCALE,
"Scale")
"Масштаб")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_START_WHEN_LOADED,
"Netplay will start when content is loaded.")
"Netplay заработает, когда вы запустите игру.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_LOAD_CONTENT_MANUALLY,
"Couldn't find a suitable core or content file, load manually.")
MSG_HASH(
@ -2456,25 +2456,25 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_BOKEH,
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_REFRESH_ROOMS,
"Обновить список комнат")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ROOM_NICKNAME,
"Nickname: %s")
"Имя: %s")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ROOM_NICKNAME_LAN,
"Nickname (lan): %s")
"Имя (lan): %s")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_COMPAT_CONTENT_FOUND,
"Compatible content found")
"Найден совместимый контент")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_CROP_OVERSCAN,
"Cuts off a few pixels around the edges of the image customarily left blank by developers which sometimes also contain garbage pixels.")
"Отрезает несколько пикселей вокруг краев экрана, обычно оставленными пустыми разработчиками, которые иногда содержат лишь мусор.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SMOOTH,
"Adds a slight blur to the image to take the edge off of the hard pixel edges. This option has very little impact on performance.")
"Добавляет небольшое смазывание к изображению, чтобы избавиться от острых пикселей. Эта настройка мало влияет на производительность.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_FILTER,
"Apply a CPU-powered video filter. NOTE: Might come at a high performance cost. Some video filters might only work for cores that use 32bit or 16bit color.")
"Применяется CPU-powered видеофильтр. ПРИМЕЧАНИЕ: Возможна высокая нагрузка на производительность. Некоторые фильтры могут работать только на некоторых ядер, которые используют 32bit или 16bit палитру.")
MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_USERNAME,
"Input the username of your Retro Achievements account.")
"Введите имя пользователя от вашего аккаунта Retro Achievements.")
MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_PASSWORD,
"Input the password of your Retro Achievements account.")
"Введите пароль от вашего аккаунта Retro Achievements.")
MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY_NICKNAME,
"Input your user name here. This will be used for netplay sessions, among other things.")
"Введите ваш никнейм. Он будет использоваться в netplay сесиях и т.д.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_POST_FILTER_RECORD,
"Capture the image after filters (but not shaders) are applied. Your video will look as fancy as what you see on your screen.")
"Записывать процесс игры с выбранными фильтрами (неработает с шейдерами). Ваше видео будет выглядить красивым =)")
MSG_HASH(MENU_ENUM_SUBLABEL_CORE_LIST,
"Выберите, какое ядро использовать.")
MSG_HASH(MENU_ENUM_SUBLABEL_LOAD_CONTENT_LIST,
@ -2486,24 +2486,24 @@ MSG_HASH(MENU_ENUM_SUBLABEL_SYSTEM_INFORMATION,
MSG_HASH(MENU_ENUM_SUBLABEL_QUIT_RETROARCH,
"Закрыть программу.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_WINDOW_WIDTH,
"Set the custom width size for the display window. Leaving it at 0 will attempt to scale the window as large as possible.")
"Изменить размер ширины для окна дисплея. Если вы поменяете параметр на 0, то программа будет пытаться масштабировать окно как можно больше.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_WINDOW_HEIGHT,
"Set the custom height size for the display window. Leaving it at 0 will attempt to scale the window as large as possible.")
"Изменить размер высоты для окна дисплея. Если вы поменяете параметр на 0, то программа будет пытаться масштабировать окно как можно больше.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_FULLSCREEN_X,
"Set the custom width size for the non-windowed fullscreen mode. Leaving it at 0 will use the desktop resolution.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_FULLSCREEN_Y,
"Set the custom height size for the non-windowed fullscreen mode. Leaving it at 0 will use the desktop resolution")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_MESSAGE_POS_X,
"Specify custom X axis position for onscreen text.")
"Изменить положение оповещение по горизонтали.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_MESSAGE_POS_Y,
"Specify custom Y axis position for onscreen text.")
"Изменить положение оповещение по вертикали.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_FONT_SIZE,
"Specify the font size in points.")
"Изменить размер шрифта уведомления.")
MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_OVERLAY_HIDE_IN_MENU,
"Hide the overlay while inside the menu, and show it again when exiting the menu.")
"Спрятать наложения в меню интерфеся, и показывать снова после выхода из него.")
MSG_HASH(
MENU_ENUM_SUBLABEL_CONTENT_COLLECTION_LIST,
"Scanned content will appear here."
"После сканирование контента он появится в этом списке ."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_VIDEO_SCALE_INTEGER,
@ -2523,11 +2523,11 @@ MSG_HASH(
)
MSG_HASH(
MENU_ENUM_SUBLABEL_VIDEO_FULLSCREEN,
"Start in fullscreen. Can be changed at runtime."
"Запускать в полноэкранном режиме."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_VIDEO_WINDOWED_FULLSCREEN,
"If fullscreen, prefer using a windowed fullscreen mode."
"Включить полноэкранный режим. Советуем использовать оконный полноэкранный режим."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_VIDEO_GPU_RECORD,
@ -2727,15 +2727,15 @@ MSG_HASH(
)
MSG_HASH(
MENU_ENUM_SUBLABEL_MOUSE_ENABLE,
"Enable mouse controls inside the menu."
"Включить поддержку мыши в главном меню."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_POINTER_ENABLE,
"Enable touch controls inside the menu."
"Включить поддержку touch в главном меню."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_THUMBNAILS,
"Type of thumbnail to display."
"Вид обложки к играм."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_TIMEDATE_ENABLE,
@ -2751,12 +2751,12 @@ MSG_HASH(
)
MSG_HASH(
MENU_ENUM_SUBLABEL_NETPLAY_ENABLE_HOST,
"Enables netplay in host (server) mode."
"Запустить netplay на хосте (сервера)."
)
MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY_ENABLE_CLIENT,
"Enables netplay in client mode.")
"Включить netplay в режиме клиента.")
MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY_DISCONNECT,
"Disconnects an active Netplay connection.")
"Отключить активное соединение Netplay.")
MSG_HASH(MENU_ENUM_SUBLABEL_SCAN_DIRECTORY,
"Scans a directory for compatible files and add them to the collection.")
MSG_HASH(MENU_ENUM_SUBLABEL_SCAN_FILE,
@ -2800,16 +2800,16 @@ MSG_HASH(
MSG_HASH(MENU_ENUM_SUBLABEL_GAME_SPECIFIC_OPTIONS,
"Enable customized core options by default at startup.")
MSG_HASH(MENU_ENUM_SUBLABEL_CORE_ENABLE,
"Shows current core name inside menu.")
"Показывать название ядра в главном меню.")
MSG_HASH(MENU_ENUM_SUBLABEL_DATABASE_MANAGER,
"Просмотр баз данных.")
MSG_HASH(MENU_ENUM_SUBLABEL_CURSOR_MANAGER,
"Просмотр предыдущих запросов.")
MSG_HASH(MENU_ENUM_SUBLABEL_TAKE_SCREENSHOT,
"Captures an image of the screen.")
"Сделать скриншот экрана.")
MSG_HASH(
MENU_ENUM_SUBLABEL_CLOSE_CONTENT,
"Closes the current content. Any unsaved changes might be lost."
"Выход из игры. Все несохраненные файлы возможно пропадут."
)
MSG_HASH(MENU_ENUM_SUBLABEL_LOAD_STATE,
"Load a saved state from the currently selected slot.")
@ -2827,16 +2827,16 @@ MSG_HASH(MENU_ENUM_SUBLABEL_UNDO_SAVE_STATE,
"If a state was overwritten, it will roll back to the previous save state.")
MSG_HASH(
MENU_ENUM_SUBLABEL_ACCOUNTS_RETRO_ACHIEVEMENTS,
"Retro Achievements service. For more information, visit http://retroachievements.org"
"Сервис Retro Achievements. Для дополнительной информации, посетите страницу http://retroachievements.org"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_ACCOUNTS_LIST,
"Manages currently configured accounts."
)
MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_META_REWIND,
"Manages rewind settings.")
"Управление настройками перемотки.")
MSG_HASH(MENU_ENUM_SUBLABEL_RESTART_CONTENT,
"Restarts the content from the beginning.")
"Перезапустить игру.")
MSG_HASH(MENU_ENUM_SUBLABEL_SAVE_CURRENT_CONFIG_OVERRIDE_CORE,
"Saves an override configuration file which will apply for all content loaded with this core. Will take precedence over the main configuration.")
MSG_HASH(MENU_ENUM_SUBLABEL_SAVE_CURRENT_CONFIG_OVERRIDE_GAME,
@ -2877,179 +2877,179 @@ MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY_INPUT_LATENCY_FRAMES_RANGE,
MSG_HASH(MENU_ENUM_SUBLABEL_DISK_CYCLE_TRAY_STATUS,
"Cycle the current disk. If the disk is inserted, it will eject the disk. If the disk has not been inserted, it will be inserted. ")
MSG_HASH(MENU_ENUM_SUBLABEL_DISK_INDEX,
"Change the disk index.")
"Изменить индекс диска.")
MSG_HASH(MENU_ENUM_SUBLABEL_DISK_OPTIONS,
"Disk image management.")
"Управление образа диска.")
MSG_HASH(MENU_ENUM_SUBLABEL_DISK_IMAGE_APPEND,
"Select a disk image to insert.")
"Выберите образ диска для загрузки.")
MSG_HASH(MENU_ENUM_SUBLABEL_MENU_ENUM_THROTTLE_FRAMERATE,
"Makes sure the framerate is capped while inside the menu.")
"Убедитесь, что частота кадров ограничена внутри меню.")
MSG_HASH(MENU_ENUM_SUBLABEL_XMB_THEME,
"Select a different theme for the icon. Changes will take effect after you restart the program.")
"Выберите другую тему для значка. Изменения заработают после перезагрузки.")
MSG_HASH(MENU_ENUM_SUBLABEL_XMB_SHADOWS_ENABLE,
"Enable drop shadows for all icons. This will have a minor performance hit.")
"Включить тени для всех значков. Это приведет к незначительному нагрузке.")
MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_MENU_COLOR_THEME,
"Select a different background color gradient theme.")
"Выберите другую тему цветового градиента.")
MSG_HASH(MENU_ENUM_SUBLABEL_MENU_WALLPAPER_OPACITY,
"Modify the opacity of the background wallpaper.")
"Изменить прозрачность обоев интерфейса.")
MSG_HASH(MENU_ENUM_SUBLABEL_XMB_MENU_COLOR_THEME,
"Select a different background color gradient theme.")
"Выберите другую тему цветового градиента.")
MSG_HASH(MENU_ENUM_SUBLABEL_XMB_RIBBON_ENABLE,
"Select an animated background effect. Can be GPU-intensive depending on the effect. If performance is unsatisfactory, either turn this off or revert to a simpler effect.")
"Выберите анимированный фоновый эффект. Может быть GPU-intensive в зависимости от эффекта. Если производительность не тянет на это, то либо выключите это, либо вернитесь к более простому эффекту.")
MSG_HASH(MENU_ENUM_SUBLABEL_XMB_FONT,
"Select a different main font to be used by the menu.")
"Выбрать основной шрифт для меню интерфейса.")
MSG_HASH(MENU_ENUM_SUBLABEL_XMB_SHOW_IMAGES,
"Show the image tab inside the main menu.")
"Показать вкладку Изображения в главном меню.")
MSG_HASH(MENU_ENUM_SUBLABEL_XMB_SHOW_MUSIC,
"Show the music tab inside the main menu.")
"Показать вкладку Музыка в главном меню.")
MSG_HASH(MENU_ENUM_SUBLABEL_XMB_SHOW_VIDEO,
"Show the video tab inside the main menu.")
"Показать вкладку Видео в главном меню.")
MSG_HASH(MENU_ENUM_SUBLABEL_XMB_SHOW_NETPLAY,
"Show the netplay tab inside the main menu.")
"Показать вкладку Сетевая игра в главном меню.")
MSG_HASH(MENU_ENUM_SUBLABEL_XMB_SHOW_SETTINGS,
"Show the settings tab inside the main menu.")
"Показать вкладку Настройка в главном меню.")
MSG_HASH(MENU_ENUM_SUBLABEL_XMB_SHOW_HISTORY,
"Show the recent history tab inside the main menu.")
"Показать вкладку История просмотров в главном меню.")
MSG_HASH(MENU_ENUM_SUBLABEL_XMB_SHOW_ADD,
"Show the import content tab inside the main menu.")
"Показать вкладку Импорт контента в главном меню.")
MSG_HASH(MENU_ENUM_SUBLABEL_RGUI_SHOW_START_SCREEN,
"Show startup screen in menu. This is automatically set to false after the program starts for the first time.")
"Показать начальный экран. Этот параметре автомотически выключается после первого включения.")
MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_MENU_HEADER_OPACITY,
"Modify the opacity of the header graphic.")
"Изменение прозрачность графического заголовка.")
MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_MENU_FOOTER_OPACITY,
"Modify the opacity of the footer graphic.")
"Изменение прозрачности графика нижнего колонтитула.")
MSG_HASH(MENU_ENUM_SUBLABEL_DPI_OVERRIDE_ENABLE,
"The menu normally scales itself dynamically. If you want to set a specific scaling size instead, enable this.")
"Меню интерфейса обычно сам подстраивается. Если вы хотите изменить DPI под свой вкус, то включите эту функцию.")
MSG_HASH(MENU_ENUM_SUBLABEL_DPI_OVERRIDE_VALUE,
"Set the custom scaling size here. NOTE: You have to enable 'DPI Override' for this scaling size to take effect.")
"Установить свой размер масштабирования. ПРИМЕЧАНИЕ: Вы должны включить 'DPI Override', чтобы эти изменения заработали.")
MSG_HASH(MENU_ENUM_SUBLABEL_CORE_ASSETS_DIRECTORY,
"Save all downloaded files to this directory.")
"Сохранять все закаченные файлы в этой папке.")
MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_REMAPPING_DIRECTORY,
"Save all remapped controls to this directory.")
"Сохранить все переназначенные элементы управления в этой папке.")
MSG_HASH(MENU_ENUM_SUBLABEL_LIBRETRO_DIR_PATH,
"Directory where the program searches for content/cores.")
"путь к папке, в котором программа ищет контент / ядра.")
MSG_HASH(MENU_ENUM_SUBLABEL_LIBRETRO_INFO_PATH,
"Application/core information files are stored here.")
"Здесь хранятся файлы информации контента / ядра.")
MSG_HASH(MENU_ENUM_SUBLABEL_JOYPAD_AUTOCONFIG_DIR,
"If a joypad is plugged in, that joypad will be autoconfigured if a config file corresponding to it is present inside this directory.")
"Если игровой джойстик подключен, то джойстик будет автомотически подстроен, если существует одходящий файл авто-конфигурации.")
MSG_HASH(MENU_ENUM_SUBLABEL_PLAYLIST_DIRECTORY,
"Save all collections to this directory.")
"Сохранять все коллекции в выбранной папке.")
MSG_HASH(
MENU_ENUM_SUBLABEL_CACHE_DIRECTORY,
"If set to a directory, content which is temporarily extracted (e.g. from archives) will be extracted to this directory."
"Если выбрана папка, содержимое, которое временно извлечено (например, из архивов), будет извлечено в этой папке."
)
MSG_HASH(MENU_ENUM_SUBLABEL_CURSOR_DIRECTORY,
"Saved queries are stored to this directory.")
"Выберите папку, где хранятся saved queries..")
MSG_HASH(
MENU_ENUM_SUBLABEL_CONTENT_DATABASE_DIRECTORY,
"Databases are stored to this directory."
"Выберите папку для хранения базы данных."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_ASSETS_DIRECTORY,
"This location is queried by default when menu interfaces try to look for loadable assets, etc."
"Это местоположение запрашивается по умолчанию, когда интерфейсы меню пытаются найти загружаемые активы и т.д."
)
MSG_HASH(MENU_ENUM_SUBLABEL_SAVEFILE_DIRECTORY,
"Save all save files to this directory. If not set, will try to save inside the content file's working directory.")
"Выберите папку для сохрания всех save files. Если путь к папку не задано, попробуйте сохранить внутри рабочего каталога файла содержимого.")
MSG_HASH(MENU_ENUM_SUBLABEL_SAVESTATE_DIRECTORY,
"Save all save states to this directory. If not set, will try to save inside the content file's working directory.")
"Выберите папку для сохрания всех save states. Если путь к папку не задано, попробуйте сохранить внутри рабочего каталога файла содержимого.")
MSG_HASH(MENU_ENUM_SUBLABEL_SCREENSHOT_DIRECTORY,
"Directory to dump screenshots to.")
"Выберите папку, где будут сохраняться ваши скриншоты.")
MSG_HASH(MENU_ENUM_SUBLABEL_OVERLAY_DIRECTORY,
"Defines a directory where overlays are kept for easy access.")
"Выберите папку, где будут находиться ваши наложения (Overlays).")
MSG_HASH(
MENU_ENUM_SUBLABEL_CHEAT_DATABASE_PATH,
"Cheat files are kept here."
"Выберите папку, где будут находиться ваши чит-файлы."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AUDIO_FILTER_DIR,
"Directory where audio DSP filter files are kept."
"Выберите папку, где будут находиться файлы звуковых фильтр DSP."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_VIDEO_FILTER_DIR,
"Directory where CPU-based video filter files are kept."
"Выберите папку, где будут находиться GPU-based фильтры."
)
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SHADER_DIR,
"Defines a directory where GPU-based video shader files are kept for easy access.")
"Выберите папку, где будут находиться GPU-based шейдеры.")
MSG_HASH(MENU_ENUM_SUBLABEL_RECORDING_OUTPUT_DIRECTORY,
"Recordings will be dumped to this directory.")
"Выберите папку, где будут сохраняться ваши записи.")
MSG_HASH(MENU_ENUM_SUBLABEL_RECORDING_CONFIG_DIRECTORY,
"Recording configurations will be kept here.")
"Выберите папку, где будут находиться ваши записи конфигураций.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_FONT_PATH,
"Select a different font for onscreen notifications.")
"Выберите шрифт для красивого отображения оповещений.")
MSG_HASH(MENU_ENUM_SUBLABEL_SHADER_APPLY_CHANGES,
"Changes to the shader configuration will take effect immediately. Use this if you changed the amount of shader passes, filtering, FBO scale, etc.")
"Изменения конфигурации шейдера вступят в силу немедленно. Используйте это, если вы изменили количество используемых шейдеров, фильтров, шкалу и т.д.")
MSG_HASH(
MENU_ENUM_SUBLABEL_VIDEO_SHADER_NUM_PASSES,
"Increase or decrease the amount of shader pipeline passes. You can bind a separate shader to each pipeline pass and configure its scale and filtering."
"Повышайте или уменьшайте кол-во используемых шейдеров pipeline. Вы можете привязать отдельный шейдер к каждому pipeline конвейера и настроить его масштаб и фильтрацию."
)
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET,
"Load a shader preset. The shader pipeline will be automatically set-up.")
"Выберите предустановленный шейдер. Pipeline шейдера будет автоматически настроен.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET_SAVE_AS,
"Save the current shader settings as a new shader preset.")
"Сохраните текущие настройки шейдера в качестве нового предустановленного шейдера.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET_SAVE_CORE,
"Save the current shader settings as the default settings for this application/core.")
"Сохраните текущие настройки шейдера как настройки по умолчанию для этого игры / ядра.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET_SAVE_GAME,
"Save the current shader settings as the default settings for the content.")
"Сохраните текущие настройки шейдера в качестве настроек по умолчанию для игры.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SHADER_PARAMETERS,
"Modifies the current shader directly. Changes will not be saved to the preset file.")
"Изменяет текущий шейдер напрямую. Изменения не будут сохранены в файл предварительной настройки.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET_PARAMETERS,
"Modifies the shader preset itself currently used in the menu.")
"Изменяет настройки шейдера, которая в настоящее время используется в меню.")
MSG_HASH(
MENU_ENUM_SUBLABEL_CHEAT_NUM_PASSES,
"Increase or decrease the amount of cheats."
"Увеличение или уменьшение кол-во используемых чит-кодов."
)
MSG_HASH(MENU_ENUM_SUBLABEL_CHEAT_APPLY_CHANGES,
"Cheat changes will take effect immediately.")
"Изменения чит-кодов заработают сиюсекундно.")
MSG_HASH(
MENU_ENUM_SUBLABEL_CHEAT_FILE_LOAD,
"Load a cheat file."
"Открыть чит-файл."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_CHEAT_FILE_SAVE_AS,
"Save current cheats as a save file."
"Сохранить ниже указанные чит-коды в чит-файл."
)
MSG_HASH(MENU_ENUM_SUBLABEL_CONTENT_SETTINGS,
"Quickly access all relevant in-game settings.")
"Быстрый доступ к настройкам игры/ядра (работает, когда запустится любая игра).")
MSG_HASH(MENU_ENUM_SUBLABEL_CORE_INFORMATION,
"View information pertaining to the application/core.")
"Просмотреть полную информаию о ядре + удалить ядро.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_ASPECT_RATIO,
"Floating point value for video aspect ratio (width / height), used if the Aspect Ratio is set to 'Config'.")
"Значение плавающей точки для соотношения сторон видео (ширина / высота), используется, если для параметра «Соотношение сторон» установлено значение «Config».")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_VIEWPORT_CUSTOM_HEIGHT,
"Custom viewport height that is used if the Aspect Ratio is set to 'Custom'.")
"Настройка высоты окна экрана, которая используется, если для параметра «Соотношение сторон» установлено значение «Пользовательский».")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_VIEWPORT_CUSTOM_WIDTH,
"Custom viewport width that is used if the Aspect Ratio is set to 'Custom'.")
"Настройка ширины окна экрана, которая используется, если для параметра «Соотношение сторон» установлено значение «Пользовательский».")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_VIEWPORT_CUSTOM_X,
"Custom viewport offset used for defining the X-axis position of the viewport. These are ignored if 'Integer Scale' is enabled. It will be automatically centered then.")
"Настройка смещение окна экрана для определения положения оси X окна просмотра. Она игнорируются, если включена функция «Целочисленная шкала». Оно будет автоматически центрирован.")
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_VIEWPORT_CUSTOM_Y,
"Custom viewport offset used for defining the Y-axis position of the viewport. These are ignored if 'Integer Scale' is enabled. It will be automatically centered then.")
"Настройка смещение окна экрана для определения положения оси Y окна просмотра. Она игнорируются, если включена функция «Целочисленная шкала». Оно будет автоматически центрирован.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_USE_MITM_SERVER,
"Use Relay Server")
"Использовать релейный сервер")
MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY_USE_MITM_SERVER,
"Forward netplay connections through a man-in-the-middle server. Useful if the host is behind a firewall or has NAT/UPnP problems.")
"Передать сетевые соединения через сервер «man-in-the-midle». Будет полезным, если хост находится за брандмауэром или имеет проблемы NAT / UPnP.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_ADD_TO_MIXER,
"Add to mixer")
"Добавить в микшер")
MSG_HASH(MENU_ENUM_LABEL_VALUE_ADD_TO_MIXER_AND_COLLECTION,
"Add to mixer")
"Добавить в микшер")
MSG_HASH(MENU_ENUM_LABEL_VALUE_FILTER_BY_CURRENT_CORE,
"Filter by current core")
"Фильтрировать по текущему ядру")
MSG_HASH(
MSG_AUDIO_MIXER_VOLUME,
"Global audio mixer volume"
"Общиий уровень громкости звукового микшера"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AUDIO_MIXER_VOLUME,
"Global audio mixer volume (in dB). 0 dB is normal volume, and no gain is applied."
"Громкость звукового микшера (в дБ). По умолчанию стоит 0 дБ и коэффициент усиления не применяется."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AUDIO_MIXER_VOLUME,
"Audio Mixer Volume Level (dB)"
"Уровень громкости звукового микшера (dB)"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AUDIO_MIXER_MUTE,
"Audio Mixer Mute"
"Отключить звуковой микшер"
)
MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_MIXER_MUTE,
"Mute/unmute mixer audio.")
"Отключить / Включить звуковой микшер.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_SHOW_ONLINE_UPDATER,
"Показать меню Онлайн-обновление")
MSG_HASH(MENU_ENUM_SUBLABEL_MENU_SHOW_ONLINE_UPDATER,
@ -3065,12 +3065,36 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_SHOW_CORE_UPDATER,
MSG_HASH(MENU_ENUM_SUBLABEL_MENU_SHOW_CORE_UPDATER,
"Показать/скрыть возможность обновлять ядра (и информационные файлы ядер).")
MSG_HASH(MSG_PREPARING_FOR_CONTENT_SCAN,
"Preparing for content scan...")
"Подготовка к сканированию...")
MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_DELETE,
"Delete core")
"Удалить ядро")
MSG_HASH(MENU_ENUM_SUBLABEL_CORE_DELETE,
"Remove this core from disk.")
"Удаление ядра с устройства.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME,
"Rename the title of the entry.")
"Переименовать название игры")
MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME,
"Rename")
"Переименовать")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY,
"Прозрачность кадра")
MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY,
"Модификация прозрачности кадров.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES,
"Избранные")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES,
"Любой контент, который вы добавите в «Избранное», появится в этом списке.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC,
"Музыка")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC,
"Любая музыка, которая была ранее прослушана, появится в этом разделе.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES,
"Фотографии")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES,
"Любая фотография, которая ранее была просмотрена, появится в этом разделе.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO,
"Видео")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO,
"Любое видео, которое ранее было просмотрено, появится в этом разделе.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE,
"Иконки интерфейса")
MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE,
"Отображать или скрывать иконки интерфейса, отображающиеся в левой части меню.")

View File

@ -25,189 +25,200 @@
#include "../configuration.h"
#include "../verbosity.h"
int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len) {
int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len)
{
uint32_t driver_hash = 0;
settings_t *settings = config_get_ptr();
if (msg == MENU_ENUM_LABEL_CONNECT_NETPLAY_ROOM)
{
snprintf(s, len,
"TODO/FIXME - Fill in message here."
);
return 0;
}
if (msg <= MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_END &&
msg >= MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN) {
unsigned idx = msg - MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN;
msg >= MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN)
{
unsigned idx = msg - MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN;
switch (idx) {
case RARCH_FAST_FORWARD_KEY:
snprintf(s, len,
"Toggles between fast-forwarding and \n"
"normal speed."
);
break;
case RARCH_FAST_FORWARD_HOLD_KEY:
snprintf(s, len,
"Hold for fast-forward. \n"
" \n"
"Releasing button disables fast-forward."
);
break;
case RARCH_PAUSE_TOGGLE:
snprintf(s, len,
"Toggle between paused and non-paused state.");
break;
case RARCH_FRAMEADVANCE:
snprintf(s, len,
"Frame advance when content is paused.");
break;
case RARCH_SHADER_NEXT:
snprintf(s, len,
"Applies next shader in directory.");
break;
case RARCH_SHADER_PREV:
snprintf(s, len,
"Applies previous shader in directory.");
break;
case RARCH_CHEAT_INDEX_PLUS:
case RARCH_CHEAT_INDEX_MINUS:
case RARCH_CHEAT_TOGGLE:
snprintf(s, len,
"Cheats.");
break;
case RARCH_RESET:
snprintf(s, len,
"Reset the content.");
break;
case RARCH_SCREENSHOT:
snprintf(s, len,
"Take screenshot.");
break;
case RARCH_MUTE:
snprintf(s, len,
"Mute/unmute audio.");
break;
case RARCH_OSK:
snprintf(s, len,
"Toggles onscreen keyboard.");
break;
case RARCH_NETPLAY_FLIP:
snprintf(s, len,
"Netplay flip users.");
break;
case RARCH_NETPLAY_GAME_WATCH:
snprintf(s, len,
"Netplay toggle play/spectate mode.");
break;
case RARCH_SLOWMOTION:
snprintf(s, len,
"Hold for slowmotion.");
break;
case RARCH_ENABLE_HOTKEY:
snprintf(s, len,
"Enable other hotkeys. \n"
" \n"
"If this hotkey is bound to either\n"
"a keyboard, joybutton or joyaxis, \n"
"all other hotkeys will be enabled only \n"
"if this one is held at the same time. \n"
" \n"
"Alternatively, all hotkeys for keyboard \n"
"could be disabled by the user.");
break;
case RARCH_VOLUME_UP:
snprintf(s, len,
"Increases audio volume.");
break;
case RARCH_VOLUME_DOWN:
snprintf(s, len,
"Decreases audio volume.");
break;
case RARCH_OVERLAY_NEXT:
snprintf(s, len,
"Switches to next overlay. Wraps around.");
break;
case RARCH_DISK_EJECT_TOGGLE:
snprintf(s, len,
"Toggles eject for disks. \n"
" \n"
"Used for multiple-disk content. ");
break;
case RARCH_DISK_NEXT:
case RARCH_DISK_PREV:
snprintf(s, len,
"Cycles through disk images. Use after ejecting. \n"
" \n"
"Complete by toggling eject again.");
break;
case RARCH_GRAB_MOUSE_TOGGLE:
snprintf(s, len,
"Toggles mouse grab. \n"
" \n"
"When mouse is grabbed, RetroArch hides the \n"
"mouse, and keeps the mouse pointer inside \n"
"the window to allow relative mouse input to \n"
"work better.");
break;
case RARCH_GAME_FOCUS_TOGGLE:
snprintf(s, len,
"Toggles game focus.\n"
" \n"
"When a game has focus, RetroArch will both disable \n"
"hotkeys and keep/warp the mouse pointer inside the window.");
break;
case RARCH_MENU_TOGGLE:
snprintf(s, len, "Toggles menu.");
break;
case RARCH_LOAD_STATE_KEY:
snprintf(s, len,
"Loads state.");
break;
case RARCH_FULLSCREEN_TOGGLE_KEY:
snprintf(s, len,
"Toggles fullscreen.");
break;
case RARCH_QUIT_KEY:
snprintf(s, len,
"Key to exit RetroArch cleanly. \n"
" \n"
"Killing it in any hard way (SIGKILL, etc.) will \n"
"terminate RetroArch without saving RAM, etc."
switch (idx)
{
case RARCH_FAST_FORWARD_KEY:
snprintf(s, len,
"Toggles between fast-forwarding and \n"
"normal speed."
);
break;
case RARCH_FAST_FORWARD_HOLD_KEY:
snprintf(s, len,
"Hold for fast-forward. \n"
" \n"
"Releasing button disables fast-forward."
);
break;
case RARCH_PAUSE_TOGGLE:
snprintf(s, len,
"Toggle between paused and non-paused state.");
break;
case RARCH_FRAMEADVANCE:
snprintf(s, len,
"Frame advance when content is paused.");
break;
case RARCH_SHADER_NEXT:
snprintf(s, len,
"Applies next shader in directory.");
break;
case RARCH_SHADER_PREV:
snprintf(s, len,
"Applies previous shader in directory.");
break;
case RARCH_CHEAT_INDEX_PLUS:
case RARCH_CHEAT_INDEX_MINUS:
case RARCH_CHEAT_TOGGLE:
snprintf(s, len,
"Cheats.");
break;
case RARCH_RESET:
snprintf(s, len,
"Reset the content.");
break;
case RARCH_SCREENSHOT:
snprintf(s, len,
"Take screenshot.");
break;
case RARCH_MUTE:
snprintf(s, len,
"Mute/unmute audio.");
break;
case RARCH_OSK:
snprintf(s, len,
"Toggles onscreen keyboard.");
break;
case RARCH_NETPLAY_FLIP:
snprintf(s, len,
"Netplay flip users.");
break;
case RARCH_NETPLAY_GAME_WATCH:
snprintf(s, len,
"Netplay toggle play/spectate mode.");
break;
case RARCH_SLOWMOTION:
snprintf(s, len,
"Hold for slowmotion.");
break;
case RARCH_ENABLE_HOTKEY:
snprintf(s, len,
"Enable other hotkeys. \n"
" \n"
"If this hotkey is bound to either\n"
"a keyboard, joybutton or joyaxis, \n"
"all other hotkeys will be enabled only \n"
"if this one is held at the same time. \n"
" \n"
"Alternatively, all hotkeys for keyboard \n"
"could be disabled by the user.");
break;
case RARCH_VOLUME_UP:
snprintf(s, len,
"Increases audio volume.");
break;
case RARCH_VOLUME_DOWN:
snprintf(s, len,
"Decreases audio volume.");
break;
case RARCH_OVERLAY_NEXT:
snprintf(s, len,
"Switches to next overlay. Wraps around.");
break;
case RARCH_DISK_EJECT_TOGGLE:
snprintf(s, len,
"Toggles eject for disks. \n"
" \n"
"Used for multiple-disk content. ");
break;
case RARCH_DISK_NEXT:
case RARCH_DISK_PREV:
snprintf(s, len,
"Cycles through disk images. Use after ejecting. \n"
" \n"
"Complete by toggling eject again.");
break;
case RARCH_GRAB_MOUSE_TOGGLE:
snprintf(s, len,
"Toggles mouse grab. \n"
" \n"
"When mouse is grabbed, RetroArch hides the \n"
"mouse, and keeps the mouse pointer inside \n"
"the window to allow relative mouse input to \n"
"work better.");
break;
case RARCH_GAME_FOCUS_TOGGLE:
snprintf(s, len,
"Toggles game focus.\n"
" \n"
"When a game has focus, RetroArch will both disable \n"
"hotkeys and keep/warp the mouse pointer inside the window.");
break;
case RARCH_MENU_TOGGLE:
snprintf(s, len, "Toggles menu.");
break;
case RARCH_LOAD_STATE_KEY:
snprintf(s, len,
"Loads state.");
break;
case RARCH_FULLSCREEN_TOGGLE_KEY:
snprintf(s, len,
"Toggles fullscreen.");
break;
case RARCH_QUIT_KEY:
snprintf(s, len,
"Key to exit RetroArch cleanly. \n"
" \n"
"Killing it in any hard way (SIGKILL, etc.) will \n"
"terminate RetroArch without saving RAM, etc."
#ifdef __unix__
"\nOn Unix-likes, SIGINT/SIGTERM allows a clean \n"
"deinitialization."
"\nOn Unix-likes, SIGINT/SIGTERM allows a clean \n"
"deinitialization."
#endif
"");
break;
case RARCH_STATE_SLOT_PLUS:
case RARCH_STATE_SLOT_MINUS:
snprintf(s, len,
"State slots. \n"
" \n"
"With slot set to 0, save state name is \n"
"*.state (or whatever defined on commandline). \n"
" \n"
"When slot is not 0, path will be <path><d>, \n"
"where <d> is slot number.");
break;
case RARCH_SAVE_STATE_KEY:
snprintf(s, len,
"Saves state.");
break;
case RARCH_REWIND:
snprintf(s, len,
"Hold button down to rewind. \n"
" \n"
"Rewinding must be enabled.");
break;
case RARCH_MOVIE_RECORD_TOGGLE:
snprintf(s, len,
"Toggle between recording and not.");
break;
default:
if (string_is_empty(s))
strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_INFORMATION_AVAILABLE), len);
break;
}
"");
break;
case RARCH_STATE_SLOT_PLUS:
case RARCH_STATE_SLOT_MINUS:
snprintf(s, len,
"State slots. \n"
" \n"
"With slot set to 0, save state name is \n"
"*.state (or whatever defined on commandline). \n"
" \n"
"When slot is not 0, path will be <path><d>, \n"
"where <d> is slot number.");
break;
case RARCH_SAVE_STATE_KEY:
snprintf(s, len,
"Saves state.");
break;
case RARCH_REWIND:
snprintf(s, len,
"Hold button down to rewind. \n"
" \n"
"Rewinding must be enabled.");
break;
case RARCH_MOVIE_RECORD_TOGGLE:
snprintf(s, len,
"Toggle between recording and not.");
break;
default:
if (string_is_empty(s))
strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_INFORMATION_AVAILABLE), len);
break;
}
return 0;
return 0;
}
switch (msg) {
switch (msg)
{
case MENU_ENUM_LABEL_ACCOUNTS_RETRO_ACHIEVEMENTS:
snprintf(s, len, "Login details for your \n"
"Retro Achievements account. \n"

View File

@ -1840,7 +1840,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY,
MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY_LAN_SCAN_SETTINGS,
"Search for and connect to netplay hosts on the local network.")
MSG_HASH(MENU_ENUM_SUBLABEL_INFORMATION_LIST_LIST,
"Display core, network, and system information.")
"Display system information.")
MSG_HASH(MENU_ENUM_SUBLABEL_ONLINE_UPDATER,
"Download add-ons, components, and content for RetroArch.")
MSG_HASH(MENU_ENUM_SUBLABEL_SAMBA_ENABLE,
@ -1875,6 +1875,8 @@ MSG_HASH(MENU_ENUM_SUBLABEL_WIFI_SETTINGS,
"Scans for wireless networks and establishes connection.")
MSG_HASH(MENU_ENUM_SUBLABEL_HELP_LIST,
"Learn more about how the program works.")
MSG_HASH(MSG_ADDED_TO_FAVORITES,
"Added to favorites")
MSG_HASH(MSG_APPENDED_DISK,
"Appended disk")
MSG_HASH(MSG_APPLICATION_DIR,
@ -3105,3 +3107,27 @@ MSG_HASH(MENU_ENUM_SUBLABEL_PLAYLIST_ENTRY_RENAME,
"Rename the title of the entry.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME,
"Rename")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY,
"Framebuffer Opacity")
MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY,
"Modify the opacity of the framebuffer.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES,
"Favorites")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES,
"Content which you have added to 'Favorites' will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC,
"Music")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC,
"Music which has been previously played will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES,
"Image")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES,
"Images which have been previously viewed will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO,
"Video")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO,
"Videos which have been previously played will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE,
"Menu Icons")
MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE,
"Enable/disable the menu icons shown at the lefthand side of the menu entries.")

View File

@ -3045,3 +3045,27 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME,
"Rename the title of the entry.")
MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME,
"Rename")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY,
"Framebuffer Opacity")
MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY,
"Modify the opacity of the framebuffer.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES,
"Favorites")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES,
"Content which you have added to 'Favorites' will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC,
"Music")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC,
"Music which has been previously played will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES,
"Image")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES,
"Images which have been previously viewed will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO,
"Video")
MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO,
"Videos which have been previously played will appear here.")
MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE,
"Menu Icons")
MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE,
"Enable/disable the menu icons shown at the lefthand side of the menu entries.")

View File

@ -184,7 +184,7 @@ int getopt_long(int argc, char *argv[],
if (optind == 0)
optind = 1;
if (argc == 1)
if (argc < 2)
return -1;
short_index = find_short_index(&argv[optind]);

View File

@ -393,6 +393,8 @@ const char *inet_ntop_compat(int af, const void *src, char *dst, socklen_t cnt)
return dst;
}
#endif
#else
return inet_ntop(af, src, dst, cnt);
#endif
return NULL;

View File

@ -231,6 +231,8 @@ int sthread_detach(sthread_t *thread)
*/
void sthread_join(sthread_t *thread)
{
if (!thread)
return;
#ifdef USE_WIN32_THREADS
WaitForSingleObject(thread->thread, INFINITE);
CloseHandle(thread->thread);

View File

@ -24,6 +24,7 @@ C_CONVERTER_C = \
$(LIBRETRO_COMM_DIR)/hash/rhash.c \
$(LIBRETRO_COMM_DIR)/compat/compat_fnmatch.c \
$(LIBRETRO_COMM_DIR)/string/stdstring.c \
$(LIBRETRO_COMM_DIR)/encodings/encoding_utf.c \
$(LIBRETRO_COMMON_C) \
$(LIBRETRO_COMM_DIR)/compat/compat_strl.c
@ -38,6 +39,7 @@ RARCHDB_TOOL_C = \
$(LIBRETRODB_DIR)/libretrodb.c \
$(LIBRETRO_COMM_DIR)/compat/compat_fnmatch.c \
$(LIBRETRO_COMM_DIR)/string/stdstring.c \
$(LIBRETRO_COMM_DIR)/encodings/encoding_utf.c \
$(LIBRETRO_COMMON_C) \
$(LIBRETRO_COMM_DIR)/compat/compat_strl.c

View File

@ -821,6 +821,24 @@ static int deferred_push_detect_core_list(menu_displaylist_info_t *info)
DISPLAYLIST_CORES_DETECTED);
}
static int deferred_music_history_list(menu_displaylist_info_t *info)
{
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
return general_push(info, PUSH_DEFAULT, DISPLAYLIST_MUSIC_HISTORY);
}
static int deferred_image_history_list(menu_displaylist_info_t *info)
{
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
return general_push(info, PUSH_DEFAULT, DISPLAYLIST_IMAGES_HISTORY);
}
static int deferred_video_history_list(menu_displaylist_info_t *info)
{
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
return general_push(info, PUSH_DEFAULT, DISPLAYLIST_VIDEO_HISTORY);
}
static int deferred_archive_open_detect_core(menu_displaylist_info_t *info)
{
return general_push(info, PUSH_ARCHIVE_OPEN_DETECT_CORE,
@ -857,6 +875,11 @@ static int deferred_push_content_collection_list(menu_displaylist_info_t *info)
return deferred_push_dlist(info, DISPLAYLIST_DATABASE_PLAYLISTS);
}
static int deferred_push_favorites_list(menu_displaylist_info_t *info)
{
return general_push(info, PUSH_DEFAULT, DISPLAYLIST_FAVORITES);
}
static int deferred_push_browse_url_list(menu_displaylist_info_t *info)
{
return deferred_push_dlist(info, DISPLAYLIST_BROWSE_URL_LIST);
@ -941,131 +964,131 @@ static int menu_cbs_init_bind_deferred_push_compare_label(
menu_file_list_cbs_t *cbs,
const char *label, uint32_t label_hash)
{
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_BROWSE_URL_LIST)))
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_favorites_list);
return 0;
}
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_BROWSE_URL_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_browse_url_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_BROWSE_URL_START)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_BROWSE_URL_START)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_browse_url_start);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CORE_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CORE_SETTINGS_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CONFIGURATION_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CONFIGURATION_SETTINGS_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_configuration_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_SAVING_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_SAVING_SETTINGS_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_saving_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_LOGGING_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_LOGGING_SETTINGS_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_logging_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_FRAME_THROTTLE_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_FRAME_THROTTLE_SETTINGS_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_frame_throttle_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_REWIND_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_REWIND_SETTINGS_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_rewind_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_DISPLAY_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_DISPLAY_SETTINGS_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_onscreen_display_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_NOTIFICATIONS_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_NOTIFICATIONS_SETTINGS_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_onscreen_notifications_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_OVERLAY_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_OVERLAY_SETTINGS_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_onscreen_overlay_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MENU_FILE_BROWSER_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MENU_FILE_BROWSER_SETTINGS_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_menu_file_browser_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MENU_VIEWS_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MENU_VIEWS_SETTINGS_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_menu_views_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MENU_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MENU_SETTINGS_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_menu_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_USER_INTERFACE_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_USER_INTERFACE_SETTINGS_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_user_interface_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_RETRO_ACHIEVEMENTS_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_RETRO_ACHIEVEMENTS_SETTINGS_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_retro_achievements_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_UPDATER_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_UPDATER_SETTINGS_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_updater_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_NETWORK_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_NETWORK_SETTINGS_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_network_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_WIFI_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_WIFI_SETTINGS_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_wifi_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_LAKKA_SERVICES_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_LAKKA_SERVICES_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_lakka_services_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_USER_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_USER_SETTINGS_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_user_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_DIRECTORY_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_DIRECTORY_SETTINGS_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_directory_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_PRIVACY_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_PRIVACY_SETTINGS_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_privacy_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_DIRS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_DIRS_LIST)))
{
#ifdef HAVE_NETWORKING
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_content_dirs_list);
@ -1073,19 +1096,38 @@ static int menu_cbs_init_bind_deferred_push_compare_label(
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_DIRS_SUBDIR_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_DIRS_SUBDIR_LIST)))
{
#ifdef HAVE_NETWORKING
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_content_dirs_subdir_list);
#endif
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MUSIC)))
else if (
string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MUSIC)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_music_list);
return 0;
}
if (strstr(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_RDB_ENTRY_DETAIL)))
else if (
string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MUSIC_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_music_history_list);
return 0;
}
else if (
string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_IMAGES_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_image_history_list);
return 0;
}
else if (
string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_VIDEO_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_video_history_list);
return 0;
}
else if (strstr(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_RDB_ENTRY_DETAIL)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_rdb_entry_detail);
}
@ -1099,6 +1141,110 @@ static int menu_cbs_init_bind_deferred_push_compare_label(
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_netplay_sublist);
}
else if (strstr(label,
msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_INPUT_SETTINGS_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_input_settings_list);
}
#ifdef HAVE_NETWORKING
else if (strstr(label,
msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CORE_UPDATER_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_updater_list);
}
#endif
else if (strstr(label,
msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_DRIVER_SETTINGS_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_driver_settings_list);
}
else if (strstr(label,
msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_VIDEO_SETTINGS_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_video_settings_list);
}
else if (strstr(label,
msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_AUDIO_SETTINGS_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_audio_settings_list);
}
else if (strstr(label,
msg_hash_to_str(MENU_ENUM_LABEL_CORE_INFORMATION)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_information);
}
else if (strstr(label,
msg_hash_to_str(MENU_ENUM_LABEL_SYSTEM_INFORMATION)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_system_information);
}
else if (strstr(label,
msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ACCOUNTS_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_accounts_list);
}
else if (strstr(label,
msg_hash_to_str(MENU_ENUM_LABEL_CORE_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_list);
}
else if (strstr(label,
msg_hash_to_str(MENU_ENUM_LABEL_LOAD_CONTENT_HISTORY)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_history_list);
}
else if (strstr(label,
msg_hash_to_str(MENU_ENUM_LABEL_CORE_OPTIONS)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_options);
}
else if (strstr(label,
msg_hash_to_str(MENU_ENUM_LABEL_NETWORK_INFORMATION)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_network_information);
}
#ifdef HAVE_NETWORKING
else if (strstr(label,
msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_THUMBNAILS_UPDATER_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_thumbnails_updater_list);
}
else if (strstr(label,
msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_content_list);
}
#endif
else if (strstr(label,
msg_hash_to_str(MENU_ENUM_LABEL_ONLINE_UPDATER)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_options);
}
else if (strstr(label,
msg_hash_to_str(MENU_ENUM_LABEL_HELP_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_help);
}
else if (strstr(label,
msg_hash_to_str(MENU_ENUM_LABEL_INFORMATION_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_information_list);
}
else if (strstr(label,
msg_hash_to_str(MENU_ENUM_LABEL_SHADER_OPTIONS)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_shader_options);
}
else if (strstr(label,
msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_USER_BINDS_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_user_binds_list);
}
else if (strstr(label,
msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_INPUT_HOTKEY_BINDS_LIST)))
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_input_hotkey_binds_list);
}
else
{
if (cbs->enum_idx != MSG_UNKNOWN)
@ -1114,9 +1260,6 @@ static int menu_cbs_init_bind_deferred_push_compare_label(
case MENU_ENUM_LABEL_DEFERRED_ACCOUNTS_LIST:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_accounts_list);
break;
case MENU_ENUM_LABEL_DEFERRED_INPUT_SETTINGS_LIST:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_input_settings_list);
break;
case MENU_ENUM_LABEL_DEFERRED_PLAYLIST_SETTINGS_LIST:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_playlist_settings_list);
break;
@ -1154,11 +1297,6 @@ static int menu_cbs_init_bind_deferred_push_compare_label(
case MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_DIRS_SUBDIR_LIST:
#ifdef HAVE_NETWORKING
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_content_dirs_subdir_list);
#endif
break;
case MENU_ENUM_LABEL_DEFERRED_CORE_UPDATER_LIST:
#ifdef HAVE_NETWORKING
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_updater_list);
#endif
break;
case MENU_ENUM_LABEL_DEFERRED_THUMBNAILS_UPDATER_LIST:
@ -1287,12 +1425,6 @@ static int menu_cbs_init_bind_deferred_push_compare_label(
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_cursor_manager_list_deferred_query_rdb_entry_releaseyear);
break;
#endif
case MENU_ENUM_LABEL_CORE_INFORMATION:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_information);
break;
case MENU_ENUM_LABEL_SYSTEM_INFORMATION:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_system_information);
break;
case MENU_ENUM_LABEL_NETWORK_INFORMATION:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_network_information);
break;
@ -1404,36 +1536,18 @@ static int menu_cbs_init_bind_deferred_push_compare_label(
{
switch (label_hash)
{
case MENU_LABEL_DEFERRED_CONFIGURATIONS_LIST:
case MENU_LABEL_SETTINGS: /* TODO/FIXME */
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_settings);
break;
case MENU_LABEL_DEFERRED_CONFIGURATIONS_LIST: /* TODO/FIXME */
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_configurations_list);
break;
case MENU_LABEL_DEFERRED_USER_BINDS_LIST:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_user_binds_list);
break;
case MENU_LABEL_DEFERRED_ACCOUNTS_LIST:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_accounts_list);
break;
case MENU_LABEL_DEFERRED_DRIVER_SETTINGS_LIST:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_driver_settings_list);
break;
case MENU_LABEL_DEFERRED_VIDEO_SETTINGS_LIST:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_video_settings_list);
break;
case MENU_LABEL_DEFERRED_AUDIO_SETTINGS_LIST:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_audio_settings_list);
break;
case MENU_LABEL_DEFERRED_INPUT_SETTINGS_LIST:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_input_settings_list);
break;
case MENU_LABEL_DEFERRED_PLAYLIST_SETTINGS_LIST:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_playlist_settings_list);
break;
case MENU_LABEL_DEFERRED_RECORDING_SETTINGS_LIST:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_recording_settings_list);
break;
case MENU_LABEL_DEFERRED_INPUT_HOTKEY_BINDS_LIST:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_input_hotkey_binds_list);
break;
case MENU_LABEL_DEFERRED_ACCOUNTS_CHEEVOS_LIST:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_accounts_cheevos_list);
break;
@ -1449,29 +1563,11 @@ static int menu_cbs_init_bind_deferred_push_compare_label(
case MENU_LABEL_DEFERRED_ARCHIVE_OPEN:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_archive_open);
break;
case MENU_LABEL_DEFERRED_CORE_CONTENT_LIST:
#ifdef HAVE_NETWORKING
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_content_list);
#endif
break;
case MENU_LABEL_DEFERRED_CORE_UPDATER_LIST:
#ifdef HAVE_NETWORKING
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_updater_list);
#endif
break;
case MENU_LABEL_DEFERRED_THUMBNAILS_UPDATER_LIST:
#ifdef HAVE_NETWORKING
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_thumbnails_updater_list);
#endif
break;
case MENU_LABEL_DEFERRED_LAKKA_LIST:
#ifdef HAVE_NETWORKING
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_lakka_list);
#endif
break;
case MENU_LABEL_LOAD_CONTENT_HISTORY:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_history_list);
break;
case MENU_LABEL_DATABASE_MANAGER_LIST:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_database_manager_list);
break;
@ -1487,12 +1583,6 @@ static int menu_cbs_init_bind_deferred_push_compare_label(
case MENU_LABEL_RECORD_CONFIG:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_record_configfile);
break;
case MENU_LABEL_SHADER_OPTIONS:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_shader_options);
break;
case MENU_LABEL_ONLINE_UPDATER:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_options);
break;
case MENU_LABEL_NETPLAY:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_netplay);
break;
@ -1505,15 +1595,9 @@ static int menu_cbs_init_bind_deferred_push_compare_label(
case MENU_LABEL_LOAD_CONTENT_LIST:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_load_content_list);
break;
case MENU_LABEL_INFORMATION_LIST:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_information_list);
break;
case MENU_LABEL_MANAGEMENT:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_management_options);
break;
case MENU_LABEL_HELP_LIST:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_help);
break;
case MENU_LABEL_DEFERRED_CORE_LIST:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_list_deferred);
break;
@ -1579,15 +1663,6 @@ static int menu_cbs_init_bind_deferred_push_compare_label(
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_cursor_manager_list_deferred_query_rdb_entry_releaseyear);
break;
#endif
case MENU_LABEL_CORE_INFORMATION:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_information);
break;
case MENU_LABEL_SYSTEM_INFORMATION:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_system_information);
break;
case MENU_LABEL_NETWORK_INFORMATION:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_network_information);
break;
case MENU_LABEL_ACHIEVEMENT_LIST:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_achievement_list);
break;
@ -1606,21 +1681,12 @@ static int menu_cbs_init_bind_deferred_push_compare_label(
case MENU_LABEL_VIDEO_SHADER_PARAMETERS:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_video_shader_parameters);
break;
case MENU_LABEL_SETTINGS:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_settings);
break;
case MENU_LABEL_CORE_OPTIONS:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_options);
break;
case MENU_LABEL_CORE_CHEAT_OPTIONS:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_cheat_options);
break;
case MENU_LABEL_CORE_INPUT_REMAPPING_OPTIONS:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_input_remapping_options);
break;
case MENU_LABEL_CORE_LIST:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_list);
break;
case MENU_LABEL_CONTENT_COLLECTION_LIST:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_content_collection_list);
break;

View File

@ -26,6 +26,10 @@
cbs->action_info_ident = #name;
#endif
#ifdef HAVE_NETWORKING
#include "../../network/netplay/netplay_discovery.h"
#endif
static int action_info_default(unsigned type, const char *label)
{
menu_displaylist_info_t info = {0};
@ -60,8 +64,8 @@ static int action_info_cheevos(unsigned type, const char *label)
menu_dialog_set_current_id(new_id);
return generic_action_ok_help(NULL, label, new_id, 0, 0,
MENU_ENUM_LABEL_CHEEVOS_DESCRIPTION,
MENU_DIALOG_HELP_CHEEVOS_DESCRIPTION);
MENU_ENUM_LABEL_CHEEVOS_DESCRIPTION,
MENU_DIALOG_HELP_CHEEVOS_DESCRIPTION);
}
#endif
@ -72,7 +76,8 @@ int menu_cbs_init_bind_info(menu_file_list_cbs_t *cbs,
return -1;
#ifdef HAVE_CHEEVOS
if ((type >= MENU_SETTINGS_CHEEVOS_START))
if ((type >= MENU_SETTINGS_CHEEVOS_START) &&
(type < MENU_SETTINGS_NETPLAY_ROOMS_START))
{
BIND_ACTION_INFO(cbs, action_info_cheevos);
return 0;

View File

@ -35,55 +35,18 @@ static int action_bind_label_generic(
return 0;
}
static int action_bind_label_information(
file_list_t *list,
unsigned type, unsigned i,
const char *label, const char *path,
char *s, size_t len)
{
strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INFORMATION), len);
return 0;
#define fill_label_macro(func, lbl) \
static int (func)(file_list_t *list, unsigned type, unsigned i, const char *label, const char *path, char *s, size_t len) \
{ \
strlcpy(s, msg_hash_to_str(lbl), len); \
return 0; \
}
static int action_bind_label_internal_memory(
file_list_t *list,
unsigned type, unsigned i,
const char *label, const char *path,
char *s, size_t len)
{
strlcpy(s, msg_hash_to_str(MSG_INTERNAL_STORAGE), len);
return 0;
}
static int action_bind_label_removable_storage(
file_list_t *list,
unsigned type, unsigned i,
const char *label, const char *path,
char *s, size_t len)
{
strlcpy(s, msg_hash_to_str(MSG_REMOVABLE_STORAGE), len);
return 0;
}
static int action_bind_label_external_application_dir(
file_list_t *list,
unsigned type, unsigned i,
const char *label, const char *path,
char *s, size_t len)
{
strlcpy(s, msg_hash_to_str(MSG_EXTERNAL_APPLICATION_DIR), len);
return 0;
}
static int action_bind_label_application_dir(
file_list_t *list,
unsigned type, unsigned i,
const char *label, const char *path,
char *s, size_t len)
{
strlcpy(s, msg_hash_to_str(MSG_APPLICATION_DIR), len);
return 0;
}
fill_label_macro(action_bind_label_information, MENU_ENUM_LABEL_VALUE_INFORMATION)
fill_label_macro(action_bind_label_internal_memory, MSG_INTERNAL_STORAGE)
fill_label_macro(action_bind_label_removable_storage, MSG_REMOVABLE_STORAGE)
fill_label_macro(action_bind_label_external_application_dir, MSG_EXTERNAL_APPLICATION_DIR)
fill_label_macro(action_bind_label_application_dir, MSG_APPLICATION_DIR)
static int action_bind_label_playlist_collection_entry(
file_list_t *list,

View File

@ -159,8 +159,6 @@ static int action_left_mainmenu(unsigned type, const char *label,
{
settings_t *settings = config_get_ptr();
menu_navigation_set_selection(0);
if ((list_info.selection != 0)
|| settings->bools.menu_navigation_wraparound_enable)
push_list = 1;

View File

@ -159,6 +159,42 @@ int generic_action_ok_displaylist_push(const char *path,
info.enum_idx = MENU_ENUM_LABEL_DEFERRED_BROWSE_URL_START;
dl_type = DISPLAYLIST_GENERIC;
break;
case ACTION_OK_DL_FAVORITES_LIST:
info.type = type;
info.directory_ptr = idx;
info_path = label;
info_label = msg_hash_to_str(
MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST);
info.enum_idx = MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST;
dl_type = DISPLAYLIST_GENERIC;
break;
case ACTION_OK_DL_IMAGES_LIST:
info.type = type;
info.directory_ptr = idx;
info_path = label;
info_label = msg_hash_to_str(
MENU_ENUM_LABEL_DEFERRED_IMAGES_LIST);
info.enum_idx = MENU_ENUM_LABEL_DEFERRED_IMAGES_LIST;
dl_type = DISPLAYLIST_GENERIC;
break;
case ACTION_OK_DL_MUSIC_LIST:
info.type = type;
info.directory_ptr = idx;
info_path = label;
info_label = msg_hash_to_str(
MENU_ENUM_LABEL_DEFERRED_MUSIC_LIST);
info.enum_idx = MENU_ENUM_LABEL_DEFERRED_MUSIC_LIST;
dl_type = DISPLAYLIST_GENERIC;
break;
case ACTION_OK_DL_VIDEO_LIST:
info.type = type;
info.directory_ptr = idx;
info_path = label;
info_label = msg_hash_to_str(
MENU_ENUM_LABEL_DEFERRED_VIDEO_LIST);
info.enum_idx = MENU_ENUM_LABEL_DEFERRED_VIDEO_LIST;
dl_type = DISPLAYLIST_GENERIC;
break;
case ACTION_OK_DL_USER_BINDS_LIST:
info.type = type;
info.directory_ptr = idx;
@ -334,6 +370,7 @@ int generic_action_ok_displaylist_push(const char *path,
break;
case ACTION_OK_DL_DISK_IMAGE_APPEND_LIST:
filebrowser_clear_type();
filebrowser_set_type(FILEBROWSER_APPEND_IMAGE);
info.type = type;
info.directory_ptr = idx;
info_path = settings->paths.directory_menu_content;
@ -943,8 +980,10 @@ static bool menu_content_find_first_core(menu_content_ctx_defer_info_t *def_info
core_info_get_current_core((core_info_t**)&info);
if (info)
{
#if 0
RARCH_LOG("[lobby] use the current core (%s) to load this content...\n",
info->path);
#endif
supported = 1;
}
}
@ -2089,7 +2128,6 @@ static int generic_action_ok_remap_file_operation(const char *path,
}
else
{
RARCH_LOG("removing %s", file);
if(input_remapping_remove_file(file))
{
if (action_type == ACTION_OK_REMAP_FILE_REMOVE_CORE)
@ -3193,6 +3231,10 @@ int (func_name)(const char *path, const char *label, unsigned type, size_t idx,
}
default_action_ok_func(action_ok_browse_url_start, ACTION_OK_DL_BROWSE_URL_START)
default_action_ok_func(action_ok_goto_favorites, ACTION_OK_DL_FAVORITES_LIST)
default_action_ok_func(action_ok_goto_images, ACTION_OK_DL_IMAGES_LIST)
default_action_ok_func(action_ok_goto_video, ACTION_OK_DL_VIDEO_LIST)
default_action_ok_func(action_ok_goto_music, ACTION_OK_DL_MUSIC_LIST)
default_action_ok_func(action_ok_shader_parameters, ACTION_OK_DL_SHADER_PARAMETERS)
default_action_ok_func(action_ok_parent_directory_push, ACTION_OK_DL_PARENT_DIRECTORY_PUSH)
default_action_ok_func(action_ok_directory_push, ACTION_OK_DL_DIRECTORY_PUSH)
@ -3286,10 +3328,12 @@ static int action_ok_netplay_connect_room(const char *path,
netplay_room_list[idx - 3].port);
}
#if 0
RARCH_LOG("[lobby] connecting to: %s with game: %s/%08x\n",
tmp_hostname,
netplay_room_list[idx - 3].gamename,
netplay_room_list[idx - 3].gamecrc);
#endif
task_push_netplay_crc_scan(netplay_room_list[idx - 3].gamecrc,
netplay_room_list[idx - 3].gamename,
@ -3366,18 +3410,21 @@ static int action_ok_push_content_list(const char *path,
static int action_ok_push_scan_file(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
{
filebrowser_clear_type();
return action_ok_push_content_list(path, label, type, idx, entry_idx);
settings_t *settings = config_get_ptr();
filebrowser_set_type(FILEBROWSER_SCAN_FILE);
return generic_action_ok_displaylist_push(path,
settings->paths.directory_menu_content, label, type, idx,
entry_idx, ACTION_OK_DL_CONTENT_LIST);
}
#ifdef HAVE_NETWORKING
struct netplay_host_list *lan_hosts;
int lan_room_count;
void netplay_refresh_rooms_menu(file_list_t *list)
{
char s[4115];
int i = 0;
int j = 0;
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, list);
@ -3423,8 +3470,6 @@ void netplay_refresh_rooms_menu(file_list_t *list)
if (netplay_room_count != 0)
{
RARCH_LOG ("[lobby] found %d rooms...\n", netplay_room_count);
for (i = 0; i < netplay_room_count; i++)
{
char country[PATH_MAX_LENGTH] = {0};
@ -3456,20 +3501,18 @@ void netplay_refresh_rooms_menu(file_list_t *list)
netplay_room_list[i].gamecrc,
netplay_room_list[i].timestamp);
#endif
j+=8;
snprintf(s, sizeof(s), "%s: %s%s",
netplay_room_list[i].lan ? "Local" :
(netplay_room_list[i].host_method == NETPLAY_HOST_METHOD_MITM ?
"Internet (relay)" : "Internet (direct)"),
netplay_room_list[i].nickname, country);
/*int room_type = netplay_room_list[i].lan ? MENU_ROOM_LAN :
(netplay_room_list[i].host_method == NETPLAY_HOST_METHOD_MITM ? MENU_ROOM_MITM : MENU_ROOM); */
menu_entries_append_enum(list,
s,
msg_hash_to_str(MENU_ENUM_LABEL_CONNECT_NETPLAY_ROOM),
MENU_ENUM_LABEL_CONNECT_NETPLAY_ROOM,
MENU_ROOM, 0, 0);
MENU_SETTINGS_NETPLAY_ROOMS_START + i, 0, 0);
}
netplay_rooms_free();
@ -3507,7 +3550,6 @@ static void netplay_refresh_rooms_cb(void *task_data, void *user_data, const cha
if (string_is_empty(data->data))
{
netplay_room_count = 0;
RARCH_LOG("[lobby] room list empty\n");
}
else
{
@ -4127,6 +4169,18 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_VIDEO_FONT_PATH:
BIND_ACTION_OK(cbs, action_ok_menu_font);
break;
case MENU_ENUM_LABEL_GOTO_FAVORITES:
BIND_ACTION_OK(cbs, action_ok_goto_favorites);
break;
case MENU_ENUM_LABEL_GOTO_MUSIC:
BIND_ACTION_OK(cbs, action_ok_goto_music);
break;
case MENU_ENUM_LABEL_GOTO_IMAGES:
BIND_ACTION_OK(cbs, action_ok_goto_images);
break;
case MENU_ENUM_LABEL_GOTO_VIDEO:
BIND_ACTION_OK(cbs, action_ok_goto_video);
break;
case MENU_ENUM_LABEL_BROWSE_START:
BIND_ACTION_OK(cbs, action_ok_browse_url_start);
break;
@ -4523,9 +4577,6 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs,
case MENU_LABEL_LOAD_ARCHIVE:
BIND_ACTION_OK(cbs, action_ok_load_archive);
break;
case MENU_LABEL_CUSTOM_BIND_ALL:
BIND_ACTION_OK(cbs, action_ok_lookup_setting);
break;
case MENU_LABEL_VIDEO_SHADER_PASS:
BIND_ACTION_OK(cbs, action_ok_shader_pass);
break;
@ -4696,19 +4747,23 @@ static int menu_cbs_init_bind_ok_compare_type(menu_file_list_cbs_t *cbs,
BIND_ACTION_OK(cbs, action_ok_directory_push);
break;
case FILE_TYPE_CARCHIVE:
switch (menu_label_hash)
if (filebrowser_get_type() == FILEBROWSER_SCAN_FILE)
{
case MENU_LABEL_FAVORITES:
BIND_ACTION_OK(cbs, action_ok_compressed_archive_push_detect_core);
break;
case MENU_LABEL_SCAN_FILE:
#ifdef HAVE_LIBRETRODB
BIND_ACTION_OK(cbs, action_ok_scan_file);
BIND_ACTION_OK(cbs, action_ok_scan_file);
#endif
break;
default:
BIND_ACTION_OK(cbs, action_ok_compressed_archive_push);
break;
}
else
{
switch (menu_label_hash)
{
case MENU_LABEL_FAVORITES:
BIND_ACTION_OK(cbs, action_ok_compressed_archive_push_detect_core);
break;
default:
BIND_ACTION_OK(cbs, action_ok_compressed_archive_push);
break;
}
}
break;
case FILE_TYPE_CORE:
@ -4806,15 +4861,16 @@ static int menu_cbs_init_bind_ok_compare_type(menu_file_list_cbs_t *cbs,
break;
case FILE_TYPE_IN_CARCHIVE:
case FILE_TYPE_PLAIN:
if (cbs->enum_idx != MSG_UNKNOWN)
if (filebrowser_get_type() == FILEBROWSER_SCAN_FILE)
{
#ifdef HAVE_LIBRETRODB
BIND_ACTION_OK(cbs, action_ok_scan_file);
#endif
}
else if (cbs->enum_idx != MSG_UNKNOWN)
{
switch (cbs->enum_idx)
{
#ifdef HAVE_LIBRETRODB
case MENU_ENUM_LABEL_SCAN_FILE:
BIND_ACTION_OK(cbs, action_ok_scan_file);
break;
#endif
case MENU_ENUM_LABEL_DOWNLOADED_FILE_DETECT_CORE_LIST:
case MENU_ENUM_LABEL_FAVORITES:
case MENU_ENUM_LABEL_DEFERRED_ARCHIVE_OPEN_DETECT_CORE:
@ -4825,13 +4881,15 @@ static int menu_cbs_init_bind_ok_compare_type(menu_file_list_cbs_t *cbs,
}
else
#endif
if (filebrowser_get_type() == FILEBROWSER_APPEND_IMAGE)
{
BIND_ACTION_OK(cbs, action_ok_disk_image_append);
}
else
{
BIND_ACTION_OK(cbs, action_ok_file_load_with_detect_core);
}
break;
case MENU_ENUM_LABEL_DISK_IMAGE_APPEND:
BIND_ACTION_OK(cbs, action_ok_disk_image_append);
break;
default:
BIND_ACTION_OK(cbs, action_ok_file_load);
break;
@ -4841,11 +4899,6 @@ static int menu_cbs_init_bind_ok_compare_type(menu_file_list_cbs_t *cbs,
{
switch (menu_label_hash)
{
#ifdef HAVE_LIBRETRODB
case MENU_LABEL_SCAN_FILE:
BIND_ACTION_OK(cbs, action_ok_scan_file);
break;
#endif
case MENU_LABEL_DOWNLOADED_FILE_DETECT_CORE_LIST:
case MENU_LABEL_FAVORITES:
case MENU_LABEL_DEFERRED_ARCHIVE_OPEN_DETECT_CORE:
@ -4856,13 +4909,15 @@ static int menu_cbs_init_bind_ok_compare_type(menu_file_list_cbs_t *cbs,
}
else
#endif
if (filebrowser_get_type() == FILEBROWSER_APPEND_IMAGE)
{
BIND_ACTION_OK(cbs, action_ok_disk_image_append);
}
else
{
BIND_ACTION_OK(cbs, action_ok_file_load_with_detect_core);
}
break;
case MENU_LABEL_DISK_IMAGE_APPEND:
BIND_ACTION_OK(cbs, action_ok_disk_image_append);
break;
default:
BIND_ACTION_OK(cbs, action_ok_file_load);
break;

View File

@ -193,8 +193,6 @@ static int action_right_mainmenu(unsigned type, const char *label,
menu_driver_ctl(RARCH_MENU_CTL_LIST_GET_SIZE, &list_horiz_info);
menu_driver_ctl(RARCH_MENU_CTL_LIST_GET_SIZE, &list_tabs_info);
menu_navigation_set_selection(0);
if ((list_info.selection != (list_horiz_info.size + list_tabs_info.size))
|| settings->bools.menu_navigation_wraparound_enable)
return action_right_goto_tab();

View File

@ -84,6 +84,7 @@ default_sublabel_macro(action_bind_sublabel_fps_show, MENU_
default_sublabel_macro(action_bind_sublabel_netplay_settings, MENU_ENUM_SUBLABEL_NETPLAY)
default_sublabel_macro(action_bind_sublabel_user_bind_settings, MENU_ENUM_SUBLABEL_INPUT_USER_BINDS)
default_sublabel_macro(action_bind_sublabel_input_hotkey_settings, MENU_ENUM_SUBLABEL_INPUT_HOTKEY_BINDS)
default_sublabel_macro(action_bind_sublabel_materialui_icons_enable, MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE)
default_sublabel_macro(action_bind_sublabel_add_content_list, MENU_ENUM_SUBLABEL_ADD_CONTENT_LIST)
default_sublabel_macro(action_bind_sublabel_video_frame_delay, MENU_ENUM_SUBLABEL_VIDEO_FRAME_DELAY)
default_sublabel_macro(action_bind_sublabel_video_black_frame_insertion, MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION)
@ -234,6 +235,10 @@ default_sublabel_macro(action_bind_sublabel_delete_entry,
default_sublabel_macro(action_bind_sublabel_information, MENU_ENUM_SUBLABEL_INFORMATION)
default_sublabel_macro(action_bind_sublabel_run, MENU_ENUM_SUBLABEL_RUN)
default_sublabel_macro(action_bind_sublabel_add_to_favorites, MENU_ENUM_SUBLABEL_ADD_TO_FAVORITES)
default_sublabel_macro(action_bind_sublabel_goto_favorites, MENU_ENUM_SUBLABEL_GOTO_FAVORITES)
default_sublabel_macro(action_bind_sublabel_goto_images, MENU_ENUM_SUBLABEL_GOTO_IMAGES)
default_sublabel_macro(action_bind_sublabel_goto_music, MENU_ENUM_SUBLABEL_GOTO_MUSIC)
default_sublabel_macro(action_bind_sublabel_goto_video, MENU_ENUM_SUBLABEL_GOTO_VIDEO)
default_sublabel_macro(action_bind_sublabel_menu_filebrowser_settings, MENU_ENUM_SUBLABEL_MENU_FILE_BROWSER_SETTINGS)
default_sublabel_macro(action_bind_sublabel_auto_remaps_enable, MENU_ENUM_SUBLABEL_AUTO_REMAPS_ENABLE)
default_sublabel_macro(action_bind_sublabel_auto_overrides_enable, MENU_ENUM_SUBLABEL_AUTO_OVERRIDES_ENABLE)
@ -280,6 +285,7 @@ default_sublabel_macro(action_bind_sublabel_xmb_icon_theme,
default_sublabel_macro(action_bind_sublabel_xmb_shadows_enable, MENU_ENUM_SUBLABEL_XMB_SHADOWS_ENABLE)
default_sublabel_macro(action_bind_sublabel_menu_color_theme, MENU_ENUM_SUBLABEL_MATERIALUI_MENU_COLOR_THEME)
default_sublabel_macro(action_bind_sublabel_menu_wallpaper_opacity, MENU_ENUM_SUBLABEL_MENU_WALLPAPER_OPACITY)
default_sublabel_macro(action_bind_sublabel_menu_framebuffer_opacity, MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY)
default_sublabel_macro(action_bind_sublabel_menu_ribbon_enable, MENU_ENUM_SUBLABEL_XMB_RIBBON_ENABLE)
default_sublabel_macro(action_bind_sublabel_menu_font, MENU_ENUM_SUBLABEL_XMB_FONT)
default_sublabel_macro(action_bind_sublabel_menu_favorites_tab, MENU_ENUM_SUBLABEL_XMB_SHOW_FAVORITES)
@ -401,6 +407,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
{
switch (cbs->enum_idx)
{
case MENU_ENUM_LABEL_MATERIALUI_ICONS_ENABLE:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_materialui_icons_enable);
break;
case MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_HEIGHT:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_viewport_custom_height);
break;
@ -545,6 +554,18 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_XMB_SHOW_SETTINGS:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_settings_tab);
break;
case MENU_ENUM_LABEL_GOTO_IMAGES:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_goto_images);
break;
case MENU_ENUM_LABEL_GOTO_MUSIC:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_goto_music);
break;
case MENU_ENUM_LABEL_GOTO_VIDEO:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_goto_video);
break;
case MENU_ENUM_LABEL_GOTO_FAVORITES:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_goto_favorites);
break;
case MENU_ENUM_LABEL_XMB_SHOW_FAVORITES:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_favorites_tab);
break;
@ -572,6 +593,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_XMB_RIBBON_ENABLE:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_ribbon_enable);
break;
case MENU_ENUM_LABEL_MENU_FRAMEBUFFER_OPACITY:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_framebuffer_opacity);
break;
case MENU_ENUM_LABEL_MENU_WALLPAPER_OPACITY:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_wallpaper_opacity);
break;

View File

@ -136,6 +136,10 @@ default_title_macro(action_get_system_information_list, MENU_ENUM_LABEL_
default_title_macro(action_get_network_information_list, MENU_ENUM_LABEL_VALUE_NETWORK_INFORMATION)
default_title_macro(action_get_settings_list, MENU_ENUM_LABEL_VALUE_SETTINGS)
default_title_macro(action_get_title_information_list, MENU_ENUM_LABEL_VALUE_INFORMATION_LIST)
default_title_macro(action_get_title_goto_favorites, MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES)
default_title_macro(action_get_title_goto_image, MENU_ENUM_LABEL_VALUE_GOTO_IMAGES)
default_title_macro(action_get_title_goto_music, MENU_ENUM_LABEL_VALUE_GOTO_MUSIC)
default_title_macro(action_get_title_goto_video, MENU_ENUM_LABEL_VALUE_GOTO_VIDEO)
default_fill_title_macro(action_get_title_disk_image_append, MENU_ENUM_LABEL_VALUE_DISK_IMAGE_APPEND)
default_fill_title_macro(action_get_title_cheat_file_load, MENU_ENUM_LABEL_VALUE_CHEAT_FILE)
@ -324,146 +328,162 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs,
BIND_ACTION_GET_TITLE(cbs, action_get_core_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CONFIGURATION_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CONFIGURATION_SETTINGS_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_configuration_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_SAVING_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_SAVING_SETTINGS_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_saving_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_LOGGING_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_LOGGING_SETTINGS_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_logging_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_FRAME_THROTTLE_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_FRAME_THROTTLE_SETTINGS_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_frame_throttle_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_REWIND_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_REWIND_SETTINGS_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_rewind_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_DISPLAY_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_DISPLAY_SETTINGS_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_onscreen_display_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_NOTIFICATIONS_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_NOTIFICATIONS_SETTINGS_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_onscreen_notifications_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_OVERLAY_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_OVERLAY_SETTINGS_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_onscreen_overlay_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MENU_VIEWS_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MENU_VIEWS_SETTINGS_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_menu_views_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MENU_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MENU_SETTINGS_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_menu_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_USER_INTERFACE_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_USER_INTERFACE_SETTINGS_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_user_interface_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MENU_FILE_BROWSER_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MENU_FILE_BROWSER_SETTINGS_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_menu_file_browser_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_RETRO_ACHIEVEMENTS_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_RETRO_ACHIEVEMENTS_SETTINGS_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_retro_achievements_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_WIFI_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_WIFI_SETTINGS_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_wifi_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_UPDATER_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_UPDATER_SETTINGS_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_updater_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_NETWORK_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_NETWORK_SETTINGS_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_network_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_NETPLAY_LAN_SCAN_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_NETPLAY_LAN_SCAN_SETTINGS_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_netplay_lan_scan_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_LAKKA_SERVICES_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_LAKKA_SERVICES_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_lakka_services_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_USER_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_USER_SETTINGS_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_user_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_DIRECTORY_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_DIRECTORY_SETTINGS_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_directory_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_PRIVACY_SETTINGS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_PRIVACY_SETTINGS_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_privacy_settings_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_DIRS_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_DIRS_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_download_core_content_list);
return 0;
}
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_DIRS_SUBDIR_LIST)))
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_DIRS_SUBDIR_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_download_core_content_list);
return 0;
}
if (cbs->enum_idx != MSG_UNKNOWN)
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_title_goto_favorites);
return 0;
}
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_IMAGES_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_title_goto_image);
return 0;
}
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MUSIC_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_title_goto_music);
return 0;
}
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_VIDEO_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_title_goto_video);
return 0;
}
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_DRIVER_SETTINGS_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_driver_settings_list);
return 0;
}
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_AUDIO_SETTINGS_LIST)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_audio_settings_list);
return 0;
}
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SYSTEM_INFORMATION)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_system_information_list);
return 0;
}
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_NETWORK_INFORMATION)))
{
BIND_ACTION_GET_TITLE(cbs, action_get_network_information_list);
return 0;
}
else if (cbs->enum_idx != MSG_UNKNOWN)
{
switch (cbs->enum_idx)
{
@ -602,12 +622,6 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_DATABASE_MANAGER_LIST:
BIND_ACTION_GET_TITLE(cbs, action_get_database_manager_list);
break;
case MENU_ENUM_LABEL_SYSTEM_INFORMATION:
BIND_ACTION_GET_TITLE(cbs, action_get_system_information_list);
break;
case MENU_ENUM_LABEL_NETWORK_INFORMATION:
BIND_ACTION_GET_TITLE(cbs, action_get_network_information_list);
break;
case MENU_ENUM_LABEL_CURSOR_MANAGER_LIST:
BIND_ACTION_GET_TITLE(cbs, action_get_cursor_manager_list);
break;
@ -674,9 +688,6 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_DEFERRED_INPUT_HOTKEY_BINDS_LIST:
BIND_ACTION_GET_TITLE(cbs, action_get_input_hotkey_binds_settings_list);
break;
case MENU_ENUM_LABEL_DEFERRED_DRIVER_SETTINGS_LIST:
BIND_ACTION_GET_TITLE(cbs, action_get_driver_settings_list);
break;
case MENU_ENUM_LABEL_DEFERRED_VIDEO_SETTINGS_LIST:
BIND_ACTION_GET_TITLE(cbs, action_get_video_settings_list);
break;
@ -704,9 +715,6 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_DEFERRED_CORE_SETTINGS_LIST:
BIND_ACTION_GET_TITLE(cbs, action_get_core_settings_list);
break;
case MENU_ENUM_LABEL_DEFERRED_AUDIO_SETTINGS_LIST:
BIND_ACTION_GET_TITLE(cbs, action_get_audio_settings_list);
break;
case MENU_ENUM_LABEL_DEFERRED_INPUT_SETTINGS_LIST:
BIND_ACTION_GET_TITLE(cbs, action_get_input_settings_list);
break;
@ -915,12 +923,6 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs,
case MENU_LABEL_DATABASE_MANAGER_LIST:
BIND_ACTION_GET_TITLE(cbs, action_get_database_manager_list);
break;
case MENU_LABEL_SYSTEM_INFORMATION:
BIND_ACTION_GET_TITLE(cbs, action_get_system_information_list);
break;
case MENU_LABEL_NETWORK_INFORMATION:
BIND_ACTION_GET_TITLE(cbs, action_get_network_information_list);
break;
case MENU_LABEL_CURSOR_MANAGER_LIST:
BIND_ACTION_GET_TITLE(cbs, action_get_cursor_manager_list);
break;
@ -987,15 +989,9 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs,
case MENU_LABEL_DEFERRED_INPUT_HOTKEY_BINDS_LIST:
BIND_ACTION_GET_TITLE(cbs, action_get_input_hotkey_binds_settings_list);
break;
case MENU_LABEL_DEFERRED_DRIVER_SETTINGS_LIST:
BIND_ACTION_GET_TITLE(cbs, action_get_driver_settings_list);
break;
case MENU_LABEL_DEFERRED_VIDEO_SETTINGS_LIST:
BIND_ACTION_GET_TITLE(cbs, action_get_video_settings_list);
break;
case MENU_LABEL_DEFERRED_AUDIO_SETTINGS_LIST:
BIND_ACTION_GET_TITLE(cbs, action_get_audio_settings_list);
break;
case MENU_LABEL_DEFERRED_INPUT_SETTINGS_LIST:
BIND_ACTION_GET_TITLE(cbs, action_get_input_settings_list);
break;

File diff suppressed because it is too large Load Diff

View File

@ -163,27 +163,30 @@ static void blit_line(int x, int y,
const char *message, uint16_t color)
{
size_t pitch = menu_display_get_framebuffer_pitch();
const uint8_t *font_fb = menu_display_get_font_framebuffer();
while (!string_is_empty(message))
if (font_fb)
{
unsigned i, j;
const uint8_t *font_fb = menu_display_get_font_framebuffer();
uint32_t symbol = utf8_walk(&message);
for (j = 0; j < FONT_HEIGHT; j++)
while (!string_is_empty(message))
{
for (i = 0; i < FONT_WIDTH; i++)
unsigned i, j;
char symbol = *message++;
for (j = 0; j < FONT_HEIGHT; j++)
{
uint8_t rem = 1 << ((i + j * FONT_WIDTH) & 7);
int offset = (i + j * FONT_WIDTH) >> 3;
bool col = (font_fb[FONT_OFFSET(symbol) + offset] & rem);
for (i = 0; i < FONT_WIDTH; i++)
{
uint8_t rem = 1 << ((i + j * FONT_WIDTH) & 7);
int offset = (i + j * FONT_WIDTH) >> 3;
bool col = (font_fb[FONT_OFFSET(symbol) + offset] & rem);
if (col)
rgui_framebuf_data[(y + j) * (pitch >> 1) + (x + i)] = color;
if (col)
rgui_framebuf_data[(y + j) * (pitch >> 1) + (x + i)] = color;
}
}
}
x += FONT_WIDTH_STRIDE;
x += FONT_WIDTH_STRIDE;
}
}
}

218
menu/drivers/xmb.c Normal file → Executable file
View File

@ -44,6 +44,8 @@
#include "../menu_driver.h"
#include "../menu_animation.h"
#include "../../core_info.h"
#include "../../core.h"
#include "../widgets/menu_entry.h"
#include "../widgets/menu_list.h"
#include "../widgets/menu_input_dialog.h"
@ -84,7 +86,7 @@ typedef struct
float y;
uintptr_t icon;
uintptr_t content_icon;
char fullpath[4096];
char *fullpath;
} xmb_node_t;
enum
@ -126,6 +128,7 @@ enum
XMB_TEXTURE_ACHIEVEMENT_LIST,
XMB_TEXTURE_SCREENSHOT,
XMB_TEXTURE_RELOAD,
XMB_TEXTURE_RENAME,
XMB_TEXTURE_FILE,
XMB_TEXTURE_FOLDER,
XMB_TEXTURE_ZIP,
@ -423,11 +426,24 @@ static xmb_node_t *xmb_alloc_node(void)
node->alpha = node->label_alpha = 0;
node->zoom = node->x = node->y = 0;
node->icon = node->content_icon = 0;
node->fullpath[0] = 0;
node->fullpath = NULL;
return node;
}
static void xmb_free_node(xmb_node_t *node)
{
if (!node)
return;
if (node->fullpath)
free(node->fullpath);
node->fullpath = NULL;
free(node);
}
/* NOTE: This is faster than memcpy()ing xmb_node_t in most cases
* because most nodes have small (less than 200 bytes) fullpath */
static xmb_node_t *xmb_copy_node(void *p)
@ -442,8 +458,7 @@ static xmb_node_t *xmb_copy_node(void *p)
new_node->y = old_node->y;
new_node->icon = old_node->icon;
new_node->content_icon = old_node->content_icon;
strlcpy(new_node->fullpath, old_node->fullpath, sizeof(old_node->fullpath));
new_node->fullpath = old_node->fullpath ? strdup(old_node->fullpath) : NULL;
return new_node;
}
@ -553,7 +568,7 @@ static void *xmb_list_get_entry(void *data, enum menu_list_type type, unsigned i
return NULL;
}
static INLINE float xmb_item_y(xmb_handle_t *xmb, int i, size_t current)
static INLINE float xmb_item_y(const xmb_handle_t *xmb, int i, size_t current)
{
float iy = xmb->icon.spacing.vertical;
@ -944,7 +959,7 @@ static void xmb_update_thumbnail_path(void *data, unsigned i)
xmb_node_t *node = (xmb_node_t*)
menu_entries_get_userdata_at_offset(selection_buf, i);
if (node)
if (node && node->fullpath)
{
fill_pathname_join(
xmb->thumbnail_file_path,
@ -1295,7 +1310,7 @@ static void xmb_list_open_old(xmb_handle_t *xmb,
entry.target_value = ia;
entry.subject = &node->alpha;
entry.easing_enum = EASING_OUT_QUAD;
entry.tag = -1;
entry.tag = (uintptr_t)list;
entry.cb = NULL;
menu_animation_push(&entry);
@ -1365,7 +1380,7 @@ static void xmb_list_open_new(xmb_handle_t *xmb,
entry.target_value = ia;
entry.subject = &node->alpha;
entry.easing_enum = EASING_OUT_QUAD;
entry.tag = -1;
entry.tag = (uintptr_t)list;
entry.cb = NULL;
menu_animation_push(&entry);
@ -1396,6 +1411,7 @@ static void xmb_list_open_new(xmb_handle_t *xmb,
static xmb_node_t *xmb_node_allocate_userdata(xmb_handle_t *xmb, unsigned i)
{
xmb_node_t *node = xmb_alloc_node();
xmb_node_t *tmp;
if (!node)
{
@ -1412,7 +1428,10 @@ static xmb_node_t *xmb_node_allocate_userdata(xmb_handle_t *xmb, unsigned i)
node->zoom = xmb->categories.active.zoom;
}
file_list_free_actiondata(xmb->horizontal_list, i);
tmp = (xmb_node_t*)file_list_get_actiondata_at_offset(xmb->horizontal_list, i);
xmb_free_node(tmp);
file_list_set_actiondata(xmb->horizontal_list, i, node);
return node;
@ -2082,6 +2101,8 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
return xmb->textures.list[XMB_TEXTURE_CLOSE];
case MENU_ENUM_LABEL_RESTART_CONTENT:
return xmb->textures.list[XMB_TEXTURE_RELOAD];
case MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME:
return xmb->textures.list[XMB_TEXTURE_RENAME];
case MENU_ENUM_LABEL_RESUME_CONTENT:
return xmb->textures.list[XMB_TEXTURE_RESUME];
case MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_CORE:
@ -2193,6 +2214,35 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
return xmb->textures.list[XMB_TEXTURE_SUBSETTING];
}
static void xmb_calculate_visible_range(const xmb_handle_t *xmb, unsigned height, size_t list_size, unsigned current, unsigned *first, unsigned *last)
{
unsigned j;
float base_y = xmb->margins.screen.top;
if (current)
{
for (j = current; j-- > 0; )
{
float bottom = xmb_item_y(xmb, j, current) + base_y + xmb->icon.size;
if (bottom < 0)
break;
*first = j;
}
}
for (j = current+1; j < list_size; j++)
{
float top = xmb_item_y(xmb, j, current) + base_y;
if (top > height)
break;
*last = j;
}
}
static void xmb_draw_items(
video_frame_info_t *video_info,
menu_display_frame_info_t menu_disp_info,
@ -2208,6 +2258,7 @@ static void xmb_draw_items(
size_t end = 0;
uint64_t frame_count = xmb->frame_count;
const char *thumb_ident = xmb_thumbnails_ident();
unsigned first, last;
if (!list || !list->size)
return;
@ -2230,11 +2281,24 @@ static void xmb_draw_items(
menu_entries_ctl(MENU_ENTRIES_CTL_START_GET, &i);
if (list == xmb->selection_buf_old)
{
xmb_node_t *node = (xmb_node_t*)
menu_entries_get_userdata_at_offset(list, current);
if ((uint8_t)(255 * node->alpha) == 0)
return;
i = 0;
}
first = i;
last = end - 1;
xmb_calculate_visible_range(xmb, height, end, current, &first, &last);
menu_display_blend_begin();
for (; i < end; i++)
for (i = first; i <= last; i++)
{
float icon_x, icon_y, label_offset;
menu_animation_ctx_ticker_t ticker;
@ -2486,8 +2550,15 @@ static void xmb_render(void *data, bool is_idle)
int16_t pointer_y = menu_input_pointer_state(MENU_POINTER_Y_AXIS);
int16_t mouse_y = menu_input_mouse_state(MENU_MOUSE_Y_AXIS)
+ (xmb->cursor.size/2);
unsigned first = 0, last = end;
unsigned height;
for (i = 0; i < end; i++)
video_driver_get_size(NULL, &height);
if (height)
xmb_calculate_visible_range(xmb, height, end, selection, &first, &last);
for (i = first; i <= last; i++)
{
float item_y1 = xmb->margins.screen.top
+ xmb_item_y(xmb, (int)i, selection);
@ -2614,8 +2685,10 @@ static void xmb_draw_bg(
menu_display_draw_gradient(&draw, video_info);
{
bool add_opacity = false;
draw.texture = texture;
float override_opacity = video_info->menu_wallpaper_opacity;
bool add_opacity = false;
draw.texture = texture;
menu_display_set_alpha(draw.color, coord_white[3]);
if (draw.texture)
@ -2624,7 +2697,7 @@ static void xmb_draw_bg(
if (running || video_info->xmb_color_theme == XMB_THEME_WALLPAPER)
add_opacity = true;
menu_display_draw_bg(&draw, video_info, add_opacity);
menu_display_draw_bg(&draw, video_info, add_opacity, override_opacity);
}
}
@ -2754,6 +2827,32 @@ static void xmb_frame(void *data, video_frame_info_t *video_info)
menu_display_rotate_z(&rotate_draw);
menu_display_blend_begin();
if (xmb->savestate_thumbnail)
xmb_draw_thumbnail(menu_disp_info,
xmb, &coord_white[0], width, height,
xmb->margins.screen.left + xmb->icon.spacing.horizontal +
xmb->icon.spacing.horizontal*4 - xmb->icon.size / 4,
xmb->margins.screen.top + xmb->icon.size + xmb->savestate_thumbnail_height,
xmb->savestate_thumbnail_width, xmb->savestate_thumbnail_height,
xmb->savestate_thumbnail);
else if (xmb->thumbnail
&& !string_is_equal(xmb_thumbnails_ident(),
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_OFF)))
{
#ifdef XMB_DEBUG
RARCH_LOG("[XMB thumbnail] width: %.2f, height: %.2f\n", xmb->thumbnail_width, xmb->thumbnail_height);
RARCH_LOG("[XMB thumbnail] w: %.2f, h: %.2f\n", width, height);
#endif
xmb_draw_thumbnail(menu_disp_info,
xmb, &coord_white[0], width, height,
xmb->margins.screen.left + xmb->icon.spacing.horizontal +
xmb->icon.spacing.horizontal*4 - xmb->icon.size / 4,
xmb->margins.screen.top + xmb->icon.size + xmb->thumbnail_height,
xmb->thumbnail_width, xmb->thumbnail_height,
xmb->thumbnail);
}
/* Clock image */
menu_display_set_alpha(coord_white, MIN(xmb->alpha, 1.00f));
@ -2966,32 +3065,6 @@ static void xmb_frame(void *data, video_frame_info_t *video_info)
font_driver_flush(video_info->width, video_info->height, xmb->font2);
font_driver_bind_block(xmb->font2, NULL);
if (xmb->savestate_thumbnail)
xmb_draw_thumbnail(menu_disp_info,
xmb, &coord_white[0], width, height,
xmb->margins.screen.left + xmb->icon.spacing.horizontal +
xmb->icon.spacing.horizontal*4 - xmb->icon.size / 4,
xmb->margins.screen.top + xmb->icon.size + xmb->savestate_thumbnail_height,
xmb->savestate_thumbnail_width, xmb->savestate_thumbnail_height,
xmb->savestate_thumbnail);
else if (xmb->thumbnail
&& !string_is_equal(xmb_thumbnails_ident(),
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_OFF)))
{
#ifdef XMB_DEBUG
RARCH_LOG("[XMB thumbnail] width: %.2f, height: %.2f\n", xmb->thumbnail_width, xmb->thumbnail_height);
RARCH_LOG("[XMB thumbnail] w: %.2f, h: %.2f\n", width, height);
#endif
xmb_draw_thumbnail(menu_disp_info,
xmb, &coord_white[0], width, height,
xmb->margins.screen.left + xmb->icon.spacing.horizontal +
xmb->icon.spacing.horizontal*4 - xmb->icon.size / 4,
xmb->margins.screen.top + xmb->icon.size + xmb->thumbnail_height,
xmb->thumbnail_width, xmb->thumbnail_height,
xmb->thumbnail);
}
if (menu_input_dialog_get_display_kb())
{
const char *str = menu_input_dialog_get_buffer();
@ -3544,6 +3617,8 @@ static const char *xmb_texture_path(unsigned id)
return "screenshot.png";
case XMB_TEXTURE_RELOAD:
return "reload.png";
case XMB_TEXTURE_RENAME:
return "rename.png";
case XMB_TEXTURE_FILE:
return "file.png";
case XMB_TEXTURE_FOLDER:
@ -3754,7 +3829,12 @@ static void xmb_list_insert(void *userdata,
current = (int)selection;
if (!string_is_empty(fullpath))
strlcpy(node->fullpath, fullpath, sizeof(node->fullpath));
{
if (node->fullpath)
free(node->fullpath);
node->fullpath = strdup(fullpath);
}
node->alpha = xmb->items.passive.alpha;
node->zoom = xmb->items.passive.zoom;
@ -3788,7 +3868,8 @@ static void xmb_list_clear(file_list_t *list)
if (!node)
continue;
file_list_free_userdata(list, i);
xmb_free_node(node);
list->list[i].userdata = NULL;
}
}
@ -3802,7 +3883,10 @@ static void xmb_list_deep_copy(const file_list_t *src, file_list_t *dst)
for (i = 0; i < size; ++i)
{
file_list_free_userdata(dst, i);
xmb_node_t *node = (xmb_node_t*)menu_entries_get_userdata_at_offset(dst, i);
xmb_free_node(node);
dst->list[i].userdata = NULL;
file_list_free_actiondata(dst, i); /* this one was allocated by us */
}
@ -4062,10 +4146,56 @@ static int xmb_list_push(void *data, void *userdata,
{
menu_displaylist_ctx_parse_entry_t entry;
int ret = -1;
menu_handle_t *menu = (menu_handle_t*)data;
core_info_list_t *list = NULL;
menu_handle_t *menu = (menu_handle_t*)data;
switch (type)
{
case DISPLAYLIST_LOAD_CONTENT_LIST:
{
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_FAVORITES),
msg_hash_to_str(MENU_ENUM_LABEL_FAVORITES),
MENU_ENUM_LABEL_FAVORITES,
MENU_SETTING_ACTION, 0, 0);
core_info_get_list(&list);
if (core_info_list_num_info_files(list))
{
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DOWNLOADED_FILE_DETECT_CORE_LIST),
msg_hash_to_str(MENU_ENUM_LABEL_DOWNLOADED_FILE_DETECT_CORE_LIST),
MENU_ENUM_LABEL_DOWNLOADED_FILE_DETECT_CORE_LIST,
MENU_SETTING_ACTION, 0, 0);
}
#ifdef HAVE_LIBRETRODB
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CONTENT_COLLECTION_LIST),
msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST),
MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST,
MENU_SETTING_ACTION, 0, 0);
#endif
if (frontend_driver_parse_drive_list(info->list, true) != 0)
menu_entries_append_enum(info->list, "/",
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS),
msg_hash_to_str(MENU_ENUM_LABEL_MENU_FILE_BROWSER_SETTINGS),
MENU_ENUM_LABEL_MENU_FILE_BROWSER_SETTINGS,
MENU_SETTING_ACTION, 0, 0);
info->need_push = true;
info->need_refresh = true;
ret = 0;
}
break;
case DISPLAYLIST_MAIN_MENU:
{
rarch_system_info_t *system = runloop_get_system_info();

View File

@ -976,7 +976,9 @@ static void zarch_frame(void *data, video_frame_info_t *video_info)
menu_display_blend_begin();
draw.x = 0;
draw.y = 0;
menu_display_draw_bg(&draw, video_info, false);
menu_display_draw_bg(&draw, video_info, false,
video_info->menu_wallpaper_opacity);
menu_display_draw(&draw);
menu_display_blend_end();

View File

@ -41,6 +41,10 @@ enum
ACTION_OK_DL_RDB_ENTRY_SUBMENU,
ACTION_OK_DL_AUDIO_DSP_PLUGIN,
ACTION_OK_DL_SHADER_PASS,
ACTION_OK_DL_FAVORITES_LIST,
ACTION_OK_DL_IMAGES_LIST,
ACTION_OK_DL_VIDEO_LIST,
ACTION_OK_DL_MUSIC_LIST,
ACTION_OK_DL_SHADER_PARAMETERS,
ACTION_OK_DL_SHADER_PRESET,
ACTION_OK_DL_GENERIC,

View File

@ -2703,6 +2703,19 @@ static int menu_displaylist_parse_settings_enum(void *data,
);
}
static void menu_displaylist_set_new_playlist(
menu_handle_t *menu, const char *path)
{
menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_FREE, NULL);
menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_INIT,
(void*)path);
strlcpy(
menu->db_playlist_file,
path,
sizeof(menu->db_playlist_file));
}
static int menu_displaylist_parse_horizontal_list(
menu_displaylist_info_t *info)
{
@ -2738,8 +2751,6 @@ static int menu_displaylist_parse_horizontal_list(
fill_pathname_base_noext(lpl_basename, item->path, sizeof(lpl_basename));
menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_FREE, NULL);
fill_pathname_join(
path_playlist,
settings->paths.directory_playlist,
@ -2748,10 +2759,8 @@ static int menu_displaylist_parse_horizontal_list(
menu_driver_set_thumbnail_system(lpl_basename, sizeof(lpl_basename));
menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_INIT, (void*)path_playlist);
menu_displaylist_set_new_playlist(menu, path_playlist);
strlcpy(menu->db_playlist_file,
path_playlist, sizeof(menu->db_playlist_file));
strlcpy(path_playlist,
msg_hash_to_str(MENU_ENUM_LABEL_COLLECTION),
sizeof(path_playlist));
@ -3488,9 +3497,9 @@ static int menu_displaylist_parse_playlists(
list_size = str_list->size;
#ifdef HAVE_LIBRETRODB
if (!horizontal)
{
#ifdef HAVE_LIBRETRODB
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SCAN_DIRECTORY),
msg_hash_to_str(MENU_ENUM_LABEL_SCAN_DIRECTORY),
@ -3501,8 +3510,33 @@ static int menu_displaylist_parse_playlists(
msg_hash_to_str(MENU_ENUM_LABEL_SCAN_FILE),
MENU_ENUM_LABEL_SCAN_FILE,
MENU_SETTING_ACTION, 0, 0);
}
#endif
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES),
msg_hash_to_str(MENU_ENUM_LABEL_GOTO_FAVORITES),
MENU_ENUM_LABEL_GOTO_FAVORITES,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES),
msg_hash_to_str(MENU_ENUM_LABEL_GOTO_IMAGES),
MENU_ENUM_LABEL_GOTO_IMAGES,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC),
msg_hash_to_str(MENU_ENUM_LABEL_GOTO_MUSIC),
MENU_ENUM_LABEL_GOTO_MUSIC,
MENU_SETTING_ACTION, 0, 0);
#ifdef HAVE_FFMPEG
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO),
msg_hash_to_str(MENU_ENUM_LABEL_GOTO_VIDEO),
MENU_ENUM_LABEL_GOTO_VIDEO,
MENU_SETTING_ACTION, 0, 0);
#endif
}
if (list_size == 0)
{
@ -4022,28 +4056,22 @@ bool menu_displaylist_push(menu_displaylist_ctx_entry_t *entry)
static void menu_displaylist_parse_playlist_history(
menu_handle_t *menu,
menu_displaylist_info_t *info,
playlist_t *playlist,
const char *playlist_name,
const char *playlist_path,
int *ret)
{
char path_playlist[PATH_MAX_LENGTH];
playlist_t *playlist = NULL;
path_playlist[0] = '\0';
if (!playlist)
command_event(CMD_EVENT_HISTORY_INIT, NULL);
menu_displaylist_set_new_playlist(menu, playlist_path);
menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_GET, &playlist);
strlcpy(path_playlist, playlist_name, sizeof(path_playlist));
*ret = menu_displaylist_parse_playlist(info,
playlist, path_playlist, true);
strlcpy(
menu->db_playlist_file,
playlist_path,
sizeof(menu->db_playlist_file));
menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_FREE, NULL);
menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_INIT,
(void*)menu->db_playlist_file);
}
#ifdef HAVE_NETWORKING
@ -4390,7 +4418,6 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
path_playlist[0] = '\0';
menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_FREE, NULL);
fill_pathname_join(
path_playlist,
@ -4398,11 +4425,8 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
info->path,
sizeof(path_playlist));
menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_INIT,
(void*)path_playlist);
menu_displaylist_set_new_playlist(menu, path_playlist);
strlcpy(menu->db_playlist_file, path_playlist,
sizeof(menu->db_playlist_file));
strlcpy(path_playlist,
msg_hash_to_str(MENU_ENUM_LABEL_COLLECTION),
sizeof(path_playlist));
@ -4426,7 +4450,6 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
if (settings->bools.history_list_enable)
menu_displaylist_parse_playlist_history(menu, info,
g_defaults.content_history,
"history",
settings->paths.path_content_history,
&ret);
@ -4449,7 +4472,6 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
case DISPLAYLIST_FAVORITES:
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
menu_displaylist_parse_playlist_history(menu, info,
g_defaults.content_favorites,
"favorites",
settings->paths.path_content_favorites,
&ret);
@ -4462,7 +4484,6 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
case DISPLAYLIST_MUSIC_HISTORY:
if (settings->bools.history_list_enable)
menu_displaylist_parse_playlist_history(menu, info,
g_defaults.music_history,
"music_history",
settings->paths.path_content_music_history,
&ret);
@ -4486,7 +4507,6 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
#ifdef HAVE_FFMPEG
if (settings->bools.history_list_enable)
menu_displaylist_parse_playlist_history(menu, info,
g_defaults.video_history,
"video_history",
settings->paths.path_content_video_history,
&ret);
@ -5170,6 +5190,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_MENU_WALLPAPER_OPACITY,
PARSE_ONLY_FLOAT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_MENU_FRAMEBUFFER_OPACITY,
PARSE_ONLY_FLOAT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_MENU_LINEAR_FILTER,
PARSE_ONLY_BOOL, false);
@ -5212,6 +5235,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_XMB_MENU_COLOR_THEME,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_MATERIALUI_ICONS_ENABLE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_MATERIALUI_MENU_COLOR_THEME,
PARSE_ONLY_UINT, false);
@ -6008,6 +6034,33 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
case DISPLAYLIST_LOAD_CONTENT_LIST:
case DISPLAYLIST_LOAD_CONTENT_SPECIAL:
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES),
msg_hash_to_str(MENU_ENUM_LABEL_GOTO_FAVORITES),
MENU_ENUM_LABEL_GOTO_FAVORITES,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES),
msg_hash_to_str(MENU_ENUM_LABEL_GOTO_IMAGES),
MENU_ENUM_LABEL_GOTO_IMAGES,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC),
msg_hash_to_str(MENU_ENUM_LABEL_GOTO_MUSIC),
MENU_ENUM_LABEL_GOTO_MUSIC,
MENU_SETTING_ACTION, 0, 0);
#ifdef HAVE_FFMPEG
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO),
msg_hash_to_str(MENU_ENUM_LABEL_GOTO_VIDEO),
MENU_ENUM_LABEL_GOTO_VIDEO,
MENU_SETTING_ACTION, 0, 0);
#endif
if (!string_is_empty(settings->paths.directory_menu_content))
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_FAVORITES),
@ -6539,7 +6592,6 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
#ifdef HAVE_IMAGEVIEWER
if (settings->bools.history_list_enable)
menu_displaylist_parse_playlist_history(menu, info,
g_defaults.image_history,
"images_history",
settings->paths.path_content_image_history,
&ret);

View File

@ -578,7 +578,8 @@ void menu_display_draw_pipeline(menu_display_ctx_draw_t *draw)
}
void menu_display_draw_bg(menu_display_ctx_draw_t *draw,
video_frame_info_t *video_info, bool add_opacity_to_wallpaper)
video_frame_info_t *video_info, bool add_opacity_to_wallpaper,
float override_opacity)
{
static struct video_coords coords;
const float *new_vertex = NULL;
@ -606,7 +607,7 @@ void menu_display_draw_bg(menu_display_ctx_draw_t *draw,
add_opacity_to_wallpaper = true;
if (add_opacity_to_wallpaper)
menu_display_set_alpha(draw->color, video_info->menu_wallpaper_opacity);
menu_display_set_alpha(draw->color, override_opacity);
if (!draw->texture)
draw->texture = menu_display_white_texture;
@ -621,7 +622,8 @@ void menu_display_draw_gradient(menu_display_ctx_draw_t *draw,
draw->x = 0;
draw->y = 0;
menu_display_draw_bg(draw, video_info, false);
menu_display_draw_bg(draw, video_info, false,
video_info->menu_wallpaper_opacity);
menu_display_draw(draw);
}

View File

@ -669,7 +669,7 @@ void menu_display_draw_pipeline(menu_display_ctx_draw_t *draw);
void menu_display_draw_bg(
menu_display_ctx_draw_t *draw,
video_frame_info_t *video_info,
bool add_opacity);
bool add_opacity, float opacity_override);
void menu_display_draw_gradient(
menu_display_ctx_draw_t *draw,
video_frame_info_t *video_info);

View File

@ -4885,7 +4885,7 @@ static bool setting_append_list(
&settings->bools.input_overlay_show_physical_inputs,
MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS,
MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS,
false,
show_physical_inputs,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -5003,6 +5003,21 @@ static bool setting_append_list(
general_read_handler);
menu_settings_list_current_add_range(list, list_info, 0.0, 1.0, 0.010, true, true);
settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED);
CONFIG_FLOAT(
list, list_info,
&settings->floats.menu_framebuffer_opacity,
MENU_ENUM_LABEL_MENU_FRAMEBUFFER_OPACITY,
MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY,
menu_framebuffer_opacity,
"%.3f",
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler);
menu_settings_list_current_add_range(list, list_info, 0.0, 1.0, 0.010, true, true);
settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED);
}
if (string_is_equal_fast(settings->arrays.menu_driver, "xmb", 3))
@ -5386,7 +5401,6 @@ static bool setting_append_list(
general_write_handler,
general_read_handler,
SD_FLAG_NONE);
settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED);
#ifdef HAVE_IMAGEVIEWER
CONFIG_BOOL(
@ -5494,6 +5508,21 @@ static bool setting_append_list(
/* only MaterialUI uses these values, don't show them on other drivers */
if (string_is_equal_fast(settings->arrays.menu_driver, "glui", 4))
{
CONFIG_BOOL(
list, list_info,
&settings->bools.menu_materialui_icons_enable,
MENU_ENUM_LABEL_MATERIALUI_ICONS_ENABLE,
MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE,
materialui_icons_enable,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler,
SD_FLAG_ADVANCED);
CONFIG_UINT(
list, list_info,
&settings->uints.menu_materialui_color_theme,

View File

@ -28,7 +28,9 @@ enum filebrowser_enums
{
FILEBROWSER_NONE = 0,
FILEBROWSER_SELECT_DIR,
FILEBROWSER_APPEND_IMAGE,
FILEBROWSER_SCAN_DIR,
FILEBROWSER_SCAN_FILE,
FILEBROWSER_SELECT_FILE,
FILEBROWSER_SELECT_IMAGE,
FILEBROWSER_SELECT_FONT,

View File

@ -172,6 +172,7 @@ enum msg_hash_enums
MSG_NETPLAY_CANNOT_PLAY,
MSG_NETPLAY_PEER_PAUSED,
MSG_NETPLAY_CHANGED_NICK,
MSG_ADDED_TO_FAVORITES,
MSG_AUTODETECT,
MSG_AUDIO_VOLUME,
MSG_AUDIO_MIXER_VOLUME,
@ -399,11 +400,14 @@ enum msg_hash_enums
MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_END = MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN + RARCH_BIND_LIST_END,
MENU_LABEL(MENU_WALLPAPER_OPACITY),
MENU_LABEL(MENU_FRAMEBUFFER_OPACITY),
MENU_ENUM_LABEL_VALUE_CONFIG,
MENU_ENUM_LABEL_VALUE_OVERLAY,
MENU_ENUM_LABEL_VALUE_AUTO,
MENU_LABEL(MATERIALUI_ICONS_ENABLE),
MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_MONOCHROME,
MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_FLATUI,
MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_RETROACTIVE,
@ -736,6 +740,10 @@ enum msg_hash_enums
MENU_LABEL(CONTENT_HISTORY_SIZE),
MENU_LABEL(PLAYLIST_ENTRY_REMOVE),
MENU_LABEL(PLAYLIST_ENTRY_RENAME),
MENU_LABEL(GOTO_FAVORITES),
MENU_LABEL(GOTO_MUSIC),
MENU_LABEL(GOTO_IMAGES),
MENU_LABEL(GOTO_VIDEO),
MENU_LABEL(ADD_TO_FAVORITES),
MENU_LABEL(MENU_THROTTLE_FRAMERATE),
MENU_LABEL(NO_ACHIEVEMENTS_TO_DISPLAY),
@ -824,6 +832,10 @@ enum msg_hash_enums
MENU_LABEL(BROWSE_URL),
MENU_LABEL(BROWSE_START),
/* Deferred */
MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST,
MENU_ENUM_LABEL_DEFERRED_IMAGES_LIST,
MENU_ENUM_LABEL_DEFERRED_MUSIC_LIST,
MENU_ENUM_LABEL_DEFERRED_VIDEO_LIST,
MENU_ENUM_LABEL_DEFERRED_NETPLAY,
MENU_ENUM_LABEL_DEFERRED_MUSIC,
MENU_ENUM_LABEL_DEFERRED_BROWSE_URL_START,

View File

@ -45,6 +45,8 @@
#include "../../retroarch.h"
#include "../../version.h"
#include "../../verbosity.h"
#include "netplay.h"
#include "netplay_discovery.h"
#include "netplay_private.h"
@ -346,14 +348,19 @@ static bool netplay_lan_ad_client(void)
/* And that we know how to handle it */
if (their_addr.sa_family == AF_INET)
{
struct sockaddr_in *sin = (struct sockaddr_in *) &their_addr;
struct sockaddr_in *sin = NULL;
RARCH_WARN ("[lobby] using IPv4 for discovery\n");
sin = (struct sockaddr_in *) &their_addr;
sin->sin_port = htons(ntohl(ad_packet_buffer.port));
}
#ifdef HAVE_INET6
else if (their_addr.sa_family == AF_INET6)
{
struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) &their_addr;
struct sockaddr_in6 *sin6 = NULL;
RARCH_WARN ("[lobby] using IPv6 for discovery\n");
sin6 = (struct sockaddr_in6 *) &their_addr;
sin6->sin6_port = htons(ad_packet_buffer.port);
}

View File

@ -57,6 +57,8 @@ static unsigned server_port_deferred = 0;
static int reannounce = 0;
static bool is_mitm = false;
bool netplay_disconnect(netplay_t *netplay);
/**
* netplay_is_alive:
* @netplay : pointer to netplay object
@ -825,6 +827,13 @@ bool netplay_pre_frame(netplay_t *netplay)
sync_stalled = !netplay_sync_pre_frame(netplay);
/* If we're disconnected, deinitialize */
if (!netplay->is_server && !netplay->connections[0].active)
{
netplay_disconnect(netplay);
return true;
}
if (sync_stalled ||
((!netplay->is_server || netplay->connected_players) &&
(netplay->stall || netplay->remote_paused)))
@ -860,6 +869,10 @@ void netplay_post_frame(netplay_t *netplay)
false))
netplay_hangup(netplay, connection);
}
/* If we're disconnected, deinitialize */
if (!netplay->is_server && !netplay->connections[0].active)
netplay_disconnect(netplay);
}
/**

View File

@ -1,7 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.retroarch"
android:versionCode="59"
android:versionName="1.6.5"
android:versionCode="62"
android:versionName="1.6.7"
android:installLocation="internalOnly">
<uses-feature android:glEsVersion="0x00020000" />
<uses-feature android:name="android.hardware.touchscreen" android:required="false"/>

View File

@ -2,7 +2,7 @@
<app version="1">
<name>RetroArch</name>
<coder>Libretro</coder>
<version>1.6.5</version>
<version>1.6.7</version>
<release_date>2012-2017</release_date>
<short_description>The cross-platform entertainment system</short_description>
<long_description>A port of RetroArch to the GameCube/Wii.</long_description>

View File

@ -2,7 +2,7 @@
<app version="1">
<name>Retroarch</name>
<coder>Libretro</coder>
<version>1.65</version>
<version>1.67</version>
<release_date>20170108133000</release_date>
<short_description></short_description>
<long_description>RetroArch

View File

@ -424,7 +424,7 @@ void playlist_free(playlist_t *playlist)
playlist->conf_path = NULL;
for (i = 0; i < playlist->cap; i++)
for (i = 0; i < playlist->size; i++)
{
struct playlist_entry *entry = &playlist->entries[i];
@ -450,7 +450,7 @@ void playlist_clear(playlist_t *playlist)
if (!playlist)
return;
for (i = 0; i < playlist->cap; i++)
for (i = 0; i < playlist->size; i++)
{
struct playlist_entry *entry = &playlist->entries[i];

View File

@ -35,17 +35,19 @@ fi
add_define_make DYLIB_LIB "$DYLIB"
[ "$OS" = 'Darwin' ] && HAVE_X11=no # X11 breaks on recent OSXes even if present.
[ -d /opt/vc/lib ] && add_library_dirs /opt/vc/lib && add_library_dirs /opt/vc/lib/GL
check_lib VIDEOCORE -lbcm_host bcm_host_init "-lvcos -lvchiq_arm"
check_lib SYSTEMD -lsystemd sd_get_machine_names
if [ "$HAVE_VIDEOCORE" != "no" ]; then
[ -d /opt/vc/lib ] && add_library_dirs /opt/vc/lib && add_library_dirs /opt/vc/lib/GL
check_lib VIDEOCORE -lbcm_host bcm_host_init "-lvcos -lvchiq_arm"
fi
if [ "$HAVE_VIDEOCORE" = 'yes' ]; then
[ -d /opt/vc/include ] && add_include_dirs /opt/vc/include
[ -d /opt/vc/include/interface/vcos/pthreads ] && add_include_dirs /opt/vc/include/interface/vcos/pthreads
[ -d /opt/vc/include/interface/vmcs_host/linux ] && add_include_dirs /opt/vc/include/interface/vmcs_host/linux
HAVE_OPENGLES='auto'
EXTRA_GL_LIBS="-lEGL -lGLESv2 -lbcm_host -lvcos -lvchiq_arm"
EXTRA_GL_LIBS="-lbrcmEGL -lbrcmGLESv2 -lbcm_host -lvcos -lvchiq_arm"
fi
if [ "$HAVE_NEON" = "yes" ]; then
@ -109,7 +111,7 @@ if [ "$HAVE_EGL" != "no" -a "$OS" != 'Win32' ]; then
fi
fi
if [ "HAVE_SSA" != "no" ]; then
if [ "$HAVE_SSA" != "no" ]; then
check_lib SSA -lass ass_library_init
fi

View File

@ -103,3 +103,4 @@ HAVE_HID=yes # Low-level HID (Human Interface Device) support
HAVE_LANGEXTRA=yes # Multi-language support
HAVE_OSMESA=no # Off-screen Mesa rendering
HAVE_VIDEOPROCESSOR=auto # Enable video processor core
HAVE_VIDEOCORE=auto # Broadcom Videocore 4 support

View File

@ -18,7 +18,7 @@
#define RARCH_VERSION_H__
#ifndef PACKAGE_VERSION
#define PACKAGE_VERSION "1.6.5"
#define PACKAGE_VERSION "1.6.7"
#endif
#endif

View File

@ -14,6 +14,7 @@ else ifneq ($(findstring MINGW,$(shell uname -a)),)
system_platform = win
endif
EXTERNAL_LIBOGC = 0
CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT)
LD = $(DEVKITPPC)/bin/powerpc-eabi-ld$(EXE_EXT)
OBJCOPY = $(DEVKITPPC)/bin/powerpc-eabi-objcopy$(EXE_EXT)
@ -23,8 +24,16 @@ ELF_TARGET := app_booter.elf
LIBRETRO_COMM_DIR := ../../libretro-common
INCLUDE := -I. -I$(DEVKITPRO)/libogc/include -I$(LIBRETRO_COMM_DIR)/crt/include
LIBDIRS := -L$(DEVKITPRO)/libogc/lib/wii
LIBDIRS :=
INCLUDE := -I. -I$(LIBRETRO_COMM_DIR)/crt/include
ifeq ($(EXTERNAL_LIBOGC), 1)
INCLUDE += -I$(DEVKITPRO)/libogc/include
LIBDIRS += -L$(DEVKITPRO)/libogc/lib/wii
else
INCLUDE += -I../libogc/include
LIBDIRS += -Lwii/libogc/libs/wii
endif
MACHDEP := -DHW_RVL -DGEKKO -mno-eabi -mno-sdata -mcpu=750
# todo: find out why -Os spits out linker errors

View File

@ -0,0 +1,61 @@
#ifndef __AESNDLIB_H__
#define __AESNDLIB_H__
#include <gctypes.h>
#define MAX_VOICES 32
#define SND_BUFFERSIZE 384 // output 2ms sound data at 48KHz
#define DSP_STREAMBUFFER_SIZE 1152 // input 2ms sound data at max. 144KHz
#if defined(HW_DOL)
#define DSP_DEFAULT_FREQ 48044
#elif defined(HW_RVL)
#define DSP_DEFAULT_FREQ 48000
#endif
#define VOICE_STATE_STOPPED 0
#define VOICE_STATE_RUNNING 1
#define VOICE_STATE_STREAM 2
#define VOICE_MONO8 0x00000000
#define VOICE_STEREO8 0x00000001
#define VOICE_MONO16 0x00000002
#define VOICE_STEREO16 0x00000003
#define VOICE_FREQ32KHZ 32000
#define VOICE_FREQ48KHZ 48000
#ifdef __cplusplus
extern "C" {
#endif
typedef struct aesndpb_t AESNDPB;
typedef void (*AESNDVoiceCallback)(AESNDPB *pb,u32 state);
typedef void (*AESNDAudioCallback)(void *audio_buffer,u32 len);
void AESND_Init();
void AESND_Reset();
void AESND_Pause(bool pause);
u32 AESND_GetDSPProcessTime();
f32 AESND_GetDSPProcessUsage();
AESNDAudioCallback AESND_RegisterAudioCallback(AESNDAudioCallback cb);
AESNDPB* AESND_AllocateVoice(AESNDVoiceCallback cb);
void AESND_FreeVoice(AESNDPB *pb);
void AESND_SetVoiceStop(AESNDPB *pb,bool stop);
void AESND_SetVoiceMute(AESNDPB *pb,bool mute);
void AESND_SetVoiceLoop(AESNDPB *pb,bool loop);
void AESND_SetVoiceFormat(AESNDPB *pb,u32 format);
void AESND_SetVoiceStream(AESNDPB *pb,bool stream);
void AESND_SetVoiceFrequency(AESNDPB *pb,u32 freq);
void AESND_SetVoiceVolume(AESNDPB *pb,u16 volume_l,u16 volume_r);
void AESND_SetVoiceBuffer(AESNDPB *pb,const void *buffer,u32 len);
void AESND_PlayVoice(AESNDPB *pb,u32 format,const void *buffer,u32 len,u32 freq,u32 delay,bool looped);
AESNDVoiceCallback AESND_RegisterVoiceCallback(AESNDPB *pb,AESNDVoiceCallback cb);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -0,0 +1,383 @@
/* ASNDLIB -> accelerated sound lib using the DSP
Copyright (c) 2008 Hermes <www.entuwii.net>
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are
permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice, this list of
conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this list
of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
- The names of the contributors may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __ASNDLIB_H__
#define __ASNDLIB_H__
#define __SNDLIB_H__
/*!
* \file asndlib.h
* \brief ASND library
*
*/
#define ASND_LIB 0x100
#define SND_LIB (ASND_LIB+2)
#include <gctypes.h>
#ifdef __cplusplus
extern "C" {
#endif
/*! \addtogroup sndretvals SND return values
* @{
*/
#define SND_OK 0
#define SND_INVALID -1
#define SND_ISNOTASONGVOICE -2
#define SND_BUSY 1
/*! @} */
/*! \addtogroup sndiavretvals SND_IsActiveVoice additional return values
* @{
*/
#define SND_UNUSED 0 /*!< This voice is available for use. */
#define SND_WORKING 1 /*!< This voice is currently in progress. */
#define SND_WAITING 2 /*!< This voice is currently in progress and waiting to one SND_AddVoice() function (the voice handler is called continuously) */
/*! @} */
/*! \addtogroup sndsetvoiceformats Voice format
* @{
*/
#define VOICE_MONO_8BIT 0
#define VOICE_MONO_16BIT 1
#define VOICE_MONO_16BIT_BE 1
#define VOICE_STEREO_8BIT 2
#define VOICE_STEREO_16BIT 3
#define VOICE_STEREO_16BIT_BE 3
#define VOICE_MONO_8BIT_U 4
#define VOICE_MONO_16BIT_LE 5
#define VOICE_STEREO_8BIT_U 6
#define VOICE_STEREO_16BIT_LE 7
/*! @} */
/*! \addtogroup voicevol Voice volume
* @{
*/
#define MIN_VOLUME 0
#define MID_VOLUME 127
#define MAX_VOLUME 255
/*! @} */
/*! \addtogroup pitchrange Pitch Range
* @{
*/
#define MIN_PITCH 1 /*!< 1Hz */
#define F44100HZ_PITCH 44100 /*!< 44100Hz */
#define MAX_PITCH 144000 /*!< 144000Hz (more process time for pitch>48000) */
#define INIT_RATE_48000
/*! @} */
/*! \addtogroup notecode Note codification
* @{
*/
enum
{
NOTE_DO=0,
NOTE_DOs,
NOTE_REb=NOTE_DOs,
NOTE_RE,
NOTE_REs,
NOTE_MIb=NOTE_REs,
NOTE_MI,
NOTE_FA,
NOTE_FAs,
NOTE_SOLb=NOTE_FAs,
NOTE_SOL,
NOTE_SOLs,
NOTE_LAb=NOTE_SOLs,
NOTE_LA,
NOTE_LAs,
NOTE_SIb=NOTE_LAs,
NOTE_SI
};
enum
{
NOTE_C=0,
NOTE_Cs,
NOTE_Db=NOTE_Cs,
NOTE_D,
NOTE_Ds,
NOTE_Eb=NOTE_Ds,
NOTE_E,
NOTE_F,
NOTE_Fs,
NOTE_Gb=NOTE_Fs,
NOTE_G,
NOTE_Gs,
NOTE_Ab=NOTE_Gs,
NOTE_A,
NOTE_As,
NOTE_Bb=NOTE_As,
NOTE_B
};
#define NOTE(note,octave) (note+(octave<<3)+(octave<<2)) /*!< Final note codification. Used in Note2Freq(). */
/*! @} */
/*------------------------------------------------------------------------------------------------------------------------------------------------------*/
/*! \addtogroup sndlibcompat SNDLIB compatibility macros
* \details These defines are for compatability with SNDLIB functions.
* @{
*/
#define Note2Freq ANote2Freq
#define SND_Init ASND_Init
#define SND_End ASND_End
#define SND_Pause ASND_Pause
#define SND_Is_Paused ASND_Is_Paused
#define SND_GetTime ASND_GetTime
#define SND_GetSampleCounter ASND_GetSampleCounter
#define SND_GetSamplesPerTick ASND_GetSamplesPerTick
#define SND_SetTime ASND_SetTime
#define SND_SetCallback ASND_SetCallback
#define SND_GetAudioRate ASND_GetAudioRate
#define SND_SetVoice ASND_SetVoice
#define SND_AddVoice ASND_AddVoice
#define SND_StopVoice ASND_StopVoice
#define SND_PauseVoice ASND_PauseVoice
#define SND_StatusVoice ASND_StatusVoice
#define SND_GetFirstUnusedVoice ASND_GetFirstUnusedVoice
#define SND_ChangePitchVoice ASND_ChangePitchVoice
#define SND_ChangeVolumeVoice ASND_ChangeVolumeVoice
#define SND_ChangeVolumeVoice ASND_ChangeVolumeVoice
#define SND_GetTickCounterVoice ASND_GetTickCounterVoice
#define SND_GetTimerVoice ASND_GetTimerVoice
#define SND_TestPointer ASND_TestPointer
/*! @} */
/*------------------------------------------------------------------------------------------------------------------------------------------------------*/
/** \brief Callback type for ASND_SetVoice(). */
typedef void (*ASNDVoiceCallback)(s32 voice);
/*------------------------------------------------------------------------------------------------------------------------------------------------------*/
/** \brief Initializes the SND lib and fixes the hardware sample rate.
* \param[in] note \ref notecode to play. for example: NOTE(C,4) for note C and octave 4.
* \param[in] freq_base Frequency base of the sample. For example 8000Hz.
* \param[in] note_base \ref notecode of the sample. For example: NOTE(L, 3) for note L and octave 3 (LA 3).
* \return Frequency, in Hz. */
int ANote2Freq(int note, int freq_base,int note_base);
/*------------------------------------------------------------------------------------------------------------------------------------------------------*/
/*! \addtogroup General sound functions
* @{
*/
/*! \brief Initializes the ASND lib and fixes the hardware sample rate to 48000.
* \return None. */
void ASND_Init();
/*! \brief De-initializes the ASND lib.
* \return None. */
void ASND_End();
/*! \brief Used to pause (or unpause) the sound.
* \note The sound starts paused when ASND_Init() is called.
* \param[in] paused If 1, sound is paused; sound can be unpaused with 0.
* \return None. */
void ASND_Pause(s32 paused);
/*! \brief Returns sound paused status.
* \return 1 if paused, 0 if unpaused. */
s32 ASND_Is_Paused();
/*! \brief Returns the global time.
* \details The time is updated from the IRQ.
* \return The current time, in milliseconds. */
u32 ASND_GetTime();
/*! \brief Retrieves the global sample counter.
* \details This counter is updated from the IRQ in steps of ASND_GetSamplesPerTick().
* \note You can use this to implement one timer with high precision.
* \return Current sample. */
u32 ASND_GetSampleCounter();
/*! \brief Retrieves the samples sent from the IRQ in one tick.
* \return Samples per tick. */
u32 ASND_GetSamplesPerTick();
/*! \brief Set the global time.
* \details This time is updated from the IRQ.
* \param[in] time Fix the current time, in milliseconds.
* \return None. */
void ASND_SetTime(u32 time);
/*! \brief Sets a global callback for general purposes.
* \details This callback is called from the IRQ.
* \param[in] callback Callback function to assign.
* \return None. */
void ASND_SetCallback(void (*callback)());
/*! \brief Returns the current audio rate.
* \note This function is implemented for compatibility with SNDLIB.
* \return Audio rate (48000). */
s32 ASND_GetAudioRate();
/*! @} */
/*! \addtogroup voicefuncs Voice functions
* @{
*/
// NOTE: I'm keeping this description around because I couldn't fully understand it; if someone else knows exactly what it's doing, they can come around
// and make sure the description is correct.
/* callback: can be NULL or one callback function is used to implement a double buffer use. When the second buffer is empty, the callback is called sending
the voice number as parameter. You can use "void callback(s32 voice)" function to call ASND_AddVoice() and add one voice to the second buffer.
NOTE: When callback is fixed the voice never stops and it turn in SND_WAITING status if success one timeout condition.
*/
/*! \brief Sets a PCM voice to play.
* \details This function stops one previous voice. Use ASND_StatusVoice() to test the status condition.
* \note The voices are played in 16-bit stereo, regardless of the source format.<br><br>
*
* \note \a callback is used to implement a double buffer. When the second buffer is empty, the callback function is called with the voice number
* as an argument. You can use <tt>void <i>callback</i> (s32 voice)</tt> to call ASND_AddVoice() and add one voice to the second buffer. When the callback
* is non-NULL the, the voice never stops and returns SND_WAITING if successful on timeout condition.
* \param[in] voice Voice slot to use for this sound; valid values are 0 to (MAX_SND_VOICES-1).
* \param[in] format \ref sndsetvoiceformats to use for this sound.
* \param[in] pitch Frequency to use, in Hz.
* \param[in] delay Delay to wait before playing this voice; value is in milliseconds.
* \param[in] snd Buffer containing samples to play back; the buffer <b>must</b> be aligned and padded to 32 bytes!
* \param[in] size_snd Size of the buffer samples, in bytes.
* \param[in] volume_l \ref voicevol of the left channel; value can be 0 - 255 inclusive.
* \param[in] volume_r \ref voicevol of the right channel; value can be 0 - 255 inclusive.
* \param[in] callback Optional callback function to use; set to NULL for no callback. See the note above for details.
* \return SND_OK or SND_INVALID. */
s32 ASND_SetVoice(s32 voice, s32 format, s32 pitch,s32 delay, void *snd, s32 size_snd, s32 volume_l, s32 volume_r, ASNDVoiceCallback callback);
/*! \brief Sets a PCM voice to play infinitely.
* \note See ASND_SetVoice() for a detailed description, as it is largely identical. */
s32 ASND_SetInfiniteVoice(s32 voice, s32 format, s32 pitch,s32 delay, void *snd, s32 size_snd, s32 volume_l, s32 volume_r);
/*! \brief Adds a PCM voice to play from the second buffer.
* \note This function requires a call to ASND_SetVoice() and its subsequent return value to be a status other than SND_UNUSED prior to calling this one.
* \param[in] voice Voice slot to attach this buffer to; value must be 0 to (MAX_SND_VOICES-1).
* \param[in] snd Buffer containing the samples; it <b>must</b> be aligned and padded to 32 bytes AND have the same sample format as the first buffer.
* \param[in] size_snd Size of the buffer samples, in bytes.
* \return SND_OK or SND_INVALID; it may also return SND_BUSY if the second buffer is not empty and the voice cannot be added. */
s32 ASND_AddVoice(s32 voice, void *snd, s32 size_snd);
/*! \brief Stops the selected voice.
* \details If the voice is used in song mode, you need to assign the samples with ASND_SetSongSampleVoice() again. In this case, use ANS_PauseSongVoice()
* to stop the voice without loss of samples.
* \param[in] voice Voice to stop, from 0 to (MAX_SND_VOICES-1).
* \return SND_OK or SND_INVALID. */
s32 ASND_StopVoice(s32 voice);
/*! \brief Pauses the selected voice.
* \param[in] voice Voice to pause, from 0 to (MAX_SND_VOICES-1).
* \return SND_OK or SND_INVALID. */
s32 ASND_PauseVoice(s32 voice, s32 pause);
/*! \brief Returns the status of the selected voice.
* \param[in] voice Voice slot to get the status from, from 0 to (MAX_SND_VOICES-1).
* \return SND_INVALID if invalid, else a value from \ref sndiavretvals. */
s32 ASND_StatusVoice(s32 voice);
/*! \brief Returns the first unused voice.
* \note Voice 0 is the last possible voice that can be returned. The idea is that this voice is reserved for a MOD/OGG/MP3/etc. player. With this in mind,
* you can use this function to determine that the rest of the voices are working if the return value is < 1.
* \return SND_INVALID or the first free voice from 0 to (MAX_SND_VOICES-1). */
s32 ASND_GetFirstUnusedVoice();
/*! \brief Changes the voice pitch in real-time.
* \details This function can be used to create audio effects such as Doppler effect emulation.
* \param[in] voice Voice to change the pitch of, from 0 to (MAX_SND_VOICES-1).
* \return SND_OK or SND_INVALID. */
s32 ASND_ChangePitchVoice(s32 voice, s32 pitch);
/*! \brief Changes the voice volume in real-time.
* \details This function can be used to create audio effects like distance attenuation.
* \param[in] voice Voice to change the volume of, from 0 to (MAX_SND_VOICES-1).
* \param[in] volume_l \ref voicevol to set the left channel to, from 0 to 255.
* \param[in] volume_r \ref voicevol to set the right channel to, from 0 to 255.
* \return SND_OK or SND_INVALID. */
s32 ASND_ChangeVolumeVoice(s32 voice, s32 volume_l, s32 volume_r);
/*! \brief Returns the voice tick counter.
* \details This value represents the number of ticks since this voice started to play, sans delay time. It uses the same resolution as the internal
* sound buffer. For example, if the lib is initialized with INIT_RATE_48000, a return value of 24000 is equal to 0.5 seconds. This value can be used, for
* example, to synchronize audio and video.
* \note This function does not return error codes.
* \param[in] voice Voice to retrieve the counter value from, from 0 to (MAX_SND_VOICES-1).
* \return Number of ticks since this voice started playing. */
u32 ASND_GetTickCounterVoice(s32 voice);
/*! \brief Returns the voice playback time.
* \details This value represents the time, in milliseconds, since this voice started playing, sans delay time. This value can be used, for example, to
* synchronize audio and video.
* \note This function does not return error codes.
* \param[in] voice Voice to retrieve the time value from, from 0 to (MAX_SND_VOICES-1).
* \return Amount of time since this voice has started playing. */
u32 ASND_GetTimerVoice(s32 voice);
/*! \brief Tests if \a pointer is in use by \a voice as a buffer.
* \param[in] voice Voice to test, from 0 to (MAX_SND_VOICES-1).
* \param[in] pointer Address to test. This must be the same pointer sent to ASND_AddVoice() or ASND_SetVoice().
* \return SND_INVALID if invalid
* \return 0 if the pointer is unused
* \return 1 if the pointer used as a buffer. */
s32 ASND_TestPointer(s32 voice, void *pointer);
/*! \brief Tests to determine if the \a voice is ready to receive a new buffer sample with ASND_AddVoice().
* \details You can use this function to block a reader when double buffering is used. It works similarly to ASND_TestPointer() without needing to pass a
* pointer.
* \param[in] voice Voice to test, from 0 to (MAX_SND_VOICES-1).
* \return SND_INVALID
* \return 0 if voice is NOT ready to receive a new voice.
* \return 1 if voice is ready to receive a new voice with ASND_AddVoice(). */
s32 ASND_TestVoiceBufferReady(s32 voice);
/*! @} */
/*! \addtogroup dspfuncs DSP functions
* @{
*/
/*! \brief Returns the DSP usage.
* \details The value is a percentage of DSP usage.
* \return DSP usage, in percent. */
u32 ASND_GetDSP_PercentUse();
u32 ASND_GetDSP_ProcessTime();
/*! @} */
#ifdef __cplusplus
}
#endif
#endif

View File

@ -0,0 +1,79 @@
/*
* Copyright (c) 2003 EISLAB, Lulea University of Technology.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
*
* This file is part of the lwBT Bluetooth stack.
*
* Author: Conny Ohult <conny@sm.luth.se>
*
*/
#ifndef __BD_ADDR_H__
#define __BD_ADDR_H__
#include <gctypes.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
struct bd_addr {
u8 addr[6];
};
#define BD_ADDR_LEN 6
#define BD_ADDR_ANY (&(struct bd_addr){{0,0,0,0,0,0}})
#define BD_ADDR_LOCAL (&(struct bd_addr){{0,0,0,0xff,0xff,0xff}})
#define BD_ADDR(bdaddr, a, b, c, d, e, f) do{ \
(bdaddr)->addr[0] = a; \
(bdaddr)->addr[1] = b; \
(bdaddr)->addr[2] = c; \
(bdaddr)->addr[3] = d; \
(bdaddr)->addr[4] = e; \
(bdaddr)->addr[5] = f; }while(0)
//TODO: USE memcmp????
#define bd_addr_cmp(addr1, addr2) (((addr1)->addr[0] == (addr2)->addr[0]) && \
((addr1)->addr[1] == (addr2)->addr[1]) && \
((addr1)->addr[2] == (addr2)->addr[2]) && \
((addr1)->addr[3] == (addr2)->addr[3]) && \
((addr1)->addr[4] == (addr2)->addr[4]) && \
((addr1)->addr[5] == (addr2)->addr[5]))
//TODO: USE memcpy????
#define bd_addr_set(addr1, addr2) do { \
(addr1)->addr[0] = (addr2)->addr[0]; \
(addr1)->addr[1] = (addr2)->addr[1]; \
(addr1)->addr[2] = (addr2)->addr[2]; \
(addr1)->addr[3] = (addr2)->addr[3]; \
(addr1)->addr[4] = (addr2)->addr[4]; \
(addr1)->addr[5] = (addr2)->addr[5]; }while(0)
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __BD_ADDR_H__ */

View File

@ -0,0 +1,154 @@
#ifndef __BTE_H__
#define __BTE_H__
#include <gccore.h>
#include "bd_addr.h"
#define ERR_OK 0
#define ERR_MEM -1
#define ERR_BUF -2
#define ERR_ABRT -3
#define ERR_RST -4
#define ERR_CLSD -5
#define ERR_CONN -6
#define ERR_VAL -7
#define ERR_ARG -8
#define ERR_RTE -9
#define ERR_USE -10
#define ERR_IF -11
#define ERR_PKTSIZE -17
#define HIDP_STATE_READY 0x00
#define HIDP_STATE_LISTEN 0x01
#define HIDP_STATE_CONNECTING 0x02
#define HIDP_STATE_CONNECTED 0x04
#define HIDP_CONTROL_CHANNEL 0x11
#define HIDP_DATA_CHANNEL 0x13
#define HIDP_HDR_TRANS_MASK 0xf0
#define HIDP_HDR_PARAM_MASK 0x0f
#define HIDP_TRANS_HANDSHAKE 0x00
#define HIDP_TRANS_HIDCONTROL 0x10
#define HIDP_TRANS_GETREPORT 0x40
#define HIDP_TRANS_SETREPORT 0x50
#define HIDP_TRANS_GETPROTOCOL 0x60
#define HIDP_TRANS_SETPROTOCOL 0x70
#define HIDP_TRANS_GETIDLE 0x80
#define HIDP_TRANS_SETIDLE 0x90
#define HIDP_TRANS_DATA 0xa0
#define HIDP_TRANS_DATAC 0xb0
#define HIDP_HSHK_SUCCESSFULL 0x00
#define HIDP_HSHK_NOTREADY 0x01
#define HIDP_HSHK_INV_REPORTID 0x02
#define HIDP_HSHK_NOTSUPPORTED 0x03
#define HIDP_HSHK_IVALIDPARAM 0x04
#define HIDP_HSHK_UNKNOWNERROR 0x0e
#define HIDP_HSHK_FATALERROR 0x0f
#define HIDP_CTRL_NOP 0x00
#define HIDP_CTRL_HARDRESET 0x01
#define HIDP_CTRL_SOFTRESET 0x02
#define HIDP_CTRL_SUSPEND 0x03
#define HIDP_CTRL_RESUME 0x04
#define HIDP_CTRL_VC_UNPLUG 0x05
/* HIDP data transaction headers */
#define HIDP_DATA_RTYPE_MASK 0x03
#define HIDP_DATA_RSRVD_MASK 0x0c
#define HIDP_DATA_RTYPE_OTHER 0x00
#define HIDP_DATA_RTYPE_INPUT 0x01
#define HIDP_DATA_RTYPE_OUPUT 0x02
#define HIDP_DATA_RTYPE_FEATURE 0x03
#define HIDP_PROTO_BOOT 0x00
#define HIDP_PROTO_REPORT 0x01
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
struct l2cap_pcb;
struct ctrl_req_t;
struct inquiry_info
{
struct bd_addr bdaddr;
u8 cod[3];
};
struct inquiry_info_ex
{
struct bd_addr bdaddr;
u8 cod[3];
u8 psrm;
u8 psm;
u16 co;
};
struct linkkey_info
{
struct bd_addr bdaddr;
u8 key[16];
};
struct bte_pcb
{
u8 err;
u32 state;
void *cbarg;
struct ctrl_req_t *ctrl_req_head;
struct ctrl_req_t *ctrl_req_tail;
lwpq_t cmdq;
struct bd_addr bdaddr;
struct l2cap_pcb *ctl_pcb;
struct l2cap_pcb *data_pcb;
s32 (*recv)(void *arg,void *buffer,u16 len);
s32 (*conn_cfm)(void *arg,struct bte_pcb *pcb,u8 err);
s32 (*disconn_cfm)(void *arg,struct bte_pcb *pcb,u8 err);
};
typedef s32 (*btecallback)(s32 result,void *userdata);
void BTE_Init();
void BTE_Shutdown();
s32 BTE_InitCore(btecallback cb);
s32 BTE_ApplyPatch(btecallback cb);
s32 BTE_InitSub(btecallback cb);
s32 BTE_ReadStoredLinkKey(struct linkkey_info *keys,u8 max_cnt,btecallback cb);
s32 BTE_ReadBdAddr(struct bd_addr *bdaddr, btecallback cb);
void (*BTE_SetDisconnectCallback(void (*callback)(struct bd_addr *bdaddr,u8 reason)))(struct bd_addr *bdaddr,u8 reason);
struct bte_pcb* bte_new();
void bte_arg(struct bte_pcb *pcb,void *arg);
void bte_received(struct bte_pcb *pcb, s32 (*recv)(void *arg,void *buffer,u16 len));
void bte_disconnected(struct bte_pcb *pcb,s32 (disconn_cfm)(void *arg,struct bte_pcb *pcb,u8 err));
s32 bte_registerdeviceasync(struct bte_pcb *pcb,struct bd_addr *bdaddr,s32 (*conn_cfm)(void *arg,struct bte_pcb *pcb,u8 err));
s32 bte_disconnect(struct bte_pcb *pcb);
//s32 bte_listen(struct bte_pcb *pcb,struct bd_addr *bdaddr,u8 psm);
//s32 bte_accept(struct bte_pcb *pcb,s32 (*recv)(void *arg,void *buffer,u16 len));
s32 bte_inquiry(struct inquiry_info *info,u8 max_cnt,u8 flush);
s32 bte_inquiry_ex(struct inquiry_info_ex *info,u8 max_cnt,u8 flush);
//s32 bte_connect(struct bte_pcb *pcb,struct bd_addr *bdaddr,u8 psm,s32 (*recv)(void *arg,void *buffer,u16 len));
//s32 bte_connect_ex(struct bte_pcb *pcb,struct inquiry_info_ex *info,u8 psm,s32 (*recv)(void *arg,void *buffer,u16 len));
s32 bte_senddata(struct bte_pcb *pcb,void *message,u16 len);
s32 bte_sendmessage(struct bte_pcb *pcb,void *message,u16 len);
s32 bte_sendmessageasync(struct bte_pcb *pcb,void *message,u16 len,s32 (*sent)(void *arg,struct bte_pcb *pcb,u8 err));
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif

View File

@ -0,0 +1,43 @@
#ifndef __DEBUG_H__
#define __DEBUG_H__
#include <gctypes.h>
#define GDBSTUB_DEVICE_USB 0 /*!< device type: USBGecko */
#define GDBSTUB_DEVICE_TCP 1 /*!< device type: BBA-TCP */
#define GDBSTUB_DEF_CHANNEL 0 /*!< default EXI channel. channel can be 0 or 1. Note: Used for device type USBGecko */
#define GDBSTUB_DEF_TCPPORT 2828 /*!< default TCP port. Note: Used for device type TCP */
#ifdef __cplusplus
extern "C" {
#endif
extern const char *tcp_localip;
extern const char *tcp_netmask;
extern const char *tcp_gateway;
/*!\fn void _break()
* \brief Stub function to insert the hardware break instruction. This function is used to enter the debug stub and to
* connect with the host. The developer is free to insert this function at any position in project's source code.
*
* \return none.
*/
void _break();
/*!\fn void DEBUG_Init(s32 device_type,s32 channel_port)
* \brief Performs the initialization of the debug stub.
* \param[in] device_type type of device to use. can be either USB or TCP.
* \param[in] channel_port depending on the used device this can be either the EXI channel or the TCP port.
*
* \return none.
*/
void DEBUG_Init(s32 device_type,s32 channel_port);
#ifdef __cplusplus
}
#endif
#endif

133
wii/libogc/include/di/di.h Normal file
View File

@ -0,0 +1,133 @@
/*-------------------------------------------------------------
di.h -- Drive Interface library
Team Twiizers
Copyright (C) 2008
Erant
marcan
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any
damages arising from the use of this software.
Permission is granted to anyone to use this software for any
purpose, including commercial applications, and to alter it and
redistribute it freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you
must not claim that you wrote the original software. If you use
this software in a product, an acknowledgment in the product
documentation would be appreciated but is not required.
2. Altered source versions must be plainly marked as such, and
must not be misrepresented as being the original software.
3. This notice may not be removed or altered from any source
distribution.
-------------------------------------------------------------*/
/*
All buffers in this document need to be 32-byte aligned!
*/
#ifndef __DI_H__
#define __DI_H__
#include <stdint.h>
#include <ogc/ipc.h>
#include <ogc/disc_io.h>
#define DVD_IDENTIFY 0x12
#define DVD_READ_DISCID 0x70
#define DVD_LOW_READ 0x71
#define DVD_WAITFORCOVERCLOSE 0x79
#define DVD_READ_PHYSICAL 0x80
#define DVD_READ_COPYRIGHT 0x81
#define DVD_READ_DISCKEY 0x82
#define DVD_GETCOVER 0x88
#define DVD_RESET 0x8A
#define DVD_OPEN_PARTITION 0x8B
#define DVD_CLOSE_PARTITION 0x8C
#define DVD_READ_UNENCRYPTED 0x8D
#define DVD_REPORTKEY 0xA4
#define DVD_READ 0xD0
#define DVD_READ_CONFIG 0xD1
#define DVD_READ_BCA 0xDA
#define DVD_GET_ERROR 0xE0
#define DVD_SET_MOTOR 0xE3
#define DVD_READY 0x1
#define DVD_INIT 0x2
#define DVD_UNKNOWN 0x4
#define DVD_NO_DISC 0x8
#define DVD_IOS_ERROR 0x10
#define DVD_D0 0x20
#define DVD_A8 0x40
#define DVD_COVER_DISC_INSERTED 0x02
#define LIBDI_MAX_RETRIES 16
#define DEVICE_TYPE_WII_DVD (('W'<<24)|('D'<<16)|('V'<<8)|'D')
#ifdef __cplusplus
extern "C" {
#endif
typedef struct{
uint16_t rev;
uint16_t dev_code;
uint32_t rel_date;
}DI_DriveID;
typedef int(*di_callback)(uint32_t status, uint32_t error);
typedef int(*read_func)(void*,uint32_t,uint32_t);
typedef int(*read_func_async)(void*,uint32_t,uint32_t,ipccallback);
extern int di_fd;
extern const DISC_INTERFACE __io_wiidvd;
int DI_Init();
void DI_LoadDVDX(bool load);
void DI_UseCache(bool use);
void DI_SetInitCallback(di_callback cb);
void DI_Mount();
void DI_Close();
int DI_GetStatus();
int DI_Identify(DI_DriveID* id);
int DI_CheckDVDSupport();
int DI_ReadDiscID(u64 *id);
int DI_GetError(uint32_t* error);
int DI_GetCoverRegister(uint32_t* status);
int DI_Reset();
int DI_StopMotor();
int DI_Eject();
int DI_KillDrive();
int DI_ReadDVD(void* buf, uint32_t len, uint32_t lba);
int DI_ReadDVDAsync(void* buf, uint32_t len, uint32_t lba, ipccallback ipc_cb);
int DI_Read(void *buf, u32 size, u32 offset);
int DI_UnencryptedRead(void *buf, u32 size, u32 offset);
int DI_ReadDVDConfig(uint32_t* val, uint32_t flag);
int DI_ReadDVDCopyright(uint32_t* copyright);
int DI_ReadDVDDiscKey(void *buf);
int DI_ReadDVDPhysical(void *buf);
int DI_Read_BCA(void *buf);
int DI_ReportKey(int keytype, uint32_t lba, void* buf);
int DI_OpenPartition(u32 offset);
int DI_ClosePartition(void);
#ifdef __cplusplus
}
#endif
#endif

122
wii/libogc/include/fat.h Normal file
View File

@ -0,0 +1,122 @@
/*
fat.h
Simple functionality for startup, mounting and unmounting of FAT-based devices.
Copyright (c) 2006 - 2012
Michael "Chishm" Chisholm
Dave "WinterMute" Murphy
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _LIBFAT_H
#define _LIBFAT_H
#ifdef __cplusplus
extern "C" {
#endif
#include "libfatversion.h"
// When compiling for NDS, make sure NDS is defined
#ifndef NDS
#if defined ARM9 || defined ARM7
#define NDS
#endif
#endif
#include <stdint.h>
#if defined(__gamecube__) || defined (__wii__)
# include <ogc/disc_io.h>
#else
# ifdef NDS
# include <nds/disc_io.h>
# else
# include <disc_io.h>
# endif
#endif
/*
Initialise any inserted block-devices.
Add the fat device driver to the devoptab, making it available for standard file functions.
cacheSize: The number of pages to allocate for each inserted block-device
setAsDefaultDevice: if true, make this the default device driver for file operations
*/
extern bool fatInit (uint32_t cacheSize, bool setAsDefaultDevice);
/*
Calls fatInit with setAsDefaultDevice = true and cacheSize optimised for the host system.
*/
extern bool fatInitDefault (void);
/*
Mount the device pointed to by interface, and set up a devoptab entry for it as "name:".
You can then access the filesystem using "name:/".
This will mount the active partition or the first valid partition on the disc,
and will use a cache size optimized for the host system.
*/
extern bool fatMountSimple (const char* name, const DISC_INTERFACE* interface);
/*
Mount the device pointed to by interface, and set up a devoptab entry for it as "name:".
You can then access the filesystem using "name:/".
If startSector = 0, it will mount the active partition of the first valid partition on
the disc. Otherwise it will try to mount the partition starting at startSector.
cacheSize specifies the number of pages to allocate for the cache.
This will not startup the disc, so you need to call interface->startup(); first.
*/
extern bool fatMount (const char* name, const DISC_INTERFACE* interface, sec_t startSector, uint32_t cacheSize, uint32_t SectorsPerPage);
/*
Unmount the partition specified by name.
If there are open files, it will attempt to synchronise them to disc.
*/
extern void fatUnmount (const char* name);
/*
Get Volume Label
*/
extern void fatGetVolumeLabel (const char* name, char *label);
// File attributes
#define ATTR_ARCHIVE 0x20 // Archive
#define ATTR_DIRECTORY 0x10 // Directory
#define ATTR_VOLUME 0x08 // Volume
#define ATTR_SYSTEM 0x04 // System
#define ATTR_HIDDEN 0x02 // Hidden
#define ATTR_READONLY 0x01 // Read only
/*
Methods to modify DOS File Attributes
*/
int FAT_getAttr(const char *file);
int FAT_setAttr(const char *file, uint8_t attr );
#define LIBFAT_FEOS_MULTICWD
#ifdef __cplusplus
}
#endif
#endif // _LIBFAT_H

150
wii/libogc/include/gccore.h Normal file
View File

@ -0,0 +1,150 @@
/*-------------------------------------------------------------
gccore.h -- GC core header
Copyright (C) 2004
Michael Wiedenbauer (shagkur)
Dave Murphy (WinterMute)
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any
damages arising from the use of this software.
Permission is granted to anyone to use this software for any
purpose, including commercial applications, and to alter it and
redistribute it freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you
must not claim that you wrote the original software. If you use
this software in a product, an acknowledgment in the product
documentation would be appreciated but is not required.
2. Altered source versions must be plainly marked as such, and
must not be misrepresented as being the original software.
3. This notice may not be removed or altered from any source
distribution.
-------------------------------------------------------------*/
#ifndef __GCCORE_H__
#define __GCCORE_H__
/*! \file gccore.h
\brief Core header which includes all subsequent subsystem headers
*/
#include "ogc/dsp.h"
#include "ogc/aram.h"
#include "ogc/arqueue.h"
#include "ogc/arqmgr.h"
#include "ogc/audio.h"
#include "ogc/cache.h"
#include "ogc/card.h"
#include "ogc/cast.h"
#include "ogc/color.h"
#include "ogc/consol.h"
#include "ogc/dvd.h"
#include "ogc/exi.h"
#include "ogc/gu.h"
#include "ogc/gx.h"
#include "ogc/si.h"
#include "ogc/gx_struct.h"
#include "ogc/irq.h"
#include "ogc/lwp.h"
#include "ogc/mutex.h"
#include "ogc/message.h"
#include "ogc/semaphore.h"
#include "ogc/pad.h"
#include "ogc/tpl.h"
#include "ogc/system.h"
#include "ogc/video.h"
#include "ogc/usbgecko.h"
#include "ogc/video_types.h"
#include "ogc/texconv.h"
#if defined(HW_RVL)
#include "ogc/ipc.h"
#include "ogc/es.h"
#include "ogc/stm.h"
#include "ogc/ios.h"
#include "ogc/usb.h"
#include "ogc/isfs.h"
#include "ogc/conf.h"
#include "ogc/usbstorage.h"
#include "ogc/wiilaunch.h"
#endif
/*
* Error returns
*/
#define RNC_FILE_IS_NOT_RNC -1
#define RNC_HUF_DECODE_ERROR -2
#define RNC_FILE_SIZE_MISMATCH -3
#define RNC_PACKED_CRC_ERROR -4
#define RNC_UNPACKED_CRC_ERROR -5
#ifndef ATTRIBUTE_ALIGN
# define ATTRIBUTE_ALIGN(v) __attribute__((aligned(v)))
#endif
#ifndef ATTRIBUTE_PACKED
# define ATTRIBUTE_PACKED __attribute__((packed))
#endif
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/*!
* \mainpage
*
* - \subpage intro
* - \subpage api_doc
*/
/*!
* \page intro Introduction
* Welcome to the libOGC reference documentation.
*/
/*!
* \page api_doc Detailed API description
*
* - \ref aram.h "ARAM subsystem"
* - \ref arqmgr.h "ARAM queue management subsystem"
* - \ref audio.h "AUDIO subsystem"
* - \ref asndlib.h "ASND library"
* - \ref exi.h "EXI subsystem"
* - \ref irq.h "IRQ subsystem"
* - \ref dsp.h "DSP subsystem"
* - \ref dvd.h "DVD subsystem"
* - \ref gx.h "GX subsystem"
* - \ref gu.h "gu/Matrix subsystem"
* - \ref video.h "VIDEO subsystem"
* - \ref cache.h "Cache subsystem"
* - \ref card.h "Memory card subsystem"
* - \ref consol.h "Console subsystem"
* - \ref system.h "OS functions and initialization"
* - \ref lwp.h "Thread subsystem I"
* - \ref message.h "Thread subsystem II"
* - \ref mutex.h "Thread subsystem III"
* - \ref semaphore.h "Thread subsystem IV"
* - \ref cond.h "Thread subsystem V"
*/
s32 depackrnc1_ulen(void *packed);
s32 depackrnc1(void *packed,void *unpacked);
void depackrnc2(void *packed,void *unpacked);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif

View File

@ -0,0 +1,44 @@
#ifndef __GCMODPLAY_H__
#define __GCMODPLAY_H__
#include <gctypes.h>
#include "modplay/modplay.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
typedef struct _modsndbuf {
u32 freq;
u16 fmt;
u32 chans;
f32 samples;
void *usr_data;
void (*callback)(void *,u8 *,u32);
} MODSNDBUF;
typedef struct _modplay {
MOD mod;
BOOL playing,paused;
BOOL bits,stereo,manual_polling;
u32 playfreq,numSFXChans;
MODSNDBUF soundBuf;
} MODPlay;
void MODPlay_Init(MODPlay *mod);
s32 MODPlay_SetFrequency(MODPlay *mod,u32 freq);
void MODPlay_SetStereo(MODPlay *mod,BOOL stereo);
s32 MODPlay_SetMOD(MODPlay *mod,const void *mem);
void MODPlay_Unload(MODPlay *mod);
s32 MODPlay_AllocSFXChannels(MODPlay *mod,u32 sfxchans);
s32 MODPlay_Start(MODPlay *mod);
s32 MODPlay_Stop(MODPlay *mod);
s32 MODPlay_TriggerNote(MODPlay *mod,u32 chan,u8 inst,u16 freq,u8 vol);
s32 MODPlay_Pause(MODPlay *mod,BOOL);
void MODPlay_SetVolume(MODPlay * mod, s32 musicvolume, s32 sfxvolume);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif

View File

@ -0,0 +1,110 @@
#ifndef __GCTYPES_H__
#define __GCTYPES_H__
/*! \file gctypes.h
\brief Data type definitions
*/
#include <stdbool.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/*+----------------------------------------------------------------------------------------------+*/
typedef uint8_t u8; ///< 8bit unsigned integer
typedef uint16_t u16; ///< 16bit unsigned integer
typedef uint32_t u32; ///< 32bit unsigned integer
typedef uint64_t u64; ///< 64bit unsigned integer
/*+----------------------------------------------------------------------------------------------+*/
typedef int8_t s8; ///< 8bit signed integer
typedef int16_t s16; ///< 16bit signed integer
typedef int32_t s32; ///< 32bit signed integer
typedef int64_t s64; ///< 64bit signed integer
/*+----------------------------------------------------------------------------------------------+*/
typedef volatile u8 vu8; ///< 8bit unsigned volatile integer
typedef volatile u16 vu16; ///< 16bit unsigned volatile integer
typedef volatile u32 vu32; ///< 32bit unsigned volatile integer
typedef volatile u64 vu64; ///< 64bit unsigned volatile integer
/*+----------------------------------------------------------------------------------------------+*/
typedef volatile s8 vs8; ///< 8bit signed volatile integer
typedef volatile s16 vs16; ///< 16bit signed volatile integer
typedef volatile s32 vs32; ///< 32bit signed volatile integer
typedef volatile s64 vs64; ///< 64bit signed volatile integer
/*+----------------------------------------------------------------------------------------------+*/
// fixed point math typedefs
typedef s16 sfp16; ///< signed 8:8 fixed point
typedef s32 sfp32; ///< signed 20:8 fixed point
typedef u16 ufp16; ///< unsigned 8:8 fixed point
typedef u32 ufp32; ///< unsigned 24:8 fixed point
/*+----------------------------------------------------------------------------------------------+*/
typedef float f32;
typedef double f64;
/*+----------------------------------------------------------------------------------------------+*/
typedef volatile float vf32;
typedef volatile double vf64;
/*+----------------------------------------------------------------------------------------------+*/
typedef unsigned int BOOL;
/*+----------------------------------------------------------------------------------------------+*/
// alias type typedefs
#define FIXED s32 ///< Alias type for sfp32
/*+----------------------------------------------------------------------------------------------+*/
#ifndef TRUE
#define TRUE 1 ///< True
#endif
/*+----------------------------------------------------------------------------------------------+*/
#ifndef FALSE
#define FALSE 0 ///< False
#endif
/*+----------------------------------------------------------------------------------------------+*/
#ifndef NULL
#define NULL 0 ///< Pointer to 0
#endif
/*+----------------------------------------------------------------------------------------------+*/
#ifndef LITTLE_ENDIAN
#define LITTLE_ENDIAN 3412
#endif /* LITTLE_ENDIAN */
/*+----------------------------------------------------------------------------------------------+*/
#ifndef BIG_ENDIAN
#define BIG_ENDIAN 1234
#endif /* BIGE_ENDIAN */
/*+----------------------------------------------------------------------------------------------+*/
#ifndef BYTE_ORDER
#define BYTE_ORDER BIG_ENDIAN
#endif /* BYTE_ORDER */
/*+----------------------------------------------------------------------------------------------+*/
//! argv structure
/*! \struct __argv
structure used to set up argc/argv
*/
struct __argv {
int argvMagic; //!< argv magic number, set to 0x5f617267 ('_arg') if valid
char *commandLine; //!< base address of command line, set of null terminated strings
int length;//!< total length of command line
int argc;
char **argv;
char **endARGV;
};
//! Default location for the system argv structure.
extern struct __argv *__system_argv;
// argv struct magic number
#define ARGV_MAGIC 0x5f617267
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* TYPES_H */
/* END OF FILE */

View File

@ -0,0 +1,12 @@
#ifndef __GCUTIL_H__
#define __GCUTIL_H__
#ifndef ATTRIBUTE_ALIGN
# define ATTRIBUTE_ALIGN(v) __attribute__((aligned(v)))
#endif
#ifndef ATTRIBUTE_PACKED
# define ATTRIBUTE_PACKED __attribute__((packed))
#endif
#endif /* _GCUTIL_H */

View File

@ -0,0 +1,112 @@
/*
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
*
* This file is part of the lwIP TCP/IP stack.
*
* Author: Adam Dunkels <adam@sics.se>
*
*/
#ifndef __LWIP_ICMP_H__
#define __LWIP_ICMP_H__
#include "lwip/arch.h"
#include "lwip/opt.h"
#include "lwip/pbuf.h"
#include "lwip/ip_addr.h"
#include "lwip/netif.h"
#define ICMP_ER 0 /* echo reply */
#define ICMP_DUR 3 /* destination unreachable */
#define ICMP_SQ 4 /* source quench */
#define ICMP_RD 5 /* redirect */
#define ICMP_ECHO 8 /* echo */
#define ICMP_TE 11 /* time exceeded */
#define ICMP_PP 12 /* parameter problem */
#define ICMP_TS 13 /* timestamp */
#define ICMP_TSR 14 /* timestamp reply */
#define ICMP_IRQ 15 /* information request */
#define ICMP_IR 16 /* information reply */
enum icmp_dur_type {
ICMP_DUR_NET = 0, /* net unreachable */
ICMP_DUR_HOST = 1, /* host unreachable */
ICMP_DUR_PROTO = 2, /* protocol unreachable */
ICMP_DUR_PORT = 3, /* port unreachable */
ICMP_DUR_FRAG = 4, /* fragmentation needed and DF set */
ICMP_DUR_SR = 5 /* source route failed */
};
enum icmp_te_type {
ICMP_TE_TTL = 0, /* time to live exceeded in transit */
ICMP_TE_FRAG = 1 /* fragment reassembly time exceeded */
};
void icmp_input(struct pbuf *p, struct netif *inp);
void icmp_dest_unreach(struct pbuf *p, enum icmp_dur_type t);
void icmp_time_exceeded(struct pbuf *p, enum icmp_te_type t);
#ifdef PACK_STRUCT_USE_INCLUDES
# include "arch/bpstruct.h"
#endif
PACK_STRUCT_BEGIN
struct icmp_echo_hdr {
PACK_STRUCT_FIELD(u16_t _type_code);
PACK_STRUCT_FIELD(u16_t chksum);
PACK_STRUCT_FIELD(u16_t id);
PACK_STRUCT_FIELD(u16_t seqno);
} PACK_STRUCT_STRUCT;
PACK_STRUCT_END
PACK_STRUCT_BEGIN
struct icmp_dur_hdr {
PACK_STRUCT_FIELD(u16_t _type_code);
PACK_STRUCT_FIELD(u16_t chksum);
PACK_STRUCT_FIELD(u32_t unused);
} PACK_STRUCT_STRUCT;
PACK_STRUCT_END
PACK_STRUCT_BEGIN
struct icmp_te_hdr {
PACK_STRUCT_FIELD(u16_t _type_code);
PACK_STRUCT_FIELD(u16_t chksum);
PACK_STRUCT_FIELD(u32_t unused);
} PACK_STRUCT_STRUCT;
PACK_STRUCT_END
#ifdef PACK_STRUCT_USE_INCLUDES
# include "arch/epstruct.h"
#endif
#define ICMPH_TYPE(hdr) (ntohs((hdr)->_type_code) >> 8)
#define ICMPH_CODE(hdr) (ntohs((hdr)->_type_code) & 0xff)
#define ICMPH_TYPE_SET(hdr, type) ((hdr)->_type_code = htons(ICMPH_CODE(hdr) | ((type) << 8)))
#define ICMPH_CODE_SET(hdr, code) ((hdr)->_type_code = htons((code) | (ICMPH_TYPE(hdr) << 8)))
#endif /* __LWIP_ICMP_H__ */

View File

@ -0,0 +1,87 @@
/*
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
*
* This file is part of the lwIP TCP/IP stack.
*
* Author: Adam Dunkels <adam@sics.se>
*
*/
#ifndef __LWIP_INET_H__
#define __LWIP_INET_H__
#include "lwip/arch.h"
#include "lwip/opt.h"
#include "lwip/pbuf.h"
#include "lwip/ip_addr.h"
u16_t inet_chksum(void *dataptr, u16_t len);
#if 0 /* optimized routine */
u16_t inet_chksum4(u8_t *dataptr, u16_t len);
#endif
u16_t inet_chksum_pbuf(struct pbuf *p);
u16_t inet_chksum_pseudo(struct pbuf *p,
struct ip_addr *src, struct ip_addr *dest,
u8_t proto, u16_t proto_len);
u32_t inet_addr(const char *cp);
s8_t inet_aton(const char *cp, struct in_addr *addr);
char *inet_ntoa(struct in_addr addr); /* returns ptr to static buffer; not reentrant! */
#ifdef htons
#undef htons
#endif /* htons */
#ifdef htonl
#undef htonl
#endif /* htonl */
#ifdef ntohs
#undef ntohs
#endif /* ntohs */
#ifdef ntohl
#undef ntohl
#endif /* ntohl */
#if BYTE_ORDER == BIG_ENDIAN
#define htons(x) (x)
#define ntohs(x) (x)
#define htonl(x) (x)
#define ntohl(x) (x)
#else
#ifdef LWIP_PREFIX_BYTEORDER_FUNCS
/* workaround for naming collisions on some platforms */
#define htons lwip_htons
#define ntohs lwip_ntohs
#define htonl lwip_htonl
#define ntohl lwip_ntohl
#endif
u16_t htons(u16_t x);
u16_t ntohs(u16_t x);
u32_t htonl(u32_t x);
u32_t ntohl(u32_t x);
#endif
#endif /* __LWIP_INET_H__ */

View File

@ -0,0 +1,154 @@
/*
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
*
* This file is part of the lwIP TCP/IP stack.
*
* Author: Adam Dunkels <adam@sics.se>
*
*/
#ifndef __LWIP_IP_H__
#define __LWIP_IP_H__
#include "lwip/arch.h"
#include "lwip/def.h"
#include "lwip/pbuf.h"
#include "lwip/ip_addr.h"
#include "lwip/err.h"
void ip_init(void);
struct netif *ip_route(struct ip_addr *dest);
err_t ip_input(struct pbuf *p, struct netif *inp);
err_t ip_output(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest,
u8_t ttl, u8_t tos, u8_t proto);
err_t ip_output_if(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest,
u8_t ttl, u8_t tos, u8_t proto,
struct netif *netif);
#define IP_HLEN 20
#define IP_PROTO_ICMP 1
#define IP_PROTO_UDP 17
#define IP_PROTO_UDPLITE 170
#define IP_PROTO_TCP 6
/* This is passed as the destination address to ip_output_if (not
to ip_output), meaning that an IP header already is constructed
in the pbuf. This is used when TCP retransmits. */
#ifdef IP_HDRINCL
#undef IP_HDRINCL
#endif /* IP_HDRINCL */
#define IP_HDRINCL NULL
/* This is the common part of all PCB types. It needs to be at the
beginning of a PCB type definition. It is located here so that
changes to this common part are made in one location instead of
having to change all PCB structs. */
#define IP_PCB struct ip_addr local_ip; \
struct ip_addr remote_ip; \
/* Socket options */ \
u16_t so_options; \
/* Type Of Service */ \
u8_t tos; \
/* Time To Live */ \
u8_t ttl
/*
* Option flags per-socket. These are the same like SO_XXX.
*/
#define SOF_DEBUG (u16_t)0x0001U /* turn on debugging info recording */
#define SOF_ACCEPTCONN (u16_t)0x0002U /* socket has had listen() */
#define SOF_REUSEADDR (u16_t)0x0004U /* allow local address reuse */
#define SOF_KEEPALIVE (u16_t)0x0008U /* keep connections alive */
#define SOF_DONTROUTE (u16_t)0x0010U /* just use interface addresses */
#define SOF_BROADCAST (u16_t)0x0020U /* permit sending of broadcast msgs */
#define SOF_USELOOPBACK (u16_t)0x0040U /* bypass hardware when possible */
#define SOF_LINGER (u16_t)0x0080U /* linger on close if data present */
#define SOF_OOBINLINE (u16_t)0x0100U /* leave received OOB data in line */
#define SOF_REUSEPORT (u16_t)0x0200U /* allow local address & port reuse */
#ifdef PACK_STRUCT_USE_INCLUDES
# include "arch/bpstruct.h"
#endif
PACK_STRUCT_BEGIN
struct ip_hdr {
/* version / header length / type of service */
PACK_STRUCT_FIELD(u16_t _v_hl_tos);
/* total length */
PACK_STRUCT_FIELD(u16_t _len);
/* identification */
PACK_STRUCT_FIELD(u16_t _id);
/* fragment offset field */
PACK_STRUCT_FIELD(u16_t _offset);
#define IP_RF 0x8000 /* reserved fragment flag */
#define IP_DF 0x4000 /* dont fragment flag */
#define IP_MF 0x2000 /* more fragments flag */
#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
/* time to live / protocol*/
PACK_STRUCT_FIELD(u16_t _ttl_proto);
/* checksum */
PACK_STRUCT_FIELD(u16_t _chksum);
/* source and destination IP addresses */
PACK_STRUCT_FIELD(struct ip_addr src);
PACK_STRUCT_FIELD(struct ip_addr dest);
} PACK_STRUCT_STRUCT;
PACK_STRUCT_END
#ifdef PACK_STRUCT_USE_INCLUDES
# include "arch/epstruct.h"
#endif
#define IPH_V(hdr) (ntohs((hdr)->_v_hl_tos) >> 12)
#define IPH_HL(hdr) ((ntohs((hdr)->_v_hl_tos) >> 8) & 0x0f)
#define IPH_TOS(hdr) (ntohs((hdr)->_v_hl_tos) & 0xff)
#define IPH_LEN(hdr) ((hdr)->_len)
#define IPH_ID(hdr) ((hdr)->_id)
#define IPH_OFFSET(hdr) ((hdr)->_offset)
#define IPH_TTL(hdr) (ntohs((hdr)->_ttl_proto) >> 8)
#define IPH_PROTO(hdr) (ntohs((hdr)->_ttl_proto) & 0xff)
#define IPH_CHKSUM(hdr) ((hdr)->_chksum)
#define IPH_VHLTOS_SET(hdr, v, hl, tos) (hdr)->_v_hl_tos = (htons(((v) << 12) | ((hl) << 8) | (tos)))
#define IPH_LEN_SET(hdr, len) (hdr)->_len = (len)
#define IPH_ID_SET(hdr, id) (hdr)->_id = (id)
#define IPH_OFFSET_SET(hdr, off) (hdr)->_offset = (off)
#define IPH_TTL_SET(hdr, ttl) (hdr)->_ttl_proto = (htons(IPH_PROTO(hdr) | ((ttl) << 8)))
#define IPH_PROTO_SET(hdr, proto) (hdr)->_ttl_proto = (htons((proto) | (IPH_TTL(hdr) << 8)))
#define IPH_CHKSUM_SET(hdr, chksum) (hdr)->_chksum = (chksum)
#if IP_DEBUG
void ip_debug_print(struct pbuf *p);
#else
#define ip_debug_print(p)
#endif /* IP_DEBUG */
#endif /* __LWIP_IP_H__ */

View File

@ -0,0 +1,162 @@
/*
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
*
* This file is part of the lwIP TCP/IP stack.
*
* Author: Adam Dunkels <adam@sics.se>
*
*/
#ifndef __LWIP_IP_ADDR_H__
#define __LWIP_IP_ADDR_H__
#include "lwip/arch.h"
#ifdef PACK_STRUCT_USE_INCLUDES
# include "arch/bpstruct.h"
#endif
PACK_STRUCT_BEGIN
struct ip_addr {
PACK_STRUCT_FIELD(u32_t addr);
} PACK_STRUCT_STRUCT;
PACK_STRUCT_END
#ifdef PACK_STRUCT_USE_INCLUDES
# include "arch/epstruct.h"
#endif
#ifdef PACK_STRUCT_USE_INCLUDES
# include "arch/bpstruct.h"
#endif
PACK_STRUCT_BEGIN
struct ip_addr2 {
PACK_STRUCT_FIELD(u16_t addrw[2]);
} PACK_STRUCT_STRUCT;
PACK_STRUCT_END
#ifdef PACK_STRUCT_USE_INCLUDES
# include "arch/epstruct.h"
#endif
/* For compatibility with BSD code */
#ifndef HAVE_IN_ADDR
#define HAVE_IN_ADDR
struct in_addr {
u32_t s_addr;
};
#endif
struct netif;
extern const struct ip_addr ip_addr_any;
extern const struct ip_addr ip_addr_broadcast;
/** IP_ADDR_ can be used as a fixed IP address
* for the wildcard and the broadcast address
*/
#define IP_ADDR_ANY ((struct ip_addr *)&ip_addr_any)
#define IP_ADDR_BROADCAST ((struct ip_addr *)&ip_addr_broadcast)
#define INADDR_NONE ((u32_t) 0xffffffff) /* 255.255.255.255 */
#define INADDR_LOOPBACK ((u32_t) 0x7f000001) /* 127.0.0.1 */
/* Definitions of the bits in an Internet address integer.
On subnets, host and network parts are found according to
the subnet mask, not these masks. */
#define IN_CLASSA(a) ((((u32_t)(a)) & 0x80000000) == 0)
#define IN_CLASSA_NET 0xff000000
#define IN_CLASSA_NSHIFT 24
#define IN_CLASSA_HOST (0xffffffff & ~IN_CLASSA_NET)
#define IN_CLASSA_MAX 128
#define IN_CLASSB(a) ((((u32_t)(a)) & 0xc0000000) == 0x80000000)
#define IN_CLASSB_NET 0xffff0000
#define IN_CLASSB_NSHIFT 16
#define IN_CLASSB_HOST (0xffffffff & ~IN_CLASSB_NET)
#define IN_CLASSB_MAX 65536
#define IN_CLASSC(a) ((((u32_t)(a)) & 0xe0000000) == 0xc0000000)
#define IN_CLASSC_NET 0xffffff00
#define IN_CLASSC_NSHIFT 8
#define IN_CLASSC_HOST (0xffffffff & ~IN_CLASSC_NET)
#define IN_CLASSD(a) (((u32_t)(a) & 0xf0000000) == 0xe0000000)
#define IN_CLASSD_NET 0xf0000000 /* These ones aren't really */
#define IN_CLASSD_NSHIFT 28 /* net and host fields, but */
#define IN_CLASSD_HOST 0x0fffffff /* routing needn't know. */
#define IN_MULTICAST(a) IN_CLASSD(a)
#define IN_EXPERIMENTAL(a) (((u32_t)(a) & 0xf0000000) == 0xf0000000)
#define IN_BADCLASS(a) (((u32_t)(a) & 0xf0000000) == 0xf0000000)
#define IN_LOOPBACKNET 127 /* official! */
#define IP4_ADDR(ipaddr, a,b,c,d) (ipaddr)->addr = htonl(((u32_t)(a & 0xff) << 24) | ((u32_t)(b & 0xff) << 16) | \
((u32_t)(c & 0xff) << 8) | (u32_t)(d & 0xff))
#define ip_addr_set(dest, src) (dest)->addr = \
((src) == NULL? 0:\
(src)->addr)
/**
* Determine if two address are on the same network.
*
* @arg addr1 IP address 1
* @arg addr2 IP address 2
* @arg mask network identifier mask
* @return !0 if the network identifiers of both address match
*/
#define ip_addr_netcmp(addr1, addr2, mask) (((addr1)->addr & \
(mask)->addr) == \
((addr2)->addr & \
(mask)->addr))
#define ip_addr_cmp(addr1, addr2) ((addr1)->addr == (addr2)->addr)
#define ip_addr_isany(addr1) ((addr1) == NULL || (addr1)->addr == 0)
u8_t ip_addr_isbroadcast(struct ip_addr *, struct netif *);
#define ip_addr_ismulticast(addr1) (((addr1)->addr & ntohl(0xf0000000)) == ntohl(0xe0000000))
#define ip_addr_debug_print(debug, ipaddr) LWIP_DEBUGF(debug, ("%"U16_F".%"U16_F".%"U16_F".%"U16_F, \
ipaddr?(u16_t)(ntohl((ipaddr)->addr) >> 24) & 0xff:0, \
ipaddr?(u16_t)(ntohl((ipaddr)->addr) >> 16) & 0xff:0, \
ipaddr?(u16_t)(ntohl((ipaddr)->addr) >> 8) & 0xff:0, \
ipaddr?(u16_t)ntohl((ipaddr)->addr) & 0xff:0U))
/* cast to unsigned int, as it is used as argument to printf functions
* which expect integer arguments. CSi: use cc.h formatters (conversion chars)! */
#define ip4_addr1(ipaddr) ((u16_t)(ntohl((ipaddr)->addr) >> 24) & 0xff)
#define ip4_addr2(ipaddr) ((u16_t)(ntohl((ipaddr)->addr) >> 16) & 0xff)
#define ip4_addr3(ipaddr) ((u16_t)(ntohl((ipaddr)->addr) >> 8) & 0xff)
#define ip4_addr4(ipaddr) ((u16_t)(ntohl((ipaddr)->addr)) & 0xff)
#endif /* __LWIP_IP_ADDR_H__ */

View File

@ -0,0 +1,47 @@
/*
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
*
* This file is part of the lwIP TCP/IP stack.
*
* Author: Jani Monoses <jani@iv.ro>
*
*/
#ifndef __LWIP_IP_FRAG_H__
#define __LWIP_IP_FRAG_H__
#include "lwip/err.h"
#include "lwip/pbuf.h"
#include "lwip/netif.h"
#include "lwip/ip_addr.h"
void ip_reass_tmr(void);
struct pbuf * ip_reass(struct pbuf *p);
err_t ip_frag(struct pbuf *p, struct netif *netif, struct ip_addr *dest);
#endif /* __LWIP_IP_FRAG_H__ */

View File

@ -0,0 +1,27 @@
/****************************************************************************
* ISO9660 devoptab
*
* Copyright (C) 2008-2010
* tipoloski, clava, shagkur, Tantric, joedj
****************************************************************************/
#ifndef __ISO9660_H__
#define __ISO9660_H__
#include <gctypes.h>
#define ISO_MAXPATHLEN 128
#ifdef __cplusplus
extern "C" {
#endif
bool ISO9660_Mount(const char* name, const DISC_INTERFACE* disc_interface);
bool ISO9660_Unmount(const char* name);
const char *ISO9660_GetVolumeLabel(const char *name);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -0,0 +1,10 @@
#ifndef __LIBFATVERSION_H__
#define __LIBFATVERSION_H__
#define _LIBFAT_MAJOR_ 1
#define _LIBFAT_MINOR_ 1
#define _LIBFAT_PATCH_ 1
#define _LIBFAT_STRING "libFAT Release 1.1.1"
#endif // __LIBFATVERSION_H__

View File

@ -0,0 +1,101 @@
/*
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
*
* This file is part of the lwIP TCP/IP stack.
*
* Author: Adam Dunkels <adam@sics.se>
*
*/
#ifndef __LWIP_API_H__
#define __LWIP_API_H__
#include "lwip/opt.h"
#include "lwip/pbuf.h"
#include "lwip/sys.h"
#include "lwip/ip.h"
#include "lwip/raw.h"
#include "lwip/udp.h"
#include "lwip/tcp.h"
#include "lwip/err.h"
#define NETCONN_NOCOPY 0x00
#define NETCONN_COPY 0x01
enum netconn_type {
NETCONN_TCP,
NETCONN_UDP,
NETCONN_UDPLITE,
NETCONN_UDPNOCHKSUM,
NETCONN_RAW
};
enum netconn_state {
NETCONN_NONE,
NETCONN_WRITE,
NETCONN_ACCEPT,
NETCONN_RECV,
NETCONN_CONNECT,
NETCONN_CLOSE
};
enum netconn_evt {
NETCONN_EVTRCVPLUS,
NETCONN_EVTRCVMINUS,
NETCONN_EVTSENDPLUS,
NETCONN_EVTSENDMINUS
};
struct netbuf {
struct pbuf *p, *ptr;
struct ip_addr *fromaddr;
u16_t fromport;
err_t err;
};
struct netconn {
enum netconn_type type;
enum netconn_state state;
union {
struct tcp_pcb *tcp;
struct udp_pcb *udp;
struct raw_pcb *raw;
} pcb;
err_t err;
sys_sem sem;
sys_mbox mbox;
sys_mbox recvmbox;
sys_mbox acceptmbox;
u16 recvavail;
s32 socket;
void (*callback)(struct netconn *,enum netconn_evt,u32);
};
#endif /* __LWIP_API_H__ */

View File

@ -0,0 +1,86 @@
/*
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
*
* This file is part of the lwIP TCP/IP stack.
*
* Author: Adam Dunkels <adam@sics.se>
*
*/
#ifndef __LWIP_API_MSG_H__
#define __LWIP_API_MSG_H__
#include "lwip/opt.h"
#include "lwip/pbuf.h"
#include "lwip/sys.h"
#include "lwip/ip.h"
#include "lwip/udp.h"
#include "lwip/tcp.h"
#include "lwip/api.h"
enum apimsg_type {
APIMSG_NEWCONN,
APIMSG_DELCONN,
APIMSG_BIND,
APIMSG_CONNECT,
APIMSG_DISCONNECT,
APIMSG_LISTEN,
APIMSG_ACCEPT,
APIMSG_SEND,
APIMSG_RECV,
APIMSG_WRITE,
APIMSG_CLOSE,
APIMSG_MAX
};
struct apimsg_msg {
struct netconn *conn;
enum netconn_type type;
union {
struct pbuf *p;
struct {
struct ip_addr *ipaddr;
u16 port;
} bc;
struct {
void *dataptr;
u32 len;
u8 copy;
} w;
sys_mbox mbox;
u16 len;
} msg;
};
struct api_msg {
enum apimsg_type type;
struct apimsg_msg msg;
};
#endif /* __LWIP_API_MSG_H__ */

View File

@ -0,0 +1,216 @@
/*
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
*
* This file is part of the lwIP TCP/IP stack.
*
* Author: Adam Dunkels <adam@sics.se>
*
*/
#ifndef __LWIP_ARCH_H__
#define __LWIP_ARCH_H__
#ifndef LITTLE_ENDIAN
#define LITTLE_ENDIAN 1234
#endif
#ifndef BIG_ENDIAN
#define BIG_ENDIAN 4321
#endif
#include "arch/cc.h"
#ifndef PACK_STRUCT_BEGIN
#define PACK_STRUCT_BEGIN
#endif /* PACK_STRUCT_BEGIN */
#ifndef PACK_STRUCT_END
#define PACK_STRUCT_END
#endif /* PACK_STRUCT_END */
#ifndef PACK_STRUCT_FIELD
#define PACK_STRUCT_FIELD(x) x
#endif /* PACK_STRUCT_FIELD */
#ifdef LWIP_PROVIDE_ERRNO
#define EPERM 1 /* Operation not permitted */
#define ENOENT 2 /* No such file or directory */
#define ESRCH 3 /* No such process */
#define EINTR 4 /* Interrupted system call */
#define EIO 5 /* I/O error */
#define ENXIO 6 /* No such device or address */
#define E2BIG 7 /* Arg list too long */
#define ENOEXEC 8 /* Exec format error */
#define EBADF 9 /* Bad file number */
#define ECHILD 10 /* No child processes */
#define EAGAIN 11 /* Try again */
#define ENOMEM 12 /* Out of memory */
#define EACCES 13 /* Permission denied */
#define EFAULT 14 /* Bad address */
#define ENOTBLK 15 /* Block device required */
#define EBUSY 16 /* Device or resource busy */
#define EEXIST 17 /* File exists */
#define EXDEV 18 /* Cross-device link */
#define ENODEV 19 /* No such device */
#define ENOTDIR 20 /* Not a directory */
#define EISDIR 21 /* Is a directory */
#define EINVAL 22 /* Invalid argument */
#define ENFILE 23 /* File table overflow */
#define EMFILE 24 /* Too many open files */
#define ENOTTY 25 /* Not a typewriter */
#define ETXTBSY 26 /* Text file busy */
#define EFBIG 27 /* File too large */
#define ENOSPC 28 /* No space left on device */
#define ESPIPE 29 /* Illegal seek */
#define EROFS 30 /* Read-only file system */
#define EMLINK 31 /* Too many links */
#define EPIPE 32 /* Broken pipe */
#define EDOM 33 /* Math argument out of domain of func */
#define ERANGE 34 /* Math result not representable */
#define EDEADLK 35 /* Resource deadlock would occur */
#define ENAMETOOLONG 36 /* File name too long */
#define ENOLCK 37 /* No record locks available */
#define ENOSYS 38 /* Function not implemented */
#define ENOTEMPTY 39 /* Directory not empty */
#define ELOOP 40 /* Too many symbolic links encountered */
#define EWOULDBLOCK EAGAIN /* Operation would block */
#define ENOMSG 42 /* No message of desired type */
#define EIDRM 43 /* Identifier removed */
#define ECHRNG 44 /* Channel number out of range */
#define EL2NSYNC 45 /* Level 2 not synchronized */
#define EL3HLT 46 /* Level 3 halted */
#define EL3RST 47 /* Level 3 reset */
#define ELNRNG 48 /* Link number out of range */
#define EUNATCH 49 /* Protocol driver not attached */
#define ENOCSI 50 /* No CSI structure available */
#define EL2HLT 51 /* Level 2 halted */
#define EBADE 52 /* Invalid exchange */
#define EBADR 53 /* Invalid request descriptor */
#define EXFULL 54 /* Exchange full */
#define ENOANO 55 /* No anode */
#define EBADRQC 56 /* Invalid request code */
#define EBADSLT 57 /* Invalid slot */
#define EDEADLOCK EDEADLK
#define EBFONT 59 /* Bad font file format */
#define ENOSTR 60 /* Device not a stream */
#define ENODATA 61 /* No data available */
#define ETIME 62 /* Timer expired */
#define ENOSR 63 /* Out of streams resources */
#define ENONET 64 /* Machine is not on the network */
#define ENOPKG 65 /* Package not installed */
#define EREMOTE 66 /* Object is remote */
#define ENOLINK 67 /* Link has been severed */
#define EADV 68 /* Advertise error */
#define ESRMNT 69 /* Srmount error */
#define ECOMM 70 /* Communication error on send */
#define EPROTO 71 /* Protocol error */
#define EMULTIHOP 72 /* Multihop attempted */
#define EDOTDOT 73 /* RFS specific error */
#define EBADMSG 74 /* Not a data message */
#define EOVERFLOW 75 /* Value too large for defined data type */
#define ENOTUNIQ 76 /* Name not unique on network */
#define EBADFD 77 /* File descriptor in bad state */
#define EREMCHG 78 /* Remote address changed */
#define ELIBACC 79 /* Can not access a needed shared library */
#define ELIBBAD 80 /* Accessing a corrupted shared library */
#define ELIBSCN 81 /* .lib section in a.out corrupted */
#define ELIBMAX 82 /* Attempting to link in too many shared libraries */
#define ELIBEXEC 83 /* Cannot exec a shared library directly */
#define EILSEQ 84 /* Illegal byte sequence */
#define ERESTART 85 /* Interrupted system call should be restarted */
#define ESTRPIPE 86 /* Streams pipe error */
#define EUSERS 87 /* Too many users */
#define ENOTSOCK 88 /* Socket operation on non-socket */
#define EDESTADDRREQ 89 /* Destination address required */
#define EMSGSIZE 90 /* Message too long */
#define EPROTOTYPE 91 /* Protocol wrong type for socket */
#define ENOPROTOOPT 92 /* Protocol not available */
#define EPROTONOSUPPORT 93 /* Protocol not supported */
#define ESOCKTNOSUPPORT 94 /* Socket type not supported */
#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */
#define EPFNOSUPPORT 96 /* Protocol family not supported */
#define EAFNOSUPPORT 97 /* Address family not supported by protocol */
#define EADDRINUSE 98 /* Address already in use */
#define EADDRNOTAVAIL 99 /* Cannot assign requested address */
#define ENETDOWN 100 /* Network is down */
#define ENETUNREACH 101 /* Network is unreachable */
#define ENETRESET 102 /* Network dropped connection because of reset */
#define ECONNABORTED 103 /* Software caused connection abort */
#define ECONNRESET 104 /* Connection reset by peer */
#define ENOBUFS 105 /* No buffer space available */
#define EISCONN 106 /* Transport endpoint is already connected */
#define ENOTCONN 107 /* Transport endpoint is not connected */
#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */
#define ETOOMANYREFS 109 /* Too many references: cannot splice */
#define ETIMEDOUT 110 /* Connection timed out */
#define ECONNREFUSED 111 /* Connection refused */
#define EHOSTDOWN 112 /* Host is down */
#define EHOSTUNREACH 113 /* No route to host */
#define EALREADY 114 /* Operation already in progress */
#define EINPROGRESS 115 /* Operation now in progress */
#define ESTALE 116 /* Stale NFS file handle */
#define EUCLEAN 117 /* Structure needs cleaning */
#define ENOTNAM 118 /* Not a XENIX named type file */
#define ENAVAIL 119 /* No XENIX semaphores available */
#define EISNAM 120 /* Is a named type file */
#define EREMOTEIO 121 /* Remote I/O error */
#define EDQUOT 122 /* Quota exceeded */
#define ENOMEDIUM 123 /* No medium found */
#define EMEDIUMTYPE 124 /* Wrong medium type */
#define ENSROK 0 /* DNS server returned answer with no data */
#define ENSRNODATA 160 /* DNS server returned answer with no data */
#define ENSRFORMERR 161 /* DNS server claims query was misformatted */
#define ENSRSERVFAIL 162 /* DNS server returned general failure */
#define ENSRNOTFOUND 163 /* Domain name not found */
#define ENSRNOTIMP 164 /* DNS server does not implement requested operation */
#define ENSRREFUSED 165 /* DNS server refused query */
#define ENSRBADQUERY 166 /* Misformatted DNS query */
#define ENSRBADNAME 167 /* Misformatted domain name */
#define ENSRBADFAMILY 168 /* Unsupported address family */
#define ENSRBADRESP 169 /* Misformatted DNS reply */
#define ENSRCONNREFUSED 170 /* Could not contact DNS servers */
#define ENSRTIMEOUT 171 /* Timeout while contacting DNS servers */
#define ENSROF 172 /* End of file */
#define ENSRFILE 173 /* Error reading file */
#define ENSRNOMEM 174 /* Out of memory */
#define ENSRDESTRUCTION 175 /* Application terminated lookup */
#define ENSRQUERYDOMAINTOOLONG 176 /* Domain name is too long */
#define ENSRCNAMELOOP 177 /* Domain name is too long */
#ifndef errno
extern int errno;
#endif
#endif /* LWIP_PROVIDE_ERRNO */
#endif /* __LWIP_ARCH_H__ */

View File

@ -0,0 +1,90 @@
/*
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
*
* This file is part of the lwIP TCP/IP stack.
*
* Author: Adam Dunkels <adam@sics.se>
*
*/
#ifndef __LWIP_DEBUG_H__
#define __LWIP_DEBUG_H__
#include "arch/cc.h"
/** lower two bits indicate debug level
* - 0 off
* - 1 warning
* - 2 serious
* - 3 severe
*/
#define DBG_LEVEL_OFF 0
#define DBG_LEVEL_WARNING 1 /* bad checksums, dropped packets, ... */
#define DBG_LEVEL_SERIOUS 2 /* memory allocation failures, ... */
#define DBG_LEVEL_SEVERE 3 /* */
#define DBG_MASK_LEVEL 3
/** flag for LWIP_DEBUGF to enable that debug message */
#define DBG_ON 0x80U
/** flag for LWIP_DEBUGF to disable that debug message */
#define DBG_OFF 0x00U
/** flag for LWIP_DEBUGF indicating a tracing message (to follow program flow) */
#define DBG_TRACE 0x40U
/** flag for LWIP_DEBUGF indicating a state debug message (to follow module states) */
#define DBG_STATE 0x20U
/** flag for LWIP_DEBUGF indicating newly added code, not thoroughly tested yet */
#define DBG_FRESH 0x10U
/** flag for LWIP_DEBUGF to halt after printing this debug message */
#define DBG_HALT 0x08U
#ifdef LWIP_DEBUG
# ifndef LWIP_NOASSERT
# define LWIP_ASSERT(x,y) do { if(!(y)) LWIP_PLATFORM_ASSERT(x); } while(0)
# else
# define LWIP_ASSERT(x,y)
# endif
#endif
#ifdef LWIP_DEBUG
/** print debug message only if debug message type is enabled...
* AND is of correct type AND is at least DBG_LEVEL
*/
# define LWIP_DEBUGF(debug,x) do { if (((debug) & DBG_ON) && ((debug) & DBG_TYPES_ON) && ((int)((debug) & DBG_MASK_LEVEL) >= DBG_MIN_LEVEL)) { LWIP_PLATFORM_DIAG(x); if ((debug) & DBG_HALT) while(1); } } while(0)
# define LWIP_ERROR(x) do { LWIP_PLATFORM_DIAG(x); } while(0)
#else /* LWIP_DEBUG */
# define LWIP_ASSERT(x,y)
# define LWIP_DEBUGF(debug,x)
# define LWIP_ERROR(x)
#endif /* LWIP_DEBUG */
#endif /* __LWIP_DEBUG_H__ */

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