2 #include "irssi-version.h"
4 #define DEFAULT_COMMAND_CATEGORY "Perl scripts' commands"
6 void perl_signal_add_hash(int priority, SV *sv)
13 croak("Usage: Irssi::signal_add(hash)");
17 while ((he = hv_iternext(hv)) != NULL)
18 perl_signal_add_full(hv_iterkey(he, &len), HeVAL(he), priority);
21 static void perl_command_bind_add_hash(int priority, SV *sv, char *category)
29 while ((he = hv_iternext(hv)) != NULL)
30 perl_command_bind_to(hv_iterkey(he, &len), category, HeVAL(he), priority);
33 static void handle_command_bind(int priority, int items, SV *p0, SV *p1, SV *p2)
38 hash = items > 0 && is_hvref(p0);
40 if (items < 2 || items > 3)
41 croak("Usage: Irssi::command_bind(signal, func, category)");
43 croak("Usage: Irssi::command_bind(signals_hash, category)");
46 category = items < 3 ? DEFAULT_COMMAND_CATEGORY :
47 (char *)SvPV(p2, PL_na);
48 perl_command_bind_to((char *)SvPV(p0, PL_na), category, p1, priority);
50 category = items < 2 ? DEFAULT_COMMAND_CATEGORY :
51 (char *)SvPV(p1, PL_na);
52 perl_command_bind_add_hash(priority, p0, category);
56 MODULE = Irssi::Core PACKAGE = Irssi
60 signal_emit(signal, ...)
63 void *p[SIGNAL_MAX_ARGUMENTS];
66 memset(p, 0, sizeof(p));
67 for (n = 1; n < items && n < SIGNAL_MAX_ARGUMENTS+1; n++) {
69 p[n-1] = SvPV(ST(n), PL_na);
70 else if (irssi_is_ref_object(ST(n)))
71 p[n-1] = irssi_ref_object(ST(n));
72 else if (SvROK(ST(n)))
73 p[n-1] = (void *) SvIV((SV*)SvRV(ST(n)));
77 signal_emit(signal, items-1, p[0], p[1], p[2], p[3], p[4], p[5]);
82 void *p[SIGNAL_MAX_ARGUMENTS];
85 memset(p, 0, sizeof(p));
86 for (n = 0; n < items && n < SIGNAL_MAX_ARGUMENTS; n++) {
88 p[n] = SvPV(ST(n), PL_na);
89 else if (irssi_is_ref_object(ST(n)))
90 p[n] = irssi_ref_object(ST(n));
91 else if (SvROK(ST(n)))
92 p[n] = (void *) SvIV((SV*)SvRV(ST(n)));
96 signal_continue(items, p[0], p[1], p[2], p[3], p[4], p[5]);
101 if (items != 1 && items != 2)
102 croak("Usage: Irssi::signal_add(signal, func)");
104 perl_signal_add_full((char *)SvPV(ST(0),PL_na), ST(1),
105 SIGNAL_PRIORITY_DEFAULT);
107 perl_signal_add_hash(SIGNAL_PRIORITY_DEFAULT, ST(0));
110 signal_add_first(...)
112 if (items != 1 && items != 2)
113 croak("Usage: Irssi::signal_add_first(signal, func)");
115 perl_signal_add_full((char *)SvPV(ST(0),PL_na), ST(1),
116 SIGNAL_PRIORITY_HIGH);
118 perl_signal_add_hash(SIGNAL_PRIORITY_HIGH, ST(0));
123 if (items != 1 && items != 2)
124 croak("Usage: Irssi::signal_add_last(signal, func)");
126 perl_signal_add_full((char *)SvPV(ST(0),PL_na), ST(1),
127 SIGNAL_PRIORITY_LOW);
129 perl_signal_add_hash(SIGNAL_PRIORITY_LOW, ST(0));
132 signal_add_priority(...)
134 if (items != 2 && items != 3)
135 croak("Usage: Irssi::signal_add_priority(signal, func, priority)");
137 perl_signal_add_full((char *)SvPV(ST(0),PL_na), ST(1), SvIV(ST(2)));
139 perl_signal_add_hash(SvIV(ST(0)), ST(1));
142 SIGNAL_PRIORITY_LOW()
144 RETVAL = SIGNAL_PRIORITY_LOW;
149 SIGNAL_PRIORITY_DEFAULT()
151 RETVAL = SIGNAL_PRIORITY_DEFAULT;
156 SIGNAL_PRIORITY_HIGH()
158 RETVAL = SIGNAL_PRIORITY_HIGH;
163 signal_remove(signal, func)
167 perl_signal_remove(signal, func);
173 signal_stop_by_name(signal)
179 RETVAL = (char *) signal_get_emitted();
184 signal_get_emitted_id()
187 timeout_add(msecs, func, data)
193 croak("Irssi::timeout() : msecs must be >= 10");
196 RETVAL = perl_timeout_add(msecs, func, data);
205 perl_source_remove(tag);
211 RETVAL = G_INPUT_READ;
218 RETVAL = G_INPUT_WRITE;
223 input_add(source, condition, func, data)
229 RETVAL = perl_input_add(source, condition, func, data);
237 perl_source_remove(tag);
239 # maybe there's some easier way than this..? :)
243 RETVAL = MSGLEVEL_CRAP;
250 RETVAL = MSGLEVEL_MSGS;
257 RETVAL = MSGLEVEL_PUBLIC;
264 RETVAL = MSGLEVEL_NOTICES;
271 RETVAL = MSGLEVEL_SNOTES;
278 RETVAL = MSGLEVEL_CTCPS;
285 RETVAL = MSGLEVEL_ACTIONS;
292 RETVAL = MSGLEVEL_JOINS;
299 RETVAL = MSGLEVEL_PARTS;
306 RETVAL = MSGLEVEL_QUITS;
313 RETVAL = MSGLEVEL_KICKS;
320 RETVAL = MSGLEVEL_MODES;
327 RETVAL = MSGLEVEL_TOPICS;
334 RETVAL = MSGLEVEL_WALLOPS;
341 RETVAL = MSGLEVEL_INVITES;
348 RETVAL = MSGLEVEL_NICKS;
355 RETVAL = MSGLEVEL_DCC;
362 RETVAL = MSGLEVEL_DCCMSGS;
367 MSGLEVEL_CLIENTNOTICE()
369 RETVAL = MSGLEVEL_CLIENTNOTICE;
374 MSGLEVEL_CLIENTCRAP()
376 RETVAL = MSGLEVEL_CLIENTCRAP;
381 MSGLEVEL_CLIENTERROR()
383 RETVAL = MSGLEVEL_CLIENTERROR;
390 RETVAL = MSGLEVEL_HILIGHT;
397 RETVAL = MSGLEVEL_ALL;
404 RETVAL = MSGLEVEL_NOHILIGHT;
411 RETVAL = MSGLEVEL_NO_ACT;
418 RETVAL = MSGLEVEL_NEVER;
425 RETVAL = MSGLEVEL_LASTLOG;
438 combine_level(level, str)
446 perl_command(cmd, NULL, NULL);
453 for (tmp = commands; tmp != NULL; tmp = tmp->next) {
454 XPUSHs(sv_2mortal(plain_bless(tmp->data, "Irssi::Command")));
458 command_bind_first(...)
460 handle_command_bind(SIGNAL_PRIORITY_HIGH, items, ST(0), ST(1), ST(2));
465 handle_command_bind(SIGNAL_PRIORITY_DEFAULT, items, ST(0), ST(1), ST(2));
468 command_bind_last(...)
470 handle_command_bind(SIGNAL_PRIORITY_LOW, items, ST(0), ST(1), ST(2));
473 command_runsub(cmd, data, server, item)
477 Irssi::Windowitem item
479 perl_command_runsub(cmd, data, server, item);
482 command_unbind(cmd, func)
486 perl_command_unbind(cmd, func);
489 command_set_options(cmd, options)
502 parse_special(cmd, data="", flags=0)
509 ret = parse_special_string(cmd, NULL, NULL, data, NULL, flags);
510 XPUSHs(sv_2mortal(new_pv(ret)));
511 g_free_not_null(ret);
516 RETVAL = (char *) get_irssi_dir();
523 RETVAL = (char *) get_irssi_config();
532 g_snprintf(version, sizeof(version), "%d.%04d",
533 IRSSI_VERSION_DATE, IRSSI_VERSION_TIME);
538 #*******************************
539 MODULE = Irssi::Core PACKAGE = Irssi::Server
540 #*******************************
543 parse_special(server, cmd, data="", flags=0)
551 ret = parse_special_string(cmd, server, NULL, data, NULL, flags);
552 XPUSHs(sv_2mortal(new_pv(ret)));
553 g_free_not_null(ret);
560 perl_command(cmd, server, NULL);
563 #*******************************
564 MODULE = Irssi::Core PACKAGE = Irssi::Windowitem
565 #*******************************
568 parse_special(item, cmd, data="", flags=0)
569 Irssi::Windowitem item
576 ret = parse_special_string(cmd, item->server, item, data, NULL, flags);
577 XPUSHs(sv_2mortal(new_pv(ret)));
578 g_free_not_null(ret);
582 Irssi::Windowitem item
585 perl_command(cmd, item->server, item);