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];