diff options
author | David Thompson <dthompson2@worcester.edu> | 2024-10-02 21:22:19 -0400 |
---|---|---|
committer | David Thompson <dthompson2@worcester.edu> | 2024-10-03 07:12:23 -0400 |
commit | 567863b2398b6832f686b258709396572af0e980 (patch) | |
tree | 9876b28945a793fc6fedbd7f9804a0d7e159a47c /sdl3/bindings/utils.scm |
First commit!main
Diffstat (limited to 'sdl3/bindings/utils.scm')
-rw-r--r-- | sdl3/bindings/utils.scm | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/sdl3/bindings/utils.scm b/sdl3/bindings/utils.scm new file mode 100644 index 0000000..738f2bc --- /dev/null +++ b/sdl3/bindings/utils.scm @@ -0,0 +1,60 @@ +;;; 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: +;; +;; Low-level FFI binding utilities. +;; +;;; Code: + +(define-module (sdl3 bindings utils) + #:use-module (sdl3 config) + #:use-module (sdl3 guardian) + #:use-module (srfi srfi-9) + #:use-module (srfi srfi-9 gnu) + #:use-module (system foreign) + #:use-module (system foreign-library) + #:export (bool + define-sdl + define-sdl-pointer-type)) + +;; Type aliases: +(define bool uint8) + +(define-syntax define-sdl + (lambda (stx) + (syntax-case stx (->) + ((_ name arg-type ... -> return-type) + #`(define name + (foreign-library-function %libsdl3 + #,(symbol->string (syntax->datum #'name)) + #:arg-types (list arg-type ...) + #:return-type return-type))) + ((_ name arg-type ...) + #'(define-sdl name arg-type ... -> void))))) + +(define-syntax-rule (define-sdl-pointer-type name + pred wrap unwrap + destroyed-pred set-destroyed + print) + (begin + (define-record-type name + (ctor ptr) + pred + (ptr unwrap) + (destroyed? destroyed-pred set-destroyed)) + (define (wrap ptr) + (sdl-protect (ctor ptr))) + (set-record-type-printer! name print))) |