summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/perl/common/Core.xs16
-rw-r--r--src/perl/perl-signals.c14
-rw-r--r--src/perl/perl-signals.h11
3 files changed, 34 insertions, 7 deletions
diff --git a/src/perl/common/Core.xs b/src/perl/common/Core.xs
index e69b5a50..6c04cc9d 100644
--- a/src/perl/common/Core.xs
+++ b/src/perl/common/Core.xs
@@ -316,6 +316,14 @@ PPCODE:
}
void
+command_bind_first(cmd, func, category = "Perl scripts' commands")
+ char *cmd
+ char *category
+ char *func
+CODE:
+ perl_command_bind_first(cmd, category, func);
+
+void
command_bind(cmd, func, category = "Perl scripts' commands")
char *cmd
char *category
@@ -324,6 +332,14 @@ CODE:
perl_command_bind(cmd, category, func);
void
+command_bind_last(cmd, func, category = "Perl scripts' commands")
+ char *cmd
+ char *category
+ char *func
+CODE:
+ perl_command_bind_last(cmd, category, func);
+
+void
command_runsub(cmd, data, server, item)
char *cmd
char *data
diff --git a/src/perl/perl-signals.c b/src/perl/perl-signals.c
index dfeac966..8f47e93f 100644
--- a/src/perl/perl-signals.c
+++ b/src/perl/perl-signals.c
@@ -213,9 +213,12 @@ SIG_FUNC_DECL(0, first);
SIG_FUNC_DECL(1, default);
SIG_FUNC_DECL(2, last);
+#define priority_get_func(priority) \
+ (priority == 0 ? sig_func_first : \
+ priority == 1 ? sig_func_default : sig_func_last)
+
#define perl_signal_get_func(rec) \
- ((rec)->priority == 0 ? sig_func_first : \
- (rec)->priority == 1 ? sig_func_default : sig_func_last)
+ (priority_get_func((rec)->priority))
void perl_signal_add_to_int(const char *signal, const char *func,
int priority, int add_signal)
@@ -319,14 +322,15 @@ void perl_signal_remove(const char *signal, const char *func)
g_free(fullfunc);
}
-void perl_command_bind(const char *cmd, const char *category, const char *func)
+void perl_command_bind_to(const char *cmd, const char *category,
+ const char *func, int priority)
{
char *signal;
- command_bind(cmd, category, sig_func_default);
+ command_bind(cmd, category, priority_get_func(priority));
signal = g_strconcat("command ", cmd, NULL);
- perl_signal_add_to_int(signal, func, 1, FALSE);
+ perl_signal_add_to_int(signal, func, priority, FALSE);
g_free(signal);
}
diff --git a/src/perl/perl-signals.h b/src/perl/perl-signals.h
index 3f9e5ff3..adea18a1 100644
--- a/src/perl/perl-signals.h
+++ b/src/perl/perl-signals.h
@@ -11,8 +11,15 @@ void perl_signal_add_to(const char *signal, const char *func, int priority);
void perl_signal_remove(const char *signal, const char *func);
-void perl_command_bind(const char *cmd, const char *category,
- const char *func);
+void perl_command_bind_to(const char *cmd, const char *category,
+ const char *func, int priority);
+#define perl_command_bind_first(cmd, category, func) \
+ perl_command_bind_to(cmd, category, func, 0)
+#define perl_command_bind(cmd, category, func) \
+ perl_command_bind_to(cmd, category, func, 1)
+#define perl_command_bind_last(cmd, category, func) \
+ perl_command_bind_to(cmd, category, func, 2)
+
void perl_command_unbind(const char *cmd, const char *func);
/* destroy all signals used by package */