summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordrouin2004-09-01 15:54:51 +0000
committerdrouin2004-09-01 15:54:51 +0000
commit12751e3fc02e45da1198b82dadf83fe861ebfd1e (patch)
treea56a2fdb4d4640dc29b5e3d080265d4d164f6b5d
parentd95d579469c04a581fd5559e96d28b88293613c3 (diff)
downloadivy-c-12751e3fc02e45da1198b82dadf83fe861ebfd1e.zip
ivy-c-12751e3fc02e45da1198b82dadf83fe861ebfd1e.tar.gz
ivy-c-12751e3fc02e45da1198b82dadf83fe861ebfd1e.tar.bz2
ivy-c-12751e3fc02e45da1198b82dadf83fe861ebfd1e.tar.xz
replaced the gtk mainloop with a glib one. added -Wall compile directive . fixed some warnings
-rw-r--r--examples/Makefile11
-rw-r--r--examples/gtkIvyButton.c38
-rw-r--r--examples/motifButtonIvy.c1
-rw-r--r--src/Makefile54
-rw-r--r--src/ivy.c5
-rw-r--r--src/ivyglibloop.c127
-rw-r--r--src/ivyglibloop.h50
-rw-r--r--src/ivygtkloop.c133
-rw-r--r--src/ivygtkloop.h55
-rw-r--r--src/ivyprobe.c26
-rw-r--r--src/ivysocket.c2
-rwxr-xr-xsrc/ivytcl.c22
-rw-r--r--src/list.h2
13 files changed, 260 insertions, 266 deletions
diff --git a/examples/Makefile b/examples/Makefile
index 659c8a0..d119c1e 100644
--- a/examples/Makefile
+++ b/examples/Makefile
@@ -1,18 +1,19 @@
.SUFFIXES: .c .o
- CC = gcc -g
+ CC = gcc -g -Wall
TARGETS = motifButtonIvy gtkIvyButton testUnbind
SRCS = motifButtonIvy.c gtkIvyButton.c testUnbind.c
OBJS = $(SRCS:.c=.o)
PCRELIB = `pcre-config --libs`
EXTRALIB= -L../src
+EXTRAINC=-I../src
GTKLIB = `pkg-config gtk+-x11-2.0 --libs`
GTKINC = `pkg-config gtk+-x11-2.0 --cflags`
MOTIFINC=
MOTIFLIB= -L/usr/X11R6/lib -lXm -lXt -lX11
#MOTIFINC= -I/sw/include
#MOTIFLIB= -L/sw/lib -L/usr/X11R6/lib -lXm -lXt -lX11
-
+
all: $(TARGETS)
@@ -20,10 +21,10 @@ testUnbind: testUnbind.o
$(CC) -o $@ $< -livy $(PCRELIB) $(EXTRALIB)
gtkIvyButton.o: gtkIvyButton.c
- $(CC) -c $< $(GTKINC)
+ $(CC) -c $< $(GTKINC) $(EXTRAINC)
gtkIvyButton: gtkIvyButton.o
- $(CC) -o $@ $< $(GTKLIB) -lgivy $(EXTRALIB)
+ $(CC) -o $@ $< $(GTKLIB) $(EXTRALIB) $(PCRELIB) -lglibivy
motifButtonIvy.o: motifButtonIvy.c
$(CC) -c $< $(MOTIFINC) $(EXTRALIB)
@@ -32,4 +33,4 @@ motifButtonIvy: motifButtonIvy.o
$(CC) -o $@ $< $(MOTIFLIB) -lxtivy -lpcre $(EXTRALIB)
clean:
- rm -fR $(OBJS) $(TARGETS)
+ rm -fR $(OBJS) $(TARGETS) *~
diff --git a/examples/gtkIvyButton.c b/examples/gtkIvyButton.c
index be8cc4a..aba5ea7 100644
--- a/examples/gtkIvyButton.c
+++ b/examples/gtkIvyButton.c
@@ -1,34 +1,34 @@
#include <gtk/gtk.h>
#include <ivy.h>
-#include <ivygtkloop.h>
+#include <ivyglibloop.h>
#include <stdio.h>
#include <stdlib.h>
-void hello( GtkWidget *widget, gpointer data ) {
- fprintf(stderr,"%s\n",*((char**)data));
- IvySendMsg(*((char**)data));
+
+
+
+void sendText( GtkWidget *widget, gpointer user_data ) {
+ IvySendMsg(gtk_label_get_text(GTK_LABEL(gtk_bin_get_child(GTK_BIN(widget)))));
}
-void textCallback(IvyClientPtr app, void *user_data, int argc, char *argv[]){
- *((char **)user_data)=argv[0];
+void setText(IvyClientPtr app, void *user_data, int argc, char *argv[]){
+ gtk_label_set_text(GTK_LABEL(gtk_bin_get_child(GTK_BIN(user_data))), argv[0]);
}
int main( int argc, char *argv[] ) {
GtkWidget *window;
GtkWidget *button;
char *bus=getenv("IVYBUS");
- char *tosend="foo";
- gtk_init (&argc, &argv);
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_container_set_border_width (GTK_CONTAINER (window), 10);
- button = gtk_button_new_with_label ("send message");
- g_signal_connect (G_OBJECT(button),"clicked",G_CALLBACK(hello),&tosend);
- gtk_container_add (GTK_CONTAINER(window),button);
- gtk_widget_show (button);
- gtk_widget_show (window);
- IvyInit ("IvyGtkButton", "IvyGtkButton READY",NULL,NULL,NULL,NULL);
- IvyBindMsg(textCallback,&tosend,"^Ivy Button text=(.*)");
- IvyStart (bus);
- gtk_main ();
+ gtk_init(&argc, &argv);
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_container_set_border_width(GTK_CONTAINER (window), 10);
+ button = gtk_button_new_with_label("ivy is cool");
+ gtk_container_add (GTK_CONTAINER(window), button);
+ g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(sendText), NULL);
+ gtk_widget_show_all (window);
+ IvyInit ("IvyGtkButton", "IvyGtkButton READY", NULL, NULL, NULL, NULL);
+ IvyBindMsg(setText, button, "^Ivy Button text=(.*)");
+ IvyStart(bus);
+ gtk_main();
return 0;
}
diff --git a/examples/motifButtonIvy.c b/examples/motifButtonIvy.c
index f4336aa..084359f 100644
--- a/examples/motifButtonIvy.c
+++ b/examples/motifButtonIvy.c
@@ -34,4 +34,5 @@ int main(int argc,char *argv[]){
IvyBindMsg(textCallback,&tosend,"^Ivy Button text=(.*)");
IvyStart(bus);
XtAppMainLoop(app_context);
+ return 0;
}
diff --git a/src/Makefile b/src/Makefile
index 7b14a4c..3a89714 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -7,8 +7,8 @@
# Makefile
#
# Authors: François-Régis Colin <fcolin@cena.fr>
-# Stéphane Chatty <chatty@cena.fr>
-# Yannick Jestin <jestin@cena.fr>
+# Stéphane Chatty <chatty@cena.fr>
+# Yannick Jestin <jestin@cena.fr>
#
# Please refer to file version.h for the
# copyright notice regarding this software
@@ -21,8 +21,8 @@ MINOR=6
XTINC = -I/usr/X11R6/include
XTLIB = -L/usr/X11R6/lib -lXt -lX11 -lSM -lICE
-GTKINC = `gtk-config --cflags`
-GTKLIB = `gtk-config --libs`
+GLIBINC = `pkg-config --cflags glib-2.0`
+GLIBLIB = `pkg-config --libs glib-2.0`
GLUTINC = -I/usr/include -I.
GLUTLIB = -L. -lglut -lGLU -lGL -lX11 -lXmu
# use these if you want standard Tcl ( 8.3 on debian woody ... )
@@ -50,17 +50,17 @@ REGEXP = -DUSE_PCRE_REGEX
# on activeTCL , set #define CHANNEL to null, and add ivyloop.o in the ivytcl target,
# see below
CHANNEL = -DTCL_CHANNEL_INTEGRATION
-CFLAGS = -g
+CFLAGS = -g -Wall
OBJ = ivyloop.o timer.o ivysocket.o ivy.o
GOBJ = ivyloop.o timer.o ivysocket.o givy.o
XTOBJ = ivyxtloop.o ivysocket.o ivy.o
-GTKOBJ = ivygtkloop.o ivysocket.o ivy.o
+GLIBOBJ = ivyglibloop.o ivysocket.o ivy.o
GLUTOBJ = ivyglutloop.o ivysocket.o ivy.o
TCLOBJ = ivytcl.o timer.o ivysocket.o givy.o
# WINDOWS add ivyloop.o if TCL_CHANNEL_INTEGRATION is not set
-TARGETS = ivyprobe ivygtkprobe ivyxtprobe
-TARGETLIBS=libivy.so.$(MAJOR).$(MINOR) libgivy.so.$(MAJOR).$(MINOR) libxtivy.so.$(MAJOR).$(MINOR) libgtkivy.so.$(MAJOR).$(MINOR) libtclivy.so.$(MAJOR).$(MINOR)
+TARGETS = ivyprobe ivyglibprobe ivyxtprobe
+TARGETLIBS=libivy.so.$(MAJOR).$(MINOR) libgivy.so.$(MAJOR).$(MINOR) libxtivy.so.$(MAJOR).$(MINOR) libglibivy.so.$(MAJOR).$(MINOR) libtclivy.so.$(MAJOR).$(MINOR)
# not yet need Modified Glut ivyglutprobe
.c.o:
@@ -68,7 +68,7 @@ TARGETLIBS=libivy.so.$(MAJOR).$(MINOR) libgivy.so.$(MAJOR).$(MINOR) libxtivy.so.
all: static-libs commands shared-libs
-static-libs: libivy.a libgivy.a libxtivy.a libgtkivy.a libtclivy.a
+static-libs: libivy.a libgivy.a libxtivy.a libglibivy.a libtclivy.a
# not yet need Modified Glut libglutivy.a
shared-libs: $(TARGETLIBS)
@@ -88,8 +88,8 @@ givy.o: ivy.c
ivyglutloop.o: ivyglutloop.c ivyglutloop.h
$(CC) -c $(CFLAGS) $(GLUTINC) ivyglutloop.c
-ivygtkloop.o: ivygtkloop.c ivygtkloop.h
- $(CC) -c $(CFLAGS) $(GTKINC) ivygtkloop.c
+ivyglibloop.o: ivyglibloop.c ivyglibloop.h
+ $(CC) -c $(CFLAGS) $(GLIBINC) ivyglibloop.c
ivyprobe: ivyprobe.o
$(CC) $(CFLAGS) -o $@ ivyprobe.o -L. -livy $(PCRELIB) $(EXTRALIB)
@@ -103,11 +103,11 @@ ivyxtprobe.o : ivyprobe.c
ivyxtprobe: ivyxtprobe.o libxtivy.a
$(CC) -o $@ ivyxtprobe.o -L. $(XTLIB) -lxtivy $(PCRELIB) $(EXTRALIB)
-ivygtkprobe.o : ivyprobe.c
- $(CC) $(CFLAGS) $(REGEXP) -DGTKMAINLOOP -c ivyprobe.c -o ivygtkprobe.o $(XTINC)
+ivyglibprobe.o : ivyprobe.c
+ $(CC) $(CFLAGS) $(REGEXP) -DGLIBMAINLOOP -c ivyprobe.c -o ivyglibprobe.o $(GLIBINC)
-ivygtkprobe: ivygtkprobe.o libgtkivy.a
- $(CC) -o ivygtkprobe ivygtkprobe.o -L. $(GTKLIB) -lgtkivy $(PCRELIB) $(EXTRALIB)
+ivyglibprobe: ivyglibprobe.o libglibivy.a
+ $(CC) -o ivyglibprobe ivyglibprobe.o -L. $(GLIBLIB) -lglibivy $(PCRELIB) $(EXTRALIB)
ivyglutprobe.o : ivyprobe.c
$(CC) $(CFLAGS) $(REGEXP) -DGLUTMAINLOOP -c ivyprobe.c -o ivyglutprobe.o $(GLUTINC)
@@ -127,9 +127,9 @@ libxtivy.a: $(XTOBJ)
rm -f $@
$(LIBTOOL) $@ $(XTOBJ)
-libgtkivy.a: $(GTKOBJ)
+libglibivy.a: $(GLIBOBJ)
rm -f $@
- $(LIBTOOL) $@ $(GTKOBJ)
+ $(LIBTOOL) $@ $(GLIBOBJ)
libglutivy.a: $(GLUTOBJ)
rm -f $@
@@ -155,12 +155,12 @@ libxtivy.so.$(MAJOR).$(MINOR): $(XTOBJ)
# $(CC) -G -Wl,-h,libxtivy.so.$(MAJOR) -o $@ $(XTOBJ) $(XTLIB) #solaris
# libtool -dynamic -o $@ $(XTOBJ) $(XTLIB) $(PCRELIB) -lc
-libgtkivy.so.$(MAJOR).$(MINOR): $(GTKOBJ)
- $(CC) -shared -Wl,-soname,libgtkivy.so.$(MAJOR) -o $@ $(GTKOBJ) $(GTKLIB) $(PCRELIB)
-# $(CC) -G -Wl,-h,libgtkivy.so.$(MAJOR) -o $@ $(GTKOBJ) $(GTKLIB) #solaris
-# libtool -dynamic -o $@ $(GTKOBJ) $(GTKLIB) $(PCRELIB) -lc
+libglibivy.so.$(MAJOR).$(MINOR): $(GLIBOBJ)
+ $(CC) -shared -Wl,-soname,libglibivy.so.$(MAJOR) -o $@ $(GLIBOBJ) $(GLIBLIB) $(PCRELIB)
+# $(CC) -G -Wl,-h,libglibivy.so.$(MAJOR) -o $@ $(GLIBOBJ) $(GLIBLIB) #solaris
+# libtool -dynamic -o $@ $(GLIBOBJ) $(GLIBLIB) $(PCRELIB) -lc
-libglutivy.so.$(MAJOR).$(MINOR): $(GTKOBJ)
+libglutivy.so.$(MAJOR).$(MINOR): $(GLIBOBJ)
$(CC) -shared -Wl,-soname,libglutivy.so.$(MAJOR) -o $@ $(GLUTOBJ) $(GLUTLIB) $(PCRELIB)
# $(CC) -G -Wl,-h,libglutivy.so.$(MAJOR) -o $@ $(GLUTOBJ) $(GLUTLIB) # solaris
# libtool -dynamic -o $@ $(GLUTOBJ) $(GLUTLIB) $(PCRELIB) -lc
@@ -181,13 +181,13 @@ installlibs: static-libs shared-libs
install -m644 libgivy.a $(PREFIX)/usr/lib
install -m644 libxtivy.a $(PREFIX)/usr/X11R6/lib
install -m644 libtclivy.a $(PREFIX)/usr/lib
- install -m644 libgtkivy.a $(PREFIX)/usr/X11R6/lib
+ install -m644 libglibivy.a $(PREFIX)/usr/lib
install -m644 libivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib
install -m644 libgivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib
install -m644 libxtivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/X11R6/lib
install -m644 libtclivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib
- install -m644 libgtkivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/X11R6/lib
+ install -m644 libglibivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib
install -m644 *.h $(PREFIX)/usr/include
@@ -199,8 +199,8 @@ installliblinks: installlibs
ln -s /usr/lib/libgivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib/libgivy.so.$(MAJOR)
ln -s /usr/X11R6/lib/libxtivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/X11R6/lib/libxtivy.so
ln -s /usr/X11R6/lib/libxtivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/X11R6/lib/libxtivy.so.$(MAJOR)
- ln -s /usr/X11R6/lib/libgtkivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/X11R6/lib/libgtkivy.so
- ln -s /usr/X11R6/lib/libgtkivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/X11R6/lib/libgtkivy.so.$(MAJOR)
+ ln -s /usr/X11R6/lib/libglibivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/X11R6/lib/libglibivy.so
+ ln -s /usr/X11R6/lib/libglibivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/X11R6/lib/libglibivy.so.$(MAJOR)
ln -s /usr/X11R6/lib/libtclivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/X11R6/lib/libtclivy.so
ln -s /usr/X11R6/lib/libtclivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/X11R6/lib/libtclivy.so.$(MAJOR)
@@ -209,7 +209,7 @@ installbins: commands
test -d $(PREFIX)/usr/X11R6/bin || mkdirhier $(PREFIX)/usr/X11R6/bin
install -m755 ivyprobe $(PREFIX)/usr/bin
#install -m755 ivyxtprobe $(PREFIX)/usr/X11R6/bin
- #install -m755 ivygtkprobe $(PREFIX)/usr/X11R6/bin
+ #install -m755 ivyglibprobe $(PREFIX)/usr/bin
#install -m755 ivyglutprobe $(PREFIX)/usr/X11R6/bin
installdocs:
diff --git a/src/ivy.c b/src/ivy.c
index 1a019c8..548f9f8 100644
--- a/src/ivy.c
+++ b/src/ivy.c
@@ -17,7 +17,7 @@
*/
#include <stdlib.h>
-
+#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
@@ -322,7 +322,7 @@ static int CheckConnected( IvyClientPtr clnt )
static void Receive( Client client, void *data, char *line )
{
IvyClientPtr clnt;
- int err,id,reg;
+ int err,id;
MsgSndPtr snd;
MsgRcvPtr rcv;
int argc = 0;
@@ -331,6 +331,7 @@ static void Receive( Client client, void *data, char *line )
int kind_of_msg = Bye;
#ifndef USE_PCRE_REGEX
regex_t regexp;
+ int reg;
#else
pcre *regexp;
const char *errbuf;
diff --git a/src/ivyglibloop.c b/src/ivyglibloop.c
new file mode 100644
index 0000000..968824a
--- /dev/null
+++ b/src/ivyglibloop.c
@@ -0,0 +1,127 @@
+/*
+ * Ivy, C interface
+ *
+ * Copyright (C) 1997-2000
+ * Centre d'Études de la Navigation Aérienne
+ *
+ * Main loop based on the Gtk Toolkit
+ *
+ * Authors: François-Régis Colin <fcolin@cena.fr>
+ *
+ * $Id$
+ *
+ * Please refer to file version.h for the
+ * copyright notice regarding this software
+ */
+
+#ifdef WIN32
+#include <windows.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <string.h>
+#else
+#include <signal.h>
+#endif
+
+#include <glib.h>
+
+#include "ivyglibloop.h"
+
+struct _channel {
+ guint id_read;
+ guint id_delete;
+ gpointer data;
+ ChannelHandleDelete handle_delete;
+ ChannelHandleRead handle_read;
+ };
+
+static int channel_initialized = 0;
+
+ChannelInit channel_init = IvyGlibChannelInit;
+ChannelSetUp channel_setup = IvyGlibChannelSetUp;
+ChannelClose channel_close = IvyGlibChannelClose;
+
+static gboolean IvyGlibHandleChannelRead(GIOChannel *source,
+ GIOCondition condition,
+ gpointer data);
+
+static gboolean IvyGlibHandleChannelDelete(GIOChannel *source,
+ GIOCondition condition,
+ gpointer data);
+
+
+void IvyGlibChannelInit(void) {
+ if ( channel_initialized ) return;
+ /* fixes bug when another app coredumps */
+#ifndef WIN32
+ signal( SIGPIPE, SIG_IGN);
+#endif
+ channel_initialized = 1;
+}
+
+
+
+Channel IvyGlibChannelSetUp(HANDLE fd, void *data,
+ ChannelHandleDelete handle_delete,
+ ChannelHandleRead handle_read
+ ) {
+ Channel channel;
+ channel = (Channel)g_new(struct _channel, 1);
+
+ channel->handle_delete = handle_delete;
+ channel->handle_read = handle_read;
+ channel->data = data;
+
+ {
+ GIOChannel* io_channel = g_io_channel_unix_new(fd);
+
+ channel->id_read = g_io_add_watch( io_channel, G_IO_IN,
+ IvyGlibHandleChannelRead, channel);
+ channel->id_delete = g_io_add_watch( io_channel, G_IO_ERR | G_IO_HUP,
+ IvyGlibHandleChannelDelete, channel);
+ }
+ return channel;
+}
+
+
+
+
+void IvyGlibChannelClose( Channel channel ) {
+ if ( channel->handle_delete )
+ (*channel->handle_delete)( channel->data );
+ g_source_remove( channel->id_read );
+ g_source_remove( channel->id_delete );
+}
+
+
+static gboolean IvyGlibHandleChannelRead(GIOChannel *source,
+ GIOCondition condition,
+ gpointer data) {
+ Channel channel = (Channel)data;
+#ifdef DEBUG
+ printf("Handle Channel read %d\n",source );
+#endif
+ (*channel->handle_read)(channel, g_io_channel_unix_get_fd(source), channel->data);
+ return TRUE;
+}
+
+static gboolean IvyGlibHandleChannelDelete(GIOChannel *source,
+ GIOCondition condition,
+ gpointer data) {
+ Channel channel = (Channel)data;
+#ifdef DEBUG
+ printf("Handle Channel delete %d\n",source );
+#endif
+ (*channel->handle_delete)(channel->data);
+ return TRUE;
+}
+
+
+void
+IvyStop ()
+{
+ /* To be implemented */
+}
+
diff --git a/src/ivyglibloop.h b/src/ivyglibloop.h
new file mode 100644
index 0000000..6941069
--- /dev/null
+++ b/src/ivyglibloop.h
@@ -0,0 +1,50 @@
+/*
+* Ivy, C interface
+*
+* Copyright (C) 1997-2000
+* Centre d'Études de la Navigation Aérienne
+*
+* Main loop based on the GTK Toolkit
+*
+* Authors: François-Régis Colin <fcolin@cena.fr>
+*
+* $Id$
+*
+* Please refer to file version.h for the
+* copyright notice regarding this software
+*/
+
+#ifndef IVYGLIBLOOP_H
+#define IVYGLIBLOOP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define ANYPORT 0
+
+#ifdef WIN32
+#include <windows.h>
+#define HANDLE SOCKET
+#else
+#define HANDLE int
+#endif
+
+#include "ivychannel.h"
+
+extern void IvyGlibChannelInit(void);
+
+extern Channel IvyGlibChannelSetUp(
+ HANDLE fd,
+ void *data,
+ ChannelHandleDelete handle_delete,
+ ChannelHandleRead handle_read
+ );
+
+extern void IvyGlibChannelClose( Channel channel );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* IVYGLIBLOOP_H */
diff --git a/src/ivygtkloop.c b/src/ivygtkloop.c
deleted file mode 100644
index 45722d5..0000000
--- a/src/ivygtkloop.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Ivy, C interface
- *
- * Copyright (C) 1997-2000
- * Centre d'Études de la Navigation Aérienne
- *
- * Main loop based on the Gtk Toolkit
- *
- * Authors: François-Régis Colin <fcolin@cena.fr>
- *
- * $Id$
- *
- * Please refer to file version.h for the
- * copyright notice regarding this software
- */
-
-#ifdef WIN32
-#include <windows.h>
-#endif
-#include <stdlib.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <string.h>
-
-#ifdef WIN32
-#else
-#include <unistd.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#include <signal.h>
-#endif
-
-
-#include <gdk/gdk.h>
-
-#include "ivychannel.h"
-#include "ivygtkloop.h"
-
-struct _channel {
- guint id_read;
- guint id_delete;
- gpointer data;
- ChannelHandleDelete handle_delete;
- ChannelHandleRead handle_read;
- };
-
-
-static int channel_initialized = 0;
-
-
-ChannelInit channel_init = IvyGtkChannelInit;
-ChannelSetUp channel_setup = IvyGtkChannelSetUp;
-ChannelClose channel_close = IvyGtkChannelClose;
-
-
-void IvyGtkChannelInit(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 IvyGtkChannelClose( Channel channel )
-{
-
- if ( channel->handle_delete )
- (*channel->handle_delete)( channel->data );
- gdk_input_remove( channel->id_read );
- gdk_input_remove( channel->id_delete );
-}
-
-
-static void IvyGtkHandleChannelRead(gpointer data, gint source, GdkInputCondition condition)
-{
- Channel channel = (Channel)data;
-#ifdef DEBUG
- printf("Handle Channel read %d\n",source );
-#endif
- (*channel->handle_read)(channel,source,channel->data);
-}
-
-static void IvyGtkHandleChannelDelete(gpointer data, gint source, GdkInputCondition condition)
-{
- Channel channel = (Channel)data;
-#ifdef DEBUG
- printf("Handle Channel delete %d\n",source );
-#endif
- (*channel->handle_delete)(channel->data);
-}
-
-
-
-Channel IvyGtkChannelSetUp(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 = gdk_input_add( fd, GDK_INPUT_READ, IvyGtkHandleChannelRead, channel);
- channel->id_delete = gdk_input_add( fd, GDK_INPUT_EXCEPTION, IvyGtkHandleChannelDelete, channel);
-
- return channel;
-}
-
-
-void
-IvyStop ()
-{
- /* To be implemented */
-}
-
diff --git a/src/ivygtkloop.h b/src/ivygtkloop.h
deleted file mode 100644
index 78d747a..0000000
--- a/src/ivygtkloop.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Ivy, C interface
- *
- * Copyright (C) 1997-2000
- * Centre d'Études de la Navigation Aérienne
- *
- * Main loop based on the GTK Toolkit
- *
- * Authors: François-Régis Colin <fcolin@cena.fr>
- *
- * $Id$
- *
- * Please refer to file version.h for the
- * copyright notice regarding this software
- */
-
-#ifndef IVYGTKLOOP_H
-#define IVYGTKLOOP_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* general Handle */
-
-#define ANYPORT 0
-
-#ifdef WIN32
-#include <windows.h>
-#define HANDLE SOCKET
-#else
-#define HANDLE int
-#endif
-
-#include "ivychannel.h"
-
-extern void IvyGtkChannelInit(void);
-
-extern Channel IvyGtkChannelSetUp(
- HANDLE fd,
- void *data,
- ChannelHandleDelete handle_delete,
- ChannelHandleRead handle_read
-);
-
-extern void IvyGtkChannelClose( Channel channel );
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
diff --git a/src/ivyprobe.c b/src/ivyprobe.c
index c054be9..1cd3a52 100644
--- a/src/ivyprobe.c
+++ b/src/ivyprobe.c
@@ -21,7 +21,7 @@
#ifdef XTMAINLOOP
#undef IVYMAINLOOP
#endif
-#ifdef GTKMAINLOOP
+#ifdef GLIBMAINLOOP
#undef IVYMAINLOOP
#endif
@@ -57,8 +57,9 @@ extern int optind;
#ifdef XTMAINLOOP
#include "ivyxtloop.h"
#endif
-#ifdef GTKMAINLOOP
-#include "ivygtkloop.h"
+#ifdef GLIBMAINLOOP
+#include <glib.h>
+#include "ivyglibloop.h"
#endif
#ifdef GLUTMAINLOOP
#include "ivyglutloop.h"
@@ -114,8 +115,8 @@ void HandleStdin (Channel channel, HANDLE fd, void *data)
#ifdef XTMAINLOOP
IvyXtChannelClose (channel);
#endif
-#ifdef GTKMAINLOOP
- IvyGtkChannelClose(channel);
+#ifdef GLIBMAINLOOP
+ IvyGlibChannelClose(channel);
#endif
#ifdef GLUTMAINLOOP
IvyGlutChannelClose(channel);
@@ -240,8 +241,8 @@ void ApplicationCallback (IvyClientPtr app, void *user_data, IvyApplicationEvent
#ifdef XTMAINLOOP
IvyXtChannelSetUp (0, NULL, NULL, HandleStdin);
#endif
-#ifdef GTKMAINLLOP
- IvyGtkChannelSetUp( 0, NULL, NULL, HandleStdin);
+#ifdef GLIBMAINLLOP
+ IvyGlibChannelSetUp( 0, NULL, NULL, HandleStdin);
#endif
#ifdef GLUTMAINLLOP
IvyGlutChannelSetUp( 0, NULL, NULL, HandleStdin);
@@ -336,8 +337,8 @@ int main(int argc, char *argv[])
#ifdef XTMAINLOOP
IvyXtChannelSetUp (0, NULL, NULL, HandleStdin);
#endif
-#ifdef GTKMAINLOOP
- IvyGtkChannelSetUp (0, NULL, NULL, HandleStdin);
+#ifdef GLIBMAINLOOP
+ IvyGlibChannelSetUp (0, NULL, NULL, HandleStdin);
#endif
#ifdef GLUTMAINLOOP
IvyGlutChannelSetUp (0, NULL, NULL, HandleStdin);
@@ -361,8 +362,11 @@ int main(int argc, char *argv[])
#ifdef XTMAINLOOP
XtAppMainLoop (cntx);
#endif
-#ifdef GTKMAINLOOP
- gtk_main();
+#ifdef GLIBMAINLOOP
+ {
+ GMainLoop *ml = g_main_loop_new(NULL, FALSE);
+ g_main_loop_run(ml);
+ }
#endif
#ifdef GLUTMAINLOOP
glutMainLoop();
diff --git a/src/ivysocket.c b/src/ivysocket.c
index c6a398e..7565015 100644
--- a/src/ivysocket.c
+++ b/src/ivysocket.c
@@ -142,7 +142,7 @@ static void HandleSocket (Channel channel, HANDLE fd, void *data)
*ptr_nl = '\0';
if (client->interpretation )
(*client->interpretation) (client, client->data, ptr );
- else fprintf (stderr,"Socket No interpretation function ???!\n");
+ else fprintf (stderr,"Socket No interpretation function ???\n");
ptr = ++ptr_nl;
}
if (*ptr != '\0' )
diff --git a/src/ivytcl.c b/src/ivytcl.c
index c59937f..74ed129 100755
--- a/src/ivytcl.c
+++ b/src/ivytcl.c
@@ -108,7 +108,6 @@ Channel IvyTclChannelSetUp(HANDLE fd, void *data,
ChannelHandleRead handle_read
)
{
- char channelName[16 + TCL_INTEGER_SPACE];
Channel channel;
channel = (Channel)ckalloc( sizeof (struct _channel) );
@@ -331,7 +330,6 @@ IvyInitCmd(ClientData clientData,
int argc,
const char **argv)
{
- char *end;
filter_struct *app;
filter_struct *die;
@@ -621,16 +619,16 @@ int
Tclivy_Init(Tcl_Interp *interp)
{
- Tcl_CreateCommand(interp, "Ivy::init", IvyInitCmd, NULL, NULL);
- Tcl_CreateCommand(interp, "Ivy::start", IvyStartCmd, NULL, NULL);
- Tcl_CreateCommand(interp, "Ivy::bind", IvyBindCmd, NULL, NULL);
- Tcl_CreateCommand(interp, "Ivy::unbind", IvyUnbindCmd, NULL, NULL);
- Tcl_CreateCommand(interp, "Ivy::send", IvySendCmd, NULL, NULL);
- Tcl_CreateCommand(interp, "Ivy::senddirect", IvySendDirectCmd, NULL, NULL);
- Tcl_CreateCommand(interp, "Ivy::binddirect", IvyBindDirectCmd, NULL, NULL);
- Tcl_CreateCommand(interp, "Ivy::applist", IvyApplicationListCmd, NULL, NULL);
- Tcl_CreateCommand(interp, "Ivy::apphost", IvyApplicationHostCmd, NULL, NULL);
- Tcl_CreateCommand(interp, "Ivy::appmsgs", IvyApplicationMsgsCmd, NULL, NULL);
+ Tcl_CreateCommand(interp, "Ivy::init", (Tcl_CmdProc*)IvyInitCmd, NULL, NULL);
+ Tcl_CreateCommand(interp, "Ivy::start", (Tcl_CmdProc*)IvyStartCmd, NULL, NULL);
+ Tcl_CreateCommand(interp, "Ivy::bind", (Tcl_CmdProc*)IvyBindCmd, NULL, NULL);
+ Tcl_CreateCommand(interp, "Ivy::unbind", (Tcl_CmdProc*)IvyUnbindCmd, NULL, NULL);
+ Tcl_CreateCommand(interp, "Ivy::send", (Tcl_CmdProc*)IvySendCmd, NULL, NULL);
+ Tcl_CreateCommand(interp, "Ivy::senddirect", (Tcl_CmdProc*)IvySendDirectCmd, NULL, NULL);
+ Tcl_CreateCommand(interp, "Ivy::binddirect", (Tcl_CmdProc*)IvyBindDirectCmd, NULL, NULL);
+ Tcl_CreateCommand(interp, "Ivy::applist", (Tcl_CmdProc*)IvyApplicationListCmd, NULL, NULL);
+ Tcl_CreateCommand(interp, "Ivy::apphost", (Tcl_CmdProc*)IvyApplicationHostCmd, NULL, NULL);
+ Tcl_CreateCommand(interp, "Ivy::appmsgs", (Tcl_CmdProc*)IvyApplicationMsgsCmd, NULL, NULL);
#ifndef TCL_CHANNEL_INTEGRATION
Tcl_DoWhenIdle(IvyIdleProc,0);
#endif
diff --git a/src/list.h b/src/list.h
index 78eb07e..472d2fc 100644
--- a/src/list.h
+++ b/src/list.h
@@ -52,7 +52,7 @@
}
#define IVY_LIST_ADD(list, p ) \
- if ( p = (TYPEOF(p)) (malloc( sizeof( *p ))))\
+ if ((p = (TYPEOF(p)) (malloc( sizeof( *p ))))) \
{ \
memset( p, 0 , sizeof( *p ));\
p->next = list; \