X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=apps%2Firssi%2Fsrc%2Fperl%2Fcommon%2FCore.xs;h=0fb93efb58662dbd86713ba21b11463297e15707;hb=9601176a506c8a545a954891e5e25552e9609159;hp=4db742c044e29ebc29c6ae573f482bab21505784;hpb=8efe5c6b18756ea335788ebf0afdf294764f4c26;p=crypto.git diff --git a/apps/irssi/src/perl/common/Core.xs b/apps/irssi/src/perl/common/Core.xs index 4db742c0..0fb93efb 100644 --- a/apps/irssi/src/perl/common/Core.xs +++ b/apps/irssi/src/perl/common/Core.xs @@ -15,7 +15,7 @@ void perl_signal_add_hash(int priority, SV *sv) hv = hvref(sv); hv_iterinit(hv); while ((he = hv_iternext(hv)) != NULL) - perl_signal_add_to(hv_iterkey(he, &len), HeVAL(he), priority); + perl_signal_add_full(hv_iterkey(he, &len), HeVAL(he), priority); } static void perl_command_bind_add_hash(int priority, SV *sv, char *category) @@ -76,15 +76,35 @@ CODE: } signal_emit(signal, items-1, p[0], p[1], p[2], p[3], p[4], p[5]); +void +signal_continue(...) +CODE: + void *p[SIGNAL_MAX_ARGUMENTS]; + int n; + + memset(p, 0, sizeof(p)); + for (n = 0; n < items && n < SIGNAL_MAX_ARGUMENTS; n++) { + if (SvPOKp(ST(n))) + p[n] = SvPV(ST(n), PL_na); + else if (irssi_is_ref_object(ST(n))) + p[n] = irssi_ref_object(ST(n)); + else if (SvROK(ST(n))) + p[n] = (void *) SvIV((SV*)SvRV(ST(n))); + else + p[n] = NULL; + } + signal_continue(items, p[0], p[1], p[2], p[3], p[4], p[5]); + void signal_add(...) CODE: if (items != 1 && items != 2) croak("Usage: Irssi::signal_add(signal, func)"); if (items == 2) - perl_signal_add((char *)SvPV(ST(0),PL_na), ST(1)); + perl_signal_add_full((char *)SvPV(ST(0),PL_na), ST(1), + SIGNAL_PRIORITY_DEFAULT); else - perl_signal_add_hash(1, ST(0)); + perl_signal_add_hash(SIGNAL_PRIORITY_DEFAULT, ST(0)); void signal_add_first(...) @@ -92,9 +112,10 @@ CODE: if (items != 1 && items != 2) croak("Usage: Irssi::signal_add_first(signal, func)"); if (items == 2) - perl_signal_add_first((char *)SvPV(ST(0),PL_na), ST(1)); + perl_signal_add_full((char *)SvPV(ST(0),PL_na), ST(1), + SIGNAL_PRIORITY_HIGH); else - perl_signal_add_hash(0, ST(0)); + perl_signal_add_hash(SIGNAL_PRIORITY_HIGH, ST(0)); void signal_add_last(...) @@ -102,9 +123,41 @@ CODE: if (items != 1 && items != 2) croak("Usage: Irssi::signal_add_last(signal, func)"); if (items == 2) - perl_signal_add_last((char *)SvPV(ST(0),PL_na), ST(1)); + perl_signal_add_full((char *)SvPV(ST(0),PL_na), ST(1), + SIGNAL_PRIORITY_LOW); else - perl_signal_add_hash(2, ST(0)); + perl_signal_add_hash(SIGNAL_PRIORITY_LOW, ST(0)); + +void +signal_add_priority(...) +CODE: + if (items != 2 && items != 3) + croak("Usage: Irssi::signal_add_priority(signal, func, priority)"); + if (items == 3) + perl_signal_add_full((char *)SvPV(ST(0),PL_na), ST(1), SvIV(ST(2))); + else + perl_signal_add_hash(SvIV(ST(0)), ST(1)); + +int +SIGNAL_PRIORITY_LOW() +CODE: + RETVAL = SIGNAL_PRIORITY_LOW; +OUTPUT: + RETVAL + +int +SIGNAL_PRIORITY_DEFAULT() +CODE: + RETVAL = SIGNAL_PRIORITY_DEFAULT; +OUTPUT: + RETVAL + +int +SIGNAL_PRIORITY_HIGH() +CODE: + RETVAL = SIGNAL_PRIORITY_HIGH; +OUTPUT: + RETVAL void signal_remove(signal, func) @@ -136,7 +189,12 @@ timeout_add(msecs, func, data) SV *func SV *data CODE: - RETVAL = perl_timeout_add(msecs, func, data); + if (msecs < 10) { + croak("Irssi::timeout() : msecs must be >= 10"); + RETVAL = -1; + } else { + RETVAL = perl_timeout_add(msecs, func, data); + } OUTPUT: RETVAL @@ -399,17 +457,17 @@ PPCODE: void command_bind_first(...) CODE: - handle_command_bind(0, items, ST(0), ST(1), ST(2)); + handle_command_bind(SIGNAL_PRIORITY_HIGH, items, ST(0), ST(1), ST(2)); void command_bind(...) CODE: - handle_command_bind(1, items, ST(0), ST(1), ST(2)); + handle_command_bind(SIGNAL_PRIORITY_DEFAULT, items, ST(0), ST(1), ST(2)); void command_bind_last(...) CODE: - handle_command_bind(2, items, ST(0), ST(1), ST(2)); + handle_command_bind(SIGNAL_PRIORITY_LOW, items, ST(0), ST(1), ST(2)); void command_runsub(cmd, data, server, item)