1
0
mirror of https://github.com/irssi/irssi.git synced 2024-12-04 14:46:39 -05:00

Added input_add() / input_remove()

git-svn-id: http://svn.irssi.org/repos/irssi/trunk@856 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
Timo Sirainen 2000-11-21 23:26:07 +00:00 committed by cras
parent d62177df3c
commit 8dd24a4444
3 changed files with 68 additions and 31 deletions

View File

@ -57,7 +57,39 @@ void
timeout_remove(tag)
int tag
CODE:
perl_timeout_remove(tag);
perl_source_remove(tag);
int
INPUT_READ()
CODE:
RETVAL = G_INPUT_READ;
OUTPUT:
RETVAL
int
INPUT_WRITE()
CODE:
RETVAL = G_INPUT_WRITE;
OUTPUT:
RETVAL
int
input_add(source, condition, func, data)
int source
int condition
char *func
char *data
CODE:
RETVAL = perl_input_add(source, condition, func, data);
OUTPUT:
RETVAL
void
input_remove(tag)
int tag
CODE:
perl_source_remove(tag);
int
level2bits(str)

View File

@ -13,20 +13,10 @@ require Exporter;
require DynaLoader;
@ISA = qw(Exporter DynaLoader);
@EXPORT = qw();
@EXPORT = qw(INPUT_READ INPUT_WRITE);
@EXPORT_OK = qw();
bootstrap Irssi $VERSION;
@Irssi::Ircnet::ISA = qw(Irssi::Chatnet);
@Irssi::IrcServer::ISA = qw(Irssi::Server);
@Irssi::IrcServerConnect::ISA = qw(Irssi::ServerConnect);
@Irssi::IrcServerSetup::ISA = qw(Irssi::ServerSetup);
@Irssi::Channel::ISA = qw(Irssi::WindowItem);
@Irssi::Query::ISA = qw(Irssi::WindowItem);
@Irssi::IrcChannel::ISA = qw(Irssi::Channel);
@Irssi::IrcQuery::ISA = qw(Irssi::Query);
1;

View File

@ -64,12 +64,12 @@ typedef struct {
int tag;
char *func;
char *data;
} PERL_TIMEOUT_REC;
} PERL_SOURCE_REC;
#include "perl-signals.h"
static GHashTable *first_signals, *last_signals;
static GSList *perl_timeouts;
static GSList *perl_sources;
static GSList *perl_scripts;
static PerlInterpreter *irssi_perl_interp;
static int signal_grabbed, siglast_grabbed;
@ -115,9 +115,9 @@ static void perl_signal_destroy(PERL_SIGNAL_REC *rec)
g_free(rec);
}
static void perl_timeout_destroy(PERL_TIMEOUT_REC *rec)
static void perl_source_destroy(PERL_SOURCE_REC *rec)
{
perl_timeouts = g_slist_remove(perl_timeouts, rec);
perl_sources = g_slist_remove(perl_sources, rec);
g_source_remove(rec->tag);
g_free(rec->func);
@ -160,7 +160,7 @@ static void irssi_perl_start(void)
(GCompareFunc) g_direct_equal);
last_signals = g_hash_table_new((GHashFunc) g_direct_hash,
(GCompareFunc) g_direct_equal);
perl_timeouts = NULL;
perl_sources = NULL;
irssi_perl_interp = perl_alloc();
perl_construct(irssi_perl_interp);
@ -216,12 +216,12 @@ static int perl_script_destroy(const char *name)
g_hash_table_foreach_remove(last_signals,
(GHRFunc) signal_destroy_hash, package);
for (tmp = perl_timeouts; tmp != NULL; tmp = next) {
PERL_TIMEOUT_REC *rec = tmp->data;
for (tmp = perl_sources; tmp != NULL; tmp = next) {
PERL_SOURCE_REC *rec = tmp->data;
next = tmp->next;
if (strncmp(rec->func, package, package_len) == 0)
perl_timeout_destroy(rec);
perl_source_destroy(rec);
}
g_free(package);
@ -248,8 +248,8 @@ static void irssi_perl_stop(void)
signal_remove("last signal", (SIGNAL_FUNC) sig_lastsignal);
}
while (perl_timeouts != NULL)
perl_timeout_destroy(perl_timeouts->data);
while (perl_sources != NULL)
perl_source_destroy(perl_sources->data);
g_slist_foreach(perl_scripts, (GFunc) g_free, NULL);
g_slist_free(perl_scripts);
@ -437,7 +437,7 @@ void perl_signal_remove(const char *signal, const char *func)
g_free(fullfunc);
}
static int perl_timeout(PERL_TIMEOUT_REC *rec)
static int perl_source_event(PERL_SOURCE_REC *rec)
{
dSP;
int retcount;
@ -469,26 +469,41 @@ static int perl_timeout(PERL_TIMEOUT_REC *rec)
int perl_timeout_add(int msecs, const char *func, const char *data)
{
PERL_TIMEOUT_REC *rec;
PERL_SOURCE_REC *rec;
rec = g_new(PERL_TIMEOUT_REC, 1);
rec = g_new(PERL_SOURCE_REC, 1);
rec->func = g_strdup_printf("%s::%s", perl_get_package(), func);
rec->data = g_strdup(data);
rec->tag = g_timeout_add(msecs, (GSourceFunc) perl_timeout, rec);
rec->tag = g_timeout_add(msecs, (GSourceFunc) perl_source_event, rec);
perl_timeouts = g_slist_append(perl_timeouts, rec);
perl_sources = g_slist_append(perl_sources, rec);
return rec->tag;
}
void perl_timeout_remove(int tag)
int perl_input_add(int source, int condition,
const char *func, const char *data)
{
PERL_SOURCE_REC *rec;
rec = g_new(PERL_SOURCE_REC, 1);
rec->func = g_strdup_printf("%s::%s", perl_get_package(), func);
rec->data = g_strdup(data);
rec->tag = g_input_add(source, condition,
(GInputFunction) perl_source_event, rec);
perl_sources = g_slist_append(perl_sources, rec);
return rec->tag;
}
void perl_source_remove(int tag)
{
GSList *tmp;
for (tmp = perl_timeouts; tmp != NULL; tmp = tmp->next) {
PERL_TIMEOUT_REC *rec = tmp->data;
for (tmp = perl_sources; tmp != NULL; tmp = tmp->next) {
PERL_SOURCE_REC *rec = tmp->data;
if (rec->tag == tag) {
perl_timeout_destroy(rec);
perl_source_destroy(rec);
break;
}
}