From f3a42a7074e512fe63976b226ddc4530e840c60b Mon Sep 17 00:00:00 2001 From: perry.werneck@gmail.com Date: Thu, 20 Nov 2014 13:29:57 +0000 Subject: [PATCH] Atualizando GUI --- src/include/lib3270.h | 12 ++++-------- src/lib3270/iocalls.c | 51 +++++++++++---------------------------------------- src/plugins/dbus3270/iocallback.c | 2 ++ src/pw3270/v3270/iocallback.c | 60 +++++++++++++++++++++++++++++++++--------------------------- 4 files changed, 50 insertions(+), 75 deletions(-) diff --git a/src/include/lib3270.h b/src/include/lib3270.h index e3c99f6..f018bae 100644 --- a/src/include/lib3270.h +++ b/src/include/lib3270.h @@ -685,14 +685,8 @@ void * (*AddTimeOut)(unsigned long interval_ms, H3270 *session, void (*proc)(H3270 *session)); void (*RemoveTimeOut)(void *timer); - void * (*AddInput)(int source, H3270 *session, void (*fn)(H3270 *session)); - void * (*AddOutput)(int source, H3270 *session, void (*fn)(H3270 *session)); - - void (*RemoveSource)(void *id); - - void * (*AddExcept)(int source, H3270 *session, void (*fn)(H3270 *session)); - -// int (*callthread)(int(*callback)(H3270 *, void *), H3270 *session, void *parm); + void * (*add_poll)(H3270 *session, int fd, LIB3270_IO_FLAG flag, void(*proc)(H3270 *, int, LIB3270_IO_FLAG, void *), void *userdata); + void (*remove_poll)(void *id); int (*Wait)(H3270 *hSession, int seconds); int (*event_dispatcher)(H3270 *hSession, int wait); @@ -719,6 +713,8 @@ */ void LIB3270_EXPORT lib3270_register_time_handlers(void * (*add)(unsigned long interval_ms, H3270 *session, void (*proc)(H3270 *session)), void (*rm)(void *timer)); + void lib3270_register_fd_handlers(void * (*add)(H3270 *session, int fd, LIB3270_IO_FLAG flag, void(*proc)(H3270 *, int, LIB3270_IO_FLAG, void *), void *userdata), void (*rm)(void *id)); + /** * Get program message. * diff --git a/src/lib3270/iocalls.c b/src/lib3270/iocalls.c index ef4f663..3a4897d 100644 --- a/src/lib3270/iocalls.c +++ b/src/lib3270/iocalls.c @@ -79,7 +79,7 @@ static void internal_ring_bell(H3270 *); static void (*remove_poll)(void *id) = internal_remove_poll; - static int (*wait)(H3270 *hSession, int seconds) + static int (*wait)(H3270 *hSession, int seconds) = internal_wait; static int (*event_dispatcher)(H3270 *hSession,int wait) @@ -633,31 +633,6 @@ void RemoveTimeOut(void * timer) return remove_timeout(timer); } -/* -void * AddInput(int source, H3270 *session, void (*fn)(H3270 *session)) -{ - CHECK_SESSION_HANDLE(session); - return add_input(source,session,fn); -} - -void * AddOutput(int source, H3270 *session, void (*fn)(H3270 *session)) -{ - CHECK_SESSION_HANDLE(session); - return add_output(source,session,fn); -} - -void * AddExcept(int source, H3270 *session, void (*fn)(H3270 *session)) -{ - CHECK_SESSION_HANDLE(session); - return add_except(source,session,fn); -} - -void RemoveSource(void * id) -{ - remove_source(id); -} -*/ - void x_except_on(H3270 *h) { if(h->excepting) @@ -709,7 +684,14 @@ LIB3270_EXPORT void lib3270_register_time_handlers(void * (*add)(unsigned long i } -/* +LIB3270_EXPORT void lib3270_register_fd_handlers(void * (*add)(H3270 *session, int fd, LIB3270_IO_FLAG flag, void(*proc)(H3270 *, int, LIB3270_IO_FLAG, void *), void *userdata), void (*rm)(void *id)) { + if(add) + add_poll = add; + + if(rm) + remove_poll = rm; +} + LIB3270_EXPORT int lib3270_register_handlers(const struct lib3270_callbacks *cbk) { if(!cbk) @@ -719,18 +701,7 @@ LIB3270_EXPORT int lib3270_register_handlers(const struct lib3270_callbacks *cbk return EINVAL; lib3270_register_time_handlers(cbk->AddTimeOut,cbk->RemoveTimeOut); - - if(cbk->AddInput) - add_input = cbk->AddInput; - - if(cbk->AddOutput) - add_output = cbk->AddOutput; - - if(cbk->RemoveSource) - remove_source = cbk->RemoveSource; - - if(cbk->AddExcept) - add_except = cbk->AddExcept; + lib3270_register_fd_handlers(cbk->add_poll,cbk->remove_poll); if(cbk->Wait) wait = cbk->Wait; @@ -744,7 +715,7 @@ LIB3270_EXPORT int lib3270_register_handlers(const struct lib3270_callbacks *cbk return 0; } -*/ + LIB3270_EXPORT void lib3270_iterate(int block) { event_dispatcher(NULL,block); diff --git a/src/plugins/dbus3270/iocallback.c b/src/plugins/dbus3270/iocallback.c index 5337022..21cfca4 100644 --- a/src/plugins/dbus3270/iocallback.c +++ b/src/plugins/dbus3270/iocallback.c @@ -351,6 +351,8 @@ void pw3270_dbus_register_io_handlers(void) }; + #error Need rewrite + if(lib3270_register_handlers(&hdl)) { g_error("%s","Can't set lib3270 I/O handlers"); diff --git a/src/pw3270/v3270/iocallback.c b/src/pw3270/v3270/iocallback.c index 454f58a..0ce6a6d 100644 --- a/src/pw3270/v3270/iocallback.c +++ b/src/pw3270/v3270/iocallback.c @@ -46,8 +46,8 @@ // static int static_CallAndWait(int(*callback)(H3270 *session, void *), H3270 *session, void *parm); static void static_RemoveSource(void *id); -static void * static_AddInput(int source, H3270 *session, void (*fn)(H3270 *session)); -static void * static_AddExcept(int source, H3270 *session, void (*fn)(H3270 *session)); +static void * static_AddSource(H3270 *session, int fd, LIB3270_IO_FLAG flag, void(*proc)(H3270 *, int, LIB3270_IO_FLAG, void *), void *userdata); +static void static_RemoveSource(void *id); static void * static_AddTimeOut(unsigned long interval_ms, H3270 *session, void (*proc)(H3270 *session)); static void static_RemoveTimeOut(void * timer); @@ -66,16 +66,18 @@ static gboolean IO_closure(gpointer data); { GSource gsrc; GPollFD poll; - int source; - void (*fn)(H3270 *session); + int fd; + void (*call)(H3270 *, int, LIB3270_IO_FLAG, void *); H3270 *session; + void *userdata; } IO_Source; typedef struct _timer { unsigned char remove; - void (*fn)(H3270 *session); - H3270 *session; + void * userdata; + void (*call)(H3270 *session); + H3270 * session; } TIMER; static GSourceFuncs IOSources = @@ -90,22 +92,31 @@ static gboolean IO_closure(gpointer data); /*---[ Implement ]-----------------------------------------------------------------------------------------*/ -static void * AddSource(int source, H3270 *session, gushort events, void (*fn)(H3270 *session)) +static void * static_AddSource(H3270 *session, int fd, LIB3270_IO_FLAG flag, void(*call)(H3270 *, int, LIB3270_IO_FLAG, void *), void *userdata) { IO_Source *src = (IO_Source *) g_source_new(&IOSources,sizeof(IO_Source)); - src->source = source; - src->fn = fn; - src->poll.fd = (int) source; - src->poll.events = events; + src->fd = fd; + src->call = call; + src->userdata = userdata; src->session = session; + src->poll.fd = (int) fd; + src->poll.events = G_IO_HUP|G_IO_ERR; + + if(flag & LIB3270_IO_FLAG_READ) + src->poll.events |= G_IO_IN; + + if(flag & LIB3270_IO_FLAG_WRITE) + src->poll.events |= G_IO_OUT; + g_source_attach((GSource *) src,NULL); g_source_add_poll((GSource *) src,&src->poll); return src; } +/* static void * static_AddOutput(int source, H3270 *session, void (*fn)(H3270 *session)) { return AddSource(source,session,G_IO_OUT|G_IO_HUP|G_IO_ERR,fn); @@ -116,6 +127,7 @@ static void * static_AddInput(int source, H3270 *session, void (*fn)(H3270 *sess { return AddSource(source,session,G_IO_IN|G_IO_HUP|G_IO_ERR,fn); } +*/ static void static_RemoveSource(void *id) { @@ -123,23 +135,25 @@ static void static_RemoveSource(void *id) g_source_destroy((GSource *) id); } +/* static void * static_AddExcept(int source, H3270 *session, void (*fn)(H3270 *session)) { return AddSource(source,session,G_IO_HUP|G_IO_ERR,fn); } +*/ static gboolean do_timer(TIMER *t) { if(!t->remove) - t->fn(t->session); + t->call(t->session); return FALSE; } -static void * static_AddTimeOut(unsigned long interval, H3270 *session, void (*proc)(H3270 *session)) +static void * static_AddTimeOut(unsigned long interval, H3270 *session, void (*call)(H3270 *session)) { TIMER *t = g_malloc0(sizeof(TIMER)); - t->fn = proc; + t->call = call; t->session = session; trace("Adding timeout with %ld ms",interval); @@ -232,7 +246,10 @@ static gboolean IO_dispatch(GSource *source, GSourceFunc callback, gpointer user * should call the callback function with user_data and whatever additional * parameters are needed for this type of event source. */ - ((IO_Source *) source)->fn(((IO_Source *) source)->session); + IO_Source *obj = (IO_Source *) source; + + obj->call(obj->session,obj->fd,0,obj->userdata); + return TRUE; } @@ -304,20 +321,9 @@ void v3270_register_io_handlers(v3270Class *cls) static_AddTimeOut, static_RemoveTimeOut, - static_AddInput, - static_AddOutput, - + static_AddSource, static_RemoveSource, - static_AddExcept, - -/* -#ifdef G_THREADS_ENABLED - static_CallAndWait, -#else - NULL, -#endif -*/ static_Sleep, static_RunPendingEvents, beep -- libgit2 0.21.2