Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/ecore

Dir     : e17/libs/ecore/src


Modified Files:
      Tag: SPLIT
        Ecore.h Makefile.am ecore_app.c ecore_exe.c ecore_main.c 
        ecore_private.h ecore_time.c 
Added Files:
      Tag: SPLIT
        ecore.c ecore_events.c ecore_idle_enterer.c ecore_idler.c 
        ecore_timer.c 
Removed Files:
      Tag: SPLIT
        ecore_display.c 


Log Message:


working on ecore... a remake... not even sure if ti compiles.... but its a
design reference. i'm beraking out the x specifics into a generic fd
handler... going to make the display system thing modular... i have plans...
cunning plans... :)

===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/Ecore.h,v
retrieving revision 1.45.2.2
retrieving revision 1.45.2.3
diff -u -3 -r1.45.2.2 -r1.45.2.3
--- Ecore.h     11 Nov 2002 04:30:44 -0000      1.45.2.2
+++ Ecore.h     13 Jan 2003 00:25:19 -0000      1.45.2.3
@@ -1,34 +1,71 @@
 #ifndef _ECORE_H
 #define _ECORE_H
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/time.h>
 #include <sys/types.h>
 #include <unistd.h>
-#include <signal.h>
-#define XK_MISCELLANY 1
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <X11/Xatom.h>
-#include <X11/Xresource.h>
-#include <X11/keysymdef.h>
-#include <X11/extensions/XShm.h>
-#include <X11/extensions/shape.h>
+#include <stdio.h>
+#include <stdlib.h>
 
 #ifdef __cplusplus
 extern              "C"
 {
 #endif
 
+   typedef enum _Ecore_Fd_Handler_Flags
+     {
+       ECORE_FD_READ = 1,
+       ECORE_FD_WRITE = 2
+     } Ecore_Fd_Handler_Flags;
+   
 #ifndef _ECORE_PRIVATE_H   
    typedef void Ecore_Exe;
+   typedef void Ecore_Timer;
+   typedef void Ecore_Idler;
+   typedef void Ecore_Idle_Enterer;
+   typedef void Ecore_Fd_Handler;
+   typedef void Ecore_Event_Handler;
+   typedef void Ecore_Event;
 #else
+
+   int  ecore_init(void);
+   void ecore_shutdown(void);
+       
+   void ecore_app_args_set(int argc, char **argv);
+   void ecore_app_args_get(int *argc, char ***argv);
+   void ecore_app_restart(void);
    
+   Ecore_Event_Handler *ecore_event_handler_add(int type, void (*func) (int type, 
+void *event, void *data), void *data);
+   void                *ecore_event_handler_add(Ecore_Event_Handler *event_handler)
+
+   Ecore_Exe *ecore_exe_run(char *exe_cmd, void *data);
+   pid_t      ecore_exe_pid_get(Ecore_Exe *exe);
+   void      *ecore_exe_data_get(Ecore_Exe *exe);
+       
+   Ecore_Idler *ecore_idler_add(int (*func) (void *data), const void *data);
+   void        *ecore_idler_del(Ecore_Idler *idler);
+   
+   Ecore_Idle_Enterer *ecore_idle_enterer_add(int (*func) (void *data), const void 
+*data);
+   void               *ecore_idle_enterer_del(Ecore_Idle_Enterer *idle_enterer);
+       
+   void              ecore_main_loop_begin(void);
+   void              ecore_main_loop_quit(void);
+   Ecore_Fd_Handler *ecore_main_fd_handler_add(int fd, Ecore_Fd_Handler_Flags flags, 
+int (*func) (Ecore_Fd_Handler *fd_handler, void *data), void *data);
+   void              ecore_main_fd_handler_del(Ecore_Fd_Handler *fd_handler);
+   int               ecore_main_fd_handler_fd_get(Ecore_Fd_Handler *fd_handler);
+   int               ecore_main_fd_handler_active_get(Ecore_Fd_Handler *fd_handler, 
+Ecore_Fd_Handler_Flags flags);
+   
+   double ecore_time_get(void);
+       
+   Ecore_Timer *ecore_timer_add(double in, int (*func) (void *data), const void 
+*data);
+   void        *ecore_timer_del(Ecore_Timer *timer);
+       
 #ifdef __cplusplus
 }
 #endif
 #endif
