ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/rxvtperl.xs
(Generate patch)

Comparing rxvt-unicode/src/rxvtperl.xs (file contents):
Revision 1.2 by root, Mon Jan 2 17:17:02 2006 UTC vs.
Revision 1.5 by root, Mon Jan 2 20:35:39 2006 UTC

208} 208}
209 209
210bool 210bool
211rxvt_perl_interp::invoke (rxvt_term *term, hook_type htype, ...) 211rxvt_perl_interp::invoke (rxvt_term *term, hook_type htype, ...)
212{ 212{
213 if (!perl) 213 if (!perl
214 || (!should_invoke [htype] && htype != HOOK_INIT && htype != HOOK_DESTROY))
214 return false; 215 return false;
215 216
216 if (htype == HOOK_INIT) // first hook ever called 217 if (htype == HOOK_INIT) // first hook ever called
217 term->self = (void *)newSVptr ((void *)term, "urxvt::term"); 218 term->self = (void *)newSVptr ((void *)term, "urxvt::term");
218 else if (htype == HOOK_DESTROY)
219 {
220 // TODO: clear magic
221 hv_clear ((HV *)SvRV ((SV *)term->self));
222 SvREFCNT_dec ((SV *)term->self);
223 }
224 219
225 if (!should_invoke [htype])
226 return false;
227
228 dSP; 220 dSP;
229 va_list ap; 221 va_list ap;
230 222
231 va_start (ap, htype); 223 va_start (ap, htype);
232 224
270 LEAVE; 262 LEAVE;
271 263
272 if (SvTRUE (ERRSV)) 264 if (SvTRUE (ERRSV))
273 rxvt_warn ("perl hook %d evaluation error: %s", htype, SvPV_nolen (ERRSV)); 265 rxvt_warn ("perl hook %d evaluation error: %s", htype, SvPV_nolen (ERRSV));
274 266
267 if (htype == HOOK_DESTROY)
268 {
269 // TODO: clear magic
270 hv_clear ((HV *)SvRV ((SV *)term->self));
271 SvREFCNT_dec ((SV *)term->self);
272 }
273
275 return count; 274 return count;
276 } 275 }
277 276
278 default: 277 default:
279 rxvt_fatal ("FATAL: unable to pass data type %d\n", dt); 278 rxvt_fatal ("FATAL: unable to pass data type %d\n", dt);
289 288
290BOOT: 289BOOT:
291{ 290{
292# define set_hookname(sym) av_store (hookname, PP_CONCAT(HOOK_, sym), newSVpv (PP_STRINGIFY(sym), 0)) 291# define set_hookname(sym) av_store (hookname, PP_CONCAT(HOOK_, sym), newSVpv (PP_STRINGIFY(sym), 0))
293 AV *hookname = get_av ("urxvt::HOOKNAME", 1); 292 AV *hookname = get_av ("urxvt::HOOKNAME", 1);
294 set_hookname (LOAD);
295 set_hookname (INIT); 293 set_hookname (INIT);
296 set_hookname (RESET); 294 set_hookname (RESET);
297 set_hookname (START); 295 set_hookname (START);
298 set_hookname (DESTROY); 296 set_hookname (DESTROY);
299 set_hookname (SEL_BEGIN); 297 set_hookname (SEL_BEGIN);
324void 322void
325fatal (const char *msg) 323fatal (const char *msg)
326 CODE: 324 CODE:
327 rxvt_fatal ("%s", msg); 325 rxvt_fatal ("%s", msg);
328 326
329int
330wcswidth (SV *str)
331 CODE:
332{
333 wchar_t *wstr = sv2wcs (str);
334 RETVAL = wcswidth (wstr, wcslen (wstr));
335 free (wstr);
336}
337 OUTPUT:
338 RETVAL
339
340NV 327NV
341NOW () 328NOW ()
342 CODE: 329 CODE:
343 RETVAL = NOW; 330 RETVAL = NOW;
344 OUTPUT: 331 OUTPUT:
345 RETVAL 332 RETVAL
346 333
347MODULE = urxvt PACKAGE = urxvt::term 334MODULE = urxvt PACKAGE = urxvt::term
335
336int
337rxvt_term::strwidth (SV *str)
338 CODE:
339{
340 wchar_t *wstr = sv2wcs (str);
341
342 rxvt_push_locale (THIS->locale);
343 RETVAL = wcswidth (wstr, wcslen (wstr));
344 rxvt_pop_locale ();
345
346 free (wstr);
347}
348 OUTPUT:
349 RETVAL
350
351SV *
352rxvt_term::locale_encode (SV *str)
353 CODE:
354{
355 wchar_t *wstr = sv2wcs (str);
356
357 rxvt_push_locale (THIS->locale);
358 char *mbstr = rxvt_wcstombs (wstr);
359 rxvt_pop_locale ();
360
361 free (wstr);
362
363 RETVAL = newSVpv (mbstr, 0);
364 free (mbstr);
365}
366 OUTPUT:
367 RETVAL
368
369SV *
370rxvt_term::locale_decode (SV *octets)
371 CODE:
372{
373 STRLEN len;
374 char *data = SvPVbyte (octets, len);
375
376 rxvt_push_locale (THIS->locale);
377 wchar_t *wstr = rxvt_mbstowcs (data, len);
378 rxvt_pop_locale ();
379
380 char *str = rxvt_wcstoutf8 (wstr);
381 free (wstr);
382
383 RETVAL = newSVpv (str, 0);
384 SvUTF8_on (RETVAL);
385 free (str);
386}
387 OUTPUT:
388 RETVAL
348 389
349void 390void
350rxvt_term::_resource (char *name, int index, SV *newval = 0) 391rxvt_term::_resource (char *name, int index, SV *newval = 0)
351 PPCODE: 392 PPCODE:
352{ 393{
458 wchar_t *wtext = sv2wcs (text); 499 wchar_t *wtext = sv2wcs (text);
459 THIS->scr_overlay_set (x, y, wtext); 500 THIS->scr_overlay_set (x, y, wtext);
460 free (wtext); 501 free (wtext);
461} 502}
462 503
504void
505rxvt_term::tt_write (SV *octets)
506 INIT:
507 STRLEN len;
508 char *str = SvPVbyte (octets, len);
509 C_ARGS:
510 (unsigned char *)str, len
511
463MODULE = urxvt PACKAGE = urxvt::timer 512MODULE = urxvt PACKAGE = urxvt::timer
464 513
465SV * 514SV *
466timer::new () 515timer::new ()
467 CODE: 516 CODE:

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines