Commit 5d217772d17e64e86c91b5eb23730f73549422fd
1 parent
4a6475a4
Exists in
master
and in
1 other branch
Atualizando GUI
Showing
1 changed file
with
33 additions
and
27 deletions
Show diff stats
iocallback.c
| ... | ... | @@ -46,8 +46,8 @@ |
| 46 | 46 | // static int static_CallAndWait(int(*callback)(H3270 *session, void *), H3270 *session, void *parm); |
| 47 | 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 | 52 | static void * static_AddTimeOut(unsigned long interval_ms, H3270 *session, void (*proc)(H3270 *session)); |
| 53 | 53 | static void static_RemoveTimeOut(void * timer); |
| ... | ... | @@ -66,16 +66,18 @@ static gboolean IO_closure(gpointer data); |
| 66 | 66 | { |
| 67 | 67 | GSource gsrc; |
| 68 | 68 | GPollFD poll; |
| 69 | - int source; | |
| 70 | - void (*fn)(H3270 *session); | |
| 69 | + int fd; | |
| 70 | + void (*call)(H3270 *, int, LIB3270_IO_FLAG, void *); | |
| 71 | 71 | H3270 *session; |
| 72 | + void *userdata; | |
| 72 | 73 | } IO_Source; |
| 73 | 74 | |
| 74 | 75 | typedef struct _timer |
| 75 | 76 | { |
| 76 | 77 | unsigned char remove; |
| 77 | - void (*fn)(H3270 *session); | |
| 78 | - H3270 *session; | |
| 78 | + void * userdata; | |
| 79 | + void (*call)(H3270 *session); | |
| 80 | + H3270 * session; | |
| 79 | 81 | } TIMER; |
| 80 | 82 | |
| 81 | 83 | static GSourceFuncs IOSources = |
| ... | ... | @@ -90,22 +92,31 @@ static gboolean IO_closure(gpointer data); |
| 90 | 92 | |
| 91 | 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 | 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 | 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 | 113 | g_source_attach((GSource *) src,NULL); |
| 104 | 114 | g_source_add_poll((GSource *) src,&src->poll); |
| 105 | 115 | |
| 106 | 116 | return src; |
| 107 | 117 | } |
| 108 | 118 | |
| 119 | +/* | |
| 109 | 120 | static void * static_AddOutput(int source, H3270 *session, void (*fn)(H3270 *session)) |
| 110 | 121 | { |
| 111 | 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 | 127 | { |
| 117 | 128 | return AddSource(source,session,G_IO_IN|G_IO_HUP|G_IO_ERR,fn); |
| 118 | 129 | } |
| 130 | +*/ | |
| 119 | 131 | |
| 120 | 132 | static void static_RemoveSource(void *id) |
| 121 | 133 | { |
| ... | ... | @@ -123,23 +135,25 @@ static void static_RemoveSource(void *id) |
| 123 | 135 | g_source_destroy((GSource *) id); |
| 124 | 136 | } |
| 125 | 137 | |
| 138 | +/* | |
| 126 | 139 | static void * static_AddExcept(int source, H3270 *session, void (*fn)(H3270 *session)) |
| 127 | 140 | { |
| 128 | 141 | return AddSource(source,session,G_IO_HUP|G_IO_ERR,fn); |
| 129 | 142 | } |
| 143 | +*/ | |
| 130 | 144 | |
| 131 | 145 | static gboolean do_timer(TIMER *t) |
| 132 | 146 | { |
| 133 | 147 | if(!t->remove) |
| 134 | - t->fn(t->session); | |
| 148 | + t->call(t->session); | |
| 135 | 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 | 154 | TIMER *t = g_malloc0(sizeof(TIMER)); |
| 141 | 155 | |
| 142 | - t->fn = proc; | |
| 156 | + t->call = call; | |
| 143 | 157 | t->session = session; |
| 144 | 158 | |
| 145 | 159 | trace("Adding timeout with %ld ms",interval); |
| ... | ... | @@ -232,7 +246,10 @@ static gboolean IO_dispatch(GSource *source, GSourceFunc callback, gpointer user |
| 232 | 246 | * should call the callback function with user_data and whatever additional |
| 233 | 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 | 253 | return TRUE; |
| 237 | 254 | } |
| 238 | 255 | |
| ... | ... | @@ -304,20 +321,9 @@ void v3270_register_io_handlers(v3270Class *cls) |
| 304 | 321 | static_AddTimeOut, |
| 305 | 322 | static_RemoveTimeOut, |
| 306 | 323 | |
| 307 | - static_AddInput, | |
| 308 | - static_AddOutput, | |
| 309 | - | |
| 324 | + static_AddSource, | |
| 310 | 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 | 327 | static_Sleep, |
| 322 | 328 | static_RunPendingEvents, |
| 323 | 329 | beep | ... | ... |