From: root Date: Thu, 14 Dec 2006 17:33:53 +0000 (+0000) Subject: *** empty log message *** X-Git-Url: http://git.openbox.org/?a=commitdiff_plain;h=86c22c2927fb122688edb396c9f7f38d018e71d5;p=dana%2Furxvt.git *** empty log message *** --- diff --git a/MANIFEST b/MANIFEST index bf5d2670..92f77a2e 100644 --- a/MANIFEST +++ b/MANIFEST @@ -155,6 +155,7 @@ src/table/jis0213_2.h src/urxvt.pm src/typemap +src/typemap.iom src/iom_perl.h src/iom_perl.xs src/rxvtperl.h diff --git a/src/Makefile.in b/src/Makefile.in index eee28c14..d4192170 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -136,9 +136,8 @@ install: allbin alldoc install-perl perlxsi.c: Makefile $(PERL) -MExtUtils::Embed -e xsinit -- -std urxvt -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="$(PERL)" $(PERL) @PERLPRIVLIBEXP@/ExtUtils/xsubpp -C++ -typemap @PERLPRIVLIBEXP@/ExtUtils/typemap -typemap typemap -prototypes $(srcdir)/rxvtperl.xs >$@ +rxvtperl.C: rxvtperl.xs iom_perl.h iom_perl.xs typemap typemap.iom + PERL="$(PERL)" $(PERL) @PERLPRIVLIBEXP@/ExtUtils/xsubpp -C++ -typemap @PERLPRIVLIBEXP@/ExtUtils/typemap -typemap typemap.iom -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 index a6c82784..1b07a707 100644 --- a/src/iom_perl.h +++ b/src/iom_perl.h @@ -1,3 +1,5 @@ +typedef int IOM_CHAINED; + ///////////////////////////////////////////////////////////////////////////// #define SvWATCHER(sv) (perl_watcher *)SvPTR (sv, IOM_CLASS "::watcher") diff --git a/src/iom_perl.xs b/src/iom_perl.xs index 34ddad71..bb9066c9 100644 --- a/src/iom_perl.xs +++ b/src/iom_perl.xs @@ -4,30 +4,33 @@ BOOT: { - HV *stash = gv_stashpv ("IOM_CLASS", 1); - SV *baseclass = newSVpv ("IOM_CLASS::watcher", 0); - - static const struct { - const char *name; - IV iv; - } *civ, const_iv[] = { -# define const_iv(name) { # name, (IV)name } - const_iv (EVENT_NONE), - const_iv (EVENT_READ), - const_iv (EVENT_WRITE), - }; - - for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ-- > const_iv; ) - newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv)); - - /* slightly dirty to put the same scalar into all those arrays, but */ - /* we do not expect users to modify them anyways */ - av_push (get_av ("IOM_CLASS" "::timer::ISA", 1), SvREFCNT_inc (baseclass)); - av_push (get_av ("IOM_CLASS" "::iow::ISA", 1), SvREFCNT_inc (baseclass)); - av_push (get_av ("IOM_CLASS" "::pw::ISA", 1), SvREFCNT_inc (baseclass)); - av_push (get_av ("IOM_CLASS" "::iw::ISA", 1), SvREFCNT_inc (baseclass)); - - SvREFCNT_dec (baseclass); + { + HV *stash = gv_stashpv ("IOM_CLASS", 1); + SV *baseclass = newSVpv ("IOM_CLASS::watcher", 0); + + static const struct { + const char *name; + IV iv; + } *civ, iom_const_iv[] = { +# define iom_const_iv(name) { # name, (IV)name } + iom_const_iv (EVENT_NONE), + iom_const_iv (EVENT_READ), + iom_const_iv (EVENT_WRITE), +# undef iom_const + }; + + for (civ = iom_const_iv + sizeof (iom_const_iv) / sizeof (iom_const_iv [0]); civ-- > iom_const_iv; ) + newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv)); + + /* slightly dirty to put the same scalar into all those arrays, but */ + /* we do not expect users to modify them anyways */ + av_push (get_av ("IOM_CLASS" "::timer::ISA", 1), SvREFCNT_inc (baseclass)); + av_push (get_av ("IOM_CLASS" "::iow::ISA", 1), SvREFCNT_inc (baseclass)); + av_push (get_av ("IOM_CLASS" "::pw::ISA", 1), SvREFCNT_inc (baseclass)); + av_push (get_av ("IOM_CLASS" "::iw::ISA", 1), SvREFCNT_inc (baseclass)); + + SvREFCNT_dec (baseclass); + } } ############################################################################# @@ -36,7 +39,7 @@ BOOT: MODULE = IOM_MODULE PACKAGE = IOM_CLASS::watcher -CHAINED +IOM_CHAINED perl_watcher::cb (SV *cb) CODE: THIS->cb (cb); @@ -66,35 +69,35 @@ timer::at () OUTPUT: RETVAL -CHAINED +IOM_CHAINED timer::interval (NV interval) CODE: THIS->interval = interval; OUTPUT: RETVAL -CHAINED +IOM_CHAINED timer::set (NV tstamp) CODE: THIS->set (tstamp); OUTPUT: RETVAL -CHAINED +IOM_CHAINED timer::start (NV tstamp = THIS->at) CODE: THIS->start (tstamp); OUTPUT: RETVAL -CHAINED +IOM_CHAINED timer::after (NV delay) CODE: THIS->start (NOW + delay); OUTPUT: RETVAL -CHAINED +IOM_CHAINED timer::stop () CODE: THIS->stop (); @@ -119,28 +122,28 @@ iow::new () OUTPUT: RETVAL -CHAINED +IOM_CHAINED iow::fd (int fd) CODE: THIS->fd = fd; OUTPUT: RETVAL -CHAINED +IOM_CHAINED iow::events (short events) CODE: THIS->events = events; OUTPUT: RETVAL -CHAINED +IOM_CHAINED iow::start () CODE: THIS->start (); OUTPUT: RETVAL -CHAINED +IOM_CHAINED iow::stop () CODE: THIS->stop (); @@ -165,14 +168,14 @@ iw::new () OUTPUT: RETVAL -CHAINED +IOM_CHAINED iw::start () CODE: THIS->start (); OUTPUT: RETVAL -CHAINED +IOM_CHAINED iw::stop () CODE: THIS->stop (); @@ -197,14 +200,14 @@ pw::new () OUTPUT: RETVAL -CHAINED +IOM_CHAINED pw::start (int pid) CODE: THIS->start (pid); OUTPUT: RETVAL -CHAINED +IOM_CHAINED pw::stop () CODE: THIS->stop (); diff --git a/src/rxvtperl.xs b/src/rxvtperl.xs index b8d33077..4e8b1ff9 100644 --- a/src/rxvtperl.xs +++ b/src/rxvtperl.xs @@ -52,8 +52,6 @@ #undef ROW #define ROW(n) THIS->row_buf [LINENO (n)] -typedef int CHAINED UNUSED; - ///////////////////////////////////////////////////////////////////////////// static wchar_t * diff --git a/src/typemap b/src/typemap index 2344c719..ddb0b987 100644 --- a/src/typemap +++ b/src/typemap @@ -1,50 +1,36 @@ -rxvt_term * T_TERM +perl_watcher * T_IOM_WATCHER +timer * T_IOM_TIMER +iow * T_IOM_IOW +pw * T_IOM_PW +iw * T_IOM_IW -perl_watcher * T_WATCHER -timer * T_TIMER -iow * T_IOW -pw * T_PW -iw * T_IW - -overlay * T_OVERLAY - -Time T_UV -Atom T_UV -Window T_UV - -CHAINED T_CHAINED +IOM_CHAINED T_IOM_CHAINED INPUT -T_TERM - $var = SvTERM ($arg); -T_WATCHER +T_IOM_WATCHER $var = SvWATCHER ($arg); -T_TIMER +T_IOM_TIMER $var = SvTIMER ($arg); -T_IOW +T_IOM_IOW $var = SvIOW ($arg); -T_PW +T_IOM_PW $var = SvPW ($arg); -T_IW +T_IOM_IW $var = SvIW ($arg); -T_OVERLAY - $var = SvOVERLAY ($arg); OUTPUT -T_TERM - $arg = newSVterm ($var); -T_TIMER +T_IOM_TIMER $arg = newSVtimer ($var); -T_IOW +T_IOM_IOW $arg = newSViow ($var); -T_PW +T_IOM_PW $arg = newSVpw ($var); -T_IW +T_IOM_IW $arg = newSViw ($var); -T_CHAINED +T_IOM_CHAINED $arg = newSVsv (ST(0)); diff --git a/src/typemap.iom b/src/typemap.iom new file mode 100644 index 00000000..3b2a217f --- /dev/null +++ b/src/typemap.iom @@ -0,0 +1,22 @@ +rxvt_term * T_TERM + +overlay * T_OVERLAY + +Time T_UV +Atom T_UV +Window T_UV + + +INPUT + +T_TERM + $var = SvTERM ($arg); +T_OVERLAY + $var = SvOVERLAY ($arg); + + +OUTPUT + +T_TERM + $arg = newSVterm ($var); +