[ekg2-devel] Ekg2::Watch (new)

Wiesław Ochmiński wiechu w wiechu.com
Śro, 20 Lut 2008, 19:28:03 CET


Kłaniam!

Łatka na dostęp do listy watches ze skryptów perlowych.

    Pozdrawiam,
	W.
-- 
 Wiesław Ochmiński, Polska Północna, Malbork.
-------------- następna część ---------
Index: perl_bless.h
===================================================================
--- perl_bless.h	(wersja 3798)
+++ perl_bless.h	(kopia robocza)
@@ -16,6 +16,7 @@
 	BLESS_VARIABLE,
 	BLESS_PLUGIN,
 	BLESS_WINDOW,
+	BLESS_WATCH,
 	BLESS_COMMAND,
 	BLESS_SESSION_PARAM,
 	BLESS_TIMER,
@@ -49,6 +50,9 @@
 #define bless_window(window)\
 	(SV *) ekg2_bless(BLESS_WINDOW, 0, window)
 
+#define bless_watch(watch)\
+	(SV *) ekg2_bless(BLESS_WATCH, 0, watch)
+
 #define bless_command(command)\
 	(SV *) ekg2_bless(BLESS_COMMAND, 0, command)
 
Index: common/typemap
===================================================================
--- common/typemap	(wersja 3798)
+++ common/typemap	(kopia robocza)
@@ -5,12 +5,14 @@
 Ekg2::Session		T_Ekg2Ses
 Ekg2::Session::Param	T_Ekg2SesVar
 Ekg2::Script		T_Ekg2Scr
+Ekg2::Watch		T_Ekg2Watch
 Ekg2::Window		T_Ekg2Win
 Ekg2::Plugin		T_Ekg2Plu
 Ekg2::User		T_Ekg2User
 Ekg2::Timer		T_Ekg2Time
 
 Ekg2::Userlist		T_PlainList
+Ekg2::Watch		T_PlainList
 short *			T_PlainList
 
 INPUT
@@ -39,6 +41,9 @@
 T_Ekg2Comm
 	$var = (command_t *) Ekg2_ref_object($arg)
 
+T_Ekg2Watch
+	$var = (watch_t *) Ekg2_ref_object($arg)
+
 T_Ekg2Win
 	$var = (window_t *) Ekg2_ref_object($arg)
 
@@ -61,6 +66,9 @@
 T_Ekg2Comm
 	$arg = (void *) bless_command( (command_t *) $var);
 
+T_Ekg2Watch
+	$arg = (void *) bless_watch( (watch_t *) $var);
+
 T_Ekg2Win
 	$arg = (void *) bless_window( (window_t *) $var);
 	
Index: common/Ekg2.xs
===================================================================
--- common/Ekg2.xs	(wersja 3798)
+++ common/Ekg2.xs	(kopia robocza)
@@ -178,6 +178,7 @@
 	ekg2_boot(Session);
 	ekg2_boot(Variable);
 	ekg2_boot(Plugin);
+	ekg2_boot(Watch);
 	ekg2_boot(Window);
 	ekg2_boot(Command);
 	ekg2_boot(Timer);
Index: common/module.h
===================================================================
--- common/module.h	(wersja 3798)
+++ common/module.h	(kopia robocza)
@@ -12,6 +12,7 @@
 
 #include <ekg/debug.h>
 #include <ekg/dynstuff.h>
+#include <ekg/plugins.h>
 #include <ekg/sessions.h>
 #include <ekg/stuff.h>
 #include <ekg/userlist.h>
@@ -38,6 +39,7 @@
 typedef command_t 	*Ekg2__Command;
 typedef window_t	*Ekg2__Window;
 typedef plugin_t	*Ekg2__Plugin;
+typedef watch_t		*Ekg2__Watch;
 
 typedef struct timer	*Ekg2__Timer;
 
Index: perl_bless.c
===================================================================
--- perl_bless.c	(wersja 3798)
+++ perl_bless.c	(kopia robocza)
@@ -126,6 +126,20 @@
 	hv_store(hv, "attr",4, create_sv_ptr(fstr->attr), 0);
 }
 
+void ekg2_bless_watch(HV *hv, watch_t *watch)
+{
+	char *plugin;
+	if (watch->plugin) plugin = watch->plugin->name;
+	else		   plugin = ("-");
+	debug_bless("blessing watch fd:%d plugin:%s\n", watch->fd, plugin);
+	hv_store(hv, "fd", 2, newSViv(watch->fd), 0);
+	hv_store(hv, "type", 4, newSViv(watch->type), 0);
+	hv_store(hv, "removed", 7, newSViv(watch->removed), 0);
+	hv_store(hv, "timeout", 7, newSViv(watch->timeout), 0);
+	hv_store(hv, "plugin", 6, new_pv(plugin), 0);
+	hv_store(hv, "started", 7, newSViv(watch->started), 0);
+}
+
 void ekg2_bless_window(HV *hv, window_t *window)
 {
 	char *target = window_target(window);
@@ -222,6 +236,10 @@
                         stash = gv_stashpv("Ekg2::Plugin", 1);
                         ekg2_bless_plugin(hv, object);
                         break;
+		case BLESS_WATCH:
+                        stash = gv_stashpv("Ekg2::Watch", 1);
+                        ekg2_bless_watch(hv, object);
+			break;
 		case BLESS_WINDOW:
                         stash = gv_stashpv("Ekg2::Window", 1);
                         ekg2_bless_window(hv, object);


Więcej informacji o liście dyskusyjnej ekg2-devel