Commit f3a42a7074e512fe63976b226ddc4530e840c60b
1 parent
c15748bc
Exists in
master
and in
5 other branches
Atualizando GUI
Showing
4 changed files
with
50 additions
and
75 deletions
Show diff stats
src/include/lib3270.h
| @@ -685,14 +685,8 @@ | @@ -685,14 +685,8 @@ | ||
| 685 | void * (*AddTimeOut)(unsigned long interval_ms, H3270 *session, void (*proc)(H3270 *session)); | 685 | void * (*AddTimeOut)(unsigned long interval_ms, H3270 *session, void (*proc)(H3270 *session)); |
| 686 | void (*RemoveTimeOut)(void *timer); | 686 | void (*RemoveTimeOut)(void *timer); |
| 687 | 687 | ||
| 688 | - void * (*AddInput)(int source, H3270 *session, void (*fn)(H3270 *session)); | ||
| 689 | - void * (*AddOutput)(int source, H3270 *session, void (*fn)(H3270 *session)); | ||
| 690 | - | ||
| 691 | - void (*RemoveSource)(void *id); | ||
| 692 | - | ||
| 693 | - void * (*AddExcept)(int source, H3270 *session, void (*fn)(H3270 *session)); | ||
| 694 | - | ||
| 695 | -// int (*callthread)(int(*callback)(H3270 *, void *), H3270 *session, void *parm); | 688 | + void * (*add_poll)(H3270 *session, int fd, LIB3270_IO_FLAG flag, void(*proc)(H3270 *, int, LIB3270_IO_FLAG, void *), void *userdata); |
| 689 | + void (*remove_poll)(void *id); | ||
| 696 | 690 | ||
| 697 | int (*Wait)(H3270 *hSession, int seconds); | 691 | int (*Wait)(H3270 *hSession, int seconds); |
| 698 | int (*event_dispatcher)(H3270 *hSession, int wait); | 692 | int (*event_dispatcher)(H3270 *hSession, int wait); |
| @@ -719,6 +713,8 @@ | @@ -719,6 +713,8 @@ | ||
| 719 | */ | 713 | */ |
| 720 | void LIB3270_EXPORT lib3270_register_time_handlers(void * (*add)(unsigned long interval_ms, H3270 *session, void (*proc)(H3270 *session)), void (*rm)(void *timer)); | 714 | void LIB3270_EXPORT lib3270_register_time_handlers(void * (*add)(unsigned long interval_ms, H3270 *session, void (*proc)(H3270 *session)), void (*rm)(void *timer)); |
| 721 | 715 | ||
| 716 | + 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)); | ||
| 717 | + | ||
| 722 | /** | 718 | /** |
| 723 | * Get program message. | 719 | * Get program message. |
| 724 | * | 720 | * |
src/lib3270/iocalls.c
| @@ -79,7 +79,7 @@ static void internal_ring_bell(H3270 *); | @@ -79,7 +79,7 @@ static void internal_ring_bell(H3270 *); | ||
| 79 | static void (*remove_poll)(void *id) | 79 | static void (*remove_poll)(void *id) |
| 80 | = internal_remove_poll; | 80 | = internal_remove_poll; |
| 81 | 81 | ||
| 82 | - static int (*wait)(H3270 *hSession, int seconds) | 82 | + static int (*wait)(H3270 *hSession, int seconds) |
| 83 | = internal_wait; | 83 | = internal_wait; |
| 84 | 84 | ||
| 85 | static int (*event_dispatcher)(H3270 *hSession,int wait) | 85 | static int (*event_dispatcher)(H3270 *hSession,int wait) |
| @@ -633,31 +633,6 @@ void RemoveTimeOut(void * timer) | @@ -633,31 +633,6 @@ void RemoveTimeOut(void * timer) | ||
| 633 | return remove_timeout(timer); | 633 | return remove_timeout(timer); |
| 634 | } | 634 | } |
| 635 | 635 | ||
| 636 | -/* | ||
| 637 | -void * AddInput(int source, H3270 *session, void (*fn)(H3270 *session)) | ||
| 638 | -{ | ||
| 639 | - CHECK_SESSION_HANDLE(session); | ||
| 640 | - return add_input(source,session,fn); | ||
| 641 | -} | ||
| 642 | - | ||
| 643 | -void * AddOutput(int source, H3270 *session, void (*fn)(H3270 *session)) | ||
| 644 | -{ | ||
| 645 | - CHECK_SESSION_HANDLE(session); | ||
| 646 | - return add_output(source,session,fn); | ||
| 647 | -} | ||
| 648 | - | ||
| 649 | -void * AddExcept(int source, H3270 *session, void (*fn)(H3270 *session)) | ||
| 650 | -{ | ||
| 651 | - CHECK_SESSION_HANDLE(session); | ||
| 652 | - return add_except(source,session,fn); | ||
| 653 | -} | ||
| 654 | - | ||
| 655 | -void RemoveSource(void * id) | ||
| 656 | -{ | ||
| 657 | - remove_source(id); | ||
| 658 | -} | ||
| 659 | -*/ | ||
| 660 | - | ||
| 661 | void x_except_on(H3270 *h) | 636 | void x_except_on(H3270 *h) |
| 662 | { | 637 | { |
| 663 | if(h->excepting) | 638 | if(h->excepting) |
| @@ -709,7 +684,14 @@ LIB3270_EXPORT void lib3270_register_time_handlers(void * (*add)(unsigned long i | @@ -709,7 +684,14 @@ LIB3270_EXPORT void lib3270_register_time_handlers(void * (*add)(unsigned long i | ||
| 709 | 684 | ||
| 710 | } | 685 | } |
| 711 | 686 | ||
| 712 | -/* | 687 | +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)) { |
| 688 | + if(add) | ||
| 689 | + add_poll = add; | ||
| 690 | + | ||
| 691 | + if(rm) | ||
| 692 | + remove_poll = rm; | ||
| 693 | +} | ||
| 694 | + | ||
| 713 | LIB3270_EXPORT int lib3270_register_handlers(const struct lib3270_callbacks *cbk) | 695 | LIB3270_EXPORT int lib3270_register_handlers(const struct lib3270_callbacks *cbk) |
| 714 | { | 696 | { |
| 715 | if(!cbk) | 697 | if(!cbk) |
| @@ -719,18 +701,7 @@ LIB3270_EXPORT int lib3270_register_handlers(const struct lib3270_callbacks *cbk | @@ -719,18 +701,7 @@ LIB3270_EXPORT int lib3270_register_handlers(const struct lib3270_callbacks *cbk | ||
| 719 | return EINVAL; | 701 | return EINVAL; |
| 720 | 702 | ||
| 721 | lib3270_register_time_handlers(cbk->AddTimeOut,cbk->RemoveTimeOut); | 703 | lib3270_register_time_handlers(cbk->AddTimeOut,cbk->RemoveTimeOut); |
| 722 | - | ||
| 723 | - if(cbk->AddInput) | ||
| 724 | - add_input = cbk->AddInput; | ||
| 725 | - | ||
| 726 | - if(cbk->AddOutput) | ||
| 727 | - add_output = cbk->AddOutput; | ||
| 728 | - | ||
| 729 | - if(cbk->RemoveSource) | ||
| 730 | - remove_source = cbk->RemoveSource; | ||
| 731 | - | ||
| 732 | - if(cbk->AddExcept) | ||
| 733 | - add_except = cbk->AddExcept; | 704 | + lib3270_register_fd_handlers(cbk->add_poll,cbk->remove_poll); |
| 734 | 705 | ||
| 735 | if(cbk->Wait) | 706 | if(cbk->Wait) |
| 736 | wait = cbk->Wait; | 707 | wait = cbk->Wait; |
| @@ -744,7 +715,7 @@ LIB3270_EXPORT int lib3270_register_handlers(const struct lib3270_callbacks *cbk | @@ -744,7 +715,7 @@ LIB3270_EXPORT int lib3270_register_handlers(const struct lib3270_callbacks *cbk | ||
| 744 | return 0; | 715 | return 0; |
| 745 | 716 | ||
| 746 | } | 717 | } |
| 747 | -*/ | 718 | + |
| 748 | 719 | ||
| 749 | LIB3270_EXPORT void lib3270_iterate(int block) { | 720 | LIB3270_EXPORT void lib3270_iterate(int block) { |
| 750 | event_dispatcher(NULL,block); | 721 | event_dispatcher(NULL,block); |
src/plugins/dbus3270/iocallback.c
| @@ -351,6 +351,8 @@ void pw3270_dbus_register_io_handlers(void) | @@ -351,6 +351,8 @@ void pw3270_dbus_register_io_handlers(void) | ||
| 351 | 351 | ||
| 352 | }; | 352 | }; |
| 353 | 353 | ||
| 354 | + #error Need rewrite | ||
| 355 | + | ||
| 354 | if(lib3270_register_handlers(&hdl)) | 356 | if(lib3270_register_handlers(&hdl)) |
| 355 | { | 357 | { |
| 356 | g_error("%s","Can't set lib3270 I/O handlers"); | 358 | g_error("%s","Can't set lib3270 I/O handlers"); |
src/pw3270/v3270/iocallback.c
| @@ -46,8 +46,8 @@ | @@ -46,8 +46,8 @@ | ||
| 46 | // static int static_CallAndWait(int(*callback)(H3270 *session, void *), H3270 *session, void *parm); | 46 | // static int static_CallAndWait(int(*callback)(H3270 *session, void *), H3270 *session, void *parm); |
| 47 | static void static_RemoveSource(void *id); | 47 | static void static_RemoveSource(void *id); |
| 48 | 48 | ||
| 49 | -static void * static_AddInput(int source, H3270 *session, void (*fn)(H3270 *session)); | ||
| 50 | -static void * static_AddExcept(int source, H3270 *session, void (*fn)(H3270 *session)); | 49 | +static void * static_AddSource(H3270 *session, int fd, LIB3270_IO_FLAG flag, void(*proc)(H3270 *, int, LIB3270_IO_FLAG, void *), void *userdata); |
| 50 | +static void static_RemoveSource(void *id); | ||
| 51 | 51 | ||
| 52 | static void * static_AddTimeOut(unsigned long interval_ms, H3270 *session, void (*proc)(H3270 *session)); | 52 | static void * static_AddTimeOut(unsigned long interval_ms, H3270 *session, void (*proc)(H3270 *session)); |
| 53 | static void static_RemoveTimeOut(void * timer); | 53 | static void static_RemoveTimeOut(void * timer); |
| @@ -66,16 +66,18 @@ static gboolean IO_closure(gpointer data); | @@ -66,16 +66,18 @@ static gboolean IO_closure(gpointer data); | ||
| 66 | { | 66 | { |
| 67 | GSource gsrc; | 67 | GSource gsrc; |
| 68 | GPollFD poll; | 68 | GPollFD poll; |
| 69 | - int source; | ||
| 70 | - void (*fn)(H3270 *session); | 69 | + int fd; |
| 70 | + void (*call)(H3270 *, int, LIB3270_IO_FLAG, void *); | ||
| 71 | H3270 *session; | 71 | H3270 *session; |
| 72 | + void *userdata; | ||
| 72 | } IO_Source; | 73 | } IO_Source; |
| 73 | 74 | ||
| 74 | typedef struct _timer | 75 | typedef struct _timer |
| 75 | { | 76 | { |
| 76 | unsigned char remove; | 77 | unsigned char remove; |
| 77 | - void (*fn)(H3270 *session); | ||
| 78 | - H3270 *session; | 78 | + void * userdata; |
| 79 | + void (*call)(H3270 *session); | ||
| 80 | + H3270 * session; | ||
| 79 | } TIMER; | 81 | } TIMER; |
| 80 | 82 | ||
| 81 | static GSourceFuncs IOSources = | 83 | static GSourceFuncs IOSources = |
| @@ -90,22 +92,31 @@ static gboolean IO_closure(gpointer data); | @@ -90,22 +92,31 @@ static gboolean IO_closure(gpointer data); | ||
| 90 | 92 | ||
| 91 | /*---[ Implement ]-----------------------------------------------------------------------------------------*/ | 93 | /*---[ Implement ]-----------------------------------------------------------------------------------------*/ |
| 92 | 94 | ||
| 93 | -static void * AddSource(int source, H3270 *session, gushort events, void (*fn)(H3270 *session)) | 95 | +static void * static_AddSource(H3270 *session, int fd, LIB3270_IO_FLAG flag, void(*call)(H3270 *, int, LIB3270_IO_FLAG, void *), void *userdata) |
| 94 | { | 96 | { |
| 95 | IO_Source *src = (IO_Source *) g_source_new(&IOSources,sizeof(IO_Source)); | 97 | IO_Source *src = (IO_Source *) g_source_new(&IOSources,sizeof(IO_Source)); |
| 96 | 98 | ||
| 97 | - src->source = source; | ||
| 98 | - src->fn = fn; | ||
| 99 | - src->poll.fd = (int) source; | ||
| 100 | - src->poll.events = events; | 99 | + src->fd = fd; |
| 100 | + src->call = call; | ||
| 101 | + src->userdata = userdata; | ||
| 101 | src->session = session; | 102 | src->session = session; |
| 102 | 103 | ||
| 104 | + src->poll.fd = (int) fd; | ||
| 105 | + src->poll.events = G_IO_HUP|G_IO_ERR; | ||
| 106 | + | ||
| 107 | + if(flag & LIB3270_IO_FLAG_READ) | ||
| 108 | + src->poll.events |= G_IO_IN; | ||
| 109 | + | ||
| 110 | + if(flag & LIB3270_IO_FLAG_WRITE) | ||
| 111 | + src->poll.events |= G_IO_OUT; | ||
| 112 | + | ||
| 103 | g_source_attach((GSource *) src,NULL); | 113 | g_source_attach((GSource *) src,NULL); |
| 104 | g_source_add_poll((GSource *) src,&src->poll); | 114 | g_source_add_poll((GSource *) src,&src->poll); |
| 105 | 115 | ||
| 106 | return src; | 116 | return src; |
| 107 | } | 117 | } |
| 108 | 118 | ||
| 119 | +/* | ||
| 109 | static void * static_AddOutput(int source, H3270 *session, void (*fn)(H3270 *session)) | 120 | static void * static_AddOutput(int source, H3270 *session, void (*fn)(H3270 *session)) |
| 110 | { | 121 | { |
| 111 | return AddSource(source,session,G_IO_OUT|G_IO_HUP|G_IO_ERR,fn); | 122 | 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 | @@ -116,6 +127,7 @@ static void * static_AddInput(int source, H3270 *session, void (*fn)(H3270 *sess | ||
| 116 | { | 127 | { |
| 117 | return AddSource(source,session,G_IO_IN|G_IO_HUP|G_IO_ERR,fn); | 128 | return AddSource(source,session,G_IO_IN|G_IO_HUP|G_IO_ERR,fn); |
| 118 | } | 129 | } |
| 130 | +*/ | ||
| 119 | 131 | ||
| 120 | static void static_RemoveSource(void *id) | 132 | static void static_RemoveSource(void *id) |
| 121 | { | 133 | { |
| @@ -123,23 +135,25 @@ static void static_RemoveSource(void *id) | @@ -123,23 +135,25 @@ static void static_RemoveSource(void *id) | ||
| 123 | g_source_destroy((GSource *) id); | 135 | g_source_destroy((GSource *) id); |
| 124 | } | 136 | } |
| 125 | 137 | ||
| 138 | +/* | ||
| 126 | static void * static_AddExcept(int source, H3270 *session, void (*fn)(H3270 *session)) | 139 | static void * static_AddExcept(int source, H3270 *session, void (*fn)(H3270 *session)) |
| 127 | { | 140 | { |
| 128 | return AddSource(source,session,G_IO_HUP|G_IO_ERR,fn); | 141 | return AddSource(source,session,G_IO_HUP|G_IO_ERR,fn); |
| 129 | } | 142 | } |
| 143 | +*/ | ||
| 130 | 144 | ||
| 131 | static gboolean do_timer(TIMER *t) | 145 | static gboolean do_timer(TIMER *t) |
| 132 | { | 146 | { |
| 133 | if(!t->remove) | 147 | if(!t->remove) |
| 134 | - t->fn(t->session); | 148 | + t->call(t->session); |
| 135 | return FALSE; | 149 | return FALSE; |
| 136 | } | 150 | } |
| 137 | 151 | ||
| 138 | -static void * static_AddTimeOut(unsigned long interval, H3270 *session, void (*proc)(H3270 *session)) | 152 | +static void * static_AddTimeOut(unsigned long interval, H3270 *session, void (*call)(H3270 *session)) |
| 139 | { | 153 | { |
| 140 | TIMER *t = g_malloc0(sizeof(TIMER)); | 154 | TIMER *t = g_malloc0(sizeof(TIMER)); |
| 141 | 155 | ||
| 142 | - t->fn = proc; | 156 | + t->call = call; |
| 143 | t->session = session; | 157 | t->session = session; |
| 144 | 158 | ||
| 145 | trace("Adding timeout with %ld ms",interval); | 159 | trace("Adding timeout with %ld ms",interval); |
| @@ -232,7 +246,10 @@ static gboolean IO_dispatch(GSource *source, GSourceFunc callback, gpointer user | @@ -232,7 +246,10 @@ static gboolean IO_dispatch(GSource *source, GSourceFunc callback, gpointer user | ||
| 232 | * should call the callback function with user_data and whatever additional | 246 | * should call the callback function with user_data and whatever additional |
| 233 | * parameters are needed for this type of event source. | 247 | * parameters are needed for this type of event source. |
| 234 | */ | 248 | */ |
| 235 | - ((IO_Source *) source)->fn(((IO_Source *) source)->session); | 249 | + IO_Source *obj = (IO_Source *) source; |
| 250 | + | ||
| 251 | + obj->call(obj->session,obj->fd,0,obj->userdata); | ||
| 252 | + | ||
| 236 | return TRUE; | 253 | return TRUE; |
| 237 | } | 254 | } |
| 238 | 255 | ||
| @@ -304,20 +321,9 @@ void v3270_register_io_handlers(v3270Class *cls) | @@ -304,20 +321,9 @@ void v3270_register_io_handlers(v3270Class *cls) | ||
| 304 | static_AddTimeOut, | 321 | static_AddTimeOut, |
| 305 | static_RemoveTimeOut, | 322 | static_RemoveTimeOut, |
| 306 | 323 | ||
| 307 | - static_AddInput, | ||
| 308 | - static_AddOutput, | ||
| 309 | - | 324 | + static_AddSource, |
| 310 | static_RemoveSource, | 325 | static_RemoveSource, |
| 311 | 326 | ||
| 312 | - static_AddExcept, | ||
| 313 | - | ||
| 314 | -/* | ||
| 315 | -#ifdef G_THREADS_ENABLED | ||
| 316 | - static_CallAndWait, | ||
| 317 | -#else | ||
| 318 | - NULL, | ||
| 319 | -#endif | ||
| 320 | -*/ | ||
| 321 | static_Sleep, | 327 | static_Sleep, |
| 322 | static_RunPendingEvents, | 328 | static_RunPendingEvents, |
| 323 | beep | 329 | beep |