diff options
-rw-r--r-- | jim-eventloop.c | 21 | ||||
-rw-r--r-- | jim-eventloop.h | 45 |
2 files changed, 54 insertions, 12 deletions
diff --git a/jim-eventloop.c b/jim-eventloop.c index a024a9f..2dbb47c 100644 --- a/jim-eventloop.c +++ b/jim-eventloop.c @@ -277,7 +277,8 @@ int Jim_ProcessEvents(Jim_Interp *interp, int flags) while (fe != NULL) { int fd = fileno(fe->handle); - if (fe->mask & JIM_EVENT_READABLE) FD_SET(fd, &rfds); + if (fe->mask & JIM_EVENT_READABLE) + FD_SET(fd, &rfds); if (fe->mask & JIM_EVENT_WRITABLE) FD_SET(fd, &wfds); if (fe->mask & JIM_EVENT_EXCEPTION) FD_SET(fd, &efds); if (maxfd < fd) maxfd = fd; @@ -335,12 +336,11 @@ int Jim_ProcessEvents(Jim_Interp *interp, int flags) { int mask = 0; - if ((fe->mask & JIM_EVENT_READABLE) && FD_ISSET(fd, &rfds)) { + if (fe->mask & JIM_EVENT_READABLE && FD_ISSET(fd, &rfds)) { mask |= JIM_EVENT_READABLE; - if ((fe->mask & JIM_EVENT_FEOF) && feof(fe->handle)) { - mask |= JIM_EVENT_FEOF; - } - } + if ((fe->mask & JIM_EVENT_FEOF) && feof(fe->handle)) + mask |= JIM_EVENT_FEOF; + } if (fe->mask & JIM_EVENT_WRITABLE && FD_ISSET(fd, &wfds)) mask |= JIM_EVENT_WRITABLE; if (fe->mask & JIM_EVENT_EXCEPTION && FD_ISSET(fd, &efds)) @@ -520,10 +520,11 @@ static int JimELAfterCommand(Jim_Interp *interp, int argc, return JIM_OK; } -int Jim_eventloopInit(Jim_Interp *interp) +int Jim_OnLoad(Jim_Interp *interp) { Jim_EventLoop *eventLoop; + Jim_InitExtension(interp); if (Jim_PackageProvide(interp, "eventloop", "1.0", JIM_ERRMSG) != JIM_OK) return JIM_ERR; @@ -536,5 +537,11 @@ int Jim_eventloopInit(Jim_Interp *interp) Jim_CreateCommand(interp, "vwait", JimELVwaitCommand, NULL, NULL); Jim_CreateCommand(interp, "after", JimELAfterCommand, NULL, NULL); + /* Export events API */ + Jim_RegisterApi(interp, "Jim_CreateFileHandler", Jim_CreateFileHandler); + Jim_RegisterApi(interp, "Jim_DeleteFileHandler", Jim_DeleteFileHandler); + Jim_RegisterApi(interp, "Jim_CreateTimeHandler", Jim_CreateTimeHandler); + Jim_RegisterApi(interp, "Jim_DeleteTimeHandler", Jim_DeleteTimeHandler); + Jim_RegisterApi(interp, "Jim_ProcessEvents", Jim_ProcessEvents); return JIM_OK; } diff --git a/jim-eventloop.h b/jim-eventloop.h index 39be1c2..e09170e 100644 --- a/jim-eventloop.h +++ b/jim-eventloop.h @@ -63,17 +63,52 @@ typedef void Jim_EventFinalizerProc(Jim_Interp *interp, void *clientData); #define JIM_EVENT_EXCEPTION 4 #define JIM_EVENT_FEOF 8 -JIM_EXPORT void Jim_CreateFileHandler (Jim_Interp *interp, +#ifndef __JIM_EVENTLOOP_CORE__ +# if defined JIM_EXTENSION || defined JIM_EMBEDDED +# define JIM_API(x) (*x) +# define JIM_STATIC +# else +# define JIM_API(x) (*x) +# define JIM_STATIC extern +# endif +#else +# define JIM_API(x) x +# define JIM_STATIC static +#endif /* __JIM_EVENTLOOP_CORE__ */ + +JIM_STATIC void JIM_API(Jim_CreateFileHandler) (Jim_Interp *interp, void *handle, int mask, Jim_FileProc *proc, void *clientData, Jim_EventFinalizerProc *finalizerProc); -JIM_EXPORT void Jim_DeleteFileHandler (Jim_Interp *interp, +JIM_STATIC void JIM_API(Jim_DeleteFileHandler) (Jim_Interp *interp, void *handle); -JIM_EXPORT jim_wide Jim_CreateTimeHandler (Jim_Interp *interp, +JIM_STATIC jim_wide JIM_API(Jim_CreateTimeHandler) (Jim_Interp *interp, jim_wide milliseconds, Jim_TimeProc *proc, void *clientData, Jim_EventFinalizerProc *finalizerProc); -JIM_EXPORT jim_wide Jim_DeleteTimeHandler (Jim_Interp *interp, jim_wide id); -JIM_EXPORT int Jim_ProcessEvents (Jim_Interp *interp, int flags); +JIM_STATIC jim_wide JIM_API(Jim_DeleteTimeHandler) (Jim_Interp *interp, jim_wide id); +JIM_STATIC int JIM_API(Jim_ProcessEvents) (Jim_Interp *interp, int flags); + +#undef JIM_STATIC +#undef JIM_API + +#ifndef __JIM_EVENTLOOP_CORE__ + +#define JIM_GET_API(name) \ + Jim_GetApi(interp, "Jim_" #name, ((void *)&Jim_ ## name)) + +#if defined(JIM_EXTENSION) || defined(JIM_EMBEDDED) +/* This must be included "inline" inside the extension */ +static void Jim_ImportEventloopAPI(Jim_Interp *interp) +{ + JIM_GET_API(CreateFileHandler); + JIM_GET_API(DeleteFileHandler); + JIM_GET_API(CreateTimeHandler); + JIM_GET_API(DeleteTimeHandler); + JIM_GET_API(ProcessEvents); +} +#endif /* defined JIM_EXTENSION || defined JIM_EMBEDDED */ +#undef JIM_GET_API +#endif /* __JIM_EVENTLOOP_CORE__ */ #endif /* __JIM_EVENTLOOP_H__ */ |