cvs: embed /php-irssi ext-irssi.c php-core.c php-irssi-obj.c typemap.php window.c

[email protected] ("Wez Furlong") Sun, 02 Feb 2003 19:18:28 -0000
Newsgroups php.embed.cvs
Message-ID <cvswez1044213508@cvsserver>
--wez1044213508
Content-Type: text/plain

wez		Sun Feb  2 14:18:28 2003 EDT

  Modified files:              
    /embed/php-irssi	ext-irssi.c php-core.c php-irssi-obj.c typemap.php 
                    	window.c 
  Log:
  More signal functions.
  Safer signal functions (using zend_try).
  Implement:
  $window->print_text(IRSSI_MSGLEVEL_CLIENTNOTICE, "foobar");
  
  
--wez1044213508
Content-Type: text/plain
Content-Disposition: attachment; filename="wez-20030202141828.txt"

Index: embed/php-irssi/ext-irssi.c
diff -u embed/php-irssi/ext-irssi.c:1.12 embed/php-irssi/ext-irssi.c:1.13
--- embed/php-irssi/ext-irssi.c:1.12	Sun Feb  2 10:08:53 2003
+++ embed/php-irssi/ext-irssi.c	Sun Feb  2 14:18:27 2003
@@ -14,7 +14,7 @@
   +----------------------------------------------------------------------+
   | Author: Wez Furlong <[email protected]>                                    |
   +----------------------------------------------------------------------+
-  $Id: ext-irssi.c,v 1.12 2003/02/02 15:08:53 wez Exp $
+  $Id: ext-irssi.c,v 1.13 2003/02/02 19:18:27 wez Exp $
 */
 #include "php-irssi.h"
 #include "php-signals-list.h" /* generated by php during make */
@@ -209,13 +209,18 @@
 		}
 	}
 
-	call_result = call_user_function_ex(EG(function_table),
-			NULL,
-			func_name,
-			&retval,
-			sigargs->argc,
-			zargs,
-			0, NULL TSRMLS_CC);
+	zend_first_try {
+		call_result = call_user_function_ex(EG(function_table),
+				NULL,
+				func_name,
+				&retval,
+				sigargs->argc,
+				zargs,
+				0, NULL TSRMLS_CC);
+
+	} zend_catch {
+		call_result = FAILURE;
+	} zend_end_try();
 	
 	if (call_result == SUCCESS) {
 		/* TODO: update any args passed by reference */
@@ -297,13 +302,16 @@
 		zargs[argc++] = &arg;
 	}
 		
-	call_user_function_ex(EG(function_table),
-			NULL,
-			rec->handler,
-			&retval,
-			argc,
-			zargs,
-			0, NULL TSRMLS_CC);
+	zend_first_try {
+		call_user_function_ex(EG(function_table),
+				NULL,
+				rec->handler,
+				&retval,
+				argc,
+				zargs,
+				0, NULL TSRMLS_CC);
+	} zend_catch {
+	} zend_end_try();
 	
 	if (retval)
 		zval_ptr_dtor(&retval);
@@ -388,7 +396,65 @@
 	}
 }
 
+/* proto void irssi_signal_stop(void)
+   Stop the current ongoing signal emission */
+PHP_FUNCTION(irssi_signal_stop)
+{
+	if (ZEND_NUM_ARGS() != 0) {
+		WRONG_PARAM_COUNT;
+	}
+	signal_stop();
+}
 
+/* proto void irssi_signal_stop_by_name(string name)
+   Stop ongoing signal emission by name. */
+PHP_FUNCTION(irssi_signal_stop_by_name)
+{
+	char *signame;
+	long signame_len;
+
+	if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &signame, &signame_len)) {
+		return;
+	}
+
+	signal_stop_by_name(signame);
+}
+
+/* proto string irssi_signal_get_emitted(void)
+   Get the name of the signal that is currently being emitted */
+PHP_FUNCTION(irssi_signal_get_emitted)
+{
+	char *signame;
+	
+	if (ZEND_NUM_ARGS() != 0) {
+		WRONG_PARAM_COUNT;
+	}
+	
+	signame = (char*)signal_get_emitted();
+
+	if (signame) {
+		RETURN_STRING(signame, 1);
+	} else {
+		RETURN_NULL();
+	}
+}
+
+/* proto bool irssi_signal_is_stopped(string signalname)
+   return true if the specified signal was stopped */
+PHP_FUNCTION(irssi_signal_is_stopped)
+{
+	char *signame;
+	long signame_len;
+	int sigid;
+	
+	if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &signame, &signame_len)) {
+		return;
+	}
+
+	sigid = signal_get_uniq_id(signame);
+
+	RETURN_BOOL(signal_is_stopped(sigid));
+}
 
 /* proto void irssi_signal_add(string signalname, mixed callback, [long priority, mixed sigarg])
    Binds a function to a signal. priority is one of the IRSSI_PRIORITY_XXX constants */
@@ -647,6 +713,10 @@
 	PHP_FE(irssi_signal_emit, NULL)
 	PHP_FE(irssi_signal_remove, NULL)
 	PHP_FE(irssi_signal_get_arg, NULL)
+	PHP_FE(irssi_signal_stop, NULL)
+	PHP_FE(irssi_signal_stop_by_name, NULL)
+	PHP_FE(irssi_signal_get_emitted, NULL)
+	PHP_FE(irssi_signal_is_stopped, NULL)
 	PHP_FE(irssi_timeout_add, NULL)
 	PHP_FE(irssi_timeout_remove, NULL)
 	PHP_FE(irssi_window_get_active, NULL)
Index: embed/php-irssi/php-core.c
diff -u embed/php-irssi/php-core.c:1.7 embed/php-irssi/php-core.c:1.8
--- embed/php-irssi/php-core.c:1.7	Fri Jan 31 14:44:00 2003
+++ embed/php-irssi/php-core.c	Sun Feb  2 14:18:27 2003
@@ -14,7 +14,7 @@
   +----------------------------------------------------------------------+
   | Author: Wez Furlong <[email protected]>                                    |
   +----------------------------------------------------------------------+
-  $Id: php-core.c,v 1.7 2003/01/31 19:44:00 tal Exp $
+  $Id: php-core.c,v 1.8 2003/02/02 19:18:27 wez Exp $
 */
 #define MODULE_NAME "php/core"
 #include "common.h"
@@ -44,7 +44,6 @@
 
 int signal_php_output;
 int signal_php_error;
-WINDOW_REC *target_win;
 
 /* Catch output pushed from the output buffer mechanism.
  * Route it to "php output" signal.
@@ -147,17 +146,17 @@
 /* Handler for "/php exec" command */
 static void cmd_php_exec(const char *data)
 {
-	target_win = active_win;
+	active_win = active_win;
 
 	switch (php_eval_string("php/irssi:exec", "%s", data)) {
 		case EVAL_RET_OK:
 			break;
 		case EVAL_RET_ERROR:
-			printtext_window(target_win, MSGLEVEL_CLIENTCRAP, "-!- php command failed");
+			printtext_window(active_win, MSGLEVEL_CLIENTCRAP, "-!- php command failed");
 			break;
 		case EVAL_RET_BAIL:
 		default:
-			printtext_window(target_win, MSGLEVEL_CLIENTCRAP, "-!- php command bailed out status=%d", EG(exit_status));
+			printtext_window(active_win, MSGLEVEL_CLIENTCRAP, "-!- php command bailed out status=%d", EG(exit_status));
 	}
 }
 
