]> git.jsancho.org Git - guile-irrlicht.git/blobdiff - src/file-system.cpp
clean code
[guile-irrlicht.git] / src / file-system.cpp
index a421fd3adb7307f4a7c398e0e9e26bf0e48af2ca..204e25dabad0985bcd17662b552f3695eb5894f2 100644 (file)
 
 #include <irrlicht/irrlicht.h>
 #include <libguile.h>
-
-#include "device.h"
 #include "file-archive.h"
 #include "file-system.h"
 #include "gsubr.h"
-#include "gui-environment.h"
-#include "scene-manager.h"
-
-extern "C" {
-
-  void
-  init_file_system (void)
-  {
-    init_file_system_type ();
-    DEFINE_GSUBR ("add-file-archive!", 2, 0, 1, irr_io_addFileArchive);
-    DEFINE_GSUBR ("get-file-system", 1, 0, 0, irr_getFileSystem);
-  }
-
-  DEFINE_WRAPPED_TYPE (irr::io::IFileSystem*, "file-system",
-                       init_file_system_type, file_system_p,
-                       wrap_file_system, unwrap_file_system);
 
-  SCM
-  irr_io_addFileArchive (SCM wrapped_file_system,
-                         SCM filename,
-                         SCM rest)
-  {
-    SCM ignore_case = scm_from_bool (1);
-    SCM ignore_paths = scm_from_bool (1);
-    SCM archive_type = scm_from_utf8_symbol ("unknown");
-    SCM password = scm_from_utf8_string ("");
-    SCM ret_archive = scm_from_bool (0);
-
-    scm_c_bind_keyword_arguments ("add-file-archive!", rest, (scm_t_keyword_arguments_flags)0,
-                                  scm_from_utf8_keyword ("ignore-case"), &ignore_case,
-                                  scm_from_utf8_keyword ("ignore-paths"), &ignore_paths,
-                                  scm_from_utf8_keyword ("archive-type"), &archive_type,
-                                  scm_from_utf8_keyword ("password"), &password,
-                                  scm_from_utf8_keyword ("ret-archive"), &ret_archive,
-                                  SCM_UNDEFINED);
-
-    irr::io::IFileArchive** retArchiveReference = 0;
-    if (!scm_is_false (ret_archive))
-      {
-        irr::io::IFileArchive* retArchive = unwrap_file_archive (ret_archive);
-        retArchiveReference = &retArchive;
-      }
-    irr::io::IFileSystem* file_system = unwrap_file_system (wrapped_file_system);
-    return scm_from_bool
-      (file_system->addFileArchive (scm_to_utf8_stringn (filename, NULL),
-                                    scm_to_bool (ignore_case),
-                                    scm_to_bool (ignore_paths),
-                                    scm_to_file_archive_type (archive_type),
-                                    scm_to_utf8_stringn (password, NULL),
-                                    retArchiveReference));
-  }
-
-  SCM
-  irr_getFileSystem (SCM wrapped_obj)
-  {
-    irr::io::IFileSystem* file_system;
-    if (gui_environment_p (wrapped_obj))
-      {
-        file_system = unwrap_gui_environment (wrapped_obj)->getFileSystem ();
-      }
-    else if (device_p (wrapped_obj))
-      {
-        file_system = unwrap_device (wrapped_obj)->getFileSystem ();
-      }
-    else if (scene_manager_p (wrapped_obj))
-      {
-        file_system = unwrap_scene_manager (wrapped_obj)->getFileSystem ();
-      }
-    else
-      {
-        scm_error (scm_arg_type_key, NULL, "Cannot get file system from object: ~S",
-                   scm_list_1 (wrapped_obj), scm_list_1 (wrapped_obj));
-      }
-    return wrap_file_system (file_system);
-  }
+using namespace irr;
+
+SCM
+IFileSystem_addFileArchive (SCM file_system,
+                            SCM filename,
+                            SCM ignore_case,
+                            SCM ignore_paths,
+                            SCM archive_type,
+                            SCM password,
+                            SCM ret_archive)
+{
+  io::IFileArchive* retArchive = (io::IFileArchive*)scm_to_pointer (ret_archive);
+  io::IFileArchive** retArchiveReference = 0;
+  if (retArchive != NULL)
+    {
+      retArchiveReference = &retArchive;
+    }
+
+  return scm_from_bool
+    (((io::IFileSystem*)scm_to_pointer (file_system))->
+     addFileArchive (scm_to_utf8_stringn (filename, NULL),
+                     scm_to_bool (ignore_case),
+                     scm_to_bool (ignore_paths),
+                     scm_to_file_archive_type (archive_type),
+                     scm_to_utf8_stringn (password, NULL),
+                     retArchiveReference));
+}
 
+void
+init_file_system (void)
+{
+  DEFINE_GSUBR ("IFileSystem_addFileArchive", 7, 0, 0, IFileSystem_addFileArchive);
 }