*** empty log message ***
authorroot <root>
Thu, 14 Dec 2006 15:19:30 +0000 (15:19 +0000)
committerroot <root>
Thu, 14 Dec 2006 15:19:30 +0000 (15:19 +0000)
Changes
MANIFEST
src/Makefile.in
src/iom_perl.h [new file with mode: 0644]
src/iom_perl.xs [new file with mode: 0644]
src/rxvtperl.xs

diff --git a/Changes b/Changes
index 44818d7..2f83c30 100644 (file)
--- a/Changes
+++ b/Changes
@@ -25,6 +25,7 @@ TODO: fix rounding of colors when !xft (#aaaaaa => #a9a900) (do not use correct,
        - fix make depend in src/, reported by exg.
         - fixed typo in urxvt::GET_CUSTOM, causing the result to be wrong.
           (patch by Sergey Vlasov).
+        - unbundled iom perl interface somewhat.
 
 8.1  Thu Dec  7 22:27:25 CET 2006
         - ケリスマスプレゼント - zomg!!1, it's too early!!!
index 34a5f13..bf5d267 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -155,6 +155,8 @@ src/table/jis0213_2.h
 
 src/urxvt.pm
 src/typemap
+src/iom_perl.h
+src/iom_perl.xs
 src/rxvtperl.h
 src/rxvtperl.xs
 
index 67821a7..eee28c1 100644 (file)
@@ -136,9 +136,9 @@ install: allbin alldoc install-perl
 perlxsi.c: Makefile
        $(PERL) -MExtUtils::Embed -e xsinit -- -std urxvt
 
-rxvtperl.C: rxvtperl.xs typemap
+rxvtperl.C: rxvtperl.xs iom_perl.h iom_perl.xs typemap
        #$(PERL) @PERLPRIVLIBEXP@/ExtUtils/xsubpp -csuffix .C -C++ -typemap @PERLPRIVLIBEXP@/ExtUtils/typemap -typemap typemap -prototypes rxvtperl.xs >$@
-       $(PERL) @PERLPRIVLIBEXP@/ExtUtils/xsubpp -C++ -typemap @PERLPRIVLIBEXP@/ExtUtils/typemap -typemap typemap -prototypes $(srcdir)/rxvtperl.xs >$@
+       PERL="$(PERL)" $(PERL) @PERLPRIVLIBEXP@/ExtUtils/xsubpp -C++ -typemap @PERLPRIVLIBEXP@/ExtUtils/typemap -typemap typemap -prototypes $(srcdir)/rxvtperl.xs >$@
 
 rxvtperl.o: rxvtperl.C perlxsi.c
        $(COMPILE) @PERLFLAGS@ -DLIBDIR="\"$(libdir)/urxvt\"" -c $<
diff --git a/src/iom_perl.h b/src/iom_perl.h
new file mode 100644 (file)
index 0000000..a6c8278
--- /dev/null
@@ -0,0 +1,124 @@
+/////////////////////////////////////////////////////////////////////////////
+
+#define SvWATCHER(sv) (perl_watcher *)SvPTR (sv, IOM_CLASS "::watcher")
+
+struct perl_watcher
+{
+  SV *cbsv;
+  HV *self;
+
+  perl_watcher ()
+  : cbsv (0)
+  {
+  }
+
+  ~perl_watcher ()
+  {
+    SvREFCNT_dec (cbsv);
+  }
+
+  void cb (SV *cb)
+  {
+    SvREFCNT_dec (cbsv);
+    cbsv = newSVsv (cb);
+  }
+
+  void invoke (const char *type, SV *self, int arg = -1);
+};
+
+void
+perl_watcher::invoke (const char *type, SV *self, int arg)
+{
+  dSP;
+
+  ENTER;
+  SAVETMPS;
+
+  PUSHMARK (SP);
+
+  XPUSHs (sv_2mortal (self));
+
+  if (arg >= 0)
+    XPUSHs (sv_2mortal (newSViv (arg)));
+
+  PUTBACK;
+  call_sv (cbsv, G_VOID | G_EVAL | G_DISCARD);
+  SPAGAIN;
+
+  PUTBACK;
+  FREETMPS;
+  LEAVE;
+
+  if (SvTRUE (ERRSV))
+    rxvt_warn ("%s callback evaluation error: %s", type, SvPV_nolen (ERRSV));
+}
+
+#define newSVtimer(timer) new_ref ((timer)->self, IOM_CLASS "::timer")
+#define SvTIMER(sv) (timer *)(perl_watcher *)SvPTR ((sv), IOM_CLASS "::timer")
+
+struct timer : perl_watcher, time_watcher
+{
+  tstamp interval;
+
+  timer ()
+  : time_watcher (this, &timer::execute)
+  {
+  }
+
+  void execute (time_watcher &w)
+  {
+    if (interval)
+      start (at + interval);
+
+    invoke (IOM_CLASS "::timer", newSVtimer (this));
+  }
+};
+
+#define newSViow(iow) new_ref ((iow)->self, IOM_CLASS "::iow")
+#define SvIOW(sv) (iow *)(perl_watcher *)SvPTR ((sv), IOM_CLASS "::iow")
+
+struct iow : perl_watcher, io_watcher
+{
+  iow ()
+  : io_watcher (this, &iow::execute)
+  {
+  }
+
+  void execute (io_watcher &w, short revents)
+  {
+    invoke (IOM_CLASS "::iow", newSViow (this), revents);
+  }
+};
+
+#define newSViw(iw) new_ref ((iw)->self, IOM_CLASS "::iw")
+#define SvIW(sv) (iw *)(perl_watcher *)SvPTR ((sv), IOM_CLASS "::iw")
+
+struct iw : perl_watcher, idle_watcher
+{
+  iw ()
+  : idle_watcher (this, &iw::execute)
+  {
+  }
+
+  void execute (idle_watcher &w)
+  {
+    invoke (IOM_CLASS "::iw", newSViw (this));
+  }
+};
+
+#define newSVpw(pw) new_ref ((pw)->self, IOM_CLASS "::pw")
+#define SvPW(sv) (pw *)(perl_watcher *)SvPTR ((sv), IOM_CLASS "::pw")
+
+struct pw : perl_watcher, child_watcher
+{
+  pw ()
+  : child_watcher (this, &pw::execute)
+  {
+  }
+
+  void execute (child_watcher &w, int status)
+  {
+    invoke (IOM_CLASS "::pw", newSVpw (this), status);
+  }
+};
+
diff --git a/src/iom_perl.xs b/src/iom_perl.xs
new file mode 100644 (file)
index 0000000..7522007
--- /dev/null
@@ -0,0 +1,185 @@
+#############################################################################
+# IOM_CLASS::watcher
+#############################################################################
+
+MODULE = IOM_MODULE             PACKAGE = IOM_CLASS::watcher
+
+CHAINED
+perl_watcher::cb (SV *cb)
+       CODE:
+        THIS->cb (cb);
+        OUTPUT:
+        RETVAL
+
+#############################################################################
+# IOM_CLASS::timer
+#############################################################################
+
+MODULE = IOM_MODULE             PACKAGE = IOM_CLASS::timer
+
+SV *
+timer::new ()
+       CODE:
+        timer *w =  new timer;
+        w->start (NOW);
+        RETVAL = newSVptr ((void *)(perl_watcher *)w, "IOM_CLASS::timer");
+        w->self = (HV *)SvRV (RETVAL);
+        OUTPUT:
+        RETVAL
+
+NV
+timer::at ()
+       CODE:
+        RETVAL = THIS->at;
+        OUTPUT:
+        RETVAL
+
+CHAINED
+timer::interval (NV interval)
+       CODE:
+        THIS->interval = interval;
+        OUTPUT:
+        RETVAL
+
+CHAINED
+timer::set (NV tstamp)
+       CODE:
+        THIS->set (tstamp);
+        OUTPUT:
+        RETVAL
+
+CHAINED
+timer::start (NV tstamp = THIS->at)
+       CODE:
+        THIS->start (tstamp);
+        OUTPUT:
+        RETVAL
+
+CHAINED
+timer::after (NV delay)
+       CODE:
+        THIS->start (NOW + delay);
+        OUTPUT:
+        RETVAL
+
+CHAINED
+timer::stop ()
+       CODE:
+        THIS->stop ();
+        OUTPUT:
+        RETVAL
+
+void
+timer::DESTROY ()
+
+#############################################################################
+# IOM_CLASS::iow
+#############################################################################
+
+MODULE = IOM_MODULE             PACKAGE = IOM_CLASS::iow
+
+SV *
+iow::new ()
+       CODE:
+        iow *w =  new iow;
+        RETVAL = newSVptr ((void *)(perl_watcher *)w, "IOM_CLASS::iow");
+        w->self = (HV *)SvRV (RETVAL);
+        OUTPUT:
+        RETVAL
+
+CHAINED
+iow::fd (int fd)
+       CODE:
+        THIS->fd = fd;
+        OUTPUT:
+        RETVAL
+
+CHAINED
+iow::events (short events)
+       CODE:
+        THIS->events = events;
+        OUTPUT:
+        RETVAL
+
+CHAINED
+iow::start ()
+       CODE:
+        THIS->start ();
+        OUTPUT:
+        RETVAL
+
+CHAINED
+iow::stop ()
+       CODE:
+        THIS->stop ();
+        OUTPUT:
+        RETVAL
+
+void
+iow::DESTROY ()
+
+#############################################################################
+# IOM_CLASS::iw
+#############################################################################
+
+MODULE = IOM_MODULE             PACKAGE = IOM_CLASS::iw
+
+SV *
+iw::new ()
+       CODE:
+        iw *w =  new iw;
+        RETVAL = newSVptr ((void *)(perl_watcher *)w, "IOM_CLASS::iw");
+        w->self = (HV *)SvRV (RETVAL);
+        OUTPUT:
+        RETVAL
+
+CHAINED
+iw::start ()
+       CODE:
+        THIS->start ();
+        OUTPUT:
+        RETVAL
+
+CHAINED
+iw::stop ()
+       CODE:
+        THIS->stop ();
+        OUTPUT:
+        RETVAL
+
+void
+iw::DESTROY ()
+
+#############################################################################
+# IOM_CLASS::pw
+#############################################################################
+
+MODULE = IOM_MODULE             PACKAGE = IOM_CLASS::pw
+
+SV *
+pw::new ()
+       CODE:
+        pw *w =  new pw;
+        RETVAL = newSVptr ((void *)(perl_watcher *)w, "IOM_CLASS::pw");
+        w->self = (HV *)SvRV (RETVAL);
+        OUTPUT:
+        RETVAL
+
+CHAINED
+pw::start (int pid)
+       CODE:
+        THIS->start (pid);
+        OUTPUT:
+        RETVAL
+
+CHAINED
+pw::stop ()
+       CODE:
+        THIS->stop ();
+        OUTPUT:
+        RETVAL
+
+void
+pw::DESTROY ()
+
+
index 8d651b4..0595ed5 100644 (file)
@@ -119,130 +119,6 @@ SvPTR (SV *sv, const char *klass)
 
 /////////////////////////////////////////////////////////////////////////////
 
-#define SvWATCHER(sv) (perl_watcher *)SvPTR (sv, "urxvt::watcher")
-
-struct perl_watcher
-{
-  SV *cbsv;
-  HV *self;
-
-  perl_watcher ()
-  : cbsv (0)
-  {
-  }
-
-  ~perl_watcher ()
-  {
-    SvREFCNT_dec (cbsv);
-  }
-
-  void cb (SV *cb)
-  {
-    SvREFCNT_dec (cbsv);
-    cbsv = newSVsv (cb);
-  }
-
-  void invoke (const char *type, SV *self, int arg = -1);
-};
-
-void
-perl_watcher::invoke (const char *type, SV *self, int arg)
-{
-  dSP;
-
-  ENTER;
-  SAVETMPS;
-
-  PUSHMARK (SP);
-
-  XPUSHs (sv_2mortal (self));
-
-  if (arg >= 0)
-    XPUSHs (sv_2mortal (newSViv (arg)));
-
-  PUTBACK;
-  call_sv (cbsv, G_VOID | G_EVAL | G_DISCARD);
-  SPAGAIN;
-
-  PUTBACK;
-  FREETMPS;
-  LEAVE;
-
-  if (SvTRUE (ERRSV))
-    rxvt_warn ("%s callback evaluation error: %s", type, SvPV_nolen (ERRSV));
-}
-
-#define newSVtimer(timer) new_ref ((timer)->self, "urxvt::timer")
-#define SvTIMER(sv) (timer *)(perl_watcher *)SvPTR ((sv), "urxvt::timer")
-
-struct timer : perl_watcher, time_watcher
-{
-  tstamp interval;
-
-  timer ()
-  : time_watcher (this, &timer::execute)
-  {
-  }
-
-  void execute (time_watcher &w)
-  {
-    if (interval)
-      start (at + interval);
-
-    invoke ("urxvt::timer", newSVtimer (this));
-  }
-};
-
-#define newSViow(iow) new_ref ((iow)->self, "urxvt::iow")
-#define SvIOW(sv) (iow *)(perl_watcher *)SvPTR ((sv), "urxvt::iow")
-
-struct iow : perl_watcher, io_watcher
-{
-  iow ()
-  : io_watcher (this, &iow::execute)
-  {
-  }
-
-  void execute (io_watcher &w, short revents)
-  {
-    invoke ("urxvt::iow", newSViow (this), revents);
-  }
-};
-
-#define newSViw(iw) new_ref ((iw)->self, "urxvt::iw")
-#define SvIW(sv) (iw *)(perl_watcher *)SvPTR ((sv), "urxvt::iw")
-
-struct iw : perl_watcher, idle_watcher
-{
-  iw ()
-  : idle_watcher (this, &iw::execute)
-  {
-  }
-
-  void execute (idle_watcher &w)
-  {
-    invoke ("urxvt::iw", newSViw (this));
-  }
-};
-
-#define newSVpw(pw) new_ref ((pw)->self, "urxvt::pw")
-#define SvPW(sv) (pw *)(perl_watcher *)SvPTR ((sv), "urxvt::pw")
-
-struct pw : perl_watcher, child_watcher
-{
-  pw ()
-  : child_watcher (this, &pw::execute)
-  {
-  }
-
-  void execute (child_watcher &w, int status)
-  {
-    invoke ("urxvt::pw", newSVpw (this), status);
-  }
-};
-
-/////////////////////////////////////////////////////////////////////////////
-
 #define SvOVERLAY(sv) (overlay *)SvPTR (sv, "urxvt::overlay")
 
 class overlay {
@@ -427,6 +303,10 @@ void overlay::set (int x, int y, SV *text, SV *rend)
   THIS->want_refresh = 1;
 }
 
+/////////////////////////////////////////////////////////////////////////////
+
+#define IOM_CLASS "urxvt"
+#include <iom_perl.h>
 
 /////////////////////////////////////////////////////////////////////////////
 
@@ -1948,188 +1828,5 @@ overlay::hide ()
 void
 overlay::DESTROY ()
 
-#############################################################################
-# urxvt::watcher
-#############################################################################
-
-MODULE = urxvt             PACKAGE = urxvt::watcher
-
-CHAINED
-perl_watcher::cb (SV *cb)
-       CODE:
-        THIS->cb (cb);
-        OUTPUT:
-        RETVAL
-
-#############################################################################
-# urxvt::timer
-#############################################################################
-
-MODULE = urxvt             PACKAGE = urxvt::timer
-
-SV *
-timer::new ()
-       CODE:
-        timer *w =  new timer;
-        w->start (NOW);
-        RETVAL = newSVptr ((void *)(perl_watcher *)w, "urxvt::timer");
-        w->self = (HV *)SvRV (RETVAL);
-        OUTPUT:
-        RETVAL
-
-NV
-timer::at ()
-       CODE:
-        RETVAL = THIS->at;
-        OUTPUT:
-        RETVAL
-
-CHAINED
-timer::interval (NV interval)
-       CODE:
-        THIS->interval = interval;
-        OUTPUT:
-        RETVAL
-
-CHAINED
-timer::set (NV tstamp)
-       CODE:
-        THIS->set (tstamp);
-        OUTPUT:
-        RETVAL
-
-CHAINED
-timer::start (NV tstamp = THIS->at)
-       CODE:
-        THIS->start (tstamp);
-        OUTPUT:
-        RETVAL
-
-CHAINED
-timer::after (NV delay)
-       CODE:
-        THIS->start (NOW + delay);
-        OUTPUT:
-        RETVAL
-
-CHAINED
-timer::stop ()
-       CODE:
-        THIS->stop ();
-        OUTPUT:
-        RETVAL
-
-void
-timer::DESTROY ()
-
-#############################################################################
-# urxvt::iow
-#############################################################################
-
-MODULE = urxvt             PACKAGE = urxvt::iow
-
-SV *
-iow::new ()
-       CODE:
-        iow *w =  new iow;
-        RETVAL = newSVptr ((void *)(perl_watcher *)w, "urxvt::iow");
-        w->self = (HV *)SvRV (RETVAL);
-        OUTPUT:
-        RETVAL
-
-CHAINED
-iow::fd (int fd)
-       CODE:
-        THIS->fd = fd;
-        OUTPUT:
-        RETVAL
-
-CHAINED
-iow::events (short events)
-       CODE:
-        THIS->events = events;
-        OUTPUT:
-        RETVAL
-
-CHAINED
-iow::start ()
-       CODE:
-        THIS->start ();
-        OUTPUT:
-        RETVAL
-
-CHAINED
-iow::stop ()
-       CODE:
-        THIS->stop ();
-        OUTPUT:
-        RETVAL
-
-void
-iow::DESTROY ()
-
-#############################################################################
-# urxvt::iw
-#############################################################################
-
-MODULE = urxvt             PACKAGE = urxvt::iw
-
-SV *
-iw::new ()
-       CODE:
-        iw *w =  new iw;
-        RETVAL = newSVptr ((void *)(perl_watcher *)w, "urxvt::iw");
-        w->self = (HV *)SvRV (RETVAL);
-        OUTPUT:
-        RETVAL
-
-CHAINED
-iw::start ()
-       CODE:
-        THIS->start ();
-        OUTPUT:
-        RETVAL
-
-CHAINED
-iw::stop ()
-       CODE:
-        THIS->stop ();
-        OUTPUT:
-        RETVAL
-
-void
-iw::DESTROY ()
-
-#############################################################################
-# urxvt::pw
-#############################################################################
-
-MODULE = urxvt             PACKAGE = urxvt::pw
-
-SV *
-pw::new ()
-       CODE:
-        pw *w =  new pw;
-        RETVAL = newSVptr ((void *)(perl_watcher *)w, "urxvt::pw");
-        w->self = (HV *)SvRV (RETVAL);
-        OUTPUT:
-        RETVAL
-
-CHAINED
-pw::start (int pid)
-       CODE:
-        THIS->start (pid);
-        OUTPUT:
-        RETVAL
-
-CHAINED
-pw::stop ()
-       CODE:
-        THIS->stop ();
-        OUTPUT:
-        RETVAL
-
-void
-pw::DESTROY ()
-
+INCLUDE: $PERL <iom_perl.xs -pe s/IOM_MODULE/urxvt/g,s/IOM_CLASS/urxvt/g |