@@ -170,69 +169,69 @@
 /* Handler for "/php help" command */
 static void cmd_php_help(const char *data)
 {
-	target_win = active_win;
+	active_win = active_win;
 	
-	printtext_window(target_win, MSGLEVEL_CLIENTCRAP, "PHP Module:");
-	printtext_window(target_win, MSGLEVEL_CLIENTCRAP, "/php exec <string_to_evaluate>");
-	printtext_window(target_win, MSGLEVEL_CLIENTCRAP, "/php load <file>");
-	printtext_window(target_win, MSGLEVEL_CLIENTCRAP, "/php version");
-	printtext_window(target_win, MSGLEVEL_CLIENTCRAP, "/php set <ini_entry> <value>");
+	printtext_window(active_win, MSGLEVEL_CLIENTCRAP, "PHP Module:");
+	printtext_window(active_win, MSGLEVEL_CLIENTCRAP, "/php exec <string_to_evaluate>");
+	printtext_window(active_win, MSGLEVEL_CLIENTCRAP, "/php load <file>");
+	printtext_window(active_win, MSGLEVEL_CLIENTCRAP, "/php version");
+	printtext_window(active_win, MSGLEVEL_CLIENTCRAP, "/php set <ini_entry> <value>");
 }
 
 /* Handler for "/php version" command */
 static void cmd_php_version(const char *data)
 {
-	target_win = active_win;
+	active_win = active_win;
 	
-	printtext_window(target_win, MSGLEVEL_CLIENTCRAP, "PHP Module For Irssi v%s", PHP_IRSSI_VERSION);
-	printtext_window(target_win, MSGLEVEL_CLIENTCRAP, "PHP v%s", PHP_VERSION);
+	printtext_window(active_win, MSGLEVEL_CLIENTCRAP, "PHP Module For Irssi v%s", PHP_IRSSI_VERSION);
+	printtext_window(active_win, MSGLEVEL_CLIENTCRAP, "PHP v%s", PHP_VERSION);
 }
 
 /* Handler for "/php load" command */
 static void cmd_php_load(const char *data)
 {
-	target_win = active_win;
+	active_win = active_win;
 
 	switch (php_eval_string("php/irssi:load", "include('%s');", data)) {
 		case EVAL_RET_OK:
 			break;
 		case EVAL_RET_ERROR:
-			printtext_window(target_win, MSGLEVEL_CLIENTCRAP, "-!- php failed loading %s", data);
+			printtext_window(active_win, MSGLEVEL_CLIENTCRAP, "-!- php failed loading %s", data);
 		case EVAL_RET_BAIL:
 		default:
-			printtext_window(target_win, MSGLEVEL_CLIENTCRAP, "-!- php bailed out status=%d", EG(exit_status));
+			printtext_window(active_win, MSGLEVEL_CLIENTCRAP, "-!- php bailed out status=%d", EG(exit_status));
 	}
 }
 
 /* default "php error" signal handler */
 static void error_handler(char *message)
 {
-	printtext_window(target_win, MSGLEVEL_CLIENTCRAP, "-!- php error: %s", message);
+	printtext_window(active_win, MSGLEVEL_CLIENTCRAP, "-!- php error: %s", message);
 }
 
 /* default "php output" signal handler */
 static void output_handler(const char *str, unsigned int str_length)
 {
-	printtext_window(target_win, MSGLEVEL_CLIENTCRAP, "%s", str);
+	printtext_window(active_win, MSGLEVEL_CLIENTCRAP, "%s", str);
 }
 
 /* autorun any .php scripts found in the users scripts/autorun dir */
 static void do_autorun(void)
 {
-	target_win = active_win;
+	active_win = active_win;
 
 	switch (php_eval_string("php/irssi:autoload",
 				"foreach(glob('%s/scripts/autorun/*.php') as $_autorun_name) { include $_autorun_name; }",
 				get_irssi_dir())) {
 		case EVAL_RET_OK:
-			printtext_window(target_win, MSGLEVEL_CLIENTCRAP, "-!- php autoload completed");
+			printtext_window(active_win, MSGLEVEL_CLIENTCRAP, "-!- php autoload completed");
 			break;
 		case EVAL_RET_ERROR:
-			printtext_window(target_win, MSGLEVEL_CLIENTCRAP, "-!- php autoload failed");
+			printtext_window(active_win, MSGLEVEL_CLIENTCRAP, "-!- php autoload failed");
 			break;
 		case EVAL_RET_BAIL:
 		default:
-			printtext_window(target_win, MSGLEVEL_CLIENTCRAP, "-!- php autoload bailed out status=%d", EG(exit_status));
+			printtext_window(active_win, MSGLEVEL_CLIENTCRAP, "-!- php autoload bailed out status=%d", EG(exit_status));
 	}
 }
 
Index: embed/php-irssi/php-irssi-obj.c
diff -u embed/php-irssi/php-irssi-obj.c:1.5 embed/php-irssi/php-irssi-obj.c:1.6
--- embed/php-irssi/php-irssi-obj.c:1.5	Sat Feb  1 22:27:16 2003
+++ embed/php-irssi/php-irssi-obj.c	Sun Feb  2 14:18:27 2003
@@ -14,7 +14,7 @@
   +----------------------------------------------------------------------+
   | Author: Wez Furlong <[email protected]>                                    |
   +----------------------------------------------------------------------+
-  $Id: php-irssi-obj.c,v 1.5 2003/02/02 03:27:16 wez Exp $
+  $Id: php-irssi-obj.c,v 1.6 2003/02/02 19:18:27 wez Exp $
 */
 #include "php-irssi.h"
 #include "php-irssi-obj-defs.h"
@@ -102,7 +102,7 @@
 			return retval;
 		}
 		
