Index: kmz_2_tri.c
===================================================================
--- kmz_2_tri.c	(revision 1106)
+++ kmz_2_tri.c	(revision 1107)
@@ -46,6 +46,7 @@
 	struct stat stb;
 	long arraysz;
 	DIR *dirp;
+	int n;
 
 	if ((dirp = opendir(dirname)) == NULL)
 		return(-1);
@@ -54,7 +55,11 @@
 	 * estimate the array size by taking the size of the directory file
 	 * and dividing it by a multiple of the minimum size entry.
 	 */
-	arraysz = (stb.st_size / 24);
+
+    n=0;
+    while ((d=readdir(dirp)) !=NULL) n++;
+    rewinddir(dirp);
+	arraysz = (n);
 	names = (struct dirent **)malloc(arraysz * sizeof(struct dirent *));
 	if (names == NULL)
 		return(-1);
m_mouse_y=0;
-if(raydium_mouse_x>=raydium_window_tx) raydium_mouse_x=raydium_window_tx-1;
-if(raydium_mouse_y>=raydium_window_ty) raydium_mouse_y=raydium_window_ty-1;
+if(raydium_mouse_x<0) { raydium_mouse_x=0; clamped=1; }
+if(raydium_mouse_y<0) { raydium_mouse_y=0; clamped=1; }
+if(raydium_mouse_x>=raydium_window_tx) { raydium_mouse_x=raydium_window_tx-1; clamped=1; }
+if(raydium_mouse_y>=raydium_window_ty) { raydium_mouse_y=raydium_window_ty-1; clamped=1; }
+raydium_viewport_direct_mouse_clamped=clamped;
 
 if(raydium_camera_pushed)
     {
@@ -666,6 +669,15 @@
 
 }
 
+signed char raydium_viewport_direct_is_mouse_in(void)
+{
+if(raydium_viewport_use!=RAYDIUM_VIEWPORT_DIRECT)
+    return 1;
+
+return !raydium_viewport_direct_mouse_clamped;
+}
+
+
 void raydium_viewport_create (char * name,int tx,int ty)
 {
 int i;