From f07c13c02a77f15b28b02db355bc7372137fb2e4 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Wed, 26 Jun 2024 07:18:15 +1000 Subject: [PATCH] PSP: add icon Also better support older unix systems --- .gitignore | 5 ++-- misc/linux/min-XF86keysym.h | 49 ++++++++++++++++++++++++++++++++++++ misc/psp/ICON0.png | Bin 0 -> 6349 bytes misc/psp/Makefile | 9 ++++++- src/Platform_Posix.c | 29 +++++++++++++++++++++ src/Window_X11.c | 2 +- src/freetype/ftconfig.h | 4 +-- 7 files changed, 92 insertions(+), 6 deletions(-) create mode 100644 misc/linux/min-XF86keysym.h create mode 100644 misc/psp/ICON0.png diff --git a/.gitignore b/.gitignore index 5020d2448..00b4bcd5e 100644 --- a/.gitignore +++ b/.gitignore @@ -53,9 +53,10 @@ build-ps2/ build-ps3/ build-psp/ build-vita/ -eboot.pbp -eboot.bin +EBOOT.PBP +PARAM.SFO param.sfo +eboot.bin # Build results [Dd]ebug/ diff --git a/misc/linux/min-XF86keysym.h b/misc/linux/min-XF86keysym.h new file mode 100644 index 000000000..a2d60e739 --- /dev/null +++ b/misc/linux/min-XF86keysym.h @@ -0,0 +1,49 @@ +/* + * XFree86 vendor specific keysyms. + * + * The XFree86 keysym range is 0x10080001 - 0x1008FFFF. + * + * The XF86 set of keysyms is a catch-all set of defines for keysyms found + * on various multimedia keyboards. Originally specific to XFree86 they have + * been been adopted over time and are considered a "standard" part of X + * keysym definitions. + * XFree86 never properly commented these keysyms, so we have done our + * best to explain the semantic meaning of these keys. + * + * XFree86 has removed their mail archives of the period, that might have + * shed more light on some of these definitions. Until/unless we resurrect + * these archives, these are from memory and usage. + */ + +/* + * Keys found on some "Internet" keyboards. + */ +#define XF86XK_Standby 0x1008FF10 /* System into standby mode */ +#define XF86XK_AudioLowerVolume 0x1008FF11 /* Volume control down */ +#define XF86XK_AudioMute 0x1008FF12 /* Mute sound from the system */ +#define XF86XK_AudioRaiseVolume 0x1008FF13 /* Volume control up */ +#define XF86XK_AudioPlay 0x1008FF14 /* Start playing of audio > */ +#define XF86XK_AudioStop 0x1008FF15 /* Stop playing audio */ +#define XF86XK_AudioPrev 0x1008FF16 /* Previous track */ +#define XF86XK_AudioNext 0x1008FF17 /* Next track */ +#define XF86XK_HomePage 0x1008FF18 /* Display user's home page */ +#define XF86XK_Mail 0x1008FF19 /* Invoke user's mail program */ +#define XF86XK_Start 0x1008FF1A /* Start application */ +#define XF86XK_Search 0x1008FF1B /* Search */ + +/* These are sometimes found on PDA's (e.g. Palm, PocketPC or elsewhere) */ +#define XF86XK_Calculator 0x1008FF1D /* Invoke calculator program */ + +/* Some more "Internet" keyboard symbols */ +#define XF86XK_Back 0x1008FF26 /* Like back on a browser */ +#define XF86XK_Forward 0x1008FF27 /* Like forward on a browser */ +#define XF86XK_Stop 0x1008FF28 /* Stop current operation */ +#define XF86XK_Refresh 0x1008FF29 /* Refresh the page */ +#define XF86XK_PowerOff 0x1008FF2A /* Power off system entirely */ +#define XF86XK_WakeUp 0x1008FF2B /* Wake up system from sleep */ + +#define XF86XK_Sleep 0x1008FF2F /* Put system to sleep */ +#define XF86XK_Favorites 0x1008FF30 /* Show favorite locations */ +#define XF86XK_AudioPause 0x1008FF31 /* Pause audio playing */ +#define XF86XK_AudioMedia 0x1008FF32 /* Launch media collection app */ +#define XF86XK_MyComputer 0x1008FF33 /* Display "My Computer" window */ diff --git a/misc/psp/ICON0.png b/misc/psp/ICON0.png new file mode 100644 index 0000000000000000000000000000000000000000..fe9cb22e9560853ba0b0f64b63380ef1e872d312 GIT binary patch literal 6349 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 literal 0 HcmV?d00001 diff --git a/misc/psp/Makefile b/misc/psp/Makefile index 45dde8440..61f8e53b9 100644 --- a/misc/psp/Makefile +++ b/misc/psp/Makefile @@ -14,6 +14,13 @@ BUILD_PRX = 1 EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = ClassiCube +PSP_EBOOT_ICON = misc/psp/ICON0.png + +ifeq ($(strip $(PSPSDK)),) +$(warning "Please set PSPSDK variables in your environment. For example:") +$(warning export PSPSDK=/usr/local/pspsk/psp/sdk) +$(warning export PATH=/usr/local/pspsk/bin:$$PATH) +$(error Failed to find PSPSDK installation) +endif -PSPSDK=$(shell psp-config --pspsdk-path) include $(PSPSDK)/lib/build.mak diff --git a/src/Platform_Posix.c b/src/Platform_Posix.c index edc5b3662..57283aaf7 100644 --- a/src/Platform_Posix.c +++ b/src/Platform_Posix.c @@ -35,6 +35,7 @@ const cc_result ReturnCode_FileNotFound = ENOENT; const cc_result ReturnCode_SocketInProgess = EINPROGRESS; const cc_result ReturnCode_SocketWouldBlock = EWOULDBLOCK; const cc_result ReturnCode_DirectoryExists = EEXIST; +#define SUPPORTS_GETADDRINFO 1 #if defined CC_BUILD_ANDROID const char* Platform_AppNameSuffix = " android alpha"; @@ -576,6 +577,7 @@ union SocketAddress { /* Sanity check to ensure cc_sockaddr struct is large enough to contain all socket addresses supported by this platform */ static char sockaddr_size_check[sizeof(union SocketAddress) < CC_SOCKETADDR_MAXSIZE ? 1 : -1]; +#if SUPPORTS_GETADDRINFO static cc_result ParseHost(const char* host, int port, cc_sockaddr* addrs, int* numValidAddrs) { char portRaw[32]; cc_string portStr; struct addrinfo hints = { 0 }; @@ -611,6 +613,33 @@ static cc_result ParseHost(const char* host, int port, cc_sockaddr* addrs, int* *numValidAddrs = i; return i == 0 ? ERR_INVALID_ARGUMENT : 0; } +#else +static cc_result ParseHost(const char* host, int port, cc_sockaddr* addrs, int* numValidAddrs) { + struct hostent* res = gethostbyname(host); + struct sockaddr_in* addr4; + char* src_addr; + int i; + + // Must have at least one IPv4 address + if (res->h_addrtype != AF_INET) return ERR_INVALID_ARGUMENT; + if (!res->h_addr_list) return ERR_INVALID_ARGUMENT; + + for (i = 0; i < SOCKET_MAX_ADDRS; i++) + { + src_addr = res->h_addr_list[i]; + if (!src_addr) break; + addrs[i].size = sizeof(struct sockaddr_in); + + addr4 = (struct sockaddr_in*)addrs[i].data; + addr4->sin_family = AF_INET; + addr4->sin_port = htons(port); + addr4->sin_addr = *(struct in_addr*)src_addr; + } + + *numValidAddrs = i; + return i == 0 ? ERR_INVALID_ARGUMENT : 0; +} +#endif cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* addrs, int* numValidAddrs) { union SocketAddress* addr = (union SocketAddress*)addrs[0].data; diff --git a/src/Window_X11.c b/src/Window_X11.c index 5fd367eec..8efb60e7d 100644 --- a/src/Window_X11.c +++ b/src/Window_X11.c @@ -21,7 +21,7 @@ #include "../misc/linux/min-xutil.h" #include "../misc/linux/min-xkblib.h" #include "../misc/linux/min-xinput2.h" -#include +#include "../misc/linux/min-XF86keysym.h" #include #ifdef X_HAVE_UTF8_STRING diff --git a/src/freetype/ftconfig.h b/src/freetype/ftconfig.h index 66f9a6f74..715d58f2b 100644 --- a/src/freetype/ftconfig.h +++ b/src/freetype/ftconfig.h @@ -45,8 +45,8 @@ FT_BEGIN_HEADER -/* ClassiCube patch - don't export FreeType symbols to avoid conflicting with system */ -#if defined(__GNUC__) && !defined(_WIN32) +/* ClassiCube patch - don't export FreeType symbols in debug builds to avoid conflicting with system */ +#if defined(__GNUC__) && !defined(_WIN32) && !defined(__sun__) #define FT_EXPORT( x ) __attribute__((visibility("hidden"))) extern x #define FT_BASE( x ) __attribute__((visibility("hidden"))) extern x #elif defined(__cplusplus)