diff --git a/src/include/lib3270.h b/src/include/lib3270.h index 5be81ed..4fd5a34 100644 --- a/src/include/lib3270.h +++ b/src/include/lib3270.h @@ -566,10 +566,18 @@ void * (*AddTimeOut)(unsigned long interval_ms, H3270 *session, void (*proc)(H3270 *session)); void (*RemoveTimeOut)(void *timer); +#ifdef WIN32 + void * (*AddInput)(HANDLE source, H3270 *session, void (*fn)(H3270 *session)); +#else void * (*AddInput)(int source, H3270 *session, void (*fn)(H3270 *session)); +#endif // WIN32 void (*RemoveInput)(void *id); +#ifdef WIN32 + void * (*AddExcept)(HANDLE source, H3270 *session, void (*fn)(H3270 *session)); +#else void * (*AddExcept)(int source, H3270 *session, void (*fn)(H3270 *session)); +#endif int (*callthread)(int(*callback)(H3270 *, void *), H3270 *session, void *parm); diff --git a/src/lib3270/host.c b/src/lib3270/host.c index a9f8dfb..54df8ff 100644 --- a/src/lib3270/host.c +++ b/src/lib3270/host.c @@ -570,8 +570,8 @@ static int do_connect(H3270 *hSession, const char *n) /* Setup socket I/O. */ // add_input_calls(hSession,net_input,net_exception); #ifdef _WIN32 - hSession->ns_exception_id = AddExcept((int) hSession->sockEvent, hSession, net_exception); - hSession->ns_read_id = AddInput((int) hSession->sockEvent, hSession, net_input); + hSession->ns_exception_id = AddExcept(hSession->sockEvent, hSession, net_exception); + hSession->ns_read_id = AddInput(hSession->sockEvent, hSession, net_input); #else hSession->ns_exception_id = AddExcept(hSession->sock, hSession, net_exception); hSession->ns_read_id = AddInput(hSession->sock, hSession, net_input); diff --git a/src/lib3270/iocalls.c b/src/lib3270/iocalls.c index a19a91f..99f3a47 100644 --- a/src/lib3270/iocalls.c +++ b/src/lib3270/iocalls.c @@ -50,8 +50,13 @@ static void internal_remove_timeout(void *timer); static void * internal_add_timeout(unsigned long interval_ms, H3270 *session, void (*proc)(H3270 *session)); -static void * internal_add_input(int source, H3270 *session, void (*fn)(H3270 *session)); -static void * internal_add_except(int source, H3270 *session, void (*fn)(H3270 *session)); +#ifdef WIN32 + static void * internal_add_input(HANDLE source, H3270 *session, void (*fn)(H3270 *session)); + static void * internal_add_except(HANDLE source, H3270 *session, void (*fn)(H3270 *session)); +#else + static void * internal_add_input(int source, H3270 *session, void (*fn)(H3270 *session)); + static void * internal_add_except(int source, H3270 *session, void (*fn)(H3270 *session)); +#endif // WIN32 static void internal_remove_input(void *id); @@ -71,14 +76,22 @@ static void internal_ring_bell(H3270 *); static void (*remove_timeout)(void *timer) = internal_remove_timeout; - static void * (*add_input)(int source, H3270 *session, void (*fn)(H3270 *session)) - = internal_add_input; - static void (*remove_input)(void *id) = internal_remove_input; +#ifdef WIN32 + static void * (*add_input)(HANDLE source, H3270 *session, void (*fn)(H3270 *session)) + = internal_add_input; + + static void * (*add_except)(HANDLE source, H3270 *session, void (*fn)(H3270 *session)) + = internal_add_except; +#else + static void * (*add_input)(int source, H3270 *session, void (*fn)(H3270 *session)) + = internal_add_input; + static void * (*add_except)(int source, H3270 *session, void (*fn)(H3270 *session)) = internal_add_except; +#endif // WIN32 static int (*callthread)(int(*callback)(H3270 *, void *), H3270 *session, void *parm) = internal_callthread; @@ -113,7 +126,11 @@ static void internal_ring_bell(H3270 *); typedef struct input { struct input *next; +#if defined(_WIN32) + HANDLE source; +#else int source; +#endif // WIN32 int condition; void (*proc)(H3270 *session); H3270 *session; @@ -239,7 +256,11 @@ static void internal_remove_timeout(void * timer) /* Input events. */ +#ifdef WIN32 +static void * internal_add_input(HANDLE source, H3270 *session, void (*fn)(H3270 *session)) +#else static void * internal_add_input(int source, H3270 *session, void (*fn)(H3270 *session)) +#endif // WIN32 { input_t *ip = (input_t *) lib3270_malloc(sizeof(input_t)); @@ -253,16 +274,19 @@ static void * internal_add_input(int source, H3270 *session, void (*fn)(H3270 *s inputs = ip; inputs_changed = True; - trace("%s: fd=%d callback=%p handle=%p",__FUNCTION__,source,fn,ip); +// trace("%s: fd=%d callback=%p handle=%p",__FUNCTION__,source,fn,ip); return ip; } -static void * internal_add_except(int source, H3270 *session, void (*fn)(H3270 *session)) -{ #if defined(_WIN32) +static void * internal_add_except(HANDLE source, H3270 *session, void (*fn)(H3270 *session)) +{ return 0; +} #else +static void * internal_add_except(int source, H3270 *session, void (*fn)(H3270 *session)) +{ input_t *ip = (input_t *) lib3270_malloc(sizeof(input_t)); trace("%s session=%p proc=%p",__FUNCTION__,session,fn); @@ -278,8 +302,8 @@ static void * internal_add_except(int source, H3270 *session, void (*fn)(H3270 * trace("%s: fd=%d callback=%p handle=%p",__FUNCTION__,source,fn,ip); return ip; -#endif } +#endif // WIN32 static void internal_remove_input(void *id) { @@ -348,7 +372,7 @@ static int internal_event_dispatcher(int block) if ((unsigned long)ip->condition & InputReadMask) { #if defined(_WIN32) - ha[nha++] = (HANDLE) ip->source; + ha[nha++] = ip->source; #else FD_SET(ip->source, &rfds); #endif @@ -546,13 +570,13 @@ void RemoveTimeOut(void * timer) return remove_timeout(timer); } -void * AddInput(int source, H3270 *session, void (*fn)(H3270 *session)) +void * AddInput(HANDLE source, H3270 *session, void (*fn)(H3270 *session)) { CHECK_SESSION_HANDLE(session); return add_input(source,session,fn); } -void * AddExcept(int source, H3270 *session, void (*fn)(H3270 *session)) +void * AddExcept(HANDLE source, H3270 *session, void (*fn)(H3270 *session)) { CHECK_SESSION_HANDLE(session); return add_except(source,session,fn); @@ -572,11 +596,11 @@ void x_except_on(H3270 *h) RemoveInput(h->ns_read_id); #ifdef WIN32 - h->ns_exception_id = AddExcept((int) h->sockEvent, h, net_exception); + h->ns_exception_id = AddExcept(h->sockEvent, h, net_exception); h->excepting = 1; if(h->reading) - h->ns_read_id = AddInput( (int) h->sockEvent, h, net_input); + h->ns_read_id = AddInput(h->sockEvent, h, net_input); #else h->ns_exception_id = AddExcept(h->sock, h, net_exception); h->excepting = 1; diff --git a/src/lib3270/utilc.h b/src/lib3270/utilc.h index 14187b2..80ebc52 100644 --- a/src/lib3270/utilc.h +++ b/src/lib3270/utilc.h @@ -36,10 +36,14 @@ LIB3270_INTERNAL char *xs_buffer(const char *fmt, ...) printflike(1, 2); LIB3270_INTERNAL void xs_error(const char *fmt, ...) printflike(1, 2); LIB3270_INTERNAL void xs_warning(const char *fmt, ...) printflike(1, 2); -LIB3270_INTERNAL void * AddInput(int, H3270 *session, void (*fn)(H3270 *session)); -LIB3270_INTERNAL void * AddExcept(int, H3270 *session, void (*fn)(H3270 *session)); -// LIB3270_INTERNAL void * AddOutput(int, H3270 *session, void (*fn)(H3270 *session)); -LIB3270_INTERNAL void RemoveInput(void *); +#ifdef WIN32 + LIB3270_INTERNAL void * AddInput(HANDLE, H3270 *session, void (*fn)(H3270 *session)); + LIB3270_INTERNAL void * AddExcept(HANDLE, H3270 *session, void (*fn)(H3270 *session)); +#else + LIB3270_INTERNAL void * AddInput(int, H3270 *session, void (*fn)(H3270 *session)); + LIB3270_INTERNAL void * AddExcept(int, H3270 *session, void (*fn)(H3270 *session)); +#endif // WIN32 +LIB3270_INTERNAL void RemoveInput(void *); LIB3270_INTERNAL void * AddTimeOut(unsigned long msec, H3270 *session, void (*fn)(H3270 *session)); LIB3270_INTERNAL void RemoveTimeOut(void *cookie); diff --git a/src/pw3270/v3270/iocallback.c b/src/pw3270/v3270/iocallback.c index 51dbde4..bb35dbf 100644 --- a/src/pw3270/v3270/iocallback.c +++ b/src/pw3270/v3270/iocallback.c @@ -44,14 +44,16 @@ #include "../globals.h" static int static_CallAndWait(int(*callback)(H3270 *session, void *), H3270 *session, void *parm); -static void * static_AddInput(int source, H3270 *session, void (*fn)(H3270 *session)); static void static_RemoveSource(void *id); -//#if !defined(_WIN32) -// static void * static_AddOutput(int source, H3270 *session, void (*fn)(H3270 *session)); -//#endif - +#ifdef WIN32 +static void * static_AddInput(HANDLE source, H3270 *session, void (*fn)(H3270 *session)); +static void * static_AddExcept(HANDLE source, H3270 *session, void (*fn)(H3270 *session)); +#else +static void * static_AddInput(int source, H3270 *session, void (*fn)(H3270 *session)); static void * static_AddExcept(int source, H3270 *session, void (*fn)(H3270 *session)); +#endif // WIN32 + static void * static_AddTimeOut(unsigned long interval_ms, H3270 *session, void (*proc)(H3270 *session)); static void static_RemoveTimeOut(void * timer); static int static_Sleep(int seconds); @@ -69,7 +71,11 @@ static gboolean IO_closure(gpointer data); { GSource gsrc; GPollFD poll; +#if defined(_WIN32) + HANDLE source; +#else int source; +#endif // WIN32 void (*fn)(H3270 *session); H3270 *session; } IO_Source; @@ -93,13 +99,17 @@ static gboolean IO_closure(gpointer data); /*---[ Implement ]-----------------------------------------------------------------------------------------*/ +#ifdef WIN32 +static void * AddSource(HANDLE source, H3270 *session, gushort events, void (*fn)(H3270 *session)) +#else static void * AddSource(int source, H3270 *session, gushort events, void (*fn)(H3270 *session)) +#endif // WIN32 { IO_Source *src = (IO_Source *) g_source_new(&IOSources,sizeof(IO_Source)); src->source = source; src->fn = fn; - src->poll.fd = source; + src->poll.fd = (int) source; src->poll.events = events; g_source_attach((GSource *) src,NULL); @@ -108,7 +118,11 @@ static void * AddSource(int source, H3270 *session, gushort events, void (*fn)(H return src; } +#ifdef WIN32 +static void * static_AddInput(HANDLE source, H3270 *session, void (*fn)(H3270 *session)) +#else static void * static_AddInput(int source, H3270 *session, void (*fn)(H3270 *session)) +#endif // WIN32 { return AddSource(source,session,G_IO_IN|G_IO_HUP|G_IO_ERR,fn); } @@ -119,14 +133,17 @@ static void static_RemoveSource(void *id) g_source_destroy((GSource *) id); } -static void * static_AddExcept(int source, H3270 *session, void (*fn)(H3270 *session)) +#if defined(WIN32) +static void * static_AddExcept(HANDLE source, H3270 *session, void (*fn)(H3270 *session)) { -#if defined(_WIN32) /*[*/ return 0; +} #else +static void * static_AddExcept(int source, H3270 *session, void (*fn)(H3270 *session)) +{ return AddSource(source,session,G_IO_HUP|G_IO_ERR,fn); -#endif } +#endif // WIN32 static gboolean do_timer(TIMER *t) { @@ -182,7 +199,7 @@ static gboolean IO_check(GSource *source) */ #if defined(_WIN32) /*[*/ - if(WaitForSingleObject((HANDLE) ((IO_Source *) source)->source,0) == WAIT_OBJECT_0) + if(WaitForSingleObject(((IO_Source *) source)->source,0) == WAIT_OBJECT_0) return TRUE; #else /*][*/ -- libgit2 0.21.2