aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--jim-eventloop.c21
-rw-r--r--jim-eventloop.h45
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__ */