From f94ece0bcc51dba3f431d82032c3d82d4e4a616a Mon Sep 17 00:00:00 2001 From: fcolin Date: Wed, 20 Dec 2000 15:58:44 +0000 Subject: initial version for the glut eventloop --- src/ivyglutloop.c | 131 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/ivyglutloop.h | 56 +++++++++++++++++++++++ 2 files changed, 187 insertions(+) create mode 100755 src/ivyglutloop.c create mode 100755 src/ivyglutloop.h (limited to 'src') diff --git a/src/ivyglutloop.c b/src/ivyglutloop.c new file mode 100755 index 0000000..b78c183 --- /dev/null +++ b/src/ivyglutloop.c @@ -0,0 +1,131 @@ +/* + * Ivy, C interface + * + * Copyright (C) 1997-1999 + * Centre d'Études de la Navigation Aérienne + * + * Main loop based on GLUT ( OpenGL ) Toolkit + * + * Authors: François-Régis Colin + * Stéphane Chatty + * + * $Id$ + * + * Please refer to file version.h for the + * copyright notice regarding this software + */ + +#ifdef WIN32 +#include +#endif +#include +#include +#include +#include +#include + +#ifdef WIN32 +#else +#include +#include +#include +#include +#include +#include +#include +#include +#endif + + +#include + +#include "ivychannel.h" +#include "ivyglutloop.h" + +struct _channel { + GLUTInputId id_read; + GLUTInputId id_delete; + void *data; + ChannelHandleDelete handle_delete; + ChannelHandleRead handle_read; + }; + + +static int channel_initialized = 0; + +ChannelInit channel_init = IvyGlutChannelInit; +ChannelSetUp channel_setup = IvyGlutChannelSetUp; +ChannelClose channel_close = IvyGlutChannelClose; + + +void IvyGlutChannelInit(void) +{ + + if ( channel_initialized ) return; + + /* pour eviter les plantages quand les autres applis font core-dump */ +#ifndef WIN32 + signal( SIGPIPE, SIG_IGN); +#endif + channel_initialized = 1; +} + +void IvyGlutChannelClose( Channel channel ) +{ + + if ( channel->handle_delete ) + (*channel->handle_delete)( channel->data ); + glutRemoveInput( channel->id_read ); + glutRemoveInput( channel->id_delete ); +} + + +static void IvyGlutHandleChannelRead( int source, GLUTInputId id, void *data ) +{ + Channel channel = (Channel)data; +#ifdef DEBUG + printf("Handle Channel read %d\n",source ); +#endif + (*channel->handle_read)(channel,source,channel->data); +} + +static void IvyGlutHandleChannelDelete( int source, GLUTInputId id, void *data ) +{ + Channel channel = (Channel)data; +#ifdef DEBUG + printf("Handle Channel delete %d\n",source ); +#endif + (*channel->handle_delete)(channel->data); +} + +Channel IvyGlutChannelSetUp(HANDLE fd, void *data, + ChannelHandleDelete handle_delete, + ChannelHandleRead handle_read + ) +{ + Channel channel; + + channel = (Channel)malloc( sizeof(struct _channel) ); + if ( !channel ) + { + fprintf(stderr,"NOK Memory Alloc Error\n"); + exit(0); + } + + channel->handle_delete = handle_delete; + channel->handle_read = handle_read; + channel->data = data; + + channel->id_read = glutAddInput( fd, IvyGlutHandleChannelRead, channel); + channel->id_delete = glutAddInput( fd, IvyGlutHandleChannelDelete, channel); + + return channel; +} + + +void +IvyStop () +{ + /* To be implemented */ +} + diff --git a/src/ivyglutloop.h b/src/ivyglutloop.h new file mode 100755 index 0000000..0819a93 --- /dev/null +++ b/src/ivyglutloop.h @@ -0,0 +1,56 @@ +/* + * Ivy, C interface + * + * Copyright (C) 1997-1999 + * Centre d'Études de la Navigation Aérienne + * + * Main loop based on GLUT ( OpenGL ) Toolkit + * + * Authors: François-Régis Colin + * Stéphane Chatty + * + * $Id$ + * + * Please refer to file version.h for the + * copyright notice regarding this software + */ + +#ifndef IVYGLUTLOOP_H +#define IVYGLUTLOOP_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/* general Handle */ + +#define ANYPORT 0 + +#ifdef WIN32 +#include +#define HANDLE SOCKET +#else +#define HANDLE int +#endif + +#include "ivychannel.h" + +extern void IvyGlutChannelInit(void); + +extern Channel IvyGlutChannelSetUp( + HANDLE fd, + void *data, + ChannelHandleDelete handle_delete, + ChannelHandleRead handle_read +); + +extern void IvyGlutChannelClose( Channel channel ); + +#ifdef __cplusplus +} +#endif + +#endif + -- cgit v1.1