Commit 5d217772d17e64e86c91b5eb23730f73549422fd

Authored by perry.werneck@gmail.com
1 parent 4a6475a4
Exists in master and in 1 other branch develop

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
... ...