From 90f08d32e5ce7be8b5f3c272bcd9a2773cd134ae Mon Sep 17 00:00:00 2001 From: David Thompson Date: Wed, 2 Oct 2024 21:22:19 -0400 Subject: First commit! --- sdl3.scm | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 sdl3.scm (limited to 'sdl3.scm') 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 +;;; +;;; 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)) -- cgit v1.2.3