-		zend_error(E_NOTICE,"Undefined property:  %s", Z_STRVAL_P(member));
+		zend_error(E_NOTICE, "Undefined property: %s", Z_STRVAL_P(member));
 
 		return EG(uninitialized_zval_ptr);
 	}
@@ -176,8 +176,7 @@
 	/* FIXME: doesn't seem quite right */
 	
 	if (parent) {
-		*class_name = "irssi";
-		*class_name_len = 5;
+		return FAILURE;
 	} else {
 		*class_name = (char*)ref->binding->classname;
 		*class_name_len = strlen(*class_name);
@@ -188,6 +187,7 @@
 
 static int pih_compare_objects(zval *o1, zval *o2 TSRMLS_DC)
 {
+	return FAILURE;
 }
 
 zend_object_handlers php_irssi_handlers = {
Index: embed/php-irssi/typemap.php
diff -u embed/php-irssi/typemap.php:1.5 embed/php-irssi/typemap.php:1.6
--- embed/php-irssi/typemap.php:1.5	Sat Feb  1 22:27:16 2003
+++ embed/php-irssi/typemap.php	Sun Feb  2 14:18:27 2003
@@ -15,18 +15,18 @@
   +----------------------------------------------------------------------+
   | Author: Wez Furlong <[email protected]>                                    |
   +----------------------------------------------------------------------+
-  $Id: typemap.php,v 1.5 2003/02/02 03:27:16 wez Exp $
+  $Id: typemap.php,v 1.6 2003/02/02 19:18:27 wez Exp $
 */
 
 /* This array describes the functions that can be used to convert between
  * irssi and php/ze types */
 
 $objects_to_scan = array(
-	"src/core/server-rec.h"			=> array("SERVER_REC",	"server"),
-	"src/core/channel-rec.h"		=> array("CHANNEL_REC",	"channel", array("PHP_IRSSI_INH_WI_ITEM")),
-	"src/core/nick-rec.h"			=> array("NICK_REC",	"nick"),
-	"src/core/window-item-rec.h"	=> array("WI_ITEM_REC", "windowitem"),
-	"src/fe-common/core/fe-windows.h" => array("WINDOW_REC", "window", null, "/struct _WINDOW_REC {([^}]+)}/sm"),
+	"src/core/server-rec.h"			=> array("SERVER_REC",	"irssi_server"),
+	"src/core/channel-rec.h"		=> array("CHANNEL_REC",	"irssi_channel", array("PHP_IRSSI_INH_WI_ITEM")),
+	"src/core/nick-rec.h"			=> array("NICK_REC",	"irssi_nick"),
+	"src/core/window-item-rec.h"	=> array("WI_ITEM_REC", "irssi_windowitem"),
+	"src/fe-common/core/fe-windows.h" => array("WINDOW_REC", "irssi_window", null, "/struct _WINDOW_REC {([^}]+)}/sm"),
 
 	);
 
Index: embed/php-irssi/window.c
diff -u embed/php-irssi/window.c:1.1 embed/php-irssi/window.c:1.2
--- embed/php-irssi/window.c:1.1	Sat Feb  1 22:27:16 2003
+++ embed/php-irssi/window.c	Sun Feb  2 14:18:27 2003
@@ -14,7 +14,7 @@
   +----------------------------------------------------------------------+
   | Author: Wez Furlong <[email protected]>                                    |
   +----------------------------------------------------------------------+
-  $Id: window.c,v 1.1 2003/02/02 03:27:16 wez Exp $
+  $Id: window.c,v 1.2 2003/02/02 19:18:27 wez Exp $
 */
 
 #include "php-irssi.h"
@@ -85,12 +85,28 @@
 		WRONG_PARAM_COUNT;
 	}
 
-	RETVAL_STRING(window_get_active_name(window), 1);
+	RETVAL_STRING((char*)window_get_active_name(window), 1);
+}
+
+PHP_FUNCTION(window_print_text)
+{
+	char *text;
+	long text_len;
+	long level;
+	WINDOW_FETCH();
+
+	if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ls", &level,
+				&text, &text_len)) {
+		return;
+	}
+
+	printtext_window(window, level, "%s", text);
 }
 
 function_entry php_irssi_WINDOW_funcs[] = {
 	PHP_NAMED_FE(set_active,		PHP_FN(window_set_active), NULL)
 	PHP_NAMED_FE(get_active_name,	PHP_FN(window_get_active_name), NULL)
+	PHP_NAMED_FE(print_text,		PHP_FN(window_print_text), NULL)
 	NULL, NULL, NULL
 };
 

--wez1044213508--