2 #include "irssi-version.h"
8 #define DEFAULT_COMMAND_CATEGORY "Perl scripts' commands"
10 void perl_signal_add_hash(int priority, SV *sv)
17 croak("Usage: Irssi::signal_add(hash)");
21 while ((he = hv_iternext(hv)) != NULL)
22 perl_signal_add_full(hv_iterkey(he, &len), HeVAL(he), priority);
25 static void perl_command_bind_add_hash(int priority, SV *sv, char *category)
33 while ((he = hv_iternext(hv)) != NULL)
34 perl_command_bind_to(hv_iterkey(he, &len), category, HeVAL(he), priority);
37 static void handle_command_bind(int priority, int items, SV *p0, SV *p1, SV *p2)
42 hash = items > 0 && is_hvref(p0);
44 if (items < 2 || items > 3)
45 croak("Usage: Irssi::command_bind(signal, func, category)");
47 croak("Usage: Irssi::command_bind(signals_hash, category)");
50 category = items < 3 ? DEFAULT_COMMAND_CATEGORY :
51 (char *)SvPV(p2, PL_na);
52 perl_command_bind_to((char *)SvPV(p0, PL_na), category, p1, priority);
54 category = items < 2 ? DEFAULT_COMMAND_CATEGORY :
55 (char *)SvPV(p1, PL_na);
56 perl_command_bind_add_hash(priority, p0, category);
60 MODULE = Irssi::Core PACKAGE = Irssi
64 signal_emit(signal, ...)
67 void *p[SIGNAL_MAX_ARGUMENTS];
70 memset(p, 0, sizeof(p));
71 for (n = 1; n < items && n < SIGNAL_MAX_ARGUMENTS+1; n++) {
73 p[n-1] = SvPV(ST(n), PL_na);
74 else if (irssi_is_ref_object(ST(n)))
75 p[n-1] = irssi_ref_object(ST(n));
76 else if (SvROK(ST(n)))
77 p[n-1] = (void *) SvIV((SV*)SvRV(ST(n)));
78 else if (SvIOK(ST(n)))
79 p[n-1] = (void *)SvIV(ST(n));
83 signal_emit(signal, items-1, p[0], p[1], p[2], p[3], p[4], p[5]);
88 void *p[SIGNAL_MAX_ARGUMENTS];
91 memset(p, 0, sizeof(p));
92 for (n = 0; n < items && n < SIGNAL_MAX_ARGUMENTS; n++) {
94 p[n] = SvPV(ST(n), PL_na);
95 else if (irssi_is_ref_object(ST(n)))
96 p[n] = irssi_ref_object(ST(n));
97 else if (SvROK(ST(n)))
98 p[n] = (void *) SvIV((SV*)SvRV(ST(n)));
99 else if (SvIOK(ST(n)))
100 p[n] = (void *) SvIV(ST(n));
104 signal_continue(items, p[0], p[1], p[2], p[3], p[4], p[5]);
109 if (items != 1 && items != 2)
110 croak("Usage: Irssi::signal_add(signal, func)");
112 perl_signal_add_full((char *)SvPV(ST(0),PL_na), ST(1),
113 SIGNAL_PRIORITY_DEFAULT);
115 perl_signal_add_hash(SIGNAL_PRIORITY_DEFAULT, ST(0));
118 signal_add_first(...)
120 if (items != 1 && items != 2)
121 croak("Usage: Irssi::signal_add_first(signal, func)");
123 perl_signal_add_full((char *)SvPV(ST(0),PL_na), ST(1),
124 SIGNAL_PRIORITY_HIGH);
126 perl_signal_add_hash(SIGNAL_PRIORITY_HIGH, ST(0));
131 if (items != 1 && items != 2)
132 croak("Usage: Irssi::signal_add_last(signal, func)");
134 perl_signal_add_full((char *)SvPV(ST(0),PL_na), ST(1),
135 SIGNAL_PRIORITY_LOW);
137 perl_signal_add_hash(SIGNAL_PRIORITY_LOW, ST(0));
140 signal_add_priority(...)
142 if (items != 2 && items != 3)
143 croak("Usage: Irssi::signal_add_priority(signal, func, priority)");
145 perl_signal_add_full((char *)SvPV(ST(0),PL_na), ST(1), SvIV(ST(2)));
147 perl_signal_add_hash(SvIV(ST(0)), ST(1));
157 if (items != 1 || !is_hvref(ST(0)))
158 croak("Usage: Irssi::signal_register(hash)");
162 while ((he = hv_iternext(hv)) != NULL) {
163 const char *key = hv_iterkey(he, &len);
167 if (!SvROK(val) || SvTYPE(SvRV(val)) != SVt_PVAV)
168 croak("not array reference");
170 av = (AV *) SvRV(val);
172 if (len > 6) len = 6;
173 for (pos = 0; pos < len; pos++) {
174 SV **val = av_fetch(av, pos, 0);
175 arr[pos] = SvPV(*val, PL_na);
178 perl_signal_register(key, arr);
183 SIGNAL_PRIORITY_LOW()
185 RETVAL = SIGNAL_PRIORITY_LOW;
190 SIGNAL_PRIORITY_DEFAULT()
192 RETVAL = SIGNAL_PRIORITY_DEFAULT;
197 SIGNAL_PRIORITY_HIGH()
199 RETVAL = SIGNAL_PRIORITY_HIGH;
204 signal_remove(signal, func)
208 perl_signal_remove(signal, func);
214 signal_stop_by_name(signal)
220 RETVAL = (char *) signal_get_emitted();
225 signal_get_emitted_id()
228 timeout_add(msecs, func, data)
234 croak("Irssi::timeout() : msecs must be >= 10");
237 RETVAL = perl_timeout_add(msecs, func, data, FALSE);
243 timeout_add_once(msecs, func, data)
249 croak("Irssi::timeout_once() : msecs must be >= 10");
252 RETVAL = perl_timeout_add(msecs, func, data, TRUE);
261 perl_source_remove(tag);
267 RETVAL = G_INPUT_READ;
274 RETVAL = G_INPUT_WRITE;
279 input_add(source, condition, func, data)
285 RETVAL = perl_input_add(source, condition, func, data, FALSE);
293 perl_source_remove(tag);
295 # maybe there's some easier way than this..? :)
299 RETVAL = MSGLEVEL_CRAP;
306 RETVAL = MSGLEVEL_MSGS;
313 RETVAL = MSGLEVEL_PUBLIC;
320 RETVAL = MSGLEVEL_NOTICES;
327 RETVAL = MSGLEVEL_SNOTES;
334 RETVAL = MSGLEVEL_CTCPS;
341 RETVAL = MSGLEVEL_ACTIONS;
348 RETVAL = MSGLEVEL_JOINS;
355 RETVAL = MSGLEVEL_PARTS;
362 RETVAL = MSGLEVEL_QUITS;
369 RETVAL = MSGLEVEL_KICKS;
376 RETVAL = MSGLEVEL_MODES;
383 RETVAL = MSGLEVEL_TOPICS;
390 RETVAL = MSGLEVEL_WALLOPS;
397 RETVAL = MSGLEVEL_INVITES;
404 RETVAL = MSGLEVEL_NICKS;
411 RETVAL = MSGLEVEL_DCC;
418 RETVAL = MSGLEVEL_DCCMSGS;
423 MSGLEVEL_CLIENTNOTICE()
425 RETVAL = MSGLEVEL_CLIENTNOTICE;
430 MSGLEVEL_CLIENTCRAP()
432 RETVAL = MSGLEVEL_CLIENTCRAP;
437 MSGLEVEL_CLIENTERROR()
439 RETVAL = MSGLEVEL_CLIENTERROR;
446 RETVAL = MSGLEVEL_HILIGHT;
453 RETVAL = MSGLEVEL_ALL;
460 RETVAL = MSGLEVEL_NOHILIGHT;
467 RETVAL = MSGLEVEL_NO_ACT;
474 RETVAL = MSGLEVEL_NEVER;
481 RETVAL = MSGLEVEL_LASTLOG;
495 ret = bits2level(bits);
496 XPUSHs(sv_2mortal(new_pv(ret)));
500 combine_level(level, str)
508 perl_command(cmd, NULL, NULL);
515 for (tmp = commands; tmp != NULL; tmp = tmp->next) {
516 XPUSHs(sv_2mortal(plain_bless(tmp->data, "Irssi::Command")));
520 command_bind_first(...)
522 handle_command_bind(SIGNAL_PRIORITY_HIGH, items, ST(0), ST(1), ST(2));
527 handle_command_bind(SIGNAL_PRIORITY_DEFAULT, items, ST(0), ST(1), ST(2));
530 command_bind_last(...)
532 handle_command_bind(SIGNAL_PRIORITY_LOW, items, ST(0), ST(1), ST(2));
535 command_runsub(cmd, data, server, item)
539 Irssi::Windowitem item
541 perl_command_runsub(cmd, data, server, item);
544 command_unbind(cmd, func)
548 perl_command_unbind(cmd, func);
551 command_set_options(cmd, options)
564 parse_special(cmd, data="", flags=0)
571 ret = parse_special_string(cmd, NULL, NULL, data, NULL, flags);
572 XPUSHs(sv_2mortal(new_pv(ret)));
573 g_free_not_null(ret);
578 RETVAL = (char *) get_irssi_dir();
585 RETVAL = (char *) get_irssi_config();
592 RETVAL = irssi_binary;
601 g_snprintf(version, sizeof(version), "%d.%04d",
602 IRSSI_VERSION_DATE, IRSSI_VERSION_TIME);
617 RETVAL = IRSSI_GUI_NONE;
624 RETVAL = IRSSI_GUI_TEXT;
631 RETVAL = IRSSI_GUI_GTK;
638 RETVAL = IRSSI_GUI_GNOME;
645 RETVAL = IRSSI_GUI_QT;
652 RETVAL = IRSSI_GUI_KDE;
656 #*******************************
657 MODULE = Irssi::Core PACKAGE = Irssi::Server
658 #*******************************
661 parse_special(server, cmd, data="", flags=0)
669 ret = parse_special_string(cmd, server, NULL, data, NULL, flags);
670 XPUSHs(sv_2mortal(new_pv(ret)));
671 g_free_not_null(ret);
678 perl_command(cmd, server, NULL);
681 #*******************************
682 MODULE = Irssi::Core PACKAGE = Irssi::Windowitem
683 #*******************************
686 parse_special(item, cmd, data="", flags=0)
687 Irssi::Windowitem item
694 ret = parse_special_string(cmd, item->server, item, data, NULL, flags);
695 XPUSHs(sv_2mortal(new_pv(ret)));
696 g_free_not_null(ret);
700 Irssi::Windowitem item
703 perl_command(cmd, item->server, item);