From b64640f991932bda111e97dd1eb28553e5202b9e Mon Sep 17 00:00:00 2001 From: fcolin Date: Fri, 12 Mar 2004 09:37:05 +0000 Subject: compile avec MINGW sous WIN32 --- src/ivytcl.c | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) (limited to 'src/ivytcl.c') diff --git a/src/ivytcl.c b/src/ivytcl.c index bdb2a55..68f02f4 100755 --- a/src/ivytcl.c +++ b/src/ivytcl.c @@ -31,7 +31,8 @@ struct _channel { HANDLE fd; void *data; - ChannelHandleDelete handle_delete; + Tcl_Channel tcl_channel; + ChannelHandleDelete handle_delete; ChannelHandleRead handle_read; }; @@ -43,28 +44,30 @@ ChannelInit channel_init = IvyTclChannelInit; ChannelSetUp channel_setup = IvyTclChannelSetUp; ChannelClose channel_close = IvyTclChannelClose; +#ifdef WIN32 +WSADATA WsaData; +#endif + void IvyTclChannelInit(void) { - +#ifdef WIN32 + int error; +#endif if ( channel_initialized ) return; /* pour eviter les plantages quand les autres applis font core-dump */ #ifndef WIN32 signal( SIGPIPE, SIG_IGN); #endif +#ifdef WIN32 + error = WSAStartup (0x0101, &WsaData); + if (error == SOCKET_ERROR) { + printf ("WSAStartup failed.\n"); + } +#endif channel_initialized = 1; } - -void IvyTclChannelClose( Channel channel ) -{ - - if ( channel->handle_delete ) - (*channel->handle_delete)( channel->data ); - Tcl_DeleteFileHandler(channel->fd); - ckfree((char *) channel); -} - static void IvyHandleFd(ClientData cd, int mask) @@ -79,6 +82,17 @@ IvyHandleFd(ClientData cd, (*channel->handle_delete)(channel->data); } } + +void IvyTclChannelClose( Channel channel ) +{ + + if ( channel->handle_delete ) + (*channel->handle_delete)( channel->data ); + Tcl_DeleteChannelHandler(channel->tcl_channel, IvyHandleFd, (ClientData) channel); + ckfree((char *) channel); +} + + Channel IvyTclChannelSetUp(HANDLE fd, void *data, ChannelHandleDelete handle_delete, ChannelHandleRead handle_read @@ -99,7 +113,8 @@ Channel IvyTclChannelSetUp(HANDLE fd, void *data, channel->fd = fd; /*printf("Create handle fd %d\n", fd);*/ - Tcl_CreateFileHandler(fd, TCL_READABLE|TCL_EXCEPTION, IvyHandleFd, (ClientData) channel); + channel->tcl_channel = Tcl_MakeTcpClientChannel((void*)fd); + Tcl_CreateChannelHandler(channel->tcl_channel, TCL_READABLE|TCL_EXCEPTION, IvyHandleFd, (ClientData) channel); return channel; } -- cgit v1.1