summaryrefslogtreecommitdiff
path: root/sdl3.scm
diff options
context:
space:
mode:
Diffstat (limited to 'sdl3.scm')
-rw-r--r--sdl3.scm67
1 files changed, 67 insertions, 0 deletions
diff --git a/sdl3.scm b/sdl3.scm
new file mode 100644
index 0000000..1430116
--- /dev/null
+++ b/sdl3.scm
@@ -0,0 +1,67 @@
+;;; guile-sdl3 -- Scheme bindings for SDL3
+;;; Copyright © 2024 David Thompson <dthompson2@worcester.edu>
+;;;
+;;; Licensed under the Apache License, Version 2.0 (the "License");
+;;; you may not use this file except in compliance with the License.
+;;; You may obtain a copy of the License at
+;;;
+;;; http://www.apache.org/licenses/LICENSE-2.0
+;;;
+;;; Unless required by applicable law or agreed to in writing, software
+;;; distributed under the License is distributed on an "AS IS" BASIS,
+;;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+;;; See the License for the specific language governing permissions and
+;;; limitations under the License.
+
+;;; Commentary:
+;;
+;; SDL3 initialization and shutdown.
+;;
+;;; Code:
+
+(define-module (sdl3)
+ #:use-module (ice-9 match)
+ #:use-module (sdl3 bindings init)
+ #:use-module (sdl3 errors)
+ #:use-module (srfi srfi-1)
+ #:use-module (system foreign)
+ #:export (sdl-init
+ sdl-quit))
+
+(define (sdl-init subsystems)
+ "Initialize SDL @var{subsystems}, a list of symbols. By default, all
+subsystems are initialized.
+
+Valid subsystem names are:
+
+@itemize
+@item @code{audio}
+@item @code{video}
+@item @code{joystick}
+@item @code{haptic}
+@item @code{gamepad}
+@item @code{events}
+@item @code{sensor}
+@item @code{camera}
+@end itemize"
+ (sdl-assert 'sdl-init
+ (SDL_Init
+ (fold (lambda (name prev)
+ (logior (match name
+ ('audio SDL_INIT_AUDIO)
+ ('video SDL_INIT_VIDEO)
+ ('joystick SDL_INIT_JOYSTICK)
+ ('haptic SDL_INIT_HAPTIC)
+ ('gamepad SDL_INIT_GAMEPAD)
+ ('events SDL_INIT_EVENTS)
+ ('sensor SDL_INIT_SENSOR)
+ ('camera SDL_INIT_CAMERA)
+ (_ (raise (make-sdl-error 'sdl-init
+ #:message "invalid subsystem name"
+ #:irritants (list name)))))
+ prev))
+ 0 subsystems))))
+
+(define (sdl-quit)
+ "Clean up all initialized subsystems."
+ (SDL_Quit))