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