summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Makefile118
-rwxr-xr-xsrc/Makefile.mingw6
-rw-r--r--src/Makefile.osx134
-rw-r--r--src/Makefile.solaris192
-rwxr-xr-xsrc/Test.tcl17
-rw-r--r--src/ivy.c84
-rw-r--r--src/ivyprobe.c28
-rw-r--r--src/ivysocket.c3
-rwxr-xr-xsrc/ivytcl.c30
-rw-r--r--src/version.h2
10 files changed, 199 insertions, 415 deletions
diff --git a/src/Makefile b/src/Makefile
index 836bb0f..7932216 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -8,38 +8,58 @@
#
# Authors: François-Régis Colin <fcolin@cena.fr>
# Stéphane Chatty <chatty@cena.fr>
+# Yannick Jestin <jestin@cena.fr>
#
-# $Id$
-#
# Please refer to file version.h for the
# copyright notice regarding this software
#
+# change this in version.h too !!!!
MAJOR=3
-MINOR=5
+MINOR=6
XTINC = -I/usr/X11R6/include
-XTLIB = -L/usr/X11R6/lib
+XTLIB = -L/usr/X11R6/lib -lXt -lX11 -lSM -lICE
GTKINC = `gtk-config --cflags`
-#GTKINC = -I/usr/include/gtk-1.2 -I/usr/include/glib-1.2 -I/usr/lib/glib/include -I/usr/X11R6/include
GTKLIB = `gtk-config --libs`
-#GTKLIB = -L/usr/lib -L/usr/X11R6/lib
GLUTINC = -I/usr/include -I.
-GLUTLIB = -L.
+GLUTLIB = -L. -lglut -lGLU -lGL -lX11 -lXmu
+# use these if you want standard Tcl
TCLINCL = -I/usr/include/tcl8.4
TCLLIB = -ltcl8.4
+# use these if you want to use Aqua Tcl on macOSX
+#TCLINC = -I/Library/Frameworks/Tcl.framework/Headers
+#TCLLIB = -framework Tcl
+PCREINC = `pcre-config --cflags`
+PCRELIB = `pcre-config --libs`
+#PCREOBJ = `pcre-config --prefix`/lib/libpcre.a
+PCREOBJ =
+
+EXTRALIB=
+#EXTRALIB=-lsocket -lnsl # for solaris
CC=gcc
-CFLAGS = -g
+LIBTOOL=ar q # linux and solaris
+#LIBTOOL=libtool -static -o
+
+#REGEXP = -DGNU_REGEXP # deprecated !
+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
+
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
GLUTOBJ = ivyglutloop.o ivysocket.o ivy.o
-TCLOBJ = ivytcl.o ivyloop.o timer.o ivysocket.o givy.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
-# not yiet need Modified Glut ivyglutprobe
+TARGETLIBS=libivy.so.$(MAJOR).$(MINOR) libgivy.so.$(MAJOR).$(MINOR) libxtivy.so.$(MAJOR).$(MINOR) libgtkivy.so.$(MAJOR).$(MINOR) libtclivy.so.$(MAJOR).$(MINOR)
+# not yet need Modified Glut ivyglutprobe
.c.o:
$(CC) $(CFLAGS) -c $*.c
@@ -47,96 +67,106 @@ TARGETS = ivyprobe ivygtkprobe ivyxtprobe
all: static-libs commands shared-libs
static-libs: libivy.a libgivy.a libxtivy.a libgtkivy.a libtclivy.a
-# not yiet need Modified Glut libglutivy.a
+# not yet need Modified Glut libglutivy.a
-shared-libs: libivy.so.$(MAJOR).$(MINOR) libgivy.so.$(MAJOR).$(MINOR) libxtivy.so.$(MAJOR).$(MINOR) libgtkivy.so.$(MAJOR).$(MINOR) libtclivy.so.$(MAJOR).$(MINOR)
-# not yiet need Modified Glut libglutivy.so.$(MAJOR).$(MINOR)
+shared-libs: $(TARGETLIBS)
+# not yet need Modified Glut libglutivy.so.$(MAJOR).$(MINOR)
commands: $(TARGETS)
ivytcl.o: ivytcl.c
- $(CC) -DGNU_REGEXP -c $(CFLAGS) $(TCLINCL) -o ivytcl.o ivytcl.c
+ $(CC) -c $(CFLAGS) $(TCLINCL) $(CHANNEL) ivytcl.c
+
+ivy.o: ivy.c
+ $(CC) -c $(CFLAGS) $(REGEXP) $(PCREINC) ivy.c
givy.o: ivy.c
- $(CC) -DGNU_REGEXP -c $(CFLAGS) -o givy.o ivy.c
+ $(CC) -c $(CFLAGS) -o givy.o ivy.c
ivyglutloop.o: ivyglutloop.c ivyglutloop.h
- $(CC) -c $(CFLAGS) $(GLUTINC) -o ivyglutloop.o ivyglutloop.c
+ $(CC) -c $(CFLAGS) $(GLUTINC) ivyglutloop.c
ivygtkloop.o: ivygtkloop.c ivygtkloop.h
- $(CC) -c $(CFLAGS) $(GTKINC) -o ivygtkloop.o ivygtkloop.c
+ $(CC) -c $(CFLAGS) $(GTKINC) ivygtkloop.c
-ivyprobe: ivyprobe.o libivy.a
- $(CC) $(CFLAGS) -o ivyprobe ivyprobe.o -L. -livy
- # SOLARIS: use this line
- # $(CC) $(CFLAGS) -o ivyprobe ivyprobe.o -L. -livy -lsocket -lnsl
+ivyprobe: ivyprobe.o
+ $(CC) $(CFLAGS) -o $@ ivyprobe.o -L. -livy $(PCRELIB) $(EXTRALIB)
ivyxtprobe.o : ivyprobe.c
- $(CC) $(CFLAGS) -c ivyprobe.c -o ivyxtprobe.o $(XTINC) -DXTMAINLOOP
+ $(CC) $(CFLAGS) -DXTMAINLOOP -c ivyprobe.c -o $@ $(XTINC)
ivyxtprobe: ivyxtprobe.o libxtivy.a
- $(CC) -o ivyxtprobe ivyxtprobe.o -L. $(XTLIB) -lxtivy -lXt -lX11 -lSM -lICE
+ $(CC) -o $@ ivyxtprobe.o -L. $(XTLIB) -lxtivy $(PCRELIB) $(EXTRALIB)
ivygtkprobe.o : ivyprobe.c
- $(CC) $(CFLAGS) -c ivyprobe.c -o ivygtkprobe.o $(XTINC) -DGTKMAINLOOP
+ $(CC) $(CFLAGS) -DGTKMAINLOOP -c ivyprobe.c -o ivygtkprobe.o $(XTINC)
ivygtkprobe: ivygtkprobe.o libgtkivy.a
- $(CC) -o ivygtkprobe ivygtkprobe.o -L. $(GTKLIB) -lgtkivy -lgtk -lgdk -lglib -lX11 -lSM -lICE -lm
+ $(CC) -o ivygtkprobe ivygtkprobe.o -L. $(GTKLIB) -lgtkivy $(PCRELIB) $(EXTRALIB)
ivyglutprobe.o : ivyprobe.c
- $(CC) $(CFLAGS) -c ivyprobe.c -o ivyglutprobe.o $(GLUTINC) -DGLUTMAINLOOP
+ $(CC) $(CFLAGS) -DGLUTMAINLOOP -c ivyprobe.c -o ivyglutprobe.o $(GLUTINC)
ivyglutprobe: ivyglutprobe.o libglutivy.a
- $(CC) -o ivyglutprobe ivyglutprobe.o -L. $(GLUTLIB) -lglutivy -lglut -lGLU -lGL -lX11 -lXmu
+ $(CC) -o ivyglutprobe ivyglutprobe.o -L. $(GLUTLIB) -lglutivy $(PCRELIB) $(EXTRALIB)
libivy.a: $(OBJ)
rm -f $@
- ar q $@ $(OBJ)
+ $(LIBTOOL) $@ $(OBJ)
libgivy.a: $(GOBJ)
rm -f $@
- ar q $@ $(GOBJ)
+ $(LIBTOOL) $@ $(GOBJ)
libxtivy.a: $(XTOBJ)
rm -f $@
- ar cq $@ $(XTOBJ)
+ $(LIBTOOL) $@ $(XTOBJ)
libgtkivy.a: $(GTKOBJ)
rm -f $@
- ar cq $@ $(GTKOBJ)
+ $(LIBTOOL) $@ $(GTKOBJ)
libglutivy.a: $(GLUTOBJ)
rm -f $@
- ar cq $@ $(GLUTOBJ)
+ $(LIBTOOL) $@ $(GLUTOBJ)
libtclivy.a: $(TCLOBJ)
rm -f $@
- ar cq $@ $(TCLOBJ)
+ $(LIBTOOL) $@ $(TCLOBJ) $(PCREOBJ)
+# TODO this PCREOBJ is a dirty hack
libivy.so.$(MAJOR).$(MINOR): $(OBJ)
- $(CC) -shared -Wl,-soname,libivy.so.$(MAJOR) -o $@ $(OBJ) -lc
+ $(CC) -shared -Wl,-soname,libivy.so.$(MAJOR) -o $@ $(OBJ)
+# $(CC) -G -Wl,-h,libivy.so.$(MAJOR) -o $@ $(OBJ) #solaris
+# libtool -dynamic -o $@ $(OBJ) $(PCRELIB) -lc
libgivy.so.$(MAJOR).$(MINOR): $(GOBJ)
- $(CC) -shared -Wl,-soname,libgivy.so.$(MAJOR) -o $@ $(GOBJ) -lc
+ $(CC) -shared -Wl,-soname,libgivy.so.$(MAJOR) -o $@ $(GOBJ)
+# $(CC) -G -Wl,-h,libgivy.so.$(MAJOR) -o $@ $(GOBJ) #solaris
+# libtool -dynamic -o $@ $(GOBJ) $(PCRELIB) -lc
libxtivy.so.$(MAJOR).$(MINOR): $(XTOBJ)
- $(CC) -shared -Wl,-soname,libxtivy.so.$(MAJOR) -o $@ \
- $(XTOBJ) $(XTLIB) -lXt -lX11 -lc
+ $(CC) -shared -Wl,-soname,libxtivy.so.$(MAJOR) -o $@ $(XTOBJ) $(XTLIB)
+# $(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) -lX11 -lc
+ $(CC) -shared -Wl,-soname,libgtkivy.so.$(MAJOR) -o $@ $(GTKOBJ) $(GTKLIB)
+# $(CC) -G -Wl,-h,libgtkivy.so.$(MAJOR) -o $@ $(GTKOBJ) $(GTKLIB) #solaris
+# libtool -dynamic -o $@ $(GTKOBJ) $(GTKLIB) $(PCRELIB) -lc
libglutivy.so.$(MAJOR).$(MINOR): $(GTKOBJ)
- $(CC) -shared -Wl,-soname,libglutivy.so.$(MAJOR) -o $@ \
- $(GLUTOBJ) $(GLUTLIB) -lX11 -lc
+ $(CC) -shared -Wl,-soname,libglutivy.so.$(MAJOR) -o $@ $(GLUTOBJ) $(GLUTLIB)
+# $(CC) -G -Wl,-h,libglutivy.so.$(MAJOR) -o $@ $(GLUTOBJ) $(GLUTLIB) # solaris
+# libtool -dynamic -o $@ $(GLUTOBJ) $(GLUTLIB) $(PCRELIB) -lc
libtclivy.so.$(MAJOR).$(MINOR): $(TCLOBJ)
- $(CC) -shared -Wl,-soname,libtclivy.so.$(MAJOR) -o $@ \
- $(TCLOBJ) $(TCLLIB) -lc
+ $(CC) -shared -Wl,-soname,libtclivy.so.$(MAJOR) -o $@ $(TCLOBJ) $(TCLLIB) $(PCREOBJ)
+# $(CC) -G -Wl,-h,libtclivy.so.$(MAJOR) -o $@ $(TCLOBJ) $(TCLLIB) $(PCREOBJ) # solaris
+# libtool -dynamic -o $@ $(TCLOBJ) $(TCLLIB) $(PCREOBJ) $(PCRELIB) -lc
clean:
- -rm -f $(TARGETS) *.o *.a *.so *.so.* *~
+ -rm -f $(TARGETS) $(TARGETLIBS) *.o *.a *.so *.so.* *~
installlibs: static-libs shared-libs
test -d $(PREFIX)/usr/lib || mkdirhier $(PREFIX)/usr/lib
diff --git a/src/Makefile.mingw b/src/Makefile.mingw
index 8ed6cee..6c98e87 100755
--- a/src/Makefile.mingw
+++ b/src/Makefile.mingw
@@ -17,15 +17,13 @@
MAJOR=3
-MINOR=5
+MINOR=6
RM=del
#RM=rm -f
XTINC =
XTLIB =
GTKINC = `gtk-config --cflags`
-#GTKINC = -I/usr/include/gtk-1.2 -I/usr/include/glib-1.2 -I/usr/lib/glib/include -I/usr/X11R6/include
GTKLIB = `gtk-config --libs`
-#GTKLIB = -L/usr/lib -L/usr/X11R6/lib
GLUTINC = -I/usr/include -I.
GLUTLIB = -L.
TCLINCL = -I/usr/include/tcl8.4
@@ -71,8 +69,6 @@ ivygtkloop.o: ivygtkloop.c ivygtkloop.h
ivyprobe: ivyprobe.o libivy.a
$(CC) $(CFLAGS) -o ivyprobe ivyprobe.o -L. -livy -lwsock32 -lregex
-# SOLARIS: use this line
-# $(CC) $(CFLAGS) -o ivyprobe ivyprobe.o -L. -livy -lsocket -lnsl
ivyxtprobe.o : ivyprobe.c
$(CC) $(CFLAGS) -c ivyprobe.c -o ivyxtprobe.o $(XTINC) -DXTMAINLOOP
diff --git a/src/Makefile.osx b/src/Makefile.osx
deleted file mode 100644
index 5d626b3..0000000
--- a/src/Makefile.osx
+++ /dev/null
@@ -1,134 +0,0 @@
-#
-# Ivy, C interface
-#
-# Copyright (C) 1997-1999
-# Centre d'Etudes de la Navigation Aérienne
-#
-# Makefile for OS X
-#
-# Authors: Marcellin Buisson <buisson@cena.fr>
-#
-# $Id$
-#
-# Please refer to file version.h for the
-# copyright notice regarding this software
-#
-
-
-
-MAJOR=3
-MINOR=5
-
-CC=gcc
-CFLAGS = -g -I/usr/X11R6/include
-OBJ = ivyloop.o timer.o ivysocket.o ivy.o
-GOBJ = ivyloop.o timer.o ivysocket.o givy.o
-#GLUTOBJ = ivyglutloop.o ivysocket.o ivy.o
-#TCLOBJ = ivytcl.o ivysocket.o givy.o
-TARGETS = ivyprobe
-# not yiet need Modified Glut ivyglutprobe
-
-.c.o:
- $(CC) $(CFLAGS) -c $*.c
-
-all: static-libs commands shared-libs
-
-static-libs: libivy.a #libgivy.a libxtivy.a libgtkivy.a libtclivy.a
-# not yiet need Modified Glut libglutivy.a
-
-shared-libs: libivy.$(MAJOR).$(MINOR).dylib #libivy.so.$(MAJOR).$(MINOR) #libgivy.so.$(MAJOR).$(MINOR)
-# not yiet need Modified Glut libglutivy.so.$(MAJOR).$(MINOR)
-
-commands: $(TARGETS)
-
-givy.o: ivy.c
- $(CC) -DGNU_REGEXP -c $(CFLAGS) -o givy.o ivy.c
-
-#ivyglutloop.o: ivyglutloop.c ivyglutloop.h
-# $(CC) -c $(CFLAGS) $(GLUTINC) -o ivyglutloop.o ivyglutloop.c
-
-ivyprobe: ivyprobe.o libivy.a
- $(CC) $(CFLAGS) -o ivyprobe ivyprobe.o -L. -livy
-
-#ivyglutprobe.o : ivyprobe.c
-# $(CC) $(CFLAGS) -c ivyprobe.c -o ivyglutprobe.o $(GLUTINC) -DGLUTMAINLOOP
-
-#ivyglutprobe: ivyglutprobe.o libglutivy.a
-# $(CC) -o ivyglutprobe ivyglutprobe.o -L. $(GLUTLIB) -lglutivy -lglut -lGLU -lGL -lX11 -lXmu
-
-libivy.a: $(OBJ)
- rm -f $@
-# ar q $@ $(OBJ)
- ar r $@ $(OBJ)
- ranlib $@
-
-libgivy.a: $(GOBJ)
- rm -f $@
-# ar q $@ $(GOBJ)
- ar r $@ $(GOBJ)
-
-#libglutivy.a: $(GLUTOBJ)
-# rm -f $@
-# ar cq $@ $(GLUTOBJ)
-
-libivy.$(MAJOR).$(MINOR).dylib: $(OBJ)
- $(CC) -dynamiclib -o $@ $(OBJ) -lc
-
-#libivy.so.$(MAJOR).$(MINOR): $(OBJ)
-# $(CC) -shared -Wl,-soname,libivy.so.$(MAJOR) -o $@ $(OBJ) -lc
-
-#libgivy.so.$(MAJOR).$(MINOR): $(GOBJ)
-# $(CC) -shared -Wl,-soname,libgivy.so.$(MAJOR) -o $@ $(GOBJ) -lc
-
-#libglutivy.so.$(MAJOR).$(MINOR): $(GTKOBJ)
-# $(CC) -shared -Wl,-soname,libglutivy.so.$(MAJOR) -o $@ \
-# $(GLUTOBJ) $(GLUTLIB) -lX11 -lc
-
-clean:
- -rm -f $(TARGETS) *.o *.a *.so *.so.* *~ *.dylib
-
-installlibs: static-libs shared-libs
- test -d $(PREFIX)/usr/lib || mkdirhier $(PREFIX)/usr/lib
-
- test -d $(PREFIX)/usr/include || mkdirhier $(PREFIX)/usr/include
- install -m644 libivy.a $(PREFIX)/usr/lib
- install -m644 libgivy.a $(PREFIX)/usr/lib
-# install -m644 libtclivy.a $(PREFIX)/usr/lib
-
- install -m644 libivy.$(MAJOR).$(MINOR).dylib $(PREFIX)/usr/lib
-# install -m644 libivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib
-# install -m644 libgivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib
-
- install -m644 *.h $(PREFIX)/usr/include
-
-installliblinks: installlibs
- ln -sfh /usr/lib/libivy.$(MAJOR).$(MINOR).dylib $(PREFIX)/usr/lib/libivy.dylib
- ln -sfh /usr/lib/libivy.$(MAJOR).$(MINOR).dylib $(PREFIX)/usr/lib/libivy.$(MAJOR).dylib
- #ln -s /usr/lib/libtclivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib/libtclivy.so
- #ln -s /usr/lib/libivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib/libivy.so
- #ln -s /usr/lib/libivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib/libivy.so.$(MAJOR)
- ln -s /usr/lib/libgivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib/libgivy.so
- #ln -s /usr/lib/libgivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib/libgivy.so.$(MAJOR)
-
-
-installbins: commands
- test -d $(PREFIX)/usr/bin || mkdirhier $(PREFIX)/usr/bin
-
- install -m755 ivyprobe $(PREFIX)/usr/bin
-# install -m755 ivyglutprobe $(PREFIX)/usr/X11R6/bin
-
-installdocs:
- test -d $(PREFIX)/usr/doc/ivy-c || mkdirhier $(PREFIX)/usr/doc/ivy-c
- for f in `find ../doc/*.html -type f -maxdepth 1`; do \
- install -m 644 $$f $(PREFIX)/usr/doc/ivy-c; \
- done
- test -d $(PREFIX)/usr/man/man1 || mkdirhier $(PREFIX)/usr/man/man1
- for f in `find ../doc/*.1 -type f -maxdepth 1`; do \
- install -m 644 $$f $(PREFIX)/usr/man/man1; \
- done
-
-install: installlibs installbins installliblinks installdocs
-
-rpm::
- /usr/bin/rpmize
-
diff --git a/src/Makefile.solaris b/src/Makefile.solaris
deleted file mode 100644
index cd3d93c..0000000
--- a/src/Makefile.solaris
+++ /dev/null
@@ -1,192 +0,0 @@
-#
-# Ivy, C interface
-#
-# Copyright (C) 1997-2002
-# Centre d'Études de la Navigation Aérienne
-#
-# Makefile
-#
-# Authors: François-Régis Colin <fcolin@cena.fr>
-# Stéphane Chatty <chatty@cena.fr>
-#
-# $Id$
-#
-# Please refer to file version.h for the
-# copyright notice regarding this software
-#
-
-
-MAJOR=3
-MINOR=5
-
-XTINC = -I/usr/X11R6/include
-XTLIB = -L/usr/X11R6/lib
-GTKINC = `gtk-config --cflags`
-#GTKINC = -I/usr/include/gtk-1.2 -I/usr/include/glib-1.2 -I/usr/lib/glib/include -I/usr/X11R6/include
-GTKLIB = `gtk-config --libs`
-#GTKLIB = -L/usr/lib -L/usr/X11R6/lib
-GLUTINC = -I/usr/include -I.
-GLUTLIB = -L.
-TCLINC = -I/usr/include/
-TCLLIB = -ltcl
-
-CC=gcc
-CFLAGS = -g
-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
-GLUTOBJ = ivyglutloop.o ivysocket.o ivy.o
-TCLOBJ = ivytcl.o ivysocket.o givy.o
-TARGETS = ivyprobe ivygtkprobe ivyxtprobe
-# not yiet need Modified Glut ivyglutprobe
-
-.c.o:
- $(CC) $(CFLAGS) -c $*.c
-
-all: static-libs commands shared-libs
-
-static-libs: libivy.a libgivy.a libxtivy.a libgtkivy.a libtclivy.a
-# not yiet need Modified Glut libglutivy.a
-
-shared-libs: libivy.so.$(MAJOR).$(MINOR) libgivy.so.$(MAJOR).$(MINOR) libxtivy.so.$(MAJOR).$(MINOR) libgtkivy.so.$(MAJOR).$(MINOR) libtclivy.so.$(MAJOR).$(MINOR)
-# not yiet need Modified Glut libglutivy.so.$(MAJOR).$(MINOR)
-
-commands: $(TARGETS)
-
-ivytcl.o: ivytcl.c
- $(CC) -DGNU_REGEXP -c $(CFLAGS) $(TCLINC) -o ivytcl.o ivytcl.c
-
-givy.o: ivy.c
- $(CC) -DGNU_REGEXP -c $(CFLAGS) -o givy.o ivy.c
-
-ivyglutloop.o: ivyglutloop.c ivyglutloop.h
- $(CC) -c $(CFLAGS) $(GLUTINC) -o ivyglutloop.o ivyglutloop.c
-
-ivygtkloop.o: ivygtkloop.c ivygtkloop.h
- $(CC) -c $(CFLAGS) $(GTKINC) -o ivygtkloop.o ivygtkloop.c
-
-ivyprobe: ivyprobe.o libivy.a
- $(CC) $(CFLAGS) -o ivyprobe ivyprobe.o -L. -livy -lnsl -lsocket
-
-ivyxtprobe.o : ivyprobe.c
- $(CC) $(CFLAGS) -c ivyprobe.c -o ivyxtprobe.o $(XTINC) -DXTMAINLOOP
-
-ivyxtprobe: ivyxtprobe.o libxtivy.a
- $(CC) -o ivyxtprobe ivyxtprobe.o -L. $(XTLIB) -lxtivy -lXt -lX11 -lSM -lICE -lnsl -lsocket
-
-ivygtkprobe.o : ivyprobe.c
- $(CC) $(CFLAGS) -c ivyprobe.c -o ivygtkprobe.o $(XTINC) -DGTKMAINLOOP
-
-ivygtkprobe: ivygtkprobe.o libgtkivy.a
- $(CC) -o ivygtkprobe ivygtkprobe.o -L. $(GTKLIB) -lgtkivy -lgtk -lgdk -lglib -lX11 -lSM -lICE -lm -lnsl -lsocket
-
-ivyglutprobe.o : ivyprobe.c
- $(CC) $(CFLAGS) -c ivyprobe.c -o ivyglutprobe.o $(GLUTINC) -DGLUTMAINLOOP
-
-ivyglutprobe: ivyglutprobe.o libglutivy.a
- $(CC) -o ivyglutprobe ivyglutprobe.o -L. $(GLUTLIB) -lglutivy -lglut -lGLU -lGL -lX11 -lXmu
-
-libivy.a: $(OBJ)
- rm -f $@
- ar -q $@ $(OBJ)
-
-libgivy.a: $(GOBJ)
- rm -f $@
- ar -q $@ $(GOBJ)
-
-libxtivy.a: $(XTOBJ)
- rm -f $@
- ar -q $@ $(XTOBJ)
-
-libgtkivy.a: $(GTKOBJ)
- rm -f $@
- ar -q $@ $(GTKOBJ)
-
-libglutivy.a: $(GLUTOBJ)
- rm -f $@
- ar -q $@ $(GLUTOBJ)
-
-libtclivy.a: $(TCLOBJ)
- rm -f $@
- ar -q $@ $(TCLOBJ)
-
-libivy.so.$(MAJOR).$(MINOR): $(OBJ)
- $(CC) -G -Wl,-h,libivy.so.$(MAJOR) -o $@ $(OBJ) -lc
-
-libgivy.so.$(MAJOR).$(MINOR): $(GOBJ)
- $(CC) -G -Wl,-h,libgivy.so.$(MAJOR) -o $@ $(GOBJ) -lc
-
-libxtivy.so.$(MAJOR).$(MINOR): $(XTOBJ)
- $(CC) -G -Wl,-h,libxtivy.so.$(MAJOR) -o $@ \
- $(XTOBJ) $(XTLIB) -lXt -lX11 -lc
-
-libgtkivy.so.$(MAJOR).$(MINOR): $(GTKOBJ)
- $(CC) -G -Wl,-h,libgtkivy.so.$(MAJOR) -o $@ \
- $(GTKOBJ) $(GTKLIB) -lX11 -lc
-
-libglutivy.so.$(MAJOR).$(MINOR): $(GTKOBJ)
- $(CC) -G -Wl,-h,libglutivy.so.$(MAJOR) -o $@ \
- $(GLUTOBJ) $(GLUTLIB) -lX11 -lc
-
-libtclivy.so.$(MAJOR).$(MINOR): $(TCLOBJ)
- $(CC) -G -Wl,-h,libtclivy.so.$(MAJOR) -o $@ \
- $(TCLOBJ) $(TCLLIB) -lc
-
-clean:
- -rm -f $(TARGETS) *.o *.a *.so *.so.* *~
-
-installlibs: static-libs shared-libs
- test -d $(PREFIX)/usr/lib || mkdirhier $(PREFIX)/usr/lib
- test -d $(PREFIX)/usr/X11R6/lib || mkdirhier $(PREFIX)/usr/X11R6/lib
- test -d $(PREFIX)/usr/include || mkdirhier $(PREFIX)/usr/include
- install -m644 libivy.a $(PREFIX)/usr/lib
- 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 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 *.h $(PREFIX)/usr/include
-
-installliblinks: installlibs
- ln -s /usr/lib/libtclivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib/libtclivy.so
- ln -s /usr/lib/libivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib/libivy.so
- ln -s /usr/lib/libivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib/libivy.so.$(MAJOR)
- ln -s /usr/lib/libgivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib/libgivy.so
- 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/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)
-
-installbins: commands
- test -d $(PREFIX)/usr/bin || mkdirhier $(PREFIX)/usr/bin
- 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 ivyglutprobe $(PREFIX)/usr/X11R6/bin
-
-installdocs:
- test -d $(PREFIX)/usr/doc/ivy-c || mkdirhier $(PREFIX)/usr/doc/ivy-c
- for f in `find ../doc/*.html -type f -maxdepth 1`; do \
- install -m 644 $$f $(PREFIX)/usr/doc/ivy-c; \
- done
- test -d $(PREFIX)/usr/man/man1 || mkdirhier $(PREFIX)/usr/man/man1
- for f in `find ../doc/*.1 -type f -maxdepth 1`; do \
- install -m 644 $$f $(PREFIX)/usr/man/man1; \
- done
-
-install: installlibs installbins installliblinks installdocs
-
-rpm::
- /usr/bin/rpmize
-
diff --git a/src/Test.tcl b/src/Test.tcl
deleted file mode 100755
index 052b3bb..0000000
--- a/src/Test.tcl
+++ /dev/null
@@ -1,17 +0,0 @@
-load libtclivy.so.3.5
-proc conCB { app str2 } {
- puts "TCL:Application:$app $str2"
-}
-proc discCB { app str2 } {
- puts "TCL:Application:$app $str2"
-}
-proc msgCB {str} {
- puts "TCL:Message:$str"
-}
-Ivy::init TESTTCL "TESTTCL Ready" conCB discCB
-Ivy::start ""
-Ivy::bind "(.*)" msgCB
-Ivy::applist
-Ivy::send test
-Ivy::applist
-vwait tcl_interactive
diff --git a/src/ivy.c b/src/ivy.c
index 870e6fc..1a019c8 100644
--- a/src/ivy.c
+++ b/src/ivy.c
@@ -23,7 +23,12 @@
#include <stdarg.h>
#include <ctype.h>
+#ifndef USE_PCRE_REGEX
#include <regex.h>
+#else
+#define OVECSIZE 60 /* must be multiple of 3, for regexp return */
+#include <pcre.h>
+#endif
#include <fcntl.h>
@@ -76,7 +81,12 @@ struct _msg_snd { /* requete de reception d'un client */
MsgSndPtr next;
int id;
char *str_regexp; /* la regexp sous forme inhumaine */
+#ifndef USE_PCRE_REGEX
regex_t regexp; /* la regexp sous forme machine */
+#else
+ pcre *regexp;
+ pcre_extra *inspect;
+#endif
};
struct _clnt_lst {
@@ -168,6 +178,40 @@ static void IvyCleanup()
SocketClose( broadcast );
}
+#ifdef USE_PCRE_REGEX
+static int
+MsgCall (const char *message, MsgSndPtr msg, Client client)
+{
+ int ovector[OVECSIZE];
+ int index;
+ int rc=pcre_exec(
+ msg->regexp,
+ msg->inspect,
+ message,
+ strlen(message),
+ 0, /* debut */
+ 0, /* no other regexp option */
+ ovector,
+ OVECSIZE);
+ if (rc<1) return 0; /* no match */
+#ifdef DEBUG
+ printf( "Sending message id=%d '%s'\n",msg->id,message);
+#endif
+ SocketSend( client, "%d %d" ARG_START ,Msg, msg->id);
+#ifdef DEBUG
+ printf( "Send matching args count %ld\n",msg->regexp.re_nsub);
+#endif
+ index=1;
+ while ( index<rc ) {
+ SocketSend( client, "%.*s" ARG_END , ovector[2*index+1]- ovector[2*index],
+ message + ovector[2*index]);
+ ++index;
+ }
+ SocketSend (client, "\n");
+ return 1;
+}
+
+#else /* we don't USE_PCRE_REGEX */
static int
MsgCall (const char *message, MsgSndPtr msg, Client client)
{
@@ -219,6 +263,7 @@ MsgCall (const char *message, MsgSndPtr msg, Client client)
SocketSend (client, "\n");
return 1;
}
+#endif /* USE_PCRE_REGEX */
static int
ClientCall (IvyClientPtr clnt, const char *message)
@@ -284,7 +329,13 @@ static void Receive( Client client, void *data, char *line )
char *argv[MAX_MATCHING_ARGS];
char *arg;
int kind_of_msg = Bye;
+#ifndef USE_PCRE_REGEX
regex_t regexp;
+#else
+ pcre *regexp;
+ const char *errbuf;
+ int erroffset;
+#endif
err = sscanf( line ,"%d %d", &kind_of_msg, &id );
arg = strstr( line , ARG_START );
@@ -323,6 +374,7 @@ static void Receive( Client client, void *data, char *line )
#endif //DEBUG
return;
}
+#ifndef USE_PCRE_REGEX
reg = regcomp(&regexp, arg, REG_ICASE|REG_EXTENDED);
if ( reg == 0 )
{
@@ -341,9 +393,31 @@ static void Receive( Client client, void *data, char *line )
printf("Error compiling '%s', %s\n", arg, errbuf);
MsgSendTo( client, Error, reg, errbuf );
}
+#else
+ regexp = pcre_compile(arg, 0,&errbuf,&erroffset,NULL);
+ if ( regexp != NULL )
+ {
+ IVY_LIST_ADD( clnt->msg_send, snd )
+ if ( snd )
+ {
+ snd->id = id;
+ snd->str_regexp = strdup( arg );
+ snd->regexp = regexp;
+ snd->inspect = pcre_study(regexp,0,&errbuf);
+ if (errbuf!=NULL)
+ {
+ printf("Error studying %s, message: %s\n",arg,errbuf);
+ }
+ }
+ }
+ else
+ {
+ printf("Error compiling '%s', %s\n", arg, errbuf);
+ MsgSendTo( client, Error, erroffset, errbuf );
+ }
+#endif
break;
case DelRegexp:
-
#ifdef DEBUG
printf("Regexp Delete id=%d\n", id);
#endif //DEBUG
@@ -351,12 +425,17 @@ static void Receive( Client client, void *data, char *line )
IVY_LIST_ITER( clnt->msg_send, snd, ( id != snd->id ));
if ( snd )
{
+#ifndef USE_PCRE_REGEX
+ free( snd->str_regexp );
+#else
free( snd->str_regexp );
+ if (snd->inspect!=NULL) pcre_free(snd->inspect);
+ pcre_free(snd->regexp);
+#endif
IVY_LIST_REMOVE( clnt->msg_send, snd );
}
break;
case StartRegexp:
-
#ifdef DEBUG
printf("Regexp Start id=%d Application='%s'\n", id, arg);
#endif //DEBUG
@@ -701,6 +780,7 @@ IvyUnbindMsg (MsgRcvPtr msg)
IVY_LIST_EACH (clients, clnt ) {
MsgSendTo( clnt->client, DelRegexp,msg->id, "");
}
+ IVY_LIST_REMOVE( msg_recv, msg );
}
/* demande de reception d'un message */
diff --git a/src/ivyprobe.c b/src/ivyprobe.c
index a5a477b..45fe00a 100644
--- a/src/ivyprobe.c
+++ b/src/ivyprobe.c
@@ -1,19 +1,20 @@
/*
* Ivy probe
*
- * Copyright (C) 1997-2000
+ * Copyright (C) 1997-2004
* Centre d'Études de la Navigation Aérienne
*
* Main and only file
*
* Authors: François-Régis Colin <fcolin@cena.fr>
+ * Yannick Jestin <jestin@cena.fr>
*
- * $Id$
- *
* Please refer to file version.h for the
* copyright notice regarding this software
*/
-
+#define DEFAULT_IVYPROBE_NAME "IVYPROBE"
+#define DEFAULT_READY " Ready"
+#include "version.h"
#define IVYMAINLOOP
@@ -271,7 +272,12 @@ int main(int argc, char *argv[])
int timer_test = 0;
char busbuf [1024] = "";
const char* bus = 0;
- while ((c = getopt(argc, argv, "d:b:w:t")) != EOF)
+ char agentnamebuf [1024] = "";
+ const char* agentname = DEFAULT_IVYPROBE_NAME;
+ char agentready [1024] = "";
+ const char* helpmsg =
+ "[options] [regexps]\n\t-b bus\tdefines the Ivy bus to which to connect to, defaults to 127:2010\n\t-t\ttriggers the timer test\n\t-n name\tchanges the name of the agent, defaults to IVYPROBE\n\t-v\tprints the ivy relase number\n\nregexp is a Perl5 compatible regular expression (see ivyprobe(1) and pcrepattern(3) for more info\nuse .help within ivyprobe\n";
+ while ((c = getopt(argc, argv, "vn:d:b:w:t")) != EOF)
switch (c) {
case 'b':
strcpy (busbuf, optarg);
@@ -280,10 +286,20 @@ int main(int argc, char *argv[])
case 'w':
wait_count = atoi(optarg) ;
break;
+ case 'n':
+ strcpy(agentnamebuf, optarg);
+ agentname=agentnamebuf;
+ case 'v':
+ printf("ivy c library version %d.%d\n",IVYMAJOR_VERSION,IVYMINOR_VERSION);
+ break;
case 't':
timer_test = 1;
break;
+ default:
+ printf("usage: %s %s",argv[0],helpmsg);
+ exit(1);
}
+ sprintf(agentready,"%s Ready",agentname);
/* Mainloop management */
#ifdef XTMAINLOOP
@@ -297,7 +313,7 @@ int main(int argc, char *argv[])
glClearColor(0.49, 0.62, 0.75, 0.0);
glutDisplayFunc(display);
#endif
- IvyInit ("IVYPROBE", "IVYPROBE READY", ApplicationCallback,NULL,NULL,NULL);
+ IvyInit (agentname, agentready, ApplicationCallback,NULL,NULL,NULL);
IvyBindDirectMsg( DirectCallback,NULL);
for (; optind < argc; optind++)
IvyBindMsg (Callback, NULL, argv[optind]);
diff --git a/src/ivysocket.c b/src/ivysocket.c
index 94fee0f..c6a398e 100644
--- a/src/ivysocket.c
+++ b/src/ivysocket.c
@@ -30,9 +30,6 @@
#include <unistd.h>
#include <sys/time.h>
#include <sys/types.h>
-#ifdef __APPLE__
-#define _BSD_SOCKLEN_T_ int
-#endif
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
diff --git a/src/ivytcl.c b/src/ivytcl.c
index f14a864..c59937f 100755
--- a/src/ivytcl.c
+++ b/src/ivytcl.c
@@ -16,7 +16,11 @@
#include <sys/time.h>
#include <unistd.h>
+#ifdef __APPLE__
+#include <malloc/malloc.h>
+#else
#include <malloc.h>
+#endif
#include <string.h>
#include <stdlib.h>
#include <signal.h>
@@ -28,7 +32,7 @@
#include "ivy.h"
#include "timer.h"
-//#define TCL_CHANNEL_INTEGRATION
+// defined or not in the Makefile only
#ifdef TCL_CHANNEL_INTEGRATION
// On utilisa la boucle Standard TCL
// mais il y a des problemes sur les socket server
@@ -262,15 +266,19 @@ IvyMsgCB(IvyClientPtr app,
size += strlen(argv[i]) + 3;
}
size ++;
+ size += strlen(IvyGetApplicationName(app))+4;
script_to_call = ckalloc(size);
strcpy(script_to_call, filter->script);
- strcat(script_to_call, " {");
+ strcat(script_to_call, " \"");
+ strcat(script_to_call, IvyGetApplicationName(app));
+ strcat(script_to_call, "\"");
+ /* strcat(script_to_call, " {"); */
for (i = 0; i < argc; i++) {
- strcat(script_to_call, "\"");
+ strcat(script_to_call, " \"");
strcat(script_to_call, argv[i]);
- strcat(script_to_call, "\" ");
+ strcat(script_to_call, "\"");
}
- strcat(script_to_call, "}");
+ /* strcat(script_to_call, " }"); */
Tcl_Preserve(filter->interp);
result = Tcl_GlobalEval(filter->interp, script_to_call);
@@ -394,11 +402,11 @@ IvyBindCmd(ClientData clientData,
}
filter = (filter_struct *) ckalloc(sizeof(filter_struct));
- filter->filter = ckalloc(strlen(argv[1])+1);
+ filter->filter = ckalloc(strlen(argv[1])+1); // regexp
strcpy(filter->filter, argv[1]);
- filter->script = ckalloc(strlen(argv[2])+1);
+ filter->script = ckalloc(strlen(argv[2])+1); // callback proc name
strcpy(filter->script, argv[2]);
- filter->id = IvyBindMsg(IvyMsgCB, (void *) filter, filter->filter, NULL);
+ filter->id = IvyBindMsg(IvyMsgCB, (void *) filter, filter->filter, NULL); // MsgPtr id
filter->interp = interp;
entry = Tcl_CreateHashEntry(&filter_table, (char *) filter_id, &dummy);
Tcl_SetHashValue(entry, (ClientData) filter);
@@ -419,7 +427,6 @@ IvyUnbindCmd(ClientData clientData,
char *end;
filter_struct *filter;
Tcl_HashEntry *entry;
-
if (argc != 2) {
Tcl_AppendResult(interp, "wrong # of args: \"",
argv[0], " filterId\"", (char *) NULL);
@@ -439,13 +446,12 @@ IvyUnbindCmd(ClientData clientData,
}
filter = (filter_struct *) Tcl_GetHashValue(entry);
+ Tcl_DeleteHashEntry(entry);
IvyUnbindMsg(filter->id);
ckfree(filter->script);
ckfree(filter->filter);
ckfree((char *) filter);
-
- Tcl_DeleteHashEntry(entry);
-
+
return TCL_OK;
}
diff --git a/src/version.h b/src/version.h
index 5aa3b9a..70172f5 100644
--- a/src/version.h
+++ b/src/version.h
@@ -24,3 +24,5 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
+#define IVYMAJOR_VERSION 3
+#define IVYMINOR_VERSION 6