;;; 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:)
- #: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)
- (if ignore-case 1 0)
- (if ignore-paths 1 0)
- 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"))
+
+(export <attribute-exchanging-object>)
+
+
+;;IFileArchive
+(define-class <file-archive> (<reference-counted>)
+ (irr-class #:init-value "IFileArchive"))
+
+(export <file-archive>)
+
+
+;;IFileSystem
+(define-class <file-system> (<reference-counted>)
+ (irr-class #:init-value "IFileSystem"))
+
+(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!)