diff options
-rw-r--r-- | src/Makefile | 21 | ||||
-rw-r--r-- | src/ivy.adb | 23 | ||||
-rw-r--r-- | src/ivy_ada.c | 28 |
3 files changed, 54 insertions, 18 deletions
diff --git a/src/Makefile b/src/Makefile index d63f55c..5ed5fc3 100644 --- a/src/Makefile +++ b/src/Makefile @@ -15,17 +15,26 @@ # copyright notice regarding this software # +CC=gcc + TARGETS = spy send +SRC_ADA = spy.adb send.adb +SRC_C = ivy_ada.c +OBJ = ${SRC_C:.c=.o} + +LDFLAGS= -livy -lpcre +CCFLAGS= -O2 -Wall -Wshadow -all: commands +all: $(TARGETS) -commands: $(TARGETS) +%.o: %.c + $(CC) -c -o $@ $< $(CCFLAGS) -spy: - gnatmake spy.adb -largs -livy +spy : ${OBJ} + gnatmake $@ -largs $^ ${LDFLAGS} -send: - gnatmake send.adb -largs -livy +send : ${OBJ} + gnatmake $@ -largs $^ ${LDFLAGS} clean: -rm -f $(TARGETS) *.o *.ali *~ diff --git a/src/ivy.adb b/src/ivy.adb index ae3dec9..067f935 100644 --- a/src/ivy.adb +++ b/src/ivy.adb @@ -1,6 +1,6 @@ +with Ada.Text_IO; use Ada.Text_IO; package body Ivy is - Type Dummy is null record; Type Proc_Ptr is access procedure; @@ -17,13 +17,13 @@ procedure C_IvyStart ( Bus : C.Strings.chars_ptr ); pragma Import (C, C_IvyStart, "IvyStart"); function C_IvyBindMsg (MsgCallback : MsgCallback_T; - Data : UserData_T; + Data : UserData_T; Mess : C.char_array) return Subscription_Id_T; -pragma Import (C, C_IvyBindMsg, "IvyBindMsg"); +pragma Import (C, C_IvyBindMsg, "IvyBindMsgNoVarArgs"); procedure C_IvyBindMsg (MsgCallback : MsgCallback_T; - Data : UserData_T; + Data : UserData_T; Mess : C.char_array) is Dummy : Subscription_Id_T; @@ -36,15 +36,14 @@ end C_IvyBindMsg; -- Il faudrait traiter va_list .... -- ou utiliser _BindMsg -function C_IvySendMsg (Format : C.char_array := C.To_C("%s"); - Mess : C.char_array) return C.int; -pragma Import (C, C_IvySendMsg, "IvySendMsg"); +function C_IvySendMsg (Mess : C.char_array) return C.int; +pragma Import (C, C_IvySendMsg, "IvySendMsgNoVarArgs"); procedure C_IvySendMsg (Format : C.char_array := C.To_C("%s"); Mess : C.char_array) is Dummy : C.int; begin - Dummy:=C_IvySendMsg (Format, Mess); + Dummy:=C_IvySendMsg ( Mess); end C_IvySendMsg; -- pragma Import (C, C_IvySendMsg, "IvySendMsg"); Non autorise en version 3.12 -- de gnat (import multiple avec profils differents !?) @@ -91,7 +90,7 @@ Protected API is entry UnbindMsg ( Id : Subscription_Id_T); private BusReady : Boolean :=False; -end API; +end API; protected body API is @@ -118,12 +117,12 @@ end configure; entry SendMsg (Mess : String; Nb : out Nombre_T) when BusReady is begin - Nb:=Nombre_T(C_IvySendMsg( Mess => C.To_C(Mess))); + Nb:=Nombre_T(C_IvySendMsg( C.To_C(Mess))); end SendMsg; entry SendMsg (Mess : String) when BusReady is begin - C_IvySendMsg( Mess => C.To_C(Mess)); + C_IvySendMsg(Mess => C.To_C(Mess)); end SendMsg; entry SendDieMsg ( app : AppClientPtr_T) when BusReady is @@ -143,7 +142,7 @@ entry BindMsg ( MsgCallback : MsgCallback_T; user_data : UserData_T; Regexp : String) when BusReady is begin - C_IvyBindMsg( MsgCallback, user_data, C.To_C(regexp)); + C_IvyBindMsg( MsgCallback, user_data, C.To_C(regexp)); end BindMsg; entry UnbindMsg ( Id : Subscription_Id_T) when BusReady is diff --git a/src/ivy_ada.c b/src/ivy_ada.c new file mode 100644 index 0000000..b24a89f --- /dev/null +++ b/src/ivy_ada.c @@ -0,0 +1,28 @@ +#include <Ivy/ivy.h> + +MsgRcvPtr IvyBindMsgNoVarArgs (MsgCallback callback, void *user_data, const char *regex ); +MsgRcvPtr IvyChangeMsgNoVarArgs (MsgRcvPtr msg, const char *regex); +void IvySendErrorNoVarArgs(IvyClientPtr app, int id, const char *error_msg ); +int IvySendMsgNoVarArgs( const char *message); + + +MsgRcvPtr +IvyBindMsgNoVarArgs (MsgCallback callback, void *user_data, const char *regex ) +{ + return IvyBindMsg (callback, user_data, "%s", regex); +} + +MsgRcvPtr +IvyChangeMsgNoVarArgs (MsgRcvPtr msg, const char *regex){ + return IvyChangeMsg (msg, "%s", regex); +} + +int IvySendMsgNoVarArgs( const char *message){ + return IvySendMsg("%s", message); +} + +void IvySendErrorNoVarArgs(IvyClientPtr app, int id, const char *error_msg ){ + return IvySendError( app, id, "%s", error_msg ); +} + + |