Browse Source

riscos: Implement SDL_OpenURL()

Cameron Cawley 4 years ago
parent
commit
59022829f4
4 changed files with 59 additions and 0 deletions
  1. 4 0
      CMakeLists.txt
  2. 3 0
      configure
  3. 3 0
      configure.ac
  4. 49 0
      src/misc/riscos/SDL_sysurl.c

+ 4 - 0
CMakeLists.txt

@@ -1918,6 +1918,10 @@ elseif(HAIKU)
   CheckPTHREAD()
 
 elseif(RISCOS)
+  file(GLOB MISC_SOURCES ${SDL2_SOURCE_DIR}/src/misc/riscos/*.c)
+  set(SOURCE_FILES ${SOURCE_FILES} ${MISC_SOURCES})
+  set(HAVE_SDL_MISC TRUE)
+
   if(SDL_TIMERS)
     set(SDL_TIMER_UNIX 1)
     file(GLOB TIMER_SOURCES ${SDL2_SOURCE_DIR}/src/timer/unix/*.c)

+ 3 - 0
configure

@@ -25486,6 +25486,9 @@ $as_echo "#define SDL_TIMER_UNIX 1" >>confdefs.h
         CheckPTHREAD
         CheckClockGettime
 
+        SOURCES="$SOURCES $srcdir/src/misc/riscos/*.c"
+        have_misc=yes
+
         # Set up files for the timer library
         if test x$enable_timers = xyes; then
 

+ 3 - 0
configure.ac

@@ -4154,6 +4154,9 @@ AS_HELP_STRING([--enable-render-d3d], [enable the Direct3D render driver [[defau
         CheckPTHREAD
         CheckClockGettime
 
+        SOURCES="$SOURCES $srcdir/src/misc/riscos/*.c"
+        have_misc=yes
+
         # Set up files for the timer library
         if test x$enable_timers = xyes; then
             AC_DEFINE(SDL_TIMER_UNIX, 1, [ ])

+ 49 - 0
src/misc/riscos/SDL_sysurl.c

@@ -0,0 +1,49 @@
+/*
+  Simple DirectMedia Layer
+  Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
+
+  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.
+*/
+
+#include "../SDL_sysurl.h"
+
+#include <kernel.h>
+#include <swis.h>
+
+#ifndef URI_Dispatch
+#define URI_Dispatch 0x4e381
+#endif
+
+int
+SDL_SYS_OpenURL(const char *url)
+{
+    _kernel_swi_regs regs;
+    _kernel_oserror *error;
+
+    regs.r[0] = 0;
+    regs.r[1] = (int)url;
+    regs.r[2] = 0;
+    error = _kernel_swi(URI_Dispatch, &regs, &regs);
+    if (error) {
+        return SDL_SetError("Couldn't open given URL: %s", error->errmess);
+    }
+
+    return (regs.r[0] & 1) ? SDL_SetError("Couldn't open given URL.") : 0;
+}
+
+/* vi: set ts=4 sw=4 expandtab: */
+