Index: callback.c
===================================================================
--- callback.c	(revision 0)
+++ callback.c	(revision 1)
@@ -0,0 +1,64 @@
+/*
+    Raydium - CQFD Corp.
+    http://raydium.cqfd-corp.org
+    License: GPL - GNU General Public License, see "gpl.txt" file.
+*/
+
+#ifndef DONT_INCLUDE_HEADERS
+#include "index.h"
+#else
+#include "headers/callback.h"
+#endif 
+
+void raydium_osd_cursor_draw(void);
+void raydium_console_draw(void);
+void raydium_gui_draw(void);
+void raydium_osd_fade_callback(void);
+int  raydium_php_exec(char *);
+#ifdef ODE_SUPPORT
+void raydium_ode_network_read(void);
+#endif
+
+void raydium_callback_image(void)
+{
+raydium_timecall_callback();
+raydium_light_callback();
+raydium_particle_draw_all();
+raydium_particle_callback();
+raydium_osd_fade_callback();
+raydium_gui_draw();
+raydium_console_draw();
+raydium_osd_cursor_draw();
+raydium_joy_callback();
+raydium_sound_callback();
+#ifdef ODE_SUPPORT
+// 0hz ODE callback workaround
+raydium_ode_network_read();
+#endif
+}
+
+
+void raydium_callback_set(void)
+{
+if(raydium_window_mode==RAYDIUM_RENDERING_NONE)
+    return;
+glutReshapeFunc(&raydium_window_resize_callback);
+glutKeyboardFunc((void *)raydium_key_normal_callback);
+glutSpecialUpFunc((void *)raydium_key_special_up_callback);
+glutSpecialFunc((void *)raydium_key_special_callback);
+glutMotionFunc((void *)raydium_mouse_move_callback);
+glutPassiveMotionFunc((void *)raydium_mouse_move_callback);
+glutMouseFunc((void *)raydium_mouse_click_callback);
+}
+
+
+void raydium_callback(void (*loop) )
+{
+char autoexec[RAYDIUM_MAX_NAME_LEN];
+
+if(raydium_init_cli_option("autoexec2",autoexec))
+    raydium_php_exec(autoexec);
+glutDisplayFunc(loop);
+glutIdleFunc(loop);
+glutMainLoop();
+}