]> git.jsancho.org Git - guile-irrlicht.git/commitdiff
Macro for defining guile procedures
authorJavier Sancho <jsf@jsancho.org>
Thu, 9 Apr 2020 07:10:50 +0000 (09:10 +0200)
committerJavier Sancho <jsf@jsancho.org>
Thu, 9 Apr 2020 07:10:50 +0000 (09:10 +0200)
15 files changed:
src/animated-mesh-scene-node.cpp
src/box3d.cpp
src/cursor-control.cpp
src/device.cpp
src/event-receiver.cpp
src/file-system.cpp
src/gsubr.h [new file with mode: 0644]
src/gui-environment.cpp
src/guile-irrlicht.cpp
src/material.cpp
src/reference-counted.cpp
src/scene-manager.cpp
src/scene-node.cpp
src/vertex3d.cpp
src/video-driver.cpp

index dc46e8010a2483abcd6d32d0557bf15eeead2dbe..f19f0aa422acf608c654bd77505d1650796b4269 100644 (file)
@@ -24,6 +24,7 @@
 
 #include "animated-mesh-md2.h"
 #include "animated-mesh-scene-node.h"
+#include "gsubr.h"
 #include "wrapped.h"
 
 extern "C" {
@@ -32,8 +33,7 @@ extern "C" {
   init_animated_mesh_scene_node (void)
   {
     init_animated_mesh_scene_node_type ();
-    scm_c_define_gsubr ("set-md2-animation!", 2, 0, 0, (scm_t_subr)irr_scene_setMD2Animation);
-    scm_c_export ("set-md2-animation!", NULL);
+    DEFINE_GSUBR ("set-md2-animation!", 2, 0, 0, irr_scene_setMD2Animation);
   }
 
   DEFINE_WRAPPED_TYPE (irr::scene::IAnimatedMeshSceneNode*, "animated-mesh-scene-node",
index 7185c0b3c072c707e2caef882922a5177b4812c0..9b78836f1a25165fc2bf5d8b9c7ef71693217960 100644 (file)
@@ -22,6 +22,7 @@
 #include <irrlicht/irrlicht.h>
 #include <libguile.h>
 #include "box3d.h"
+#include "gsubr.h"
 #include "vector3d.h"
 #include "wrapped.h"
 
@@ -31,10 +32,9 @@ extern "C" {
   init_box3d (void)
   {
     init_box3d_type ();
-    scm_c_define_gsubr ("box3d-add-internal-point!", 2, 0, 0, (scm_t_subr)box3d_add_internal_point);
-    scm_c_define_gsubr ("box3d-reset!", 2, 0, 0, (scm_t_subr)box3d_reset);
-    scm_c_define_gsubr ("make-box3d", 0, 0, 0, (scm_t_subr)make_box3d);
-    scm_c_export ("box3d-add-internal-point!", "box3d-reset!", "make-box3d", NULL);
+    DEFINE_GSUBR ("box3d-add-internal-point!", 2, 0, 0, box3d_add_internal_point);
+    DEFINE_GSUBR ("box3d-reset!", 2, 0, 0, box3d_reset);
+    DEFINE_GSUBR ("make-box3d", 0, 0, 0, make_box3d);
   }
 
   DEFINE_WRAPPED_TYPE (irr::core::aabbox3df*, "box3d",
index ada992f7fbb0bb0319ec161a3bbb02414ef0f00f..5ff6540d7960e82df57fea5fa40b9049627fed7a 100644 (file)
@@ -24,6 +24,7 @@
 
 #include "cursor-control.h"
 #include "device.h"
+#include "gsubr.h"
 #include "position2d.h"
 #include "wrapped.h"
 
@@ -33,8 +34,7 @@ extern "C" {
   init_cursor_control (void)
   {
     init_cursor_control_type ();
-    scm_c_define_gsubr ("get-cursor-control", 1, 0, 0, (scm_t_subr)irr_getCursorControl);
-    scm_c_export ("get-cursor-control", NULL);
+    DEFINE_GSUBR ("get-cursor-control", 1, 0, 0, irr_getCursorControl);
   }
 
   DEFINE_WRAPPED_TYPE (irr::gui::ICursorControl*, "cursor-control",
index 0a4d2c686560e1814719291e6246701aec0fbd44..b60ec44e4681b3e4f0572833a402f904dc9fe62b 100644 (file)
@@ -26,6 +26,7 @@
 #include "dimension2d.h"
 #include "driver-types.h"
 #include "event-receiver.h"
+#include "gsubr.h"
 #include "wchar.h"
 #include "wrapped.h"
 
@@ -35,13 +36,11 @@ extern "C" {
   init_device (void)
   {
     init_device_type ();
-    scm_c_define_gsubr ("create-device", 0, 0, 1, (scm_t_subr)irr_createDevice);
-    scm_c_define_gsubr ("is-window-active?", 1, 0, 0, (scm_t_subr)irr_isWindowActive);
-    scm_c_define_gsubr ("run", 1, 0, 0, (scm_t_subr)irr_run);
-    scm_c_define_gsubr ("set-window-caption!", 2, 0, 0, (scm_t_subr)irr_setWindowCaption);
-    scm_c_define_gsubr ("yield", 1, 0, 0, (scm_t_subr)irr_yield);
-    scm_c_export ("create-device", "is-window-active?", "run",
-                  "set-window-caption!", "yield", NULL);
+    DEFINE_GSUBR ("create-device", 0, 0, 1, irr_createDevice);
+    DEFINE_GSUBR ("is-window-active?", 1, 0, 0, irr_isWindowActive);
+    DEFINE_GSUBR ("run", 1, 0, 0, irr_run);
+    DEFINE_GSUBR ("set-window-caption!", 2, 0, 0, irr_setWindowCaption);
+    DEFINE_GSUBR ("yield", 1, 0, 0, irr_yield);
   }
 
   DEFINE_WRAPPED_TYPE (irr::IrrlichtDevice*, "device",
index f5d673b8c2f19d7359dc63068bb00d600dceb6f1..64b38519f839b8e751c677c8472ce69442ca2b16 100644 (file)
@@ -22,6 +22,7 @@
 #include <irrlicht/irrlicht.h>
 #include <libguile.h>
 #include "event-receiver.h"
+#include "gsubr.h"
 #include "wrapped.h"
 
 extern "C" {
@@ -31,9 +32,8 @@ extern "C" {
   {
     init_event_receiver_type ();
     init_event_type ();
-    scm_c_define_gsubr ("event-type", 1, 0, 0, (scm_t_subr)event_type);
-    scm_c_define_gsubr ("make-event-receiver", 1, 0, 0, (scm_t_subr)make_event_receiver);
-    scm_c_export ("event-type", "make-event-receiver", NULL);
+    DEFINE_GSUBR ("event-type", 1, 0, 0, event_type);
+    DEFINE_GSUBR ("make-event-receiver", 1, 0, 0, make_event_receiver);
   }
 
   DEFINE_WRAPPED_TYPE (irr::IEventReceiver*, "event-receiver",
index da856f4626b5b87d93e796a6993c5aa4dad7baa8..a421fd3adb7307f4a7c398e0e9e26bf0e48af2ca 100644 (file)
@@ -25,6 +25,7 @@
 #include "device.h"
 #include "file-archive.h"
 #include "file-system.h"
+#include "gsubr.h"
 #include "gui-environment.h"
 #include "scene-manager.h"
 
@@ -34,9 +35,8 @@ extern "C" {
   init_file_system (void)
   {
     init_file_system_type ();
-    scm_c_define_gsubr ("add-file-archive!", 2, 0, 1, (scm_t_subr)irr_io_addFileArchive);
-    scm_c_define_gsubr ("get-file-system", 1, 0, 0, (scm_t_subr)irr_getFileSystem);
-    scm_c_export ("add-file-archive!", "get-file-system", NULL);
+    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",
diff --git a/src/gsubr.h b/src/gsubr.h
new file mode 100644 (file)
index 0000000..5db534d
--- /dev/null
@@ -0,0 +1,31 @@
+/* guile-irrlicht --- GNU Guile bindings for Irrlicht Engine
+
+   Copyright (C) 2020 Javier Sancho <jsf@jsancho.org>
+
+   This file is part of guile-irrlicht.
+
+   guile-irrlicht is free software; you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 3 of the
+   License, or (at your option) any later version.
+
+   guile-irrlicht is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with guile-irrlicht. If not, see
+   <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef __GUILE_IRRLICHT_GSUBR_H_INCLUDED__
+#define __GUILE_IRRLICHT_GSUBR_H_INCLUDED__
+
+#include <libguile.h>
+
+#define DEFINE_GSUBR(NAME, REQ, OPT, REST, FUNC)                \
+  scm_c_define_gsubr (NAME, REQ, OPT, REST, (scm_t_subr)FUNC);  \
+  scm_c_export (NAME, NULL);
+
+#endif
index fb13f53d363f901f1e7b2692523c3daf4e7a4d70..dfe3a0a2fe710ce414bf332fb9c2c7c3f0baecd3 100644 (file)
@@ -23,6 +23,7 @@
 #include <libguile.h>
 
 #include "device.h"
+#include "gsubr.h"
 #include "gui-element.h"
 #include "gui-environment.h"
 #include "gui-static-text.h"
@@ -36,9 +37,8 @@ extern "C" {
   init_gui_environment (void)
   {
     init_gui_environment_type ();
-    scm_c_define_gsubr ("add-static-text!", 3, 0, 1, (scm_t_subr)irr_gui_addStaticText);
-    scm_c_define_gsubr ("get-gui-environment", 1, 0, 0, (scm_t_subr)irr_getGUIEnvironment);
-    scm_c_export ("add-static-text!", "get-gui-environment", NULL);
+    DEFINE_GSUBR ("add-static-text!", 3, 0, 1, irr_gui_addStaticText);
+    DEFINE_GSUBR ("get-gui-environment", 1, 0, 0, irr_getGUIEnvironment);
   }
 
   DEFINE_WRAPPED_TYPE (irr::gui::IGUIEnvironment*, "gui-environment",
index a1e84116ed28d4b07e88e873ae740eaaf5e7384c..db77dab18be67cab0fde9a936f20c6738954e92d 100644 (file)
@@ -30,6 +30,7 @@
 #include "event-receiver.h"
 #include "file-archive.h"
 #include "file-system.h"
+#include "gsubr.h"
 #include "gui-element.h"
 #include "gui-environment.h"
 #include "gui-static-text.h"
@@ -78,14 +79,12 @@ extern "C" {
     init_video_driver ();
 
     // Shared procedures (used by two or more objects)
-    scm_c_define_gsubr ("draw-all", 1, 0, 0, (scm_t_subr)irr_drawAll);
-    scm_c_define_gsubr ("get-name", 1, 0, 0, (scm_t_subr)irr_getName);
-    scm_c_define_gsubr ("set-material!", 2, 0, 0, (scm_t_subr)irr_setMaterial);
-    scm_c_define_gsubr ("set-material-flag!", 3, 0, 0, (scm_t_subr)irr_setMaterialFlag);
-    scm_c_define_gsubr ("set-position!", 2, 0, 0, (scm_t_subr)irr_setPosition);
-    scm_c_define_gsubr ("set-visible!", 2, 0, 0, (scm_t_subr)irr_setVisible);
-    scm_c_export ("draw-all", "get-name", "set-material!", "set-material-flag!",
-                  "set-position!", "set-visible!", NULL);
+    DEFINE_GSUBR ("draw-all", 1, 0, 0, irr_drawAll);
+    DEFINE_GSUBR ("get-name", 1, 0, 0, irr_getName);
+    DEFINE_GSUBR ("set-material!", 2, 0, 0, irr_setMaterial);
+    DEFINE_GSUBR ("set-material-flag!", 3, 0, 0, irr_setMaterialFlag);
+    DEFINE_GSUBR ("set-position!", 2, 0, 0, irr_setPosition);
+    DEFINE_GSUBR ("set-visible!", 2, 0, 0, irr_setVisible);
   }
 
   SCM
index 3d32f2110489c9f4a692fd9601bb7ad9d9419965..1d4e92a0d962cb8e110bfdb836f4a6f80fa01482 100644 (file)
@@ -23,6 +23,7 @@
 #include <libguile.h>
 
 #include "color.h"
+#include "gsubr.h"
 #include "material.h"
 #include "material-types.h"
 #include "wrapped.h"
@@ -33,8 +34,7 @@ extern "C" {
   init_material (void)
   {
     init_material_type ();
-    scm_c_define_gsubr ("make-material", 0, 0, 1, (scm_t_subr)make_material);
-    scm_c_export ("make-material", NULL);
+    DEFINE_GSUBR ("make-material", 0, 0, 1, make_material);
   }
 
   DEFINE_WRAPPED_TYPE (irr::video::SMaterial*, "material",
index 9b858cc6e892e81494aa1ac6bfe386fb319cd934..1060df4b56c9d657216ace980e44190719c7df89 100644 (file)
@@ -23,6 +23,7 @@
 #include <libguile.h>
 
 #include "device.h"
+#include "gsubr.h"
 #include "reference-counted.h"
 #include "scene-node-animator.h"
 
@@ -31,8 +32,7 @@ extern "C" {
   void
   init_reference_counted (void)
   {
-    scm_c_define_gsubr ("drop!", 1, 0, 0, (scm_t_subr)irr_drop);
-    scm_c_export ("drop!", NULL);
+    DEFINE_GSUBR ("drop!", 1, 0, 0, irr_drop);
   }
 
   SCM
index 9ef592fcbfaa10972e78b68010cda494265d9632..0d4caebd51a024cea1c5c30c31c6b8a97d5c0621 100644 (file)
@@ -27,6 +27,7 @@
 #include "box3d.h"
 #include "camera-scene-node.h"
 #include "device.h"
+#include "gsubr.h"
 #include "keymap.h"
 #include "material.h"
 #include "mesh.h"
@@ -43,34 +44,19 @@ extern "C" {
   init_scene_manager (void)
   {
     init_scene_manager_type ();
-    scm_c_define_gsubr ("add-animated-mesh-scene-node!", 2, 0, 1,
-                        (scm_t_subr)irr_scene_addAnimatedMeshSceneNode);
-    scm_c_define_gsubr ("add-camera-scene-node!", 1, 0, 1,
-                        (scm_t_subr)irr_scene_addCameraSceneNode);
-    scm_c_define_gsubr ("add-camera-scene-node-fps!", 1, 0, 1,
-                        (scm_t_subr)irr_scene_addCameraSceneNodeFPS);
-    scm_c_define_gsubr ("add-cube-scene-node!", 1, 0, 1,
-                        (scm_t_subr)irr_scene_addCubeSceneNode);
-    scm_c_define_gsubr ("add-custom-scene-node!", 5, 0, 1,
-                        (scm_t_subr)irr_scene_addCustomSceneNode);
-    scm_c_define_gsubr ("add-octree-scene-node!", 2, 0, 1,
-                        (scm_t_subr)irr_scene_addOctreeSceneNode);
-    scm_c_define_gsubr ("add-sphere-scene-node!", 1, 0, 1,
-                        (scm_t_subr)irr_scene_addSphereSceneNode);
-    scm_c_define_gsubr ("create-fly-circle-animator", 1, 0, 1,
-                        (scm_t_subr)irr_scene_createFlyCircleAnimator);
-    scm_c_define_gsubr ("create-fly-straight-animator", 4, 0, 1,
-                        (scm_t_subr)irr_scene_createFlyStraightAnimator);
-    scm_c_define_gsubr ("create-rotation-animator", 2, 0, 0,
-                        (scm_t_subr)irr_scene_createRotationAnimator);
-    scm_c_define_gsubr ("get-mesh", 2, 0, 0, (scm_t_subr)irr_scene_getMesh);
-    scm_c_define_gsubr ("get-root-scene-node", 1, 0, 0, (scm_t_subr)irr_scene_getRootSceneNode);
-    scm_c_define_gsubr ("get-scene-manager", 1, 0, 0, (scm_t_subr)irr_getSceneManager);
-    scm_c_export ("add-animated-mesh-scene-node!", "add-camera-scene-node!",
-                  "add-camera-scene-node-fps!", "add-custom-scene-node!", "add-cube-scene-node!",
-                  "add-octree-scene-node!", "add-sphere-scene-node!", "create-fly-circle-animator",
-                  "create-fly-straight-animator", "create-rotation-animator", "get-mesh",
-                  "get-root-scene-node", "get-scene-manager", NULL);
+    DEFINE_GSUBR ("add-animated-mesh-scene-node!", 2, 0, 1, irr_scene_addAnimatedMeshSceneNode);
+    DEFINE_GSUBR ("add-camera-scene-node!", 1, 0, 1, irr_scene_addCameraSceneNode);
+    DEFINE_GSUBR ("add-camera-scene-node-fps!", 1, 0, 1, irr_scene_addCameraSceneNodeFPS);
+    DEFINE_GSUBR ("add-cube-scene-node!", 1, 0, 1, irr_scene_addCubeSceneNode);
+    DEFINE_GSUBR ("add-custom-scene-node!", 5, 0, 1, irr_scene_addCustomSceneNode);
+    DEFINE_GSUBR ("add-octree-scene-node!", 2, 0, 1, irr_scene_addOctreeSceneNode);
+    DEFINE_GSUBR ("add-sphere-scene-node!", 1, 0, 1, irr_scene_addSphereSceneNode);
+    DEFINE_GSUBR ("create-fly-circle-animator", 1, 0, 1, irr_scene_createFlyCircleAnimator);
+    DEFINE_GSUBR ("create-fly-straight-animator", 4, 0, 1, irr_scene_createFlyStraightAnimator);
+    DEFINE_GSUBR ("create-rotation-animator", 2, 0, 0, irr_scene_createRotationAnimator);
+    DEFINE_GSUBR ("get-mesh", 2, 0, 0, irr_scene_getMesh);
+    DEFINE_GSUBR ("get-root-scene-node", 1, 0, 0, irr_scene_getRootSceneNode);
+    DEFINE_GSUBR ("get-scene-manager", 1, 0, 0, irr_getSceneManager);
   }
 
   DEFINE_WRAPPED_TYPE (irr::scene::ISceneManager*, "scene-manager",
index 1ec773c4ace9c2084e9f17e1d5ecfb8ee82a4d12..695fd63f34f153682cc4850b8893ff7e3704a6b7 100644 (file)
@@ -23,6 +23,7 @@
 #include <libguile.h>
 
 #include "animated-mesh-scene-node.h"
+#include "gsubr.h"
 #include "material-flags.h"
 #include "matrix4.h"
 #include "mesh-scene-node.h"
@@ -38,12 +39,9 @@ extern "C" {
   init_scene_node (void)
   {
     init_scene_node_type ();
-    scm_c_define_gsubr ("add-animator!", 2, 0, 0, (scm_t_subr)irr_scene_addAnimator);
-    scm_c_define_gsubr ("get-absolute-transformation", 1, 0, 0,
-                        (scm_t_subr)irr_scene_getAbsoluteTransformation);
-    scm_c_define_gsubr ("set-material-texture!", 3, 0, 0, (scm_t_subr)irr_scene_setMaterialTexture);
-    scm_c_export ("add-animator!", "get-absolute-transformation",
-                  "set-material-texture!", NULL);
+    DEFINE_GSUBR ("add-animator!", 2, 0, 0, irr_scene_addAnimator);
+    DEFINE_GSUBR ("get-absolute-transformation", 1, 0, 0, irr_scene_getAbsoluteTransformation);
+    DEFINE_GSUBR ("set-material-texture!", 3, 0, 0, irr_scene_setMaterialTexture);
   }
 
   DEFINE_WRAPPED_TYPE (irr::scene::ISceneNode*, "scene-node",
index f6adab086d5371d8352dee98cfb0814c55a64c4a..6ffc86dc3046eb4ca852ed9473d28f39ad98277d 100644 (file)
@@ -21,7 +21,9 @@
 
 #include <irrlicht/irrlicht.h>
 #include <libguile.h>
+
 #include "color.h"
+#include "gsubr.h"
 #include "vector2d.h"
 #include "vector3d.h"
 #include "vertex3d.h"
@@ -33,9 +35,8 @@ extern "C" {
   init_vertex3d (void)
   {
     init_vertex3d_type ();
-    scm_c_define_gsubr ("make-vertex3d", 4, 0, 0, (scm_t_subr)make_vertex3d);
-    scm_c_define_gsubr ("vertex3d-position", 1, 0, 0, (scm_t_subr)vertex3d_position);
-    scm_c_export ("make-vertex3d", "vertex3d-position", NULL);
+    DEFINE_GSUBR ("make-vertex3d", 4, 0, 0, make_vertex3d);
+    DEFINE_GSUBR ("vertex3d-position", 1, 0, 0, vertex3d_position);
   }
 
   DEFINE_WRAPPED_TYPE (irr::video::S3DVertex*, "vertex3d",
index 9c81120fb97825ad23f422146a0795569705a9bf..ef7dd573e939e6fe07f978da2ad5cb6a425b8836 100644 (file)
@@ -24,6 +24,7 @@
 
 #include "color.h"
 #include "device.h"
+#include "gsubr.h"
 #include "gui-environment.h"
 #include "material.h"
 #include "matrix4.h"
@@ -41,16 +42,13 @@ extern "C" {
   init_video_driver (void)
   {
     init_video_driver_type ();
-    scm_c_define_gsubr ("begin-scene", 1, 0, 1, (scm_t_subr)irr_video_beginScene);
-    scm_c_define_gsubr ("draw-vertex-primitive-list", 3, 0, 1,
-                        (scm_t_subr)irr_video_drawVertexPrimitiveList);
-    scm_c_define_gsubr ("end-scene", 1, 0, 0, (scm_t_subr)irr_video_endScene);
-    scm_c_define_gsubr ("get-fps", 1, 0, 0, (scm_t_subr)irr_video_getFPS);
-    scm_c_define_gsubr ("get-texture", 2, 0, 0, (scm_t_subr)irr_video_getTexture);
-    scm_c_define_gsubr ("get-video-driver", 1, 0, 0, (scm_t_subr)irr_getVideoDriver);
-    scm_c_define_gsubr ("set-transform!", 3, 0, 0, (scm_t_subr)irr_video_setTransform);
-    scm_c_export ("begin-scene", "draw-vertex-primitive-list", "end-scene", "get-fps",
-                  "get-texture", "get-video-driver", "set-transform!", NULL);
+    DEFINE_GSUBR ("begin-scene", 1, 0, 1, irr_video_beginScene);
+    DEFINE_GSUBR ("draw-vertex-primitive-list", 3, 0, 1, irr_video_drawVertexPrimitiveList);
+    DEFINE_GSUBR ("end-scene", 1, 0, 0, irr_video_endScene);
+    DEFINE_GSUBR ("get-fps", 1, 0, 0, irr_video_getFPS);
+    DEFINE_GSUBR ("get-texture", 2, 0, 0, irr_video_getTexture);
+    DEFINE_GSUBR ("get-video-driver", 1, 0, 0, irr_getVideoDriver);
+    DEFINE_GSUBR ("set-transform!", 3, 0, 0, irr_video_setTransform);
   }
 
   DEFINE_WRAPPED_TYPE (irr::video::IVideoDriver*, "video-driver",