+
+
+
 
 
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/Makefile.am,v
retrieving revision 1.7.2.2
retrieving revision 1.7.2.3
diff -u -3 -r1.7.2.2 -r1.7.2.3
--- Makefile.am 11 Nov 2002 04:30:44 -0000      1.7.2.2
+++ Makefile.am 13 Jan 2003 00:25:19 -0000      1.7.2.3
@@ -9,10 +9,12 @@
 libecore_la_SOURCES = \
        ecore.c \
        ecore_app.c \
-       ecore_display.c \
        ecore_exe.c \
+       ecore_idle_enterer.c \
+       ecore_idler.c \
        ecore_main.c \
        ecore_time.c \
+       ecore_timer.c \
        ecore_private.h
 
 libecore_la_LIBADD = @x_ldflags@ @x_libs@ -lm
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/Attic/ecore_app.c,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -3 -r1.1.2.1 -r1.1.2.2
--- ecore_app.c 11 Nov 2002 04:30:44 -0000      1.1.2.1
+++ ecore_app.c 13 Jan 2003 00:25:19 -0000      1.1.2.2
@@ -3,7 +3,6 @@
 
 /**
  * Set up the programs command-line arguments
- * 
  * @param argc The same as passed as argc to the programs main() function
  * @param argv The same as passed as argv to the programs main() function
  * 
@@ -17,7 +16,6 @@
 
 /**
  * Return the programs stored command-line arguments
- * 
  * @param argc A pointer to the return value to hold argc
  * @param argv A pointer to the return value to hold argv
  * 
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/Attic/ecore_exe.c,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -3 -r1.1.2.1 -r1.1.2.2
--- ecore_exe.c 11 Nov 2002 04:30:44 -0000      1.1.2.1
+++ ecore_exe.c 13 Jan 2003 00:25:19 -0000      1.1.2.2
@@ -3,10 +3,9 @@
 
 /**
  * Spawn off a child process and return a handle to that process
- * 
  * @param exe_cmd The command-line to run as if typed in a shell
  * @param data A generic data pointer to attach to the process handle
- * @returns A process handle to the spawned off process
+ * @return A process handle to the spawned off process
  * 
  * This function will fork and execute the command line @p exe_cmd as specified
  * using the system shell (/bin/sh). The data pointer @p data is attached to
@@ -24,9 +23,8 @@
 
 /**
  * Get the process ID of a spawned process
- * 
  * @param exe The process handle returned by ecore_exe_run()
- * @returns A system process ID of the process handle
+ * @return A system process ID of the process handle
  * 
  * This function returns the system process ID of a spawned off child process.
  */
