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, FALSE);
202 timeout_add_once(msecs, func, data)
208 croak("Irssi::timeout_once() : msecs must be >= 10");
211 RETVAL = perl_timeout_add(msecs, func, data, TRUE);
220 perl_source_remove(tag);
226 RETVAL = G_INPUT_READ;
233 RETVAL = G_INPUT_WRITE;
238 input_add(source, condition, func, data)
244 RETVAL = perl_input_add(source, condition, func, data);
252 perl_source_remove(tag);
254 # maybe there's some easier way than this..? :)
258 RETVAL = MSGLEVEL_CRAP;
265 RETVAL = MSGLEVEL_MSGS;
272 RETVAL = MSGLEVEL_PUBLIC;
279 RETVAL = MSGLEVEL_NOTICES;
286 RETVAL = MSGLEVEL_SNOTES;
293 RETVAL = MSGLEVEL_CTCPS;
300 RETVAL = MSGLEVEL_ACTIONS;
307 RETVAL = MSGLEVEL_JOINS;
314 RETVAL = MSGLEVEL_PARTS;
321 RETVAL = MSGLEVEL_QUITS;
328 RETVAL = MSGLEVEL_KICKS;
335 RETVAL = MSGLEVEL_MODES;
342 RETVAL = MSGLEVEL_TOPICS;
349 RETVAL = MSGLEVEL_WALLOPS;
356 RETVAL = MSGLEVEL_INVITES;
363 RETVAL = MSGLEVEL_NICKS;
370 RETVAL = MSGLEVEL_DCC;
377 RETVAL = MSGLEVEL_DCCMSGS;
382 MSGLEVEL_CLIENTNOTICE()
384 RETVAL = MSGLEVEL_CLIENTNOTICE;
389 MSGLEVEL_CLIENTCRAP()
391 RETVAL = MSGLEVEL_CLIENTCRAP;
396 MSGLEVEL_CLIENTERROR()
398 RETVAL = MSGLEVEL_CLIENTERROR;
405 RETVAL = MSGLEVEL_HILIGHT;
412 RETVAL = MSGLEVEL_ALL;
419 RETVAL = MSGLEVEL_NOHILIGHT;
426 RETVAL = MSGLEVEL_NO_ACT;
433 RETVAL = MSGLEVEL_NEVER;
440 RETVAL = MSGLEVEL_LASTLOG;
454 ret = bits2level(bits);
455 XPUSHs(sv_2mortal(new_pv(ret)));
459 combine_level(level, str)
467 perl_command(cmd, NULL, NULL);
474 for (tmp = commands; tmp != NULL; tmp = tmp->next) {
475 XPUSHs(sv_2mortal(plain_bless(tmp->data, "Irssi::Command")));
479 command_bind_first(...)
481 handle_command_bind(SIGNAL_PRIORITY_HIGH, items, ST(0), ST(1), ST(2));
486 handle_command_bind(SIGNAL_PRIORITY_DEFAULT, items, ST(0), ST(1), ST(2));
489 command_bind_last(...)
491 handle_command_bind(SIGNAL_PRIORITY_LOW, items, ST(0), ST(1), ST(2));
494 command_runsub(cmd, data, server, item)
498 Irssi::Windowitem item
500 perl_command_runsub(cmd, data, server, item);
503 command_unbind(cmd, func)
507 perl_command_unbind(cmd, func);
510 command_set_options(cmd, options)
523 parse_special(cmd, data="", flags=0)
530 ret = parse_special_string(cmd, NULL, NULL, data, NULL, flags);
531 XPUSHs(sv_2mortal(new_pv(ret)));
532 g_free_not_null(ret);
537 RETVAL = (char *) get_irssi_dir();
544 RETVAL = (char *) get_irssi_config();
553 g_snprintf(version, sizeof(version), "%d.%04d",
554 IRSSI_VERSION_DATE, IRSSI_VERSION_TIME);
559 #*******************************
560 MODULE = Irssi::Core PACKAGE = Irssi::Server
561 #*******************************
564 parse_special(server, cmd, data="", flags=0)
572 ret = parse_special_string(cmd, server, NULL, data, NULL, flags);
573 XPUSHs(sv_2mortal(new_pv(ret)));
574 g_free_not_null(ret);
581 perl_command(cmd, server, NULL);
584 #*******************************
585 MODULE = Irssi::Core PACKAGE = Irssi::Windowitem
586 #*******************************
589 parse_special(item, cmd, data="", flags=0)
590 Irssi::Windowitem item
597 ret = parse_special_string(cmd, item->server, item, data, NULL, flags);
598 XPUSHs(sv_2mortal(new_pv(ret)));
599 g_free_not_null(ret);
603 Irssi::Windowitem item
606 perl_command(cmd, item->server, item);