cvs: embed /php-irssi ext-irssi.c gensignals.php php-irssi.h
[email protected] ("Wez Furlong") Mon, 31 Mar 2003 16:55:28 -0000
| Newsgroups | php.embed.cvs |
|---|---|
| Message-ID | <cvswez1049129728@cvsserver> |
wez Mon Mar 31 11:55:28 2003 EDT
Modified files:
/embed/php-irssi ext-irssi.c gensignals.php php-irssi.h
Log:
Add some protos.
Enable matches for "partial" event handler entries (such as "event ").
Index: embed/php-irssi/ext-irssi.c
diff -u embed/php-irssi/ext-irssi.c:1.18 embed/php-irssi/ext-irssi.c:1.19
--- embed/php-irssi/ext-irssi.c:1.18 Tue Mar 11 09:15:25 2003
+++ embed/php-irssi/ext-irssi.c Mon Mar 31 11:55:28 2003
@@ -14,7 +14,7 @@
+----------------------------------------------------------------------+
| Author: Wez Furlong <[email protected]> |
+----------------------------------------------------------------------+
- $Id: ext-irssi.c,v 1.18 2003/03/11 14:15:25 tal Exp $
+ $Id: ext-irssi.c,v 1.19 2003/03/31 16:55:28 wez Exp $
*/
#include "php-irssi.h"
#include "php-signals-list.h" /* generated by php during make */
@@ -126,12 +126,21 @@
return NULL;
}
-
-static inline struct php_irssi_signal_args *sigid_to_args(int sigid)
+/* maps a signal ID to the args record declared in php-signals-list.h */
+static inline struct php_irssi_signal_args *sigid_to_args(int sigid, char *signame)
{
- int i;
+ int i, signamelen;
+ /* if signame is not directly matched, we should match an entry with a trailing space */
+ signamelen = strlen(signame);
+
for (i = 0; php_irssi_sig_args_table[i].signame != NULL; i++) {
+ if (php_irssi_sig_args_table[i].signame[php_irssi_sig_args_table[i].signamelen-1] == ' ' &&
+ signamelen > php_irssi_sig_args_table[i].signamelen &&
+ strncmp(php_irssi_sig_args_table[i].signame, signame, php_irssi_sig_args_table[i].signamelen) == 0) {
+ /* matches partial event entry */
+ return &php_irssi_sig_args_table[i];
+ }
if (php_irssi_sig_args_table[i].sigid == 0) {
php_irssi_sig_args_table[i].sigid = signal_get_uniq_id(php_irssi_sig_args_table[i].signame);
}
@@ -143,6 +152,7 @@
}
+/* This function routes irssi signal events into PHP user-space */
static void sig_func(const void *p1, const void *p2, const void *p3,
const void *p4, const void *p5, const void *p6)
{
@@ -328,6 +338,8 @@
return 1;
}
+/* proto void irssi_timeout_remove(string timeouttag)
+ Removes/disables a timeout previously set using irssi_timeout_add. */
PHP_FUNCTION(irssi_timeout_remove)
{
char *signame;
@@ -342,7 +354,7 @@
}
/* proto string irssi_timeout_add(long msecsinterval, mixed callback, [mixed arg, [bool oneshot]])
- Requests that callback be called every msecsinterval. */
+ Requests that callback be called every msecsinterval. Returns a tag that can be used to disable the timeout */
PHP_FUNCTION(irssi_timeout_add)
{
zval *sigarg = NULL, *funcname;
@@ -477,7 +489,7 @@
}
sigid = signal_get_uniq_id("default command");
- sigargs = sigid_to_args(sigid);
+ sigargs = sigid_to_args(sigid, "default command");
sighash = signal_hash_key(signame, funcname, "command" TSRMLS_CC);
if (sighash == NULL) {
@@ -535,7 +547,7 @@
}
sigid = signal_get_uniq_id(signame);
- sigargs = sigid_to_args(sigid);
+ sigargs = sigid_to_args(sigid, signame);
sighash = signal_hash_key(signame, funcname, "signal" TSRMLS_CC);
if (sighash == NULL) {
@@ -573,7 +585,8 @@
}
-/* fetches the optional arg registered when an event handler was bound */
+/* proto mixed irssi_signal_get_arg(void)
+ fetches the optional arg registered when an event handler was bound */
PHP_FUNCTION(irssi_signal_get_arg)
{
struct sig_record *rec = (struct sig_record*)signal_get_user_data();
@@ -591,7 +604,8 @@
}
-/* Trigger a signal */
+/* proto void irssi_signal_emit(string signalname, ...)
+ Trigger a signal */
PHP_FUNCTION(irssi_signal_emit)
{
const void *args[6];
@@ -609,7 +623,7 @@
convert_to_string_ex(signame);
sigid = signal_get_uniq_id(Z_STRVAL_PP(signame));
- sigargs = sigid_to_args(sigid);
+ sigargs = sigid_to_args(sigid, Z_STRVAL_PP(signame));
if (sigargs == NULL) {
return;
@@ -649,7 +663,8 @@
-/* Un-bind a signal */
+/* proto bool irssi_signal_remove(string signalname, mixed callback [, mixed sigarg])
+ Un-bind a signal */
PHP_FUNCTION(irssi_signal_remove)
{
zval *sigarg = NULL, *funcname;
Index: embed/php-irssi/gensignals.php
diff -u embed/php-irssi/gensignals.php:1.7 embed/php-irssi/gensignals.php:1.8
--- embed/php-irssi/gensignals.php:1.7 Wed Mar 12 11:37:04 2003
+++ embed/php-irssi/gensignals.php Mon Mar 31 11:55:28 2003
@@ -15,7 +15,7 @@
+----------------------------------------------------------------------+
| Author: Wez Furlong <[email protected]> |
+----------------------------------------------------------------------+
- $Id: gensignals.php,v 1.7 2003/03/12 16:37:04 tal Exp $
+ $Id: gensignals.php,v 1.8 2003/03/31 16:55:28 wez Exp $
*/
/* Generate signal information from the signals.txt file in the docs
@@ -59,7 +59,7 @@
}
if ($ok) {
- echo "{ \"$signal\", 0, " . count($record) . ", {" . implode(",", $record) . "} },\n";
+ echo "{ \"$signal\", " . strlen($signal) . ", 0, " . count($record) . ", {" . implode(",", $record) . "} },\n";
}
}
Index: embed/php-irssi/php-irssi.h
diff -u embed/php-irssi/php-irssi.h:1.7 embed/php-irssi/php-irssi.h:1.8
--- embed/php-irssi/php-irssi.h:1.7 Tue Mar 11 09:15:25 2003
+++ embed/php-irssi/php-irssi.h Mon Mar 31 11:55:28 2003
@@ -14,7 +14,7 @@
+----------------------------------------------------------------------+
| Author: Wez Furlong <[email protected]> |
+----------------------------------------------------------------------+
- $Id: php-irssi.h,v 1.7 2003/03/11 14:15:25 tal Exp $
+ $Id: php-irssi.h,v 1.8 2003/03/31 16:55:28 wez Exp $
*/
#define MODULE_NAME "php/core"
@@ -55,6 +55,7 @@
struct php_irssi_signal_args {
const char *signame;
+ int signamelen;
int sigid; /* bound at runtime */
int argc; /* number of args */
int argtypes[SIGNAL_MAX_ARGUMENTS];