@@ -37,9 +35,8 @@
 
 /**
  * Get the data pointer attached to a process handle
- * 
  * @param exe The process handle returned by ecore_exe_run()
- * @retruns An pointer to the attached data of the process handle
+ * @retrun An pointer to the attached data of the process handle
  * 
  * This function returns the data pointer attached to the spawned off process
  * whose handle is @p exe.
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/Attic/ecore_main.c,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -3 -r1.1.2.1 -r1.1.2.2
--- ecore_main.c        11 Nov 2002 04:30:44 -0000      1.1.2.1
+++ ecore_main.c        13 Jan 2003 00:25:19 -0000      1.1.2.2
@@ -1,6 +1,19 @@
 #include "ecore_private.h"
 #include "Ecore.h"
 
+#include <sys/time.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <errno.h>
+
+static int  _ecore_main_select(double timeout);
+static void _ecore_main_fd_handlers_cleanup(void);
+static void _ecore_main_fd_handlers_call(void);
+    
+static   quit = 0;
+static   fd_handlers_num = 0;
+static  *fd_handlers = NULL;
+
 /**
  * Run the application main loop
  * 
@@ -11,6 +24,109 @@
 void
 ecore_main_loop_begin(void)
 {
+   for (;quit == 0;)
+     {
+       double next_time;
+       int    have_event;
+       int    have_signal;
+       
+       /* expire any timers */
+         {
+            double now;
+            
+            now = ecore_time_get();
+            while (_ecore_timer_call(now));
+         }
+       /* call idle enterers ... */
+       _ecore_idle_enterer_call();
+       
+       start_loop:
+       /* init flags */
+       have_event = have_signal = 0;
+       next_time = _ecore_timer_next_get();    
+       /* no timers */
+       if (next_time < 0)
+         {
+            /* no idlers */
+            if (!_ecore_idler_exist())
+              {
+                 int ret;
+                 
+                 ret = _ecore_main_select(-1);
+                 if (ret > 0) have_event;
+                 if (ret < 0) have_signal = 1;
+              }
+            /* idlers */
+            else
+              {
+                 for (;;)
+                   {
+                      int ret;
+                      
+                      if (!_ecore_idler_call()) goto start_loop;
+                      ret = _ecore_main_select(0);
+                      if (ret > 0) have_event;
+                      if (ret < 0) have_signal = 1;
+                      if (have_event || have_signal) break;
+                      next_time = _ecore_timer_next_get();
+                      if (next_time >= 0) goto start_loop;
+                   }
+              }
+         }
+       /* timers */
+       else
+         {
+            /* no idlers */
+            if (!_ecore_idler_exist())
+              {
+                 int ret;
+                 
+                 ret = _ecore_main_select(next_time);
+                 if (ret > 0) have_event;
+                 if (ret < 0) have_signal = 1;
+              }
+            /* idlers */
+            else
+              {
+                 double cur_time, t;
+                 
+                 cur_time = ecore_time_get();
+                 for (;;)
+                   {
+                      int ret;
+                      
+                      if (!_ecore_idler_call()) goto start_loop;
+                      ret = _ecore_main_select(0);
+                      if (ret > 0) have_event;
+                      if (ret < 0) have_signal = 1;
+                      if ((have_event) || (have_signal)) break;
+                      t = ecore_time_get() - cur_time;
+                      if (t >= next_time) break;
+                      next_time = _ecore_timer_next_get();
+                      if (next_time < 0) goto start_loop;
+                   }
+              }
+         }
+       /* call the fd handler per fd that became alive... */
+       /* this should read or write any data to the monitored fd and then */
+       /* post events onto the ecore event pipe if necessary */
+       if (have_event) _ecore_main_fd_handlers_call();
+       /* process signals into events .... */
+       if (have_signal)
+         {
+            /* FIXME: implement signal -> event converters here */
+            /* FIXME: need ecore_signal.c for setup of signal handlers */
+            /* and signal counters, wait() loop etc. */
+         }
+       
+       /* filter events to remove useless ones etc. ... */
+       /* FIXME: implement some other day... */
+       
+       /* handle events ... */
+       _ecore_event_call();
+       
+       _ecore_main_fd_handlers_cleanup();
+     }
 }
 
 /**
@@ -23,4 +139,190 @@
 void
 ecore_main_loop_quit(void)
 {
+   quit = 1;
+}
+
+/**
+ * Add a handler for read/write of a fd
+ * @param fd
+ * @param flags
+ * @param func
+ * @param data
+ * @return A handler handle
+ * 
+ * This adds a fd handler, calling @p func whenever the fd is active
+ */
+Ecore_Fd_Handler *
+ecore_main_fd_handler_add(int fd, Ecore_Fd_Handler_Flags flags, int (*func) 
+(Ecore_Fd_Handler *fd_handler, void *data), void *data)
+{
+   Ecore_Fd_Handler *new_fd_handlers;
+   int i;
+   
+   i = fd_handlers_num;
+   fd_handlers_num++;
+   new_fd_handlers = realloc(fd_handlers, fd_handlers_num * sizeof(Ecore_Fd_Handler));
+   if (!new_fd_handlers) return NULL;
+   fd_handlers = new_fd_handlers;
+   fd_handlers[i].fd = fd;
+   fd_handlers[i].flags = flags;
+   fd_handlers[i].read_active = 0;
+   fd_handlers[i].write_active = 0;
+   fd_handlers[i].delete_me = 0;
+   fd_handlers[i].func = func;
+   fd_handlers[i].data = data;
+   return &(fd_handlers[i]);
+}
+
+/**
+ * Delete a handler for fd's
+ * 
+ * @param fd_handler
+ * @return The data pointer set for the fd_handler
+ * 
+ * This deletes a fd handler
+ */
+void *
+ecore_main_fd_handler_del(Ecore_Fd_Handler *fd_handler)
+{
+   fd_handler->delete_me = 1;
+}
+
+/**
+ * Return the fd the handler is handling
+ * @param fd_handler
+ * @return The fd the handler is watching
+ * 
+ * This returns the fd the handler is monitoring
+ */
+int
+ecore_main_fd_handler_fd_get(Ecore_Fd_Handler *fd_handler)
+{
+   return fd_handler->fd;
+}
+
+/**
+ * Return if read or write is active on the fd
+ * @param fd_handler
+ * @param flags
+ * @return the active state of read or write on the fd, or both
+ * 
+ * Return if the fd the handler is watching is active ro read, write or both
+ */
+int
+ecore_main_fd_handler_active_get(Ecore_Fd_Handler *fd_handler, Ecore_Fd_Handler_Flags 
+flags)
+{
+   int ret;
+   
+   ret = 0;
+   if ((flags & ECORE_FD_READ) && (fd_handler->read_active)) ret = 1;
+   if ((flags & ECORE_FD_WRITE) && (fd_handler->write_active)) ret = 1;
+   return ret;
+}
+                                              
+static int
+_ecore_main_select(double timeout)
+{
+   struct timeval tv, *t;
+   fd_set         rfds, wfds;
+   int            max_fd;
+   int            ret, i;
+   
+   t = NULL;
+   if (timeout > 0.0)
+     {
+       int sec, usec;
+       
+       sec = (int)timeout;
+       usec = (int)((timeout - (double)sec) * 1000000);
+       tv.tv_sec = sec;
+       tv.tv_usec = usec;
+       t = &tv;
+     }
+   else if (timeout == 0.0)
+     {
+       tv.tv_sec = 0;
+       tv.tv_usec = 0;
+       t = &tv;
+     }
+   max_fd = 0;
+   FD_ZERO(&rfds);
+   FD_ZERO(&wfds);
+   for (i = 0; i < fd_handlers_num; i++)
+     {
+       if (fd_handlers[i].flags & ECORE_FD_READ)
+         {
+            FD_SET(fd_handlers[i].fd, &rfds);
+            if (fd_handlers[i].fd > max_fd) max_fd = fd_handlers[i].fd;
+         }
+       if (fd_handlers[i].flags & ECORE_FD_WRITE)
+         {
+            FD_SET(fd_handlers[i].fd, &wfds);
+            if (fd_handlers[i].fd > max_fd) max_fd = fd_handlers[i].fd;
+         }
+     }
+   ret = select(max_fd + 1, &rfds, &wfds, NULL, t);
+   if (ret < 0)
+     {
+       if (errno == EINTR) return -1;
+     }
+   if (ret > 0)
+     {
+       for (i = 0; i < fd_handlers_num; i++)
+         {
+            if (!fd_handlers[i].delete_me)
+              {
+                 if (FD_ISSET(fd_handlers[i].fd, &rfds))
+                   fd_handlers[i].read_active = 1;
+                 if (FD_ISSET(fd_handlers[i].fd, &wfds))
+                   fd_handlers[i].write_active = 1;
+              }
+         }
+       _ecore_main_fd_handlers_cleanup();
+       return 1;
+     }
+   return 0;
+}
+
+static void
+_ecore_main_fd_handlers_cleanup(void)
+{
+   int i;
+   int deleted;
+
+   deleted = 0;
+   for (i = 0; i < fd_handlers_num; i++)
+     {
+       if (fd_handlers[i].delete_me)
+         {
+            int j;
+            
+            fd_handlers_num--;
+            for (j = i; j < fd_handlers_num; j++)
+              fd_handlers[j] = fd_handlers[j + 1];
+            deleted = 1;
+         }
+     }
+   if (deleted)
+     {
+       Ecore_Fd_Handler *new_fd_handlers;
+       
+       new_fd_handlers = realloc(fd_handlers, fd_handlers_num * 
+sizeof(Ecore_Fd_Handler));
+       if (new_fd_handlers)
+         fd_handlers = new_fd_handlers;
+     }
+}
+
+static void
+_ecore_main_fd_handlers_call(void)
+{
+   int i;
+   
+   for (i = 0; i < fd_handlers_num; i++)
+     {
+       if (!fd_handlers[i].delete_me)
+         {
+            if ((fd_handlers[i].read_active) || (fd_handlers[i].write_active))
+              fd_handlers[i].func(&(fd_handlers[i]), fd_handlers[i].data);
+         }
+     }
 }
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/Attic/ecore_private.h,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -3 -r1.1.2.1 -r1.1.2.2
--- ecore_private.h     11 Nov 2002 04:30:44 -0000      1.1.2.1
+++ ecore_private.h     13 Jan 2003 00:25:19 -0000      1.1.2.2
@@ -16,7 +16,13 @@
 #include <X11/extensions/XShm.h>
 #include <X11/extensions/shape.h>
 
