* - more complete [after] command with [after info] and other subcommands.
* - Win32 port
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
#define JIM_EXTENSION
#define __JIM_EVENTLOOP_CORE__
#include "jim-eventloop.h"
#endif
-/* POSIX includes */
-#include <sys/time.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <sys/select.h>
-#include <errno.h>
- extern int errno;
-/* --- */
-
/* File event structure */
typedef struct Jim_FileEvent {
void *handle;
Jim_EventLoop *eventLoop = Jim_GetAssocData(interp, "eventloop");
fe = eventLoop->fileEventHead;
- while(fe) {
+ while (fe) {
if (fe->handle == handle) {
if (prev == NULL)
eventLoop->fileEventHead = fe->next;
te = eventLoop->timeEventHead;
if (id >= eventLoop->timeEventNextId)
return -2; /* wrong event ID */
- while(te) {
+ while (te) {
if (te->id == id) {
remain = (te->when_sec - cur_sec) * 1000;
remain += (te->when_ms - cur_ms) ;
Jim_TimeEvent *te = eventLoop->timeEventHead;
Jim_TimeEvent *nearest = NULL;
- while(te) {
+ while (te) {
if (!nearest || te->when_sec < nearest->when_sec ||
(te->when_sec == nearest->when_sec &&
te->when_ms < nearest->when_ms))
return nearest;
}
+/* --- POSIX version of Jim_ProcessEvents, for now the only available --- */
+#define JIM_FILE_EVENTS 1
+#define JIM_TIME_EVENTS 2
+#define JIM_ALL_EVENTS (JIM_FILE_EVENTS|JIM_TIME_EVENTS)
+#define JIM_DONT_WAIT 4
+
/* Process every pending time event, then every pending file event
* (that may be registered by time event callbacks just processed).
* Without special flags the function sleeps until some file event
/* Check file events */
while (fe != NULL) {
- int fd = fileno(fe->handle);
+ int fd = fileno((FILE*)fe->handle);
if (fe->mask & JIM_EVENT_READABLE)
FD_SET(fd, &rfds);
// fprintf(stderr,"No Event\n");
}
- retval = select(maxfd+1, &rfds, &wfds, &efds, tvp);
+ retval = select(maxfd + 1, &rfds, &wfds, &efds, tvp);
if (retval < 0) {
switch (errno) {
case EINTR: fprintf(stderr,"select EINTR\n"); break;
}
} else if (retval > 0) {
fe = eventLoop->fileEventHead;
- while(fe != NULL) {
- int fd = fileno(fe->handle);
+ while (fe != NULL) {
+ int fd = fileno((FILE*)fe->handle);
// fprintf(stderr,"fd: %d mask: %02x \n",fd,fe->mask);
/* Check time events */
te = eventLoop->timeEventHead;
maxId = eventLoop->timeEventNextId-1;
- while(te) {
+ while (te) {
long now_sec, now_ms;
jim_wide id;
Jim_EventLoop *eventLoop = data;
fe = eventLoop->fileEventHead;
- while(fe) {
+ while (fe) {
next = fe->next;
if (fe->finalizerProc)
fe->finalizerProc(interp, fe->clientData);
}
te = eventLoop->timeEventHead;
- while(te) {
+ while (te) {
next = te->next;
if (te->finalizerProc)
te->finalizerProc(interp, te->clientData);
/* This extension is not dynamically loaded, instead it's linked statically,
which is why we shouldn't use the unspecific 'Jim_OnLoad' name */
-#define Jim_OnLoad Jim_EventLoopOnLoad
-
-int Jim_OnLoad(Jim_Interp *interp)
+int Jim_EventLoopOnLoad(Jim_Interp *interp)
{
Jim_EventLoop *eventLoop;