]> git.jsancho.org Git - guile-irrlicht.git/blobdiff - irrlicht/io.scm
add-file-archive! get-file-system get-name
[guile-irrlicht.git] / irrlicht / io.scm
index 9aaf34cdd08043998555bb09d1eb86a23796efd0..1e94c5d23fd774668b28156d189051a186018d48 100644 (file)
@@ -1,5 +1,5 @@
 ;;; guile-irrlicht --- FFI bindings for Irrlicht Engine
-;;; Copyright (C) 2019 Javier Sancho <jsf@jsancho.org>
+;;; Copyright (C) 2020 Javier Sancho <jsf@jsancho.org>
 ;;;
 ;;; This file is part of guile-irrlicht.
 ;;;
 
 
 (define-module (irrlicht io)
-  #:use-module (ice-9 match)
-  #:use-module (system foreign)
-  #:use-module ((irrlicht bindings io) #:prefix ffi-io:)
-  #:use-module (irrlicht util)
-  #:export (add-file-archive!))
-
-(define* (add-file-archive! file-system filename
-                            #:key
-                            (ignore-case #t)
-                            (ignore-paths #t)
-                            (archive-type 'unknown)
-                            (password "")
-                            (ret-archive %null-pointer))
-  (let ((type (match archive-type
-                     ('zip ffi-io:EFAT_ZIP)
-                     ('gzip ffi-io:EFAT_GZIP)
-                     ('folder ffi-io:EFAT_FOLDER)
-                     ('pak ffi-io:EFAT_PAK)
-                     ('npk ffi-io:EFAT_NPK)
-                     ('tar ffi-io:EFAT_TAR)
-                     ('wad ffi-io:EFAT_WAD)
-                     ('unknown ffi-io:EFAT_UNKNOWN))))
-    (ffi-io:add-file-archive file-system
-                             (string->pointer filename)
-                             (bool->integer ignore-case)
-                             (bool->integer ignore-paths)
-                             type
-                             (string->pointer password)
-                             ret-archive)))
+  #:use-module (oop goops)
+  #:use-module (ice-9 optargs)
+  #:use-module (irrlicht foreign)
+  #:use-module (irrlicht irr))
+
+
+;; IAttributeExchangingObject
+(define-class <attribute-exchanging-object> (<reference-counted>)
+  (irr-class #:init-value "IAttributeExchangingObject" #:getter irr-class))
+
+(export <attribute-exchanging-object>)
+
+
+;;IFileArchive
+(define-class <file-archive> (<reference-counted>)
+  (irr-class #:init-value "IFileArchive" #:getter irr-class))
+
+(export <file-archive>)
+
+
+;;IFileSystem
+(define-class <file-system> (<reference-counted>)
+  (irr-class #:init-value "IFileSystem" #:getter irr-class))
+
+(define-method (add-file-archive! (file-system <file-system>) filename . rest)
+  (let-keywords rest #f
+        ((ignore-case #t)
+         (ignore-paths #t)
+         (archive-type 'unknown)
+         (password "")
+         (ret-archive (make <file-archive>)))
+    (let ((addFileArchive (get-irrlicht-proc "addFileArchive" file-system)))
+      (addFileArchive
+       file-system filename ignore-case ignore-paths archive-type password ret-archive))))
+
+(export <file-system> add-file-archive!)