-typedef struct _Ecore_Exe Ecore_Exe;
+typedef struct _Ecore_Exe           Ecore_Exe;
+typedef struct _Ecore_Timer         Ecore_Timer;
+typedef struct _Ecore_Idler         Ecore_Idler;
+typedef struct _Ecore_Idle_Enterer  Ecore_Idle_Enterer;
+typedef struct _Ecore_Fd_Handler    Ecore_Fd_Handler;
+typedef struct _Ecore_Event_Handler Ecore_Event_Handler;
+typedef struct _Ecore_Event         Ecore_Event;
 
 struct _Ecore_Exe
 {
@@ -24,4 +30,65 @@
    void *data;
 }
 
+struct _Ecore_Timer
+{
+   double  in;
+   double  at;
+   int    (*func) (void *data);
+   void    *data;
+};
+
+struct _Ecore_Idler
+{
+   int  (*func) (void *data);   
+   void  *data;
+}
+
+struct _Ecore_Idle_Enterer
+{
+   int  (*func) (void *data);   
+   void  *data;
+}
+
+struct _Ecore_Fd_Handler
+{
+   int                      fd;
+   Ecore_Fd_Handler_Flags   flags;
+   int                      read_active : 1;
+   int                      write_active : 1;
+   int                      delete_me : 1;
+   int                    (*func) (Ecore_Fd_Handler *fd_handler, void *data);
+   void                    *data;
+};
+
+struct _Ecore_Event_Handler
+{
+   int   type;
+   int   delete_me : 1;
+   int  (*func) (int type, void *event, void *data);
+   void  *data;
+}
+
+struct _Ecore_Event
+{
+   int   type;
+   void  *event;
+   void (*func_free) (Ecore_Event *ev, void *data);
+   void  *data;
+};
+
+double _ecore_timer_next_get(void);
+int    _ecore_timer_call(double when);
+
+int    _ecore_idler_call(void);
+int    _ecore_idler_exist(void);
+
+void   _ecore_idle_enterer_call(void);
+int    _ecore_idle_enterer_exist(void)
+
+Ecore_Event  *_ecore_event_add(int type, void *ev, void (*func_free) (Ecore_Event 
+*ev, void *data), void *data);
+void         *_ecore_event_del(Ecore_Event *event);
+int           _ecore_event_count_get(void);
+Ecore_Event  *_ecore_event_get(int num);
+void          _ecore_event_call(void);
 #endif
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/Attic/ecore_time.c,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -3 -r1.1.2.1 -r1.1.2.2
--- ecore_time.c        11 Nov 2002 04:30:44 -0000      1.1.2.1
+++ ecore_time.c        13 Jan 2003 00:25:19 -0000      1.1.2.2
@@ -1,8 +1,11 @@
 #include "ecore_private.h"
 #include "Ecore.h"
 
+#include <sys/time.h>
+
 /**
  * Get the current system time as a floating point value in seconds
+ * @return The current time (since the epoch start) in seconds
  * 
  * This function returns the current system time in seconds from 12:00am 
  * 1st Janruary 1970. The time is returned as a double precision floating point
@@ -11,4 +14,8 @@
 double
 ecore_time_get(void)
 {
+   struct timeval      timev;
+
+   gettimeofday(&timev, NULL);
+   return (double)timev.tv_sec + (((double)timev.tv_usec) / 1000000);
 }




-------------------------------------------------------
This SF.NET email is sponsored by:
SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
http://www.vasoftware.com
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to