2 #include "irssi-version.h"
5 #define DEFAULT_COMMAND_CATEGORY "Perl scripts' commands"
7 void perl_signal_add_hash(int priority, SV *sv)
14 croak("Usage: Irssi::signal_add(hash)");
18 while ((he = hv_iternext(hv)) != NULL)
19 perl_signal_add_full(hv_iterkey(he, &len), HeVAL(he), priority);
22 static void perl_command_bind_add_hash(int priority, SV *sv, char *category)
30 while ((he = hv_iternext(hv)) != NULL)
31 perl_command_bind_to(hv_iterkey(he, &len), category, HeVAL(he), priority);
34 static void handle_command_bind(int priority, int items, SV *p0, SV *p1, SV *p2)
39 hash = items > 0 && is_hvref(p0);
41 if (items < 2 || items > 3)
42 croak("Usage: Irssi::command_bind(signal, func, category)");
44 croak("Usage: Irssi::command_bind(signals_hash, category)");
47 category = items < 3 ? DEFAULT_COMMAND_CATEGORY :
48 (char *)SvPV(p2, PL_na);
49 perl_command_bind_to((char *)SvPV(p0, PL_na), category, p1, priority);
51 category = items < 2 ? DEFAULT_COMMAND_CATEGORY :
52 (char *)SvPV(p1, PL_na);
53 perl_command_bind_add_hash(priority, p0, category);
57 MODULE = Irssi::Core PACKAGE = Irssi
61 signal_emit(signal, ...)
64 void *p[SIGNAL_MAX_ARGUMENTS];
67 memset(p, 0, sizeof(p));
68 for (n = 1; n < items && n < SIGNAL_MAX_ARGUMENTS+1; n++) {
70 p[n-1] = SvPV(ST(n), PL_na);
71 else if (irssi_is_ref_object(ST(n)))
72 p[n-1] = irssi_ref_object(ST(n));
73 else if (SvROK(ST(n)))
74 p[n-1] = (void *) SvIV((SV*)SvRV(ST(n)));
78 signal_emit(signal, items-1, p[0], p[1], p[2], p[3], p[4], p[5]);
83 void *p[SIGNAL_MAX_ARGUMENTS];
86 memset(p, 0, sizeof(p));
87 for (n = 0; n < items && n < SIGNAL_MAX_ARGUMENTS; n++) {
89 p[n] = SvPV(ST(n), PL_na);
90 else if (irssi_is_ref_object(ST(n)))
91 p[n] = irssi_ref_object(ST(n));
92 else if (SvROK(ST(n)))
93 p[n] = (void *) SvIV((SV*)SvRV(ST(n)));
97 signal_continue(items, p[0], p[1], p[2], p[3], p[4], p[5]);
102 if (items != 1 && items != 2)
103 croak("Usage: Irssi::signal_add(signal, func)");
105 perl_signal_add_full((char *)SvPV(ST(0),PL_na), ST(1),
106 SIGNAL_PRIORITY_DEFAULT);
108 perl_signal_add_hash(SIGNAL_PRIORITY_DEFAULT, ST(0));
111 signal_add_first(...)
113 if (items != 1 && items != 2)
114 croak("Usage: Irssi::signal_add_first(signal, func)");
116 perl_signal_add_full((char *)SvPV(ST(0),PL_na), ST(1),
117 SIGNAL_PRIORITY_HIGH);
119 perl_signal_add_hash(SIGNAL_PRIORITY_HIGH, ST(0));
124 if (items != 1 && items != 2)
125 croak("Usage: Irssi::signal_add_last(signal, func)");
127 perl_signal_add_full((char *)SvPV(ST(0),PL_na), ST(1),
128 SIGNAL_PRIORITY_LOW);
130 perl_signal_add_hash(SIGNAL_PRIORITY_LOW, ST(0));
133 signal_add_priority(...)
135 if (items != 2 && items != 3)
136 croak("Usage: Irssi::signal_add_priority(signal, func, priority)");
138 perl_signal_add_full((char *)SvPV(ST(0),PL_na), ST(1), SvIV(ST(2)));
140 perl_signal_add_hash(SvIV(ST(0)), ST(1));
143 SIGNAL_PRIORITY_LOW()
145 RETVAL = SIGNAL_PRIORITY_LOW;
150 SIGNAL_PRIORITY_DEFAULT()
152 RETVAL = SIGNAL_PRIORITY_DEFAULT;
157 SIGNAL_PRIORITY_HIGH()
159 RETVAL = SIGNAL_PRIORITY_HIGH;
164 signal_remove(signal, func)
168 perl_signal_remove(signal, func);
174 signal_stop_by_name(signal)
180 RETVAL = (char *) signal_get_emitted();
185 signal_get_emitted_id()
188 timeout_add(msecs, func, data)
194 croak("Irssi::timeout() : msecs must be >= 10");
197 RETVAL = perl_timeout_add(msecs, func, data, FALSE);
203 timeout_add_once(msecs, func, data)
209 croak("Irssi::timeout_once() : msecs must be >= 10");
212 RETVAL = perl_timeout_add(msecs, func, data, TRUE);
221 perl_source_remove(tag);
227 RETVAL = G_INPUT_READ;
234 RETVAL = G_INPUT_WRITE;
239 input_add(source, condition, func, data)
245 RETVAL = perl_input_add(source, condition, func, data);
253 perl_source_remove(tag);
255 # maybe there's some easier way than this..? :)
259 RETVAL = MSGLEVEL_CRAP;
266 RETVAL = MSGLEVEL_MSGS;
273 RETVAL = MSGLEVEL_PUBLIC;
280 RETVAL = MSGLEVEL_NOTICES;
287 RETVAL = MSGLEVEL_SNOTES;
294 RETVAL = MSGLEVEL_CTCPS;
301 RETVAL = MSGLEVEL_ACTIONS;
308 RETVAL = MSGLEVEL_JOINS;
315 RETVAL = MSGLEVEL_PARTS;
322 RETVAL = MSGLEVEL_QUITS;
329 RETVAL = MSGLEVEL_KICKS;
336 RETVAL = MSGLEVEL_MODES;
343 RETVAL = MSGLEVEL_TOPICS;
350 RETVAL = MSGLEVEL_WALLOPS;
357 RETVAL = MSGLEVEL_INVITES;
364 RETVAL = MSGLEVEL_NICKS;
371 RETVAL = MSGLEVEL_DCC;
378 RETVAL = MSGLEVEL_DCCMSGS;
383 MSGLEVEL_CLIENTNOTICE()
385 RETVAL = MSGLEVEL_CLIENTNOTICE;
390 MSGLEVEL_CLIENTCRAP()
392 RETVAL = MSGLEVEL_CLIENTCRAP;
397 MSGLEVEL_CLIENTERROR()
399 RETVAL = MSGLEVEL_CLIENTERROR;
406 RETVAL = MSGLEVEL_HILIGHT;
413 RETVAL = MSGLEVEL_ALL;
420 RETVAL = MSGLEVEL_NOHILIGHT;
427 RETVAL = MSGLEVEL_NO_ACT;
434 RETVAL = MSGLEVEL_NEVER;
441 RETVAL = MSGLEVEL_LASTLOG;
455 ret = bits2level(bits);
456 XPUSHs(sv_2mortal(new_pv(ret)));
460 combine_level(level, str)
468 perl_command(cmd, NULL, NULL);
475 for (tmp = commands; tmp != NULL; tmp = tmp->next) {
476 XPUSHs(sv_2mortal(plain_bless(tmp->data, "Irssi::Command")));
480 command_bind_first(...)
482 handle_command_bind(SIGNAL_PRIORITY_HIGH, items, ST(0), ST(1), ST(2));
487 handle_command_bind(SIGNAL_PRIORITY_DEFAULT, items, ST(0), ST(1), ST(2));
490 command_bind_last(...)
492 handle_command_bind(SIGNAL_PRIORITY_LOW, items, ST(0), ST(1), ST(2));
495 command_runsub(cmd, data, server, item)
499 Irssi::Windowitem item
501 perl_command_runsub(cmd, data, server, item);
504 command_unbind(cmd, func)
508 perl_command_unbind(cmd, func);
511 command_set_options(cmd, options)
524 parse_special(cmd, data="", flags=0)
531 ret = parse_special_string(cmd, NULL, NULL, data, NULL, flags);
532 XPUSHs(sv_2mortal(new_pv(ret)));
533 g_free_not_null(ret);
538 RETVAL = (char *) get_irssi_dir();
545 RETVAL = (char *) get_irssi_config();
554 g_snprintf(version, sizeof(version), "%d.%04d",
555 IRSSI_VERSION_DATE, IRSSI_VERSION_TIME);
570 RETVAL = IRSSI_GUI_NONE;
577 RETVAL = IRSSI_GUI_TEXT;
584 RETVAL = IRSSI_GUI_GTK;
591 RETVAL = IRSSI_GUI_GNOME;
598 RETVAL = IRSSI_GUI_QT;
605 RETVAL = IRSSI_GUI_KDE;
609 #*******************************
610 MODULE = Irssi::Core PACKAGE = Irssi::Server
611 #*******************************
614 parse_special(server, cmd, data="", flags=0)
622 ret = parse_special_string(cmd, server, NULL, data, NULL, flags);
623 XPUSHs(sv_2mortal(new_pv(ret)));
624 g_free_not_null(ret);
631 perl_command(cmd, server, NULL);
634 #*******************************
635 MODULE = Irssi::Core PACKAGE = Irssi::Windowitem
636 #*******************************
639 parse_special(item, cmd, data="", flags=0)
640 Irssi::Windowitem item
647 ret = parse_special_string(cmd, item->server, item, data, NULL, flags);
648 XPUSHs(sv_2mortal(new_pv(ret)));
649 g_free_not_null(ret);
653 Irssi::Windowitem item
656 perl_command(cmd, item->server, item);