;;; 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 #:optional (subsystems '(audio video joystick haptic gamepad events sensor camera))) "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))