Index: cli.c
===================================================================
--- cli.c	(revision 428)
+++ cli.c	(revision 429)
@@ -63,6 +63,9 @@
 FILE *fp;
 char *str;
 char *str2;
+#ifdef WIN32
+char *empty="";
+#endif
         
 raydium_homedir[0]=0;
 #ifndef WIN32
@@ -78,8 +81,13 @@
 str2=getenv("HOMEPATH");
 if(!str || !str2)
     {
-    raydium_log("ERROR ! Unable to find HOMEDRIVE and HOMEPATH variables !");
-    exit(100);
+    str=empty;
+    str2=getenv("windir");
+        if(!str2)
+            {
+            raydium_log("ERROR ! Unable to find HOMEDRIVE/HOMEPATH/windir variables !");
+            exit(100);
+            }
     }
 #endif
 
@@ -141,7 +149,7 @@
 
 #ifndef RAYDIUM_NETWORK_ONLY
 raydium_file_dirname(raydium_init_wd,raydium_init_argv[0]);
-if(!chdir(raydium_init_wd))
+if(chdir(raydium_init_wd)!=-1)
     raydium_log("chdir to '%s': OK",raydium_init_wd);
 else
     perror("chdir");    
ydium_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();
+}