Add support for copying to clipboard (based on patch by Dana Jansens).
[dana/urxvt.git] / src / iom_perl.xs
1 #############################################################################
2 # IOM_CLASS constants
3 #############################################################################
4
5 BOOT:
6 {
7   {
8     HV *stash     = gv_stashpv ("IOM_CLASS", 1);
9     SV *baseclass = newSVpv ("IOM_CLASS::watcher", 0);
10
11     static const struct {
12       const char *name;
13       IV iv;
14     } *civ, iom_const_iv[] = {
15 #   define iom_const_iv(name) { # name, (IV)name }
16       iom_const_iv (EV_NONE),
17       iom_const_iv (EV_READ),
18       iom_const_iv (EV_WRITE),
19 #   undef iom_const
20     };
21
22     for (civ = iom_const_iv + sizeof (iom_const_iv) / sizeof (iom_const_iv [0]); civ-- > iom_const_iv; )
23       newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv));
24
25     /* slightly dirty to put the same scalar into all those arrays, but */
26     /* we do not expect users to modify them anyways */
27     av_push (get_av ("IOM_CLASS" "::timer::ISA", 1), SvREFCNT_inc (baseclass));
28     av_push (get_av ("IOM_CLASS"   "::iow::ISA", 1), SvREFCNT_inc (baseclass));
29     av_push (get_av ("IOM_CLASS"    "::pw::ISA", 1), SvREFCNT_inc (baseclass));
30     av_push (get_av ("IOM_CLASS"    "::iw::ISA", 1), SvREFCNT_inc (baseclass));
31
32     SvREFCNT_dec (baseclass);
33   }
34 }
35
36 #############################################################################
37 # IOM_CLASS::watcher
38 #############################################################################
39
40 MODULE = IOM_MODULE             PACKAGE = IOM_CLASS::watcher
41
42 IOM_CHAINED
43 perl_watcher::cb (SV *cb)
44         CODE:
45         THIS->cb (cb);
46         OUTPUT:
47         RETVAL
48
49 #############################################################################
50 # IOM_CLASS::timer
51 #############################################################################
52
53 MODULE = IOM_MODULE             PACKAGE = IOM_CLASS::timer
54
55 SV *
56 timer::new ()
57         CODE:
58         timer *w =  new timer;
59         w->start (0);
60         RETVAL = newSVptr ((void *)(perl_watcher *)w, "IOM_CLASS::timer");
61         w->self = (HV *)SvRV (RETVAL);
62         OUTPUT:
63         RETVAL
64
65 # deprecated
66 NV
67 timer::at ()
68         CODE:
69         RETVAL = THIS->remaining () + ev_now ();
70         OUTPUT:
71         RETVAL
72
73 IOM_CHAINED
74 timer::interval (NV repeat)
75         CODE:
76         THIS->repeat = repeat;
77         OUTPUT:
78         RETVAL
79
80 IOM_CHAINED
81 timer::set (NV tstamp, NV repeat = THIS->repeat)
82         CODE:
83         THIS->set (tstamp, repeat);
84         OUTPUT:
85         RETVAL
86
87 IOM_CHAINED
88 timer::start (NV tstamp = ev::now (), NV repeat = THIS->repeat)
89         CODE:
90         THIS->start (tstamp - ev::now (), repeat);
91         OUTPUT:
92         RETVAL
93
94 IOM_CHAINED
95 timer::after (NV delay, NV repeat = THIS->repeat)
96         CODE:
97         THIS->start (delay, repeat);
98         OUTPUT:
99         RETVAL
100
101 IOM_CHAINED
102 timer::stop ()
103         CODE:
104         THIS->stop ();
105         OUTPUT:
106         RETVAL
107
108 void
109 timer::DESTROY ()
110
111 #############################################################################
112 # IOM_CLASS::iow
113 #############################################################################
114
115 MODULE = IOM_MODULE             PACKAGE = IOM_CLASS::iow
116
117 SV *
118 iow::new ()
119         CODE:
120         iow *w =  new iow;
121         RETVAL = newSVptr ((void *)(perl_watcher *)w, "IOM_CLASS::iow");
122         w->self = (HV *)SvRV (RETVAL);
123         OUTPUT:
124         RETVAL
125
126 IOM_CHAINED
127 iow::fd (int fd)
128         CODE:
129         THIS->fd = fd;
130         OUTPUT:
131         RETVAL
132
133 IOM_CHAINED
134 iow::events (short events)
135         CODE:
136         THIS->events = events;
137         OUTPUT:
138         RETVAL
139
140 IOM_CHAINED
141 iow::start ()
142         CODE:
143         THIS->start ();
144         OUTPUT:
145         RETVAL
146
147 IOM_CHAINED
148 iow::stop ()
149         CODE:
150         THIS->stop ();
151         OUTPUT:
152         RETVAL
153
154 void
155 iow::DESTROY ()
156
157 #############################################################################
158 # IOM_CLASS::iw
159 #############################################################################
160
161 MODULE = IOM_MODULE             PACKAGE = IOM_CLASS::iw
162
163 SV *
164 iw::new ()
165         CODE:
166         iw *w =  new iw;
167         RETVAL = newSVptr ((void *)(perl_watcher *)w, "IOM_CLASS::iw");
168         w->self = (HV *)SvRV (RETVAL);
169         OUTPUT:
170         RETVAL
171
172 IOM_CHAINED
173 iw::start ()
174         CODE:
175         THIS->start ();
176         OUTPUT:
177         RETVAL
178
179 IOM_CHAINED
180 iw::stop ()
181         CODE:
182         THIS->stop ();
183         OUTPUT:
184         RETVAL
185
186 void
187 iw::DESTROY ()
188
189 #############################################################################
190 # IOM_CLASS::pw
191 #############################################################################
192
193 MODULE = IOM_MODULE             PACKAGE = IOM_CLASS::pw
194
195 SV *
196 pw::new ()
197         CODE:
198         pw *w =  new pw;
199         RETVAL = newSVptr ((void *)(perl_watcher *)w, "IOM_CLASS::pw");
200         w->self = (HV *)SvRV (RETVAL);
201         OUTPUT:
202         RETVAL
203
204 IOM_CHAINED
205 pw::start (int pid)
206         CODE:
207         THIS->start (pid);
208         OUTPUT:
209         RETVAL
210
211 IOM_CHAINED
212 pw::stop ()
213         CODE:
214         THIS->stop ();
215         OUTPUT:
216         RETVAL
217
218 int
219 pw::rpid ()
220         CODE:
221         RETVAL = THIS->rpid;
222         OUTPUT:
223         RETVAL
224
225 int
226 pw::rstatus ()
227         CODE:
228         RETVAL = THIS->rstatus;
229         OUTPUT:
230         RETVAL
231
232 void
233 pw::DESTROY ()
234
235